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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/fesm2022/{acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs → acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs} +260 -80
  2. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-CU2FvMTx.mjs.map +1 -0
  3. package/fesm2022/{acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs → acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs} +14 -19
  4. package/fesm2022/acorex-modules-ai-management-agent.entity-CUO9Jczk.mjs.map +1 -0
  5. package/fesm2022/{acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs → acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs} +52 -8
  6. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-daTGJ1Rd.mjs.map +1 -0
  7. package/fesm2022/{acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs → acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs} +49 -7
  8. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-Cmprtps-.mjs.map +1 -0
  9. package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs} +2 -2
  10. package/fesm2022/{acorex-modules-ai-management-assist.entity-DX2U9sd5.mjs.map → acorex-modules-ai-management-assist.entity-C1nM_x4Z.mjs.map} +1 -1
  11. package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs → acorex-modules-ai-management-index-CjTjfydP.mjs} +2 -2
  12. package/fesm2022/{acorex-modules-ai-management-index-KX3TVRXr.mjs.map → acorex-modules-ai-management-index-CjTjfydP.mjs.map} +1 -1
  13. package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs} +2 -2
  14. package/fesm2022/{acorex-modules-ai-management-model.entity-BeuDUahR.mjs.map → acorex-modules-ai-management-model.entity-CPHxj8h7.mjs.map} +1 -1
  15. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-ai-management-open-ai-endpoint.entity-D-9unl6i.mjs.map → acorex-modules-ai-management-open-ai-endpoint.entity-a6MjMiXF.mjs.map} +1 -1
  17. package/fesm2022/acorex-modules-ai-management.mjs +1 -1
  18. package/fesm2022/{acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs → acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs} +509 -436
  19. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-DniyhnPK.mjs.map +1 -0
  20. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs} +2 -2
  21. package/fesm2022/{acorex-modules-assessment-management-assessment-case.entity-Ds8pRzvE.mjs.map → acorex-modules-assessment-management-assessment-case.entity-BggEmLhz.mjs.map} +1 -1
  22. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs} +2 -2
  23. package/fesm2022/{acorex-modules-assessment-management-assessment-session.entity-tq1Q4wkS.mjs.map → acorex-modules-assessment-management-assessment-session.entity-CWR1QZv1.mjs.map} +1 -1
  24. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs} +2 -2
  25. package/fesm2022/{acorex-modules-assessment-management-fill-assessment-session.command-yf0PnWC0.mjs.map → acorex-modules-assessment-management-fill-assessment-session.command-qajn_XDh.mjs.map} +1 -1
  26. package/fesm2022/{acorex-modules-assessment-management-index-B2SncZAW.mjs → acorex-modules-assessment-management-index-B2l5Se1l.mjs} +25 -26
  27. package/fesm2022/acorex-modules-assessment-management-index-B2l5Se1l.mjs.map +1 -0
  28. package/fesm2022/{acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs → acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs} +10 -11
  29. package/fesm2022/acorex-modules-assessment-management-preview-question.command-BCS477_k.mjs.map +1 -0
  30. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs} +2 -2
  31. package/fesm2022/{acorex-modules-assessment-management-preview-questionnaire.command-BrI5gFtx.mjs.map → acorex-modules-assessment-management-preview-questionnaire.command-C8lyuqE-.mjs.map} +1 -1
  32. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs} +2 -2
  33. package/fesm2022/{acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-XD5IJpvW.mjs.map → acorex-modules-assessment-management-question-bank-interface-editor-widget-edit.component-DtowOBLy.mjs.map} +1 -1
  34. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs} +2 -2
  35. package/fesm2022/{acorex-modules-assessment-management-question-bank-item.entity-CZ32sQ9M.mjs.map → acorex-modules-assessment-management-question-bank-item.entity-Br7XcU_u.mjs.map} +1 -1
  36. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs} +2 -2
  37. package/fesm2022/{acorex-modules-assessment-management-questionnaire-calculation.entity-C7gf4s1y.mjs.map → acorex-modules-assessment-management-questionnaire-calculation.entity-DNUf5RD3.mjs.map} +1 -1
  38. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs} +3 -3
  39. package/fesm2022/{acorex-modules-assessment-management-questionnaire-viewer-popup.component-BZyIlYWg.mjs.map → acorex-modules-assessment-management-questionnaire-viewer-popup.component-BdBKHvHP.mjs.map} +1 -1
  40. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs} +3 -3
  41. package/fesm2022/{acorex-modules-assessment-management-questionnaire.entity-CmmThk2f.mjs.map → acorex-modules-assessment-management-questionnaire.entity-B5aP_P4z.mjs.map} +1 -1
  42. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs} +2 -2
  43. package/fesm2022/{acorex-modules-assessment-management-save-questionnaire-questions.command-GLqvK8wB.mjs.map → acorex-modules-assessment-management-save-questionnaire-questions.command-C3Qt5fmY.mjs.map} +1 -1
  44. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs} +2 -2
  45. package/fesm2022/{acorex-modules-assessment-management-view-session-answers.command-CU1TVonZ.mjs.map → acorex-modules-assessment-management-view-session-answers.command-C9VS-Tp3.mjs.map} +1 -1
  46. package/fesm2022/acorex-modules-assessment-management.mjs +1 -1
  47. package/fesm2022/{acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs → acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs} +519 -81
  48. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-F7Ok5dhs.mjs.map +1 -0
  49. package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-asset-management-asset-system-history.entity-CSCwWY_F.mjs.map → acorex-modules-asset-management-asset-system-history.entity-D1HZG9wO.mjs.map} +1 -1
  51. package/fesm2022/{acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs → acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs} +60 -38
  52. package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-DDh5RK5M.mjs.map +1 -0
  53. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs} +2 -2
  54. package/fesm2022/{acorex-modules-asset-management-asset-type-section-component.entity-6Rauu2Z1.mjs.map → acorex-modules-asset-management-asset-type-section-component.entity-em7lQ1eu.mjs.map} +1 -1
  55. package/fesm2022/{acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs → acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs} +6 -48
  56. package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-BtcNy6Ra.mjs.map +1 -0
  57. package/fesm2022/{acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs → acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs} +53 -100
  58. package/fesm2022/acorex-modules-asset-management-asset-type.entity-DWhrFVFI.mjs.map +1 -0
  59. package/fesm2022/{acorex-modules-asset-management-asset.entity-CamZGWTM.mjs → acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs} +66 -56
  60. package/fesm2022/acorex-modules-asset-management-asset.entity-BEjXfkPD.mjs.map +1 -0
  61. package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs} +2 -2
  62. package/fesm2022/{acorex-modules-asset-management-assetSystem.entity-Dq2ASslk.mjs.map → acorex-modules-asset-management-assetSystem.entity-CJCVALaz.mjs.map} +1 -1
  63. package/fesm2022/acorex-modules-asset-management.mjs +1 -1
  64. package/fesm2022/acorex-modules-common.mjs +38 -41
  65. package/fesm2022/acorex-modules-common.mjs.map +1 -1
  66. package/fesm2022/acorex-modules-conversation.mjs +1046 -249
  67. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  68. package/fesm2022/acorex-modules-dashboard-management.mjs +1098 -706
  69. package/fesm2022/acorex-modules-dashboard-management.mjs.map +1 -1
  70. package/fesm2022/acorex-modules-data-management.mjs +63 -35
  71. package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
  72. package/fesm2022/acorex-modules-document-management.mjs +101 -57
  73. package/fesm2022/acorex-modules-document-management.mjs.map +1 -1
  74. package/fesm2022/{acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs → acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs} +48 -21
  75. package/fesm2022/acorex-modules-human-capital-management-employee.entity-BmF6_P6d.mjs.map +1 -0
  76. package/fesm2022/acorex-modules-human-capital-management.mjs +1 -1
  77. package/fesm2022/acorex-modules-location-management.mjs +18 -99
  78. package/fesm2022/acorex-modules-location-management.mjs.map +1 -1
  79. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs +7137 -0
  80. package/fesm2022/acorex-modules-maintenance-management-acorex-modules-maintenance-management-DtODwbIN.mjs.map +1 -0
  81. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs} +2 -2
  82. package/fesm2022/{acorex-modules-maintenance-management-failure-effect.entity-DQJJtCqU.mjs.map → acorex-modules-maintenance-management-failure-effect.entity-BtczD4wu.mjs.map} +1 -1
  83. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs} +2 -2
  84. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-asset-type.entity-gg2fpT2N.mjs.map → acorex-modules-maintenance-management-failure-mode-asset-type.entity-CDUdEH-e.mjs.map} +1 -1
  85. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs} +2 -2
  86. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-mechanism.entity-CHUaAnID.mjs.map → acorex-modules-maintenance-management-failure-mode-mechanism.entity-re5UvGp7.mjs.map} +1 -1
  87. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs} +2 -2
  88. package/fesm2022/{acorex-modules-maintenance-management-failure-mode-solution.entity-B93x1uP_.mjs.map → acorex-modules-maintenance-management-failure-mode-solution.entity-nbFz4LAe.mjs.map} +1 -1
  89. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs} +2 -2
  90. package/fesm2022/{acorex-modules-maintenance-management-failure-register-cause.entity-McM3l12Q.mjs.map → acorex-modules-maintenance-management-failure-register-cause.entity-CW2NlX59.mjs.map} +1 -1
  91. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs} +2 -2
  92. package/fesm2022/{acorex-modules-maintenance-management-failure-register-effect.entity-_jjy1oeg.mjs.map → acorex-modules-maintenance-management-failure-register-effect.entity-Bi5XgfoL.mjs.map} +1 -1
  93. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs} +2 -2
  94. package/fesm2022/{acorex-modules-maintenance-management-failure-register-mechanism.entity-5CmdhowW.mjs.map → acorex-modules-maintenance-management-failure-register-mechanism.entity-DcW6sK01.mjs.map} +1 -1
  95. package/fesm2022/{acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs → acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs} +3 -3
  96. package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-CUxVZo0w.mjs.map +1 -0
  97. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs} +2 -2
  98. package/fesm2022/{acorex-modules-maintenance-management-failure-severity.entity-BIZxoVIS.mjs.map → acorex-modules-maintenance-management-failure-severity.entity-B7LBO-UA.mjs.map} +1 -1
  99. package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs +443 -0
  100. package/fesm2022/acorex-modules-maintenance-management-maintenance-template.entity-D6ATa-HR.mjs.map +1 -0
  101. package/fesm2022/acorex-modules-maintenance-management.mjs +1 -3579
  102. package/fesm2022/acorex-modules-maintenance-management.mjs.map +1 -1
  103. package/fesm2022/acorex-modules-notification-management.mjs +11 -5
  104. package/fesm2022/acorex-modules-notification-management.mjs.map +1 -1
  105. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs +356 -0
  106. package/fesm2022/acorex-modules-organization-management-acorex-modules-organization-management-BrVNMCi_.mjs.map +1 -0
  107. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs +181 -0
  108. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-CO8jMwVJ.mjs.map +1 -0
  109. package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs +359 -0
  110. package/fesm2022/acorex-modules-organization-management-business-unit.entity-WiTemBLu.mjs.map +1 -0
  111. package/fesm2022/{acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs → acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs} +33 -29
  112. package/fesm2022/acorex-modules-organization-management-chart.entity-D6Y7kZfM.mjs.map +1 -0
  113. package/fesm2022/{acorex-modules-organization-management-company.entity-BohMJQNi.mjs → acorex-modules-organization-management-company.entity-wpNiu8g3.mjs} +6 -8
  114. package/fesm2022/acorex-modules-organization-management-company.entity-wpNiu8g3.mjs.map +1 -0
  115. package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs +48 -0
  116. package/fesm2022/acorex-modules-organization-management-data-source-evaluator-scope.provider-BrKtojM9.mjs.map +1 -0
  117. package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs +59 -0
  118. package/fesm2022/acorex-modules-organization-management-entity.provider-B0XbUW1I.mjs.map +1 -0
  119. package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs +19 -0
  120. package/fesm2022/acorex-modules-organization-management-feature-definition.provider-D7t_nNNk.mjs.map +1 -0
  121. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs} +2 -2
  122. package/fesm2022/{acorex-modules-organization-management-job-definition.entity-S9Jlmr-o.mjs.map → acorex-modules-organization-management-job-definition.entity-Cb6zEf65.mjs.map} +1 -1
  123. package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs +95 -0
  124. package/fesm2022/acorex-modules-organization-management-job-level.datasource-RDGmLrqD.mjs.map +1 -0
  125. package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs +274 -0
  126. package/fesm2022/acorex-modules-organization-management-job-level.entity-oedF18Xm.mjs.map +1 -0
  127. package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs +193 -0
  128. package/fesm2022/acorex-modules-organization-management-menu.provider-DAKmAxld.mjs.map +1 -0
  129. package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs +1081 -0
  130. package/fesm2022/acorex-modules-organization-management-org-chart.page-mHV0AWGZ.mjs.map +1 -0
  131. package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs +77 -0
  132. package/fesm2022/acorex-modules-organization-management-permission-definition.provider-Be8mvS_Z.mjs.map +1 -0
  133. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs +56 -0
  134. package/fesm2022/acorex-modules-organization-management-permission.keys-DwZNBc12.mjs.map +1 -0
  135. package/fesm2022/{acorex-modules-organization-management-position.entity-DLPufeWz.mjs → acorex-modules-organization-management-position.entity-BveMCKMd.mjs} +108 -106
  136. package/fesm2022/acorex-modules-organization-management-position.entity-BveMCKMd.mjs.map +1 -0
  137. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs} +25 -29
  138. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-ivufxxLL.mjs.map +1 -0
  139. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs} +2 -2
  140. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix-widget-view.component-CfRBMxLk.mjs.map → acorex-modules-organization-management-responsibilities-matrix-widget-view.component-DptdG1Nt.mjs.map} +1 -1
  141. package/fesm2022/{acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs → acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs} +14 -21
  142. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-qO33kvo_.mjs.map +1 -0
  143. package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs +137 -0
  144. package/fesm2022/acorex-modules-organization-management-responsibility-level.entity-zOjyjm5H.mjs.map +1 -0
  145. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs} +2 -2
  146. package/fesm2022/{acorex-modules-organization-management-responsibility.entity-CMmr3wJa.mjs.map → acorex-modules-organization-management-responsibility.entity-jWEiPi5-.mjs.map} +1 -1
  147. package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs +228 -0
  148. package/fesm2022/acorex-modules-organization-management-settings.provider-D3ged-4h.mjs.map +1 -0
  149. package/fesm2022/{acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs → acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs} +68 -8
  150. package/fesm2022/acorex-modules-organization-management-team-member-role.entity-D9TZoACE.mjs.map +1 -0
  151. package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs} +2 -2
  152. package/fesm2022/{acorex-modules-organization-management-team-member.entity-8sTjn5Jn.mjs.map → acorex-modules-organization-management-team-member.entity-Bz4o7c3d.mjs.map} +1 -1
  153. package/fesm2022/{acorex-modules-organization-management-team.entity-CGR0UlYl.mjs → acorex-modules-organization-management-team.entity-uVffZPeg.mjs} +100 -37
  154. package/fesm2022/acorex-modules-organization-management-team.entity-uVffZPeg.mjs.map +1 -0
  155. package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs +48 -0
  156. package/fesm2022/acorex-modules-organization-management-widget-definition.provider-D4yjuqwx.mjs.map +1 -0
  157. package/fesm2022/acorex-modules-organization-management.mjs +1 -2216
  158. package/fesm2022/acorex-modules-organization-management.mjs.map +1 -1
  159. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs +40 -0
  160. package/fesm2022/acorex-modules-platform-dev-tools-menu.provider-BFueKnuF.mjs.map +1 -0
  161. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs +33 -0
  162. package/fesm2022/acorex-modules-platform-dev-tools-settings.provider-CGyf-4eq.mjs.map +1 -0
  163. package/fesm2022/acorex-modules-platform-dev-tools.mjs +14 -94
  164. package/fesm2022/acorex-modules-platform-dev-tools.mjs.map +1 -1
  165. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs → acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs} +107 -107
  166. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BjKrHoBg.mjs.map +1 -0
  167. package/fesm2022/acorex-modules-report-management.mjs +1 -1
  168. package/fesm2022/{acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs → acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs} +65 -76
  169. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BoUiTlmu.mjs.map +1 -0
  170. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs} +2 -2
  171. package/fesm2022/{acorex-modules-reservation-management-reservation-class-status.entity-Bg7d38wV.mjs.map → acorex-modules-reservation-management-reservation-class-status.entity-D-ZdqKa8.mjs.map} +1 -1
  172. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs} +2 -2
  173. package/fesm2022/{acorex-modules-reservation-management-reservation-resource-type.entity-BK-rLEXi.mjs.map → acorex-modules-reservation-management-reservation-resource-type.entity-zPD-Psml.mjs.map} +1 -1
  174. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs} +2 -2
  175. package/fesm2022/{acorex-modules-reservation-management-reservation-status-transition.entity-2ngXhKAV.mjs.map → acorex-modules-reservation-management-reservation-status-transition.entity-CQ85ZAGF.mjs.map} +1 -1
  176. package/fesm2022/acorex-modules-reservation-management.mjs +1 -1
  177. package/fesm2022/acorex-modules-security-management.mjs +269 -190
  178. package/fesm2022/acorex-modules-security-management.mjs.map +1 -1
  179. package/fesm2022/{acorex-modules-task-management-task-board.page-C1H_GTqy.mjs → acorex-modules-task-management-task-board.page-DA2563QE.mjs} +15 -10
  180. package/fesm2022/acorex-modules-task-management-task-board.page-DA2563QE.mjs.map +1 -0
  181. package/fesm2022/acorex-modules-task-management.mjs +27 -13
  182. package/fesm2022/acorex-modules-task-management.mjs.map +1 -1
  183. package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs +5 -0
  184. package/fesm2022/acorex-modules-workflow-management-WORKFLOW_DEFINITION_ACTIVITIES_PAGE_COMPONENT_KEY-D6q__Ewd.mjs.map +1 -0
  185. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs} +14 -6
  186. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-CDo0QVFy.mjs.map +1 -0
  187. package/fesm2022/{acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs → acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs} +31 -16
  188. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BYJpDQRs.mjs.map +1 -0
  189. package/fesm2022/{acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs → acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs} +10 -12
  190. package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-B3DkgDQb.mjs.map +1 -0
  191. package/fesm2022/{acorex-modules-workflow-management-index-DWIDQsWq.mjs → acorex-modules-workflow-management-index-C9Qc07oK.mjs} +125 -3
  192. package/fesm2022/acorex-modules-workflow-management-index-C9Qc07oK.mjs.map +1 -0
  193. package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs +726 -0
  194. package/fesm2022/acorex-modules-workflow-management-index-D8fjNgQJ.mjs.map +1 -0
  195. package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs +294 -0
  196. package/fesm2022/acorex-modules-workflow-management-index-DMnJRDbq.mjs.map +1 -0
  197. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs +56 -0
  198. package/fesm2022/acorex-modules-workflow-management-save-workflow-definition-activities.command-fFO152ni.mjs.map +1 -0
  199. package/fesm2022/{acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs → acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs} +101 -140
  200. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-DqPVpcSv.mjs.map +1 -0
  201. package/fesm2022/{acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs → acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs} +10 -1
  202. package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-sfsoT0is.mjs.map +1 -0
  203. package/fesm2022/{acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs → acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs} +11 -7
  204. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-NpUx0sB5.mjs.map +1 -0
  205. package/fesm2022/acorex-modules-workflow-management.mjs +746 -402
  206. package/fesm2022/acorex-modules-workflow-management.mjs.map +1 -1
  207. package/organization-management/README.md +1 -1
  208. package/package.json +2 -2
  209. package/types/acorex-modules-ai-management.d.ts +64 -16
  210. package/types/acorex-modules-asset-management.d.ts +115 -58
  211. package/types/acorex-modules-common.d.ts +2 -4
  212. package/types/acorex-modules-dashboard-management.d.ts +226 -109
  213. package/types/acorex-modules-data-management.d.ts +2 -2
  214. package/types/acorex-modules-document-management.d.ts +1 -2
  215. package/types/acorex-modules-human-capital-management.d.ts +6 -0
  216. package/types/acorex-modules-maintenance-management.d.ts +561 -41
  217. package/types/acorex-modules-notification-management.d.ts +7 -3
  218. package/types/acorex-modules-organization-management.d.ts +52 -107
  219. package/types/acorex-modules-security-management.d.ts +15 -1
  220. package/types/acorex-modules-task-management.d.ts +8 -13
  221. package/types/acorex-modules-workflow-management.d.ts +67 -13
  222. package/fesm2022/acorex-modules-ai-management-acorex-modules-ai-management-WuqoH4OL.mjs.map +0 -1
  223. package/fesm2022/acorex-modules-ai-management-agent.entity-DK9GNMdR.mjs.map +0 -1
  224. package/fesm2022/acorex-modules-ai-management-ai-delegated-agent-transcript-popup.component-CWXEW9yL.mjs.map +0 -1
  225. package/fesm2022/acorex-modules-ai-management-assist-delegated-agent-configurator-widget-edit.component-CNKwIqUE.mjs.map +0 -1
  226. package/fesm2022/acorex-modules-assessment-management-acorex-modules-assessment-management-BNK6C-Ng.mjs.map +0 -1
  227. package/fesm2022/acorex-modules-assessment-management-index-B2SncZAW.mjs.map +0 -1
  228. package/fesm2022/acorex-modules-assessment-management-preview-question.command-DPzL8C44.mjs.map +0 -1
  229. package/fesm2022/acorex-modules-asset-management-acorex-modules-asset-management-BDs0ZgD5.mjs.map +0 -1
  230. package/fesm2022/acorex-modules-asset-management-asset-system-type.entity-CcefMT8J.mjs.map +0 -1
  231. package/fesm2022/acorex-modules-asset-management-asset-type-section.entity-r_H1QGwp.mjs.map +0 -1
  232. package/fesm2022/acorex-modules-asset-management-asset-type.entity-cWVqpbHH.mjs.map +0 -1
  233. package/fesm2022/acorex-modules-asset-management-asset.entity-CamZGWTM.mjs.map +0 -1
  234. package/fesm2022/acorex-modules-human-capital-management-employee.entity-BRpqFRuI.mjs.map +0 -1
  235. package/fesm2022/acorex-modules-maintenance-management-failure-register.entity-D_lQrda5.mjs.map +0 -1
  236. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs +0 -91
  237. package/fesm2022/acorex-modules-organization-management-business-unit-type.entity-C-EKX6Oy.mjs.map +0 -1
  238. package/fesm2022/acorex-modules-organization-management-chart.entity-bRxA8XHZ.mjs.map +0 -1
  239. package/fesm2022/acorex-modules-organization-management-company.entity-BohMJQNi.mjs.map +0 -1
  240. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs +0 -784
  241. package/fesm2022/acorex-modules-organization-management-org-chart.page-eRTHzLDQ.mjs.map +0 -1
  242. package/fesm2022/acorex-modules-organization-management-position.entity-DLPufeWz.mjs.map +0 -1
  243. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix-widget-edit.component-mMZywr0X.mjs.map +0 -1
  244. package/fesm2022/acorex-modules-organization-management-responsibilities-matrix.component-B06t1G1E.mjs.map +0 -1
  245. package/fesm2022/acorex-modules-organization-management-team-member-role.entity-CZ4MibH4.mjs.map +0 -1
  246. package/fesm2022/acorex-modules-organization-management-team.entity-CGR0UlYl.mjs.map +0 -1
  247. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-DPSNAAct.mjs.map +0 -1
  248. package/fesm2022/acorex-modules-reservation-management-acorex-modules-reservation-management-BMemqW2V.mjs.map +0 -1
  249. package/fesm2022/acorex-modules-task-management-task-board.page-C1H_GTqy.mjs.map +0 -1
  250. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-column.component-C8lgSjfc.mjs.map +0 -1
  251. package/fesm2022/acorex-modules-workflow-management-activity-command-configurator-widget-edit.component-BGUPxGXP.mjs.map +0 -1
  252. package/fesm2022/acorex-modules-workflow-management-activity-definition.entity-Bvs1OfE_.mjs.map +0 -1
  253. package/fesm2022/acorex-modules-workflow-management-index-DWIDQsWq.mjs.map +0 -1
  254. package/fesm2022/acorex-modules-workflow-management-workflow-definition.entity-aJou58ED.mjs.map +0 -1
  255. package/fesm2022/acorex-modules-workflow-management-workflow-instance.entity-Cq7LE7u5.mjs.map +0 -1
  256. package/fesm2022/acorex-modules-workflow-management-workflow-task-popover.component-CIakASVR.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-document-management.mjs","sources":["../../../../libs/modules/document-management/src/lib/const.ts","../../../../libs/modules/document-management/src/lib/manifest.ts","../../../../libs/modules/document-management/src/lib/features.keys.ts","../../../../libs/modules/document-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/document-management/src/lib/permission.keys.ts","../../../../libs/modules/document-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/document-management/src/lib/menu.keys.ts","../../../../libs/modules/document-management/src/lib/menu.provider.ts","../../../../libs/modules/document-management/src/lib/entity.provider.ts","../../../../libs/modules/document-management/src/lib/search-command.provider.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/image.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/video.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/document.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/audio.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/archive.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/code.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-column.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-designer.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-edit.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-view.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-widget.config.ts","../../../../libs/modules/document-management/src/lib/features/file-type/file-type.module.ts","../../../../libs/modules/document-management/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget.config.ts","../../../../libs/modules/document-management/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget-edit.component.ts","../../../../libs/modules/document-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/document-management/src/lib/entities/document/document.entity.ts","../../../../libs/modules/document-management/src/lib/entities/document/document.types.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.entity.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.service.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.module.ts","../../../../libs/modules/document-management/src/lib/entities/folder/folder.entity.ts","../../../../libs/modules/document-management/src/lib/entities/index.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-management.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-metadata-schema.util.ts","../../../../libs/modules/document-management/src/lib/document-metadata-ocr.settings.keys.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-metadata-ai-prefill.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/services/document-dialog.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/services/document-attachments.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-manager.service.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/settings.keys.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.viewmodel.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.html","../../../../libs/modules/document-management/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.ts","../../../../libs/modules/document-management/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.html","../../../../libs/modules/document-management/src/lib/features/drive-choose/slots/file-uploader-widget-extension/upload-from-drive.hook.ts","../../../../libs/modules/document-management/src/lib/features/drive-choose/drive-choose.module.ts","../../../../libs/modules/document-management/src/lib/features/workflow/upload/upload.workflow.ts","../../../../libs/modules/document-management/src/lib/features/document-plugin/document.plugin.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.html","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.ts","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.html","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page-component.provider.ts","../../../../libs/modules/document-management/src/lib/features/shared/attachments-upload.middleware.ts","../../../../libs/modules/document-management/src/lib/settings.provider.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-file-uploader.widget.plugin.ts","../../../../libs/modules/document-management/src/lib/document-management.module.ts","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.ts","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.html","../../../../libs/modules/document-management/src/acorex-modules-document-management.ts"],"sourcesContent":["const config = {\n i18n: 'document-management',\n};\nexport const RootConfig = {\n config,\n module: {\n module: 'DocumentManagement',\n name: 'DocumentManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-books',\n },\n entities: {\n folder: {\n name: 'Folder',\n title: `@${config.i18n}:entities.folder.title`,\n titlePlural: `@${config.i18n}:entities.folder.title-plural`,\n icon: 'fa-light fa-folder',\n },\n document: {\n name: 'Document',\n title: `@${config.i18n}:entities.document.title`,\n titlePlural: `@${config.i18n}:entities.document.title-plural`,\n icon: 'fa-light fa-file',\n },\n documentType: {\n name: 'DocumentType',\n title: `@${config.i18n}:entities.document-type.title`,\n titlePlural: `@${config.i18n}:entities.document-type.title-plural`,\n icon: 'fa-light fa-books',\n },\n documentShortcut: {\n name: 'DocumentShortcut',\n title: `@${config.i18n}:entities.document-shortcut.title`,\n titlePlural: `@${config.i18n}:entities.document-shortcut.title-plural`,\n icon: 'fa-light fa-up-right-from-square',\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Document Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const DocumentManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n // Module dependencies\n dependencies: ['DataManagement'],\n};\n\n//#endregion\n\n","export const AXPDocumentManagementFeatureKeys = {\n MaxSizeStorage: 'DocumentManagement:Feature:max-size-storage',\n} as const;\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport { AXPDocumentManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Document Management Feature Definition Provider.\n * Provides feature definitions for the Document Management module.\n */\n@Injectable()\nexport class AXPDocumentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Max Size Storage feature\n context.addFeature(AXPDocumentManagementFeatureKeys.MaxSizeStorage, {\n title: '@document-management:features.max-size-storage.title',\n description: '@document-management:features.max-size-storage.description',\n defaultValue: 1073741824, // 1GB in bytes (default)\n type: 'number',\n interface: {\n type: 'number-editor',\n options: {\n min: 1048576, // 1MB minimum\n max: 1099511627776, // 1TB maximum\n step: 1048576, // 1MB step\n },\n },\n });\n //\n }\n}\n\n//#endregion\n","export const AXMPermissionsKeys = {\n DocumentManagement: {\n Management: 'DocumentManagement:Permission:Management',\n DocumentType: {\n Management: 'DocumentManagement:Permission:DocumentType.Management',\n View: 'DocumentManagement:Permission:DocumentType.View',\n Edit: 'DocumentManagement:Permission:DocumentType.Edit',\n Delete: 'DocumentManagement:Permission:DocumentType.Delete',\n Create: 'DocumentManagement:Permission:DocumentType.Create',\n },\n Driver: {\n Management: 'DocumentManagement:Permission:Driver.Management',\n View: 'DocumentManagement:Permission:Driver.View',\n Edit: 'DocumentManagement:Permission:Driver.Edit',\n Delete: 'DocumentManagement:Permission:Driver.Delete',\n Create: 'DocumentManagement:Permission:Driver.Create',\n },\n },\n};\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {\n }\n\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n\n const trans = async (key: string) => await this.translateService.translateAsync(`@document-management:permissions.${key}`);\n\n const keys = AXMPermissionsKeys.DocumentManagement;\n\n context.addGroup(RootConfig.module.name, await trans('manage.title'), await trans('manage.description'))\n // \n .addPermission(keys.DocumentType.Management, await trans('document-type.manage.title'), await trans('document-type.manage.description'))\n .addChild(keys.DocumentType.View, await trans('document-type.view.title'), await trans('document-type.view.description'))\n .addChild(keys.DocumentType.Edit, await trans('document-type.edit.title'), await trans('document-type.edit.description'))\n .addChild(keys.DocumentType.Delete, await trans('document-type.delete.title'), await trans('document-type.delete.description'))\n .addChild(keys.DocumentType.Create, await trans('document-type.create.title'), await trans('document-type.create.description'))\n .endPermission()\n //\n .addPermission(keys.Driver.Management, await trans('driver.manage.title'), await trans('driver.manage.description'))\n .addChild(keys.Driver.View, await trans('driver.view.title'), await trans('driver.view.description'))\n .addChild(keys.Driver.Edit, await trans('driver.edit.title'), await trans('driver.edit.description'))\n .addChild(keys.Driver.Delete, await trans('driver.delete.title'), await trans('driver.delete.description'))\n .addChild(keys.Driver.Create, await trans('driver.create.title'), await trans('driver.create.description'))\n .endPermission()\n //\n\n }\n}\n","export const AXPDocumentManagementMenuKeys = {\n DocumentTypes: 'document-management:menu:document-types',\n TenantDrive: 'document-management:drive:tenant',\n UserDrive: 'document-management:drive:user',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPDocumentManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n@Injectable()\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n const scope = RootConfig.config.i18n;\n\n // My Drive: root level, after Task Board (priority 1)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.UserDrive,\n priority: 1,\n text: `@${scope}:menus.my-drive.title`,\n icon: 'fa-light fa-folder-open',\n path: `${appName}/drive/user`,\n data: { scope: 'user' },\n policy: {\n features: [module.name],\n },\n },\n ]);\n\n // Tenant Documents: root under MODULES section (priority 9001)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.TenantDrive,\n priority: 9001,\n text: `@${scope}:menus.tenant-documents.title`,\n icon: RootConfig.entities.document.icon,\n path: `${appName}/drive/tenant`,\n data: { scope: 'tenant' },\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.DocumentManagement.Driver.Management],\n },\n },\n ]);\n\n // Documents group under Configuration/Data and Content\n context.find(AXPCommonMenuKeys.DataAndContent).addItems([\n {\n name: AXPDocumentManagementMenuKeys.DocumentTypes,\n text: RootConfig.entities.documentType.title,\n path: this.entityService.createPath(module.name, RootConfig.entities.documentType.name),\n icon: RootConfig.entities.documentType.icon,\n priority: 1,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.DocumentManagement.DocumentType.Management],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\n private injector = inject(Injector);\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.documentType.name:\n return (await import('./entities')).documentTypeFactory(this.injector);\n case RootConfig.entities.documentShortcut.name:\n return (await import('./entities/document-shortcut/document-shortcut.entity')).documentShortcutEntityFactory(\n this.injector,\n );\n case RootConfig.entities.folder.name:\n return (await import('./entities/folder/folder.entity')).folderEntityFactory(this.injector);\n case RootConfig.entities.document.name:\n return (await import('./entities/document/document.entity')).documentEntityFactory(this.injector);\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n const entities = [RootConfig.entities.documentType, RootConfig.entities.documentShortcut] as { name: string }[];\n return Promise.resolve(entities.map((e) => ({ name: e.name, module: m })));\n }\n}\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex/platform/common';\nimport { RootConfig } from './const';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-document-type',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.documentType.name}`,\n entityInfo: { name: RootConfig.entities.documentType.name, module: RootConfig.module.name, title: RootConfig.entities.documentType.title },\n titleKey: '@document-management:permissions.document-type.create.title',\n descriptionKey: '@document-management:permissions.document-type.create.description',\n icon: RootConfig.entities.documentType.icon,\n }),\n ];\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nexport class AXMImageFileTypeProvider implements AXPFileTypeInfoProvider {\n\n\n\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'image',\n title: 'Image',\n icon: 'fa-light fa-image ax-text-purple-500',\n extensions: [\n {\n name: 'jpg',\n title: 'JPEG',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [],\n },\n {\n name: 'png',\n title: 'PNG',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [],\n },\n {\n name: 'gif',\n title: 'GIF',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [\n {\n name: 'duration',\n title: 'Duration',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {\n validations: [\n {\n rule: \"required\"\n }\n ]\n },\n path: 'gift.duration',\n };\n },\n },\n ],\n },\n ],\n meta: [\n {\n name: 'width',\n title: 'Width',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {\n validations: [\n {\n rule: \"required\"\n }\n ]\n },\n path: 'image.width',\n };\n },\n },\n {\n name: 'height',\n title: 'Height',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {},\n path: 'image.height',\n };\n },\n },\n ],\n },\n ];\n }\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMVideoFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'video',\n title: 'Video',\n icon: 'fa-light fa-video ax-text-red-500',\n extensions: [\n {\n name: 'mp4',\n title: 'MP4',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n {\n name: 'avi',\n title: 'AVI',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n {\n name: 'mkv',\n title: 'MKV',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n ],\n },\n ];\n }\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMDocumentFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'document',\n title: 'Document',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n extensions: [\n {\n name: 'pdf',\n title: 'PDF',\n icon: 'fa-light fa-file-pdf ax-text-red-600',\n meta: [],\n },\n {\n name: 'doc',\n title: 'Word',\n icon: 'fa-light fa-file-word ax-text-blue-700',\n meta: [],\n },\n {\n name: 'docx',\n title: 'Word',\n icon: 'fa-light fa-file-word ax-text-blue-700',\n meta: [],\n },\n {\n name: 'xls',\n title: 'Excel',\n icon: 'fa-light fa-file-excel ax-text-green-700',\n meta: [],\n },\n {\n name: 'xlsx',\n title: 'Excel',\n icon: 'fa-light fa-file-excel ax-text-green-700',\n meta: [],\n },\n {\n name: 'ppt',\n title: 'PowerPoint',\n icon: 'fa-light fa-file-powerpoint ax-text-orange-700',\n meta: [],\n },\n {\n name: 'pptx',\n title: 'PowerPoint',\n icon: 'fa-light fa-file-powerpoint ax-text-orange-700',\n meta: [],\n },\n {\n name: 'txt',\n title: 'Text',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n meta: [],\n },\n {\n name: 'rtf',\n title: 'Rich Text',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMAudioFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'audio',\n title: 'Audio',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n extensions: [\n {\n name: 'mp3',\n title: 'MP3',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'wav',\n title: 'WAV',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'ogg',\n title: 'OGG',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'm4a',\n title: 'M4A',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'flac',\n title: 'FLAC',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMArchiveFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'archive',\n title: 'Archive',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n extensions: [\n {\n name: 'zip',\n title: 'ZIP',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'rar',\n title: 'RAR',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: '7z',\n title: '7-Zip',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'tar',\n title: 'TAR',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'gz',\n title: 'GZIP',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMCodeFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'code',\n title: 'Code',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n extensions: [\n {\n name: 'js',\n title: 'JavaScript',\n icon: 'fa-light fa-file-code ax-text-yellow-500',\n meta: [],\n },\n {\n name: 'ts',\n title: 'TypeScript',\n icon: 'fa-light fa-file-code ax-text-blue-600',\n meta: [],\n },\n {\n name: 'html',\n title: 'HTML',\n icon: 'fa-light fa-file-code ax-text-orange-600',\n meta: [],\n },\n {\n name: 'css',\n title: 'CSS',\n icon: 'fa-light fa-file-code ax-text-pink-500',\n meta: [],\n },\n {\n name: 'json',\n title: 'JSON',\n icon: 'fa-light fa-file-code ax-text-green-500',\n meta: [],\n },\n {\n name: 'xml',\n title: 'XML',\n icon: 'fa-light fa-file-code ax-text-green-500',\n meta: [],\n },\n {\n name: 'py',\n title: 'Python',\n icon: 'fa-light fa-file-code ax-text-yellow-500',\n meta: [],\n },\n {\n name: 'java',\n title: 'Java',\n icon: 'fa-light fa-file-code ax-text-red-500',\n meta: [],\n },\n {\n name: 'cpp',\n title: 'C++',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n meta: [],\n },\n {\n name: 'cs',\n title: 'C#',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetColumnComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetDesignerComponent extends AXPValueWidgetComponent<any> { }\n","import { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPFileType, AXPFileTypeProviderService } from '@acorex/platform/common';\nimport {\n AXPValueWidgetComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport get from 'lodash-es/get';\nimport set from 'lodash-es/set';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n template: ` <div>\n <ax-select-box\n #dd\n [dataSource]=\"dataSource\"\n valueField=\"name\"\n textField=\"title\"\n [multiple]=\"true\"\n [ngModel]=\"getValue()?.selectedItems\"\n (onValueChanged)=\"handleValueChange($event)\"\n >\n </ax-select-box>\n <div class=\"ax-py-3\"></div>\n <axp-widgets-container (onContextChanged)=\"handleOnContextChange($event)\" [context]=\"context()\">\n @if (selectedItemsNotEmpty().length > 0) {\n <ax-collapse-group look=\"fill\">\n @for (item of selectedItemsNotEmpty(); track item.name) {\n <!-- File Types -->\n <ax-collapse [caption]=\"item.title\">\n <div class=\"ax-flex ax-flex-col ax-gap-5\">\n @if (item.meta && item.meta.length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-text [textContent]=\"'Global Meta Data'\" class=\"ax-font-bold ax-text-sm\"></ax-text>\n @for (metaFile of item.meta; track metaFile.name) {\n <!-- File Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(metaFile)\">{{ metaFile.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"getNode(metaFile)\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n }\n @if (item.extensions && item.extensions.length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n @for (ext of item.extensions; track ext.name) {\n <!-- Extensions -->\n @if (ext.meta && ext.meta.length > 0) {\n <ax-text [textContent]=\"ext.title\" class=\"ax-font-bold ax-text-sm\"></ax-text>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n @for (extMeta of ext.meta; track $index) {\n <!-- Extension Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(extMeta)\">{{ extMeta.title }}</ax-label>\n <ng-container\n axp-widget-renderer\n [node]=\"getNode(extMeta)\"\n [mode]=\"'edit'\"\n ></ng-container>\n </ax-form-field>\n }\n </div>\n }\n <!-- End Extension Meta Data -->\n }\n </div>\n <!-- End Extensions -->\n }\n </div>\n </ax-collapse>\n }\n <!-- End File Types -->\n </ax-collapse-group>\n }\n </axp-widgets-container>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXSelectBoxModule,\n FormsModule,\n AXFormModule,\n AXLabelModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n AXCollapseModule,\n ],\n inputs: [],\n})\nexport class AXMFileTypeExtensionWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected fileTypeService = inject(AXPFileTypeProviderService);\n protected dataSource = new AXDataSource<unknown>({\n load: async (_) => {\n try {\n const res = await this.fileTypeService.items();\n const types = res\n .map((item) => {\n const { meta, extensions, ...rest } = item;\n return extensions.map((ext) => {\n const { meta, ...extRest } = ext;\n return {\n ...rest,\n ...extRest,\n name: `${item.name}.${ext.name}`,\n title: `${item.title}/${ext.title}`,\n };\n });\n })\n .flat();\n\n return {\n items: types,\n total: types.length,\n };\n } catch (e) {\n console.log(e);\n }\n return {\n items: [],\n total: 0,\n };\n },\n pageSize: 100,\n });\n\n public selectedItems = signal<AXPFileType[]>(this.getValue()?.selectedItems ?? []);\n public selectedItemsNotEmpty = signal<AXPFileType[]>(\n this.selectedItems().filter((item) => this.hasFields(item)),\n );\n public context = signal<any>(this.getValue()?.context ?? {});\n\n override ngOnInit() {\n super.ngOnInit();\n this.selectedItems.set(this.getValue()?.selectedItems ?? []);\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n this.context.set(this.getValue()?.context ?? {});\n }\n\n protected override outputs(): string[] {\n return ['selectedItems', 'context'];\n }\n\n protected handleOnContextChange(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.setValue({ ...this.getValue(), context: e.data });\n }\n\n protected async handleValueChange(e: AXValueChangedEvent) {\n const selectItems = (e.component as AXSelectBoxComponent).selectedItems as AXPFileType[];\n this.setValue({ ...this.getValue(), selectedItems: selectItems });\n\n const result: { [key: string]: AXPFileType } = {};\n for (const item of selectItems) {\n const type = item.name.split('.')[0];\n const ext = item.name.split('.')[1];\n var fileType = await this.fileTypeService.get(type);\n if (fileType != undefined) {\n const extension = fileType.extensions.find((extension) => extension.name == ext) || { name: ext, title: '' };\n if (extension.meta) {\n for (const meta of extension.meta) {\n if (!get(meta, '__node__')) {\n set(meta, '__node__', typeof meta.interface == 'function' ? await meta.interface() : meta.interface);\n }\n }\n }\n if (fileType.meta) {\n for (const meta of fileType.meta) {\n if (!get(meta, '__node__')) {\n set(meta, '__node__', typeof meta.interface == 'function' ? await meta.interface() : meta.interface);\n }\n }\n }\n if (result[type]) {\n result[type] = {\n ...fileType,\n extensions: [...result[type].extensions, extension],\n };\n } else {\n result[type] = {\n ...fileType,\n extensions: [extension],\n };\n }\n }\n }\n\n this.selectedItems.set(Object.values(result));\n\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n console.log(this.selectedItemsNotEmpty());\n }\n\n protected getNode(meta: any): AXPWidgetNode {\n return get(meta, '__node__');\n }\n\n protected filedIsRequired(meta: any): boolean {\n const node = get(meta, '__node__');\n if (node && node.options && node.options.validations) {\n return node.options.validations.some((validation: any) => validation.rule === 'required');\n }\n return false;\n }\n\n protected hasMetaInExtensions(extensions: any[]): boolean {\n return extensions.some((ext) => ext.meta && ext.meta.length > 0);\n }\n\n protected hasFields(item: AXPFileType): boolean {\n // Check if item has global meta fields\n if (item.meta && item.meta.length > 0) {\n return true;\n }\n\n // Check if any extension has meta fields\n if (item.extensions && item.extensions.length > 0) {\n return this.hasMetaInExtensions(item.extensions);\n }\n return false;\n }\n}\n","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetViewComponent extends AXPValueWidgetComponent<any> { }\n","import { AXP_WIDGETS_ADVANCE_CATEGORY, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXmFileTypeExtensionWidget: AXPWidgetConfig = {\n name: 'file-type-extension',\n title: 'File Type Extension',\n description: 'Uploads and manages files',\n icon: 'fa-light fa-files',\n categories: AXP_WIDGETS_ADVANCE_CATEGORY,\n type: 'editor',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n components: {\n view: {\n component: () =>\n import('./file-type-extension-view.component').then((c) => c.AXMFileTypeExtensionWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n // filter: {\n // component: () => import('./file-type-extension-filter.component').then((c) => c.AXPFileBoxWidgetFilterComponent),\n // },\n column: {\n component: () =>\n import('./file-type-extension-column.component').then((c) => c.AXMFileTypeExtensionWidgetColumnComponent),\n },\n // print: {\n // component: () => import('./file-type-extension-print.component').then((c) => c.AXPFileBoxWidgetPrintComponent),\n // },\n designer: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n fileTypeExtension: 'file-type-extension';\n }\n}\n","import { AXP_FILE_TYPE_INFO_PROVIDER } from '@acorex/platform/common';\nimport { NgModule } from '@angular/core';\nimport {\n AXMArchiveFileTypeProvider,\n AXMAudioFileTypeProvider,\n AXMCodeFileTypeProvider,\n AXMDocumentFileTypeProvider,\n AXMImageFileTypeProvider,\n AXMVideoFileTypeProvider,\n} from './providers';\n\n@NgModule({\n providers: [\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMImageFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMVideoFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMDocumentFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMAudioFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMCodeFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMArchiveFileTypeProvider,\n multi: true,\n },\n ],\n})\nexport class AXMFileTypeModule { } ","import { AXPWidgetConfig } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXmDocumentFileTypeFilterWidget: AXPWidgetConfig = {\n name: 'document-file-type-filter',\n title: 'File Type Filter',\n type: 'filter',\n icon: 'fa-light fa-file',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./document-file-type-filter-widget-edit.component').then(\n (c) => c.AXmDocumentFileTypeFilterWidgetEditComponent,\n ),\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n documentFileTypeFilter: 'document-file-type-filter';\n }\n}\n","import { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\ninterface FileTypeFilterItem {\n name: string;\n title: string;\n icon?: string;\n}\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-w-full\">\n <ax-select-box\n #selectBox\n class=\"ax-w-full\"\n textField=\"title\"\n valueField=\"name\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n <ng-template #itemTemplate let-context>\n @let item = context.data ?? context;\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span class=\"ax-truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXDecoratorModule, AXSelectBoxModule, AXTranslationModule],\n})\nexport class AXmDocumentFileTypeFilterWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected selectBox = viewChild<AXSelectBoxComponent>('selectBox');\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly translateService = inject(AXTranslationService);\n\n protected value = computed(() => this.getValue()?.value);\n\n protected handleValueChange(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n this.setValue({\n value: e.value,\n operation: { type: 'equal' },\n });\n }\n }\n\n protected dataSource = new AXDataSource<FileTypeFilterItem>({\n load: async () => {\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const types = await this.fileTypeService.items();\n const items: FileTypeFilterItem[] = [\n { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' },\n ...types.map((t) => ({ name: t.name, title: t.title, icon: t.icon || 'fa-light fa-file' })),\n ];\n console.log('[DocumentFileTypeFilter] load items', items);\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id);\n if (key === 'all') {\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const allItem = { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' };\n console.log('[DocumentFileTypeFilter] byKey all', allItem);\n return allItem;\n }\n const types = await this.fileTypeService.items();\n const found = types.find((t) => t.name === key);\n if (found) {\n const result = { name: found.name, title: found.title, icon: found.icon || 'fa-light fa-file' };\n console.log('[DocumentFileTypeFilter] byKey found', key, result);\n return result;\n }\n const fallback = { name: key, title: key, icon: 'fa-light fa-file' };\n console.log('[DocumentFileTypeFilter] byKey fallback', key, fallback);\n return fallback;\n },\n pageSize: 100,\n key: 'name',\n });\n\n focus(): void {\n this.selectBox()?.focus();\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXmFileTypeExtensionWidget } from './features/file-type';\nimport { AXmDocumentFileTypeFilterWidget } from './features/drive/widgets/file-type-filter';\n//#endregion\n\n//#region ---- Document Management Widgets Provider ----\n\nconst DOCUMENT_WIDGETS = [AXmFileTypeExtensionWidget, AXmDocumentFileTypeFilterWidget];\n\n@Injectable()\nexport class AXMDocumentManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DOCUMENT_WIDGETS;\n }\n}\n\n//#endregion\n","import { AXPEntity } from '@acorex/platform/common';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n/**\n * Minimal entity definition for Document so the entity registry can resolve\n * DocumentManagement.Document. Used by AXMDocumentService (AXMEntityCrudServiceImpl).\n * No list/form UI; documents are handled by document-explorer.\n */\nexport async function documentEntityFactory(_injector: Injector): Promise<AXPEntity | null> {\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.document.name,\n title: RootConfig.entities.document.title,\n parentKey: 'parentId',\n plugins: [{ name: 'workflow' }],\n formats: {\n individual: RootConfig.entities.document.title,\n plural: RootConfig.entities.document.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [],\n properties: [],\n };\n\n return entityDef;\n}\n","import { AXPEntityModel } from '@acorex/platform/layout/entity';\nimport { AXPFileListItem, AXPMetaData } from '@acorex/platform/core';\n\n/** Document lifecycle status (EDMS-style review workflow). */\nexport type AXMDocumentManagementDocumentStatus =\n | 'draft'\n | 'in-review'\n | 'approved'\n | 'rejected'\n | 'revision-requested';\n\n/** Status value constants for use in code. */\nexport const AXMDocumentManagementDocumentStatusValues = {\n Draft: 'draft' as const,\n InReview: 'in-review' as const,\n Approved: 'approved' as const,\n Rejected: 'rejected' as const,\n RevisionRequested: 'revision-requested' as const,\n} satisfies Record<string, AXMDocumentManagementDocumentStatus>;\n\nexport interface AXMDocumentDto extends AXPEntityModel<string> {\n name: string;\n title: string;\n documentType: AXMDocumentDocDto;\n parentId: string;\n fileInfo: AXPFileListItem;\n description?: string;\n expirationDate?: Date;\n statusId?: AXMDocumentManagementDocumentStatus;\n status?: { id: AXMDocumentManagementDocumentStatus; title?: string };\n version?: number;\n metaDataForm?: AXPMetaData;\n}\n\nexport interface AXMDocumentDocDto {\n id: string;\n name: string;\n title: string;\n}\n","import { AXPEntity, AXPEntityCommandScope, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nexport async function documentTypeFactory(injector: Injector): Promise<AXPEntity | null> {\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.documentType.name,\n title: RootConfig.entities.documentType.title,\n formats: {\n individual: RootConfig.entities.documentType.title,\n plural: RootConfig.entities.documentType.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n plugins: [\n { name: 'history' },\n {\n name: 'meta-data-builder',\n options: {\n display: 'page',\n }\n },\n ],\n relatedEntities: [],\n groups: [\n {\n id: 'basic-info',\n title: RootConfig.entities.documentType.title,\n },\n {\n id: 'management',\n title: `@${i18n}:terms.common.management`,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'basic-info',\n options: {\n sort: {\n enabled: true,\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'basic-info',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'maxSize',\n title: `@${i18n}:terms.document.max-size`,\n groupId: 'basic-info',\n schema: {\n dataType: 'number',\n interface: {\n type: AXPWidgetsCatalog.numberUnit,\n options: {\n textField: 'name',\n valueField: 'value',\n dataSource: [\n {\n name: 'kb',\n value: 'KB',\n calUnit: 1,\n },\n {\n name: 'mb',\n value: 'MB',\n calUnit: 1024,\n },\n {\n name: 'gb',\n value: 'GB',\n calUnit: 1024 * 1024,\n },\n ],\n mainUnit: 'kb',\n },\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'isEncrypted',\n title: `@${i18n}:terms.document.is-encrypted`,\n groupId: 'basic-info',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'enableExpiration',\n title: `@${i18n}:terms.document.enable-expiration`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'requiresReview',\n title: `@${i18n}:terms.document.requires-review`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'enableVersioning',\n title: `@${i18n}:terms.document.enable-versioning`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n disabled: '{{ !!context.eval(\"requiresReview\") }}',\n },\n triggers: [\n {\n event: \"{{ events.context('requiresReview') }}\",\n action: \"{{ context.set('enableVersioning', true) }}\",\n },\n ],\n },\n },\n },\n // {\n // name: 'meta',\n // title: `t(\"metaTitle\", { scope: \"${i18n}\" })`,\n // groupId: 'section',\n // schema: {\n // dataType: 'object',\n // interface: {\n // type: 'meta-selector-editor',\n // },\n // },\n // },\n {\n name: 'type',\n title: `@${i18n}:terms.common.type`,\n groupId: 'basic-info',\n schema: {\n dataType: 'object',\n interface: {\n type: AXPWidgetsCatalog.fileTypeExtension,\n options: {},\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'basic-info',\n },\n {\n id: 'management',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n // {\n // name: 'meta',\n // layout: {\n // positions: {\n // lg: {\n // colSpan: 12,\n // },\n // },\n // },\n // },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'basic-info',\n },\n {\n id: 'management',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'basic-info',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n id: 'management',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n // {\n // name: 'meta',\n // layout: {\n // positions: {\n // lg: {\n // colSpan: 12,\n // },\n // },\n // },\n // },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions({ edit: true })],\n views: [createAllQueryView()],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentManagementDocumentTypeEntityModel } from './document-type.types';\n\nexport abstract class AXMDocumentTypeService extends AXMEntityCrudServiceImpl<\n string,\n AXMDocumentManagementDocumentTypeEntityModel\n> {\n}\n\n@Injectable()\nexport class AXMDocumentTypeServiceImpl extends AXMDocumentTypeService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.documentType.name}`);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { AXMDocumentTypeService, AXMDocumentTypeServiceImpl } from './document-type.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMDocumentTypeService,\n useClass: AXMDocumentTypeServiceImpl,\n },\n ],\n})\nexport class AXMDocumentManagementDocumentTypeEntityModule {}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n/**\n * Minimal entity definition for Folder so the entity registry can resolve\n * DocumentManagement.Folder. Used by AXMFolderService (AXMEntityCrudServiceImpl).\n * No list/form UI; folder tree is handled by document-explorer.\n */\nexport async function folderEntityFactory(_injector: Injector): Promise<AXPEntity | null> {\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.folder.name,\n title: RootConfig.entities.folder.title,\n parentKey: 'parentId',\n formats: {\n individual: RootConfig.entities.folder.title,\n plural: RootConfig.entities.folder.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [],\n properties: [],\n };\n\n return entityDef;\n}\n","// Entity Services\nexport * from './document';\nexport * from './document-type';\nexport * from './folder';\nexport * from './document-shortcut/document-shortcut.types';\n\n// Entity Modules\nexport * from './document-type/document-type.module';\n","import { AXPPlatformScope } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '../../entities';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n@Injectable()\nexport abstract class AXPDocumentManagementService {\n /**\n * Gets the root folder for the given scope.\n * Backend resolves tenant/user from request context (security: client sends only scope).\n */\n abstract getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel>;\n\n /**\n * Gets (or creates) the folder bound to the given entity record.\n * Used by the document/EDMS plugin when viewing an entity single: loads the folder for that record.\n * @param refType Entity type (e.g. \"content-management.promotion\")\n * @param refId Entity record id\n * @returns The folder for this entity record\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel>;\n\n // Document methods\n abstract getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n /**\n * Searches files under a folder tree.\n * When `options.metadataFilters` has entries, the implementation walks the full subtree, optionally\n * narrows by `searchTerm` on the file name, then matches each document's `metaDataForm` (filter key → stored field).\n * Otherwise only the file-name search is applied (recursive).\n */\n abstract searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: Record<string, unknown>; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]>;\n\n abstract findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]>;\n\n // Folder methods\n abstract getFolderPath(folderId: string, stopFolderId?: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n abstract searchFolders(searchTerm: string, rootFolderId: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n // DocumentType methods\n abstract getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto>;\n\n /**\n * Collects unique metadata field definitions across document types.\n * When `documentTypeIds` is omitted, the backend aggregates all types.\n * When `documentTypeIds` is an empty array, an empty list is returned (no types selected).\n * Otherwise only fields from the given document types are included (deduplicated by name).\n */\n abstract getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n}\n","//#region ---- Imports ----\n\nimport type { AXMMetaDataBuilderValue, AXMMetaDataLocalizedString } from '@acorex/modules/data-management';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface DocumentMetadataFieldDescriptor {\n name: string;\n title: AXMMetaDataLocalizedString;\n interfaceType: string;\n}\n\n//#endregion\n\n//#region ---- Field collection ----\n\n/**\n * Flattens metadata selector value into field descriptors for LLM mapping prompts.\n */\nexport function collectMetadataFieldDescriptors(\n meta: AXMMetaDataBuilderValue | undefined | null,\n): DocumentMetadataFieldDescriptor[] {\n if (!meta?.groups?.length) {\n return [];\n }\n const out: DocumentMetadataFieldDescriptor[] = [];\n for (const g of meta.groups) {\n for (const f of g.fields ?? []) {\n out.push({\n name: f.name,\n title: f.title ?? f.name,\n interfaceType: f.interface,\n });\n }\n }\n return out;\n}\n\n//#endregion\n\n//#region ---- Prompt + JSON parsing ----\n\nexport const DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT =\n 'You are a precise assistant. Output only a single JSON object with string keys matching the requested field names. No markdown fences, no commentary.';\n\n/**\n * Builds the user message body for OCR → metadata JSON mapping.\n */\nexport function buildMetadataMappingUserPayload(ocrText: string, fields: DocumentMetadataFieldDescriptor[]): string {\n const lines = fields.map((x) => `- \"${x.name}\" (${x.title}) [widget: ${x.interfaceType}]`);\n return [\n 'You map document OCR text to metadata fields.',\n 'Reply with a single JSON object only. Keys must be exactly the \"name\" values listed below.',\n 'Use null for unknown or not found values. Do not invent unrelated keys.',\n '',\n 'Fields:',\n ...lines,\n '',\n 'OCR text:',\n ocrText,\n ].join('\\n');\n}\n\n/**\n * Parses a JSON object from an assistant reply (strips optional ```json fences).\n */\nexport function parseMetadataMappingJson(text: string): Record<string, unknown> {\n const trimmed = text.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/m.exec(trimmed);\n const raw = fence ? fence[1]!.trim() : trimmed;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n } catch {\n // ignore\n }\n return {};\n}\n\n/**\n * Shallow merge: only fills keys that are empty in `existing`.\n */\nexport function mergeMetadataPrefill(\n existing: Record<string, unknown> | undefined,\n partial: Record<string, unknown>,\n): Record<string, unknown> {\n const base = { ...(existing ?? {}) };\n for (const [k, v] of Object.entries(partial)) {\n const cur = base[k];\n const empty = cur === undefined || cur === null || cur === '';\n if (empty && v !== undefined && v !== null && v !== '') {\n base[k] = v;\n }\n }\n return base;\n}\n\n//#endregion\n\n//#region ---- File kind ----\n\n/**\n * Returns true when the file list item is an image suitable for vision OCR.\n */\nexport function isImageFileListItem(item: { name?: string; type?: string } | undefined): boolean {\n if (!item) {\n return false;\n }\n const t = typeof item.type === 'string' ? item.type : '';\n if (t.startsWith('image/')) {\n return true;\n }\n const name = String(item.name ?? '');\n return /\\.(png|jpe?g|gif|webp|bmp|tif|tiff)$/i.test(name);\n}\n\n//#endregion\n","/**\n * Tenant settings for optional OCR-based metadata prefill on image uploads.\n */\nexport enum AXMDocumentMetadataOcrSettings {\n /** When true, image uploads may run OCR + mapping into metadata fields (when document type defines metadata). */\n Enabled = 'DocumentManagement:Setting:MetadataOcr.Enabled',\n /**\n * Optional assist primary key for OCR/mapping. When empty, {@link AXPAiManagementSettings.DefaultAssistId} is used.\n */\n AssistId = 'DocumentManagement:Setting:MetadataOcr.AssistId',\n}\n","//#region ---- Imports ----\n\nimport {\n AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY,\n AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n AXPAiAssistChatModelCatalogService,\n AXPAiManagementSettings,\n axpAiChatTextMessage,\n type AXPAiChatModelListItem,\n type AXPAiChatTransport,\n} from '@acorex/modules/ai-management';\nimport type { AXMMetaDataBuilderValue } from '@acorex/modules/data-management';\nimport { AXPFileStorageService, AXPFileStorageStatus, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentMetadataOcrSettings } from '../../document-metadata-ocr.settings.keys';\nimport {\n DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT,\n buildMetadataMappingUserPayload,\n collectMetadataFieldDescriptors,\n mergeMetadataPrefill,\n parseMetadataMappingJson,\n} from './document-metadata-schema.util';\n\n//#endregion\n\nfunction toChatTransport(raw: string | undefined): AXPAiChatTransport {\n return String(raw ?? '').toLowerCase() === 'gemini' ? 'gemini' : 'openai';\n}\n\nfunction readSettingString(raw: unknown): string {\n if (typeof raw === 'string') {\n return raw.trim();\n }\n if (raw && typeof raw === 'object' && 'value' in raw && (raw as { value?: unknown }).value != null) {\n return String((raw as { value?: unknown }).value).trim();\n }\n return '';\n}\n\nfunction readSettingBool(raw: unknown): boolean {\n if (typeof raw === 'boolean') {\n return raw;\n }\n if (raw && typeof raw === 'object' && 'value' in raw) {\n const v = (raw as { value?: unknown }).value;\n return v === true || v === 'true';\n }\n return false;\n}\n\n//#region ---- Service ----\n\n/**\n * Runs vision OCR + text-only JSON mapping for document metadata prefill (image files).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentMetadataAiPrefillService {\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly modelCatalog = inject(AXPAiAssistChatModelCatalogService);\n private readonly commandService = inject(AXPCommandService);\n private readonly settings = inject(AXPSettingsService);\n\n /**\n * Whether OCR metadata prefill is enabled in tenant settings.\n * Defaults to true when the setting has never been stored (opt-out via settings UI).\n */\n async isMetadataOcrEnabled(): Promise<boolean> {\n const raw = await this.settings.get<unknown>(AXMDocumentMetadataOcrSettings.Enabled);\n if (raw === undefined || raw === null) {\n return true;\n }\n return readSettingBool(raw);\n }\n\n /**\n * Resolves assist id: document override, else AI default assist setting.\n */\n async resolveAssistIdForMetadataOcr(): Promise<string> {\n const doc = readSettingString(await this.settings.get<unknown>(AXMDocumentMetadataOcrSettings.AssistId));\n if (doc) {\n return doc;\n }\n return readSettingString(await this.settings.get<unknown>(AXPAiManagementSettings.DefaultAssistId));\n }\n\n /**\n * Uploads a blob-backed file item to storage for vision APIs that require {@link fileId}.\n */\n async ensureStoredFileId(fileItem: AXPFileListItem & { type?: string }, folderId: string): Promise<string | null> {\n const existing =\n fileItem.source?.kind === 'fileId' && typeof fileItem.source.value === 'string'\n ? fileItem.source.value.trim()\n : typeof fileItem.id === 'string'\n ? fileItem.id.trim()\n : '';\n if (existing) {\n return existing;\n }\n\n const file = this.resolveFileForUpload(fileItem);\n if (!file) {\n return null;\n }\n\n const refId = folderId?.trim() || 'document-metadata-ocr-prefill';\n const saved = await this.fileStorage.save({\n file,\n name: fileItem.name,\n refId,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n category: 'document',\n status: AXPFileStorageStatus.Temporary,\n });\n return saved.fileId?.trim() || null;\n }\n\n /**\n * OCR + structured mapping; returns merged metadata (only fills empty keys in {@link existingMeta}).\n */\n async prefillFromImageOcr(options: {\n fileItem: AXPFileListItem & { type?: string };\n folderId: string;\n metaDataList: AXMMetaDataBuilderValue | undefined | null;\n existingMeta: Record<string, unknown> | undefined;\n }): Promise<{ ocrText: string; merged: Record<string, unknown> }> {\n const fields = collectMetadataFieldDescriptors(options.metaDataList ?? undefined);\n if (fields.length === 0) {\n return { ocrText: '', merged: { ...(options.existingMeta ?? {}) } };\n }\n\n const assistId = await this.resolveAssistIdForMetadataOcr();\n if (!assistId) {\n throw new Error('No AI assist is configured for metadata OCR. Set Document Management or AI default assist.');\n }\n\n const models = await this.modelCatalog.listModels({ assistId });\n const model = this.pickChatModelForMetadataOcr(models);\n if (!model?.id) {\n throw new Error('No chat model is available for this assist. Configure models in AI Management.');\n }\n\n const chatTransport = toChatTransport(model.chatTransport);\n\n const fileId = await this.ensureStoredFileId(options.fileItem, options.folderId);\n if (!fileId) {\n throw new Error('Could not upload the file for OCR.');\n }\n\n const extractResult = await this.commandService.execute(AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY, {\n fileId,\n assistId,\n chatTransport,\n modelEntityId: model.id,\n });\n if (extractResult == null || !extractResult.success || !extractResult.data) {\n const detail =\n extractResult != null && typeof extractResult.message?.text === 'string' && extractResult.message.text.trim()\n ? extractResult.message.text\n : 'Document text extraction failed.';\n throw new Error(detail);\n }\n const ocrText = extractResult.data.text;\n\n const userBody = buildMetadataMappingUserPayload(ocrText, fields);\n const structuredResult = await this.commandService.execute(AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, {\n assistId,\n modelEntityId: model.id,\n messages: [\n axpAiChatTextMessage('system', DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT),\n axpAiChatTextMessage('user', userBody),\n ],\n maxTokens: 2048,\n temperature: 0.1,\n });\n if (structuredResult == null || !structuredResult.success || !structuredResult.data) {\n const detail =\n structuredResult != null &&\n typeof structuredResult.message?.text === 'string' &&\n structuredResult.message.text.trim()\n ? structuredResult.message.text\n : 'Structured metadata mapping failed.';\n throw new Error(detail);\n }\n const assistantText = structuredResult.data.text;\n\n const parsed = parseMetadataMappingJson(assistantText);\n const merged = mergeMetadataPrefill(options.existingMeta, parsed);\n return { ocrText, merged };\n }\n\n //#region ---- Utility Methods ----\n\n /**\n * Prefers catalog model `gpt-5.4` (GPT-5.4) when present; otherwise first allowed model.\n */\n private pickChatModelForMetadataOcr(models: AXPAiChatModelListItem[]): AXPAiChatModelListItem | undefined {\n if (!models.length) {\n return undefined;\n }\n const preferredName = 'gpt-5.4';\n return (\n models.find(\n (m) =>\n String(m.name ?? '')\n .trim()\n .toLowerCase() === preferredName,\n ) ??\n models.find((m) => /gpt-5\\.4/i.test(String(m.title ?? ''))) ??\n models[0]\n );\n }\n\n private resolveFileForUpload(item: AXPFileListItem & { type?: string }): File | null {\n const v = item.source?.value;\n if (v instanceof File) {\n return v;\n }\n if (item.source?.kind === 'blob' && v instanceof Blob) {\n return new File([v], item.name, { type: item.type ?? v.type ?? 'application/octet-stream' });\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPContextData } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport { AXMDocumentDto, AXMDocumentTypeService } from '../../../entities';\nimport { isImageFileListItem } from '../document-metadata-schema.util';\nimport { AXMDocumentMetadataAiPrefillService } from '../document-metadata-ai-prefill.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentDialogService {\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n private readonly metadataPrefill = inject(AXMDocumentMetadataAiPrefillService);\n\n async openAttachmentDialog(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }> {\n const { documentType, files, parentId, metaData, documentId, version, showMeta = true } = data ?? {};\n\n const accept = (documentType?.type?.selectedItems ?? [])\n .map((f: any) => `.${f.name.split('.')[1]}`)\n .join(',');\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n const editableMetaDataList =\n documentType?.metaDataList && (documentType.metaDataList as any).groups\n ? {\n ...documentType.metaDataList,\n groups: (documentType.metaDataList.groups ?? []).map((group: any) => ({\n ...group,\n fields: (group.fields ?? []).map((field: any) => ({\n ...field,\n mode: 'edit',\n })),\n })),\n }\n : { groups: [] };\n\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g: any) => (g.fields?.length ?? 0) > 0);\n const ocrFeatureEnabled = await this.metadataPrefill.isMetadataOcrEnabled();\n const hasImage = fileList.some((f) => isImageFileListItem(f));\n const showAiMetadataButton = !!showMeta && hasMetaFields && ocrFeatureEnabled && hasImage;\n\n // Build initial context for all files\n const initialContext: any = {};\n if (showMeta) {\n initialContext['file-0'] = {\n metaDataForm: metaData,\n ...(enableExpiration && metaData && (metaData as any).expirationDate != null\n ? { expirationDate: (metaData as any).expirationDate }\n : {}),\n };\n }\n // Initialize files array context with default values\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n if (showAiMetadataButton) {\n flex.formField('', (field) => {\n field.customWidget('document-metadata-ai-fill-button', {\n parentId: parentId ?? '',\n documentType,\n });\n });\n }\n\n // Add fields for each file dynamically\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n\n if (showMeta) {\n if (hasMetaFields) {\n // Bind meta-data-form-editor to file-${index}.metaDataForm so that\n // metaDataFormWithExpiration can read/write correctly.\n flex.formField('@document-management:terms.common.meta-data', (field) => {\n field.path(`file-${index}.metaDataForm`);\n field.customWidget('meta-data-form-editor', editableMetaDataList);\n });\n }\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n }\n\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('file-uploader', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.submit.title');\n })\n .setCloseButton(true)\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { data: { cancel: true } };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const metaDataFormWithExpiration = (context: any, fileIndex: number) => {\n const meta = context?.[`file-${fileIndex}`]?.['metaDataForm'];\n const exp = context?.[`file-${fileIndex}`]?.['expirationDate'];\n return { ...(meta || {}), ...(exp != null ? { expirationDate: exp } : {}) };\n };\n if (documentId) {\n dialogRef.setLoading(true);\n try {\n const updatePayload: any = { version: (version ?? 0) + 1 };\n if (showMeta) {\n const meta = metaDataFormWithExpiration(ctx as any, 0);\n updatePayload.metaDataForm = meta;\n if (meta?.expirationDate != null) {\n updatePayload.expirationDate = meta.expirationDate;\n }\n }\n await this.documentData.update(documentId, updatePayload);\n return {\n data: {\n cancel: false,\n fileIds: [documentId],\n },\n };\n } finally {\n dialogRef.setLoading(false);\n }\n }\n dialogRef.setLoading(true);\n try {\n const promises = (ctx?.['files'] as any[]).map<Promise<string>>(async (item: any, index: number) => {\n const f = fileList[index];\n const meta = metaDataFormWithExpiration(ctx as any, index);\n const newId = await this.documentData.create({\n fileInfo: f,\n name: f?.name,\n title: f?.title ?? f?.name,\n description: f?.description,\n documentType,\n parentId,\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n version: (version ?? 0) + 1,\n metaDataForm: meta,\n ...(meta?.expirationDate != null ? { expirationDate: meta.expirationDate } : {}),\n });\n return newId;\n });\n const fileIds = await Promise.all(promises);\n return {\n data: {\n cancel: false,\n fileIds,\n },\n };\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n return result;\n }\n\n async openAttachmentDialogWithoutSave(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; files?: any[] } }> {\n const { documentType, files, parentId, metaData, documentId, showMeta = true } = data ?? {};\n\n const accept = (documentType?.type?.selectedItems ?? [])\n .map((f: any) => `.${f.name.split('.')[1]}`)\n .join(',');\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n /** Get metaDataForm from a file item (widget may store under meta or metaDataForm). */\n const getFileMeta = (item: any) =>\n item?.metaDataForm ?? (item?.meta && typeof item.meta === 'object' && !Array.isArray(item.meta) ? item.meta : undefined);\n\n const hasMetaFields = (documentType?.metaDataList?.groups ?? []).some((g: any) => (g.fields?.length ?? 0) > 0);\n const ocrFeatureEnabled = await this.metadataPrefill.isMetadataOcrEnabled();\n const hasImage = fileList.some((f) => isImageFileListItem(f));\n const showAiMetadataButton = !!showMeta && hasMetaFields && ocrFeatureEnabled && hasImage;\n\n // Build initial context for all files: each file-${index} gets that file's metaDataForm so form shows existing meta\n const initialContext: any = {};\n if (showMeta) {\n fileList.forEach((item, index) => {\n const fileMeta = getFileMeta(item) ?? metaData;\n initialContext[`file-${index}`] = {\n metaDataForm: fileMeta,\n ...(enableExpiration && fileMeta && (fileMeta as any).expirationDate != null\n ? { expirationDate: (fileMeta as any).expirationDate }\n : {}),\n };\n });\n if (fileList.length === 0) initialContext['file-0'] = { metaDataForm: metaData };\n }\n // Initialize files array context with default values\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; files?: any[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n if (showAiMetadataButton) {\n flex.formField('', (field) => {\n field.customWidget('document-metadata-ai-fill-button', {\n parentId: parentId ?? '',\n documentType,\n });\n });\n }\n\n // Add fields for each file dynamically\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n if (showMeta) {\n if (hasMetaFields) {\n flex.formField('@document-management:terms.common.meta-data', (field) => {\n field.path(`file-${index}.metaDataForm`);\n field.customWidget('meta-data-form-editor', documentType?.metaDataList ?? { groups: [] });\n });\n }\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n }\n\n flex.formField('File', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('file-uploader', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return {\n data: {\n cancel: true,\n },\n };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const metaDataFormWithExpiration = (context: any, fileIndex: number) => {\n const meta = context?.[`file-${fileIndex}`]?.['metaDataForm'];\n const exp = context?.[`file-${fileIndex}`]?.['expirationDate'];\n return { ...(meta || {}), ...(exp != null ? { expirationDate: exp } : {}) };\n };\n const outFiles = (ctx?.['files'] as any[]).map((item: any, index: number) => ({\n ...item,\n ...(showMeta ? { metaDataForm: metaDataFormWithExpiration(ctx as any, index) } : {}),\n }));\n return { data: { cancel: false, files: outFiles } };\n });\n })\n .show();\n return result;\n }\n\n async chooseDocumentType(): Promise<{ cancelled: boolean; documentTypeId?: string }> {\n const res = await this.documentTypeService.query({ skip: 0, take: 100 });\n const items = (res?.items ?? []).map((x: any) => ({ value: x.id, text: x.title }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ cancelled: boolean; documentTypeId?: string }>((dialog) => {\n dialog\n .setTitle('@document-management:dialogs.choose-document-type.title')\n .setContext({ documentTypeId: undefined })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@document-management:dialogs.choose-document-type.label', (field) => {\n field.path('documentTypeId');\n field.selectionList({ valueField: 'value', textField: 'text', dataSource: items });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { cancelled: true };\n }\n const ctx = dialogRef.context() as any;\n return { cancelled: false, documentTypeId: ctx?.documentTypeId };\n });\n })\n .show();\n\n return result;\n }\n}\n","import { AXFileService } from '@acorex/core/file';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXMDocumentManagementDocumentTypeEntityModel,\n AXMDocumentTypeService,\n} from '../../../entities';\nimport { AXMDocumentDialogService } from './document-dialog.service';\nimport { AXTranslationService } from '@acorex/core/translation';\n\ninterface AttachmentOptions {\n multiple?: boolean;\n folderId?: string;\n entityId?: string;\n entityRecordId?: string;\n}\n\ninterface UpdateAttachmentOptions {\n entityId?: string;\n entityRecordId?: string;\n folderId?: string;\n}\n\ninterface PopupResult {\n data?: {\n cancel?: boolean;\n fileIds?: string[];\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentAttachmentsService {\n private readonly fileService = inject(AXFileService);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentDialog = inject(AXMDocumentDialogService);\n private readonly translateService = inject(AXTranslationService);\n\n async attachFile(\n fileType: string | AXMDocumentDocDto,\n options?: AttachmentOptions,\n ): Promise<boolean> {\n // Validate input data\n this.validateAttachmentOptions(options);\n\n const fileTypeEntity = await this.resolveFileType(fileType);\n const files = await this.chooseFiles(fileTypeEntity, options?.multiple);\n\n if (files.length === 0) {\n return false;\n }\n\n const popupData = {\n documentType: fileTypeEntity,\n files: this.mapFilesToFileListItems(files),\n parentId: options?.folderId ?? '',\n version: 0,\n };\n\n const title = await this.translateService.translateAsync('@document-management:dialogs.attach-file.title', {\n params: { title: fileTypeEntity.title },\n });\n const result = await this.documentDialog.openAttachmentDialog(\n title,\n popupData,\n );\n\n return this.handlePopupResult(result);\n }\n\n async updateAttachedFile(fileId: string, options?: UpdateAttachmentOptions): Promise<boolean> {\n const file = await this.documentData.byKey(fileId);\n if (!file) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(file.documentType);\n\n const popupData = {\n documentType: documentTypeEntity,\n files: [file.fileInfo],\n parentId: options?.folderId ?? '',\n metaData: file.metaDataForm,\n documentId: fileId,\n version: file.version,\n };\n\n const result = await this.documentDialog.openAttachmentDialog(`Edit ${file.name}`, popupData);\n\n return this.handlePopupResult(result);\n }\n\n /**\n * Upload a new version for an existing document. Lets user choose a new file, edit metadata, and updates the document\n * with incremented version number while keeping the same document identity.\n */\n async uploadNewVersion(fileId: string): Promise<boolean> {\n const document = await this.documentData.byKey(fileId);\n if (!document) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(document.documentType);\n\n // Choose a single new file based on document type constraints\n const files = await this.chooseFiles(documentTypeEntity, false);\n if (!files || files.length === 0) {\n return false;\n }\n\n const mapped = this.mapFilesToFileListItems(files);\n\n // Open a lightweight dialog to edit metadata (no auto-save); then apply update with new file\n const result = await this.documentDialog.openAttachmentDialogWithoutSave(\n '@document-management:dialogs.manage-version.upload-new-version',\n {\n documentType: documentTypeEntity,\n files: mapped,\n parentId: document.parentId,\n metaData: document.metaDataForm,\n showMeta: false,\n },\n );\n\n if (result?.data?.cancel) {\n return false;\n }\n\n // When metadata is hidden, do not change it\n const metaDataForm = document.metaDataForm;\n const newName = files[0]?.name ?? document.name;\n\n await this.documentData.update(fileId, {\n fileInfo: mapped[0],\n version: (document.version ?? 0) + 1,\n metaDataForm,\n name: newName,\n title: newName,\n });\n\n return true;\n }\n\n private validateAttachmentOptions(options?: AttachmentOptions): void {\n if (!((options?.entityId && options?.entityRecordId) || options?.folderId)) {\n throw new Error('You must provide either both entityId and entityRecordId, or folderId.');\n }\n }\n\n private async resolveFileType(\n fileType: string | AXMDocumentDocDto,\n ): Promise<AXMDocumentManagementDocumentTypeEntityModel> {\n const id = typeof fileType === 'string' ? fileType : fileType.id;\n const entity = await this.documentTypeService.getOne(id);\n if (!entity) {\n throw new Error(`Document type not found: ${id}`);\n }\n return entity;\n }\n\n private async chooseFiles(\n fileTypeEntity: AXMDocumentManagementDocumentTypeEntityModel,\n multiple?: boolean,\n ): Promise<File[]> {\n const selectedItems = fileTypeEntity.type?.selectedItems ?? [];\n const acceptTypes = selectedItems.map((item) => `.${item.name.split('.')[1]}`).join(',');\n\n return await this.fileService.choose({\n multiple: multiple ?? false,\n accept: acceptTypes,\n });\n }\n\n private mapFilesToFileListItems(files: File[]): AXPFileListItem[] {\n return files.map<AXPFileListItem>((file) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }));\n }\n\n // moved to AXMDocumentDialogService\n\n private async handlePopupResult(result: PopupResult): Promise<boolean> {\n if (result?.data?.cancel) {\n return false;\n }\n\n return true;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXMediaViewerData } from '@acorex/components/media-viewer';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileStorageInfo, AXPFileStorageService, AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPDialogRef, AXPLayoutBuilderService, IWidgetBuilder } from '@acorex/platform/layout/builder';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport {\n AXPFileListItem,\n AXPHookService,\n AXPMultiLanguageStringResolverService,\n AXPPlatformScope,\n AXPQueryRequest,\n} from '@acorex/platform/core';\nimport { castArray } from 'lodash-es';\nimport {\n AXMDocumentDto,\n AXMDocumentManagementFolderCreateDto,\n AXMDocumentManagementFolderEntityModel,\n AXMDocumentShortcutEntityModel,\n AXMDocumentTypeService,\n} from '../../entities';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMMetadataFieldInfo,\n AXMNodeType,\n CreateFileDto,\n UpdateFileDto,\n UpdateFolderDto,\n} from './document-manager.types';\nimport { DocumentAttachmentsService } from './services/document-attachments.service';\n//#endregion\n\n//#region ---- Contract (Abstract Service) ----\n\n/**\n * Contract for document drive service. Inject this token; implementation is provided by the module.\n */\n@Injectable()\nexport abstract class AXMDocumentManagerService {\n // Scope management\n abstract scope(scope: AXPPlatformScope): ScopedDriveService;\n\n // Root and folder operations\n abstract getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n /**\n * Gets (or creates) the folder for the given entity record and returns it as explorer root.\n * Used by the document plugin when viewing an entity single.\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFolder(folderId: string): Promise<void>;\n abstract getAvailableSpace(): Promise<number>;\n\n // File operations\n abstract createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFile(fileId: string): Promise<void>;\n\n // Node operations\n abstract deleteNodes(nodeIds: AXMDocumentExplorerNode[]): Promise<void>;\n abstract copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode>;\n\n /** Creates a shortcut to a document or folder in the given folder. */\n abstract createShortcut(\n targetId: string,\n targetType: 'file' | 'folder',\n folderId: string,\n options?: { nameOverride?: string },\n ): Promise<AXMDocumentExplorerNode>;\n /** Deletes a shortcut by its node id (shortcut entity id). */\n abstract deleteShortcut(shortcutId: string): Promise<void>;\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n * Returns true if a shortcut was created, false if cancelled.\n */\n abstract createShortcutWithPicker(\n node: AXMDocumentExplorerNode,\n scope: AXPPlatformScope,\n ): Promise<boolean>;\n\n // Dialog operations\n abstract showCreateFolderDialog(\n parentId?: string,\n options?: { allowedDocumentTypeNames?: string[] },\n ): Promise<AXMDocumentExplorerNode | null>;\n abstract getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]>;\n abstract showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean>;\n abstract showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined>;\n\n // Search operations\n abstract searchFolders(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]>;\n abstract searchFiles(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]>;\n abstract searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]>;\n\n /** Collects unique metadata fields; pass ids to limit to those document types. */\n abstract getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n\n // File browsing and actions\n abstract showChooseFileDialog(root: string): Promise<AXMDocumentExplorerNode[]>;\n abstract moveTo(options: {\n node: AXMDocumentExplorerNode;\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean>;\n abstract copyTo(options: {\n node: AXMDocumentExplorerNode;\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean>;\n abstract showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: { index?: number; folderVirtualFiles?: AXMDocumentExplorerNode[] },\n ): Promise<void>;\n abstract openFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n /** Returns nodes that are supported by the gallery (image/pdf extensions). */\n abstract getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[];\n\n // Data retrieval\n abstract getAllFolders(): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllNodes(): Promise<AXMDocumentExplorerNode[]>;\n abstract downloadFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n // Sharing and collaboration\n abstract showShareDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLinkDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode>;\n\n // Upload and versioning\n abstract uploadFileByType(folderId: string, docTypeId: string): Promise<boolean>;\n abstract updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showVersionHistory(node: AXMDocumentExplorerNode): Promise<void>;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n/**\n * Default implementation of document drive service.\n */\n@Injectable()\nexport class AXMDocumentManagerServiceImpl extends AXMDocumentManagerService {\n //#region ---- Services & Dependencies ----\n\n protected sessionService = inject(AXPSessionService);\n protected entityService = inject(AXPEntityService);\n protected folderData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.folder.name)\n .data<string, AXMDocumentManagementFolderEntityModel, AXMDocumentManagementFolderEntityModel>();\n protected documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n protected shortcutData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentShortcut.name)\n .data<string, AXMDocumentShortcutEntityModel, AXMDocumentShortcutEntityModel>();\n protected documentTypeService = inject(AXMDocumentTypeService);\n protected documentManagementService = inject(AXPDocumentManagementService);\n protected popupService = inject(AXPopupService);\n protected dialogService = inject(AXDialogService);\n protected fileService = inject(AXPFileStorageService);\n protected fileManagerService = inject(AXFileService);\n protected commandService = inject(AXPCommandService);\n protected workflow = inject(AXPWorkflowService);\n protected translate = inject(AXTranslationService);\n protected layoutBuilder = inject(AXPLayoutBuilderService);\n protected multiLanguageResolver = inject(AXPMultiLanguageStringResolverService);\n\n protected attachmentsService = inject(DocumentAttachmentsService);\n\n protected filterMiddlewareService = inject(AXPFilterOperatorMiddlewareService);\n\n protected hooks = inject(AXPHookService, { optional: true });\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private scopedDriveCache: Map<AXPPlatformScope, ScopedDriveService> = new Map();\n private buildPathCache: Map<string, Promise<AXMDocumentExplorerNode[]>> = new Map();\n\n //#endregion\n\n //#region ---- Scope Management Methods ----\n\n /**\n * Creates a scoped drive service for the specified platform scope.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\n scope(scope: AXPPlatformScope): ScopedDriveService {\n if (!this.scopedDriveCache.has(scope)) {\n this.scopedDriveCache.set(scope, new ScopedDriveService(this, scope));\n }\n return this.scopedDriveCache.get(scope)!;\n }\n\n //#endregion\n\n //#region ---- Mapping Methods ----\n\n /**\n * Maps folder entity to document explorer node\n */\n private mapFolderDtoToFolderNode = (folder: AXMDocumentManagementFolderEntityModel): AXMDocumentExplorerNode => {\n return {\n id: folder.id!,\n name: this.multiLanguageResolver.resolve(folder.title),\n type: 'folder',\n parentId: folder.parentId || null,\n modifiedAt: (folder as any)?.updated?.at,\n createdAt: (folder as any)?.created?.at,\n description:\n folder.description != null ? this.multiLanguageResolver.resolve(folder.description) : undefined,\n childrenCount: folder.childrenCount,\n size: folder.size,\n documentTypes: folder.documentTypes || [],\n storageType: 'physical',\n inherit: folder.inherit,\n children: [\n ...(folder.folders?.map(this.mapFolderDtoToFolderNode) || []),\n ...(folder.documents?.map(this.mapFileToNode) || []),\n ...(folder.shortcuts?.map(this.mapShortcutToNode) || []),\n ],\n };\n };\n\n /**\n * Maps file entity to document explorer node\n */\n private mapFileToNode(file: AXMDocumentDto): AXMDocumentExplorerNode {\n const expirationDate = file.expirationDate ?? (file.metaDataForm as Record<string, unknown> | undefined)?.['expirationDate'];\n const toDate = (v: unknown): Date | undefined => {\n if (v == null) return undefined;\n if (v instanceof Date) return v;\n if (typeof v === 'string') { const d = new Date(v); return Number.isNaN(d.getTime()) ? undefined : d; }\n if (typeof v === 'number') { const d = new Date(v); return Number.isNaN(d.getTime()) ? undefined : d; }\n return undefined;\n };\n const node: AXMDocumentExplorerNode = {\n id: file.id!,\n name: file.name,\n type: 'file',\n parentId: file.parentId,\n modifiedAt: (file as any)?.updated?.at,\n createdAt: (file as any)?.created?.at,\n size: (file.fileInfo as AXPFileListItem | undefined)?.size ?? 0,\n fileId: file.fileInfo,\n storageType: 'physical',\n metaDataForm: file.metaDataForm ?? undefined,\n documentTypes: file.documentType ? [file.documentType] : [],\n expirationDate: toDate(expirationDate),\n };\n return node;\n }\n\n /**\n * Maps shortcut entity to document explorer node.\n * Uses minimal data from shortcut itself; target-specific details are resolved by operations when needed.\n */\n private mapShortcutToNode = (shortcut: AXMDocumentShortcutEntityModel): AXMDocumentExplorerNode => {\n const isFolderShortcut = typeof shortcut.targetFolderId === 'string' && !!shortcut.targetFolderId;\n return {\n id: shortcut.id!,\n name: shortcut.name ?? '',\n description: shortcut.description,\n type: isFolderShortcut ? 'folder' : 'file',\n parentId: shortcut.folderId,\n storageType: 'shortcut',\n size: 0,\n documentTypes: [],\n isShortcut: true,\n targetDocumentId: shortcut.targetDocumentId,\n targetFolderId: shortcut.targetFolderId,\n children: [],\n };\n };\n\n /**\n * Maps document to media viewer data\n */\n private async mapDocumentToMediaViewerData(\n doc: AXMDocumentDto | AXMDocumentExplorerNode,\n fileInfosMap?: Map<string, AXPFileStorageInfo>,\n ): Promise<AXMediaViewerData> {\n const f = (doc as { fileInfo?: unknown; fileId?: unknown }).fileInfo ?? (doc as { fileId?: unknown }).fileId;\n const fileIdStr =\n f == null\n ? undefined\n : typeof f === 'string'\n ? f\n : (f as { source?: { kind?: string; value?: unknown }; id?: string }).source?.kind === 'fileId' &&\n typeof (f as { source?: { value?: unknown } }).source?.value === 'string'\n ? (f as { source: { value: string } }).source.value\n : typeof (f as { id?: string }).id === 'string'\n ? (f as { id: string }).id\n : undefined;\n if (fileIdStr) {\n let fileInfo: AXPFileStorageInfo | undefined;\n if (fileInfosMap) {\n fileInfo = fileInfosMap.get(fileIdStr);\n } else {\n fileInfo = await this.fileService.getInfo(fileIdStr);\n }\n const resolvedSize = fileInfo?.size ?? (doc as any)?.fileId?.size ?? 0;\n return {\n id: doc.id ?? '',\n name: doc.name,\n type: doc.name.endsWith('.pdf') ? 'pdf' : 'image',\n url: fileInfo?.url ?? '',\n size: resolvedSize.toString(),\n thumbnailUrl: fileInfo?.url ?? '',\n };\n }\n\n const fallbackUrl =\n (doc as any)?.fileId?.source?.kind === 'url' && typeof (doc as any).fileId.source.value === 'string'\n ? ((doc as any).fileId.source.value as string)\n : '';\n const fallbackSize = ((doc as any)?.fileId?.size as number | undefined) ?? 0;\n\n return {\n id: doc.id ?? '',\n name: doc.name,\n type: ((doc as { meta?: Record<string, unknown> }).meta?.['type'] as 'image') ?? 'image',\n url: fallbackUrl,\n size: fallbackSize.toString(),\n thumbnailUrl: fallbackUrl,\n };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Builds navigation path for a node\n */\n private async buildPath(node: AXMDocumentExplorerNode, stopFolderId?: string): Promise<AXMDocumentExplorerNode[]> {\n const cacheKey = `${node.id}_${stopFolderId || ''}`;\n\n if (!this.buildPathCache.has(cacheKey)) {\n const pathPromise = (async () => {\n // For shortcut nodes, resolve path from the target document/folder\n if (node.storageType === 'shortcut') {\n if (node.type === 'file' && node.targetDocumentId) {\n return (await this.documentManagementService.getDocumentPath(node.targetDocumentId, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n if (node.type === 'folder' && node.targetFolderId) {\n return (await this.documentManagementService.getFolderPath(node.targetFolderId, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n }\n\n if (node.type === 'file') {\n return (await this.documentManagementService.getDocumentPath(node.id, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n\n return (await this.documentManagementService.getFolderPath(node.id, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n })();\n\n this.buildPathCache.set(cacheKey, pathPromise);\n return pathPromise;\n }\n\n return this.buildPathCache.get(cacheKey)!;\n }\n\n /**\n * Creates a copy name by adding \" copy\" before the extension\n */\n private createCopyName(originalName: string): string {\n const lastDotIndex = originalName.lastIndexOf('.');\n\n if (lastDotIndex === -1) {\n // No extension\n return `${originalName} copy`;\n }\n\n const nameWithoutExt = originalName.substring(0, lastDotIndex);\n const extension = originalName.substring(lastDotIndex);\n\n return `${nameWithoutExt} copy${extension}`;\n }\n\n /**\n * Prepares file for copy operation by downloading from storage and converting to blob source.\n * Accepts document fileId (AXPFileListItem or legacy string) and returns AXPFileListItem with blob source.\n */\n private async prepareFileForCopy(\n fileId: AXPFileListItem | string,\n fileName?: string,\n ): Promise<AXPFileListItem | undefined> {\n try {\n // Extract fileId string from the source\n let fileIdString: string | undefined;\n let existingFileItem: AXPFileListItem | undefined;\n\n if (typeof fileId === 'string') {\n fileIdString = fileId;\n } else if (fileId && typeof fileId === 'object') {\n // If it's already an AXPFileListItem with source.kind === 'fileId'\n if (fileId.source?.kind === 'fileId' && typeof fileId.source.value === 'string') {\n fileIdString = fileId.source.value;\n existingFileItem = fileId as AXPFileListItem;\n } else if (fileId.id && typeof fileId.id === 'string') {\n fileIdString = fileId.id;\n existingFileItem = fileId as AXPFileListItem;\n }\n }\n\n if (!fileIdString) {\n console.warn('Could not extract fileId from:', fileId);\n return undefined;\n }\n\n // Get file info from file storage service using source.value\n const fileInfo: AXPFileStorageInfo = await this.fileService.getInfo(fileIdString);\n\n if (!fileInfo) {\n throw new Error(`File not found in storage: ${fileIdString}`);\n }\n\n // Get binary data\n const binary = fileInfo.binary;\n if (!binary) {\n throw new Error(`File binary data not available for: ${fileIdString}`);\n }\n\n // Create blob from binary (in case it's not already a Blob)\n const blob = binary instanceof Blob ? binary : new Blob([binary as BlobPart], { type: fileInfo.mimeType });\n\n // If we have an existing file item, clone it and update source and status\n if (existingFileItem) {\n return {\n ...existingFileItem,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n // Otherwise create a new AXPFileListItem\n return {\n id: fileInfo.fileId,\n name: fileName ?? fileInfo.name ?? 'unknown',\n size: fileInfo.size,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n } catch (error) {\n console.error('Error preparing file for copy:', error);\n throw error;\n }\n }\n\n //#endregion\n\n //#region ---- Root and Folder Operations ----\n\n /**\n * Loads shortcuts for a folder and attaches them; recurses into child folders.\n */\n private async enrichFolderWithShortcuts(\n folder: AXMDocumentManagementFolderEntityModel,\n ): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 500,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'folderId', operator: { type: 'equal' }, value: folder.id }],\n },\n });\n (folder as AXMDocumentManagementFolderEntityModel & { shortcuts?: AXMDocumentShortcutEntityModel[] }).shortcuts =\n shortcutRes.items ?? [];\n for (const child of folder.folders ?? []) {\n await this.enrichFolderWithShortcuts(child);\n }\n }\n\n /**\n * Gets the root folder for the given scope.\n * Backend returns only the root folder; path is built here for the explorer.\n */\n async getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const rootFolder = await this.documentManagementService.getRoot(scope);\n await this.enrichFolderWithShortcuts(rootFolder);\n const result = this.mapFolderDtoToFolderNode(rootFolder);\n const path = await this.buildPath(result);\n return { path, result };\n }\n\n /**\n * Gets (or creates) the folder bound to the entity record and returns it as explorer root.\n */\n async getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const folder = await this.documentManagementService.getRootByEntityRef(refType, refId);\n await this.enrichFolderWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n return { path: [result], result };\n }\n\n /**\n * Returns document types whose name is in the given list. Used when allowed list is set but folder has no documentTypes yet.\n */\n async getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]> {\n if (names.length === 0) return [];\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as { items?: AXMNodeType[] })?.items ?? [];\n const set = new Set(names);\n return items.filter((it) => it?.name && set.has(it.name));\n }\n\n /**\n * Gets a specific folder by ID.\n * Root for path is resolved from current session (security: only scope is used).\n * If folderId is a shortcut (DocumentShortcut) pointing to a folder, resolves to the target folder.\n */\n async getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n if (!folderId) {\n throw new Error('Folder ID is required');\n }\n\n // Resolve shortcut: if folderId is a shortcut entity pointing to a folder, use target folder id\n const shortcut = await this.shortcutData.byKey(folderId);\n const resolvedFolderId =\n shortcut && typeof shortcut.targetFolderId === 'string' && shortcut.targetFolderId\n ? shortcut.targetFolderId\n : folderId;\n\n const folder = await this.folderData.byKey(resolvedFolderId);\n if (!folder) {\n throw new Error('Folder not found');\n }\n\n await this.enrichFolderWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n const path = await this.buildPath(result, (await this.getRoot(scope)).result.id);\n\n return { path, result };\n }\n\n /**\n * Creates a new folder\n */\n async createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode> {\n const now = new Date();\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n\n const folderToCreate: Omit<AXMDocumentManagementFolderEntityModel, 'id'> = {\n ...data,\n title: data.title,\n childrenCount: 0,\n created: { at: now, user: userRef },\n updated: { at: now, user: userRef },\n isSystem: false,\n isHidden: false,\n isDeleted: false,\n size: data.size ?? 0,\n } as any;\n\n const createdId = await this.folderData.create(folderToCreate as any);\n const folder = await this.folderData.byKey(createdId);\n if (!folder) {\n throw new Error('Failed to load created folder');\n }\n return this.mapFolderDtoToFolderNode(folder);\n }\n\n /**\n * Updates an existing folder\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n const updateData = {\n ...data,\n updated: { at: new Date(), user: userRef },\n } as any;\n const updatedFolder = await this.folderData.update(folderId, updateData);\n return this.mapFolderDtoToFolderNode(updatedFolder);\n }\n\n /**\n * Deletes a folder. Cascades to delete any shortcuts that point to this folder.\n */\n async deleteFolder(folderId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetFolderId', operator: { type: 'equal' }, value: folderId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.folderData.delete(folderId);\n }\n\n /**\n * Gets available storage space\n */\n async getAvailableSpace(): Promise<number> {\n // For now, return a fixed value of 100GB (56 * 1024 * 1024 * 1024 bytes)\n // This should be replaced with actual storage quota logic when implemented\n return 56 * 1024 * 1024 * 1024;\n }\n\n //#endregion\n\n //#region ---- File Operations ----\n\n /**\n * Creates a new file\n */\n async createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode> {\n const createdId = await this.documentData.create(data as any);\n const file = await this.documentData.byKey(createdId);\n if (!file) {\n throw new Error('Failed to load created document');\n }\n return this.mapFileToNode(file);\n }\n\n /**\n * Updates an existing file\n */\n async updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode> {\n const updatedFile = await this.documentData.update(fileId, data);\n return this.mapFileToNode(updatedFile);\n }\n\n /**\n * Deletes a file. Cascades to delete any shortcuts that point to this document.\n */\n async deleteFile(fileId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetDocumentId', operator: { type: 'equal' }, value: fileId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.documentData.delete(fileId);\n }\n\n /**\n * Opens a file. For shortcut nodes, opens the target document.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n const documentId = node.storageType === 'shortcut' && node.targetDocumentId\n ? node.targetDocumentId\n : node.id;\n const file = await this.documentData.byKey(documentId);\n // Could trigger open/edit workflow or preview\n }\n\n /**\n * Downloads a file using the same logic as file-uploader component.\n * For shortcut nodes, downloads the target document.\n */\n async downloadFile(node: AXMDocumentExplorerNode): Promise<void> {\n const targetNode = node.storageType === 'shortcut' && node.targetDocumentId\n ? await this.documentData.byKey(node.targetDocumentId).then((doc) => (doc ? this.mapFileToNode(doc) : null))\n : node;\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n if (!targetNode.fileId) {\n console.error('File ID is undefined, cannot download.', targetNode);\n return;\n }\n\n const file: AXPFileListItem = {\n ...targetNode.fileId,\n name: targetNode.fileId.name ?? targetNode.name,\n };\n\n // Run BeforeDownload hook if available\n // if (this.hooks) {\n // try {\n // await this.hooks.runAsync<any>('file-uploader.fileItem.before-download', {\n // host: undefined,\n // file,\n // plugins: [],\n // excludePlugins: [],\n // });\n // } catch {\n // // Ignore hook errors\n // }\n // }\n\n if (!file.source) {\n console.error('File source is undefined, cannot download.', file);\n return;\n }\n\n const triggerDownload = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n switch (file.source.kind) {\n case 'blob':\n if (file.source.value instanceof Blob) {\n triggerDownload(file.source.value, file.name ?? targetNode.name ?? 'download');\n } else {\n console.error('Source kind is blob, but value is not a Blob.', file);\n }\n break;\n case 'fileId':\n if (typeof file.source.value === 'string') {\n try {\n const fileInfo = await this.fileService.getInfo(file.source.value);\n if (fileInfo && fileInfo.url) {\n const link = document.createElement('a');\n link.href = fileInfo.url;\n link.download = file.name ?? targetNode.name ?? fileInfo.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else if (fileInfo && (fileInfo as any).binary instanceof Blob) {\n triggerDownload((fileInfo as any).binary, file.name ?? targetNode.name ?? fileInfo.name ?? 'download');\n } else {\n console.error('Could not retrieve file for download from fileId:', fileInfo);\n }\n } catch (error) {\n console.error('Error downloading file by fileId:', file.source.value, error);\n }\n } else {\n console.error('Source kind is fileId, but value is not a string ID.', file);\n }\n break;\n case 'url':\n if (typeof file.source.value === 'string') {\n const link = document.createElement('a');\n link.href = file.source.value;\n link.download = file.name ?? targetNode.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('Source kind is url, but value is not a string URL.', file);\n }\n break;\n case 'reference':\n console.error('Download not supported for source kind: reference', file);\n break;\n case 'preview':\n case 'none':\n default:\n console.error(`Download not supported for source kind: ${file.source.kind}`, file);\n break;\n }\n\n // Run AfterDownload hook if available\n if (this.hooks) {\n try {\n await this.hooks.runAsync<any>('file-uploader.fileItem.after-download', {\n host: undefined,\n file,\n plugins: [],\n excludePlugins: [],\n });\n } catch {\n // Ignore hook errors\n }\n }\n }\n\n //#endregion\n\n //#region ---- Node Operations ----\n\n /**\n * Deletes multiple nodes (files, folders, and shortcuts).\n */\n async deleteNodes(nodes: AXMDocumentExplorerNode[]): Promise<void> {\n for (const node of nodes) {\n if (node.storageType === 'shortcut' || node.isShortcut) {\n await this.deleteShortcut(node.id);\n } else if (node.type === 'folder') {\n await this.deleteFolder(node.id);\n } else {\n await this.deleteFile(node.id);\n }\n }\n }\n\n /**\n * Creates a shortcut to a document or folder in the given folder.\n */\n async createShortcut(\n targetId: string,\n targetType: 'file' | 'folder',\n folderId: string,\n options?: { nameOverride?: string },\n ): Promise<AXMDocumentExplorerNode> {\n let name = options?.nameOverride;\n if (name == null || name === '') {\n if (targetType === 'file') {\n const doc = await this.documentData.byKey(targetId);\n name = doc?.name ?? doc?.title ?? 'Document';\n } else {\n const folder = await this.folderData.byKey(targetId);\n const rawTitle = folder?.title;\n name =\n rawTitle != null && rawTitle !== ''\n ? this.multiLanguageResolver.resolve(rawTitle)\n : 'Folder';\n }\n }\n const payload: Record<string, unknown> = {\n folderId,\n name,\n };\n if (targetType === 'file') {\n payload['targetDocumentId'] = targetId;\n } else {\n payload['targetFolderId'] = targetId;\n }\n const createdId = await this.shortcutData.create(payload as any);\n const shortcut = await this.shortcutData.byKey(createdId);\n if (!shortcut) throw new Error('Failed to load created shortcut');\n return this.mapShortcutToNode(shortcut);\n }\n\n /**\n * Deletes a shortcut by its entity id.\n */\n async deleteShortcut(shortcutId: string): Promise<void> {\n await this.shortcutData.delete(shortcutId);\n }\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n */\n async createShortcutWithPicker(\n node: AXMDocumentExplorerNode,\n scope: AXPPlatformScope,\n ): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: await this.translate.translateAsync('@document-management:actions.choose-folder-for-shortcut'),\n data: {\n selectionMode: 'single',\n browseMode: 'folder',\n scope,\n },\n });\n const selected = popup.data?.result ? (popup.data?.items ?? []) as AXMDocumentExplorerNode[] : [];\n const folder = selected[0];\n if (!folder?.id) return false;\n const targetType = node.type === 'file' ? 'file' : 'folder';\n const targetId =\n node.storageType === 'shortcut' && node.type === 'file'\n ? node.targetDocumentId!\n : node.storageType === 'shortcut' && node.type === 'folder'\n ? node.targetFolderId!\n : node.id;\n await this.createShortcut(targetId, targetType, folder.id);\n return true;\n }\n\n /**\n * Creates a copy of a node (file or folder)\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n if (!node) {\n throw new Error('Node to copy cannot be null or undefined');\n }\n\n // Create a name with \" copy\" before the extension\n const newName = this.createCopyName(node.name);\n\n if (node.type === 'file') {\n // Get the original file to copy all its data\n const originalFile = await this.documentData.byKey(node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${node.id} not found`);\n }\n\n // Create a document model from the original with the new name\n // Extract needed properties without id\n const { id, ...fileDataWithoutId } = originalFile;\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, newName);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n const fileData: CreateFileDto = {\n ...fileDataWithoutId,\n name: newName,\n title: newName,\n fileInfo: fileListItem,\n };\n\n // Create the new file\n return await this.createFile(fileData);\n } else if (node.type === 'folder') {\n // Get the original folder to copy all its data\n const originalFolder = await this.folderData.byKey(node.id);\n if (!originalFolder) {\n throw new Error(`Folder with ID ${node.id} not found`);\n }\n\n // Create a folder model from the original with the new name\n const { id, description: descMl, ...folderRest } = originalFolder;\n const folderData: AXMDocumentManagementFolderCreateDto = {\n ...(folderRest as Omit<AXMDocumentManagementFolderEntityModel, 'id' | 'description'>),\n title: newName,\n description: descMl != null ? this.multiLanguageResolver.resolve(descMl) : undefined,\n };\n\n // Create the new folder\n return await this.createFolder(folderData);\n } else {\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n }\n\n /**\n * Moves a node to another location\n */\n async moveTo(options: {\n node: AXMDocumentExplorerNode;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: `Choose ${options.browseMode == 'file' ? 'File' : 'Folder'}`,\n data: {\n selectionMode: options.multiple ? 'multiple' : 'single',\n browseMode: options.browseMode ?? 'file',\n scope: options.scope,\n },\n });\n\n const selectedFolders = popup.data.result ? (popup.data?.items ?? []) : [];\n if (selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.updateFolder(options.node.id, { parentId: selectedFolder.id });\n } else {\n await this.updateFile(options.node.id, { parentId: selectedFolder.id });\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /**\n * Copies a node to another location\n */\n async copyTo(options: {\n node: AXMDocumentExplorerNode;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: `Choose ${options.browseMode == 'file' ? 'File' : 'Folder'}`,\n data: {\n selectionMode: options.multiple ? 'multiple' : 'single',\n browseMode: options.browseMode ?? 'file',\n scope: options.scope,\n },\n });\n\n const selectedFolders = popup.data.result ? (popup.data?.items ?? []) : [];\n if (selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.createFolder({\n title: options.node.name,\n parentId: selectedFolder.id,\n color: '#ffffff',\n size: options.node.size,\n inherit: options.node.inherit ?? 'None',\n });\n } else {\n // Get the original file to copy its data\n const originalFile = await this.documentData.byKey(options.node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${options.node.id} not found`);\n }\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, options.node.name);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n await this.createFile({\n title: options.node.name,\n name: options.node.name,\n parentId: selectedFolder.id,\n fileInfo: fileListItem,\n documentType: options.node.documentTypes[0],\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n });\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n //#endregion\n\n //#region ---- Search Operations ----\n\n /**\n * Searches for folders by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFolders(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n\n const folders = await this.documentManagementService.searchFolders(searchTerm, rootNode.id);\n\n return folders.map((folder) => this.mapFolderDtoToFolderNode(folder));\n }\n\n /**\n * Searches for files by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFiles(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n\n const files = await this.documentManagementService.searchFiles(searchTerm, rootNode.id);\n\n return files.map((file) => this.mapFileToNode(file));\n }\n\n /**\n * Searches for both files and folders by term within a scope.\n * Supports optional metadata filters to narrow down results by metadata field values.\n */\n async searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n const hasSearchTerm = searchTerm?.trim().length > 0;\n const hasMetadataFilters = options?.metadataFilters && Object.keys(options.metadataFilters).length > 0;\n const hasDocTypeFilter = Boolean(options?.documentTypeIds && options.documentTypeIds.length > 0);\n\n let folders: AXMDocumentExplorerNode[] = [];\n let files: AXMDocumentExplorerNode[] = [];\n\n if (hasMetadataFilters || hasDocTypeFilter) {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n const treeRootId = options?.folderId ?? rootNode.id;\n const allDtos = await this.documentManagementService.searchFiles(searchTerm, treeRootId!, {\n ...(hasMetadataFilters ? { metadataFilters: options!.metadataFilters! } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds: options!.documentTypeIds! } : {}),\n });\n files = allDtos.map((f) => this.mapFileToNode(f));\n } else if (hasSearchTerm) {\n [folders, files] = await Promise.all([\n this.searchFolders(searchTerm, scope, options),\n this.searchFiles(searchTerm, scope, options),\n ]);\n }\n\n return [...folders, ...files];\n }\n\n /**\n * Returns unique metadata field definitions for the given document types (or all types when `documentTypeIds` is omitted).\n */\n async getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.documentManagementService.getUniqueMetadataDefinitions(documentTypeIds);\n }\n\n //#endregion\n\n //#region ---- Data Retrieval Operations ----\n\n /**\n * Gets all folders\n */\n async getAllFolders(): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.folderData.query()).items.map(this.mapFolderDtoToFolderNode);\n }\n\n /**\n * Gets all files with optional query\n */\n async getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.documentData.query(request)).items.map(this.mapFileToNode);\n }\n\n /**\n * Gets all nodes (files and folders)\n */\n async getAllNodes(): Promise<AXMDocumentExplorerNode[]> {\n return [...(await this.getAllFolders()), ...(await this.getAllFiles())];\n }\n\n //#endregion\n\n //#region ---- File Upload Operations ----\n\n /**\n * Uploads file by document type to a specific folder\n */\n async uploadFileByType(folderId: string, docTypeId: string): Promise<boolean> {\n const result = await this.attachmentsService.attachFile(docTypeId, {\n multiple: true,\n folderId: folderId,\n });\n return result;\n }\n\n /**\n * Uploads file by document type to a specific folder\n */\n async updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.attachmentsService.updateAttachedFile(node.id, {\n folderId: node.parentId ?? '',\n });\n return result;\n }\n\n /**\n * Manage versions: Upload a new version for a specific document\n */\n async uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean> {\n return await this.attachmentsService.uploadNewVersion(node.id);\n }\n\n /**\n * Opens version history popup using common version-history command.\n * For shortcut nodes, shows history of the target document.\n */\n async showVersionHistory(node: AXMDocumentExplorerNode): Promise<void> {\n await this.commandService.execute('show-version-history-popup', {\n options: {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n },\n });\n }\n\n //#region ---- Dialog Operations ----\n\n /**\n * Shows share dialog for a node\n */\n async showShareDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/share-dialog/share-dialog.component')).AXMShareDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the share action with popup.data.data\n }\n }\n\n /**\n * Shows share via email dialog for a node\n */\n async showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/share-email-dialog/share-email-dialog.component'))\n .AXMShareEmailDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share via Email',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the share via email action with popup.data.data\n }\n }\n\n /**\n * Shows link dialog for a node\n */\n async showLinkDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/link-dialog/link-dialog.component')).AXMLinkDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share Link',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the link generation with popup.data.data\n }\n }\n\n /**\n * Shows lock dialog for a document\n */\n async showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.workflow.execute('lock-popup', {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n const isCanceled = result.getOutput('isCanceled') as boolean;\n return !isCanceled;\n }\n\n /**\n * Shows unlock dialog for a document\n */\n async showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.workflow.execute('unlock-confirm', {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n const unlocked = result.getOutput('unlocked') as boolean;\n return unlocked;\n }\n\n /**\n * Shows folder edit dialog\n */\n async showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n // Load document types for selection\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as any)?.items ?? [];\n\n const result = await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog) => {\n dialog\n .setTitle('@document-management:actions.update-folder')\n .setContext({\n name: node.name,\n description: node.description ?? '',\n inherit: node.inherit ?? 'None',\n documentTypes: node.documentTypes ?? [],\n color: '#FFFFFF',\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.name', (field) => {\n field.path('name');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'None', text: 'None' },\n { value: 'Inherited', text: 'Inherited' },\n { value: 'Extends', text: 'Extends' },\n ],\n });\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'name',\n textField: 'title',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n });\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return false;\n }\n const form = context as any;\n const selected = Array.isArray(form.documentTypes) ? form.documentTypes : [];\n const selectedTypes = selected.map((v: any) =>\n typeof v === 'object' ? v : items.find((it: any) => it.name === v) || { name: v, title: v, id: v },\n );\n await this.updateFolder(node.id, {\n title: form.title ?? form.name,\n description: form.description,\n inherit: form.inherit,\n documentTypes: selectedTypes,\n color: form.color,\n });\n return true;\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows create folder dialog.\n * @param parentId Parent folder id\n * @param options.allowedDocumentTypeNames When set, only these document type names can be selected\n */\n async showCreateFolderDialog(\n parentId?: string,\n options?: { allowedDocumentTypeNames?: string[] },\n ): Promise<AXMDocumentExplorerNode | null> {\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n let items = (res as any)?.items ?? [];\n const allowedNames = options?.allowedDocumentTypeNames;\n if (Array.isArray(allowedNames) && allowedNames.length > 0) {\n const set = new Set(allowedNames);\n items = items.filter((it: { name?: string }) => it?.name && set.has(it.name));\n }\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.create-folder')\n .setContext({ title: '', description: '', inherit: 'None', documentTypes: [], color: '#FFFFFF' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'None', text: 'None' },\n { value: 'Inherited', text: 'Inherited' },\n { value: 'Extends', text: 'Extends' },\n ],\n });\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'name',\n textField: 'title',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n });\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n const form = context as any;\n try {\n const folder = await this.createFolder({\n title: form.title,\n color: form.color,\n parentId,\n description: form.description,\n documentTypes: form.documentTypes,\n size: 0,\n inherit: form.inherit,\n });\n return folder;\n } catch (err) {\n console.error('[showCreateFolderDialog] createFolder failed', err);\n throw err;\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows rename popup for a node using dynamic form builder\n */\n async showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | undefined>((dialog) => {\n dialog\n .setTitle('@document-management:actions.rename')\n .setContext({ name: node.name })\n .content((flex) => {\n flex.setDirection('column').formField('@document-management:dialogs.rename.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@document-management:dialogs.rename.name-placeholder',\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions) => {\n actions.cancel().submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as { name?: string };\n if (!formData?.name) {\n return undefined;\n }\n dialogRef.setLoading(true);\n try {\n if (node.type === 'folder') {\n return await this.updateFolder(node.id, { title: formData.name });\n }\n await this.updateFileName(node, formData.name);\n return await this.updateFile(node.id, { name: formData.name });\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows delete nodes confirmation dialog\n */\n async showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean> {\n const folderNodes = nodeIds.filter((n) => n.type === 'folder' && n.storageType !== 'shortcut');\n const fileNodes = nodeIds.filter((n) => n.type === 'file' && n.storageType !== 'shortcut');\n const shortcutNodes = nodeIds.filter((n) => n.storageType === 'shortcut' || n.isShortcut);\n const hasFolders = folderNodes.length > 0;\n const hasFiles = fileNodes.length > 0;\n const hasShortcuts = shortcutNodes.length > 0;\n\n const baseOptions = { process: { showResult: true } };\n\n let result: Awaited<ReturnType<AXPWorkflowService['execute']>>;\n if (hasShortcuts && (hasFolders || hasFiles)) {\n result = await this.workflow.execute('delete-entity', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.storageType === 'shortcut' || node.isShortcut\n ? RootConfig.entities.documentShortcut.name\n : node.type === 'folder'\n ? RootConfig.entities.folder.name\n : RootConfig.entities.document.name\n }`,\n ids: [node.id],\n })),\n options: baseOptions,\n });\n } else if (hasFolders && hasFiles) {\n result = await this.workflow.execute('delete-entity', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name\n }`,\n ids: [node.id],\n })),\n options: baseOptions,\n });\n } else if (hasShortcuts) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.documentShortcut.name}`,\n data: shortcutNodes.length === 1 ? shortcutNodes[0] : shortcutNodes,\n options: baseOptions,\n });\n } else if (hasFolders) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.folder.name}`,\n data: folderNodes.length === 1 ? folderNodes[0] : folderNodes,\n options: baseOptions,\n });\n } else if (hasFiles) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n data: fileNodes.length === 1 ? fileNodes[0] : fileNodes,\n options: baseOptions,\n });\n } else {\n return false;\n }\n return (result.getOutput('result') as boolean) ?? false;\n }\n\n /**\n * Shows choose file dialog\n */\n async showChooseFileDialog(scope: AXPPlatformScope): Promise<AXMDocumentExplorerNode[]> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const result = await this.popupService.open(comp, {\n title: await this.translate.translateAsync('@document-management:actions.choose-from-drive'),\n data: {\n scope: scope,\n },\n });\n if (result.data?.result) {\n return castArray(result.data.items);\n }\n return [];\n }\n\n /** File extensions supported by the gallery viewer (images + PDF). */\n static readonly GALLERY_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'pdf'] as const;\n\n /**\n * Returns nodes that are supported by the gallery (image/pdf extensions).\n */\n getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n return nodes.filter((item) => {\n if (!item.name || item.type !== 'file') return false;\n const ext = item.name.split('.').pop()?.toLowerCase();\n return ext && (AXMDocumentManagerServiceImpl.GALLERY_EXTENSIONS as readonly string[]).includes(ext);\n });\n }\n\n /**\n * Shows file viewer popup using the gallery widget\n */\n async showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: { index?: number; folderVirtualFiles?: AXMDocumentExplorerNode[] },\n ): Promise<void> {\n const isVirtualFolder = node.parentId === 'virtual';\n const parentFolder = await this.folderData.byKey(node.parentId!);\n const parentFolderName = isVirtualFolder\n ? 'Virtual'\n : this.multiLanguageResolver.resolve(parentFolder?.title ?? '');\n const documents = isVirtualFolder\n ? (options?.folderVirtualFiles ?? [])\n : (parentFolder?.documents ?? []);\n\n // Filter documents by gallery-supported extensions\n const filteredDocuments = documents.filter((item) => {\n if (!item.name) return false;\n const ext = item.name.split('.').pop()?.toLowerCase();\n return ext && (AXMDocumentManagerServiceImpl.GALLERY_EXTENSIONS as readonly string[]).includes(ext);\n });\n\n // Convert documents to AXPFileListItem[] format for the gallery widget\n const fileListItems: AXPFileListItem[] = filteredDocuments.map((doc) => {\n const fileInfo =\n (doc as { fileInfo?: AXPFileListItem; fileId?: AXPFileListItem }).fileInfo ??\n (doc as { fileId?: AXPFileListItem }).fileId;\n return {\n ...fileInfo,\n id: doc.id ?? fileInfo?.id ?? '',\n name: doc.name,\n size: fileInfo?.size ?? 0,\n status: 'attached' as const,\n source: fileInfo?.source,\n };\n });\n\n // Calculate start index\n const startIndex = isVirtualFolder\n ? (options?.folderVirtualFiles?.findIndex((f) => f.id === node.id) ?? 0)\n : (options?.index ?? 0);\n\n // Open dialog using layout builder with gallery widget (same config as file-gallery-popup)\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(parentFolderName)\n .setSize('lg')\n .setCloseButton(true)\n .content((layout) => {\n layout\n .setDirection('column')\n .setGap('0')\n .customWidget('gallery', (widget: IWidgetBuilder) => {\n widget.path('galleryFiles').defaultValue(fileListItems).options({\n thumbnail: true,\n header: true,\n fileInfo: true,\n fullScreenButton: true,\n allowUpload: false,\n height: '100%',\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n // Close the dialog when user clicks the Close action\n (dialogRef as AXPDialogRef | undefined)?.close();\n }\n\n /**\n * Updates a file name\n */\n async updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode> {\n if (node.storageType == 'physical') {\n return this.mapFileToNode(await this.documentData.update(node.id, { name }));\n } else {\n node.name = name;\n return node;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Scoped Drive Service ----\n\n/**\n * Scoped drive service for specific platform scopes.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\nexport class ScopedDriveService {\n //#region ---- Constructor ----\n\n constructor(\n private parent: AXMDocumentManagerService,\n private scope: AXPPlatformScope,\n ) { }\n\n //#endregion\n\n //#region ---- Scoped Operations ----\n\n /**\n * Gets root folder for this scope (tenant/user from session).\n */\n async getRoot(): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getRoot(this.scope);\n }\n\n /**\n * Gets folder for this scope.\n */\n async getFolder(folderId: string): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getFolder(this.scope, folderId);\n }\n\n /**\n * Creates folder in this scope. Backend sets tenant/user from request context.\n */\n async createFolder(\n data: Omit<AXMDocumentManagementFolderCreateDto, 'tenantId' | 'userId'>,\n ): Promise<AXMDocumentExplorerNode> {\n return this.parent.createFolder(data as AXMDocumentManagementFolderCreateDto);\n }\n\n /**\n * Updates folder in this scope\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n return this.parent.updateFolder(folderId, data);\n }\n\n /**\n * Deletes folder in this scope\n */\n async deleteFolder(folderId: string): Promise<void> {\n return this.parent.deleteFolder(folderId);\n }\n\n /**\n * Gets available space for this scope\n */\n async getAvailableSpace(): Promise<number> {\n return this.parent.getAvailableSpace();\n }\n\n /**\n * Searches folders in this scope\n */\n async searchFolders(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFolders(searchTerm, this.scope, options);\n }\n\n /**\n * Searches files in this scope\n */\n async searchFiles(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFiles(searchTerm, this.scope, options);\n }\n\n /**\n * Searches nodes in this scope\n */\n async searchNodes(\n searchTerm: string,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchNodes(searchTerm, this.scope, options);\n }\n\n /**\n * Creates a copy of a node in this scope\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n return this.parent.copy(node);\n }\n\n //#endregion\n}\n\n//#endregion\n","export enum AXPDocumentExplorerSettings {\n ViewMode = 'DocumentManagement:Setting:DocumentExplorer.Layout.ViewMode',\n SortField = 'DocumentManagement:Setting:DocumentExplorer.Layout.SortField',\n SortDirection = 'DocumentManagement:Setting:DocumentExplorer.Layout.SortDirection',\n}\n\n","import { AXMenuItem } from '@acorex/components/menu';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileType, AXPFileTypeProviderService, AXPLockService, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentTypeService } from '../../entities';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerSettings } from './settings.keys';\n\nexport const AXPDocumentExplorerViewModel = signalStore(\n { providedIn: 'root' },\n\n withState(() => ({\n // View State\n viewMode: 'large-tiles' as AXPDocumentExplorerViewMode,\n isLoading: false,\n scope: AXPPlatformScope.User,\n\n // Navigation State\n currentPath: [] as AXMDocumentExplorerNode[],\n currentNode: null as AXMDocumentExplorerNode | null,\n loadingFolderId: null as string | null,\n navigatingFolderId: null as string | null,\n backHistory: [] as { folderId: string; path: AXMDocumentExplorerNode[] }[],\n\n // Selection State\n selectionMode: 'none' as AXMDocumentSelectionMode,\n selectedNodes: [] as AXMDocumentExplorerNode[],\n\n // Browse State\n browseMode: 'file' as AXMDocumentExplorerBrowseMode,\n\n // Sort State\n sortField: 'name',\n sortDirection: 'asc',\n\n // Content State\n folders: [] as AXMDocumentExplorerNode[],\n files: [] as AXMDocumentExplorerNode[],\n itemsCount: 0,\n availableSpace: 0,\n\n // Drive State\n currentDrive: null as AXPPlatformScope | null,\n\n // File Type State\n fileTypes: [] as AXPFileType[],\n /** Current file type filter key: 'all' or a file type name from fileTypes. */\n fileTypeFilter: 'all' as string,\n // Detail Panel State\n detailPanel: false,\n /** When set, only these document type names can be selected (create folder) or shown (add item menu). */\n allowedDocumentTypeNames: null as string[] | null,\n })),\n\n withComputed((store) => ({\n isRoot: computed(() => {\n const path = store.currentPath();\n return path.length === 1;\n }),\n\n isVirtual: computed(() => {\n const node = store.currentNode();\n return node?.storageType === 'virtual';\n }),\n\n currentFolder: computed(() => store.currentNode()),\n\n currentFolderContents: computed(() => ({\n folders: store.folders(),\n files: store.files(),\n })),\n\n /** Folders to display: always all folders when filtering by type. */\n filteredFolders: computed(() => store.folders()),\n\n /** Files to display: all files when filter is 'all', otherwise only files whose extension matches the selected type. */\n filteredFiles: computed(() => {\n const filter = store.fileTypeFilter();\n const files = store.files();\n if (filter === 'all') return files;\n const type = store.fileTypes().find((t) => t.name === filter);\n if (!type?.extensions?.length) return files;\n const extSet = new Set(type.extensions.map((e) => e.name.toLowerCase()));\n return files.filter((f) => {\n const ext = f.name.split('.').pop()?.toLowerCase() ?? '';\n return extSet.has(ext);\n });\n }),\n\n isLargeTilesView: computed(() => store.viewMode() === 'large-tiles'),\n isSmallTilesView: computed(() => store.viewMode() === 'small-tiles'),\n isListView: computed(() => store.viewMode() === 'list'),\n isDetailsView: computed(() => store.viewMode() === 'details'),\n isLargeIconsView: computed(() => store.viewMode() === 'large-icons'),\n isSmallIconsView: computed(() => store.viewMode() === 'small-icons'),\n\n isBackAvailable: computed(() => store.backHistory().length > 0),\n isUpAvailable: computed(() => {\n const node = store.currentNode();\n return node?.parentId != null;\n }),\n\n selectedCount: computed(() => store.selectedNodes().length),\n hasSelectedItems: computed(() => store.selectedNodes().length > 0),\n hasMultipleSelectedItems: computed(() => store.selectedNodes().length > 1),\n isMultiSelect: computed(() => store.selectionMode() === 'multiple'),\n selectedNode: computed<AXMDocumentExplorerNode | null>(() => store.selectedNodes()[0] ?? null),\n\n isDetailPanelOpen: computed(() => store.detailPanel()),\n })),\n\n withMethods(\n (\n store,\n fileTypeService = inject(AXPFileTypeProviderService),\n driveService = inject(AXMDocumentManagerService),\n settingsService = inject(AXPSettingsService),\n translateService = inject(AXTranslationService),\n lockService = inject(AXPLockService),\n ) => ({\n setAllowedDocumentTypeNames(names: string[] | null): void {\n patchState(store, { allowedDocumentTypeNames: names });\n },\n\n async initialize(options?: {\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n filter?: any;\n }) {\n // Apply route scope synchronously before any await so nested UI (e.g. query-filters effect) cannot\n // navigate while the store still holds the default User scope.\n const scope = options?.scope ?? AXPPlatformScope.User;\n const browseMode = options?.browseMode ?? 'file';\n patchState(store, { scope, browseMode });\n\n const fileTypes = await fileTypeService.items();\n patchState(store, { fileTypes });\n // Load initial settings (use same scope for get/set so persistence works after refresh)\n const scopedSettings = settingsService.scope(scope);\n const viewMode = await scopedSettings.get(AXPDocumentExplorerSettings.ViewMode);\n const sortField = await scopedSettings.get(AXPDocumentExplorerSettings.SortField);\n const sortDirection = await scopedSettings.get(AXPDocumentExplorerSettings.SortDirection);\n patchState(store, {\n viewMode: viewMode ?? 'large-tiles',\n sortField: sortField ?? 'name',\n sortDirection: sortDirection ?? 'asc',\n });\n },\n\n _load: async (folderId: string) => {\n patchState(store, { loadingFolderId: folderId, isLoading: true });\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n try {\n const node = await driveService.getFolder(store.scope(), folderId);\n\n // Sort with direction\n const sortField = store.sortField();\n const sortDirection = store.sortDirection();\n const directionMultiplier = sortDirection === 'asc' ? 1 : -1;\n\n switch (sortField) {\n case 'name':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n case 'modified':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.modifiedAt?.getTime() ?? 0) - (b.modifiedAt?.getTime() ?? 0)),\n );\n break;\n case 'size':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.size ?? 0) - (b.size ?? 0)),\n );\n break;\n default:\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n }\n\n patchState(store, {\n currentNode: node.result,\n currentPath: node.path,\n\n folders: node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'folder') || [],\n files:\n node.result.children?.filter(\n (item: AXMDocumentExplorerNode) => store.browseMode() == 'file' && item.type === 'file',\n ) || [],\n itemsCount: node.result.children?.length || 0,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n });\n } catch (error) {\n patchState(store, {\n loadingFolderId: null,\n isLoading: false,\n });\n throw error;\n }\n },\n\n navigateToFolder(folderId: string) {\n const currentNode = store.currentNode();\n if (currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n }\n patchState(store, { navigatingFolderId: folderId });\n },\n\n async loadFolderContents(folderId: string) {\n await this._load(folderId);\n this.deselectAll();\n },\n\n async virtualFolder(\n files: AXMDocumentExplorerNode[] = [],\n options?: {\n name?: string;\n parentId?: string;\n },\n ) {\n const id = 'virtual';\n patchState(store, {\n loadingFolderId: id,\n isLoading: true,\n });\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n const node: AXMDocumentExplorerNode = {\n id: id,\n name: options?.name || 'virtual',\n type: 'folder',\n children: files,\n parentId: options?.parentId || null,\n size: 0,\n // TODO\n documentTypes: [],\n storageType: 'virtual',\n };\n patchState(store, {\n currentNode: node,\n currentPath: [node],\n folders: files.filter((item) => item.type === 'folder'),\n files: files.filter((item) => item.type === 'file'),\n itemsCount: files.length,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n });\n },\n\n setViewMode(mode: AXPDocumentExplorerViewMode | string) {\n patchState(store, { viewMode: mode as AXPDocumentExplorerViewMode });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.ViewMode, mode);\n },\n isViewMode(mode: AXPDocumentExplorerViewMode | string) {\n return store.viewMode() === mode;\n },\n\n setSortField(field: string) {\n patchState(store, { sortField: field });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.SortField, field);\n this.refresh();\n },\n\n setSortDirection(direction: string) {\n patchState(store, { sortDirection: direction });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.SortDirection, direction);\n this.refresh();\n },\n setSelectionMode(mode: AXMDocumentSelectionMode | string) {\n patchState(store, { selectionMode: mode as AXMDocumentSelectionMode });\n },\n\n setDrive(scope: AXPPlatformScope) {\n patchState(store, { currentDrive: scope });\n },\n\n /** Sets the file type filter: 'all' or a file type name. Only files with matching extension are shown. */\n setFileTypeFilter(key: string) {\n patchState(store, { fileTypeFilter: key ?? 'all' });\n },\n\n isLoadingFolder(folderId: string): boolean {\n return store.loadingFolderId() === folderId;\n },\n\n getFileInfo(fileName: string): { icon: string; type: string } {\n const fileTypes = store.fileTypes();\n const extension = fileName.split('.').pop()?.toLowerCase() || '';\n const extensions = fileTypes.flatMap((type) => type.extensions);\n const fileType = extensions.find((e) => e.name === extension);\n\n return {\n icon: fileType?.icon || 'fa-light fa-file',\n type: fileType?.name || 'Unknown',\n };\n },\n\n /**\n * Returns display info for any node (file or folder), including shortcut indicator.\n * Use in views to show the correct icon and a Windows-style shortcut arrow when applicable.\n */\n getNodeDisplayInfo(node: AXMDocumentExplorerNode): { icon: string; type: string; isShortcut: boolean } {\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n if (node.type === 'file') {\n const info = this.getFileInfo(node.name);\n return { icon: info.icon, type: info.type, isShortcut };\n }\n return {\n icon: 'fa-light fa-folder ax-text-yellow-500',\n type: 'Folder',\n isShortcut,\n };\n },\n\n\n getNodeInfo(node: AXMDocumentExplorerNode): {\n name: string;\n icon: string;\n type: string;\n sections: {\n title: string;\n details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[];\n }[];\n } {\n // If no node, return a default object\n if (!node) {\n return {\n name: '---',\n icon: 'fa-light fa-folder',\n type: 'Folder',\n sections: [\n {\n title: 'Details',\n details: [],\n },\n ],\n };\n }\n\n // If the node is a file, return the file info\n if (node.type === 'file') {\n const fileTypes = store.fileTypes();\n const extension = node.name.split('.').pop()?.toLowerCase() || '';\n const extensions = fileTypes.flatMap((type) => type.extensions);\n const fileType = extensions.find((e) => e.name === extension);\n const details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: 'Description',\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Size',\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n ...(node.expirationDate\n ? [\n {\n title: 'Expire Date',\n content: node.expirationDate,\n format: 'date' as const,\n icon: 'fa-solid fa-calendar-days',\n },\n ]\n : []),\n {\n title: 'Created at',\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: 'Modified at',\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n details.unshift({\n title: 'Shortcut',\n content: node.targetDocumentId ? 'Links to a document' : 'Links to a folder',\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: fileType?.icon || 'fa-light fa-file',\n type: 'File',\n sections: node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: 'Details',\n details,\n },\n {\n title: 'Metadata',\n details: [],\n },\n ]\n : [\n {\n title: 'Details',\n details,\n },\n ],\n };\n }\n // If the node is a folder, return the folder info\n else {\n const folderDetails: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: 'Description',\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Items',\n content: node.childrenCount,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Size',\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Created at',\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: 'Modified at',\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n folderDetails.unshift({\n title: 'Shortcut',\n content: 'Links to a folder',\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: 'fa-light fa-folder ax-text-yellow-500',\n type: 'Folder',\n sections: [\n {\n title: 'Details',\n details: folderDetails,\n },\n ],\n };\n }\n },\n\n sortItems(items: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n const field = store.sortField();\n const direction = store.sortDirection();\n\n return [...items].sort((a, b) => {\n let comparison = 0;\n\n switch (field) {\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'modified':\n const aDate = a.modifiedAt ? new Date(a.modifiedAt) : new Date(0);\n const bDate = b.modifiedAt ? new Date(b.modifiedAt) : new Date(0);\n comparison = aDate.getTime() - bDate.getTime();\n break;\n case 'size':\n comparison = (a.size || 0) - (b.size || 0);\n break;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n\n async refresh() {\n if (!store.isVirtual()) {\n const currentFolder = store.currentNode();\n if (currentFolder) {\n await this._load(currentFolder.id);\n }\n } else {\n patchState(store, { loadingFolderId: 'fake' });\n patchState(store, { loadingFolderId: null });\n }\n },\n\n navigateToUp() {\n const currentNode = store.currentNode();\n const parentId = currentNode?.parentId;\n if (parentId && currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n patchState(store, { navigatingFolderId: parentId });\n this.loadFolderContents(parentId);\n }\n },\n\n async navigateBack() {\n const history = store.backHistory();\n if (history.length === 0) {\n return;\n }\n const lastEntry = history[history.length - 1];\n patchState(store, { backHistory: history.slice(0, history.length - 1) });\n patchState(store, { navigatingFolderId: lastEntry.folderId });\n await this.loadFolderContents(lastEntry.folderId);\n },\n\n async openGalleryWithFolderId(): Promise<void> {\n const folder = store.currentNode();\n const files = folder?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') || [];\n const galleryFiles = driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await driveService.showFileViewerPopup(galleryFiles[0]);\n }\n },\n\n //TODO: Delete only one node at a time\n async deleteNodes(nodes: AXMDocumentExplorerNode[] = store.selectedNodes()) {\n if (store.isVirtual()) {\n patchState(store, {\n files: store.currentFolderContents().files.filter((file) => !nodes.some((node) => node.name === file.name)),\n });\n this.deselectAll();\n } else {\n const result = await driveService.showDeleteNodesDialog(nodes);\n if (result) {\n this.deselectAll();\n await this.refresh();\n }\n }\n },\n\n toggleSelect(node: AXMDocumentExplorerNode) {\n if (store.selectionMode() === 'multiple') {\n patchState(store, {\n selectedNodes: store.selectedNodes().includes(node)\n ? store.selectedNodes().filter((n) => n.id !== node.id)\n : [...store.selectedNodes(), node],\n });\n } else {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n isItemSelected(node: AXMDocumentExplorerNode): boolean {\n return store.selectedNodes().some((selectedNode) => selectedNode.id === node.id);\n },\n\n selectAll() {\n patchState(store, {\n selectedNodes: [...store.filteredFolders(), ...store.filteredFiles()],\n });\n },\n\n deselectAll() {\n patchState(store, { selectedNodes: [] });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n },\n\n toggleDetailPanel() {\n patchState(store, { detailPanel: !store.detailPanel() });\n },\n\n //#region Menu Items\n\n async getFolderAddMenuItems({canAddFolder = true}: {canAddFolder?: boolean} = {}): Promise<AXPActionMenuItem[]> {\n const files =\n store.currentFolder()?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') ?? [];\n const galleryFiles = driveService.getGallerySupportedFiles(files);\n const openGalleryItem =\n galleryFiles.length > 0\n ? [\n {\n title: await translateService.translateAsync('@document-management:actions.open-gallery'),\n icon: 'fa-light fa-images',\n break: true,\n command: {\n name: 'open-gallery',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n },\n ]\n : [];\n const folderTypes = store.currentFolder()?.documentTypes ?? [];\n const allowedNames = store.allowedDocumentTypeNames();\n let typesToShow =\n allowedNames != null && allowedNames.length > 0\n ? folderTypes.filter((t) => t?.name && allowedNames.includes(t.name))\n : folderTypes;\n if (\n allowedNames != null &&\n allowedNames.length > 0 &&\n typesToShow.length === 0\n ) {\n typesToShow = await driveService.getDocumentTypesByNames(allowedNames);\n }\n\n return [\n ...(canAddFolder ? [ {\n title: await translateService.translateAsync('@document-management:actions.create-folder'),\n icon: 'fa-light fa-folder-plus',\n break: true,\n command: {\n name: 'new-folder',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n }] : []),\n ...typesToShow.map((type) => ({\n title: type.title,\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n command: {\n name: `upload.${type.name}`,\n options: {\n folderId: store.currentFolder()?.id,\n documentType: type,\n },\n },\n })),\n ...openGalleryItem,\n ] as AXPActionMenuItem[];\n },\n\n async getFolderActionMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'refresh',\n title: await translateService.translateAsync('@document-management:actions.refresh'),\n icon: 'fa-light fa-rotate-right',\n // break: true,\n },\n // {\n // name: 'delete',\n // title: await translateService.translateAsync('delete'),\n // color: 'danger',\n // icon: 'fa-light fa-trash',\n // },\n ];\n },\n\n //#endregion\n\n //#region Context Menu Items\n\n async getContextMenuItems(): Promise<AXPActionMenuItem[]> {\n return [...(await this.getFolderAddMenuItems()), ...(await this.getFolderActionMenuItems())];\n },\n\n //#endregion\n\n //#region ---- Menu Items ----\n\n /**\n * Returns menu items for file context menu\n */\n async getFileContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n const isLocked = async () => await this.isLocked(node);\n // const isNodeLocked = false;\n\n const menuItems: AXMenuItem[] = [\n {\n name: 'open-file',\n text: await trans('menus.context.open'),\n icon: this.getFileInfo(node.name).icon,\n data: node,\n },\n {\n name: 'download',\n text: await trans('menus.context.download'),\n icon: 'fa-light fa-download',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-share-nodes',\n items: [\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-users',\n data: node,\n },\n {\n name: 'share-with-email',\n text: await trans('menus.context.share.email'),\n icon: 'fa-light fa-envelope',\n data: node,\n },\n {\n name: 'link',\n text: await trans('menus.context.share.link'),\n icon: 'fa-light fa-link',\n data: node,\n },\n ],\n break: true,\n },\n ];\n\n // Manage versions (only if document type has versioning enabled)\n // const docType = node.documentTypes?.[0];\n //TODO handle versioning\n // if (docType?.enableVersioning) {\n // menuItems.push({\n // name: 'manage-versions',\n // text: await trans('menus.context.manage-versions'),\n // icon: 'fa-light fa-clock-rotate-left',\n // items: [\n // {\n // name: 'upload-new-version',\n // text: await trans('menus.context.upload-new-version'),\n // icon: 'fa-light fa-file-circle-plus',\n // data: node,\n // },\n // {\n // name: 'show-version-history',\n // text: await trans('menus.context.show-version-history'),\n // icon: 'fa-light fa-timeline',\n // data: node,\n // },\n // ],\n // break: true,\n // });\n // }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n // if (!isNodeLocked) {\n // infoSubItems.unshift({\n // name: 'rename',\n // text: await trans('menu.rename'),\n // icon: 'fa-light fa-pencil',\n // data: node,\n // });\n // }\n\n //Add lock or unlock based on current state\n // if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n // } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n // }\n\n menuItems.push({\n name: 'file-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n menuItems.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n break: true,\n data: node,\n },\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n\n return menuItems;\n },\n\n /**\n * Returns menu items for folder context menu\n */\n async getFolderContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n // const isNodeLocked = await this.isLocked(node);\n const isNodeLocked = false;\n\n const items: AXMenuItem[] = [\n {\n name: 'open-folder',\n text: await trans('menus.context.open'),\n icon: 'fa-light fa-folder-open',\n data: node,\n },\n ];\n\n // Add upload menu only if not locked\n if (!isNodeLocked && node?.documentTypes?.length) {\n items.push({\n text: await trans('menus.context.upload'),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n items: node.documentTypes.map((type, index, array) => ({\n name: `upload.${type.name}`,\n text: type.title,\n icon: 'fa-light fa-file-arrow-up',\n break: index !== array.length - 1,\n data: {\n node,\n documentType: type,\n },\n })),\n });\n }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n if (!isNodeLocked) {\n infoSubItems.unshift({\n name: 'rename',\n text: await trans('menus.context.rename'),\n icon: 'fa-light fa-pencil',\n data: node,\n });\n }\n\n // Add lock or unlock based on current state\n if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n }\n\n items.push({\n name: 'folder-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n if (!isNodeLocked) {\n items.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n }\n\n return items;\n },\n\n /**\n * Returns context menu items based on node type\n */\n async getNodeContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n if (node.type === 'file') {\n return await this.getFileContextMenuItems(node);\n } else {\n return await this.getFolderContextMenuItems(node);\n }\n },\n\n //#endregion\n\n //#region ---- Menu Actions ----\n\n /**\n * Opens a file (double-click / Open action). For files, triggers download; same behavior as Download action.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type === 'file') {\n this.downloadFile(node);\n } else {\n await driveService.openFile(node);\n }\n },\n\n /**\n * Handles all menu item clicks\n */\n async handleMenuItemClick(name: string, data: any): Promise<void> {\n const node = data as AXMDocumentExplorerNode;\n switch (name) {\n case 'open-folder':\n this.navigateToFolder(node.id);\n break;\n case 'open-file':\n await this.openFile(node);\n break;\n case 'open-gallery':\n if (data.folderId != null) {\n await this.openGalleryWithFolderId();\n } else {\n await this.openGallery(node);\n }\n break;\n case 'download':\n this.downloadFile(node);\n break;\n case 'new-folder':\n await this.createFolder(node);\n break;\n case 'paste':\n //TODO: Handle paste operation\n break;\n case 'move-to':\n await this.moveTo(node);\n break;\n case 'copy-to':\n await this.copyTo(node);\n break;\n case 'create-shortcut':\n await this.createShortcut(node);\n break;\n case 'rename':\n await this.renameNode(node);\n break;\n case 'properties':\n await this.showFolderProperty(node);\n break;\n case 'delete':\n await this.deleteNodes([node]);\n break;\n case 'refresh':\n await this.refresh();\n break;\n case 'upload-new-version':\n await driveService.uploadNewVersion(node);\n await this.refresh();\n break;\n case 'show-version-history':\n await driveService.showVersionHistory(node);\n break;\n case 'copy':\n await this.makeCopy(node);\n break;\n /*\n case 'share':\n await this.share(node);\n break;\n case 'share-with-email':\n await this.shareWithEmail(node);\n break;\n case 'link':\n await this.link(node);\n break;\n */\n case 'lock':\n await this.lock(node);\n break;\n case 'unlock':\n await this.unlock(node);\n break;\n default:\n if (name?.startsWith('upload.')) {\n await this.uploadFileByType(data.node?.id ?? store.currentNode()?.id, data.documentType.id);\n await this.refresh();\n }\n break;\n }\n },\n\n /**\n * Downloads the specified file\n */\n downloadFile(node: AXMDocumentExplorerNode): void {\n driveService.downloadFile(node);\n },\n\n /**\n * Opens the gallery for a folder\n */\n async openGallery(node: AXMDocumentExplorerNode): Promise<void> {\n await driveService.showFileViewerPopup(node, {\n folderVirtualFiles: store.files(),\n index: store.files().findIndex((f: AXMDocumentExplorerNode) => f.id === node.id),\n });\n },\n\n /**\n * Shows properties for a folder\n */\n async showFolderProperty(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type == 'folder') {\n if (await driveService.showFolderEditDialog(node)) {\n await this.refresh();\n }\n } else {\n if (await driveService.updateUploadFileByType(node)) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a new folder\n */\n async createFolder(node?: AXMDocumentExplorerNode): Promise<void> {\n const parentId = node?.id ?? store.currentNode()?.id;\n if (parentId) {\n const allowedNames = store.allowedDocumentTypeNames();\n console.log('allowedNames', allowedNames);\n \n const result = await driveService.showCreateFolderDialog(parentId, {\n allowedDocumentTypeNames:\n allowedNames != null && allowedNames.length > 0 ? allowedNames : undefined,\n });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Renames a node\n */\n async renameNode(node?: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n if (node) {\n const result = await driveService.showRenamePopup(node);\n if (result) {\n if (node.storageType == 'virtual') {\n const files = store.files();\n const updatedFiles = files.map((file) => {\n if (file.id === result.id) {\n return result;\n }\n return file;\n });\n this.virtualFolder(updatedFiles);\n }\n await this.refresh();\n }\n return result;\n }\n return;\n },\n\n /**\n * Makes a copy of a node\n */\n async makeCopy(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n try {\n await driveService.copy(node);\n await this.refresh();\n } catch (error) {\n console.error('Error copying node:', error);\n }\n }\n },\n\n /**\n * Checks if a node is locked\n */\n async isLocked(node: AXMDocumentExplorerNode): Promise<boolean> {\n try {\n return lockService.check({\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n } catch (error) {\n console.error('Error checking lock status:', error);\n return false;\n }\n },\n\n /**\n * Locks a node\n */\n async lock(node: AXMDocumentExplorerNode): Promise<void> {\n const locked = await driveService.showLockDialog(node);\n if (locked) {\n await this.refresh();\n }\n },\n\n /**\n * Unlocks a node\n */\n async unlock(node: AXMDocumentExplorerNode): Promise<void> {\n const unlocked = await driveService.showUnlockDialog(node);\n if (unlocked) {\n await this.refresh();\n }\n },\n\n /**\n * Moves a node to a different location\n */\n async moveTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Copies a node to a different location\n */\n async copyTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a shortcut to the node in a folder chosen by the user.\n */\n async createShortcut(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const created = await driveService.createShortcutWithPicker(node, store.scope());\n if (created) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Uploads a file by type\n */\n async uploadFileByType(folderId: string, documentTypeId: string): Promise<void> {\n await driveService.uploadFileByType(folderId, documentTypeId);\n await this.refresh();\n },\n\n //#endregion\n }),\n ),\n);\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, signal, Type, viewChild, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { get } from 'lodash-es';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerViewModel } from './document-explorer.viewmodel';\n@Component({\n selector: 'axm-document-explorer',\n templateUrl: './document-explorer.component.html',\n styleUrls: ['./document-explorer.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n RouterModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXFormatModule,\n AXDateTimeModule,\n AXMenuModule,\n AXPStateMessageComponent,\n ],\n})\nexport class AXMDocumentExplorerComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected contextMenu = viewChild<AXContextMenuComponent>('itemsContextMenu');\n protected rootContextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n protected driveService = inject(AXMDocumentManagerService);\n protected translateService = inject(AXTranslationService);\n protected readonly layout = inject(AXPLayoutThemeService);\n\n browseMode = input<AXMDocumentExplorerBrowseMode>('file');\n viewMode = input<AXPDocumentExplorerViewMode>();\n selectionMode = input<AXMDocumentSelectionMode>('none');\n showContextMenu = input<boolean>(true);\n\n protected view = signal<Type<any> | null>(null);\n\n private viewMap = {\n list: async () => (await import('./views/list/list-view.component')).AXMDocumentExplorerListViewComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view.component')).AXMDocumentExplorerSmallTilesViewComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view.component')).AXMDocumentExplorerLargeTilesViewComponent,\n details: async () =>\n (await import('./views/details/details-view.component')).AXMDocumentExplorerDetailsViewComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view.component')).AXMDocumentExplorerLargeIconsViewComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view.component')).AXMDocumentExplorerSmallIconsViewComponent,\n 'attachment': async () =>\n (await import('./views/attachement-widget/attachment-widget.component')).AXMDocumentExplorerAttachmentComponent,\n };\n\n #effect = effect(() => {\n if (this.vm.loadingFolderId() == null) {\n setTimeout(() => {\n this.contextMenu()?.refresh();\n this.rootContextMenu()?.refresh();\n }, 300);\n }\n });\n\n #effect2 = effect(() => {\n if (this.viewMode()) {\n this.vm.setViewMode(this.viewMode()!);\n }\n if (this.selectionMode()) {\n this.vm.setSelectionMode(this.selectionMode()!);\n }\n });\n\n #effect3 = effect(async () => {\n const func = get(this.viewMap, this.vm.viewMode() as string) ?? this.viewMap['large-tiles'];\n const comp = await func();\n this.view.set(comp);\n // Re-bind context menus to the new view DOM so right-click on items is recognized\n setTimeout(() => {\n this.contextMenu()?.refresh();\n this.rootContextMenu()?.refresh();\n }, 100);\n });\n\n //#region Menu and Context Menu\n\n protected async handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n const el = e.targetElement as HTMLElement | undefined;\n const node = (get(el, '__data__') ?? get(el?.closest?.('.__explorer-item'), '__data__')) as\n | AXMDocumentExplorerNode\n | undefined;\n if (!node) {\n return;\n }\n\n // Get menu items from ViewModel\n const items = await this.vm.getNodeContextMenuItems(node);\n\n // Set items directly to the context menu\n e.items.push(...items);\n }\n\n protected async handleContextMenuRootOnOpening(e: AXContextMenuOpeningEvent) {\n //TODO: check async translate method in acorex\n const items = [\n ...(await this.vm.getFolderAddMenuItems()).map((m) => ({\n ...m,\n name: m.command?.name,\n data: m.command?.options,\n })),\n ...(await this.vm.getFolderActionMenuItems()),\n ];\n const mappedItems = items.map((m) => ({\n ...m,\n text: m.title,\n })) as AXMenuItem[];\n e.items.push(...mappedItems);\n\n e.items[e.items.length - 1].break = false;\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n await this.vm.handleMenuItemClick(e.item.name, e.item.data);\n }\n }\n\n //#endregion\n\n // تمام متدهای زیر به ViewModel منتقل شده‌اند و دیگر مورد نیاز نیستند\n\n}\n","<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.filteredFolders().length === 0 && vm.filteredFiles().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n","import { AXButtonModule } from \"@acorex/components/button\";\nimport { AXDecoratorModule } from \"@acorex/components/decorators\";\nimport { AXPDocumentExplorerViewModel } from \"../../../document-explorer\";\nimport { AXMDocumentExplorerNode } from \"../../document-manager.types\";\nimport { Component, inject } from \"@angular/core\";\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\n\n\n@Component({\n selector: 'axm-folder-path-breadcrumbs',\n templateUrl: './folder-path-breadcrumbs.component.html',\n styleUrls: ['./folder-path-breadcrumbs.component.scss'],\n standalone: true,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n ],\n})\nexport class AXMFolderPathBreadcrumbsComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected layout = inject(AXPLayoutThemeService);\n}\n","<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport {\n AXPFileActionProvider,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex/platform/common';\nimport { AXMDocumentManagerService } from '../../../shared';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXDialogService } from '@acorex/components/dialog';\n\nexport const UploadFromDriveActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 2,\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const driveService = inject(AXMDocumentManagerService);\n const fileStorageService = inject(AXPFileStorageService);\n const translationService = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-document-from-drive',\n global: true,\n textKey: '@document-management:actions.choose-from-drive',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const result = await driveService.showChooseFileDialog(AXPPlatformScope.Tenant);\n\n if (!result || result.length === 0) {\n return;\n }\n\n // Show confirm dialog for clone option\n // Yes/Okay -> clone, No/Cancel -> by-reference\n const dialogTitle = await translationService.translateAsync(\n '@document-management:actions.upload-options.title',\n );\n const dialogMessage = await translationService.translateAsync(\n '@document-management:actions.upload-options.confirm-message',\n );\n\n const dialogResult = await dialogService.confirm(\n dialogTitle,\n dialogMessage,\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n\n // Yes/Okay -> clone, No/Cancel -> by-reference\n const attachmentType = dialogResult.result ? 'clone' : 'by-reference';\n\n // Add files with uploading status\n const initialFiles = result.map((item: any) => ({\n ...(item.fileId ?? {}),\n status: 'uploading' as const,\n })) as AXPFileListItem[];\n\n capabilities.addFiles(initialFiles);\n\n // Process files based on attachment type\n for await (const item of result) {\n if (item.type === 'folder') {\n continue;\n }\n\n const fileId = item.fileId?.id ?? '';\n const currentFile = capabilities.getFileById(fileId);\n\n if (!currentFile) {\n continue;\n }\n\n if (attachmentType === 'by-reference') {\n // By reference: just set documentId\n capabilities.updateFileById(fileId, {\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: item.id,\n type: 'document',\n },\n },\n });\n } else {\n // Clone: get file info and create blob\n try {\n const storageInfo = await fileStorageService.getInfo(fileId);\n if (!storageInfo) {\n capabilities.removeFile(currentFile);\n continue;\n }\n\n capabilities.updateFileById(fileId, {\n id: AXPDataGenerator.uuid(),\n status: 'attached',\n source: {\n kind: 'blob',\n value: new Blob([storageInfo.binary as BlobPart], { type: storageInfo.mimeType }),\n },\n });\n } catch {\n capabilities.removeFile(currentFile);\n }\n }\n }\n },\n },\n ];\n\n return payload;\n },\n};\n\n\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { AXP_FILE_ACTION_PROVIDER, UploadFromComputerActionProvider } from \"@acorex/platform/common\";\nimport { UploadFromDriveActionProvider } from \"./slots/file-uploader-widget-extension\";\n\n@NgModule({\n imports:[\n ],\n providers: [\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromComputerActionProvider, multi: true },\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromDriveActionProvider, multi: true }\n ]\n}) \nexport class AXMDriveChooseModule { \n\n}","import { AXUploaderService } from '@acorex/cdk/uploader';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMDocumentDocDto, AXMDocumentTypeService } from '../../../entities';\nimport { AXMDocumentDialogService } from '../../shared/services/document-dialog.service';\n\n@Injectable()\nexport class AXMCheckDocumentTypeWorkflowAction extends AXPWorkflowAction {\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const documentType = context.getVariable('documentType');\n if (documentType) {\n context.setOutput('need-choose-document-type', false);\n } else {\n context.setOutput('need-choose-document-type', true);\n }\n }\n}\n\n@Injectable()\nexport class AXMChooseDocumentTypeWorkflowAction extends AXPWorkflowAction {\n private readonly documentDialog = inject(AXMDocumentDialogService);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const result = await this.documentDialog.chooseDocumentType();\n if (result.cancelled) {\n context.setOutput('isCanceled', true);\n return;\n }\n context.setVariable('documentTypeId', result.documentTypeId);\n context.setOutput('isCanceled', false);\n }\n}\n\n@Injectable()\nexport class AXMChooseFileWorkflowAction extends AXPWorkflowAction {\n documentTypeService = inject(AXMDocumentTypeService);\n uploadService = inject(AXUploaderService);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n var doc: AXMDocumentDocDto = context.getVariable('documentType');\n if (!doc) {\n const docId = context.getVariable('documentTypeId');\n doc = await this.documentTypeService.getOne(docId);\n }\n\n this.uploadService.browse({\n //accept: doc.type,\n multiple: false,\n });\n }\n}\n\nexport const AXMUploadWorkflow: AXPWorkflow = {\n startStepId: 'check-document-type',\n steps: {\n 'check-document-type': {\n action: 'AXMCheckDocumentTypeWorkflowAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"need-choose-document-type\") == true' }],\n nextStepId: 'choose-document-type',\n },\n ],\n },\n 'choose-document-type': {\n action: 'AXMChooseDocumentTypeWorkflowAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"isCanceled\") == false' }],\n nextStepId: 'file-browser',\n },\n ],\n },\n 'file-browser': {\n action: 'AXMChooseFileWorkflowAction',\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'dispatch-event',\n },\n ],\n },\n },\n};\n","import {\n AXPEntityActionPlugin,\n ensureListActions,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex/platform/layout/entity';\n\n/** Component key for the entity Documents (EDMS) page. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DOCUMENT_DRIVE_PAGE_COMPONENT_KEY = 'entity-document-drive-page';\n\nexport type DocumentPluginOptions = {\n /** Page title. Default: @document-management:terms.common.documents */\n title?: string;\n /** Page icon. Default: fa-light fa-folder-open */\n icon?: string;\n /**\n * Restrict document types for this entity: only these types can be selected when creating a folder\n * or uploading. User cannot see or select other document types.\n */\n documentTypeNames?: string[];\n};\n\n/**\n * Document (EDMS) plugin. Adds a \"Documents\" page to the entity that loads the folder\n * bound to the current record via refType/refId (getRootByEntityRef). Uses the same\n * drive UI (explorer, toolbar, detail panel) scoped to that folder.\n */\nexport const documentPlugin: AXPEntityActionPlugin = {\n name: 'documents',\n order: 51,\n apply: (ctx, options?: DocumentPluginOptions) => {\n const opts = options ?? {};\n const title = (opts.title?.trim().length ?? 0) > 0 ? opts.title! : '@document-management:terms.common.documents';\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'documents',\n {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n skipPage: pageExists\n ? { componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY }\n : undefined,\n },\n );\n const pageEntry: {\n componentKey: string;\n title: string;\n icon: string;\n layout: { order: number };\n refType: string;\n allowedDocumentTypeNames?: string[];\n options?: Record<string, any>;\n } = {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n title,\n icon: opts.icon ?? 'fa-light fa-files',\n layout: { order: pageOrder },\n refType,\n options: {\n documentTypeNames: opts.documentTypeNames,\n },\n };\n if (Array.isArray(opts.documentTypeNames) && opts.documentTypeNames.length > 0) {\n pageEntry.allowedDocumentTypeNames = opts.documentTypeNames;\n }\n if (!pageExists) {\n (ctx.entity.pages as (typeof pageEntry)[]).push(pageEntry);\n } else {\n const pages = ctx.entity.pages as typeof pageEntry[];\n const index = pages.findIndex((p) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...pageEntry };\n }\n }\n\n ensureListActions(ctx);\n },\n};\n","import { Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { CommonModule } from '@angular/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport { AXMDocumentTypeService } from '../../../../entities';\nimport type { AXMMetaDataBuilderValue } from '@acorex/modules/data-management';\n\n@Component({\n selector: 'axm-document-explorer-detail-panel',\n templateUrl: './detail-panel.component.html',\n styleUrls: ['./detail-panel.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXFormatModule,\n AXButtonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n ],\n})\nexport class AXMDocumentExplorerDetailPanelComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n\n /** Schema (groups) for metadata form; set when selected file has a document type with metaDataList. */\n protected metadataSchema = signal<AXMMetaDataBuilderValue | null>(null);\n /** Context passed to meta-data-form-editor widget (value = metaDataForm). */\n protected metadataContext = signal<{ metaDataForm: Record<string, unknown> }>({ metaDataForm: {} });\n /** Stable widget node for meta-data-form-editor; only updated when schema loads, to avoid re-render loop. */\n protected metadataWidgetNode = signal<{ type: string; path: string; options: { groups: any[] } } | null>(null);\n\n constructor() {\n effect(() => {\n const node = this.vm.selectedNode() as AXMDocumentExplorerNode | null | undefined;\n if (!node || node.type !== 'file' || !node.documentTypes?.[0]?.id) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const documentTypeId = node.documentTypes[0].id;\n this.documentTypeService.getOne(documentTypeId).then((doc: { metaDataList?: AXMMetaDataBuilderValue }) => {\n const metaDataList = doc?.metaDataList ?? null;\n this.metadataSchema.set(metaDataList);\n this.metadataContext.set({ metaDataForm: (node.metaDataForm ?? {}) as Record<string, unknown> });\n this.metadataWidgetNode.set(\n metaDataList\n ? {\n type: 'meta-data-form-editor',\n path: 'metaDataForm',\n options: {\n groups: (metaDataList.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({ ...field, mode: 'view' as const })),\n })),\n },\n }\n : null,\n );\n \n }).catch(() => {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n });\n });\n }\n}\n","<!-- Multiple Selected -->\n@if (vm.hasMultipleSelectedItems()) {\n <div class=\"__header\" *translate=\"let t\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg fa-solid\"></i>\n <span> {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\"></div>\n}\n<!-- Single Selected -->\n@else {\n <!-- Info -->\n @let nodeInfo = vm.getNodeInfo((vm.selectedNode() ?? vm.currentFolder())!);\n @let sel = vm.selectedNode() ?? vm.currentFolder();\n @let isShortcut = sel && (sel.storageType === 'shortcut' || sel.isShortcut);\n <div class=\"__header\">\n <div class=\"__title\">\n <span class=\"detail-panel-icon\" [class.detail-panel-icon--shortcut]=\"isShortcut\">\n <i class=\"fa-fw fa-lg {{ nodeInfo.icon }} fa-solid\"></i>\n @if (isShortcut) {\n <i class=\"fa-light fa-up-right-from-square detail-panel-icon__arrow\" aria-hidden=\"true\"></i>\n }\n </span>\n <span>{{ nodeInfo.name }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\">\n @for (section of nodeInfo.sections; track section.title) {\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ section.title }}</span>\n </div>\n <div class=\"__content\">\n @if (section.title === 'Metadata' && metadataWidgetNode(); as widgetNode) {\n <axp-widgets-container [context]=\"metadataContext()\">\n <ng-container axp-widget-renderer [node]=\"widgetNode\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n } @else {\n @for (detail of section.details; track detail.title) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ detail.title }}</span>\n </div>\n <div class=\"__content\">\n @if (detail.format) {\n <span>{{ detail.content | format: detail.format | async }}</span>\n } @else {\n <span>{{ detail.content ?? '---' }}</span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPPlatformScope,\n} from '@acorex/platform/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { RootConfig } from '../../../const';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../../shared';\nimport { AXMDocumentSelectionMode } from '../../shared/document-manager.types';\n\n//#region ---- Document Drive Page Component ----\n\n/**\n * Entity page component that shows the EDMS drive UI scoped to the current record's folder.\n * Uses getRootByEntityRef(refType, refId) to load the folder; navigation stays in-page (no router).\n */\n@Component({\n selector: 'axm-document-drive-page',\n templateUrl: './document-drive-page.component.html',\n styleUrls: ['./document-drive-page.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDrivePageComponent,\n },\n ],\n})\nexport class AXMDocumentDrivePageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Inputs ----\n\n rootContext = input.required<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- View State ----\n\n protected readonly filterItems = signal<Array<{ key: string; textKey: string; icon: string }>>([]);\n protected selectedFilter = signal<string>('all');\n protected searchQuery: string | null = null;\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n protected readonly viewsItems = signal([\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'details', icon: 'fa-bars', break: true },\n { key: 'list', icon: 'fa-list' },\n ]);\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) ?? this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n\n /** Folder id that was loaded as this page's root (entity ref root). We must not go back above it. */\n private readonly pageRootFolderId = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** True when we can show/use back: we're not on the page root and VM allows going up. */\n protected readonly canGoBackInPage = computed(() => {\n const rootId = this.pageRootFolderId();\n if (rootId == null) return false;\n const currentId = this.vm.currentNode()?.id;\n return this.vm.isUpAvailable() && currentId != null && currentId !== rootId;\n });\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) ?? items[0];\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /** In embedded mode: when VM requests folder navigation, load that folder (no router). */\n #navigateEffect = effect(() => {\n const folderId = this.vm.navigatingFolderId();\n if (folderId) {\n this.vm.loadFolderContents(folderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadFilterItems();\n\n const { refType, refId } = this.resolveEntityRef();\n if (!refType || !refId) {\n return;\n }\n\n console.log('options: ', this.options());\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n const pageConfigSnapshot = this.pageConfig();\n console.log('[document-drive-page] ngOnInit pageConfig():', pageConfigSnapshot);\n const allowedNames = this.getAllowedDocumentTypeNames();\n console.log('[document-drive-page] getAllowedDocumentTypeNames():', allowedNames);\n if (allowedNames) {\n this.vm.setAllowedDocumentTypeNames(allowedNames);\n }\n const { result } = await this.driveService.getRootByEntityRef(refType, refId);\n this.pageRootFolderId.set(result.id);\n await this.vm.loadFolderContents(result.id);\n this.recompute();\n }\n\n /** Allowed document type names from pageConfig (when plugin is configured with documentTypeNames). */\n private getAllowedDocumentTypeNames(): string[] | undefined {\n const config = this.pageConfig();\n const arr = config && (config as { allowedDocumentTypeNames?: string[] }).allowedDocumentTypeNames;\n return Array.isArray(arr) && arr.length > 0 ? arr : undefined;\n }\n\n /**\n * Resolves refType and refId for getRootByEntityRef from pageConfig, rootContext, or route.\n * Order: pageConfig.refType → rootContext (moduleName + entityName) → route params. refId from rootContext.id or recordId.\n */\n private resolveEntityRef(): { refType: string | null; refId: string | null } {\n const config = this.pageConfig();\n const context = this.rootContext() ?? {};\n const ctx = context as Record<string, unknown>;\n\n let refType: string | null =\n config && typeof (config as { refType?: string }).refType === 'string'\n ? (config as { refType: string }).refType\n : null;\n if (!refType) {\n const moduleName = typeof ctx['moduleName'] === 'string' ? ctx['moduleName'] : null;\n const entityName = typeof ctx['entityName'] === 'string' ? ctx['entityName'] : null;\n if (moduleName && entityName) {\n refType = `${moduleName}.${entityName}`;\n }\n }\n if (!refType) {\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n if (module && entity) {\n refType = `${module}.${entity}`;\n }\n }\n\n const refId =\n (typeof ctx['id'] === 'string' ? ctx['id'] : null) ??\n (typeof ctx['recordId'] === 'string' ? ctx['recordId'] : null) ??\n null;\n\n return { refType, refId };\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleSearchChange(event: AXValueChangedEvent): void {\n this.searchQuery = event.value ?? null;\n if (this.searchQuery && this.searchQuery.length > 0) {\n this.performSearch(this.searchQuery);\n }\n }\n\n private async performSearch(searchValue: string): Promise<void> {\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.currentNode()?.id,\n });\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: this.vm.currentNode()?.id,\n });\n }\n\n protected handleNavigateToFolder(folderId: string): void {\n this.vm.navigateToFolder(folderId);\n }\n\n /** Navigate back one folder; only when not already on page root. */\n protected handleBack(): void {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadFilterItems(): Promise<void> {\n const types = await this.fileTypeService.items();\n const items = [\n { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({\n key: type.name,\n textKey: `file-types.${type.name}`,\n icon: type.icon ?? 'fa-light fa-file',\n })),\n ];\n this.filterItems.set(items);\n }\n\n //#endregion\n\n //#region ---- Filter Helpers ----\n\n protected setFilter(key: string): void {\n this.selectedFilter.set(key);\n }\n\n protected getFilterIcon(): string {\n if (this.selectedFilter() === 'all') return 'fa-light fa-folder-closed';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.icon ?? 'fa-light fa-file';\n }\n\n protected getFilterText(): string {\n if (this.selectedFilter() === 'all') return 'file-types.all';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.textKey ?? 'file-types.all';\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems({canAddFolder : false});\n console.log('[document-drive-page] addItemItems:', addItemItems);\n if (addItemItems.length > 0) {\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n return [];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return await this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n return this.vm.currentFolder()?.name ?? '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.vm.itemsCount();\n const size = this.vm.availableSpace();\n const formattedSize = this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync('@document-management:terms.common.documents-description', {\n params: { count, size: formattedSize },\n });\n }\n\n override getBackButton(): AXPBackButton | null {\n if (!this.canGoBackInPage() || this.vm.currentPath().length < 2) return null;\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2]!.name,\n };\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n /** Return empty so the page does not show a second breadcrumb bar; main breadcrumb stays at top. */\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems': {\n const nodes = this.vm.selectedNodes();\n if (nodes.length > 0) {\n const deleted = await this.driveService.showDeleteNodesDialog(nodes);\n if (deleted) this.vm.refresh();\n }\n break;\n }\n case 'navigate-to-folder':\n if (folderId) this.vm.navigateToFolder(folderId);\n break;\n case 'new-folder':\n if (folderId) {\n const allowedNames = this.getAllowedDocumentTypeNames();\n await this.driveService.showCreateFolderDialog(folderId, {\n allowedDocumentTypeNames: allowedNames,\n });\n this.vm.refresh();\n }\n break;\n case 'open-gallery':\n if (folderId) {\n const folder = this.vm.currentFolder();\n const files = folder?.children?.filter((item) => item.type === 'file') ?? [];\n const galleryFiles = this.driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await this.driveService.showFileViewerPopup(galleryFiles[0]);\n }\n }\n break;\n default:\n if (typeof command.name === 'string' && command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id);\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- Back (left) + View Mode & Detail Panel Toggle (right) -->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n @if (canGoBackInPage()) {\n <ax-button (onClick)=\"handleBack()\" [title]=\"'@general:actions.back.title' | translate | async\">\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"('@document-management:view-modes.' + item.key | translate | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <div class=\"ax-overflow-auto ax-flex ax-flex-row ax-gap-4\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"ax-sticky ax-top-0 ax-z-50\"></axm-document-explorer-detail-panel>\n }\n </div>\n</div>\n\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { DOCUMENT_DRIVE_PAGE_COMPONENT_KEY } from '../document.plugin';\n\n//#region ---- Document Drive Page Component Provider ----\n\n@Injectable()\nexport class AXMDocumentDrivePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./document-drive-page.component').then((m) => m.AXMDocumentDrivePageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPFileStorageInfo, AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPEntityStorageMiddleware, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\n\nfunction getDocumentMetaDataForm(\n item: { meta?: { metaDataForm?: Record<string, unknown> }; metaDataForm?: Record<string, unknown> } | undefined,\n): Record<string, unknown> | undefined {\n if (item?.meta?.metaDataForm != null) return item.meta.metaDataForm;\n if (item?.metaDataForm != null) return item.metaDataForm;\n if (item?.meta != null && typeof item.meta === 'object' && !Array.isArray(item.meta)) {\n const m = item.meta as Record<string, unknown>;\n return (m['metaDataForm'] as Record<string, unknown> | undefined) ?? m;\n }\n return undefined;\n}\n\n/** Resolve list of attachment field names from entity extensions.attachments. */\nfunction getAttachmentFields(attachCfg: any): string[] {\n if (!attachCfg || typeof attachCfg !== 'object') return [];\n if (typeof (attachCfg as { field?: string }).field === 'string') return [(attachCfg as { field: string }).field];\n return Object.keys(attachCfg).filter((k) => k && typeof k === 'string');\n}\n\n/** Fallback: get attachment field names from properties with file-uploader interface (when extensions.attachments is missing e.g. cached def). */\nfunction getAttachmentFieldsFromProperties(def: any): string[] {\n const props = def?.properties as Array<{ name: string; schema?: { interface?: { type?: string } } }> | undefined;\n if (!Array.isArray(props)) return [];\n return props\n .filter((p) => p?.schema?.interface?.type === 'file-uploader' && p?.name)\n .map((p) => p.name);\n}\n\n/**\n * Handles file list fields configured via entity.extensions.attachments.\n * Preserves metaDataForm from widget; uploads pending blobs after persistence and writes final references.\n * Runs before file-cast (order 25) so blobs are uploaded before file-cast sees the data.\n */\n// Run before file-cast (order 25) so blobs are uploaded and refs written before file-cast sees the data\nexport const attachmentsUploadMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update'], order: 22 },\n execute: async (ctx, next) => {\n const registry = inject(AXPEntityDefinitionRegistryService);\n const storage = inject(AXPFileStorageService);\n const [moduleName, entityNameOnly] = ctx.entityName.split('.');\n const def = await registry.resolve(moduleName, entityNameOnly).catch(() => null as any);\n const attachCfg = (def as any)?.extensions?.attachments;\n let fields = getAttachmentFields(attachCfg);\n if (!fields.length && def) fields = getAttachmentFieldsFromProperties(def);\n if (!fields.length) {\n await next();\n return;\n }\n\n const pendingByField = (ctx.locals as any).attach_pending ?? {};\n (ctx.locals as any).attach_pending = pendingByField;\n\n if (ctx.data && typeof ctx.data === 'object') {\n for (const field of fields) {\n const list: any[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n pendingByField[field] = [] as Array<{ fileItem: any; blob: File }>;\n const normalized: any[] = [];\n\n for (const item of list) {\n const metaDataForm = getDocumentMetaDataForm(item);\n\n if (item?.source?.kind === 'blob' && item.source.value instanceof Blob) {\n const blob = item.source.value as File;\n const name = item.name || `file-${Date.now()}`;\n pendingByField[field].push({ fileItem: { ...item, name, metaDataForm }, blob });\n const entry: any = {\n tempId: item.id,\n name,\n size: item.size ?? (blob as File).size,\n status: 'pending_upload',\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.source?.kind === 'fileId' && item.id && typeof item.source.value === 'string') {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: { kind: 'fileId', value: item.source.value },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.id && item?.name) {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: item.source ? { kind: item.source.kind, value: item.source.value } : undefined,\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n }\n }\n\n const dataForBackend = normalized.filter((x: any) => x.status !== 'pending_upload');\n (ctx.data as any)[field] = dataForBackend;\n }\n }\n\n await next();\n\n const refId = ctx.op === 'create' ? String(ctx.result) : String(ctx.id);\n const refType = ctx.entityName;\n\n for (const field of fields) {\n const pending: Array<{ fileItem: any; blob: File }> = pendingByField[field] ?? [];\n if (!pending.length) continue;\n if (!storage) continue;\n\n const finalRefs: any[] = ((ctx.data as any)[field] ?? []).filter((x: any) => x.status !== 'pending_upload');\n\n for (const { fileItem, blob } of pending) {\n const metaDataForm = fileItem.metaDataForm ?? getDocumentMetaDataForm(fileItem);\n try {\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n refId,\n refType,\n category: '',\n name: fileItem.name,\n });\n await storage.commit(info.fileId);\n const entry: any = {\n id: info.fileId,\n name: info.name || fileItem.name,\n size: info.size || blob.size,\n type: info.mimeType || blob.type,\n status: 'uploaded',\n source: { kind: 'fileId', value: info.fileId },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n finalRefs.push(entry);\n } catch (err: any) {\n finalRefs.push({\n tempId: fileItem.id,\n name: fileItem.name,\n size: fileItem.size,\n type: (blob as File).type,\n status: 'upload_failed',\n error: err?.message,\n });\n }\n }\n\n const entityId = ctx.op === 'create' ? ctx.result : ctx.id;\n if (entityId != null) {\n const payload = { [field]: finalRefs } as any;\n const withMeta = finalRefs.filter((r: any) => r?.metaDataForm != null).length;\n console.log('[attachments-upload] ذخیره — الان میخوام ctx.backend.updateOne بزنم (پچ با metaDataForm)', {\n entityName: ctx.entityName,\n entityId,\n field,\n finalRefsLength: finalRefs.length,\n withMetaCount: withMeta,\n payloadSample: payload[field]?.map((r: any, i: number) => ({ i, hasMeta: !!r?.metaDataForm })),\n });\n try {\n await ctx.backend.updateOne(ctx.entityName, entityId, payload);\n console.log('[attachments-upload] ذخیره — ctx.backend.updateOne انجام شد (ok)');\n } catch (err) {\n console.warn('[attachments-upload] ذخیره — ctx.backend.updateOne خطا', err);\n // Result already persisted; optional patch for final refs failed\n }\n }\n if (typeof ctx.result === 'object' && ctx.result !== null) {\n ctx.result = { ...(ctx.result as any), [field]: finalRefs };\n }\n }\n },\n};\n\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXMDocumentMetadataOcrSettings } from './document-metadata-ocr.settings.keys';\n\n@Injectable()\nexport class AXMSettingProvider implements AXPSettingDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const t = async (key: string) =>\n await this.translateService.translateAsync(`@document-management:settings.metadata-ocr.${key}`);\n\n context\n .addGroup(\n 'document-management-metadata-ocr',\n await t('group-title'),\n await t('group-description'),\n RootConfig.module.icon,\n )\n .addSection('metadata-ocr', await t('section-title'), await t('section-description'))\n .addSetting({\n key: AXMDocumentMetadataOcrSettings.Enabled,\n title: await t('enabled-title'),\n scope: 'T',\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n },\n description: await t('enabled-description'),\n })\n .addSetting({\n key: AXMDocumentMetadataOcrSettings.AssistId,\n title: await t('assist-id-title'),\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: await t('assist-id-placeholder'),\n },\n },\n description: await t('assist-id-description'),\n })\n .endSection()\n .endGroup();\n }\n}\n","import {\n AXP_FILE_ACTION_PROVIDER,\n AXPFileActionProvider,\n AXPFileStorageService,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex/platform/common';\nimport { AXPDistributedEventListenerProvider, AXPDataGenerator, AXPEntityReference, AXPFileListItem } from '@acorex/platform/core';\nimport { AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition } from '@acorex/platform/layout/builder';\nimport { inject, Injector } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMDocumentDocDto, AXMDocumentDto } from '../../entities';\nimport { RootConfig } from '../../const';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentDialogService } from './services/document-dialog.service';\n\n/** Document fields without fileInfo (meta on AXPFileListItem). */\ntype AXMDocumentMeta = Omit<AXMDocumentDto, 'fileInfo'>;\n\nfunction getFileIdFromFileInfo(\n fileInfo: { id?: string; source?: { kind?: string; value?: unknown } } | string | undefined,\n): string | undefined {\n if (fileInfo == null) return undefined;\n if (typeof fileInfo === 'string') return fileInfo;\n if (fileInfo.source?.kind === 'fileId' && typeof fileInfo.source.value === 'string') return fileInfo.source.value;\n if (typeof fileInfo.id === 'string') return fileInfo.id;\n return undefined;\n}\n\n/**\n * Document File Uploader Widget Plugin\n *\n * Provides hook providers for the File Uploader widget to integrate Document Management behaviors.\n * Keys implemented here:\n * - file-uploader.configure → override accept based on docTypeId\n * - file-uploader.actions → one \"Upload\" button per document type (replaces generic Upload from Device)\n * - file-uploader.beforeFilesAdded → open metadata dialog for selected type\n * - file-uploader.fileItem.actions → add per-file actions (e.g., Edit Metadata)\n *\n * Conventions:\n * - plugin name: 'document'\n * - options: { docTypeName: string } or { docTypeNames: string[] } for multiple types\n */\n\nexport type DocumentPluginOptions = { docTypeName?: string; docTypeNames?: string[] };\n\ntype BasePayload = {\n plugins: { name: string; options?: unknown }[];\n excludePlugins: string[];\n pluginOptions?: Record<string, unknown>;\n capabilities: any;\n};\n\n//#region ---- Plugin Guard Utilities ----\n\n/**\n * Check if the 'document' plugin is active (enabled and not excluded) in the payload.\n */\nfunction isDocumentPluginActive(payload: BasePayload): boolean {\n const isEnabled = Array.isArray(payload.plugins) && payload.plugins.some((p) => p.name === 'document');\n const isExcluded = Array.isArray(payload.excludePlugins) && payload.excludePlugins.includes('document');\n return isEnabled && !isExcluded;\n}\n\n/**\n * Extract document plugin options from payload.\n * Returns undefined if plugin is not active or options are missing.\n */\nfunction getDocumentPluginOptions(payload: BasePayload): DocumentPluginOptions | undefined {\n if (!isDocumentPluginActive(payload)) {\n return undefined;\n }\n return (payload.plugins.find((p) => p.name === 'document')?.options ?? {}) as DocumentPluginOptions;\n}\n\n/** Resolve list of document type names from plugin options (single or multiple). */\nfunction getDocTypeNames(opts: DocumentPluginOptions | undefined): string[] {\n if (!opts) return [];\n if (Array.isArray(opts.docTypeNames) && opts.docTypeNames.length > 0) return opts.docTypeNames;\n if (typeof opts.docTypeName === 'string' && opts.docTypeName.trim()) return [opts.docTypeName.trim()];\n return [];\n}\n\n//#endregion\n\n// ---------------- Configure: set accept based on docTypeId / docTypeNames ----------------\nexport const DocumentFileUploaderConfigureProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.configure',\n priority: 0,\n async execute(payload: BasePayload & { overrides: Record<string, unknown> }) {\n const opts = getDocumentPluginOptions(payload);\n const names = getDocTypeNames(opts);\n if (!names.length) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const allExtensions: string[] = [];\n for (const name of names) {\n const docType = await documentManagementService.getDocumentTypeByName(name) as { type?: { selectedItems?: unknown[] } } | null;\n const selected = docType?.type?.selectedItems ?? [];\n const extList = (selected as any[])\n .map((s) => s?.name)\n .filter((n: string) => typeof n === 'string' && n.includes('.'))\n .map((n: string) => `.${n.split('.').pop()?.toLowerCase()}`);\n allExtensions.push(...extList);\n }\n const extensions = Array.from(new Set(allExtensions));\n\n payload.overrides = payload.overrides || {};\n payload.overrides['accept'] = extensions.join(',');\n return payload;\n },\n};\n\n// ---------------- Actions: one \"Upload\" button per document type (replaces generic Upload from Device) ----------------\nexport const DocumentFileUploaderActionsByTypeProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 5,\n execute: async (payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> => {\n const opts = getDocumentPluginOptions({\n plugins: payload.plugins,\n excludePlugins: payload.excludePlugins ?? [],\n capabilities: payload.capabilities,\n } as BasePayload);\n const docTypeNames = getDocTypeNames(opts);\n if (docTypeNames.length === 0) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const documentDialogService = inject(AXMDocumentDialogService);\n const fileService = inject(AXFileService);\n const docTypes = await Promise.all(\n docTypeNames.map((name) => documentManagementService.getDocumentTypeByName(name)),\n );\n\n const byTypeActions = docTypes\n .filter((dt) => dt != null)\n .map((docType) => {\n const selected = (docType as any)?.type?.selectedItems ?? [];\n const accept = Array.from(\n new Set(\n (selected as any[])\n .map((s) => s?.name)\n .filter((n: string) => typeof n === 'string' && n.includes('.'))\n .map((n: string) => `.${n.split('.').pop()?.toLowerCase()}`),\n ),\n ).join(',');\n const typeName = (docType as any)?.name as string;\n const title = (docType as any)?.title ?? typeName;\n const metaGroups = (docType as any)?.metaDataList?.groups as { fields?: unknown[] }[] | undefined;\n const hasMeta =\n Array.isArray(metaGroups) && metaGroups.some((g) => (g?.fields?.length ?? 0) > 0);\n return {\n plugin: 'document',\n global: false,\n text: title,\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const files = await fileService.choose({\n multiple: payload.options?.multiple ?? true,\n accept: accept || undefined,\n });\n if (files.length === 0) return;\n const documentType: AXMDocumentDocDto = {\n id: (docType as { id?: string })?.id ?? '',\n name: typeName,\n title: (docType as { title?: string })?.title ?? typeName,\n };\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'attached',\n source: { kind: 'blob' as const, value: file },\n meta: { documentType } as Partial<AXMDocumentMeta>,\n }) as AXPFileListItem,\n );\n if (hasMeta) {\n const result = await documentDialogService.openAttachmentDialogWithoutSave(\n 'Document Type Choose File',\n {\n documentType: docType,\n files: fileItems,\n },\n );\n if (result.data?.cancel != null && !result.data.cancel && result.data?.files) {\n result.data.files.forEach((f: { metaDataForm?: Record<string, unknown> }, i: number) => {\n if (fileItems[i]) {\n const meta: Partial<AXMDocumentMeta> = {\n ...(fileItems[i].meta as Partial<AXMDocumentMeta>),\n documentType,\n metaDataForm: f?.metaDataForm,\n };\n set(fileItems[i], 'meta', meta);\n set(fileItems[i], 'metaDataForm', f?.metaDataForm);\n }\n });\n } else if (result.data?.cancel) {\n return;\n }\n }\n await capabilities.addFiles(fileItems);\n },\n };\n });\n\n payload.actions = payload.actions.filter((a) => a.plugin !== 'upload-from-computer');\n payload.actions = [...byTypeActions, ...payload.actions];\n return payload;\n },\n};\n\n// --------------- Before Files Added: no-op (dialog moved into uploader) ---------------\n// When the uploader option \"showEditDialogAfterSelect\" is true, the uploader shows the edit dialog (with EditDialog hooks) per file before adding.\n// When false, files are added directly and the user opens the same edit dialog via the Edit button. The document metadata form is injected via EditDialogAfterFormProvider (below the main form). This provider no longer opens a separate dialog.\nexport const DocumentFileUploaderBeforeFilesAddedProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.beforeFilesAdded',\n priority: 0,\n async execute(payload: BasePayload & { newFiles: AXPFileListItem[] }) {\n return payload;\n },\n};\n\n// --------------- Edit Dialog: inject metadata group after 'form' ---------------\nexport const DocumentFileUploaderEditDialogAfterFormProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.edit-dialog.groups.after-form',\n priority: 0,\n async execute(payload: BasePayload & { file: AXPFileListItem; groups: AXPDynamicFormGroupDefinition[] }) {\n const fileMeta = payload.file.meta as Partial<AXMDocumentMeta> | undefined;\n const metaObj = (fileMeta?.metaDataForm ?? (payload.file as { metaDataForm?: unknown }).metaDataForm) as\n | Record<string, { name: string; title: string; value: unknown }>\n | undefined;\n\n const opts = getDocumentPluginOptions(payload);\n const docTypeName = fileMeta?.documentType?.name ?? opts?.docTypeName;\n const injector = inject(Injector);\n const documentManagementService = injector.get(AXPDocumentManagementService);\n const docType = docTypeName\n ? await documentManagementService.getDocumentTypeByName(docTypeName)\n : undefined;\n\n if (!docType && (!metaObj || Object.keys(metaObj).length === 0)) return payload;\n\n const metaDataList = (docType as any)?.metaDataList ?? { groups: [] };\n const hasDefinitions = Array.isArray(metaDataList.groups) && metaDataList.groups.length > 0;\n\n const fields: AXPDynamicFormFieldDefinition[] = [\n {\n path: 'metaDataForm',\n title: '@document-management:terms.common.meta-data',\n widget: {\n name: 'metaDataForm',\n type: 'meta-data-form-editor',\n options: metaDataList,\n defaultValue: metaObj,\n } as any,\n },\n ];\n\n const group: AXPDynamicFormGroupDefinition = {\n name: 'metadata',\n title: (docType as any)?.title ?? '@document-management:terms.common.meta-data',\n parameters: fields,\n };\n\n if (hasDefinitions) {\n payload.groups = [...(payload.groups ?? []), group];\n }\n return payload;\n },\n};\n\n// --------------- Download Reference: handle reference-based file downloads ---------------\nexport const DocumentFileUploaderDownloadReferenceProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.fileItem.download-reference',\n priority: 0,\n async execute(\n payload: BasePayload & {\n file: AXPFileListItem;\n reference: AXPEntityReference;\n fileInfo?: { url?: string; binary?: Blob; name?: string };\n },\n ) {\n // Only handle if reference type is 'document'\n if (payload.reference.type !== 'document') {\n return payload;\n }\n\n const entityService = inject(AXPEntityService);\n const fileStorageService = inject(AXPFileStorageService);\n const documentData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n\n try {\n // Get document by id\n const document = await documentData.byKey(payload.reference.id);\n\n if (!document) {\n console.error('Document not found for reference:', payload.reference);\n return payload;\n }\n\n const fileId = getFileIdFromFileInfo(document.fileInfo);\n if (!fileId) {\n console.error('Document does not have a valid fileId:', document);\n return payload;\n }\n\n // Get file info from file storage service\n const fileInfo = await fileStorageService.getInfo(fileId);\n\n if (fileInfo) {\n payload.fileInfo = {\n url: fileInfo.url,\n binary: (fileInfo as any).binary,\n name: fileInfo.name ?? document.name ?? document.title,\n };\n } else {\n console.error('Could not retrieve file info from fileId:', fileId);\n }\n } catch (error) {\n console.error('Error processing reference download:', payload.reference, error);\n }\n\n return payload;\n },\n};\n\n// Convenience export to register all providers at once in a module\nexport const DocumentFileUploaderWidgetPluginProviders = [\n DocumentFileUploaderConfigureProvider,\n DocumentFileUploaderBeforeFilesAddedProvider,\n DocumentFileUploaderEditDialogAfterFormProvider,\n DocumentFileUploaderDownloadReferenceProvider,\n];\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';\nimport {\n AXP_ENTITY_ACTION_PLUGIN,\n AXP_ENTITY_CONFIG_TOKEN,\n AXP_ENTITY_DEFINITION_LOADER,\n AXP_ENTITY_STORAGE_MIDDLEWARE,\n} from '@acorex/platform/layout/entity';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex/platform/core';\nimport { DocumentManagementManifest } from './manifest';\nimport {\n AXP_FILE_ACTION_PROVIDER,\n AXP_MENU_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex/platform/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { inject, NgModule } from '@angular/core';\nimport { AXPDocumentManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\n\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDocumentManagementWidgetsProvider } from './widget-definition.provider';\nimport { ROUTES, Routes } from '@angular/router';\n\n// Entity Modules\nimport { AXMDocumentManagementDocumentTypeEntityModule } from './entities';\nimport {\n AXMDocumentManagerService,\n AXMDocumentManagerServiceImpl,\n} from './features/shared/document-manager.service';\n\nimport { AXMediaViewerModule } from '@acorex/components/media-viewer';\nimport { AXMDriveChooseModule } from './features/drive-choose/drive-choose.module';\nimport {\n AXMCheckDocumentTypeWorkflowAction,\n AXMChooseDocumentTypeWorkflowAction,\n AXMChooseFileWorkflowAction,\n AXMUploadWorkflow,\n} from './features/workflow/upload/upload.workflow';\n\nfunction routesFacory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes: Routes = [\n {\n path: ':app/drive/:scope',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\n },\n {\n path: ':id',\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\n },\n ],\n },\n ];\n return routes;\n}\n\nimport { documentPlugin } from './features/document-plugin';\nimport { AXMDocumentDrivePageComponentProvider } from './features/document-plugin/document-drive-page';\nimport { attachmentsUploadMiddleware } from './features/shared/attachments-upload.middleware';\nimport { AXMSettingProvider } from './settings.provider';\nimport { AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER } from '@acorex/platform/core';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport {\n DocumentFileUploaderActionsByTypeProvider,\n DocumentFileUploaderWidgetPluginProviders,\n} from './features/shared/document-file-uploader.widget.plugin';\n@NgModule({\n imports: [\n AXMDriveChooseModule,\n // Entity Modules\n AXMDocumentManagementDocumentTypeEntityModule,\n AXPWidgetCoreModule,\n AXMediaViewerModule.forRoot(),\n AXPWorkflowModule.forChild({\n actions: {\n AXMCheckDocumentTypeWorkflowAction,\n AXMChooseDocumentTypeWorkflowAction,\n AXMChooseFileWorkflowAction,\n },\n workflows: {\n 'upload-document': AXMUploadWorkflow,\n },\n }),\n ],\n exports: [],\n\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDocumentManagementWidgetsProvider, multi: true },\n { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: documentPlugin },\n { provide: AXP_PAGE_COMPONENT_PROVIDER, multi: true, useClass: AXMDocumentDrivePageComponentProvider },\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: attachmentsUploadMiddleware },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ...DocumentFileUploaderWidgetPluginProviders.map((p) => ({\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: p,\n multi: true,\n })),\n {\n provide: AXP_FILE_ACTION_PROVIDER,\n useValue: DocumentFileUploaderActionsByTypeProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: DocumentManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPDocumentManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMSettingProvider,\n multi: true,\n },\n {\n provide: AXMDocumentManagerService,\n useClass: AXMDocumentManagerServiceImpl,\n },\n ],\n})\nexport class AXMDocumentManagementModule { }\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPQueryFiltersComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\n\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPPlatformScope,\n resolvePlatformScopeKey,\n resolvePlatformScopeName,\n} from '@acorex/platform/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentTypeService } from '../../entities';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../shared';\nimport { AXMDocumentSelectionMode } from '../shared/document-manager.types';\n\n/**\n * Walks `ActivatedRoute` ancestors until a `scope` param is found (`:app/drive/:scope` may not be the direct parent).\n */\nfunction readDriveScopeSegmentFromRoute(route: ActivatedRoute): string | undefined {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return String(raw).trim().toLowerCase();\n }\n current = current.parent;\n }\n return undefined;\n}\n\n@Component({\n selector: 'axp-document-drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n AXPQueryFiltersComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDriveComponent,\n },\n ],\n})\nexport class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---------------- Services & Dependencies ----------------\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n protected readonly router = inject(Router);\n protected readonly activatedRoute = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---------------- View Properties ----------------\n\n private previousFolderId: string | null = null;\n\n /** Resolved once per drive page visit; avoids repeated getRoot calls when normalizing URL scope. */\n private driveRootIds: { tenantId: string; userId: string; distinct: boolean } | null = null;\n\n /** Filter definitions: document type (cascade parent) + metadata + search + file type. */\n protected advancedFilterDefinitions = signal<AXPFilterDefinition[]>([]);\n\n /** Active metadata filter values from the query filter panel. */\n private activeMetadataFilters = signal<Record<string, unknown>>({});\n\n /** Options for the document type filter (drive search). */\n private documentTypeFilterOptions = signal<Array<{ id: string; title: string }>>([]);\n\n /**\n * Initial filters for axp-query-filters (URL search on first load, or preserved filters after cascade refresh).\n */\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n\n /** Bumps when the filter panel is recreated after document type changes (clears stale metadata chips). */\n protected queryFiltersKey = signal(0);\n\n /** Last document type ids used to load metadata field definitions (cascade detection). */\n private lastAppliedDocumentTypeIds = signal<string[]>([]);\n\n /** Normalized document type ids from the panel; used for search API. */\n private activeDocumentTypeFilterIds = signal<string[]>([]);\n\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n\n protected readonly viewsItems = signal([\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'details', icon: 'fa-bars', break: true },\n { key: 'list', icon: 'fa-list' },\n ]);\n\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) || this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n protected documentExplorer = viewChild(AXMDocumentExplorerComponent);\n\n //#endregion\n\n //#region ---------------- Computed Properties ----------------\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) || items[0];\n });\n\n //#endregion\n\n //#region ---------------- Effects ----------------\n\n #navigateEffect = effect(() => {\n const navigatingFolderId = this.vm.navigatingFolderId();\n if (navigatingFolderId) {\n this.handleNavigateToFolder(navigatingFolderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n //#endregion\n\n //#region ---------------- Lifecycle Hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n // Resolve scope from the route before loading filter definitions (see `initialize` early `patchState`\n // in the explorer view model so `scope` is correct before any async gap while filters mount).\n const snapshot = this.activatedRoute.snapshot;\n const searchParam = snapshot.queryParams['search'];\n this.panelInitialFilters.set(\n searchParam && typeof searchParam === 'string' && searchParam.trim()\n ? [{ field: 'all', value: searchParam.trim(), operator: { type: 'contains' } }]\n : [],\n );\n\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user');\n await this.vm.initialize({ browseMode: 'file', scope: routerScope as AXPPlatformScope });\n this.vm.setFileTypeFilter('all');\n\n const docTypes = await this.documentTypeService.query({ skip: 0, take: 1000 });\n this.documentTypeFilterOptions.set(\n (docTypes.items ?? []).map((it) => ({\n id: it.id,\n title: (it.title ?? it.name ?? it.id) as string,\n })),\n );\n await this.loadAdvancedFilterDefinitions([]);\n\n const searchQuery = snapshot.queryParams['search'];\n const folderId = snapshot.paramMap.get('id');\n\n if (searchQuery) {\n if (folderId) {\n this.previousFolderId = folderId;\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfTenantRootFolder(folderId);\n }\n await this.performSearch(searchQuery);\n } else {\n this.activatedRoute.paramMap.subscribe(async () => {\n this.loadDrive();\n });\n }\n\n this.activatedRoute.queryParams.subscribe(async (params) => {\n if (!params['search'] && this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId = this.previousFolderId\n ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n });\n }\n\n //#endregion\n\n //#region ---------------- Event Handlers ----------------\n\n private async performSearch(searchValue: string) {\n if (!this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n this.previousFolderId = currentNode?.id ?? null;\n }\n\n const metadataFilters = this.activeMetadataFilters();\n const hasMetadataFilters = Object.keys(metadataFilters).length > 0;\n const documentTypeIds = this.activeDocumentTypeFilterIds();\n const hasDocTypeFilter = documentTypeIds.length > 0;\n\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.isVirtual() ? (this.previousFolderId ?? undefined) : (this.vm.currentNode()?.id ?? undefined),\n ...(hasMetadataFilters ? { metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds } : {}),\n });\n\n const currentNode = this.vm.currentNode();\n const folderIdForParent = this.vm.isVirtual()\n ? (currentNode?.parentId ?? this.previousFolderId ?? undefined)\n : (currentNode?.id ?? this.previousFolderId ?? undefined);\n\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: folderIdForParent,\n });\n }\n\n /** Handles filter changes from the query filter panel (search, file type, document type, metadata). */\n protected async handleAdvancedFiltersChanged(filters: AXPFilterQuery[]): Promise<void> {\n const docTypeFilter = filters.find((f) => f.field === 'documentTypeId');\n const documentTypeIds = this.normalizeDocumentTypeIds(docTypeFilter?.value);\n this.activeDocumentTypeFilterIds.set(documentTypeIds);\n\n if (!this.docTypeIdsEqual(documentTypeIds, this.lastAppliedDocumentTypeIds())) {\n this.lastAppliedDocumentTypeIds.set(documentTypeIds);\n await this.loadAdvancedFilterDefinitions(documentTypeIds);\n const preserved = filters.filter(\n (f) =>\n f.field === 'all' ||\n f.field === 'title' ||\n f.field === 'fileType' ||\n f.field === 'documentTypeId',\n );\n this.panelInitialFilters.set(preserved);\n this.queryFiltersKey.update((k) => k + 1);\n return;\n }\n\n const allFilter = filters.find((f) => f.field === 'all');\n const titleFilter = filters.find((f) => f.field === 'title');\n const fromAll = allFilter?.value != null ? String(allFilter.value).trim() : '';\n const fromTitle = titleFilter?.value != null ? String(titleFilter.value).trim() : '';\n const searchValue = fromAll || fromTitle;\n\n const fileTypeFilter = filters.find((f) => f.field === 'fileType');\n const fileTypeValue = fileTypeFilter?.value != null ? String(fileTypeFilter.value) : 'all';\n this.vm.setFileTypeFilter(fileTypeValue);\n\n const metaFilters: Record<string, unknown> = {};\n for (const filter of filters) {\n if (\n filter.field &&\n filter.field !== 'all' &&\n filter.field !== 'title' &&\n filter.field !== 'fileType' &&\n filter.field !== 'documentTypeId' &&\n filter.value != null &&\n filter.value !== ''\n ) {\n metaFilters[filter.field] = filter.value;\n }\n }\n this.activeMetadataFilters.set(metaFilters);\n\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const baseUrl = folderId\n ? `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`\n : `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}`;\n\n const normalizePath = (url: string): string => url.split('?')[0].replace(/^\\/+/, '');\n const currentPath = normalizePath(this.router.url);\n const targetPath = normalizePath(baseUrl);\n const snapSearch = this.activatedRoute.snapshot.queryParams['search'];\n const currentSearch =\n snapSearch != null && String(snapSearch).trim() !== '' ? String(snapSearch).trim() : '';\n if (currentPath !== targetPath || currentSearch !== searchValue) {\n await this.router.navigate([baseUrl], {\n queryParams: { search: searchValue || null },\n queryParamsHandling: 'merge',\n });\n }\n\n const hasDocTypeFilter = documentTypeIds.length > 0;\n if (searchValue.length > 0 || Object.keys(metaFilters).length > 0 || hasDocTypeFilter) {\n await this.performSearch(searchValue);\n } else if (this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId = this.previousFolderId\n ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n }\n\n @HostListener('document:keydown.control', ['$event'])\n handleCtrlKey(e: Event) {\n this.selectionMode.set('multiple');\n }\n\n @HostListener('document:keyup.control', ['$event'])\n handleCtrlKeyUp(e: Event) {\n this.selectionMode.set('single');\n }\n\n protected handleNavigateToFolder(folderId: string) {\n const queryParams = this.activatedRoute.snapshot.queryParams;\n this.router.navigate(\n [`${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`],\n {\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n },\n );\n }\n\n //#endregion\n\n //#region ---------------- Data Loading Methods ----------------\n\n /**\n * When the path segment is `user` but the folder id is the tenant drive root (and user root differs),\n * align URL and view model to `tenant` (e.g. after an earlier navigation bug or stale link).\n */\n private async correctDriveUrlIfTenantRootFolder(folderId: string): Promise<void> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n if (scopeSegment !== 'user') {\n return;\n }\n\n await this.ensureDriveRootIdsCached();\n const cached = this.driveRootIds;\n if (!cached?.distinct || folderId !== cached.tenantId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.vm.loadFolderContents(folderId);\n\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n await this.router.navigate(\n [`${app}/drive/${resolvePlatformScopeName(AXPPlatformScope.Tenant)}/${folderId}`],\n { replaceUrl: true, queryParams, queryParamsHandling: 'merge' },\n );\n }\n\n private async ensureDriveRootIdsCached(): Promise<void> {\n if (this.driveRootIds !== null) {\n return;\n }\n const [tenantRoot, userRoot] = await Promise.all([\n this.driveService.getRoot(AXPPlatformScope.Tenant),\n this.driveService.getRoot(AXPPlatformScope.User),\n ]);\n const tenantId = tenantRoot.result?.id ?? '';\n const userId = userRoot.result?.id ?? '';\n this.driveRootIds = {\n tenantId,\n userId,\n distinct: tenantId !== '' && userId !== '' && tenantId !== userId,\n };\n }\n\n private async loadDrive() {\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const queryParams = this.activatedRoute.snapshot.queryParams;\n\n if (folderId) {\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfTenantRootFolder(folderId);\n } else {\n // TODO: get root from tenant or user by scope\n const root = await this.driveService.getRoot(this.vm.scope());\n if (root.result) {\n await this.router.navigate(\n [\n `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${\n root.result.id\n }`,\n ],\n {\n replaceUrl: true,\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n },\n );\n }\n }\n //\n this.recompute();\n }\n\n /**\n * Loads filter definitions. Metadata fields load only when `documentTypeIds` is non-empty (cascade).\n */\n private async loadAdvancedFilterDefinitions(documentTypeIds: string[]): Promise<void> {\n const definitions: AXPFilterDefinition[] = [];\n\n definitions.push({\n field: 'all',\n title: '@document-management:drive.filters.search.title',\n icon: 'fa-light fa-magnifying-glass',\n widget: { type: 'string-filter' },\n filterType: { inline: true, advance: false },\n });\n\n const docOpts = this.documentTypeFilterOptions();\n if (docOpts.length > 0) {\n definitions.push({\n field: 'documentTypeId',\n operator: { type: 'equal' },\n title: '@document-management:drive.filters.document-type.title',\n icon: 'fa-light fa-file-lines',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: docOpts,\n valueField: 'id',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'title',\n operator: { type: 'contains' },\n title: '@document-management:drive.filters.title.title',\n icon: 'fa-light fa-font',\n widget: { type: 'string-filter' },\n filterType: { advance: true, inline: false },\n });\n\n const types = await this.fileTypeService.items();\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const fileTypeDataSource = [\n { name: 'all', title: allTitle },\n ...types.map((t) => ({ name: t.name, title: t.title })),\n ];\n definitions.push({\n operator: { type: 'equal' },\n field: 'fileType',\n title: '@document-management:drive.filters.file-type.title',\n icon: 'fa-light fa-file',\n widget: {\n type: 'document-file-type-filter',\n options: {\n dataSource: fileTypeDataSource,\n valueField: 'name',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n const metadataFields =\n documentTypeIds.length > 0\n ? await this.driveService.getUniqueMetadataFields(documentTypeIds)\n : [];\n\n for (const field of metadataFields) {\n definitions.push({\n field: field.widgetPath,\n operator: { type: this.getDefaultOperatorForEditor(field.widgetType) as 'contains' | 'equal' },\n title: field.title,\n icon: this.getMetadataFieldIcon(field.widgetType),\n widget: {\n type: this.mapEditorToFilterWidget(field.widgetType),\n options: field.widgetOptions ?? {},\n },\n filterType: {\n advance: true,\n inline: false,\n },\n });\n }\n\n this.advancedFilterDefinitions.set(definitions);\n }\n\n //#region ---------------- Filter helpers ----------------\n\n /**\n * Unwraps filter widget values (e.g. select `{ value, text }`) for document type id extraction.\n */\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeDocumentTypeIds(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v.map((x) => String(x)).filter((id) => id.length > 0);\n }\n return [String(v)];\n }\n\n private docTypeIdsEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n const sa = [...a].sort();\n const sb = [...b].sort();\n return sa.every((id, i) => id === sb[i]);\n }\n\n //#endregion\n\n /** Maps metadata editor widget type to filter widget type. */\n private mapEditorToFilterWidget(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'number-filter';\n case 'select-editor':\n return 'select-filter';\n case 'date-time-editor':\n return 'date-filter';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'string-filter';\n }\n }\n\n /** Returns default operator type name for a given editor widget type. */\n private getDefaultOperatorForEditor(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'equal';\n case 'select-editor':\n return 'equal';\n case 'date-time-editor':\n return 'equal';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'contains';\n }\n }\n\n /** Returns an icon class based on the editor widget type. */\n private getMetadataFieldIcon(widgetType: string): string {\n switch (widgetType) {\n case 'number-editor':\n return 'fa-hashtag';\n case 'select-editor':\n return 'fa-list';\n case 'date-time-editor':\n return 'fa-calendar';\n default:\n return 'fa-font';\n }\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.vm.isRoot()) {\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n );\n }\n return this.vm.currentFolder()?.name || '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = await this.vm.itemsCount();\n const size = await this.vm.availableSpace();\n const formattedSize = await this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.description`,\n {\n params: {\n count,\n size: formattedSize,\n },\n },\n );\n }\n\n override getBackButton(): AXPBackButton | null {\n if (this.vm.isUpAvailable() && this.vm.currentPath().length > 1) {\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2].name,\n };\n }\n return null;\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.vm.isUpAvailable()) {\n this.vm.navigateToUp();\n }\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const path = this.vm.currentPath();\n if (!path || path.length === 0) {\n return [\n {\n title: await this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n ),\n },\n ];\n }\n\n const breadcrumbs: AXPBreadcrumbItem[] = [];\n for (let i = 0; i < path.length; i++) {\n const node = path[i]!;\n const isLast = i === path.length - 1;\n breadcrumbs.push({\n name: node.id,\n title: node.name,\n command: isLast\n ? undefined\n : {\n name: 'navigate-to-folder',\n options: { folderId: node.id },\n },\n });\n }\n return breadcrumbs;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n const nodes = this.vm.selectedNodes();\n if (nodes.length > 0) {\n const deleted = await this.driveService.showDeleteNodesDialog(nodes);\n if (deleted) {\n this.vm.refresh();\n }\n }\n break;\n case 'navigate-to-folder':\n if (folderId) {\n this.vm.navigateToFolder(folderId);\n }\n break;\n case 'new-folder':\n if (folderId) {\n await this.driveService.showCreateFolderDialog(folderId);\n this.vm.refresh();\n }\n break;\n case 'open-gallery':\n if (folderId) {\n const folder = this.vm.currentFolder();\n const files = folder?.children?.filter((item) => item.type === 'file') ?? [];\n const galleryFiles = this.driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await this.driveService.showFileViewerPopup(galleryFiles[0]);\n }\n }\n break;\n default:\n if (command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id);\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n","<!-- Main Layout -->\n<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <!-- Left Side Toolbar -->\n <div class=\"ax-w-full ax-flex ax-items-center\">\n <axp-layout-prefix class=\"ax-w-full\">\n @if (vm.hasMultipleSelectedItems()) {\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\">\n {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span (click)=\"vm.deselectAll()\" class=\"ax-text-sm ax-text-secondary ax-underline ax-cursor-pointer\">{{\n '@general:actions.unselect.title' | translate | async\n }}</span>\n </div>\n } @else {\n @for (_k of [queryFiltersKey()]; track _k) {\n <axp-query-filters\n [filtersDefinitions]=\"advancedFilterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleAdvancedFiltersChanged($event)\"\n ></axp-query-filters>\n }\n }\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n\n <axp-layout-suffix class=\"ax-flex ax-gap-2\">\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for (item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <!-- view mode items -->\n <ax-button-item\n [text]=\"(t('view-modes.' + item.key, { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n <!-- end of view mode items -->\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @if (deviceService.isLarge()) {\n <!-- Detail Panel Toggle -->\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </div>\n </axp-page-toolbar>\n\n <!-- Content Section -->\n <axp-page-content class=\"ax-overflow-auto ax-flex ax-flex-col\">\n <div class=\"ax-flex ax-flex-row ax-gap-4 ax-flex-1 ax-overflow-auto\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"ax-sticky ax-top-0 ax-z-50\"></axm-document-explorer-detail-panel>\n }\n </div>\n </axp-page-content>\n\n <!-- Footer Section removed: breadcrumbs are now provided via page-level breadcrumbs -->\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i5","i1","i2","i4","get","i6","i3","set"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,qBAAqB;CAC5B;AACM,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE,oBAAoB;AAC5B,QAAA,IAAI,EAAE,oBAAoB;AAC1B,QAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,aAAA,CAAe;AACrC,QAAA,IAAI,EAAE,mBAAmB;AAC1B,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,sBAAA,CAAwB;AAC9C,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,6BAAA,CAA+B;AAC3D,YAAA,IAAI,EAAE,oBAAoB;AAC3B,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,wBAAA,CAA0B;AAChD,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,+BAAA,CAAiC;AAC7D,YAAA,IAAI,EAAE,kBAAkB;AACzB,SAAA;AACD,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAE,cAAc;AACpB,YAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,6BAAA,CAA+B;AACrD,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,oCAAA,CAAsC;AAClE,YAAA,IAAI,EAAE,mBAAmB;AAC1B,SAAA;AACD,QAAA,gBAAgB,EAAE;AAChB,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,iCAAA,CAAmC;AACzD,YAAA,WAAW,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,wCAAA,CAA0C;AACtE,YAAA,IAAI,EAAE,kCAAkC;AACzC,SAAA;AACF,KAAA;;;ACpCH;AAKA;AAEA;AAEA;;;AAGG;AACI,MAAM,0BAA0B,GAAsB;AAC3D,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,OAAO,EAAE,OAAO;AAChB,IAAA,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AAC9B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC5B,IAAA,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;;IAG5B,YAAY,EAAE,CAAC,gBAAgB,CAAC;CACjC;AAED;;ACxBO,MAAM,gCAAgC,GAAG;AAC9C,IAAA,cAAc,EAAE,6CAA6C;;;ACQ/D;AAEA;AAEA;;;AAGG;MAEU,8CAA8C,CAAA;IACzD,MAAM,OAAO,CAAC,OAA4C,EAAA;;AAExD,QAAA,OAAO,CAAC,UAAU,CAAC,gCAAgC,CAAC,cAAc,EAAE;AAClE,YAAA,KAAK,EAAE,sDAAsD;AAC7D,YAAA,WAAW,EAAE,4DAA4D;YACzE,YAAY,EAAE,UAAU;AACxB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,SAAS,EAAE;AACT,gBAAA,IAAI,EAAE,eAAe;AACrB,gBAAA,OAAO,EAAE;oBACP,GAAG,EAAE,OAAO;oBACZ,GAAG,EAAE,aAAa;oBAClB,IAAI,EAAE,OAAO;AACd,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;;IAEJ;8GAlBW,8CAA8C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA9C,8CAA8C,EAAA,CAAA,CAAA;;2FAA9C,8CAA8C,EAAA,UAAA,EAAA,CAAA;kBAD1D;;;ACjBM,MAAM,kBAAkB,GAAG;AAChC,IAAA,kBAAkB,EAAE;AAClB,QAAA,UAAU,EAAE,0CAA0C;AACtD,QAAA,YAAY,EAAE;AACZ,YAAA,UAAU,EAAE,uDAAuD;AACnE,YAAA,IAAI,EAAE,iDAAiD;AACvD,YAAA,IAAI,EAAE,iDAAiD;AACvD,YAAA,MAAM,EAAE,mDAAmD;AAC3D,YAAA,MAAM,EAAE,mDAAmD;AAC5D,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,UAAU,EAAE,iDAAiD;AAC7D,YAAA,IAAI,EAAE,2CAA2C;AACjD,YAAA,IAAI,EAAE,2CAA2C;AACjD,YAAA,MAAM,EAAE,6CAA6C;AACrD,YAAA,MAAM,EAAE,6CAA6C;AACtD,SAAA;AACF,KAAA;;;MCVU,+BAA+B,CAAA;AAG1C,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAFX,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAG3E;IAGA,MAAM,MAAM,CAAC,OAA+C,EAAA;AAE1D,QAAA,MAAM,KAAK,GAAG,OAAO,GAAW,KAAK,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,oCAAoC,GAAG,CAAA,CAAE,CAAC;AAE1H,QAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,kBAAkB;QAElD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAC;;AAEpG,aAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,EAAE,MAAM,KAAK,CAAC,kCAAkC,CAAC;AACtI,aAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC,EAAE,MAAM,KAAK,CAAC,gCAAgC,CAAC;AACvH,aAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC,EAAE,MAAM,KAAK,CAAC,gCAAgC,CAAC;AACvH,aAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,EAAE,MAAM,KAAK,CAAC,kCAAkC,CAAC;AAC7H,aAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,4BAA4B,CAAC,EAAE,MAAM,KAAK,CAAC,kCAAkC,CAAC;AAC7H,aAAA,aAAa;;AAEb,aAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,qBAAqB,CAAC,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAClH,aAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,yBAAyB,CAAC;AACnG,aAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,MAAM,KAAK,CAAC,yBAAyB,CAAC;AACnG,aAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,qBAAqB,CAAC,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AACzG,aAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,qBAAqB,CAAC,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AACzG,aAAA,aAAa,EAAE;;IAGpB;8GA9BW,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA/B,+BAA+B,EAAA,CAAA,CAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C;;;ACNM,MAAM,6BAA6B,GAAG;AACzC,IAAA,aAAa,EAAE,yCAAyC;AACxD,IAAA,WAAW,EAAE,kCAAkC;AAC/C,IAAA,SAAS,EAAE,gCAAgC;;;MCQlC,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AA0DnD,IAAA;IAxDC,MAAM,OAAO,CAAC,OAA+B,EAAA;QAC3C,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAC5E,IAAI,CAAC,YAAY,EAAE;YACjB;QACF;AAEA,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;AACrD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;;QAGpC,OAAO,CAAC,QAAQ,CAAC;AACf,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,SAAS;AAC7C,gBAAA,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,qBAAA,CAAuB;AACtC,gBAAA,IAAI,EAAE,yBAAyB;gBAC/B,IAAI,EAAE,CAAA,EAAG,OAAO,CAAA,WAAA,CAAa;AAC7B,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;AACvB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;;QAGF,OAAO,CAAC,QAAQ,CAAC;AACf,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,WAAW;AAC/C,gBAAA,QAAQ,EAAE,IAAI;gBACd,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,6BAAA,CAA+B;AAC9C,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;gBACvC,IAAI,EAAE,CAAA,EAAG,OAAO,CAAA,aAAA,CAAe;AAC/B,gBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;AACzB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;oBACvB,WAAW,EAAE,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;AACvE,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;;QAGF,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;AACtD,YAAA;gBACE,IAAI,EAAE,6BAA6B,CAAC,aAAa;AACjD,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK;AAC5C,gBAAA,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;AACvF,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;AAC3C,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;oBACvB,WAAW,EAAE,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,YAAY,CAAC,UAAU,CAAC;AAC7E,iBAAA;AACF,aAAA;AACF,SAAA,CAAC;IACJ;8GA3DW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCAY,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEU,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAiCpC,IAAA;IA/BQ,OAAO,GAAA;AACZ,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;QACrC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAW,MAAM;AAC1E,YAAA,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM,CAAC,IAAI;AACpB,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,MAAM,GAAG,CAAC,UAAkB,EAAE,UAAkB,EAAA;QAC9C,IAAI,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE;YACzC,QAAQ,UAAU;AAChB,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;AACxC,oBAAA,OAAO,CAAC,MAAM,qDAAoB,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxE,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI;AAC5C,oBAAA,OAAO,CAAC,MAAM,OAAO,4EAAuD,CAAC,EAAE,6BAA6B,CAC1G,IAAI,CAAC,QAAQ,CACd;AACH,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;AAClC,oBAAA,OAAO,CAAC,MAAM,6DAAyC,EAAE,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7F,gBAAA,KAAK,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpC,oBAAA,OAAO,CAAC,MAAM,+DAA6C,EAAE,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC;;QAEvG;AACA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,IAAI,GAAA;AACR,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;AAChC,QAAA,MAAM,QAAQ,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;AAC/G,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E;8GAjCW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACNK,MAAO,wBAAyB,SAAQ,wBAAwB,CAAA;AAAtE,IAAA,WAAA,GAAA;;AACE,QAAA,IAAA,CAAA,QAAQ,GAAG;AACT,YAAA,yBAAyB,CAAC;AACxB,gBAAA,EAAE,EAAE,sBAAsB;AAC1B,gBAAA,SAAS,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE;AAC/E,gBAAA,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE;AAC1I,gBAAA,QAAQ,EAAE,6DAA6D;AACvE,gBAAA,cAAc,EAAE,mEAAmE;AACnF,gBAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;aAC5C,CAAC;SACH;IACH;AAAC;;MCXY,wBAAwB,CAAA;AAInC,IAAA,MAAM,KAAK,GAAA;QACT,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,IAAI,EAAE,sCAAsC;AAC5C,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,sCAAsC;AAC5C,wBAAA,IAAI,EAAE,EAAE;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,sCAAsC;AAC5C,wBAAA,IAAI,EAAE,EAAE;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,sCAAsC;AAC5C,wBAAA,IAAI,EAAE;AACJ,4BAAA;AACE,gCAAA,IAAI,EAAE,UAAU;AAChB,gCAAA,KAAK,EAAE,UAAU;gCACjB,SAAS,EAAE,YAAW;oCACpB,OAAO;wCACL,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,wCAAA,OAAO,EAAE;AACP,4CAAA,WAAW,EAAE;AACX,gDAAA;AACE,oDAAA,IAAI,EAAE;AACP;AACF;AACF,yCAAA;AACD,wCAAA,IAAI,EAAE,eAAe;qCACtB;gCACH,CAAC;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,IAAI,EAAE;AACJ,oBAAA;AACE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,KAAK,EAAE,OAAO;wBACd,SAAS,EAAE,YAAW;4BACpB,OAAO;gCACL,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,gCAAA,OAAO,EAAE;AACP,oCAAA,WAAW,EAAE;AACX,wCAAA;AACE,4CAAA,IAAI,EAAE;AACP;AACF;AACF,iCAAA;AACD,gCAAA,IAAI,EAAE,aAAa;6BACpB;wBACH,CAAC;AACF,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAE,QAAQ;wBACf,SAAS,EAAE,YAAW;4BACpB,OAAO;gCACL,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,gCAAA,OAAO,EAAE,EAAE;AACX,gCAAA,IAAI,EAAE,cAAc;6BACrB;wBACH,CAAC;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;IACH;AACD;;MClFY,wBAAwB,CAAA;AACnC,IAAA,MAAM,KAAK,GAAA;QACT,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,IAAI,EAAE,mCAAmC;AACzC,gBAAA,UAAU,EAAE;AACV,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,mCAAmC;AACzC,wBAAA,IAAI,EAAE,EAAE;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,mCAAmC;AACzC,wBAAA,IAAI,EAAE,EAAE;AACT,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,mCAAmC;AACzC,wBAAA,IAAI,EAAE,EAAE;AACT,qBAAA;AACF,iBAAA;AACF,aAAA;SACF;IACH;AACD;;MC9BY,2BAA2B,CAAA;AACpC,IAAA,MAAM,KAAK,GAAA;QACP,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,KAAK,EAAE,UAAU;AACjB,gBAAA,IAAI,EAAE,yCAAyC;AAC/C,gBAAA,UAAU,EAAE;AACR,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,sCAAsC;AAC5C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,IAAI,EAAE,gDAAgD;AACtD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,IAAI,EAAE,gDAAgD;AACtD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,yCAAyC;AAC/C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,WAAW;AAClB,wBAAA,IAAI,EAAE,yCAAyC;AAC/C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ;IACL;AACH;;MClEY,wBAAwB,CAAA;AACjC,IAAA,MAAM,KAAK,GAAA;QACP,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,IAAI,EAAE,0CAA0C;AAChD,gBAAA,UAAU,EAAE;AACR,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ;IACL;AACH;;MC1CY,0BAA0B,CAAA;AACnC,IAAA,MAAM,KAAK,GAAA;QACP,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,IAAI,EAAE,4CAA4C;AAClD,gBAAA,UAAU,EAAE;AACR,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,OAAO;AACd,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,4CAA4C;AAClD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ;IACL;AACH;;MC1CY,uBAAuB,CAAA;AAChC,IAAA,MAAM,KAAK,GAAA;QACP,OAAO;AACH,YAAA;AACI,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,MAAM;AACb,gBAAA,IAAI,EAAE,wCAAwC;AAC9C,gBAAA,UAAU,EAAE;AACR,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,YAAY;AACnB,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,yCAAyC;AAC/C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,yCAAyC;AAC/C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,IAAI,EAAE,0CAA0C;AAChD,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,MAAM;AACb,wBAAA,IAAI,EAAE,uCAAuC;AAC7C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,KAAK;AACX,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACD,oBAAA;AACI,wBAAA,IAAI,EAAE,IAAI;AACV,wBAAA,KAAK,EAAE,IAAI;AACX,wBAAA,IAAI,EAAE,wCAAwC;AAC9C,wBAAA,IAAI,EAAE,EAAE;AACX,qBAAA;AACJ,iBAAA;AACJ,aAAA;SACJ;IACL;AACH;;AChEK,MAAO,yCAA0C,SAAQ,uBAA4B,CAAA;8GAA9E,yCAAyC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yCAAyC,iIAL1C,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKD,yCAAyC,EAAA,UAAA,EAAA,CAAA;kBANrD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,CAAC,UAAU,CAAC;AACrB,iBAAA;;;;;;;;ACCK,MAAO,2CAA4C,SAAQ,uBAA4B,CAAA;8GAAhF,2CAA2C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2CAA2C,iIAL5C,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKD,2CAA2C,EAAA,UAAA,EAAA,CAAA;kBANvD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,CAAC,UAAU,CAAC;AACrB,iBAAA;;;ACuFK,MAAO,uCAAwC,SAAQ,uBAA4B,CAAA;AA7EzF,IAAA,WAAA,GAAA;;AA8EY,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;QACpD,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,CAAU;AAC/C,YAAA,IAAI,EAAE,OAAO,CAAC,KAAI;AAChB,gBAAA,IAAI;oBACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;oBAC9C,MAAM,KAAK,GAAG;AACX,yBAAA,GAAG,CAAC,CAAC,IAAI,KAAI;wBACZ,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI;AAC1C,wBAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;4BAC5B,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG;4BAChC,OAAO;AACL,gCAAA,GAAG,IAAI;AACP,gCAAA,GAAG,OAAO;gCACV,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAA,CAAA,EAAI,GAAG,CAAC,IAAI,CAAA,CAAE;gCAChC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA,CAAA,EAAI,GAAG,CAAC,KAAK,CAAA,CAAE;6BACpC;AACH,wBAAA,CAAC,CAAC;AACJ,oBAAA,CAAC;AACA,yBAAA,IAAI,EAAE;oBAET,OAAO;AACL,wBAAA,KAAK,EAAE,KAAK;wBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;qBACpB;gBACH;gBAAE,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChB;gBACA,OAAO;AACL,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,KAAK,EAAE,CAAC;iBACT;YACH,CAAC;AACD,YAAA,QAAQ,EAAE,GAAG;AACd,SAAA,CAAC;AAEK,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAC3E,IAAA,CAAA,qBAAqB,GAAG,MAAM,CACnC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,uBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC5D;AACM,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AA2F7D,IAAA;IAzFU,QAAQ,GAAA;QACf,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC;IAClD;IAEmB,OAAO,GAAA;AACxB,QAAA,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC;IACrC;AAEU,IAAA,qBAAqB,CAAC,CAAwB,EAAA;QACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD;IAEU,MAAM,iBAAiB,CAAC,CAAsB,EAAA;AACtD,QAAA,MAAM,WAAW,GAAI,CAAC,CAAC,SAAkC,CAAC,aAA8B;AACxF,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;QAEjE,MAAM,MAAM,GAAmC,EAAE;AACjD,QAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC;AACnD,YAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACzB,gBAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;AAC5G,gBAAA,IAAI,SAAS,CAAC,IAAI,EAAE;AAClB,oBAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE;wBACjC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;4BAC1B,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;wBACtG;oBACF;gBACF;AACA,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,oBAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE;wBAChC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;4BAC1B,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC,SAAS,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;wBACtG;oBACF;gBACF;AACA,gBAAA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;oBAChB,MAAM,CAAC,IAAI,CAAC,GAAG;AACb,wBAAA,GAAG,QAAQ;wBACX,UAAU,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC;qBACpD;gBACH;qBAAO;oBACL,MAAM,CAAC,IAAI,CAAC,GAAG;AACb,wBAAA,GAAG,QAAQ;wBACX,UAAU,EAAE,CAAC,SAAS,CAAC;qBACxB;gBACH;YACF;QACF;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC3C;AAEU,IAAA,OAAO,CAAC,IAAS,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;IAC9B;AAEU,IAAA,eAAe,CAAC,IAAS,EAAA;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;AACpD,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAe,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;QAC3F;AACA,QAAA,OAAO,KAAK;IACd;AAEU,IAAA,mBAAmB,CAAC,UAAiB,EAAA;QAC7C,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClE;AAEU,IAAA,SAAS,CAAC,IAAiB,EAAA;;AAEnC,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;QAClD;AACA,QAAA,OAAO,KAAK;IACd;8GAlIW,uCAAuC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5ExC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DH,QAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGL,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,OAAA,EAAA,OAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,eAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,KAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAIP,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBA7EnD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DH,QAAA,CAAA;oBACP,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE;wBACP,iBAAiB;wBACjB,WAAW;wBACX,YAAY;wBACZ,aAAa;wBACb,iBAAiB;wBACjB,mBAAmB;wBACnB,gBAAgB;AACjB,qBAAA;AACD,oBAAA,MAAM,EAAE,EAAE;AACX,iBAAA;;;;;;;;ACrFK,MAAO,uCAAwC,SAAQ,uBAA4B,CAAA;8GAA5E,uCAAuC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,iIALxC,CAAA,CAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKD,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBANnD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,CAAA,CAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,CAAC,UAAU,CAAC;AACrB,iBAAA;;;;;;;;ACNM,MAAM,0BAA0B,GAAoB;AACzD,IAAA,IAAI,EAAE,qBAAqB;AAC3B,IAAA,KAAK,EAAE,qBAAqB;AAC5B,IAAA,WAAW,EAAE,2BAA2B;AACxC,IAAA,IAAI,EAAE,mBAAmB;AACzB,IAAA,UAAU,EAAE,4BAA4B;AACxC,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,UAAU,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;AACvD,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MACT,+EAA8C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CAAC;AACxG,SAAA;AACD,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MACT,+EAA8C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CAAC;AACxG,SAAA;;;;AAID,QAAA,MAAM,EAAE;AACN,YAAA,SAAS,EAAE,MACT,iFAAgD,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yCAAyC,CAAC;AAC5G,SAAA;;;;AAID,QAAA,QAAQ,EAAE;AACR,YAAA,SAAS,EAAE,MACT,+EAA8C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAuC,CAAC;AACxG,SAAA;AACF,KAAA;;;MCWU,iBAAiB,CAAA;8GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAAjB,iBAAiB,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,SAAA,EAjCf;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,2BAA2B;AACrC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,uBAAuB;AACjC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACD,YAAA;AACI,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,CAAA,CAAA;;2FAEQ,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAlC7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,2BAA2B;AACrC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,uBAAuB;AACjC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACD,wBAAA;AACI,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACJ,iBAAA;;;ACzCM,MAAM,+BAA+B,GAAoB;AAC9D,IAAA,IAAI,EAAE,2BAA2B;AACjC,IAAA,KAAK,EAAE,kBAAkB;AACzB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,UAAU,EAAE,CAAC,iBAAiB,EAAE,sBAAsB,EAAE,qBAAqB,CAAC;AAC9E,IAAA,UAAU,EAAE;AACV,QAAA,IAAI,EAAE;AACJ,YAAA,SAAS,EAAE,MACT,0FAA2D,CAAC,IAAI,CAC9D,CAAC,CAAC,KAAK,CAAC,CAAC,4CAA4C,CACtD;AACJ,SAAA;AACF,KAAA;CACF;;AC8BK,MAAO,4CAA6C,SAAQ,uBAA4B,CAAA;AA/B9F,IAAA,WAAA,GAAA;;AAgCY,QAAA,IAAA,CAAA,SAAS,GAAG,SAAS,CAAuB,WAAW,gFAAC;AACjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACpD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEtD,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,4EAAC;QAW9C,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,CAAqB;YAC1D,IAAI,EAAE,YAAW;gBACf,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACzD,mDAAmD,CACpD;gBACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAChD,gBAAA,MAAM,KAAK,GAAyB;oBAClC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE;AACnE,oBAAA,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,kBAAkB,EAAE,CAAC,CAAC;iBAC5F;AACD,gBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC;gBACzD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;YACvC,CAAC;AACD,YAAA,KAAK,EAAE,OAAO,EAAW,KAAI;AAC3B,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;AACtB,gBAAA,IAAI,GAAG,KAAK,KAAK,EAAE;oBACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACzD,mDAAmD,CACpD;AACD,oBAAA,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,EAAE;AACnF,oBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,OAAO,CAAC;AAC1D,oBAAA,OAAO,OAAO;gBAChB;gBACA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAChD,gBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;gBAC/C,IAAI,KAAK,EAAE;oBACT,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,kBAAkB,EAAE;oBAC/F,OAAO,CAAC,GAAG,CAAC,sCAAsC,EAAE,GAAG,EAAE,MAAM,CAAC;AAChE,oBAAA,OAAO,MAAM;gBACf;AACA,gBAAA,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,kBAAkB,EAAE;gBACpE,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,EAAE,QAAQ,CAAC;AACrE,gBAAA,OAAO,QAAQ;YACjB,CAAC;AACD,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,GAAG,EAAE,MAAM;AACZ,SAAA,CAAC;AAKH,IAAA;AAlDW,IAAA,iBAAiB,CAAC,CAAsB,EAAA;AAChD,QAAA,IAAI,CAAC,CAAC,iBAAiB,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;AACd,gBAAA,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC7B,aAAA,CAAC;QACJ;IACF;IAwCA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE;IAC3B;8GAxDW,4CAA4C,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4CAA4C,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9B7C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAGS,YAAY,8BAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,+BAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,iBAAiB,guBAAE,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEnF,4CAA4C,EAAA,UAAA,EAAA,CAAA;kBA/BxD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;AAChG,iBAAA;uEAEuD,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;;;;AC1CnE;AAEA;AAEA,MAAM,gBAAgB,GAAG,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;MAGzE,oCAAoC,CAAA;IAC/C,UAAU,GAAA;AACR,QAAA,OAAO,gBAAgB;IACzB;8GAHW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;ACRD;;;;AAIG;AACI,eAAe,qBAAqB,CAAC,SAAmB,EAAA;AAC7D,IAAA,MAAM,SAAS,GAAc;AAC3B,QAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC9B,QAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACvC,QAAA,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;AACzC,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC/B,QAAA,OAAO,EAAE;AACP,YAAA,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;AAC9C,YAAA,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW;AAChD,YAAA,YAAY,EAAE;AACZ,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AACrC,aAAA;AACF,SAAA;AACD,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,UAAU,EAAE,EAAE;KACf;AAED,IAAA,OAAO,SAAS;AAClB;;;;;;;ACnBA;AACO,MAAM,yCAAyC,GAAG;AACvD,IAAA,KAAK,EAAE,OAAgB;AACvB,IAAA,QAAQ,EAAE,WAAoB;AAC9B,IAAA,QAAQ,EAAE,UAAmB;AAC7B,IAAA,QAAQ,EAAE,UAAmB;AAC7B,IAAA,iBAAiB,EAAE,oBAA6B;;;ACX3C,eAAe,mBAAmB,CAAC,QAAkB,EAAA;AAC1D,IAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI;AAEnC,IAAA,MAAM,SAAS,GAAc;AAC3B,QAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC9B,QAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI;AAC3C,QAAA,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK;AAC7C,QAAA,OAAO,EAAE;AACP,YAAA,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK;AAClD,YAAA,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW;AACpD,YAAA,YAAY,EAAE;AACZ,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AACrC,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,SAAS,EAAE;AACnB,YAAA;AACE,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE;AACP,oBAAA,OAAO,EAAE,MAAM;AAChB;AACF,aAAA;AACF,SAAA;AACD,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,EAAE,EAAE,YAAY;AAChB,gBAAA,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK;AAC9C,aAAA;AACD,YAAA;AACE,gBAAA,EAAE,EAAE,YAAY;gBAChB,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,wBAAA,CAA0B;AAC1C,aAAA;AACF,SAAA;AACD,QAAA,UAAU,EAAE;AACV,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,4BAA4B;AACnC,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,IAAI;AACd,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE;AACX,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,6BAA6B;AACpC,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC7B,qBAAA;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE;AACX,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,wBAAA,CAA0B;AACzC,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,UAAU;AAClC,wBAAA,OAAO,EAAE;AACP,4BAAA,SAAS,EAAE,MAAM;AACjB,4BAAA,UAAU,EAAE,OAAO;AACnB,4BAAA,UAAU,EAAE;AACV,gCAAA;AACE,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,KAAK,EAAE,IAAI;AACX,oCAAA,OAAO,EAAE,CAAC;AACX,iCAAA;AACD,gCAAA;AACE,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,KAAK,EAAE,IAAI;AACX,oCAAA,OAAO,EAAE,IAAI;AACd,iCAAA;AACD,gCAAA;AACE,oCAAA,IAAI,EAAE,IAAI;AACV,oCAAA,KAAK,EAAE,IAAI;oCACX,OAAO,EAAE,IAAI,GAAG,IAAI;AACrB,iCAAA;AACF,6BAAA;AACD,4BAAA,QAAQ,EAAE,IAAI;AACf,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE;AACX,oBAAA;AACE,wBAAA,IAAI,EAAE,UAAU;AACjB,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,4BAAA,CAA8B;AAC7C,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,iCAAA,CAAmC;AAClD,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,+BAAA,CAAiC;AAChD,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,qBAAA;AACF,iBAAA;AACF,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,iCAAA,CAAmC;AAClD,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC9B,wBAAA,OAAO,EAAE;AACP,4BAAA,QAAQ,EAAE,wCAAwC;AACnD,yBAAA;AACD,wBAAA,QAAQ,EAAE;AACR,4BAAA;AACE,gCAAA,KAAK,EAAE,wCAAwC;AAC/C,gCAAA,MAAM,EAAE,6CAA6C;AACtD,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF,aAAA;;;;;;;;;;;;AAYD,YAAA;AACE,gBAAA,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAA,kBAAA,CAAoB;AACnC,gBAAA,OAAO,EAAE,YAAY;AACrB,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE,QAAQ;AAClB,oBAAA,SAAS,EAAE;wBACT,IAAI,EAAE,iBAAiB,CAAC,iBAAiB;AACzC,wBAAA,OAAO,EAAE,EAAE;AACZ,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC9C,QAAA,UAAU,EAAE;AACV,YAAA,MAAM,EAAE;AACN,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE;AACR,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AACjB,yBAAA;AACD,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AACjB,yBAAA;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,SAAS;AACf,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,gBAAgB;AACtB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;;;;;;;;;;;AAWD,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,EAAE;AACZ,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE;AACN,oBAAA,QAAQ,EAAE;AACR,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AACjB,yBAAA;AACD,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AACjB,yBAAA;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,SAAS;AACf,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,gBAAgB;AACtB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,EAAE;AACZ,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;AACD,gBAAA,MAAM,EAAE;AACN,oBAAA,KAAK,EAAE,WAAW;AAClB,oBAAA,QAAQ,EAAE;AACR,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AAChB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,EAAE;AACZ,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,EAAE,EAAE,YAAY;AAChB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,EAAE;AACZ,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,UAAU,EAAE;AACV,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,OAAO;AACb,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,SAAS;AACf,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,gBAAgB;AACtB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACD,wBAAA;AACE,4BAAA,IAAI,EAAE,kBAAkB;AACxB,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,CAAC;AACX,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;;;;;;;;;;;AAWD,wBAAA;AACE,4BAAA,IAAI,EAAE,MAAM;AACZ,4BAAA,MAAM,EAAE;AACN,gCAAA,SAAS,EAAE;AACT,oCAAA,EAAE,EAAE;AACF,wCAAA,OAAO,EAAE,EAAE;AACZ,qCAAA;AACF,iCAAA;AACF,6BAAA;AACF,yBAAA;AACF,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,GAAG,yBAAyB,EAAE,CAAC;AAC1C,iBAAA;AACD,gBAAA,IAAI,EAAE;oBACJ,OAAO,EAAE,CAAC,GAAG,uBAAuB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,oBAAA,KAAK,EAAE,CAAC,kBAAkB,EAAE,CAAC;AAC9B,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,OAAO,SAAS;AAClB;;ACjgBM,MAAgB,sBAAuB,SAAQ,wBAGpD,CAAA;AACA;AAGK,MAAO,0BAA2B,SAAQ,sBAAsB,CAAA;AACpE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,CAAC,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAA,CAAE,CAAC;IAC7E;8GAHW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA1B,0BAA0B,EAAA,CAAA,CAAA;;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;MCGY,6CAA6C,CAAA;8GAA7C,6CAA6C,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAA7C,6CAA6C,EAAA,CAAA,CAAA;AAA7C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6CAA6C,EAAA,SAAA,EAP7C;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,sBAAsB;AAC/B,gBAAA,QAAQ,EAAE,0BAA0B;AACrC,aAAA;AACF,SAAA,EAAA,CAAA,CAAA;;2FAEU,6CAA6C,EAAA,UAAA,EAAA,CAAA;kBAXzD,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,sBAAsB;AAC/B,4BAAA,QAAQ,EAAE,0BAA0B;AACrC,yBAAA;AACF,qBAAA;AACF,iBAAA;;;ACTD;;;;AAIG;AACI,eAAe,mBAAmB,CAAC,SAAmB,EAAA;AAC3D,IAAA,MAAM,SAAS,GAAc;AAC3B,QAAA,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI;AAC9B,QAAA,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;AACrC,QAAA,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AACvC,QAAA,SAAS,EAAE,UAAU;AACrB,QAAA,OAAO,EAAE;AACP,YAAA,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK;AAC5C,YAAA,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW;AAC9C,YAAA,YAAY,EAAE;AACZ,gBAAA,KAAK,EAAE,aAAa;AACpB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK;AACrC,aAAA;AACF,SAAA;AACD,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,UAAU,EAAE,EAAE;KACf;AAED,IAAA,OAAO,SAAS;AAClB;;;;;;;AC7BA;;;;;;;;;;;;;MCUsB,4BAA4B,CAAA;8GAA5B,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA5B,4BAA4B,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADjD;;;ACTD;AAcA;AAEA;AAEA;;AAEG;AACG,SAAU,+BAA+B,CAC7C,IAAgD,EAAA;AAEhD,IAAA,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AACzB,QAAA,OAAO,EAAE;IACX;IACA,MAAM,GAAG,GAAsC,EAAE;AACjD,IAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;QAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE;YAC9B,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,gBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI;gBACxB,aAAa,EAAE,CAAC,CAAC,SAAS;AAC3B,aAAA,CAAC;QACJ;IACF;AACA,IAAA,OAAO,GAAG;AACZ;AAEA;AAEA;AAEO,MAAM,uCAAuC,GAClD,uJAAuJ;AAEzJ;;AAEG;AACG,SAAU,+BAA+B,CAAC,OAAe,EAAE,MAAyC,EAAA;IACxG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAA,GAAA,EAAM,CAAC,CAAC,IAAI,CAAA,GAAA,EAAM,CAAC,CAAC,KAAK,CAAA,WAAA,EAAc,CAAC,CAAC,aAAa,CAAA,CAAA,CAAG,CAAC;IAC1F,OAAO;QACL,+CAA+C;QAC/C,4FAA4F;QAC5F,yEAAyE;QACzE,EAAE;QACF,SAAS;AACT,QAAA,GAAG,KAAK;QACR,EAAE;QACF,WAAW;QACX,OAAO;AACR,KAAA,CAAC,IAAI,CAAC,IAAI,CAAC;AACd;AAEA;;AAEG;AACG,SAAU,wBAAwB,CAAC,IAAY,EAAA;AACnD,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE;IAC3B,MAAM,KAAK,GAAG,iCAAiC,CAAC,IAAI,CAAC,OAAO,CAAC;AAC7D,IAAA,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,GAAG,OAAO;AAC9C,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY;AACzC,QAAA,IAAI,MAAM,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1E,YAAA,OAAO,MAAiC;QAC1C;IACF;AAAE,IAAA,MAAM;;IAER;AACA,IAAA,OAAO,EAAE;AACX;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAClC,QAA6C,EAC7C,OAAgC,EAAA;IAEhC,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,IAAI,EAAE,CAAC,EAAE;AACpC,IAAA,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,MAAM,KAAK,GAAG,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;AAC7D,QAAA,IAAI,KAAK,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AACtD,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACb;IACF;AACA,IAAA,OAAO,IAAI;AACb;AAEA;AAEA;AAEA;;AAEG;AACG,SAAU,mBAAmB,CAAC,IAAkD,EAAA;IACpF,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,OAAO,KAAK;IACd;AACA,IAAA,MAAM,CAAC,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE;AACxD,IAAA,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAC1B,QAAA,OAAO,IAAI;IACb;IACA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;AACpC,IAAA,OAAO,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D;AAEA;;ACxHA;;AAEG;AACH,IAAY,8BAOX;AAPD,CAAA,UAAY,8BAA8B,EAAA;;AAExC,IAAA,8BAAA,CAAA,SAAA,CAAA,GAAA,gDAA0D;AAC1D;;AAEG;AACH,IAAA,8BAAA,CAAA,UAAA,CAAA,GAAA,iDAA4D;AAC9D,CAAC,EAPW,8BAA8B,KAA9B,8BAA8B,GAAA,EAAA,CAAA,CAAA;;ACH1C;AA0BA;AAEA,SAAS,eAAe,CAAC,GAAuB,EAAA;AAC9C,IAAA,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ;AAC3E;AAEA,SAAS,iBAAiB,CAAC,GAAY,EAAA;AACrC,IAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC3B,QAAA,OAAO,GAAG,CAAC,IAAI,EAAE;IACnB;AACA,IAAA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,IAAK,GAA2B,CAAC,KAAK,IAAI,IAAI,EAAE;QAClG,OAAO,MAAM,CAAE,GAA2B,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;IAC1D;AACA,IAAA,OAAO,EAAE;AACX;AAEA,SAAS,eAAe,CAAC,GAAY,EAAA;AACnC,IAAA,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;AAC5B,QAAA,OAAO,GAAG;IACZ;IACA,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG,EAAE;AACpD,QAAA,MAAM,CAAC,GAAI,GAA2B,CAAC,KAAK;AAC5C,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM;IACnC;AACA,IAAA,OAAO,KAAK;AACd;AAEA;AAEA;;AAEG;MAEU,mCAAmC,CAAA;AADhD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,kCAAkC,CAAC;AACzD,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAoKvD,IAAA;AAlKC;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAA;AACxB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAU,8BAA8B,CAAC,OAAO,CAAC;QACpF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE;AACrC,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC;IAC7B;AAEA;;AAEG;AACH,IAAA,MAAM,6BAA6B,GAAA;AACjC,QAAA,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAU,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACxG,IAAI,GAAG,EAAE;AACP,YAAA,OAAO,GAAG;QACZ;AACA,QAAA,OAAO,iBAAiB,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAU,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACrG;AAEA;;AAEG;AACH,IAAA,MAAM,kBAAkB,CAAC,QAA6C,EAAE,QAAgB,EAAA;AACtF,QAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK;cACnE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;AAC5B,cAAE,OAAO,QAAQ,CAAC,EAAE,KAAK;AACvB,kBAAE,QAAQ,CAAC,EAAE,CAAC,IAAI;kBAChB,EAAE;QACV,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;QACjB;QAEA,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,KAAK,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,+BAA+B;QACjE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACxC,IAAI;YACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK;AACL,YAAA,OAAO,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AACzE,YAAA,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,oBAAoB,CAAC,SAAS;AACvC,SAAA,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI;IACrC;AAEA;;AAEG;IACH,MAAM,mBAAmB,CAAC,OAKzB,EAAA;QACC,MAAM,MAAM,GAAG,+BAA+B,CAAC,OAAO,CAAC,YAAY,IAAI,SAAS,CAAC;AACjF,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,EAAE;QACrE;AAEA,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,6BAA6B,EAAE;QAC3D,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC;QAC/G;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;AACtD,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC;QACnG;QAEA,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;AAE1D,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;QAChF,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC;QACvD;QAEA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,8CAA8C,EAAE;YACtG,MAAM;YACN,QAAQ;YACR,aAAa;YACb,aAAa,EAAE,KAAK,CAAC,EAAE;AACxB,SAAA,CAAC;AACF,QAAA,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE;YAC1E,MAAM,MAAM,GACV,aAAa,IAAI,IAAI,IAAI,OAAO,aAAa,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AACzG,kBAAE,aAAa,CAAC,OAAO,CAAC;kBACtB,kCAAkC;AACxC,YAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACzB;AACA,QAAA,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI;QAEvC,MAAM,QAAQ,GAAG,+BAA+B,CAAC,OAAO,EAAE,MAAM,CAAC;QACjE,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,mDAAmD,EAAE;YAC9G,QAAQ;YACR,aAAa,EAAE,KAAK,CAAC,EAAE;AACvB,YAAA,QAAQ,EAAE;AACR,gBAAA,oBAAoB,CAAC,QAAQ,EAAE,uCAAuC,CAAC;AACvE,gBAAA,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC;AACvC,aAAA;AACD,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,WAAW,EAAE,GAAG;AACjB,SAAA,CAAC;AACF,QAAA,IAAI,gBAAgB,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AACnF,YAAA,MAAM,MAAM,GACV,gBAAgB,IAAI,IAAI;AACxB,gBAAA,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,KAAK,QAAQ;AAClD,gBAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;AAChC,kBAAE,gBAAgB,CAAC,OAAO,CAAC;kBACzB,qCAAqC;AAC3C,YAAA,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACzB;AACA,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI;AAEhD,QAAA,MAAM,MAAM,GAAG,wBAAwB,CAAC,aAAa,CAAC;QACtD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;AACjE,QAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;IAC5B;;AAIA;;AAEG;AACK,IAAA,2BAA2B,CAAC,MAAgC,EAAA;AAClE,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,SAAS;QAClB;QACA,MAAM,aAAa,GAAG,SAAS;AAC/B,QAAA,QACE,MAAM,CAAC,IAAI,CACT,CAAC,CAAC,KACA,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AAChB,aAAA,IAAI;aACJ,WAAW,EAAE,KAAK,aAAa,CACrC;YACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3D,YAAA,MAAM,CAAC,CAAC,CAAC;IAEb;AAEQ,IAAA,oBAAoB,CAAC,IAAyC,EAAA;AACpE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK;AAC5B,QAAA,IAAI,CAAC,YAAY,IAAI,EAAE;AACrB,YAAA,OAAO,CAAC;QACV;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC,YAAY,IAAI,EAAE;YACrD,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,0BAA0B,EAAE,CAAC;QAC9F;AACA,QAAA,OAAO,IAAI;IACb;8GArKW,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cADtB,MAAM,EAAA,CAAA,CAAA;;2FACnB,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MChDrB,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC;AAClC,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpE,aAAA,IAAI,EAA0C;AAChC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,mCAAmC,CAAC;AAoU/E,IAAA;AAlUC,IAAA,MAAM,oBAAoB,CACxB,KAAa,EACb,IAAS,EAAA;QAET,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;QAEpG,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE;AACpD,aAAA,GAAG,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;aAC1C,IAAI,CAAC,GAAG,CAAC;AAEZ,QAAA,MAAM,QAAQ,GAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAEzD,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAE,YAA+C,EAAE,gBAAgB;QAE7F,MAAM,oBAAoB,GACxB,YAAY,EAAE,YAAY,IAAK,YAAY,CAAC,YAAoB,CAAC;AAC/D,cAAE;gBACE,GAAG,YAAY,CAAC,YAAY;AAC5B,gBAAA,MAAM,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAU,MAAM;AACpE,oBAAA,GAAG,KAAK;AACR,oBAAA,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAU,MAAM;AAChD,wBAAA,GAAG,KAAK;AACR,wBAAA,IAAI,EAAE,MAAM;AACb,qBAAA,CAAC,CAAC;AACJ,iBAAA,CAAC,CAAC;AACJ;AACH,cAAE,EAAE,MAAM,EAAE,EAAE,EAAE;AAEpB,QAAA,MAAM,aAAa,GAAG,CAAC,oBAAoB,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QACvG,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;AAC3E,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,IAAI,aAAa,IAAI,iBAAiB,IAAI,QAAQ;;QAGzF,MAAM,cAAc,GAAQ,EAAE;QAC9B,IAAI,QAAQ,EAAE;YACZ,cAAc,CAAC,QAAQ,CAAC,GAAG;AACzB,gBAAA,YAAY,EAAE,QAAQ;gBACtB,IAAI,gBAAgB,IAAI,QAAQ,IAAK,QAAgB,CAAC,cAAc,IAAI;AACtE,sBAAE,EAAE,cAAc,EAAG,QAAgB,CAAC,cAAc;sBAClD,EAAE,CAAC;aACR;QACH;;QAEA,cAAc,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEpE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAA8E,CAAC,MAAM,KAAI;YAC9F;iBACG,QAAQ,CAAC,KAAK;iBACd,OAAO,CAAC,IAAI;iBACZ,UAAU,CAAC,cAAc;AACzB,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAE3B,IAAI,oBAAoB,EAAE;oBACxB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AAC3B,wBAAA,KAAK,CAAC,YAAY,CAAC,kCAAkC,EAAE;4BACrD,QAAQ,EAAE,QAAQ,IAAI,EAAE;4BACxB,YAAY;AACb,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;gBACJ;;AAGA,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACpD,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAE5B,IAAI,QAAQ,EAAE;wBACZ,IAAI,aAAa,EAAE;;;4BAGjB,IAAI,CAAC,SAAS,CAAC,6CAA6C,EAAE,CAAC,KAAK,KAAI;AACtE,gCAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,aAAA,CAAe,CAAC;AACxC,gCAAA,KAAK,CAAC,YAAY,CAAC,uBAAuB,EAAE,oBAAoB,CAAC;AACnE,4BAAA,CAAC,CAAC;wBACJ;wBACA,IAAI,gBAAgB,EAAE;4BACpB,IAAI,CAAC,SAAS,CAAC,iDAAiD,EAAE,CAAC,KAAK,KAAI;AAC1E,gCAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,eAAA,CAAiB,CAAC;AAC1C,gCAAA,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;AACvB,4BAAA,CAAC,CAAC;wBACJ;oBACF;oBAEA,IAAI,CAAC,SAAS,CAAC,wCAAwC,EAAE,CAAC,KAAK,KAAI;AACjE,wBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAA,MAAA,CAAQ,CAAC;AAClC,wBAAA,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE;4BAClC,YAAY,EAAE,CAAC,IAAI,CAAC;AACpB,4BAAA,YAAY,EAAE,KAAK;AACnB,4BAAA,QAAQ,EAAE,IAAI;4BACd,MAAM;AACP,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;AACtB,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AAC/C,gBAAA,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACjD,YAAA,CAAC;iBACA,cAAc,CAAC,IAAI;AACnB,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;oBACvB,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE;gBACnC;AACA,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAuC;AACpE,gBAAA,MAAM,0BAA0B,GAAG,CAAC,OAAY,EAAE,SAAiB,KAAI;AACrE,oBAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAC,GAAG,cAAc,CAAC;AAC7D,oBAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAC,GAAG,gBAAgB,CAAC;oBAC9D,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7E,gBAAA,CAAC;gBACD,IAAI,UAAU,EAAE;AACd,oBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,oBAAA,IAAI;AACF,wBAAA,MAAM,aAAa,GAAQ,EAAE,OAAO,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC1D,IAAI,QAAQ,EAAE;4BACZ,MAAM,IAAI,GAAG,0BAA0B,CAAC,GAAU,EAAE,CAAC,CAAC;AACtD,4BAAA,aAAa,CAAC,YAAY,GAAG,IAAI;AACjC,4BAAA,IAAI,IAAI,EAAE,cAAc,IAAI,IAAI,EAAE;AAChC,gCAAA,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;4BACpD;wBACF;wBACA,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC;wBACzD,OAAO;AACL,4BAAA,IAAI,EAAE;AACJ,gCAAA,MAAM,EAAE,KAAK;gCACb,OAAO,EAAE,CAAC,UAAU,CAAC;AACtB,6BAAA;yBACF;oBACH;4BAAU;AACR,wBAAA,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;oBAC7B;gBACF;AACA,gBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI;AACF,oBAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,OAAO,CAAW,EAAC,GAAG,CAAkB,OAAO,IAAS,EAAE,KAAa,KAAI;AACjG,wBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;wBACzB,MAAM,IAAI,GAAG,0BAA0B,CAAC,GAAU,EAAE,KAAK,CAAC;wBAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AAC3C,4BAAA,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,CAAC,EAAE,IAAI;AACb,4BAAA,KAAK,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI;4BAC1B,WAAW,EAAE,CAAC,EAAE,WAAW;4BAC3B,YAAY;4BACZ,QAAQ;AACR,4BAAA,QAAQ,EAAE,OAAO;4BACjB,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,+BAA+B,EAAE;AAC/D,4BAAA,OAAO,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;AAC3B,4BAAA,YAAY,EAAE,IAAI;4BAClB,IAAI,IAAI,EAAE,cAAc,IAAI,IAAI,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC;AACjF,yBAAA,CAAC;AACF,wBAAA,OAAO,KAAK;AACd,oBAAA,CAAC,CAAC;oBACF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAC3C,OAAO;AACL,wBAAA,IAAI,EAAE;AACJ,4BAAA,MAAM,EAAE,KAAK;4BACb,OAAO;AACR,yBAAA;qBACF;gBACH;wBAAU;AACR,oBAAA,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AACT,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,MAAM,+BAA+B,CACnC,KAAa,EACb,IAAS,EAAA;AAET,QAAA,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;QAE3F,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE;AACpD,aAAA,GAAG,CAAC,CAAC,CAAM,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;aAC1C,IAAI,CAAC,GAAG,CAAC;AAEZ,QAAA,MAAM,QAAQ,GAAU,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAEzD,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAE,YAA+C,EAAE,gBAAgB;;AAG7F,QAAA,MAAM,WAAW,GAAG,CAAC,IAAS,KAC5B,IAAI,EAAE,YAAY,KAAK,IAAI,EAAE,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAE1H,QAAA,MAAM,aAAa,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9G,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE;AAC3E,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,oBAAoB,GAAG,CAAC,CAAC,QAAQ,IAAI,aAAa,IAAI,iBAAiB,IAAI,QAAQ;;QAGzF,MAAM,cAAc,GAAQ,EAAE;QAC9B,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;gBAC/B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,QAAQ;AAC9C,gBAAA,cAAc,CAAC,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,CAAC,GAAG;AAChC,oBAAA,YAAY,EAAE,QAAQ;oBACtB,IAAI,gBAAgB,IAAI,QAAQ,IAAK,QAAgB,CAAC,cAAc,IAAI;AACtE,0BAAE,EAAE,cAAc,EAAG,QAAgB,CAAC,cAAc;0BAClD,EAAE,CAAC;iBACR;AACH,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAE;QAClF;;QAEA,cAAc,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEpE,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAAiD,CAAC,MAAM,KAAI;YACjE;iBACG,QAAQ,CAAC,KAAK;iBACd,OAAO,CAAC,IAAI;iBACZ,UAAU,CAAC,cAAc;AACzB,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;gBAE3B,IAAI,oBAAoB,EAAE;oBACxB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,KAAI;AAC3B,wBAAA,KAAK,CAAC,YAAY,CAAC,kCAAkC,EAAE;4BACrD,QAAQ,EAAE,QAAQ,IAAI,EAAE;4BACxB,YAAY;AACb,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;gBACJ;;AAGA,gBAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AACpD,oBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;oBAC5B,IAAI,QAAQ,EAAE;wBACZ,IAAI,aAAa,EAAE;4BACjB,IAAI,CAAC,SAAS,CAAC,6CAA6C,EAAE,CAAC,KAAK,KAAI;AACtE,gCAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,aAAA,CAAe,CAAC;AACxC,gCAAA,KAAK,CAAC,YAAY,CAAC,uBAAuB,EAAE,YAAY,EAAE,YAAY,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAC3F,4BAAA,CAAC,CAAC;wBACJ;wBACA,IAAI,gBAAgB,EAAE;4BACpB,IAAI,CAAC,SAAS,CAAC,iDAAiD,EAAE,CAAC,KAAK,KAAI;AAC1E,gCAAA,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAA,eAAA,CAAiB,CAAC;AAC1C,gCAAA,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;AACvB,4BAAA,CAAC,CAAC;wBACJ;oBACF;oBAEA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,KAAI;AAC/B,wBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAA,MAAA,CAAQ,CAAC;AAClC,wBAAA,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE;4BAClC,YAAY,EAAE,CAAC,IAAI,CAAC;AACpB,4BAAA,YAAY,EAAE,KAAK;AACnB,4BAAA,QAAQ,EAAE,IAAI;4BACd,MAAM;AACP,yBAAA,CAAC;AACJ,oBAAA,CAAC,CAAC;gBACJ;AACF,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACzF,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;oBACvB,OAAO;AACL,wBAAA,IAAI,EAAE;AACJ,4BAAA,MAAM,EAAE,IAAI;AACb,yBAAA;qBACF;gBACH;AACA,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAuC;AACpE,gBAAA,MAAM,0BAA0B,GAAG,CAAC,OAAY,EAAE,SAAiB,KAAI;AACrE,oBAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAC,GAAG,cAAc,CAAC;AAC7D,oBAAA,MAAM,GAAG,GAAG,OAAO,GAAG,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAE,CAAC,GAAG,gBAAgB,CAAC;oBAC9D,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AAC7E,gBAAA,CAAC;AACD,gBAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,OAAO,CAAW,EAAC,GAAG,CAAC,CAAC,IAAS,EAAE,KAAa,MAAM;AAC5E,oBAAA,GAAG,IAAI;AACP,oBAAA,IAAI,QAAQ,GAAG,EAAE,YAAY,EAAE,0BAA0B,CAAC,GAAU,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;AACrF,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;AACrD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AACT,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACxE,QAAA,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAM,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAElF,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAAkD,CAAC,MAAM,KAAI;YAClE;iBACG,QAAQ,CAAC,yDAAyD;AAClE,iBAAA,UAAU,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE;AACxC,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;gBAChB;qBACG,YAAY,CAAC,QAAQ;AACrB,qBAAA,SAAS,CAAC,yDAAyD,EAAE,CAAC,KAAK,KAAI;AAC9E,oBAAA,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;AAC5B,oBAAA,KAAK,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACpF,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,+BAA+B,CAAC;AACzF,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,oBAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;gBAC5B;AACA,gBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAS;gBACtC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE;AAClE,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AAET,QAAA,OAAO,MAAM;IACf;8GA1UW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MC4BrB,0BAA0B,CAAA;AAHvC,IAAA,WAAA,GAAA;AAImB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;AACnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC;AAClC,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpE,aAAA,IAAI,EAA0C;AAChC,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA+JjE,IAAA;AA7JC,IAAA,MAAM,UAAU,CACd,QAAoC,EACpC,OAA2B,EAAA;;AAG3B,QAAA,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;QAEvC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC3D,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,EAAE,QAAQ,CAAC;AAEvE,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,YAAY,EAAE,cAAc;AAC5B,YAAA,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;AAC1C,YAAA,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;AACjC,YAAA,OAAO,EAAE,CAAC;SACX;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,gDAAgD,EAAE;AACzG,YAAA,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE;AACxC,SAAA,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAC3D,KAAK,EACL,SAAS,CACV;AAED,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACvC;AAEA,IAAA,MAAM,kBAAkB,CAAC,MAAc,EAAE,OAAiC,EAAA;QACxE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACnC;QAEA,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC;AAExE,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,YAAY,EAAE,kBAAkB;AAChC,YAAA,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtB,YAAA,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;YACjC,QAAQ,EAAE,IAAI,CAAC,YAAY;AAC3B,YAAA,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB;AAED,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,CAAC;AAE7F,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACvC;AAEA;;;AAGG;IACH,MAAM,gBAAgB,CAAC,MAAc,EAAA;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC;QACnC;QAEA,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC;;QAG5E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,KAAK,CAAC;QAC/D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;;QAGlD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,+BAA+B,CACtE,gEAAgE,EAChE;AACE,YAAA,YAAY,EAAE,kBAAkB;AAChC,YAAA,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,YAAY;AAC/B,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CACF;AAED,QAAA,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY;AAC1C,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI;AAE/C,QAAA,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;AACrC,YAAA,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC;YACpC,YAAY;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,OAAO;AACf,SAAA,CAAC;AAEF,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,yBAAyB,CAAC,OAA2B,EAAA;AAC3D,QAAA,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,cAAc,KAAK,OAAO,EAAE,QAAQ,CAAC,EAAE;AAC1E,YAAA,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC;QAC3F;IACF;IAEQ,MAAM,eAAe,CAC3B,QAAoC,EAAA;AAEpC,QAAA,MAAM,EAAE,GAAG,OAAO,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,EAAE,CAAA,CAAE,CAAC;QACnD;AACA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,MAAM,WAAW,CACvB,cAA4D,EAC5D,QAAkB,EAAA;QAElB,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE;AAC9D,QAAA,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAExF,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACnC,QAAQ,EAAE,QAAQ,IAAI,KAAK;AAC3B,YAAA,MAAM,EAAE,WAAW;AACpB,SAAA,CAAC;IACJ;AAEQ,IAAA,uBAAuB,CAAC,KAAa,EAAA;QAC3C,OAAO,KAAK,CAAC,GAAG,CAAkB,CAAC,IAAI,MAAM;YAC3C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,MAAM,EAAE,UAAU;AAClB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,CAAC,CAAC;IACL;;IAIQ,MAAM,iBAAiB,CAAC,MAAmB,EAAA;AACjD,QAAA,IAAI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;8GAtKW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACpCD;AA0CA;AAEA;AAEA;;AAEG;MAEmB,yBAAyB,CAAA;8GAAzB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAzB,yBAAyB,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAD9C;;AA2ID;AAEA;AAEA;;AAEG;AAEG,MAAO,6BAA8B,SAAQ,yBAAyB,CAAA;AAD5E,IAAA,WAAA,GAAA;;;AAIY,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACxC,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC;AACzB,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI;AAClE,aAAA,IAAI,EAA0F;QACvF,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC;AAC3B,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpE,aAAA,IAAI,EAA0C;QACvC,IAAA,CAAA,YAAY,GAAG,IAAI,CAAC;AAC3B,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI;AAC5E,aAAA,IAAI,EAA0E;AACvE,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAChE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACvC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC3C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,aAAa,CAAC;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC1C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC;AACrC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC/C,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qCAAqC,CAAC;AAErE,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AAEvD,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,kCAAkC,CAAC;QAEpE,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;AAMpD,QAAA,IAAA,CAAA,gBAAgB,GAA8C,IAAI,GAAG,EAAE;AACvE,QAAA,IAAA,CAAA,cAAc,GAAoD,IAAI,GAAG,EAAE;;;AAqBnF;;AAEG;AACK,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,MAA8C,KAA6B;YAC7G,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAG;gBACd,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACtD,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;AACjC,gBAAA,UAAU,EAAG,MAAc,EAAE,OAAO,EAAE,EAAE;AACxC,gBAAA,SAAS,EAAG,MAAc,EAAE,OAAO,EAAE,EAAE;gBACvC,WAAW,EACT,MAAM,CAAC,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS;gBACjG,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,gBAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;AACzC,gBAAA,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,gBAAA,QAAQ,EAAE;AACR,oBAAA,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,CAAC;AAC7D,oBAAA,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;AACpD,oBAAA,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;AACzD,iBAAA;aACF;AACH,QAAA,CAAC;AA+BD;;;AAGG;AACK,QAAA,IAAA,CAAA,iBAAiB,GAAG,CAAC,QAAwC,KAA6B;AAChG,YAAA,MAAM,gBAAgB,GAAG,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc;YACjG,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,EAAG;AAChB,gBAAA,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;gBACzB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,IAAI,EAAE,gBAAgB,GAAG,QAAQ,GAAG,MAAM;gBAC1C,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC3B,gBAAA,WAAW,EAAE,UAAU;AACvB,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,aAAa,EAAE,EAAE;AACjB,gBAAA,UAAU,EAAE,IAAI;gBAChB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;gBAC3C,cAAc,EAAE,QAAQ,CAAC,cAAc;AACvC,gBAAA,QAAQ,EAAE,EAAE;aACb;AACH,QAAA,CAAC;AAo6CF,IAAA;;;AA9/CC;;;AAGG;AACH,IAAA,KAAK,CAAC,KAAuB,EAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACrC,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE;QACA,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAE;IAC1C;AAgCA;;AAEG;AACK,IAAA,aAAa,CAAC,IAAoB,EAAA;AACxC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAK,IAAI,CAAC,YAAoD,GAAG,gBAAgB,CAAC;AAC5H,QAAA,MAAM,MAAM,GAAG,CAAC,CAAU,KAAsB;YAC9C,IAAI,CAAC,IAAI,IAAI;AAAE,gBAAA,OAAO,SAAS;YAC/B,IAAI,CAAC,YAAY,IAAI;AAAE,gBAAA,OAAO,CAAC;AAC/B,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAAE,gBAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;YAAE;AACtG,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAAE,gBAAA,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC;YAAE;AACtG,YAAA,OAAO,SAAS;AAClB,QAAA,CAAC;AACD,QAAA,MAAM,IAAI,GAA4B;YACpC,EAAE,EAAE,IAAI,CAAC,EAAG;YACZ,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,YAAA,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ;AACvB,YAAA,UAAU,EAAG,IAAY,EAAE,OAAO,EAAE,EAAE;AACtC,YAAA,SAAS,EAAG,IAAY,EAAE,OAAO,EAAE,EAAE;AACrC,YAAA,IAAI,EAAG,IAAI,CAAC,QAAwC,EAAE,IAAI,IAAI,CAAC;YAC/D,MAAM,EAAE,IAAI,CAAC,QAAQ;AACrB,YAAA,WAAW,EAAE,UAAU;AACvB,YAAA,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,SAAS;AAC5C,YAAA,aAAa,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE;AAC3D,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;SACvC;AACD,QAAA,OAAO,IAAI;IACb;AAwBA;;AAEG;AACK,IAAA,MAAM,4BAA4B,CACxC,GAA6C,EAC7C,YAA8C,EAAA;QAE9C,MAAM,CAAC,GAAI,GAAgD,CAAC,QAAQ,IAAK,GAA4B,CAAC,MAAM;AAC5G,QAAA,MAAM,SAAS,GACb,CAAC,IAAI;AACH,cAAE;AACF,cAAE,OAAO,CAAC,KAAK;AACb,kBAAE;AACF,kBAAG,CAAkE,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ;AAC7F,oBAAA,OAAQ,CAAsC,CAAC,MAAM,EAAE,KAAK,KAAK;AACjE,sBAAG,CAAmC,CAAC,MAAM,CAAC;AAC9C,sBAAE,OAAQ,CAAqB,CAAC,EAAE,KAAK;0BAClC,CAAoB,CAAC;0BACtB,SAAS;QACrB,IAAI,SAAS,EAAE;AACb,YAAA,IAAI,QAAwC;YAC5C,IAAI,YAAY,EAAE;AAChB,gBAAA,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;YACxC;iBAAO;gBACL,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;YACtD;AACA,YAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,IAAK,GAAW,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC;YACtE,OAAO;AACL,gBAAA,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;AACd,gBAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,OAAO;AACjD,gBAAA,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE;AACxB,gBAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC7B,gBAAA,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE;aAClC;QACH;QAEA,MAAM,WAAW,GACd,GAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,KAAK,KAAK,IAAI,OAAQ,GAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK;AAC1F,cAAI,GAAW,CAAC,MAAM,CAAC,MAAM,CAAC;cAC5B,EAAE;QACR,MAAM,YAAY,GAAK,GAAW,EAAE,MAAM,EAAE,IAA2B,IAAI,CAAC;QAE5E,OAAO;AACL,YAAA,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAI,GAA0C,CAAC,IAAI,GAAG,MAAM,CAAa,IAAI,OAAO;AACxF,YAAA,GAAG,EAAE,WAAW;AAChB,YAAA,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE;AAC7B,YAAA,YAAY,EAAE,WAAW;SAC1B;IACH;;;AAMA;;AAEG;AACK,IAAA,MAAM,SAAS,CAAC,IAA6B,EAAE,YAAqB,EAAA;QAC1E,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,CAAA,EAAI,YAAY,IAAI,EAAE,CAAA,CAAE;QAEnD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,CAAC,YAAW;;AAE9B,gBAAA,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE;oBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,gBAAgB,EAAE;wBACjD,OAAO,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAAE,GAAG,CACpG,IAAI,CAAC,wBAAwB,CAC9B;oBACH;oBACA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;wBACjD,OAAO,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,GAAG,CAChG,IAAI,CAAC,wBAAwB,CAC9B;oBACH;gBACF;AAEA,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;oBACxB,OAAO,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CACtF,IAAI,CAAC,wBAAwB,CAC9B;gBACH;gBAEA,OAAO,CAAC,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,GAAG,CACpF,IAAI,CAAC,wBAAwB,CAC9B;YACH,CAAC,GAAG;YAEJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;AAC9C,YAAA,OAAO,WAAW;QACpB;QAEA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAE;IAC3C;AAEA;;AAEG;AACK,IAAA,cAAc,CAAC,YAAoB,EAAA;QACzC,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC;AAElD,QAAA,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE;;YAEvB,OAAO,CAAA,EAAG,YAAY,CAAA,KAAA,CAAO;QAC/B;QAEA,MAAM,cAAc,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC;QAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC;AAEtD,QAAA,OAAO,CAAA,EAAG,cAAc,CAAA,KAAA,EAAQ,SAAS,EAAE;IAC7C;AAEA;;;AAGG;AACK,IAAA,MAAM,kBAAkB,CAC9B,MAAgC,EAChC,QAAiB,EAAA;AAEjB,QAAA,IAAI;;AAEF,YAAA,IAAI,YAAgC;AACpC,YAAA,IAAI,gBAA6C;AAEjD,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,YAAY,GAAG,MAAM;YACvB;AAAO,iBAAA,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;AAE/C,gBAAA,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC/E,oBAAA,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK;oBAClC,gBAAgB,GAAG,MAAyB;gBAC9C;qBAAO,IAAI,MAAM,CAAC,EAAE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE;AACrD,oBAAA,YAAY,GAAG,MAAM,CAAC,EAAE;oBACxB,gBAAgB,GAAG,MAAyB;gBAC9C;YACF;YAEA,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,MAAM,CAAC;AACtD,gBAAA,OAAO,SAAS;YAClB;;YAGA,MAAM,QAAQ,GAAuB,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;YAEjF,IAAI,CAAC,QAAQ,EAAE;AACb,gBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,YAAY,CAAA,CAAE,CAAC;YAC/D;;AAGA,YAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;YAC9B,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,MAAM,IAAI,KAAK,CAAC,uCAAuC,YAAY,CAAA,CAAE,CAAC;YACxE;;YAGA,MAAM,IAAI,GAAG,MAAM,YAAY,IAAI,GAAG,MAAM,GAAG,IAAI,IAAI,CAAC,CAAC,MAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;;YAG1G,IAAI,gBAAgB,EAAE;gBACpB,OAAO;AACL,oBAAA,GAAG,gBAAgB;AACnB,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,MAAM,EAAE;AACN,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,KAAK,EAAE,IAAI;AACZ,qBAAA;iBACF;YACH;;YAGA,OAAO;gBACL,EAAE,EAAE,QAAQ,CAAC,MAAM;AACnB,gBAAA,IAAI,EAAE,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,SAAS;gBAC5C,IAAI,EAAE,QAAQ,CAAC,IAAI;AACnB,gBAAA,MAAM,EAAE,WAAW;AACnB,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,KAAK,EAAE,IAAI;AACZ,iBAAA;aACF;QACH;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACtD,YAAA,MAAM,KAAK;QACb;IACF;;;AAMA;;AAEG;IACK,MAAM,yBAAyB,CACrC,MAA8C,EAAA;QAE9C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,IAAK;AACf,gBAAA,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAChF,aAAA;AACF,SAAA,CAAC;AACD,QAAA,MAAoG,CAAC,SAAS;AAC7G,YAAA,WAAW,CAAC,KAAK,IAAI,EAAE;QACzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE;AACxC,YAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;QAC7C;IACF;AAEA;;;AAGG;IACH,MAAM,OAAO,CAAC,KAAuB,EAAA;QAInC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC;AACtE,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACzC,QAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,MAAM,kBAAkB,CACtB,OAAe,EACf,KAAa,EAAA;AAKb,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC;AACtF,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACpD,OAAO,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE;IACnC;AAEA;;AAEG;IACH,MAAM,uBAAuB,CAAC,KAAe,EAAA;AAC3C,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE;AACjC,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,MAAM,KAAK,GAAI,GAAiC,EAAE,KAAK,IAAI,EAAE;AAC7D,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;QAC1B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3D;AAEA;;;;AAIG;AACH,IAAA,MAAM,SAAS,CACb,KAAuB,EACvB,QAAgB,EAAA;QAKhB,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC;QAC1C;;QAGA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;AACxD,QAAA,MAAM,gBAAgB,GACpB,QAAQ,IAAI,OAAO,QAAQ,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,CAAC;cAChE,QAAQ,CAAC;cACT,QAAQ;QAEd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC;QAC5D,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC;QACrC;AAEA,QAAA,MAAM,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;AAEhF,QAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IACzB;AAEA;;AAEG;IACH,MAAM,YAAY,CAAC,IAA0C,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;QAC5C,MAAM,MAAM,GAAG,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,QAAQ;QACtD,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAS;AAEnD,QAAA,MAAM,cAAc,GAAuD;AACzE,YAAA,GAAG,IAAI;YACP,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,aAAa,EAAE,CAAC;YAChB,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;YACnC,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AACnC,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;SACd;QAER,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,cAAqB,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;QAClD;AACA,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC;IAC9C;AAEA;;AAEG;AACH,IAAA,MAAM,YAAY,CAAC,QAAgB,EAAE,IAAqB,EAAA;AACxD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;QAC5C,MAAM,MAAM,GAAG,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,QAAQ;QACtD,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAS;AACnD,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,GAAG,IAAI;YACP,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;SACpC;AACR,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;IACrD;AAEA;;AAEG;IACH,MAAM,YAAY,CAAC,QAAgB,EAAA;QACjC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,IAAK;AACf,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACrF,aAAA;AACF,SAAA,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE;YACvC,IAAI,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD;QACA,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;IACxC;AAEA;;AAEG;AACH,IAAA,MAAM,iBAAiB,GAAA;;;AAGrB,QAAA,OAAO,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI;IAChC;;;AAMA;;AAEG;IACH,MAAM,UAAU,CAAC,IAAmB,EAAA;QAClC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAW,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;QACpD;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC;AAEA;;AAEG;AACH,IAAA,MAAM,UAAU,CAAC,MAAc,EAAE,IAAmB,EAAA;AAClD,QAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAChE,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;IACxC;AAEA;;AAEG;IACH,MAAM,UAAU,CAAC,MAAc,EAAA;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAChD,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,MAAM,EAAE;AACN,gBAAA,QAAQ,EAAE,IAAK;AACf,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACrF,aAAA;AACF,SAAA,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,IAAI,EAAE,EAAE;YACvC,IAAI,CAAC,CAAC,EAAE;gBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD;QACA,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;IACxC;AAEA;;AAEG;IACH,MAAM,QAAQ,CAAC,IAA6B,EAAA;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC;cACvD,IAAI,CAAC;AACP,cAAE,IAAI,CAAC,EAAE;QACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC;;IAExD;AAEA;;;AAGG;IACH,MAAM,YAAY,CAAC,IAA6B,EAAA;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC;AACzD,cAAE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;cACzG,IAAI;QACR,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,IAAI,CAAC;YAC1D;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,UAAU,CAAC;YACnE;QACF;AAEA,QAAA,MAAM,IAAI,GAAoB;YAC5B,GAAG,UAAU,CAAC,MAAM;YACpB,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI;SAChD;;;;;;;;;;;;;;AAgBD,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,IAAI,CAAC;YACjE;QACF;AAEA,QAAA,MAAM,eAAe,GAAG,CAAC,IAAU,EAAE,QAAgB,KAAI;YACvD,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,YAAA,IAAI,CAAC,IAAI,GAAG,GAAG;AACf,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AAC/B,YAAA,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1B,QAAA,CAAC;AAED,QAAA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI;AACtB,YAAA,KAAK,MAAM;gBACT,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,IAAI,EAAE;AACrC,oBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC;gBAChF;qBAAO;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,IAAI,CAAC;gBACtE;gBACA;AACF,YAAA,KAAK,QAAQ;gBACX,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AACzC,oBAAA,IAAI;AACF,wBAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AAClE,wBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE;4BAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACxC,4BAAA,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG;AACxB,4BAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,UAAU;AAC3E,4BAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;AACtB,4BAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;4BAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,4BAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;wBACjC;6BAAO,IAAI,QAAQ,IAAK,QAAgB,CAAC,MAAM,YAAY,IAAI,EAAE;AAC/D,4BAAA,eAAe,CAAE,QAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,UAAU,CAAC;wBACxG;6BAAO;AACL,4BAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,QAAQ,CAAC;wBAC9E;oBACF;oBAAE,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC;oBAC9E;gBACF;qBAAO;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,IAAI,CAAC;gBAC7E;gBACA;AACF,YAAA,KAAK,KAAK;gBACR,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;oBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;oBACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;AAC7B,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU;AAC1D,oBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ;AACtB,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;oBAC/B,IAAI,CAAC,KAAK,EAAE;AACZ,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBACjC;qBAAO;AACL,oBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,IAAI,CAAC;gBAC3E;gBACA;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,IAAI,CAAC;gBACxE;AACF,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,MAAM;AACX,YAAA;AACE,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAA,wCAAA,EAA2C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA,CAAE,EAAE,IAAI,CAAC;gBAClF;;;AAIJ,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAM,uCAAuC,EAAE;AACtE,oBAAA,IAAI,EAAE,SAAS;oBACf,IAAI;AACJ,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,cAAc,EAAE,EAAE;AACnB,iBAAA,CAAC;YACJ;AAAE,YAAA,MAAM;;YAER;QACF;IACF;;;AAMA;;AAEG;IACH,MAAM,WAAW,CAAC,KAAgC,EAAA;AAChD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtD,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACpC;AAAO,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBACjC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC;iBAAO;gBACL,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC;QACF;IACF;AAEA;;AAEG;IACH,MAAM,cAAc,CAClB,QAAgB,EAChB,UAA6B,EAC7B,QAAgB,EAChB,OAAmC,EAAA;AAEnC,QAAA,IAAI,IAAI,GAAG,OAAO,EAAE,YAAY;QAChC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AAC/B,YAAA,IAAI,UAAU,KAAK,MAAM,EAAE;gBACzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC;gBACnD,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI,UAAU;YAC9C;iBAAO;gBACL,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;AACpD,gBAAA,MAAM,QAAQ,GAAG,MAAM,EAAE,KAAK;gBAC9B,IAAI;AACF,oBAAA,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK;0BAC7B,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ;0BAC3C,QAAQ;YAChB;QACF;AACA,QAAA,MAAM,OAAO,GAA4B;YACvC,QAAQ;YACR,IAAI;SACL;AACD,QAAA,IAAI,UAAU,KAAK,MAAM,EAAE;AACzB,YAAA,OAAO,CAAC,kBAAkB,CAAC,GAAG,QAAQ;QACxC;aAAO;AACL,YAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,QAAQ;QACtC;QACA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAc,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;AACzD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IACzC;AAEA;;AAEG;IACH,MAAM,cAAc,CAAC,UAAkB,EAAA;QACrC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;IAC5C;AAEA;;AAEG;AACH,IAAA,MAAM,wBAAwB,CAC5B,IAA6B,EAC7B,KAAuB,EAAA;QAEvB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,0EAAwC,CAAC,EAAE,+BAA+B;QACrG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;YAC/C,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,yDAAyD,CAAC;AACrG,YAAA,IAAI,EAAE;AACJ,gBAAA,aAAa,EAAE,QAAQ;AACvB,gBAAA,UAAU,EAAE,QAAQ;gBACpB,KAAK;AACN,aAAA;AACF,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,IAAiC,EAAE;AACjG,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,EAAE,EAAE;AAAE,YAAA,OAAO,KAAK;AAC7B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ;AAC3D,QAAA,MAAM,QAAQ,GACZ,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK;cAC7C,IAAI,CAAC;cACL,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK;kBAC/C,IAAI,CAAC;AACP,kBAAE,IAAI,CAAC,EAAE;AACf,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;AAC1D,QAAA,OAAO,IAAI;IACb;AAEA;;AAEG;IACH,MAAM,IAAI,CAAC,IAA6B,EAAA;QACtC,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;QAC7D;;QAGA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;AAE9C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;;AAExB,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,YAAY,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAA,aAAA,EAAgB,IAAI,CAAC,EAAE,CAAA,UAAA,CAAY,CAAC;YACtD;;;YAIA,MAAM,EAAE,EAAE,EAAE,GAAG,iBAAiB,EAAE,GAAG,YAAY;;AAGjD,YAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;YAClF,IAAI,CAAC,YAAY,EAAE;AACjB,gBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;YACpD;AAEA,YAAA,MAAM,QAAQ,GAAkB;AAC9B,gBAAA,GAAG,iBAAiB;AACpB,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,QAAQ,EAAE,YAAY;aACvB;;AAGD,YAAA,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QACxC;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;;AAEjC,YAAA,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,CAAC,cAAc,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,CAAC,EAAE,CAAA,UAAA,CAAY,CAAC;YACxD;;AAGA,YAAA,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,GAAG,cAAc;AACjE,YAAA,MAAM,UAAU,GAAyC;AACvD,gBAAA,GAAI,UAAiF;AACrF,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,WAAW,EAAE,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS;aACrF;;AAGD,YAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;QAC5C;aAAO;YACL,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,IAAI,CAAC,IAAI,CAAA,CAAE,CAAC;QACxD;IACF;AAEA;;AAEG;IACH,MAAM,MAAM,CAAC,OAKZ,EAAA;QACC,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,0EAAwC,CAAC,EAAE,+BAA+B;QACrG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAA,KAAK,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,UAAU,IAAI,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA,CAAE;AACnE,YAAA,IAAI,EAAE;gBACJ,aAAa,EAAE,OAAO,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ;AACvD,gBAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM;gBACxC,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,aAAA;AACF,SAAA,CAAC;QAEF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE;AAC1E,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC;YACzC,IAAI,cAAc,EAAE;gBAClB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClC,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC;gBAC3E;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC;gBACzE;AACA,gBAAA,OAAO,IAAI;YACb;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;QACF;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;AAEA;;AAEG;IACH,MAAM,MAAM,CAAC,OAKZ,EAAA;QACC,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,0EAAwC,CAAC,EAAE,+BAA+B;QACrG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAA,KAAK,EAAE,CAAA,OAAA,EAAU,OAAO,CAAC,UAAU,IAAI,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA,CAAE;AACnE,YAAA,IAAI,EAAE;gBACJ,aAAa,EAAE,OAAO,CAAC,QAAQ,GAAG,UAAU,GAAG,QAAQ;AACvD,gBAAA,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM;gBACxC,KAAK,EAAE,OAAO,CAAC,KAAK;AACrB,aAAA;AACF,SAAA,CAAC;QAEF,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,IAAI,EAAE;AAC1E,QAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,YAAA,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC;YACzC,IAAI,cAAc,EAAE;gBAClB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;oBAClC,MAAM,IAAI,CAAC,YAAY,CAAC;AACtB,wBAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;wBACxB,QAAQ,EAAE,cAAc,CAAC,EAAE;AAC3B,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;AACvB,wBAAA,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM;AACxC,qBAAA,CAAC;gBACJ;qBAAO;;AAEL,oBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnE,IAAI,CAAC,YAAY,EAAE;wBACjB,MAAM,IAAI,KAAK,CAAC,CAAA,aAAA,EAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA,UAAA,CAAY,CAAC;oBAC9D;;AAGA,oBAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC5F,IAAI,CAAC,YAAY,EAAE;AACjB,wBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;oBACpD;oBAEA,MAAM,IAAI,CAAC,UAAU,CAAC;AACpB,wBAAA,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;AACxB,wBAAA,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;wBACvB,QAAQ,EAAE,cAAc,CAAC,EAAE;AAC3B,wBAAA,QAAQ,EAAE,YAAY;wBACtB,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3C,wBAAA,QAAQ,EAAE,OAAO;wBACjB,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,+BAA+B,EAAE;AAChE,qBAAA,CAAC;gBACJ;AACA,gBAAA,OAAO,IAAI;YACb;iBAAO;AACL,gBAAA,OAAO,KAAK;YACd;QACF;aAAO;AACL,YAAA,OAAO,KAAK;QACd;IACF;;;AAMA;;;AAGG;AACH,IAAA,MAAM,aAAa,CACjB,UAAkB,EAClB,KAAuB,EACvB,OAA+B,EAAA;QAE/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE;cAClC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;cAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAE7B,QAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;AAE3F,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACvE;AAEA;;;AAGG;AACH,IAAA,MAAM,WAAW,CACf,UAAkB,EAClB,KAAuB,EACvB,OAA+B,EAAA;QAE/B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE;cAClC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;cAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAE7B,QAAA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;AAEvF,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtD;AAEA;;;AAGG;AACH,IAAA,MAAM,WAAW,CACf,UAAkB,EAClB,KAAuB,EACvB,OAIC,EAAA;QAED,MAAM,aAAa,GAAG,UAAU,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AACnD,QAAA,MAAM,kBAAkB,GAAG,OAAO,EAAE,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;AACtG,QAAA,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAEhG,IAAI,OAAO,GAA8B,EAAE;QAC3C,IAAI,KAAK,GAA8B,EAAE;AAEzC,QAAA,IAAI,kBAAkB,IAAI,gBAAgB,EAAE;YAC1C,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE;kBAClC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ;kBAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7B,MAAM,UAAU,GAAG,OAAO,EAAE,QAAQ,IAAI,QAAQ,CAAC,EAAE;AACnD,YAAA,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,UAAU,EAAE,UAAW,EAAE;AACxF,gBAAA,IAAI,kBAAkB,GAAG,EAAE,eAAe,EAAE,OAAQ,CAAC,eAAgB,EAAE,GAAG,EAAE,CAAC;AAC7E,gBAAA,IAAI,gBAAgB,GAAG,EAAE,eAAe,EAAE,OAAQ,CAAC,eAAgB,EAAE,GAAG,EAAE,CAAC;AAC5E,aAAA,CAAC;AACF,YAAA,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACnD;aAAO,IAAI,aAAa,EAAE;YACxB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC;gBAC9C,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC;AAC7C,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IAC/B;AAEA;;AAEG;IACH,MAAM,uBAAuB,CAAC,eAA0B,EAAA;QACtD,OAAO,IAAI,CAAC,yBAAyB,CAAC,4BAA4B,CAAC,eAAe,CAAC;IACrF;;;AAMA;;AAEG;AACH,IAAA,MAAM,aAAa,GAAA;;AAEjB,QAAA,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC;IACjF;AAEA;;AAEG;IACH,MAAM,WAAW,CAAC,OAAyB,EAAA;;QAEzC,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;IAC/E;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,GAAA;AACf,QAAA,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE;;;AAMA;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,QAAgB,EAAE,SAAiB,EAAA;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE;AACjE,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC;AACF,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,sBAAsB,CAAC,IAA6B,EAAA;AACxD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE;AACvE,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;AAC9B,SAAA,CAAC;AACF,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,gBAAgB,CAAC,IAA6B,EAAA;QAClD,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;IAChE;AAEA;;;AAGG;IACH,MAAM,kBAAkB,CAAC,IAA6B,EAAA;AACpD,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,4BAA4B,EAAE;AAC9D,YAAA,OAAO,EAAE;gBACP,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,gBAAA,OAAO,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AAC1E,aAAA;AACF,SAAA,CAAC;IACJ;;AAIA;;AAEG;IACH,MAAM,eAAe,CAAC,IAA6B,EAAA;QACjD,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,0EAAkD,CAAC,EAAE,uBAAuB;QACvG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE;gBACJ,IAAI;AACL,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;;QAExB;IACF;AAEA;;AAEG;IACH,MAAM,wBAAwB,CAAC,IAA6B,EAAA;QAC1D,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,gFAA8D,CAAC;AACvF,aAAA,4BAA4B;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAA,KAAK,EAAE,iBAAiB;AACxB,YAAA,IAAI,EAAE;gBACJ,IAAI;AACL,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;;QAExB;IACF;AAEA;;AAEG;IACH,MAAM,cAAc,CAAC,IAA6B,EAAA;QAChD,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,yEAAgD,CAAC,EAAE,sBAAsB;QACpG,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,IAAI,EAAE;gBACJ,IAAI;AACL,aAAA;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE;;QAExB;IACF;AAEA;;AAEG;IACH,MAAM,cAAc,CAAC,IAA6B,EAAA;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE;YACvD,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AACrI,SAAA,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAY;QAC5D,OAAO,CAAC,UAAU;IACpB;AAEA;;AAEG;IACH,MAAM,gBAAgB,CAAC,IAA6B,EAAA;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAC3D,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,YAAA,OAAO,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AACrI,SAAA,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,CAAY;AACxD,QAAA,OAAO,QAAQ;IACjB;AAEA;;AAEG;IACH,MAAM,oBAAoB,CAAC,IAA6B,EAAA;;AAEtD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,MAAM,KAAK,GAAI,GAAW,EAAE,KAAK,IAAI,EAAE;AAEvC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAAU,CAAC,MAAM,KAAI;YAC1B;iBACG,QAAQ,CAAC,4CAA4C;AACrD,iBAAA,UAAU,CAAC;gBACV,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;AACnC,gBAAA,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,MAAM;AAC/B,gBAAA,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;AACvC,gBAAA,KAAK,EAAE,SAAS;aACjB;AACA,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;gBAChB;qBACG,YAAY,CAAC,QAAQ;AACrB,qBAAA,SAAS,CAAC,4BAA4B,EAAE,CAAC,KAAK,KAAI;AACjD,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AAClB,oBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACxD,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,mCAAmC,EAAE,CAAC,KAAK,KAAI;AACxD,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AACzB,oBAAA,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,6CAA6C,EAAE,CAAC,KAAK,KAAI;AAClE,oBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,KAAK,CAAC,aAAa,CAAC;AAClB,wBAAA,UAAU,EAAE,OAAO;AACnB,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,UAAU,EAAE;AACV,4BAAA,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,4BAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;AACzC,4BAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AACtC,yBAAA;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,2DAA2D,EAAE,CAAC,KAAK,KAAI;AAChF,oBAAA,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;oBAC3B,KAAK,CAAC,SAAS,CAAC;AACd,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,WAAW,EAAE,IAAI;AAClB,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,6BAA6B,EAAE,CAAC,KAAK,KAAI;AAClD,oBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,oBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpB,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACvF,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE;AACnC,oBAAA,OAAO,KAAK;gBACd;gBACA,MAAM,IAAI,GAAG,OAAc;gBAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE;gBAC5E,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,KACxC,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAO,KAAK,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CACnG;AACD,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE;AAC/B,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;oBAC9B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,aAAa,EAAE,aAAa;oBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC;AACF,gBAAA,OAAO,IAAI;AACb,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AAET,QAAA,OAAO,MAAM;IACf;AAEA;;;;AAIG;AACH,IAAA,MAAM,sBAAsB,CAC1B,QAAiB,EACjB,OAAiD,EAAA;AAEjD,QAAA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACzE,QAAA,IAAI,KAAK,GAAI,GAAW,EAAE,KAAK,IAAI,EAAE;AACrC,QAAA,MAAM,YAAY,GAAG,OAAO,EAAE,wBAAwB;AACtD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1D,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC;YACjC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAqB,KAAK,EAAE,EAAE,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/E;AAEA,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAAiC,CAAC,MAAM,KAAI;YACjD;iBACG,QAAQ,CAAC,4CAA4C;iBACrD,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;AAC/F,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;gBAChB;qBACG,YAAY,CAAC,QAAQ;AACrB,qBAAA,SAAS,CAAC,6BAA6B,EAAE,CAAC,KAAK,KAAI;AAClD,oBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,oBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACxD,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,mCAAmC,EAAE,CAAC,KAAK,KAAI;AACxD,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AACzB,oBAAA,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;AACxB,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,6CAA6C,EAAE,CAAC,KAAK,KAAI;AAClE,oBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,KAAK,CAAC,aAAa,CAAC;AAClB,wBAAA,UAAU,EAAE,OAAO;AACnB,wBAAA,SAAS,EAAE,MAAM;AACjB,wBAAA,UAAU,EAAE;AACV,4BAAA,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;AAC/B,4BAAA,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;AACzC,4BAAA,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;AACtC,yBAAA;AACF,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,2DAA2D,EAAE,CAAC,KAAK,KAAI;AAChF,oBAAA,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;oBAC3B,KAAK,CAAC,SAAS,CAAC;AACd,wBAAA,UAAU,EAAE,MAAM;AAClB,wBAAA,SAAS,EAAE,OAAO;AAClB,wBAAA,UAAU,EAAE,KAAK;AACjB,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,WAAW,EAAE,IAAI;AAClB,qBAAA,CAAC;AACJ,gBAAA,CAAC;AACA,qBAAA,SAAS,CAAC,6BAA6B,EAAE,CAAC,KAAK,KAAI;AAClD,oBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,oBAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;AACpB,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACvF,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE;AACnC,oBAAA,OAAO,IAAI;gBACb;gBACA,MAAM,IAAI,GAAG,OAAc;AAC3B,gBAAA,IAAI;AACF,oBAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;wBACrC,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,QAAQ;wBACR,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,wBAAA,IAAI,EAAE,CAAC;wBACP,OAAO,EAAE,IAAI,CAAC,OAAO;AACtB,qBAAA,CAAC;AACF,oBAAA,OAAO,MAAM;gBACf;gBAAE,OAAO,GAAG,EAAE;AACZ,oBAAA,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC;AAClE,oBAAA,MAAM,GAAG;gBACX;AACF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AAET,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,eAAe,CAAC,IAA6B,EAAA;AACjD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;AACvB,aAAA,MAAM;AACN,aAAA,MAAM,CAAsC,CAAC,MAAM,KAAI;YACtD;iBACG,QAAQ,CAAC,qCAAqC;iBAC9C,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC9B,iBAAA,OAAO,CAAC,CAAC,IAAI,KAAI;AAChB,gBAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,0CAA0C,EAAE,CAAC,KAAK,KAAI;AAC1F,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;oBAClB,KAAK,CAAC,OAAO,CAAC;AACZ,wBAAA,WAAW,EAAE,sDAAsD;AACnE,wBAAA,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AACpC,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;gBACtB,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACxD,YAAA,CAAC;AACA,iBAAA,QAAQ,CAAC,OAAO,SAAS,KAAI;AAC5B,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE;AACnC,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE;AACnC,oBAAA,OAAO,SAAS;gBAClB;gBACA,MAAM,QAAQ,GAAG,OAA4B;AAC7C,gBAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;AACnB,oBAAA,OAAO,SAAS;gBAClB;AACA,gBAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,gBAAA,IAAI;AACF,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC1B,wBAAA,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnE;oBACA,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC9C,oBAAA,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAChE;wBAAU;AACR,oBAAA,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC7B;AACF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;AAET,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,qBAAqB,CAAC,OAAkC,EAAA;QAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC;QAC9F,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC;QAC1F,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC;AACzF,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC;AACrC,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;QAE7C,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;AAErD,QAAA,IAAI,MAA0D;QAC9D,IAAI,YAAY,KAAK,UAAU,IAAI,QAAQ,CAAC,EAAE;YAC5C,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;gBACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC/B,oBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC;AAC3E,0BAAE,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACvC,0BAAE,IAAI,CAAC,IAAI,KAAK;AACd,8BAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;8BAC3B,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IACjC,CAAA,CAAE;AACJ,oBAAA,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,EAAE,WAAW;AACrB,aAAA,CAAC;QACJ;AAAO,aAAA,IAAI,UAAU,IAAI,QAAQ,EAAE;YACjC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;gBACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAC/B,oBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAC3H,CAAA,CAAE;AACJ,oBAAA,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;AACf,iBAAA,CAAC,CAAC;AACH,gBAAA,OAAO,EAAE,WAAW;AACrB,aAAA,CAAC;QACJ;aAAO,IAAI,YAAY,EAAE;YACvB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;AACpD,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAA,CAAE;AAChF,gBAAA,IAAI,EAAE,aAAa,CAAC,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa;AACnE,gBAAA,OAAO,EAAE,WAAW;AACrB,aAAA,CAAC;QACJ;aAAO,IAAI,UAAU,EAAE;YACrB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;AACpD,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAA,CAAE;AACtE,gBAAA,IAAI,EAAE,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW;AAC7D,gBAAA,OAAO,EAAE,WAAW;AACrB,aAAA,CAAC;QACJ;aAAO,IAAI,QAAQ,EAAE;YACnB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE;AACpD,gBAAA,MAAM,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AACxE,gBAAA,IAAI,EAAE,SAAS,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS;AACvD,gBAAA,OAAO,EAAE,WAAW;AACrB,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,OAAO,KAAK;QACd;QACA,OAAQ,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAa,IAAI,KAAK;IACzD;AAEA;;AAEG;IACH,MAAM,oBAAoB,CAAC,KAAuB,EAAA;QAChD,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,0EAAwC,CAAC,EAAE,+BAA+B;QACrG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;YAChD,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,gDAAgD,CAAC;AAC5F,YAAA,IAAI,EAAE;AACJ,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA;AACF,SAAA,CAAC;AACF,QAAA,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;YACvB,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC;AACA,QAAA,OAAO,EAAE;IACX;;AAGgB,IAAA,SAAA,IAAA,CAAA,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAU,CAAC;AAElG;;AAEG;AACH,IAAA,wBAAwB,CAAC,KAAgC,EAAA;AACvD,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,gBAAA,OAAO,KAAK;AACpD,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE;YACrD,OAAO,GAAG,IAAK,6BAA6B,CAAC,kBAAwC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrG,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,mBAAmB,CACvB,IAA6B,EAC7B,OAA4E,EAAA;AAE5E,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS;AACnD,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAS,CAAC;QAChE,MAAM,gBAAgB,GAAG;AACvB,cAAE;AACF,cAAE,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG;AAChB,eAAG,OAAO,EAAE,kBAAkB,IAAI,EAAE;eACjC,YAAY,EAAE,SAAS,IAAI,EAAE,CAAC;;QAGnC,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAI;YAClD,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE;YACrD,OAAO,GAAG,IAAK,6BAA6B,CAAC,kBAAwC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrG,QAAA,CAAC,CAAC;;QAGF,MAAM,aAAa,GAAsB,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACrE,YAAA,MAAM,QAAQ,GACX,GAAgE,CAAC,QAAQ;gBACzE,GAAoC,CAAC,MAAM;YAC9C,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,EAAE,EAAE,GAAG,CAAC,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE;gBAChC,IAAI,EAAE,GAAG,CAAC,IAAI;AACd,gBAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC;AACzB,gBAAA,MAAM,EAAE,UAAmB;gBAC3B,MAAM,EAAE,QAAQ,EAAE,MAAM;aACzB;AACH,QAAA,CAAC,CAAC;;QAGF,MAAM,UAAU,GAAG;eACd,OAAO,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;eACpE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;;AAGzB,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;AAC1B,aAAA,MAAM;AACN,aAAA,MAAM,CAAC,CAAC,MAAM,KAAI;YACjB;iBACG,QAAQ,CAAC,gBAAgB;iBACzB,OAAO,CAAC,IAAI;iBACZ,cAAc,CAAC,IAAI;AACnB,iBAAA,OAAO,CAAC,CAAC,MAAM,KAAI;gBAClB;qBACG,YAAY,CAAC,QAAQ;qBACrB,MAAM,CAAC,GAAG;AACV,qBAAA,YAAY,CAAC,SAAS,EAAE,CAAC,MAAsB,KAAI;AAClD,oBAAA,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC;AAC9D,wBAAA,SAAS,EAAE,IAAI;AACf,wBAAA,MAAM,EAAE,IAAI;AACZ,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,gBAAgB,EAAE,IAAI;AACtB,wBAAA,WAAW,EAAE,KAAK;AAClB,wBAAA,MAAM,EAAE,MAAM;AACf,qBAAA,CAAC;AACJ,gBAAA,CAAC,CAAC;AACN,YAAA,CAAC;AACA,iBAAA,UAAU,CAAC,CAAC,OAAO,KAAI;AACtB,gBAAA,OAAO,CAAC,MAAM,CAAC,8BAA8B,CAAC;AAChD,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AACA,aAAA,IAAI,EAAE;;QAGR,SAAsC,EAAE,KAAK,EAAE;IAClD;AAEA;;AAEG;AACH,IAAA,MAAM,cAAc,CAAC,IAA6B,EAAE,IAAY,EAAA;AAC9D,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,OAAO,IAAI;QACb;IACF;8GAtiDW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA7B,6BAA6B,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC;;AA4iDD;AAEA;AAEA;;;AAGG;MACU,kBAAkB,CAAA;;IAG7B,WAAA,CACU,MAAiC,EACjC,KAAuB,EAAA;QADvB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,KAAK,GAAL,KAAK;IACX;;;AAMJ;;AAEG;AACH,IAAA,MAAM,OAAO,GAAA;QAIX,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IACxC;AAEA;;AAEG;IACH,MAAM,SAAS,CAAC,QAAgB,EAAA;AAI9B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;IACpD;AAEA;;AAEG;IACH,MAAM,YAAY,CAChB,IAAuE,EAAA;QAEvE,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAA4C,CAAC;IAC/E;AAEA;;AAEG;AACH,IAAA,MAAM,YAAY,CAAC,QAAgB,EAAE,IAAqB,EAAA;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC;IACjD;AAEA;;AAEG;IACH,MAAM,YAAY,CAAC,QAAgB,EAAA;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC;IAC3C;AAEA;;AAEG;AACH,IAAA,MAAM,iBAAiB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;IACxC;AAEA;;AAEG;AACH,IAAA,MAAM,aAAa,CAAC,UAAkB,EAAE,OAA+B,EAAA;AACrE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IACnE;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,CAAC,UAAkB,EAAE,OAA+B,EAAA;AACnE,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IACjE;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,CACf,UAAkB,EAClB,OAIC,EAAA;AAED,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;IACjE;AAEA;;AAEG;IACH,MAAM,IAAI,CAAC,IAA6B,EAAA;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;AAGD;;ICz1DW;AAAZ,CAAA,UAAY,2BAA2B,EAAA;AACnC,IAAA,2BAAA,CAAA,UAAA,CAAA,GAAA,6DAAwE;AACxE,IAAA,2BAAA,CAAA,WAAA,CAAA,GAAA,8DAA0E;AAC1E,IAAA,2BAAA,CAAA,eAAA,CAAA,GAAA,kEAAkF;AACtF,CAAC,EAJW,2BAA2B,KAA3B,2BAA2B,GAAA,EAAA,CAAA,CAAA;;ACkBhC,MAAM,4BAA4B,GAAG,WAAW,CACrD,EAAE,UAAU,EAAE,MAAM,EAAE,EAEtB,SAAS,CAAC,OAAO;;AAEf,IAAA,QAAQ,EAAE,aAA4C;AACtD,IAAA,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,gBAAgB,CAAC,IAAI;;AAG5B,IAAA,WAAW,EAAE,EAA+B;AAC5C,IAAA,WAAW,EAAE,IAAsC;AACnD,IAAA,eAAe,EAAE,IAAqB;AACtC,IAAA,kBAAkB,EAAE,IAAqB;AACzC,IAAA,WAAW,EAAE,EAA6D;;AAG1E,IAAA,aAAa,EAAE,MAAkC;AACjD,IAAA,aAAa,EAAE,EAA+B;;AAG9C,IAAA,UAAU,EAAE,MAAuC;;AAGnD,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,aAAa,EAAE,KAAK;;AAGpB,IAAA,OAAO,EAAE,EAA+B;AACxC,IAAA,KAAK,EAAE,EAA+B;AACtC,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,cAAc,EAAE,CAAC;;AAGjB,IAAA,YAAY,EAAE,IAA+B;;AAG7C,IAAA,SAAS,EAAE,EAAmB;;AAE9B,IAAA,cAAc,EAAE,KAAe;;AAE/B,IAAA,WAAW,EAAE,KAAK;;AAElB,IAAA,wBAAwB,EAAE,IAAuB;CAClD,CAAC,CAAC,EAEH,YAAY,CAAC,CAAC,KAAK,MAAM;AACvB,IAAA,MAAM,EAAE,QAAQ,CAAC,MAAK;AACpB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC;AAC1B,IAAA,CAAC,CAAC;AAEF,IAAA,SAAS,EAAE,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,IAAI,EAAE,WAAW,KAAK,SAAS;AACxC,IAAA,CAAC,CAAC;IAEF,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;AAElD,IAAA,qBAAqB,EAAE,QAAQ,CAAC,OAAO;AACrC,QAAA,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;AACxB,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;AACrB,KAAA,CAAC,CAAC;;IAGH,eAAe,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;;AAGhD,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;QAC3B,IAAI,MAAM,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;AAC7D,QAAA,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM;AAAE,YAAA,OAAO,KAAK;QAC3C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACxE,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACxB,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AACxD,YAAA,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AAEF,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC;AACpE,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC;AACpE,IAAA,UAAU,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,MAAM,CAAC;AACvD,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;AAC7D,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC;AACpE,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,aAAa,CAAC;AAEpE,IAAA,eAAe,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/D,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAK;AAC3B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE;AAChC,QAAA,OAAO,IAAI,EAAE,QAAQ,IAAI,IAAI;AAC/B,IAAA,CAAC,CAAC;AAEF,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;AAC3D,IAAA,gBAAgB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAClE,IAAA,wBAAwB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1E,IAAA,aAAa,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,KAAK,UAAU,CAAC;AACnE,IAAA,YAAY,EAAE,QAAQ,CAAiC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAE9F,iBAAiB,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;CACvD,CAAC,CAAC,EAEH,WAAW,CACT,CACE,KAAK,EACL,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC,EACpD,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC,EAChD,eAAe,GAAG,MAAM,CAAC,kBAAkB,CAAC,EAC5C,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAC/C,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,MAChC;AACJ,IAAA,2BAA2B,CAAC,KAAsB,EAAA;QAChD,UAAU,CAAC,KAAK,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,CAAC,OAIhB,EAAA;;;QAGC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,gBAAgB,CAAC,IAAI;AACrD,QAAA,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM;QAChD,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAExC,QAAA,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE;AAC/C,QAAA,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC;;QAEhC,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,2BAA2B,CAAC,QAAQ,CAAC;QAC/E,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,2BAA2B,CAAC,SAAS,CAAC;QACjF,MAAM,aAAa,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,2BAA2B,CAAC,aAAa,CAAC;QACzF,UAAU,CAAC,KAAK,EAAE;YAChB,QAAQ,EAAE,QAAQ,IAAI,aAAa;YACnC,SAAS,EAAE,SAAS,IAAI,MAAM;YAC9B,aAAa,EAAE,aAAa,IAAI,KAAK;AACtC,SAAA,CAAC;IACJ,CAAC;AAED,IAAA,KAAK,EAAE,OAAO,QAAgB,KAAI;AAChC,QAAA,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAEjE,QAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAExD,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC;;AAGlE,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;AACnC,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE;AAC3C,YAAA,MAAM,mBAAmB,GAAG,aAAa,KAAK,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YAE5D,QAAQ,SAAS;AACf,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,KAAK,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7D;oBACD;AACF,gBAAA,KAAK,UAAU;oBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,KAAK,mBAAmB,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAClG;oBACD;AACF,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,KAAK,mBAAmB,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAChE;oBACD;AACF,gBAAA;AACE,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAC/C,CAAC,CAAC,EAAE,CAAC,KAAK,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC7D;oBACD;;YAGJ,UAAU,CAAC,KAAK,EAAE;gBAChB,WAAW,EAAE,IAAI,CAAC,MAAM;gBACxB,WAAW,EAAE,IAAI,CAAC,IAAI;gBAEtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAA6B,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;AACtG,gBAAA,KAAK,EACH,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAC1B,CAAC,IAA6B,KAAK,KAAK,CAAC,UAAU,EAAE,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CACxF,IAAI,EAAE;gBACT,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC7C,gBAAA,cAAc,EAAE,MAAM,YAAY,CAAC,iBAAiB,EAAE;AACtD,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,SAAS,EAAE,KAAK;AAChB,gBAAA,kBAAkB,EAAE,IAAI;AACzB,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;YACd,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;AACF,YAAA,MAAM,KAAK;QACb;IACF,CAAC;AAED,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;QACvC,IAAI,WAAW,EAAE;YACf,UAAU,CAAC,KAAK,EAAE;gBAChB,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;AAC/F,aAAA,CAAC;QACJ;QACA,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,kBAAkB,CAAC,QAAgB,EAAA;AACvC,QAAA,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE;IACpB,CAAC;AAED,IAAA,MAAM,aAAa,CACjB,KAAA,GAAmC,EAAE,EACrC,OAGC,EAAA;QAED,MAAM,EAAE,GAAG,SAAS;QACpB,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC;AACF,QAAA,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAExD,QAAA,MAAM,IAAI,GAA4B;AACpC,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,SAAS;AAChC,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI;AACnC,YAAA,IAAI,EAAE,CAAC;;AAEP,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,WAAW,EAAE,SAAS;SACvB;QACD,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACvD,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;YACnD,UAAU,EAAE,KAAK,CAAC,MAAM;AACxB,YAAA,cAAc,EAAE,MAAM,YAAY,CAAC,iBAAiB,EAAE;AACtD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,kBAAkB,EAAE,IAAI;AACzB,SAAA,CAAC;IACJ,CAAC;AAED,IAAA,WAAW,CAAC,IAA0C,EAAA;QACpD,UAAU,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAmC,EAAE,CAAC;AACpE,QAAA,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,QAAQ,EAAE,IAAI,CAAC;IACtF,CAAC;AACD,IAAA,UAAU,CAAC,IAA0C,EAAA;AACnD,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI;IAClC,CAAC;AAED,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AACvC,QAAA,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC;QACtF,IAAI,CAAC,OAAO,EAAE;IAChB,CAAC;AAED,IAAA,gBAAgB,CAAC,SAAiB,EAAA;QAChC,UAAU,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AAC/C,QAAA,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,aAAa,EAAE,SAAS,CAAC;QAC9F,IAAI,CAAC,OAAO,EAAE;IAChB,CAAC;AACD,IAAA,gBAAgB,CAAC,IAAuC,EAAA;QACtD,UAAU,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,IAAgC,EAAE,CAAC;IACxE,CAAC;AAED,IAAA,QAAQ,CAAC,KAAuB,EAAA;QAC9B,UAAU,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC5C,CAAC;;AAGD,IAAA,iBAAiB,CAAC,GAAW,EAAA;QAC3B,UAAU,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,GAAG,IAAI,KAAK,EAAE,CAAC;IACrD,CAAC;AAED,IAAA,eAAe,CAAC,QAAgB,EAAA;AAC9B,QAAA,OAAO,KAAK,CAAC,eAAe,EAAE,KAAK,QAAQ;IAC7C,CAAC;AAED,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;AACnC,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AAChE,QAAA,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC;AAC/D,QAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;QAE7D,OAAO;AACL,YAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,kBAAkB;AAC1C,YAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS;SAClC;IACH,CAAC;AAED;;;AAGG;AACH,IAAA,kBAAkB,CAAC,IAA6B,EAAA;AAC9C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;AAC9E,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;YACxB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,YAAA,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE;QACzD;QACA,OAAO;AACL,YAAA,IAAI,EAAE,uCAAuC;AAC7C,YAAA,IAAI,EAAE,QAAQ;YACd,UAAU;SACX;IACH,CAAC;AAGD,IAAA,WAAW,CAAC,IAA6B,EAAA;;QAevC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACL,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,OAAO,EAAE,EAAE;AACZ,qBAAA;AACF,iBAAA;aACF;QACH;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;AACnC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;AACjE,YAAA,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC;AAC/D,YAAA,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AAC7D,YAAA,MAAM,OAAO,GAKP;AACJ,gBAAA;AACE,oBAAA,KAAK,EAAE,aAAa;oBACpB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACvB,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA;gBACD,IAAI,IAAI,CAAC;AACP,sBAAE;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,aAAa;4BACpB,OAAO,EAAE,IAAI,CAAC,cAAc;AAC5B,4BAAA,MAAM,EAAE,MAAe;AACvB,4BAAA,IAAI,EAAE,2BAA2B;AAClC,yBAAA;AACF;sBACD,EAAE,CAAC;AACP,gBAAA;AACE,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;AACrC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;AACtC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;aACF;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtD,OAAO,CAAC,OAAO,CAAC;AACd,oBAAA,KAAK,EAAE,UAAU;oBACjB,OAAO,EAAE,IAAI,CAAC,gBAAgB,GAAG,qBAAqB,GAAG,mBAAmB;AAC5E,oBAAA,IAAI,EAAE,kCAAkC;AACzC,iBAAA,CAAC;YACJ;YACA,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,IAAI,EAAE,QAAQ,EAAE,IAAI,IAAI,kBAAkB;AAC1C,gBAAA,IAAI,EAAE,MAAM;gBACV,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK;AAC1D,sBAAE;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,SAAS;4BAChB,OAAO;AACR,yBAAA;AACD,wBAAA;AACE,4BAAA,KAAK,EAAE,UAAU;AACjB,4BAAA,OAAO,EAAE,EAAE;AACZ,yBAAA;AACF;AACH,sBAAE;AACE,wBAAA;AACE,4BAAA,KAAK,EAAE,SAAS;4BAChB,OAAO;AACR,yBAAA;AACF,qBAAA;aACR;QACH;;aAEK;AACH,YAAA,MAAM,aAAa,GAKb;AACJ,gBAAA;AACE,oBAAA,KAAK,EAAE,aAAa;oBACpB,OAAO,EAAE,IAAI,CAAC,WAAW;AACzB,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,OAAO;oBACd,OAAO,EAAE,IAAI,CAAC,aAAa;AAC3B,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,MAAM;AACb,oBAAA,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;AACvB,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,wBAAwB;AAC/B,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,YAAY;AACnB,oBAAA,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE;AACrC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;AACD,gBAAA;AACE,oBAAA,KAAK,EAAE,aAAa;AACpB,oBAAA,OAAO,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE;AACtC,oBAAA,MAAM,EAAE,UAAU;AAClB,oBAAA,IAAI,EAAE,2BAA2B;AAClC,iBAAA;aACF;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtD,aAAa,CAAC,OAAO,CAAC;AACpB,oBAAA,KAAK,EAAE,UAAU;AACjB,oBAAA,OAAO,EAAE,mBAAmB;AAC5B,oBAAA,IAAI,EAAE,kCAAkC;AACzC,iBAAA,CAAC;YACJ;YACA,OAAO;gBACL,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,gBAAA,IAAI,EAAE,uCAAuC;AAC7C,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,QAAQ,EAAE;AACR,oBAAA;AACE,wBAAA,KAAK,EAAE,SAAS;AAChB,wBAAA,OAAO,EAAE,aAAa;AACvB,qBAAA;AACF,iBAAA;aACF;QACH;IACF,CAAC;AAED,IAAA,SAAS,CAAC,KAAgC,EAAA;AACxC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE;AAC/B,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,EAAE;AAEvC,QAAA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC9B,IAAI,UAAU,GAAG,CAAC;YAElB,QAAQ,KAAK;AACX,gBAAA,KAAK,MAAM;oBACT,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;oBACzC;AACF,gBAAA,KAAK,UAAU;oBACb,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;oBACjE,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;oBACjE,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE;oBAC9C;AACF,gBAAA,KAAK,MAAM;AACT,oBAAA,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;oBAC1C;;AAGJ,YAAA,OAAO,SAAS,KAAK,KAAK,GAAG,UAAU,GAAG,CAAC,UAAU;AACvD,QAAA,CAAC,CAAC;IACJ,CAAC;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE;AACtB,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,EAAE;YACzC,IAAI,aAAa,EAAE;gBACjB,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC;QACF;aAAO;YACL,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;YAC9C,UAAU,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAC9C;IACF,CAAC;IAED,YAAY,GAAA;AACV,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,EAAE;AACvC,QAAA,MAAM,QAAQ,GAAG,WAAW,EAAE,QAAQ;AACtC,QAAA,IAAI,QAAQ,IAAI,WAAW,EAAE;YAC3B,UAAU,CAAC,KAAK,EAAE;gBAChB,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;AAC/F,aAAA,CAAC;YACF,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC;AACnD,YAAA,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QACnC;IACF,CAAC;AAED,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE;AACnC,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB;QACF;QACA,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7C,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACxE,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC7D,MAAM,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,QAAQ,CAAC;IACnD,CAAC;AAED,IAAA,MAAM,uBAAuB,GAAA;AAC3B,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,EAAE;QAClC,MAAM,KAAK,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAA6B,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;QACrG,MAAM,YAAY,GAAG,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACjE,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACzD;IACF,CAAC;;AAGD,IAAA,MAAM,WAAW,CAAC,QAAmC,KAAK,CAAC,aAAa,EAAE,EAAA;AACxE,QAAA,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE;YACrB,UAAU,CAAC,KAAK,EAAE;AAChB,gBAAA,KAAK,EAAE,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5G,aAAA,CAAC;YACF,IAAI,CAAC,WAAW,EAAE;QACpB;aAAO;YACL,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC;YAC9D,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,WAAW,EAAE;AAClB,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED,IAAA,YAAY,CAAC,IAA6B,EAAA;AACxC,QAAA,IAAI,KAAK,CAAC,aAAa,EAAE,KAAK,UAAU,EAAE;YACxC,UAAU,CAAC,KAAK,EAAE;gBAChB,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,IAAI;sBAC9C,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;sBACpD,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC;AACrC,aAAA,CAAC;QACJ;aAAO;YACL,UAAU,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C;IACF,CAAC;AAED,IAAA,cAAc,CAAC,IAA6B,EAAA;QAC1C,OAAO,KAAK,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IAClF,CAAC;IAED,SAAS,GAAA;QACP,UAAU,CAAC,KAAK,EAAE;AAChB,YAAA,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;AACtE,SAAA,CAAC;IACJ,CAAC;IAED,WAAW,GAAA;QACT,UAAU,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,eAAe,GAAA;QACb,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,gBAAgB,GAAA;QACd,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,iBAAiB,GAAA;AACf,QAAA,UAAU,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC1D,CAAC;;IAID,MAAM,qBAAqB,CAAC,EAAC,YAAY,GAAG,IAAI,KAA8B,EAAE,EAAA;QAC9E,MAAM,KAAK,GACT,KAAK,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAA6B,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;QACxG,MAAM,YAAY,GAAG,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACjE,QAAA,MAAM,eAAe,GACnB,YAAY,CAAC,MAAM,GAAG;AACpB,cAAE;AACE,gBAAA;AACE,oBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,2CAA2C,CAAC;AACzF,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,OAAO,EAAE;AACP,4BAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE;AACpC,yBAAA;AACF,qBAAA;AACF,iBAAA;AACF;cACD,EAAE;QACR,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,EAAE,aAAa,IAAI,EAAE;AAC9D,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,wBAAwB,EAAE;QACrD,IAAI,WAAW,GACb,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,GAAG;cAC1C,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;cAClE,WAAW;QACjB,IACE,YAAY,IAAI,IAAI;YACpB,YAAY,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,WAAW,CAAC,MAAM,KAAK,CAAC,EACxB;YACA,WAAW,GAAG,MAAM,YAAY,CAAC,uBAAuB,CAAC,YAAY,CAAC;QACxE;QAEA,OAAO;AACL,YAAA,IAAI,YAAY,GAAG,CAAG;AACpB,oBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,4CAA4C,CAAC;AAC1F,oBAAA,IAAI,EAAE,yBAAyB;AAC/B,oBAAA,KAAK,EAAE,IAAI;AACX,oBAAA,OAAO,EAAE;AACP,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,OAAO,EAAE;AACP,4BAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE;AACpC,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC,GAAG,EAAE,CAAC;YACR,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;gBAC5B,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE;AACP,oBAAA,IAAI,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,CAAA,CAAE;AAC3B,oBAAA,OAAO,EAAE;AACP,wBAAA,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE;AACnC,wBAAA,YAAY,EAAE,IAAI;AACnB,qBAAA;AACF,iBAAA;AACF,aAAA,CAAC,CAAC;AACH,YAAA,GAAG,eAAe;SACI;IAC1B,CAAC;AAED,IAAA,MAAM,wBAAwB,GAAA;QAC5B,OAAO;AACL,YAAA;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,KAAK,EAAE,MAAM,gBAAgB,CAAC,cAAc,CAAC,sCAAsC,CAAC;AACpF,gBAAA,IAAI,EAAE,0BAA0B;;AAEjC,aAAA;;;;;;;SAOF;IACH,CAAC;;;AAMD,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,CAAC,IAAI,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;IAC9F,CAAC;;;AAMD;;AAEG;IACH,MAAM,uBAAuB,CAAC,IAA6B,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,OAAO,GAAW,KAAK,MAAM,gBAAgB,CAAC,cAAc,CAAC,wBAAwB,GAAG,CAAA,CAAE,CAAC;AACzG,QAAA,MAAM,QAAQ,GAAG,YAAY,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAGtD,QAAA,MAAM,SAAS,GAAiB;AAC9B,YAAA;AACE,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAC;gBACvC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI;AACtC,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;AACD,YAAA;AACE,gBAAA,IAAI,EAAE,UAAU;AAChB,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC;AAC3C,gBAAA,IAAI,EAAE,sBAAsB;AAC5B,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;YACD,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC;AAC3C,kBAAE;AACE,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,+BAA+B,CAAC;AAClD,wBAAA,IAAI,EAAE,kCAAkC;AACxC,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA;AACF;kBACD,EAAE,CAAC;AACP,YAAA;AACE,gBAAA,IAAI,EAAE,OAAO;AACb,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAC9C,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,KAAK,EAAE;AACL,oBAAA;AACE,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAC9C,wBAAA,IAAI,EAAE,mBAAmB;AACzB,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,kBAAkB;AACxB,wBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAC9C,wBAAA,IAAI,EAAE,sBAAsB;AAC5B,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA;AACD,oBAAA;AACE,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC;AAC7C,wBAAA,IAAI,EAAE,kBAAkB;AACxB,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA;AACF,iBAAA;AACD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;SACF;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BD,QAAA,MAAM,YAAY,GAAiB;AACjC,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC;AAC7C,gBAAA,IAAI,EAAE,8BAA8B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF;;;;;;;;;;;;QAcD,YAAY,CAAC,IAAI,CAAC;AAChB,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,YAAA,IAAI,EAAE,oBAAoB;AAC1B,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;;QAEF,YAAY,CAAC,IAAI,CAAC;AAChB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAC;AACvC,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CAAC;;QAGF,SAAS,CAAC,IAAI,CAAC;AACb,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAC9C,YAAA,IAAI,EAAE,yBAAyB;AAC/B,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;;QAGF,SAAS,CAAC,IAAI,CACZ;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,yBAAyB,CAAC;AAC5C,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,IAAI,EAAE,IAAI;SACX,EACD;AACE,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,uBAAuB,CAAC;AAC1C,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,IAAI,EAAE,IAAI;SACX,EACD;AACE,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,uBAAuB,CAAC;AAC1C,YAAA,IAAI,EAAE,oCAAoC;AAC1C,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,IAAI;SACX,EACD;AACE,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,IAAI,EAAE,IAAI;AACX,SAAA,CACF;AAED,QAAA,OAAO,SAAS;IAClB,CAAC;AAED;;AAEG;IACH,MAAM,yBAAyB,CAAC,IAA6B,EAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,OAAO,GAAW,KAAK,MAAM,gBAAgB,CAAC,cAAc,CAAC,wBAAwB,GAAG,CAAA,CAAE,CAAC;;QAEzG,MAAM,YAAY,GAAG,KAAK;AAE1B,QAAA,MAAM,KAAK,GAAiB;AAC1B,YAAA;AACE,gBAAA,IAAI,EAAE,aAAa;AACnB,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAC;AACvC,gBAAA,IAAI,EAAE,yBAAyB;AAC/B,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF;;QAGD,IAAI,CAAC,YAAY,IAAI,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE;YAChD,KAAK,CAAC,IAAI,CAAC;AACT,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM;AACrD,oBAAA,IAAI,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,IAAI,CAAA,CAAE;oBAC3B,IAAI,EAAE,IAAI,CAAC,KAAK;AAChB,oBAAA,IAAI,EAAE,2BAA2B;AACjC,oBAAA,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AACjC,oBAAA,IAAI,EAAE;wBACJ,IAAI;AACJ,wBAAA,YAAY,EAAE,IAAI;AACnB,qBAAA;AACF,iBAAA,CAAC,CAAC;AACJ,aAAA,CAAC;QACJ;;AAGA,QAAA,MAAM,YAAY,GAAiB;AACjC,YAAA;AACE,gBAAA,IAAI,EAAE,YAAY;AAClB,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,0BAA0B,CAAC;AAC7C,gBAAA,IAAI,EAAE,8BAA8B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA;SACF;;QAGD,IAAI,CAAC,YAAY,EAAE;YACjB,YAAY,CAAC,OAAO,CAAC;AACnB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;QACJ;;QAGA,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,gBAAA,IAAI,EAAE,oBAAoB;AAC1B,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;QACJ;aAAO;YACL,YAAY,CAAC,IAAI,CAAC;AAChB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,oBAAoB,CAAC;AACvC,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CAAC;QACJ;QAEA,KAAK,CAAC,IAAI,CAAC;AACT,YAAA,IAAI,EAAE,aAAa;AACnB,YAAA,IAAI,EAAE,MAAM,KAAK,CAAC,2BAA2B,CAAC;AAC9C,YAAA,IAAI,EAAE,yBAAyB;AAC/B,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;;QAGF,IAAI,CAAC,YAAY,EAAE;YACjB,KAAK,CAAC,IAAI,CACR;AACE,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,yBAAyB,CAAC;AAC5C,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,IAAI;aACX,EACD;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,uBAAuB,CAAC;AAC1C,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,IAAI,EAAE,IAAI;aACX,EACD;AACE,gBAAA,IAAI,EAAE,SAAS;AACf,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,uBAAuB,CAAC;AAC1C,gBAAA,IAAI,EAAE,oCAAoC;AAC1C,gBAAA,IAAI,EAAE,IAAI;aACX,EACD,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,IAAI,CAAC;AAC3C,kBAAE;AACE,oBAAA;AACE,wBAAA,IAAI,EAAE,iBAAiB;AACvB,wBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,+BAA+B,CAAC;AAClD,wBAAA,IAAI,EAAE,kCAAkC;AACxC,wBAAA,IAAI,EAAE,IAAI;AACX,qBAAA;AACF;kBACD,EAAE,CAAC,EACP;AACE,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,IAAI,EAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC;AACzC,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,IAAI,EAAE,IAAI;AACX,aAAA,CACF;QACH;AAEA,QAAA,OAAO,KAAK;IACd,CAAC;AAED;;AAEG;IACH,MAAM,uBAAuB,CAAC,IAA6B,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,OAAO,MAAM,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC;QACjD;aAAO;AACL,YAAA,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC;QACnD;IACF,CAAC;;;AAMD;;AAEG;IACH,MAAM,QAAQ,CAAC,IAA6B,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACzB;aAAO;AACL,YAAA,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC;QACnC;IACF,CAAC;AAED;;AAEG;AACH,IAAA,MAAM,mBAAmB,CAAC,IAAY,EAAE,IAAS,EAAA;QAC/C,MAAM,IAAI,GAAG,IAA+B;QAC5C,QAAQ,IAAI;AACV,YAAA,KAAK,aAAa;AAChB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B;AACF,YAAA,KAAK,WAAW;AACd,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACzB;AACF,YAAA,KAAK,cAAc;AACjB,gBAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AACzB,oBAAA,MAAM,IAAI,CAAC,uBAAuB,EAAE;gBACtC;qBAAO;AACL,oBAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;gBAC9B;gBACA;AACF,YAAA,KAAK,UAAU;AACb,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBACvB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;gBAC7B;AACF,YAAA,KAAK,OAAO;;gBAEV;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACvB;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACvB;AACF,YAAA,KAAK,iBAAiB;AACpB,gBAAA,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;gBAC/B;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC3B;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBACnC;AACF,YAAA,KAAK,QAAQ;gBACX,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC9B;AACF,YAAA,KAAK,SAAS;AACZ,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;gBACpB;AACF,YAAA,KAAK,oBAAoB;AACvB,gBAAA,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACzC,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;gBACpB;AACF,YAAA,KAAK,sBAAsB;AACzB,gBAAA,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC;gBAC3C;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACzB;AACF;;;;;;;;;;AAUE;AACF,YAAA,KAAK,MAAM;AACT,gBAAA,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrB;AACF,YAAA,KAAK,QAAQ;AACX,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACvB;AACF,YAAA;AACE,gBAAA,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE;oBAC/B,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAC3F,oBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;gBACtB;gBACA;;IAEN,CAAC;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,IAA6B,EAAA;AACxC,QAAA,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;IACjC,CAAC;AAED;;AAEG;IACH,MAAM,WAAW,CAAC,IAA6B,EAAA;AAC7C,QAAA,MAAM,YAAY,CAAC,mBAAmB,CAAC,IAAI,EAAE;AAC3C,YAAA,kBAAkB,EAAE,KAAK,CAAC,KAAK,EAAE;YACjC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAA0B,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AACjF,SAAA,CAAC;IACJ,CAAC;AAED;;AAEG;IACH,MAAM,kBAAkB,CAAC,IAA6B,EAAA;AACpD,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ,EAAE;YACzB,IAAI,MAAM,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE;AACjD,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;aAAO;YACL,IAAI,MAAM,YAAY,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE;AACnD,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED;;AAEG;IACH,MAAM,YAAY,CAAC,IAA8B,EAAA;AAC/C,QAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE;QACpD,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,wBAAwB,EAAE;AACrD,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC;YAEzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAAE;AACjE,gBAAA,wBAAwB,EACtB,YAAY,IAAI,IAAI,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,SAAS;AAC7E,aAAA,CAAC;YACF,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED;;AAEG;IACH,MAAM,UAAU,CAAC,IAA8B,EAAA;QAC7C,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC;YACvD,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS,EAAE;AACjC,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE;oBAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;wBACtC,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE;AACzB,4BAAA,OAAO,MAAM;wBACf;AACA,wBAAA,OAAO,IAAI;AACb,oBAAA,CAAC,CAAC;AACF,oBAAA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;gBAClC;AACA,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;AACA,YAAA,OAAO,MAAM;QACf;QACA;IACF,CAAC;AAED;;AAEG;IACH,MAAM,QAAQ,CAAC,IAA8B,EAAA;QAC3C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI;AACF,gBAAA,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;YAC7C;QACF;IACF,CAAC;AAED;;AAEG;IACH,MAAM,QAAQ,CAAC,IAA6B,EAAA;AAC1C,QAAA,IAAI;YACF,OAAO,WAAW,CAAC,KAAK,CAAC;gBACvB,KAAK,EAAE,IAAI,CAAC,EAAE;AACd,gBAAA,OAAO,EAAE,CAAA,EAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;AACrI,aAAA,CAAC;QACJ;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AACnD,YAAA,OAAO,KAAK;QACd;IACF,CAAC;AAED;;AAEG;IACH,MAAM,IAAI,CAAC,IAA6B,EAAA;QACtC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC;QACtD,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,OAAO,EAAE;QACtB;IACF,CAAC;AAED;;AAEG;IACH,MAAM,MAAM,CAAC,IAA6B,EAAA;QACxC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC1D,IAAI,QAAQ,EAAE;AACZ,YAAA,MAAM,IAAI,CAAC,OAAO,EAAE;QACtB;IACF,CAAC;AAED;;AAEG;IACH,MAAM,MAAM,CAAC,IAA8B,EAAA;QACzC,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACpG,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED;;AAEG;IACH,MAAM,MAAM,CAAC,IAA8B,EAAA;QACzC,IAAI,IAAI,EAAE;YACR,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YACpG,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED;;AAEG;IACH,MAAM,cAAc,CAAC,IAA8B,EAAA;QACjD,IAAI,IAAI,EAAE;AACR,YAAA,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAChF,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,IAAI,CAAC,OAAO,EAAE;YACtB;QACF;IACF,CAAC;AAED;;AAEG;AACH,IAAA,MAAM,gBAAgB,CAAC,QAAgB,EAAE,cAAsB,EAAA;QAC7D,MAAM,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC;AAC7D,QAAA,MAAM,IAAI,CAAC,OAAO,EAAE;IACtB,CAAC;;CAGF,CAAC,CACH;;MC1tCU,4BAA4B,CAAA;AAjBzC,IAAA,WAAA,GAAA;AAkBY,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACzC,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAyB,kBAAkB,kFAAC;AACnE,QAAA,IAAA,CAAA,eAAe,GAAG,SAAS,CAAyB,iBAAiB,sFAAC;AACtE,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAChD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACtC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAEzD,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAgC,MAAM,iFAAC;QACzD,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA+B;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAA2B,MAAM,oFAAC;AACvD,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAU,IAAI,sFAAC;AAE5B,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAmB,IAAI,2EAAC;AAEvC,QAAA,IAAA,CAAA,OAAO,GAAG;AAChB,YAAA,IAAI,EAAE,YAAY,CAAC,MAAM,OAAO,uEAAkC,CAAC,EAAE,oCAAoC;AACzG,YAAA,aAAa,EAAE,YACb,CAAC,MAAM,OAAO,8EAAgD,CAAC,EAAE,0CAA0C;AAC7G,YAAA,aAAa,EAAE,YACb,CAAC,MAAM,OAAO,8EAAgD,CAAC,EAAE,0CAA0C;AAC7G,YAAA,OAAO,EAAE,YACP,CAAC,MAAM,OAAO,0EAAwC,CAAC,EAAE,uCAAuC;AAClG,YAAA,aAAa,EAAE,YACb,CAAC,MAAM,OAAO,8EAAgD,CAAC,EAAE,0CAA0C;AAC7G,YAAA,aAAa,EAAE,YACb,CAAC,MAAM,OAAO,8EAAgD,CAAC,EAAE,0CAA0C;AAC7G,YAAA,YAAY,EAAE,YACZ,CAAC,MAAM,OAAO,+EAAwD,CAAC,EAAE,sCAAsC;SAClH;AAED,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,MAAK;YACpB,IAAI,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE;gBACrC,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE;AAC7B,oBAAA,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE;gBACnC,CAAC,EAAE,GAAG,CAAC;YACT;AACF,QAAA,CAAC,8EAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,MAAK;AACrB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAG,CAAC;YACvC;AACA,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;gBACxB,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAG,CAAC;YACjD;AACF,QAAA,CAAC,+EAAC;AAEF,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,YAAW;YAC3B,MAAM,IAAI,GAAGI,KAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;AAC3F,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;;YAEnB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE;AAC7B,gBAAA,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE;YACnC,CAAC,EAAE,GAAG,CAAC;AACT,QAAA,CAAC,+EAAC;AAiDH,IAAA;AA5EC,IAAA,OAAO;AASP,IAAA,QAAQ;AASR,IAAA,QAAQ;;IAaE,MAAM,0BAA0B,CAAC,CAA4B,EAAA;AACrE,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAAwC;QACrD,MAAM,IAAI,IAAIA,KAAG,CAAC,EAAE,EAAE,UAAU,CAAC,IAAIA,KAAG,CAAC,EAAE,EAAE,OAAO,GAAG,kBAAkB,CAAC,EAAE,UAAU,CAAC,CAE1E;QACb,IAAI,CAAC,IAAI,EAAE;YACT;QACF;;QAGA,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;;QAGzD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACxB;IAEU,MAAM,8BAA8B,CAAC,CAA4B,EAAA;;AAEzE,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM;AACrD,gBAAA,GAAG,CAAC;AACJ,gBAAA,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI;AACrB,gBAAA,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO;AACzB,aAAA,CAAC,CAAC;YACH,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,CAAC;SAC9C;QACD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACpC,YAAA,GAAG,CAAC;YACJ,IAAI,EAAE,CAAC,CAAC,KAAK;AACd,SAAA,CAAC,CAAiB;QACnB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;AAE5B,QAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;IAC3C;IAEU,MAAM,0BAA0B,CAAC,CAA+B,EAAA;AACxE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;AACf,YAAA,MAAM,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7D;IACF;8GArGW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,4BAA4B,i4BC5CzC,ooCAqCA,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDHI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,sCAAA,EAAA,0BAAA,EAAA,2BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,8BACf,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,YAAY,yOACZ,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGf,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAjBxC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,cAGrB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,YAAY;wBACZ,iBAAiB;wBACjB,eAAe;wBACf,cAAc;wBACd,gBAAgB;wBAChB,YAAY;wBACZ,wBAAwB;AACzB,qBAAA,EAAA,QAAA,EAAA,ooCAAA,EAAA,MAAA,EAAA,CAAA,kUAAA,CAAA,EAAA;AAIyD,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,kBAAkB,yEACd,iBAAiB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ME7BpE,iCAAiC,CAAA;AAV9C,IAAA,WAAA,GAAA;AAWY,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACjD,IAAA;8GAHY,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB9C,2pBAmBA,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDLI,cAAc,+XACd,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FAGR,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAV7C,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAG3B,IAAI,EAAA,OAAA,EACP;wBACP,cAAc;wBACd,iBAAiB;AAClB,qBAAA,EAAA,QAAA,EAAA,2pBAAA,EAAA,MAAA,EAAA,CAAA,gdAAA,CAAA,EAAA;;;AEFI,MAAM,6BAA6B,GAA0B;AAClE,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,CAAC,OAAsC,KAAmC;AACjF,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACtD,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxD,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACvD,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;QAE7C,OAAO,CAAC,OAAO,GAAG;YAChB,GAAG,OAAO,CAAC,OAAO;AAClB,YAAA;AACE,gBAAA,MAAM,EAAE,4BAA4B;AACpC,gBAAA,MAAM,EAAE,IAAI;AACZ,gBAAA,OAAO,EAAE,gDAAgD;AACzD,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,GAAG,EAAE,OAAO,YAAyC,KAAI;oBACvD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC;oBAE/E,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;wBAClC;oBACF;;;oBAIA,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,cAAc,CACzD,mDAAmD,CACpD;oBACD,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,cAAc,CAC3D,6DAA6D,CAC9D;AAED,oBAAA,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,OAAO,CAC9C,WAAW,EACX,aAAa,EACb,SAAS,EACT,YAAY,EACZ,KAAK,EACL,QAAQ,CACT;;AAGD,oBAAA,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,GAAG,OAAO,GAAG,cAAc;;oBAGrE,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAS,MAAM;AAC9C,wBAAA,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;AACtB,wBAAA,MAAM,EAAE,WAAoB;AAC7B,qBAAA,CAAC,CAAsB;AAExB,oBAAA,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;;AAGnC,oBAAA,WAAW,MAAM,IAAI,IAAI,MAAM,EAAE;AAC/B,wBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;4BAC1B;wBACF;wBAEA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;wBACpC,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;wBAEpD,IAAI,CAAC,WAAW,EAAE;4BAChB;wBACF;AAEA,wBAAA,IAAI,cAAc,KAAK,cAAc,EAAE;;AAErC,4BAAA,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE;AAClC,gCAAA,MAAM,EAAE,UAAU;AAClB,gCAAA,MAAM,EAAE;AACN,oCAAA,IAAI,EAAE,WAAW;AACjB,oCAAA,KAAK,EAAE;wCACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,wCAAA,IAAI,EAAE,UAAU;AACjB,qCAAA;AACF,iCAAA;AACF,6BAAA,CAAC;wBACJ;6BAAO;;AAEL,4BAAA,IAAI;gCACF,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;gCAC5D,IAAI,CAAC,WAAW,EAAE;AAChB,oCAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;oCACpC;gCACF;AAEA,gCAAA,YAAY,CAAC,cAAc,CAAC,MAAM,EAAE;AAClC,oCAAA,EAAE,EAAE,gBAAgB,CAAC,IAAI,EAAE;AAC3B,oCAAA,MAAM,EAAE,UAAU;AAClB,oCAAA,MAAM,EAAE;AACN,wCAAA,IAAI,EAAE,MAAM;AACZ,wCAAA,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,MAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;AAClF,qCAAA;AACF,iCAAA,CAAC;4BACJ;AAAE,4BAAA,MAAM;AACN,gCAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;4BACtC;wBACF;oBACF;gBACF,CAAC;AACF,aAAA;SACF;AAED,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;;MC1GY,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;+GAApB,oBAAoB,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,SAAA,EALlB;YACP,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,gCAAgC,EAAE,KAAK,EAAE,IAAI,EAAE;YAC9F,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI;AAC5F,SAAA,EAAA,CAAA,CAAA;;2FAEQ,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBARhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAC,EACP;AACD,oBAAA,SAAS,EAAE;wBACP,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,gCAAgC,EAAE,KAAK,EAAE,IAAI,EAAE;wBAC9F,EAAE,OAAO,EAAE,wBAAwB,EAAE,QAAQ,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI;AAC5F;AACJ,iBAAA;;;ACLK,MAAO,kCAAmC,SAAQ,iBAAiB,CAAA;IAC9D,MAAM,OAAO,CAAC,OAA2B,EAAA;QAChD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;QACxD,IAAI,YAAY,EAAE;AAChB,YAAA,OAAO,CAAC,SAAS,CAAC,2BAA2B,EAAE,KAAK,CAAC;QACvD;aAAO;AACL,YAAA,OAAO,CAAC,SAAS,CAAC,2BAA2B,EAAE,IAAI,CAAC;QACtD;IACF;8GARW,kCAAkC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlC,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;AAaK,MAAO,mCAAoC,SAAQ,iBAAiB,CAAA;AAD1E,IAAA,WAAA,GAAA;;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAWnE,IAAA;IATU,MAAM,OAAO,CAAC,OAA2B,EAAA;QAChD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE;AAC7D,QAAA,IAAI,MAAM,CAAC,SAAS,EAAE;AACpB,YAAA,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;YACrC;QACF;QACA,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,MAAM,CAAC,cAAc,CAAC;AAC5D,QAAA,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC;IACxC;8GAXW,mCAAmC,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAnC,mCAAmC,EAAA,CAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAD/C;;AAgBK,MAAO,2BAA4B,SAAQ,iBAAiB,CAAA;AADlE,IAAA,WAAA,GAAA;;AAEE,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACpD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAc1C,IAAA;IAZU,MAAM,OAAO,CAAC,OAA2B,EAAA;QAChD,IAAI,GAAG,GAAsB,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE;YACR,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;YACnD,GAAG,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC;QACpD;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;;AAExB,YAAA,QAAQ,EAAE,KAAK;AAChB,SAAA,CAAC;IACJ;8GAfW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAA3B,2BAA2B,EAAA,CAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;AAmBM,MAAM,iBAAiB,GAAgB;AAC5C,IAAA,WAAW,EAAE,qBAAqB;AAClC,IAAA,KAAK,EAAE;AACL,QAAA,qBAAqB,EAAE;AACrB,YAAA,MAAM,EAAE,oCAAoC;AAC5C,YAAA,SAAS,EAAE;AACT,gBAAA;oBACE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,wDAAwD,EAAE,CAAC;AACtG,oBAAA,UAAU,EAAE,sBAAsB;AACnC,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,sBAAsB,EAAE;AACtB,YAAA,MAAM,EAAE,qCAAqC;AAC7C,YAAA,SAAS,EAAE;AACT,gBAAA;oBACE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,0CAA0C,EAAE,CAAC;AACxF,oBAAA,UAAU,EAAE,cAAc;AAC3B,iBAAA;AACF,aAAA;AACF,SAAA;AACD,QAAA,cAAc,EAAE;AACd,YAAA,MAAM,EAAE,6BAA6B;AACrC,YAAA,SAAS,EAAE;AACT,gBAAA;AACE,oBAAA,UAAU,EAAE,EAAE;AACd,oBAAA,UAAU,EAAE,gBAAgB;AAC7B,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA;CACF;;AC7ED;AACO,MAAM,iCAAiC,GAAG;AAcjD;;;;AAIG;AACI,MAAM,cAAc,GAA0B;AACnD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,KAAK,EAAE,CAAC,GAAG,EAAE,OAA+B,KAAI;AAC9C,QAAA,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE;QAC1B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAM,GAAG,6CAA6C;AAChH,QAAA,MAAM,OAAO,GAAG,CAAA,EAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;AAEzD,QAAA,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;QACvB,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CACtC,CAAC,CAA4B,KAAK,CAAC,CAAC,YAAY,KAAK,iCAAiC,CACvF;QACD,MAAM,SAAS,GAAG,kCAAkC,CAClD,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EACxE,WAAW,EACX;AACE,YAAA,YAAY,EAAE,iCAAiC;AAC/C,YAAA,QAAQ,EAAE;AACR,kBAAE,EAAE,YAAY,EAAE,iCAAiC;AACnD,kBAAE,SAAS;AACd,SAAA,CACF;AACD,QAAA,MAAM,SAAS,GAQX;AACF,YAAA,YAAY,EAAE,iCAAiC;YAC/C,KAAK;AACL,YAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,mBAAmB;AACtC,YAAA,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC5B,OAAO;AACP,YAAA,OAAO,EAAE;gBACP,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;AAC1C,aAAA;SACF;AACD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9E,YAAA,SAAS,CAAC,wBAAwB,GAAG,IAAI,CAAC,iBAAiB;QAC7D;QACA,IAAI,CAAC,UAAU,EAAE;YACd,GAAG,CAAC,MAAM,CAAC,KAA8B,CAAC,IAAI,CAAC,SAAS,CAAC;QAC5D;aAAO;AACL,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,KAA2B;AACpD,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,KAAK,iCAAiC,CAAC;AAC1F,YAAA,IAAI,KAAK,IAAI,CAAC,EAAE;AACd,gBAAA,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE;YAClD;QACF;QAEA,iBAAiB,CAAC,GAAG,CAAC;IACxB,CAAC;;;MCrDU,uCAAuC,CAAA;AAWlD,IAAA,WAAA,GAAA;AAVU,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAClC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;;AAG3D,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAiC,IAAI,qFAAC;;QAE7D,IAAA,CAAA,eAAe,GAAG,MAAM,CAA4C,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAEzF,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAoE,IAAI,yFAAC;QAG5G,MAAM,CAAC,MAAK;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,EAAgD;YACjF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;AACjE,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;gBACjC;YACF;YACA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;AAC/C,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,GAA+C,KAAI;AACvG,gBAAA,MAAM,YAAY,GAAG,GAAG,EAAE,YAAY,IAAI,IAAI;AAC9C,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,YAAY,CAAC;AACrC,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE,CAA4B,EAAE,CAAC;AAChG,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CACzB;AACE,sBAAE;AACE,wBAAA,IAAI,EAAE,uBAAuB;AAC7B,wBAAA,IAAI,EAAE,cAAc;AACpB,wBAAA,OAAO,EAAE;AACP,4BAAA,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM;AAClD,gCAAA,GAAG,KAAK;gCACR,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,CAAC;AACnF,6BAAA,CAAC,CAAC;AACJ,yBAAA;AACF;sBACD,IAAI,CACT;AAEH,YAAA,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;AAC9C,gBAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;AACnC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;8GA9CW,uCAAuC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvC,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uCAAuC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC3BpD,6jFAiEA,EAAA,MAAA,EAAA,CAAA,oiFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9CI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,gHACnB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,gBAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAGV,uCAAuC,EAAA,UAAA,EAAA,CAAA;kBAfnD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oCAAoC,cAGlC,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B;wBACP,YAAY;wBACZ,iBAAiB;wBACjB,cAAc;wBACd,cAAc;wBACd,mBAAmB;wBACnB,mBAAmB;AACpB,qBAAA,EAAA,QAAA,EAAA,6jFAAA,EAAA,MAAA,EAAA,CAAA,oiFAAA,CAAA,EAAA;;;AEkBH;AAEA;;;AAGG;AA+BG,MAAO,6BAA8B,SAAQ,0BAA0B,CAAA;AA9B7E,IAAA,WAAA,GAAA;;;AAiCE,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,iFAA2B;QACvD,IAAA,CAAA,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAA2B;AAC7C,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAsB,EAAE,8EAAC;;;QAMrB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACpD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC9C,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AAC3C,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;;;AAM5B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAwD,EAAE,kFAAC;AACxF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAS,KAAK,qFAAC;QACtC,IAAA,CAAA,WAAW,GAAkB,IAAI;QACxB,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC;YACpC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC1E,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAClF,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,4BAA4B,EAAE;AACrF,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QACiB,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC;AACrC,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAChD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7D,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE;YACzC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;YACtD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AAChD,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;AACjC,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,uFAChG;AACkB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA2B,QAAQ,oFAAC;;AAG5D,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAgB,IAAI,uFAAC;;;;AAO5C,QAAA,IAAA,CAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACjD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;YACtC,IAAI,MAAM,IAAI,IAAI;AAAE,gBAAA,OAAO,KAAK;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE;AAC3C,YAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,SAAS,IAAI,IAAI,IAAI,SAAS,KAAK,MAAM;AAC7E,QAAA,CAAC,sFAAC;AAEiB,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAC3E,QAAA,CAAC,mFAAC;;;;AAOF,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,MAAK;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;YAC7C,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACtC;AACF,QAAA,CAAC,sFAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,MAAK;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;YACrC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,qFAAC;AAwQH,IAAA;;;;AApRC,IAAA,eAAe;AAOf,IAAA,cAAc;;;AAWL,IAAA,MAAM,QAAQ,GAAA;QACrB,KAAK,CAAC,QAAQ,EAAE;AAChB,QAAA,MAAM,IAAI,CAAC,eAAe,EAAE;QAE5B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAClD,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE;YACtB;QACF;QAEA,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAExC,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC;AAChF,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,EAAE;AAC5C,QAAA,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,kBAAkB,CAAC;AAC/E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,EAAE;AACvD,QAAA,OAAO,CAAC,GAAG,CAAC,sDAAsD,EAAE,YAAY,CAAC;QACjF,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,EAAE,CAAC,2BAA2B,CAAC,YAAY,CAAC;QACnD;AACA,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC;QAC7E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE;IAClB;;IAGQ,2BAA2B,GAAA;AACjC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AAChC,QAAA,MAAM,GAAG,GAAG,MAAM,IAAK,MAAkD,CAAC,wBAAwB;QAClG,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS;IAC/D;AAEA;;;AAGG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;QACxC,MAAM,GAAG,GAAG,OAAkC;QAE9C,IAAI,OAAO,GACT,MAAM,IAAI,OAAQ,MAA+B,CAAC,OAAO,KAAK;cACzD,MAA8B,CAAC;cAChC,IAAI;QACV,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI;YACnF,MAAM,UAAU,GAAG,OAAO,GAAG,CAAC,YAAY,CAAC,KAAK,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI;AACnF,YAAA,IAAI,UAAU,IAAI,UAAU,EAAE;AAC5B,gBAAA,OAAO,GAAG,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,EAAE;YACzC;QACF;QACA,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACjE,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzD,YAAA,IAAI,MAAM,IAAI,MAAM,EAAE;AACpB,gBAAA,OAAO,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,EAAE;YACjC;QACF;QAEA,MAAM,KAAK,GACT,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI;AACjD,aAAC,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AAC9D,YAAA,IAAI;AAEN,QAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;IAC3B;;;AAMU,IAAA,kBAAkB,CAAC,KAA0B,EAAA;QACrD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI;AACtC,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QACtC;IACF;IAEQ,MAAM,aAAa,CAAC,WAAmB,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/E,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE;AACpC,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE;AACpC,SAAA,CAAC;IACJ;AAEU,IAAA,sBAAsB,CAAC,QAAgB,EAAA;AAC/C,QAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACpC;;IAGU,UAAU,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;;;AAMQ,IAAA,MAAM,eAAe,GAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AAChD,QAAA,MAAM,KAAK,GAAG;YACZ,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,2BAA2B,EAAE;YAC5E,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;gBACtB,GAAG,EAAE,IAAI,CAAC,IAAI;AACd,gBAAA,OAAO,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,IAAI,CAAA,CAAE;AAClC,gBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,kBAAkB;AACtC,aAAA,CAAC,CAAC;SACJ;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;;;AAMU,IAAA,SAAS,CAAC,GAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK;AAAE,YAAA,OAAO,2BAA2B;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5E,QAAA,OAAO,IAAI,EAAE,IAAI,IAAI,kBAAkB;IACzC;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,KAAK;AAAE,YAAA,OAAO,gBAAgB;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;AAC5E,QAAA,OAAO,IAAI,EAAE,OAAO,IAAI,gBAAgB;IAC1C;;;AAMS,IAAA,MAAM,mBAAmB,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,EAAE;YACtC,OAAO;AACL,gBAAA;AACE,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,KAAK,EAAE,qCAAqC;AAC5C,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AACjC,iBAAA;aACF;QACH;AACA,QAAA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAC,YAAY,EAAG,KAAK,EAAC,CAAC;AAChF,QAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE,YAAY,CAAC;AAChE,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;YACnD,OAAO;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE,uCAAuC;AAC9C,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,KAAK,EAAE,YAAY;AACpB,iBAAA;aACF;QACH;AACA,QAAA,OAAO,EAAE;IACX;AAES,IAAA,MAAM,qBAAqB,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,EAAE;YACtC,OAAO;AACL,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,+BAA+B;AACtC,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AACjC,iBAAA;aACF;QACH;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE;IACjD;AAES,IAAA,MAAM,YAAY,GAAA;QACzB,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,EAAE;IAC5C;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;AACrC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,yDAAyD,EAAE;AACrG,YAAA,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE;AACvC,SAAA,CAAC;IACJ;IAES,aAAa,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI;QAC5E,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI;SACrE;IACH;IAES,iBAAiB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;AAC1B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;;AAGS,IAAA,MAAM,kBAAkB,GAAA;AAC/B,QAAA,OAAO,EAAE;IACX;IAES,MAAM,OAAO,CAAC,OAA0B,EAAA;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,UAAU,CAAW;AACxD,QAAA,QAAQ,OAAO,CAAC,IAAI;YAClB,KAAK,aAAa,EAAE;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACrC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC;AACpE,oBAAA,IAAI,OAAO;AAAE,wBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;gBAChC;gBACA;YACF;AACA,YAAA,KAAK,oBAAoB;AACvB,gBAAA,IAAI,QAAQ;AAAE,oBAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBAChD;AACF,YAAA,KAAK,YAAY;gBACf,IAAI,QAAQ,EAAE;AACZ,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,2BAA2B,EAAE;AACvD,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,QAAQ,EAAE;AACvD,wBAAA,wBAAwB,EAAE,YAAY;AACvC,qBAAA,CAAC;AACF,oBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;gBACnB;gBACA;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,QAAQ,EAAE;oBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;oBACtC,MAAM,KAAK,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;oBAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACtE,oBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC9D;gBACF;gBACA;AACF,YAAA;AACE,gBAAA,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAC1E,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC;AACzF,oBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;gBACnB;gBACA;;IAEN;8GArVW,6BAA6B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAR7B;YACT,4BAA4B;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,6BAA6B;AAC3C,aAAA;SACF,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7EH,m7DAiDA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAL,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,gBAAgB,uQAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAK,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,uCAAuC,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAY9B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBA9BzC,SAAS;+BACE,yBAAyB,EAAA,UAAA,EAGvB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;wBACZ,cAAc;wBACd,mBAAmB;wBACnB,sBAAsB;wBACtB,gBAAgB;wBAChB,mBAAmB;wBACnB,iBAAiB;wBACjB,eAAe;wBACf,aAAa;wBACb,iBAAiB;wBACjB,4BAA4B;wBAC5B,uCAAuC;AACxC,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;wBACT,4BAA4B;AAC5B,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,6BAA+B;AAC3C,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,m7DAAA,EAAA;;;;;;;;AEtEH;MAGa,qCAAqC,CAAA;AAChD,IAAA,MAAM,UAAU,GAAA;QACd,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,iCAAiC;AACtC,gBAAA,MAAM,EAAE,MACN,2EAAyC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,6BAA6B,CAAC;AACzF,aAAA;SACF;IACH;8GATW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAArC,qCAAqC,EAAA,CAAA,CAAA;;2FAArC,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD;;;ACLD,SAAS,uBAAuB,CAC9B,IAA+G,EAAA;AAE/G,IAAA,IAAI,IAAI,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;AAAE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY;AACnE,IAAA,IAAI,IAAI,EAAE,YAAY,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,YAAY;IACxD,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACpF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAA+B;AAC9C,QAAA,OAAQ,CAAC,CAAC,cAAc,CAAyC,IAAI,CAAC;IACxE;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;AACA,SAAS,mBAAmB,CAAC,SAAc,EAAA;AACzC,IAAA,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ;AAAE,QAAA,OAAO,EAAE;AAC1D,IAAA,IAAI,OAAQ,SAAgC,CAAC,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,CAAE,SAA+B,CAAC,KAAK,CAAC;IAChH,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC;AACzE;AAEA;AACA,SAAS,iCAAiC,CAAC,GAAQ,EAAA;AACjD,IAAA,MAAM,KAAK,GAAG,GAAG,EAAE,UAA6F;AAChH,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AACpC,IAAA,OAAO;AACJ,SAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,KAAK,eAAe,IAAI,CAAC,EAAE,IAAI;SACvE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACvB;AAEA;;;;AAIG;AACH;AACO,MAAM,2BAA2B,GAA+B;AACrE,IAAA,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;AAChD,IAAA,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,KAAI;AAC3B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,kCAAkC,CAAC;AAC3D,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAC7C,QAAA,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9D,QAAA,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC,MAAM,IAAW,CAAC;AACvF,QAAA,MAAM,SAAS,GAAI,GAAW,EAAE,UAAU,EAAE,WAAW;AACvD,QAAA,IAAI,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG;AAAE,YAAA,MAAM,GAAG,iCAAiC,CAAC,GAAG,CAAC;AAC1E,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,MAAM,IAAI,EAAE;YACZ;QACF;QAEA,MAAM,cAAc,GAAI,GAAG,CAAC,MAAc,CAAC,cAAc,IAAI,EAAE;AAC9D,QAAA,GAAG,CAAC,MAAc,CAAC,cAAc,GAAG,cAAc;QAEnD,IAAI,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC5C,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,MAAM,IAAI,GAAU,KAAK,CAAC,OAAO,CAAE,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,CAAC,GAAI,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,GAAG,EAAE;AAC3F,gBAAA,cAAc,CAAC,KAAK,CAAC,GAAG,EAA0C;gBAClE,MAAM,UAAU,GAAU,EAAE;AAE5B,gBAAA,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;AACvB,oBAAA,MAAM,YAAY,GAAG,uBAAuB,CAAC,IAAI,CAAC;AAElD,oBAAA,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,YAAY,IAAI,EAAE;AACtE,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAa;AACtC,wBAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAA,KAAA,EAAQ,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;wBAC9C,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;AAC/E,wBAAA,MAAM,KAAK,GAAQ;4BACjB,MAAM,EAAE,IAAI,CAAC,EAAE;4BACf,IAAI;AACJ,4BAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAK,IAAa,CAAC,IAAI;AACtC,4BAAA,MAAM,EAAE,gBAAgB;yBACzB;AACD,wBAAA,IAAI,YAAY;AAAE,4BAAA,KAAK,CAAC,YAAY,GAAG,YAAY;AACnD,wBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxB;yBAAO,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC9F,wBAAA,MAAM,KAAK,GAAQ;4BACjB,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,4BAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU;AACjC,4BAAA,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;yBACrD;AACD,wBAAA,IAAI,YAAY;AAAE,4BAAA,KAAK,CAAC,YAAY,GAAG,YAAY;AACnD,wBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxB;yBAAO,IAAI,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE;AACjC,wBAAA,MAAM,KAAK,GAAQ;4BACjB,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,4BAAA,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,UAAU;4BACjC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,SAAS;yBACvF;AACD,wBAAA,IAAI,YAAY;AAAE,4BAAA,KAAK,CAAC,YAAY,GAAG,YAAY;AACnD,wBAAA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxB;gBACF;AAEA,gBAAA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC;AAClF,gBAAA,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,GAAG,cAAc;YAC3C;QACF;QAEA,MAAM,IAAI,EAAE;QAEZ,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACvE,QAAA,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU;AAE9B,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAyC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE;YACjF,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE;AACrB,YAAA,IAAI,CAAC,OAAO;gBAAE;YAEd,MAAM,SAAS,GAAU,CAAE,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,CAAC,MAAM,KAAK,gBAAgB,CAAC;YAE3G,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE;gBACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,IAAI,uBAAuB,CAAC,QAAQ,CAAC;AAC/E,gBAAA,IAAI;AACF,oBAAA,MAAM,IAAI,GAAuB,MAAM,OAAO,CAAC,IAAI,CAAC;AAClD,wBAAA,IAAI,EAAE,IAAI;wBACV,KAAK;wBACL,OAAO;AACP,wBAAA,QAAQ,EAAE,EAAE;wBACZ,IAAI,EAAE,QAAQ,CAAC,IAAI;AACpB,qBAAA,CAAC;oBACF,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACjC,oBAAA,MAAM,KAAK,GAAQ;wBACjB,EAAE,EAAE,IAAI,CAAC,MAAM;AACf,wBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI;AAChC,wBAAA,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;AAC5B,wBAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI;AAChC,wBAAA,MAAM,EAAE,UAAU;wBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;qBAC/C;AACD,oBAAA,IAAI,YAAY;AAAE,wBAAA,KAAK,CAAC,YAAY,GAAG,YAAY;AACnD,oBAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBACvB;gBAAE,OAAO,GAAQ,EAAE;oBACjB,SAAS,CAAC,IAAI,CAAC;wBACb,MAAM,EAAE,QAAQ,CAAC,EAAE;wBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,IAAI,EAAG,IAAa,CAAC,IAAI;AACzB,wBAAA,MAAM,EAAE,eAAe;wBACvB,KAAK,EAAE,GAAG,EAAE,OAAO;AACpB,qBAAA,CAAC;gBACJ;YACF;AAEA,YAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,KAAK,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;AAC1D,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;gBACpB,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,GAAG,SAAS,EAAS;AAC7C,gBAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAM,KAAK,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC,MAAM;AAC7E,gBAAA,OAAO,CAAC,GAAG,CAAC,0FAA0F,EAAE;oBACtG,UAAU,EAAE,GAAG,CAAC,UAAU;oBAC1B,QAAQ;oBACR,KAAK;oBACL,eAAe,EAAE,SAAS,CAAC,MAAM;AACjC,oBAAA,aAAa,EAAE,QAAQ;AACvB,oBAAA,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAM,EAAE,CAAS,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;AAC/F,iBAAA,CAAC;AACF,gBAAA,IAAI;AACF,oBAAA,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC9D,oBAAA,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC;gBACjF;gBAAE,OAAO,GAAG,EAAE;AACZ,oBAAA,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAE,GAAG,CAAC;;gBAE7E;YACF;AACA,YAAA,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE;AACzD,gBAAA,GAAG,CAAC,MAAM,GAAG,EAAE,GAAI,GAAG,CAAC,MAAc,EAAE,CAAC,KAAK,GAAG,SAAS,EAAE;YAC7D;QACF;IACF,CAAC;CACF;;MCvKY,kBAAkB,CAAA;AAG7B,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAFX,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAElC;IAEzC,MAAM,OAAO,CAAC,OAA4C,EAAA;AACxD,QAAA,MAAM,CAAC,GAAG,OAAO,GAAW,KAC1B,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,8CAA8C,GAAG,CAAA,CAAE,CAAC;QAEjG;aACG,QAAQ,CACP,kCAAkC,EAClC,MAAM,CAAC,CAAC,aAAa,CAAC,EACtB,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAC5B,UAAU,CAAC,MAAM,CAAC,IAAI;AAEvB,aAAA,UAAU,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,qBAAqB,CAAC;AACnF,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,8BAA8B,CAAC,OAAO;AAC3C,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,eAAe,CAAC;AAC/B,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,iBAAiB,CAAC,MAAM;AAC/B,aAAA;AACD,YAAA,WAAW,EAAE,MAAM,CAAC,CAAC,qBAAqB,CAAC;SAC5C;AACA,aAAA,UAAU,CAAC;YACV,GAAG,EAAE,8BAA8B,CAAC,QAAQ;AAC5C,YAAA,KAAK,EAAE,MAAM,CAAC,CAAC,iBAAiB,CAAC;AACjC,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,MAAM,EAAE;gBACN,IAAI,EAAE,iBAAiB,CAAC,IAAI;AAC5B,gBAAA,OAAO,EAAE;AACP,oBAAA,WAAW,EAAE,MAAM,CAAC,CAAC,uBAAuB,CAAC;AAC9C,iBAAA;AACF,aAAA;AACD,YAAA,WAAW,EAAE,MAAM,CAAC,CAAC,uBAAuB,CAAC;SAC9C;AACA,aAAA,UAAU;AACV,aAAA,QAAQ,EAAE;IACf;8GA5CW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAlB,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;ACcD,SAAS,qBAAqB,CAC5B,QAA2F,EAAA;IAE3F,IAAI,QAAQ,IAAI,IAAI;AAAE,QAAA,OAAO,SAAS;IACtC,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;AACjD,IAAA,IAAI,QAAQ,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK;AACjH,IAAA,IAAI,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,EAAE;AACvD,IAAA,OAAO,SAAS;AAClB;AA0BA;AAEA;;AAEG;AACH,SAAS,sBAAsB,CAAC,OAAoB,EAAA;AAClD,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;AACtG,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC;AACvG,IAAA,OAAO,SAAS,IAAI,CAAC,UAAU;AACjC;AAEA;;;AAGG;AACH,SAAS,wBAAwB,CAAC,OAAoB,EAAA;AACpD,IAAA,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE;AACpC,QAAA,OAAO,SAAS;IAClB;IACA,QAAQ,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,OAAO,IAAI,EAAE;AAC3E;AAEA;AACA,SAAS,eAAe,CAAC,IAAuC,EAAA;AAC9D,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,EAAE;AACpB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,YAAY;AAC9F,IAAA,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AACrG,IAAA,OAAO,EAAE;AACX;AAEA;AAEA;AACO,MAAM,qCAAqC,GAAkD;AAClG,IAAA,GAAG,EAAE,yBAAyB;AAC9B,IAAA,QAAQ,EAAE,CAAC;IACX,MAAM,OAAO,CAAC,OAA6D,EAAA;AACzE,QAAA,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,CAAC;AAC9C,QAAA,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,OAAO;AAEjC,QAAA,MAAM,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;QACtE,MAAM,aAAa,GAAa,EAAE;AAClC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,qBAAqB,CAAC,IAAI,CAAoD;YAC9H,MAAM,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE;YACnD,MAAM,OAAO,GAAI;iBACd,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI;AAClB,iBAAA,MAAM,CAAC,CAAC,CAAS,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;iBAC9D,GAAG,CAAC,CAAC,CAAS,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAA,CAAE,CAAC;AAC9D,YAAA,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAChC;AACA,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;QAErD,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE;AAC3C,QAAA,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;AAClD,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;AAED;AACO,MAAM,yCAAyC,GAA0B;AAC9E,IAAA,GAAG,EAAE,uBAAuB;AAC5B,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,OAAO,OAAsC,KAA4C;QAChG,MAAM,IAAI,GAAG,wBAAwB,CAAC;YACpC,OAAO,EAAE,OAAO,CAAC,OAAO;AACxB,YAAA,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,EAAE;YAC5C,YAAY,EAAE,OAAO,CAAC,YAAY;AACpB,SAAA,CAAC;AACjB,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,OAAO;AAE7C,QAAA,MAAM,yBAAyB,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACtE,QAAA,MAAM,qBAAqB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAClF;QAED,MAAM,aAAa,GAAG;aACnB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI;AACzB,aAAA,GAAG,CAAC,CAAC,OAAO,KAAI;YACf,MAAM,QAAQ,GAAI,OAAe,EAAE,IAAI,EAAE,aAAa,IAAI,EAAE;YAC5D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CACvB,IAAI,GAAG,CACJ;iBACE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI;AAClB,iBAAA,MAAM,CAAC,CAAC,CAAS,KAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC9D,iBAAA,GAAG,CAAC,CAAC,CAAS,KAAK,CAAA,CAAA,EAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAA,CAAE,CAAC,CAC/D,CACF,CAAC,IAAI,CAAC,GAAG,CAAC;AACX,YAAA,MAAM,QAAQ,GAAI,OAAe,EAAE,IAAc;AACjD,YAAA,MAAM,KAAK,GAAI,OAAe,EAAE,KAAK,IAAI,QAAQ;AACjD,YAAA,MAAM,UAAU,GAAI,OAAe,EAAE,YAAY,EAAE,MAA8C;AACjG,YAAA,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;YACnF,OAAO;AACL,gBAAA,MAAM,EAAE,UAAU;AAClB,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,GAAG,EAAE,OAAO,YAAyC,KAAI;AACvD,oBAAA,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;AACrC,wBAAA,QAAQ,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI;wBAC3C,MAAM,EAAE,MAAM,IAAI,SAAS;AAC5B,qBAAA,CAAC;AACF,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE;AACxB,oBAAA,MAAM,YAAY,GAAsB;AACtC,wBAAA,EAAE,EAAG,OAA2B,EAAE,EAAE,IAAI,EAAE;AAC1C,wBAAA,IAAI,EAAE,QAAQ;AACd,wBAAA,KAAK,EAAG,OAA8B,EAAE,KAAK,IAAI,QAAQ;qBAC1D;oBACD,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CACzB,CAAC,IAAI,MACF;AACC,wBAAA,EAAE,EAAE,gBAAgB,CAAC,IAAI,EAAE;wBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,wBAAA,MAAM,EAAE,UAAU;wBAClB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,KAAK,EAAE,IAAI,EAAE;wBAC9C,IAAI,EAAE,EAAE,YAAY,EAA8B;AACnD,qBAAA,CAAoB,CACxB;oBACD,IAAI,OAAO,EAAE;wBACX,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,+BAA+B,CACxE,2BAA2B,EAC3B;AACE,4BAAA,YAAY,EAAE,OAAO;AACrB,4BAAA,KAAK,EAAE,SAAS;AACjB,yBAAA,CACF;wBACD,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AAC5E,4BAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAA6C,EAAE,CAAS,KAAI;AACrF,gCAAA,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE;AAChB,oCAAA,MAAM,IAAI,GAA6B;AACrC,wCAAA,GAAI,SAAS,CAAC,CAAC,CAAC,CAAC,IAAiC;wCAClD,YAAY;wCACZ,YAAY,EAAE,CAAC,EAAE,YAAY;qCAC9B;oCACDO,KAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC;AAC/B,oCAAAA,KAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,YAAY,CAAC;gCACpD;AACF,4BAAA,CAAC,CAAC;wBACJ;AAAO,6BAAA,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE;4BAC9B;wBACF;oBACF;AACA,oBAAA,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACxC,CAAC;aACF;AACH,QAAA,CAAC,CAAC;QAEJ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,sBAAsB,CAAC;AACpF,QAAA,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;AACxD,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;AAED;AACA;AACA;AACO,MAAM,4CAA4C,GAAkD;AACzG,IAAA,GAAG,EAAE,gCAAgC;AACrC,IAAA,QAAQ,EAAE,CAAC;IACX,MAAM,OAAO,CAAC,OAAsD,EAAA;AAClE,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;AAED;AACO,MAAM,+CAA+C,GAAkD;AAC5G,IAAA,GAAG,EAAE,6CAA6C;AAClD,IAAA,QAAQ,EAAE,CAAC;IACX,MAAM,OAAO,CAAC,OAAyF,EAAA;AACrG,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAA4C;AAC1E,QAAA,MAAM,OAAO,IAAI,QAAQ,EAAE,YAAY,IAAK,OAAO,CAAC,IAAmC,CAAC,YAAY,CAEvF;AAEb,QAAA,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,CAAC;QAC9C,MAAM,WAAW,GAAG,QAAQ,EAAE,YAAY,EAAE,IAAI,IAAI,IAAI,EAAE,WAAW;AACrE,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,MAAM,yBAAyB,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC;QAC5E,MAAM,OAAO,GAAG;AACd,cAAE,MAAM,yBAAyB,CAAC,qBAAqB,CAAC,WAAW;cACjE,SAAS;AAEb,QAAA,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AAAE,YAAA,OAAO,OAAO;QAE/E,MAAM,YAAY,GAAI,OAAe,EAAE,YAAY,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;AACrE,QAAA,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAE3F,QAAA,MAAM,MAAM,GAAoC;AAC9C,YAAA;AACE,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,KAAK,EAAE,6CAA6C;AACpD,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,OAAO,EAAE,YAAY;AACrB,oBAAA,YAAY,EAAE,OAAO;AACf,iBAAA;AACT,aAAA;SACF;AAED,QAAA,MAAM,KAAK,GAAkC;AAC3C,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAG,OAAe,EAAE,KAAK,IAAI,6CAA6C;AAC/E,YAAA,UAAU,EAAE,MAAM;SACnB;QAED,IAAI,cAAc,EAAE;AAClB,YAAA,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QACrD;AACA,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;AAED;AACO,MAAM,6CAA6C,GAAkD;AAC1G,IAAA,GAAG,EAAE,2CAA2C;AAChD,IAAA,QAAQ,EAAE,CAAC;IACX,MAAM,OAAO,CACX,OAIC,EAAA;;QAGD,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE;AACzC,YAAA,OAAO,OAAO;QAChB;AAEA,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC9C,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,qBAAqB,CAAC;QACxD,MAAM,YAAY,GAAG;AAClB,aAAA,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI;AACpE,aAAA,IAAI,EAA0C;AAEjD,QAAA,IAAI;;AAEF,YAAA,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAE/D,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,OAAO,CAAC,SAAS,CAAC;AACrE,gBAAA,OAAO,OAAO;YAChB;YAEA,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,QAAQ,CAAC;AACjE,gBAAA,OAAO,OAAO;YAChB;;YAGA,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;YAEzD,IAAI,QAAQ,EAAE;gBACZ,OAAO,CAAC,QAAQ,GAAG;oBACjB,GAAG,EAAE,QAAQ,CAAC,GAAG;oBACjB,MAAM,EAAG,QAAgB,CAAC,MAAM;oBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK;iBACvD;YACH;iBAAO;AACL,gBAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,MAAM,CAAC;YACpE;QACF;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC;QACjF;AAEA,QAAA,OAAO,OAAO;IAChB,CAAC;CACF;AAED;AACO,MAAM,yCAAyC,GAAG;IACvD,qCAAqC;IACrC,4CAA4C;IAC5C,+CAA+C;IAC/C,6CAA6C;CAC9C;;ACtSD,SAAS,YAAY,GAAA;AACnB,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC9C,IAAA,MAAM,MAAM,GAAW;AACrB,QAAA;AACE,YAAA,IAAI,EAAE,mBAAmB;YACzB,aAAa,EAAE,MAAK;AAClB,gBAAA,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;YAC9B,CAAC;YACD,WAAW,EAAE,CAAC,YAAY,CAAC;AAC3B,YAAA,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;AACrB,YAAA,QAAQ,EAAE;AACR,gBAAA;AACE,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,aAAa,EAAE,MAAM,+DAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAC;AACzG,iBAAA;AACD,gBAAA;AACE,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,aAAa,EAAE,MAAM,+DAA0C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,yBAAyB,CAAC;AACzG,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AACD,IAAA,OAAO,MAAM;AACf;MA+Fa,2BAA2B,CAAA;8GAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,YAjFpC,oBAAoB;;YAEpB,6CAA6C;YAC7C,mBAAmB,EAAAN,IAAA,CAAA,mBAAA,EAAAC,IAAA,CAAA,iBAAA,CAAA,EAAA,CAAA,CAAA;AA8EV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,SAAA,EA/D3B;YACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,oCAAoC,EAAE,KAAK,EAAE,IAAI,EAAE;YACxG,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE;YAC5E,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,qCAAqC,EAAE;YACtG,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AAC9F,YAAA;AACE,gBAAA,OAAO,EAAE,MAAM;AACf,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,UAAU,EAAE,YAAY;AACzB,aAAA;YACD,GAAG,yCAAyC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvD,gBAAA,OAAO,EAAE,uCAAuC;AAChD,gBAAA,QAAQ,EAAE,CAAC;AACX,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC,CAAC;AACH,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,QAAQ,EAAE,yCAAyC;AACnD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,0BAA0B;AACpC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;;AAED,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,8CAA8C;AACxD,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,kCAAkC;AAC3C,gBAAA,QAAQ,EAAE,+BAA+B;AACzC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,QAAQ,EAAE,eAAe;AACzB,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,4BAA4B;AACrC,gBAAA,QAAQ,EAAE,iBAAiB;AAC3B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,mBAAmB;AAC5B,gBAAA,QAAQ,EAAE,wBAAwB;AAClC,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,QAAQ,EAAE,kBAAkB;AAC5B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,yBAAyB;AAClC,gBAAA,QAAQ,EAAE,6BAA6B;AACxC,aAAA;AACF,SAAA,EAAA,OAAA,EAAA,CA/EC,oBAAoB;;YAEpB,6CAA6C;YAC7C,mBAAmB;YACnB,mBAAmB,CAAC,OAAO,EAAE;YAC7B,iBAAiB,CAAC,QAAQ,CAAC;AACzB,gBAAA,OAAO,EAAE;oBACP,kCAAkC;oBAClC,mCAAmC;oBACnC,2BAA2B;AAC5B,iBAAA;AACD,gBAAA,SAAS,EAAE;AACT,oBAAA,iBAAiB,EAAE,iBAAiB;AACrC,iBAAA;aACF,CAAC,CAAA,EAAA,CAAA,CAAA;;2FAmEO,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAnFvC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,oBAAoB;;wBAEpB,6CAA6C;wBAC7C,mBAAmB;wBACnB,mBAAmB,CAAC,OAAO,EAAE;wBAC7B,iBAAiB,CAAC,QAAQ,CAAC;AACzB,4BAAA,OAAO,EAAE;gCACP,kCAAkC;gCAClC,mCAAmC;gCACnC,2BAA2B;AAC5B,6BAAA;AACD,4BAAA,SAAS,EAAE;AACT,gCAAA,iBAAiB,EAAE,iBAAiB;AACrC,6BAAA;yBACF,CAAC;AACH,qBAAA;AACD,oBAAA,OAAO,EAAE,EAAE;AAEX,oBAAA,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,oCAAoC,EAAE,KAAK,EAAE,IAAI,EAAE;wBACxG,EAAE,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE;wBAC5E,EAAE,OAAO,EAAE,2BAA2B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,qCAAqC,EAAE;wBACtG,EAAE,OAAO,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,2BAA2B,EAAE;AAC9F,wBAAA;AACE,4BAAA,OAAO,EAAE,MAAM;AACf,4BAAA,KAAK,EAAE,IAAI;AACX,4BAAA,UAAU,EAAE,YAAY;AACzB,yBAAA;wBACD,GAAG,yCAAyC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACvD,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,QAAQ,EAAE,CAAC;AACX,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA,CAAC,CAAC;AACH,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,QAAQ,EAAE,yCAAyC;AACnD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,0BAA0B;AACpC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;;AAED,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,8CAA8C;AACxD,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,kCAAkC;AAC3C,4BAAA,QAAQ,EAAE,+BAA+B;AACzC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,QAAQ,EAAE,eAAe;AACzB,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,4BAA4B;AACrC,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,mBAAmB;AAC5B,4BAAA,QAAQ,EAAE,wBAAwB;AAClC,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,QAAQ,EAAE,kBAAkB;AAC5B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,yBAAyB;AAClC,4BAAA,QAAQ,EAAE,6BAA6B;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA;;;AC7GD;;AAEG;AACH,SAAS,8BAA8B,CAAC,KAAqB,EAAA;IAC3D,IAAI,OAAO,GAA0B,KAAK;IAC1C,OAAO,OAAO,EAAE;AACd,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;AAClD,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC;AACA,QAAA,OAAO,GAAG,OAAO,CAAC,MAAM;IAC1B;AACA,IAAA,OAAO,SAAS;AAClB;AA0CM,MAAO,yBAA0B,SAAQ,0BAA0B,CAAA;AAxCzE,IAAA,WAAA,GAAA;;;QA2CqB,IAAA,CAAA,UAAU,GAAG,UAAU;AACvB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACpD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAChD,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAClD,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAAC,4BAA4B,CAAC;AACzC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;;;QAMlD,IAAA,CAAA,gBAAgB,GAAkB,IAAI;;QAGtC,IAAA,CAAA,YAAY,GAAmE,IAAI;;AAGjF,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAwB,EAAE,gGAAC;;AAG/D,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAA0B,EAAE,4FAAC;;AAG3D,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CAAuC,EAAE,gGAAC;AAEpF;;AAEG;AACO,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAmB,EAAE,0FAAC;;AAGlD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,CAAC,sFAAC;;AAG7B,QAAA,IAAA,CAAA,0BAA0B,GAAG,MAAM,CAAW,EAAE,iGAAC;;AAGjD,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CAAW,EAAE,kGAAC;QAEvC,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC;YACpC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAC1E,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,EAAE;YAClF,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,4BAA4B,EAAE;AACrF,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;QAEiB,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC;AACrC,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE;YAChD,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7D,YAAA,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE;YACzC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;YACtD,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AAChD,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;AACjC,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,uFAChG;AACkB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAA2B,QAAQ,oFAAC;AACnE,QAAA,IAAA,CAAA,gBAAgB,GAAG,SAAS,CAAC,4BAA4B,uFAAC;;;AAMjD,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;YAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;AAC3E,QAAA,CAAC,mFAAC;;;AAMF,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,MAAK;YAC5B,MAAM,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE;YACvD,IAAI,kBAAkB,EAAE;AACtB,gBAAA,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAAC;YACjD;AACF,QAAA,CAAC,sFAAC;AAEF,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,MAAK;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;YACrC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,SAAS,CAAC;AACpD,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,qFAAC;AAkmBH,IAAA;;;AA9mBC,IAAA,eAAe;AAOf,IAAA,cAAc;;;AAWL,IAAA,MAAM,QAAQ,GAAA;QACrB,KAAK,CAAC,QAAQ,EAAE;;;AAGhB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;QAC7C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;AAClD,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC1B,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI;cAC9D,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE;cAC5E,EAAE,CACP;QAED,MAAM,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,cAAc,CAAC;QACxE,MAAM,WAAW,GAAG,uBAAuB,CAAC,YAAY,IAAI,MAAM,CAAC;AACnE,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAA+B,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC;AAEhC,QAAA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAC9E,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAChC,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM;YAClC,EAAE,EAAE,EAAE,CAAC,EAAE;AACT,YAAA,KAAK,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAW;SAChD,CAAC,CAAC,CACJ;AACD,QAAA,MAAM,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAE5C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAE5C,IAAI,WAAW,EAAE;YACf,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;gBAChC,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC1C,gBAAA,MAAM,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;YACxD;AACA,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACvC;aAAO;YACL,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAW;gBAChD,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,CAAC,CAAC;QACJ;QAEA,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,MAAM,KAAI;AACzD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE;gBAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACzC,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC;wBACtB,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAEhG,IAAI,cAAc,EAAE;oBAClB,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC;AAChD,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;gBAC9B;qBAAO;AACL,oBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;gBACxB;YACF;AACF,QAAA,CAAC,CAAC;IACJ;;;IAMQ,MAAM,aAAa,CAAC,WAAmB,EAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE;YACxB,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YACzC,IAAI,CAAC,gBAAgB,GAAG,WAAW,EAAE,EAAE,IAAI,IAAI;QACjD;AAEA,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE;AACpD,QAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;AAClE,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,2BAA2B,EAAE;AAC1D,QAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;AAEnD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;AAC/E,YAAA,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,IAAI,SAAS,CAAC;AAC/G,YAAA,IAAI,kBAAkB,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;AAClD,YAAA,IAAI,gBAAgB,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC;AACjD,SAAA,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACzC,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS;eACtC,WAAW,EAAE,QAAQ,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS;AAC9D,eAAG,WAAW,EAAE,EAAE,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS,CAAC;AAE3D,QAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,EAAE,eAAe;AACrB,YAAA,QAAQ,EAAE,iBAAiB;AAC5B,SAAA,CAAC;IACJ;;IAGU,MAAM,4BAA4B,CAAC,OAAyB,EAAA;AACpE,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAAC;QACvE,MAAM,eAAe,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,EAAE,KAAK,CAAC;AAC3E,QAAA,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,eAAe,CAAC;AAErD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE;AAC7E,YAAA,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,eAAe,CAAC;AACpD,YAAA,MAAM,IAAI,CAAC,6BAA6B,CAAC,eAAe,CAAC;AACzD,YAAA,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAC9B,CAAC,CAAC,KACA,CAAC,CAAC,KAAK,KAAK,KAAK;gBACjB,CAAC,CAAC,KAAK,KAAK,OAAO;gBACnB,CAAC,CAAC,KAAK,KAAK,UAAU;AACtB,gBAAA,CAAC,CAAC,KAAK,KAAK,gBAAgB,CAC/B;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC;AACvC,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC;QACF;AAEA,QAAA,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AACxD,QAAA,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC;QAC5D,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;QAC9E,MAAM,SAAS,GAAG,WAAW,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;AACpF,QAAA,MAAM,WAAW,GAAG,OAAO,IAAI,SAAS;AAExC,QAAA,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC;QAClE,MAAM,aAAa,GAAG,cAAc,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,KAAK;AAC1F,QAAA,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAExC,MAAM,WAAW,GAA4B,EAAE;AAC/C,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,IACE,MAAM,CAAC,KAAK;gBACZ,MAAM,CAAC,KAAK,KAAK,KAAK;gBACtB,MAAM,CAAC,KAAK,KAAK,OAAO;gBACxB,MAAM,CAAC,KAAK,KAAK,UAAU;gBAC3B,MAAM,CAAC,KAAK,KAAK,gBAAgB;gBACjC,MAAM,CAAC,KAAK,IAAI,IAAI;AACpB,gBAAA,MAAM,CAAC,KAAK,KAAK,EAAE,EACnB;gBACA,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK;YAC1C;QACF;AACA,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC;QAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QACjD,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AACA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAChE,MAAM,OAAO,GAAG;AACd,cAAE,CAAA,EAAG,GAAG,CAAA,OAAA,EAAU,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA;AACvE,cAAE,CAAA,EAAG,GAAG,CAAA,OAAA,EAAU,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE;QAE/D,MAAM,aAAa,GAAG,CAAC,GAAW,KAAa,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpF,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAClD,QAAA,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC;AACzC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;AACrE,QAAA,MAAM,aAAa,GACjB,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;QACzF,IAAI,WAAW,KAAK,UAAU,IAAI,aAAa,KAAK,WAAW,EAAE;YAC/D,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE;AACpC,gBAAA,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,IAAI,IAAI,EAAE;AAC5C,gBAAA,mBAAmB,EAAE,OAAO;AAC7B,aAAA,CAAC;QACJ;AAEA,QAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;AACnD,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,EAAE;AACrF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;QACvC;AAAO,aAAA,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;AACzC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC;oBACtB,WAAW,EAAE,QAAQ,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,GAAG,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;YAEhG,IAAI,cAAc,EAAE;gBAClB,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,cAAc,CAAC;AAChD,gBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC9B;iBAAO;AACL,gBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;YACxB;QACF;IACF;AAGA,IAAA,aAAa,CAAC,CAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC;IACpC;AAGA,IAAA,eAAe,CAAC,CAAQ,EAAA;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC;AAEU,IAAA,sBAAsB,CAAC,QAAgB,EAAA;QAC/C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAClB,CAAC,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAA,OAAA,EAAU,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC,EAC3G;YACE,WAAW,EAAE,WAAW;AACxB,YAAA,mBAAmB,EAAE,OAAO;AAC7B,SAAA,CACF;IACH;;;AAMA;;;AAGG;IACK,MAAM,iCAAiC,CAAC,QAAgB,EAAA;QAC9D,MAAM,YAAY,GAAG,8BAA8B,CAAC,IAAI,CAAC,cAAc,CAAC;AACxE,QAAA,IAAI,YAAY,KAAK,MAAM,EAAE;YAC3B;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,wBAAwB,EAAE;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY;QAChC,IAAI,CAAC,MAAM,EAAE,QAAQ,IAAI,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE;YACrD;QACF;AAEA,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAChF,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;QAE1C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI;QACjD,IAAI,CAAC,GAAG,EAAE;YACR;QACF;AACA,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACxB,CAAC,CAAA,EAAG,GAAG,CAAA,OAAA,EAAU,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAC,EACjF,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAChE;IACH;AAEQ,IAAA,MAAM,wBAAwB,GAAA;AACpC,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;YAC9B;QACF;QACA,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC;AACjD,SAAA,CAAC;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;QAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;QACxC,IAAI,CAAC,YAAY,GAAG;YAClB,QAAQ;YACR,MAAM;YACN,QAAQ,EAAE,QAAQ,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,IAAI,QAAQ,KAAK,MAAM;SAClE;IACH;AAEQ,IAAA,MAAM,SAAS,GAAA;AACrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAChE,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,WAAW;QAE5D,IAAI,QAAQ,EAAE;YACZ,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC1C,YAAA,MAAM,IAAI,CAAC,iCAAiC,CAAC,QAAQ,CAAC;QACxD;aAAO;;AAEL,YAAA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AAC7D,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CACxB;oBACE,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAA,OAAA,EAAU,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA,CAAA,EACzF,IAAI,CAAC,MAAM,CAAC,EACd,CAAA,CAAE;iBACH,EACD;AACE,oBAAA,UAAU,EAAE,IAAI;oBAChB,WAAW,EAAE,WAAW;AACxB,oBAAA,mBAAmB,EAAE,OAAO;AAC7B,iBAAA,CACF;YACH;QACF;;QAEA,IAAI,CAAC,SAAS,EAAE;IAClB;AAEA;;AAEG;IACK,MAAM,6BAA6B,CAAC,eAAyB,EAAA;QACnE,MAAM,WAAW,GAA0B,EAAE;QAE7C,WAAW,CAAC,IAAI,CAAC;AACf,YAAA,KAAK,EAAE,KAAK;AACZ,YAAA,KAAK,EAAE,iDAAiD;AACxD,YAAA,IAAI,EAAE,8BAA8B;AACpC,YAAA,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;YACjC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7C,SAAA,CAAC;AAEF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,EAAE;AAChD,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,WAAW,CAAC,IAAI,CAAC;AACf,gBAAA,KAAK,EAAE,gBAAgB;AACvB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,gBAAA,KAAK,EAAE,wDAAwD;AAC/D,gBAAA,IAAI,EAAE,wBAAwB;AAC9B,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,EAAE,eAAe;AACrB,oBAAA,OAAO,EAAE;AACP,wBAAA,UAAU,EAAE,OAAO;AACnB,wBAAA,UAAU,EAAE,IAAI;AAChB,wBAAA,SAAS,EAAE,OAAO;AACnB,qBAAA;AACF,iBAAA;gBACD,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAC7C,aAAA,CAAC;QACJ;QAEA,WAAW,CAAC,IAAI,CAAC;AACf,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC9B,YAAA,KAAK,EAAE,gDAAgD;AACvD,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,MAAM,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;YACjC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAC7C,SAAA,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACzD,mDAAmD,CACpD;AACD,QAAA,MAAM,kBAAkB,GAAG;AACzB,YAAA,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE;YAChC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;SACxD;QACD,WAAW,CAAC,IAAI,CAAC;AACf,YAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3B,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,KAAK,EAAE,oDAAoD;AAC3D,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,MAAM,EAAE;AACN,gBAAA,IAAI,EAAE,2BAA2B;AACjC,gBAAA,OAAO,EAAE;AACP,oBAAA,UAAU,EAAE,kBAAkB;AAC9B,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE,OAAO;AACnB,iBAAA;AACF,aAAA;YACD,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;AAC7C,SAAA,CAAC;AAEF,QAAA,MAAM,cAAc,GAClB,eAAe,CAAC,MAAM,GAAG;cACrB,MAAM,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,eAAe;cAC/D,EAAE;AAER,QAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;YAClC,WAAW,CAAC,IAAI,CAAC;gBACf,KAAK,EAAE,KAAK,CAAC,UAAU;AACvB,gBAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,UAAU,CAAyB,EAAE;gBAC9F,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC;AACjD,gBAAA,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC;AACpD,oBAAA,OAAO,EAAE,KAAK,CAAC,aAAa,IAAI,EAAE;AACnC,iBAAA;AACD,gBAAA,UAAU,EAAE;AACV,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,MAAM,EAAE,KAAK;AACd,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC;IACjD;;AAIA;;AAEG;AACK,IAAA,iBAAiB,CAAC,KAAc,EAAA;QACtC,IAAI,CAAC,GAAG,KAAK;QACb,OAAO,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE;AAC9E,YAAA,CAAC,GAAI,CAA6B,CAAC,OAAO,CAAC;QAC7C;AACA,QAAA,OAAO,CAAC;IACV;AAEQ,IAAA,wBAAwB,CAAC,KAAc,EAAA;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AACzB,YAAA,OAAO,EAAE;QACX;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAC9D;AACA,QAAA,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB;IAEQ,eAAe,CAAC,CAAW,EAAE,CAAW,EAAA;QAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE;AACzB,YAAA,OAAO,KAAK;QACd;QACA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;AACxB,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C;;;AAKQ,IAAA,uBAAuB,CAAC,UAAkB,EAAA;QAChD,QAAQ,UAAU;AAChB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,eAAe;AACxB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,eAAe;AACxB,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,aAAa;AACtB,YAAA,KAAK,aAAa;AAClB,YAAA,KAAK,mBAAmB;AACxB,YAAA;AACE,gBAAA,OAAO,eAAe;;IAE5B;;AAGQ,IAAA,2BAA2B,CAAC,UAAkB,EAAA;QACpD,QAAQ,UAAU;AAChB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,OAAO;AAChB,YAAA,KAAK,aAAa;AAClB,YAAA,KAAK,mBAAmB;AACxB,YAAA;AACE,gBAAA,OAAO,UAAU;;IAEvB;;AAGQ,IAAA,oBAAoB,CAAC,UAAkB,EAAA;QAC7C,QAAQ,UAAU;AAChB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,YAAY;AACrB,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,SAAS;AAClB,YAAA,KAAK,kBAAkB;AACrB,gBAAA,OAAO,aAAa;AACtB,YAAA;AACE,gBAAA,OAAO,SAAS;;IAEtB;;;AAMS,IAAA,MAAM,mBAAmB,GAAA;AAChC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,EAAE;YACtC,OAAO;AACL,gBAAA;AACE,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,KAAK,EAAE,qCAAqC;AAC5C,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AACjC,iBAAA;aACF;QACH;QACA,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;QAC1D,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;QACnD,OAAO;AACL,YAAA;AACE,gBAAA,KAAK,EAAE,uCAAuC;AAC9C,gBAAA,IAAI,EAAE,kBAAkB;AACxB,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,KAAK,EAAE,YAAY;AACpB,aAAA;SACF;IACH;AAES,IAAA,MAAM,qBAAqB,GAAA;AAClC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,EAAE;YACtC,OAAO;AACL,gBAAA;AACE,oBAAA,IAAI,EAAE,QAAQ;AACd,oBAAA,KAAK,EAAE,+BAA+B;AACtC,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,KAAK,EAAE,QAAQ;AACf,oBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;AACjC,iBAAA;aACF;QACH;AACA,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE;IAC3C;AAES,IAAA,MAAM,YAAY,GAAA;AACzB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACzC,+BAA+B,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAsB,CAAC,CAAA,MAAA,CAAQ,CACrG;QACH;QACA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,EAAE;IAC5C;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE;AAC3C,QAAA,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AACvE,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CACzC,CAAA,4BAAA,EAA+B,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAsB,CAAC,cAAc,EAC1G;AACE,YAAA,MAAM,EAAE;gBACN,KAAK;AACL,gBAAA,IAAI,EAAE,aAAa;AACpB,aAAA;AACF,SAAA,CACF;IACH;IAES,aAAa,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;aACpE;QACH;AACA,QAAA,OAAO,IAAI;IACb;IAES,iBAAiB,GAAA;AACxB,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE;AAC3B,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE;QACxB;IACF;AAES,IAAA,MAAM,kBAAkB,GAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO;AACL,gBAAA;AACE,oBAAA,KAAK,EAAE,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAC/C,CAAA,4BAAA,EAA+B,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAsB,CAAC,QAAQ,CACrG;AACF,iBAAA;aACF;QACH;QAEA,MAAM,WAAW,GAAwB,EAAE;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE;YACrB,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,IAAI,CAAC,EAAE;gBACb,KAAK,EAAE,IAAI,CAAC,IAAI;AAChB,gBAAA,OAAO,EAAE;AACP,sBAAE;AACF,sBAAE;AACE,wBAAA,IAAI,EAAE,oBAAoB;AAC1B,wBAAA,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;AAC/B,qBAAA;AACN,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,WAAW;IACpB;IAES,MAAM,OAAO,CAAC,OAA0B,EAAA;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,GAAG,UAAU,CAAW;AACxD,QAAA,QAAQ,OAAO,CAAC,IAAI;AAClB,YAAA,KAAK,aAAa;gBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;AACrC,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC;oBACpE,IAAI,OAAO,EAAE;AACX,wBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;oBACnB;gBACF;gBACA;AACF,YAAA,KAAK,oBAAoB;gBACvB,IAAI,QAAQ,EAAE;AACZ,oBAAA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;gBACpC;gBACA;AACF,YAAA,KAAK,YAAY;gBACf,IAAI,QAAQ,EAAE;oBACZ,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC;AACxD,oBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;gBACnB;gBACA;AACF,YAAA,KAAK,cAAc;gBACjB,IAAI,QAAQ,EAAE;oBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE;oBACtC,MAAM,KAAK,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE;oBAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACtE,oBAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBAC9D;gBACF;gBACA;AACF,YAAA;gBACE,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACtC,oBAAA,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC;AACzF,oBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE;gBACnB;gBACA;;IAEN;8GAzrBW,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,0BAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,SAAA,EARzB;YACT,4BAA4B;AAC5B,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,yBAAyB;AACvC,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAiEsC,4BAA4B,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1KrE,ggKAyHA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDI,YAAY,8BACZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA;;gBAEZ,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,IAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,oBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,8BACnB,sBAAsB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACtB,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAChB,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAI,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,2BAAA,EAAA,QAAA,EAAA,8IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACjB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,aAAa,8BACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACZ,gBAAgB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;AAEhB,gBAAA,sBAAsB,4DACtB,4BAA4B,EAAA,QAAA,EAAA,qfAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA;;gBAE5B,4BAA4B,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC5B,uCAAuC,EAAA,QAAA,EAAA,oCAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvC,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,IAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAM,IAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAYf,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxCrC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAGlB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,YAAY;;wBAEZ,YAAY;wBACZ,cAAc;wBACd,mBAAmB;wBACnB,sBAAsB;wBACtB,gBAAgB;wBAChB,mBAAmB;wBACnB,iBAAiB;wBACjB,eAAe;wBACf,mBAAmB;wBACnB,aAAa;wBACb,cAAc;wBACd,YAAY;wBACZ,gBAAgB;;wBAEhB,sBAAsB;wBACtB,4BAA4B;;wBAE5B,4BAA4B;wBAC5B,uCAAuC;wBACvC,wBAAwB;AACzB,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,iBAChC,iBAAiB,CAAC,IAAI,EAAA,SAAA,EAC1B;wBACT,4BAA4B;AAC5B,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAA,yBAA2B;AACvC,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,ggKAAA,EAAA;kGAiEsC,4BAA4B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA;sBAiNlE,YAAY;uBAAC,0BAA0B,EAAE,CAAC,QAAQ,CAAC;;sBAKnD,YAAY;uBAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC;;;;;;;;AEhYpD;;AAEG;;;;"}
1
+ {"version":3,"file":"acorex-modules-document-management.mjs","sources":["../../../../libs/modules/document-management/src/lib/const.ts","../../../../libs/modules/document-management/src/lib/manifest.ts","../../../../libs/modules/document-management/src/lib/features.keys.ts","../../../../libs/modules/document-management/src/lib/feature-definition.provider.ts","../../../../libs/modules/document-management/src/lib/permission.keys.ts","../../../../libs/modules/document-management/src/lib/permission-definition.provider.ts","../../../../libs/modules/document-management/src/lib/menu.keys.ts","../../../../libs/modules/document-management/src/lib/menu.provider.ts","../../../../libs/modules/document-management/src/lib/entity.provider.ts","../../../../libs/modules/document-management/src/lib/search-command.provider.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/image.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/video.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/document.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/audio.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/archive.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/providers/code.file.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-column.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-designer.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-edit.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-view.component.ts","../../../../libs/modules/document-management/src/lib/features/file-type/widgets/file-type-extension/file-type-extension-widget.config.ts","../../../../libs/modules/document-management/src/lib/features/file-type/file-type.module.ts","../../../../libs/modules/document-management/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget.config.ts","../../../../libs/modules/document-management/src/lib/features/drive/widgets/file-type-filter/document-file-type-filter-widget-edit.component.ts","../../../../libs/modules/document-management/src/lib/widget-definition.provider.ts","../../../../libs/modules/document-management/src/lib/entities/document/document.entity.ts","../../../../libs/modules/document-management/src/lib/entities/document/document.types.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.entity.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.service.ts","../../../../libs/modules/document-management/src/lib/entities/document-type/document-type.module.ts","../../../../libs/modules/document-management/src/lib/entities/folder/folder.entity.ts","../../../../libs/modules/document-management/src/lib/entities/index.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-management.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-metadata-schema.util.ts","../../../../libs/modules/document-management/src/lib/document-metadata-ocr.settings.keys.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-metadata-ai-prefill.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/services/document-dialog.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/services/document-attachments.service.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-manager.service.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/settings.keys.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.viewmodel.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/document-explorer.component.html","../../../../libs/modules/document-management/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.ts","../../../../libs/modules/document-management/src/lib/features/shared/components/folder-path-breadcrumbs/folder-path-breadcrumbs.component.html","../../../../libs/modules/document-management/src/lib/features/drive-choose/slots/file-uploader-widget-extension/upload-from-drive.hook.ts","../../../../libs/modules/document-management/src/lib/features/drive-choose/drive-choose.module.ts","../../../../libs/modules/document-management/src/lib/features/workflow/upload/upload.workflow.ts","../../../../libs/modules/document-management/src/lib/features/document-plugin/document.plugin.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.ts","../../../../libs/modules/document-management/src/lib/features/document-explorer/views/detail-panel/detail-panel.component.html","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.ts","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page.component.html","../../../../libs/modules/document-management/src/lib/features/document-plugin/document-drive-page/document-drive-page-component.provider.ts","../../../../libs/modules/document-management/src/lib/features/shared/attachments-upload.middleware.ts","../../../../libs/modules/document-management/src/lib/settings.provider.ts","../../../../libs/modules/document-management/src/lib/features/shared/document-file-uploader.widget.plugin.ts","../../../../libs/modules/document-management/src/lib/document-management.module.ts","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.ts","../../../../libs/modules/document-management/src/lib/features/drive/drive.component.html","../../../../libs/modules/document-management/src/acorex-modules-document-management.ts"],"sourcesContent":["const config = {\n i18n: 'document-management',\n};\nexport const RootConfig = {\n config,\n module: {\n module: 'DocumentManagement',\n name: 'DocumentManagement',\n title: `@${config.i18n}:module.title`,\n icon: 'fa-light fa-books',\n },\n entities: {\n folder: {\n name: 'Folder',\n title: `@${config.i18n}:entities.folder.title`,\n titlePlural: `@${config.i18n}:entities.folder.title-plural`,\n icon: 'fa-light fa-folder',\n },\n document: {\n name: 'Document',\n title: `@${config.i18n}:entities.document.title`,\n titlePlural: `@${config.i18n}:entities.document.title-plural`,\n icon: 'fa-light fa-file',\n },\n documentType: {\n name: 'DocumentType',\n title: `@${config.i18n}:entities.document-type.title`,\n titlePlural: `@${config.i18n}:entities.document-type.title-plural`,\n icon: 'fa-light fa-books',\n },\n documentShortcut: {\n name: 'DocumentShortcut',\n title: `@${config.i18n}:entities.document-shortcut.title`,\n titlePlural: `@${config.i18n}:entities.document-shortcut.title-plural`,\n icon: 'fa-light fa-up-right-from-square',\n },\n },\n};\n","//#region ---- Imports ----\n\nimport { AXPModuleManifest } from '@acorex/platform/core';\nimport { RootConfig } from './const';\n\n//#endregion\n\n//#region ---- Manifest Definition ----\n\n/**\n * Document Management Module Manifest.\n * Defines module metadata, features, and provider references.\n */\nexport const DocumentManagementManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n\n // Module dependencies\n dependencies: ['DataManagement'],\n};\n\n//#endregion\n\n","export const AXPDocumentManagementFeatureKeys = {\n MaxSizeStorage: 'DocumentManagement:Feature:max-size-storage',\n} as const;\n","//#region ---- Imports ----\n\nimport {\n AXPFeatureDefinitionProvider,\n AXPFeatureDefinitionProviderContext,\n} from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport { AXPDocumentManagementFeatureKeys } from './features.keys';\n\n//#endregion\n\n//#region ---- Feature Definition Provider ----\n\n/**\n * Document Management Feature Definition Provider.\n * Provides feature definitions for the Document Management module.\n */\n@Injectable()\nexport class AXPDocumentManagementFeatureDefinitionProvider implements AXPFeatureDefinitionProvider {\n async provide(context: AXPFeatureDefinitionProviderContext): Promise<void> {\n // Max Size Storage feature\n context.addFeature(AXPDocumentManagementFeatureKeys.MaxSizeStorage, {\n title: '@document-management:features.max-size-storage.title',\n description: '@document-management:features.max-size-storage.description',\n defaultValue: 1073741824, // 1GB in bytes (default)\n type: 'number',\n interface: {\n type: 'number-editor',\n options: {\n min: 1048576, // 1MB minimum\n max: 1099511627776, // 1TB maximum\n step: 1048576, // 1MB step\n },\n },\n });\n //\n }\n}\n\n//#endregion\n","export const AXMPermissionsKeys = {\n DocumentManagement: {\n Management: 'DocumentManagement:Permission:Management',\n DocumentType: {\n Management: 'DocumentManagement:Permission:DocumentType.Management',\n View: 'DocumentManagement:Permission:DocumentType.View',\n Edit: 'DocumentManagement:Permission:DocumentType.Edit',\n Delete: 'DocumentManagement:Permission:DocumentType.Delete',\n Create: 'DocumentManagement:Permission:DocumentType.Create',\n },\n Driver: {\n Management: 'DocumentManagement:Permission:Driver.Management',\n View: 'DocumentManagement:Permission:Driver.View',\n Edit: 'DocumentManagement:Permission:Driver.Edit',\n Delete: 'DocumentManagement:Permission:Driver.Delete',\n Create: 'DocumentManagement:Permission:Driver.Create',\n },\n },\n};\n","import { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPermissionDefinitionProvider, AXPPermissionDefinitionProviderContext } from '@acorex/platform/auth';\nimport { Injectable, Injector } from '@angular/core';\nimport { AXMPermissionsKeys } from './permission.keys';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMPermissionDefinitionProvider implements AXPPermissionDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {\n }\n\n\n async define(context: AXPPermissionDefinitionProviderContext): Promise<void> {\n\n const trans = async (key: string) => await this.translateService.translateAsync(`@document-management:permissions.${key}`);\n\n const keys = AXMPermissionsKeys.DocumentManagement;\n\n context.addGroup(RootConfig.module.name, await trans('manage.title'), await trans('manage.description'))\n // \n .addPermission(keys.DocumentType.Management, await trans('document-type.manage.title'), await trans('document-type.manage.description'))\n .addChild(keys.DocumentType.View, await trans('document-type.view.title'), await trans('document-type.view.description'))\n .addChild(keys.DocumentType.Edit, await trans('document-type.edit.title'), await trans('document-type.edit.description'))\n .addChild(keys.DocumentType.Delete, await trans('document-type.delete.title'), await trans('document-type.delete.description'))\n .addChild(keys.DocumentType.Create, await trans('document-type.create.title'), await trans('document-type.create.description'))\n .endPermission()\n //\n .addPermission(keys.Driver.Management, await trans('driver.manage.title'), await trans('driver.manage.description'))\n .addChild(keys.Driver.View, await trans('driver.view.title'), await trans('driver.view.description'))\n .addChild(keys.Driver.Edit, await trans('driver.edit.title'), await trans('driver.edit.description'))\n .addChild(keys.Driver.Delete, await trans('driver.delete.title'), await trans('driver.delete.description'))\n .addChild(keys.Driver.Create, await trans('driver.create.title'), await trans('driver.create.description'))\n .endPermission()\n //\n\n }\n}\n","export const AXPDocumentManagementMenuKeys = {\n DocumentTypes: 'document-management:menu:document-types',\n TenantDrive: 'document-management:drive:tenant',\n UserDrive: 'document-management:drive:user',\n} as const;\n\n","import { AXPCommonMenuKeys } from '@acorex/modules/common';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex/platform/common';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { RootConfig } from './const';\nimport { AXPDocumentManagementMenuKeys } from './menu.keys';\nimport { AXMPermissionsKeys } from './permission.keys';\n\n@Injectable()\nexport class AXMMenuProvider implements AXPMenuProvider {\n private entityService = inject(AXPEntityService);\n private sessionService = inject(AXPSessionService);\n\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const isAuthorized = await firstValueFrom(this.sessionService.isAuthorized$);\n if (!isAuthorized) {\n return;\n }\n\n const module = RootConfig.module;\n const appName = this.sessionService.application?.name;\n const scope = RootConfig.config.i18n;\n\n // My Drive: root level, after Task Board (priority 1)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.UserDrive,\n priority: 1,\n text: `@${scope}:menus.my-drive.title`,\n icon: 'fa-light fa-folder-open',\n path: `${appName}/drive/user`,\n data: { scope: 'user' },\n policy: {\n features: [module.name],\n },\n },\n ]);\n\n // Tenant Documents: root under MODULES section (priority 9001)\n context.addItems([\n {\n name: AXPDocumentManagementMenuKeys.TenantDrive,\n priority: 9001,\n text: `@${scope}:menus.tenant-documents.title`,\n icon: RootConfig.entities.document.icon,\n path: `${appName}/drive/tenant`,\n data: { scope: 'tenant' },\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.DocumentManagement.Driver.Management],\n },\n },\n ]);\n\n // Documents group under Configuration/Data and Content\n context.find(AXPCommonMenuKeys.DataAndContent).addItems([\n {\n name: AXPDocumentManagementMenuKeys.DocumentTypes,\n text: RootConfig.entities.documentType.title,\n path: this.entityService.createPath(module.name, RootConfig.entities.documentType.name),\n icon: RootConfig.entities.documentType.icon,\n priority: 1,\n policy: {\n features: [module.name],\n permissions: [AXMPermissionsKeys.DocumentManagement.DocumentType.Management],\n },\n },\n ]);\n }\n}\n","import { AXPEntity } from '@acorex/platform/common';\nimport {\n AXPEntityDefinitionLoader,\n AXPEntityDefinitionPreloader,\n AXPEntityPreloadEntity,\n} from '@acorex/platform/layout/entity';\nimport { Injectable, Injector, inject } from '@angular/core';\nimport { RootConfig } from './const';\n\n@Injectable()\nexport class AXMEntityProvider implements AXPEntityDefinitionLoader, AXPEntityDefinitionPreloader {\n private injector = inject(Injector);\n\n public preload(): AXPEntityPreloadEntity[] {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity: any) => ({\n module: module,\n entity: entity.name,\n }));\n }\n\n async get(moduleName: string, entityName: string): Promise<AXPEntity | null> {\n if (moduleName === RootConfig.module.name) {\n switch (entityName) {\n case RootConfig.entities.documentType.name:\n return (await import('./entities')).documentTypeFactory(this.injector);\n case RootConfig.entities.documentShortcut.name:\n return (await import('./entities/document-shortcut/document-shortcut.entity')).documentShortcutEntityFactory(\n this.injector,\n );\n case RootConfig.entities.folder.name:\n return (await import('./entities/folder/folder.entity')).folderEntityFactory(this.injector);\n case RootConfig.entities.document.name:\n return (await import('./entities/document/document.entity')).documentEntityFactory(this.injector);\n }\n }\n return null;\n }\n\n async list(): Promise<{ name: string; module: string }[]> {\n const m = RootConfig.module.name;\n const entities = [RootConfig.entities.documentType, RootConfig.entities.documentShortcut] as { name: string }[];\n return Promise.resolve(entities.map((e) => ({ name: e.name, module: m })));\n }\n}\n","import { AXPSearchCommandProvider, createEntitySearchCommand } from '@acorex/platform/common';\nimport { RootConfig } from './const';\n\nexport class AXMSearchCommandProvider extends AXPSearchCommandProvider {\n commands = [\n createEntitySearchCommand({\n id: 'create-document-type',\n entityKey: `${RootConfig.module.name}.${RootConfig.entities.documentType.name}`,\n entityInfo: { name: RootConfig.entities.documentType.name, module: RootConfig.module.name, title: RootConfig.entities.documentType.title },\n titleKey: '@document-management:permissions.document-type.create.title',\n descriptionKey: '@document-management:permissions.document-type.create.description',\n icon: RootConfig.entities.documentType.icon,\n }),\n ];\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\n\nexport class AXMImageFileTypeProvider implements AXPFileTypeInfoProvider {\n\n\n\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'image',\n title: 'Image',\n icon: 'fa-light fa-image ax-text-purple-500',\n extensions: [\n {\n name: 'jpg',\n title: 'JPEG',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [],\n },\n {\n name: 'png',\n title: 'PNG',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [],\n },\n {\n name: 'gif',\n title: 'GIF',\n icon: 'fa-light fa-image ax-text-purple-500',\n meta: [\n {\n name: 'duration',\n title: 'Duration',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {\n validations: [\n {\n rule: \"required\"\n }\n ]\n },\n path: 'gift.duration',\n };\n },\n },\n ],\n },\n ],\n meta: [\n {\n name: 'width',\n title: 'Width',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {\n validations: [\n {\n rule: \"required\"\n }\n ]\n },\n path: 'image.width',\n };\n },\n },\n {\n name: 'height',\n title: 'Height',\n interface: async () => {\n return {\n type: AXPWidgetsCatalog.text,\n options: {},\n path: 'image.height',\n };\n },\n },\n ],\n },\n ];\n }\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMVideoFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'video',\n title: 'Video',\n icon: 'fa-light fa-video ax-text-red-500',\n extensions: [\n {\n name: 'mp4',\n title: 'MP4',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n {\n name: 'avi',\n title: 'AVI',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n {\n name: 'mkv',\n title: 'MKV',\n icon: 'fa-light fa-video ax-text-red-500',\n meta: [],\n },\n ],\n },\n ];\n }\n}\n","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMDocumentFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'document',\n title: 'Document',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n extensions: [\n {\n name: 'pdf',\n title: 'PDF',\n icon: 'fa-light fa-file-pdf ax-text-red-600',\n meta: [],\n },\n {\n name: 'doc',\n title: 'Word',\n icon: 'fa-light fa-file-word ax-text-blue-700',\n meta: [],\n },\n {\n name: 'docx',\n title: 'Word',\n icon: 'fa-light fa-file-word ax-text-blue-700',\n meta: [],\n },\n {\n name: 'xls',\n title: 'Excel',\n icon: 'fa-light fa-file-excel ax-text-green-700',\n meta: [],\n },\n {\n name: 'xlsx',\n title: 'Excel',\n icon: 'fa-light fa-file-excel ax-text-green-700',\n meta: [],\n },\n {\n name: 'ppt',\n title: 'PowerPoint',\n icon: 'fa-light fa-file-powerpoint ax-text-orange-700',\n meta: [],\n },\n {\n name: 'pptx',\n title: 'PowerPoint',\n icon: 'fa-light fa-file-powerpoint ax-text-orange-700',\n meta: [],\n },\n {\n name: 'txt',\n title: 'Text',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n meta: [],\n },\n {\n name: 'rtf',\n title: 'Rich Text',\n icon: 'fa-light fa-file-lines ax-text-blue-600',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMAudioFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'audio',\n title: 'Audio',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n extensions: [\n {\n name: 'mp3',\n title: 'MP3',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'wav',\n title: 'WAV',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'ogg',\n title: 'OGG',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'm4a',\n title: 'M4A',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n {\n name: 'flac',\n title: 'FLAC',\n icon: 'fa-light fa-file-audio ax-text-green-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMArchiveFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'archive',\n title: 'Archive',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n extensions: [\n {\n name: 'zip',\n title: 'ZIP',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'rar',\n title: 'RAR',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: '7z',\n title: '7-Zip',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'tar',\n title: 'TAR',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n {\n name: 'gz',\n title: 'GZIP',\n icon: 'fa-light fa-file-zipper ax-text-orange-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPFileTypeInfoProvider, AXPFileType } from '@acorex/platform/common';\n\nexport class AXMCodeFileTypeProvider implements AXPFileTypeInfoProvider {\n async items(): Promise<AXPFileType[]> {\n return [\n {\n name: 'code',\n title: 'Code',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n extensions: [\n {\n name: 'js',\n title: 'JavaScript',\n icon: 'fa-light fa-file-code ax-text-yellow-500',\n meta: [],\n },\n {\n name: 'ts',\n title: 'TypeScript',\n icon: 'fa-light fa-file-code ax-text-blue-600',\n meta: [],\n },\n {\n name: 'html',\n title: 'HTML',\n icon: 'fa-light fa-file-code ax-text-orange-600',\n meta: [],\n },\n {\n name: 'css',\n title: 'CSS',\n icon: 'fa-light fa-file-code ax-text-pink-500',\n meta: [],\n },\n {\n name: 'json',\n title: 'JSON',\n icon: 'fa-light fa-file-code ax-text-green-500',\n meta: [],\n },\n {\n name: 'xml',\n title: 'XML',\n icon: 'fa-light fa-file-code ax-text-green-500',\n meta: [],\n },\n {\n name: 'py',\n title: 'Python',\n icon: 'fa-light fa-file-code ax-text-yellow-500',\n meta: [],\n },\n {\n name: 'java',\n title: 'Java',\n icon: 'fa-light fa-file-code ax-text-red-500',\n meta: [],\n },\n {\n name: 'cpp',\n title: 'C++',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n meta: [],\n },\n {\n name: 'cs',\n title: 'C#',\n icon: 'fa-light fa-file-code ax-text-blue-500',\n meta: [],\n },\n ],\n },\n ];\n }\n} ","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetColumnComponent extends AXPValueWidgetComponent<any> { }\n","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetDesignerComponent extends AXPValueWidgetComponent<any> { }\n","import { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXCollapseModule } from '@acorex/components/collapse';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXPFileType, AXPFileTypeProviderService } from '@acorex/platform/common';\nimport {\n AXPValueWidgetComponent,\n AXPWidgetCoreModule,\n AXPWidgetNode,\n} from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport get from 'lodash-es/get';\nimport set from 'lodash-es/set';\nimport { AXPContextChangeEvent } from '@acorex/platform/core';\n\n@Component({\n template: ` <div>\n <ax-select-box\n #dd\n [dataSource]=\"dataSource\"\n valueField=\"name\"\n textField=\"title\"\n [multiple]=\"true\"\n [ngModel]=\"getValue()?.selectedItems\"\n (onValueChanged)=\"handleValueChange($event)\"\n >\n </ax-select-box>\n <div class=\"ax-py-3\"></div>\n <axp-widgets-container (onContextChanged)=\"handleOnContextChange($event)\" [context]=\"context()\">\n @if (selectedItemsNotEmpty().length > 0) {\n <ax-collapse-group look=\"fill\">\n @for (item of selectedItemsNotEmpty(); track item.name) {\n <!-- File Types -->\n <ax-collapse [caption]=\"item.title\">\n <div class=\"ax-flex ax-flex-col ax-gap-5\">\n @if (item.meta && item.meta.length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-text [textContent]=\"'Global Meta Data'\" class=\"ax-font-bold ax-text-sm\"></ax-text>\n @for (metaFile of item.meta; track metaFile.name) {\n <!-- File Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(metaFile)\">{{ metaFile.title }}</ax-label>\n <ng-container axp-widget-renderer [node]=\"getNode(metaFile)\" [mode]=\"'edit'\"></ng-container>\n </ax-form-field>\n }\n </div>\n }\n @if (item.extensions && item.extensions.length > 0) {\n <div class=\"ax-flex ax-flex-col ax-gap-3\">\n @for (ext of item.extensions; track ext.name) {\n <!-- Extensions -->\n @if (ext.meta && ext.meta.length > 0) {\n <ax-text [textContent]=\"ext.title\" class=\"ax-font-bold ax-text-sm\"></ax-text>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n @for (extMeta of ext.meta; track $index) {\n <!-- Extension Meta Data -->\n <ax-form-field>\n <ax-label [required]=\"filedIsRequired(extMeta)\">{{ extMeta.title }}</ax-label>\n <ng-container\n axp-widget-renderer\n [node]=\"getNode(extMeta)\"\n [mode]=\"'edit'\"\n ></ng-container>\n </ax-form-field>\n }\n </div>\n }\n <!-- End Extension Meta Data -->\n }\n </div>\n <!-- End Extensions -->\n }\n </div>\n </ax-collapse>\n }\n <!-- End File Types -->\n </ax-collapse-group>\n }\n </axp-widgets-container>\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXSelectBoxModule,\n FormsModule,\n AXFormModule,\n AXLabelModule,\n AXDecoratorModule,\n AXPWidgetCoreModule,\n AXCollapseModule,\n ],\n inputs: [],\n})\nexport class AXMFileTypeExtensionWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected fileTypeService = inject(AXPFileTypeProviderService);\n protected dataSource = new AXDataSource<unknown>({\n load: async (_) => {\n try {\n const res = await this.fileTypeService.items();\n const types = res\n .map((item) => {\n const { meta, extensions, ...rest } = item;\n return extensions.map((ext) => {\n const { meta, ...extRest } = ext;\n return {\n ...rest,\n ...extRest,\n name: `${item.name}.${ext.name}`,\n title: `${item.title}/${ext.title}`,\n };\n });\n })\n .flat();\n\n return {\n items: types,\n total: types.length,\n };\n } catch (e) {\n console.log(e);\n }\n return {\n items: [],\n total: 0,\n };\n },\n pageSize: 100,\n });\n\n public selectedItems = signal<AXPFileType[]>(this.getValue()?.selectedItems ?? []);\n public selectedItemsNotEmpty = signal<AXPFileType[]>(\n this.selectedItems().filter((item) => this.hasFields(item)),\n );\n public context = signal<any>(this.getValue()?.context ?? {});\n\n override ngOnInit() {\n super.ngOnInit();\n this.selectedItems.set(this.getValue()?.selectedItems ?? []);\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n this.context.set(this.getValue()?.context ?? {});\n }\n\n protected override outputs(): string[] {\n return ['selectedItems', 'context'];\n }\n\n protected handleOnContextChange(e: AXPContextChangeEvent) {\n this.context.set(e.data);\n this.setValue({ ...this.getValue(), context: e.data });\n }\n\n protected async handleValueChange(e: AXValueChangedEvent) {\n const selectItems = (e.component as AXSelectBoxComponent).selectedItems as AXPFileType[];\n this.setValue({ ...this.getValue(), selectedItems: selectItems });\n\n const result: { [key: string]: AXPFileType } = {};\n for (const item of selectItems) {\n const type = item.name.split('.')[0];\n const ext = item.name.split('.')[1];\n var fileType = await this.fileTypeService.get(type);\n if (fileType != undefined) {\n const extension = fileType.extensions.find((extension) => extension.name == ext) || { name: ext, title: '' };\n if (extension.meta) {\n for (const meta of extension.meta) {\n if (!get(meta, '__node__')) {\n set(meta, '__node__', typeof meta.interface == 'function' ? await meta.interface() : meta.interface);\n }\n }\n }\n if (fileType.meta) {\n for (const meta of fileType.meta) {\n if (!get(meta, '__node__')) {\n set(meta, '__node__', typeof meta.interface == 'function' ? await meta.interface() : meta.interface);\n }\n }\n }\n if (result[type]) {\n result[type] = {\n ...fileType,\n extensions: [...result[type].extensions, extension],\n };\n } else {\n result[type] = {\n ...fileType,\n extensions: [extension],\n };\n }\n }\n }\n\n this.selectedItems.set(Object.values(result));\n\n this.selectedItemsNotEmpty.set(this.selectedItems().filter((item) => this.hasFields(item)));\n console.log(this.selectedItemsNotEmpty());\n }\n\n protected getNode(meta: any): AXPWidgetNode {\n return get(meta, '__node__');\n }\n\n protected filedIsRequired(meta: any): boolean {\n const node = get(meta, '__node__');\n if (node && node.options && node.options.validations) {\n return node.options.validations.some((validation: any) => validation.rule === 'required');\n }\n return false;\n }\n\n protected hasMetaInExtensions(extensions: any[]): boolean {\n return extensions.some((ext) => ext.meta && ext.meta.length > 0);\n }\n\n protected hasFields(item: AXPFileType): boolean {\n // Check if item has global meta fields\n if (item.meta && item.meta.length > 0) {\n return true;\n }\n\n // Check if any extension has meta fields\n if (item.extensions && item.extensions.length > 0) {\n return this.hasMetaInExtensions(item.extensions);\n }\n return false;\n }\n}\n","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\n\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n template: ``,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [],\n inputs: ['rawValue'],\n})\nexport class AXMFileTypeExtensionWidgetViewComponent extends AXPValueWidgetComponent<any> { }\n","import { AXP_WIDGETS_ADVANCE_CATEGORY, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXmFileTypeExtensionWidget: AXPWidgetConfig = {\n name: 'file-type-extension',\n title: 'File Type Extension',\n description: 'Uploads and manages files',\n icon: 'fa-light fa-files',\n categories: AXP_WIDGETS_ADVANCE_CATEGORY,\n type: 'editor',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],\n components: {\n view: {\n component: () =>\n import('./file-type-extension-view.component').then((c) => c.AXMFileTypeExtensionWidgetViewComponent),\n },\n edit: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n // filter: {\n // component: () => import('./file-type-extension-filter.component').then((c) => c.AXPFileBoxWidgetFilterComponent),\n // },\n column: {\n component: () =>\n import('./file-type-extension-column.component').then((c) => c.AXMFileTypeExtensionWidgetColumnComponent),\n },\n // print: {\n // component: () => import('./file-type-extension-print.component').then((c) => c.AXPFileBoxWidgetPrintComponent),\n // },\n designer: {\n component: () =>\n import('./file-type-extension-edit.component').then((c) => c.AXMFileTypeExtensionWidgetEditComponent),\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n fileTypeExtension: 'file-type-extension';\n }\n}\n","import { AXP_FILE_TYPE_INFO_PROVIDER } from '@acorex/platform/common';\nimport { NgModule } from '@angular/core';\nimport {\n AXMArchiveFileTypeProvider,\n AXMAudioFileTypeProvider,\n AXMCodeFileTypeProvider,\n AXMDocumentFileTypeProvider,\n AXMImageFileTypeProvider,\n AXMVideoFileTypeProvider,\n} from './providers';\n\n@NgModule({\n providers: [\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMImageFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMVideoFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMDocumentFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMAudioFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMCodeFileTypeProvider,\n multi: true,\n },\n {\n provide: AXP_FILE_TYPE_INFO_PROVIDER,\n useClass: AXMArchiveFileTypeProvider,\n multi: true,\n },\n ],\n})\nexport class AXMFileTypeModule { } ","import { AXPWidgetConfig } from '@acorex/platform/layout/widget-core';\nimport { AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/layout/widgets';\n\nexport const AXmDocumentFileTypeFilterWidget: AXPWidgetConfig = {\n name: 'document-file-type-filter',\n title: 'File Type Filter',\n type: 'filter',\n icon: 'fa-light fa-file',\n properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],\n components: {\n edit: {\n component: () =>\n import('./document-file-type-filter-widget-edit.component').then(\n (c) => c.AXmDocumentFileTypeFilterWidgetEditComponent,\n ),\n },\n },\n};\n\ndeclare module '@acorex/platform/layout/widget-core' {\n interface AXPWidgetTypesMap {\n documentFileTypeFilter: 'document-file-type-filter';\n }\n}\n","import { AXDataSource, AXValueChangedEvent } from '@acorex/cdk/common';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXSelectBoxComponent, AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\ninterface FileTypeFilterItem {\n name: string;\n title: string;\n icon?: string;\n}\n\n@Component({\n template: `\n <div class=\"ax-flex ax-items-center ax-w-full\">\n <ax-select-box\n #selectBox\n class=\"ax-w-full\"\n textField=\"title\"\n valueField=\"name\"\n [placeholder]=\"('@general:actions.select.title' | translate | async) ?? ''\"\n [dataSource]=\"dataSource\"\n [ngModel]=\"value()\"\n (onValueChanged)=\"handleValueChange($event)\"\n [itemTemplate]=\"itemTemplate\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-select-box>\n <ng-template #itemTemplate let-context>\n @let item = context.data ?? context;\n <div class=\"ax-flex ax-items-center ax-gap-2 ax-w-full\">\n @if (item.icon) {\n <i [class]=\"item.icon\"></i>\n }\n <span class=\"ax-truncate\">{{ item.title }}</span>\n </div>\n </ng-template>\n </div>\n `,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, FormsModule, AXDecoratorModule, AXSelectBoxModule, AXTranslationModule],\n})\nexport class AXmDocumentFileTypeFilterWidgetEditComponent extends AXPValueWidgetComponent<any> {\n protected selectBox = viewChild<AXSelectBoxComponent>('selectBox');\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly translateService = inject(AXTranslationService);\n\n protected value = computed(() => this.getValue()?.value);\n\n protected handleValueChange(e: AXValueChangedEvent) {\n if (e.isUserInteraction) {\n this.setValue({\n value: e.value,\n operation: { type: 'equal' },\n });\n }\n }\n\n protected dataSource = new AXDataSource<FileTypeFilterItem>({\n load: async () => {\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const types = await this.fileTypeService.items();\n const items: FileTypeFilterItem[] = [\n { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' },\n ...types.map((t) => ({ name: t.name, title: t.title, icon: t.icon || 'fa-light fa-file' })),\n ];\n console.log('[DocumentFileTypeFilter] load items', items);\n return { items, total: items.length };\n },\n byKey: async (id: unknown) => {\n const key = String(id);\n if (key === 'all') {\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const allItem = { name: 'all', title: allTitle, icon: 'fa-light fa-folder-closed' };\n console.log('[DocumentFileTypeFilter] byKey all', allItem);\n return allItem;\n }\n const types = await this.fileTypeService.items();\n const found = types.find((t) => t.name === key);\n if (found) {\n const result = { name: found.name, title: found.title, icon: found.icon || 'fa-light fa-file' };\n console.log('[DocumentFileTypeFilter] byKey found', key, result);\n return result;\n }\n const fallback = { name: key, title: key, icon: 'fa-light fa-file' };\n console.log('[DocumentFileTypeFilter] byKey fallback', key, fallback);\n return fallback;\n },\n pageSize: 100,\n key: 'name',\n });\n\n focus(): void {\n this.selectBox()?.focus();\n }\n}\n","//#region ---- Imports ----\n\nimport { AXPWidgetDefinitionProvider } from '@acorex/platform/layout/widget-core';\nimport { Injectable } from '@angular/core';\nimport { AXmFileTypeExtensionWidget } from './features/file-type';\nimport { AXmDocumentFileTypeFilterWidget } from './features/drive/widgets/file-type-filter';\n//#endregion\n\n//#region ---- Document Management Widgets Provider ----\n\nconst DOCUMENT_WIDGETS = [AXmFileTypeExtensionWidget, AXmDocumentFileTypeFilterWidget];\n\n@Injectable()\nexport class AXMDocumentManagementWidgetsProvider implements AXPWidgetDefinitionProvider {\n getWidgets() {\n return DOCUMENT_WIDGETS;\n }\n}\n\n//#endregion\n","import { AXPEntity } from '@acorex/platform/common';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n/**\n * Minimal entity definition for Document so the entity registry can resolve\n * DocumentManagement.Document. Used by AXMDocumentService (AXMEntityCrudServiceImpl).\n * No list/form UI; documents are handled by document-explorer.\n */\nexport async function documentEntityFactory(_injector: Injector): Promise<AXPEntity | null> {\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.document.name,\n title: RootConfig.entities.document.title,\n parentKey: 'parentId',\n plugins: [{ name: 'workflow' }],\n formats: {\n individual: RootConfig.entities.document.title,\n plural: RootConfig.entities.document.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [],\n properties: [],\n };\n\n return entityDef;\n}\n","import { AXPEntityModel } from '@acorex/platform/layout/entity';\nimport { AXPFileListItem, AXPMetaData } from '@acorex/platform/core';\n\n/** Document lifecycle status (EDMS-style review workflow). */\nexport type AXMDocumentManagementDocumentStatus =\n | 'draft'\n | 'in-review'\n | 'approved'\n | 'rejected'\n | 'revision-requested';\n\n/** Status value constants for use in code. */\nexport const AXMDocumentManagementDocumentStatusValues = {\n Draft: 'draft' as const,\n InReview: 'in-review' as const,\n Approved: 'approved' as const,\n Rejected: 'rejected' as const,\n RevisionRequested: 'revision-requested' as const,\n} satisfies Record<string, AXMDocumentManagementDocumentStatus>;\n\nexport interface AXMDocumentDto extends AXPEntityModel<string> {\n name: string;\n title: string;\n documentType: AXMDocumentDocDto;\n parentId: string;\n fileInfo: AXPFileListItem;\n description?: string;\n expirationDate?: Date;\n statusId?: AXMDocumentManagementDocumentStatus;\n status?: { id: AXMDocumentManagementDocumentStatus; title?: string };\n version?: number;\n metaDataForm?: AXPMetaData;\n}\n\nexport interface AXMDocumentDocDto {\n id: string;\n name: string;\n title: string;\n}\n","import { AXPEntity, AXPEntityCommandScope, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nexport async function documentTypeFactory(injector: Injector): Promise<AXPEntity | null> {\n const i18n = RootConfig.config.i18n;\n\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.documentType.name,\n title: RootConfig.entities.documentType.title,\n formats: {\n individual: RootConfig.entities.documentType.title,\n plural: RootConfig.entities.documentType.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n plugins: [\n { name: 'history' },\n {\n name: 'meta-data-builder',\n options: {\n display: 'page',\n }\n },\n ],\n relatedEntities: [],\n groups: [\n {\n id: 'basic-info',\n title: RootConfig.entities.documentType.title,\n },\n {\n id: 'management',\n title: `@${i18n}:terms.common.management`,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'basic-info',\n options: {\n sort: {\n enabled: true,\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'basic-info',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'maxSize',\n title: `@${i18n}:terms.document.max-size`,\n groupId: 'basic-info',\n schema: {\n dataType: 'number',\n interface: {\n type: AXPWidgetsCatalog.numberUnit,\n options: {\n textField: 'name',\n valueField: 'value',\n dataSource: [\n {\n name: 'kb',\n value: 'KB',\n calUnit: 1,\n },\n {\n name: 'mb',\n value: 'MB',\n calUnit: 1024,\n },\n {\n name: 'gb',\n value: 'GB',\n calUnit: 1024 * 1024,\n },\n ],\n mainUnit: 'kb',\n },\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'isEncrypted',\n title: `@${i18n}:terms.document.is-encrypted`,\n groupId: 'basic-info',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'enableExpiration',\n title: `@${i18n}:terms.document.enable-expiration`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'requiresReview',\n title: `@${i18n}:terms.document.requires-review`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n },\n },\n },\n {\n name: 'enableVersioning',\n title: `@${i18n}:terms.document.enable-versioning`,\n groupId: 'management',\n schema: {\n dataType: 'boolean',\n interface: {\n type: AXPWidgetsCatalog.toggle,\n options: {\n disabled: '{{ !!context.eval(\"requiresReview\") }}',\n },\n triggers: [\n {\n event: \"{{ events.context('requiresReview') }}\",\n action: \"{{ context.set('enableVersioning', true) }}\",\n },\n ],\n },\n },\n },\n // {\n // name: 'meta',\n // title: `t(\"metaTitle\", { scope: \"${i18n}\" })`,\n // groupId: 'section',\n // schema: {\n // dataType: 'object',\n // interface: {\n // type: 'meta-selector-editor',\n // },\n // },\n // },\n {\n name: 'type',\n title: `@${i18n}:terms.common.type`,\n groupId: 'basic-info',\n schema: {\n dataType: 'object',\n interface: {\n type: AXPWidgetsCatalog.fileTypeExtension,\n options: {},\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'basic-info',\n },\n {\n id: 'management',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n // {\n // name: 'meta',\n // layout: {\n // positions: {\n // lg: {\n // colSpan: 12,\n // },\n // },\n // },\n // },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'basic-info',\n },\n {\n id: 'management',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'basic-info',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n {\n id: 'management',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'maxSize',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'isEncrypted',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableExpiration',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'requiresReview',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n {\n name: 'enableVersioning',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n },\n },\n },\n },\n // {\n // name: 'meta',\n // layout: {\n // positions: {\n // lg: {\n // colSpan: 12,\n // },\n // },\n // },\n // },\n {\n name: 'type',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions({ edit: true })],\n views: [createAllQueryView()],\n },\n },\n },\n };\n\n return entityDef;\n}\n","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentManagementDocumentTypeEntityModel } from './document-type.types';\n\nexport abstract class AXMDocumentTypeService extends AXMEntityCrudServiceImpl<\n string,\n AXMDocumentManagementDocumentTypeEntityModel\n> {\n}\n\n@Injectable()\nexport class AXMDocumentTypeServiceImpl extends AXMDocumentTypeService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.documentType.name}`);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { AXMDocumentTypeService, AXMDocumentTypeServiceImpl } from './document-type.service';\n\n@NgModule({\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMDocumentTypeService,\n useClass: AXMDocumentTypeServiceImpl,\n },\n ],\n})\nexport class AXMDocumentManagementDocumentTypeEntityModule {}\n","import { AXPEntity } from '@acorex/platform/common';\nimport { Injector } from '@angular/core';\nimport { RootConfig } from '../../const';\n\n/**\n * Minimal entity definition for Folder so the entity registry can resolve\n * DocumentManagement.Folder. Used by AXMFolderService (AXMEntityCrudServiceImpl).\n * No list/form UI; folder tree is handled by document-explorer.\n */\nexport async function folderEntityFactory(_injector: Injector): Promise<AXPEntity | null> {\n const entityDef: AXPEntity = {\n module: RootConfig.module.name,\n name: RootConfig.entities.folder.name,\n title: RootConfig.entities.folder.title,\n parentKey: 'parentId',\n formats: {\n individual: RootConfig.entities.folder.title,\n plural: RootConfig.entities.folder.titlePlural,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [],\n properties: [],\n };\n\n return entityDef;\n}\n","// Entity Services\nexport * from './document';\nexport * from './document-type';\nexport * from './folder';\nexport * from './document-shortcut/document-shortcut.types';\n\n// Entity Modules\nexport * from './document-type/document-type.module';\n","import { AXPPlatformScope } from '@acorex/platform/core';\nimport { Injectable } from '@angular/core';\nimport {\n AXMDocumentDto,\n AXMDocumentDocDto,\n AXMDocumentManagementFolderEntityModel,\n} from '../../entities';\nimport { AXMMetadataFieldInfo } from './document-manager.types';\n\n@Injectable()\nexport abstract class AXPDocumentManagementService {\n /**\n * Gets the root folder for the given scope.\n * Backend resolves tenant/user from request context (security: client sends only scope).\n */\n abstract getRoot(scope: AXPPlatformScope): Promise<AXMDocumentManagementFolderEntityModel>;\n\n /**\n * Gets (or creates) the folder bound to the given entity record.\n * Used by the document/EDMS plugin when viewing an entity single: loads the folder for that record.\n * @param refType Entity type (e.g. \"content-management.promotion\")\n * @param refId Entity record id\n * @returns The folder for this entity record\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<AXMDocumentManagementFolderEntityModel>;\n\n // Document methods\n abstract getDocumentPath(\n documentId: string,\n stopFolderId?: string,\n ): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n /**\n * Searches files under a folder tree.\n * When `options.metadataFilters` has entries, the implementation walks the full subtree, optionally\n * narrows by `searchTerm` on the file name, then matches each document's `metaDataForm` (filter key → stored field).\n * Otherwise only the file-name search is applied (recursive).\n */\n abstract searchFiles(\n searchTerm: string,\n rootFolderId: string,\n options?: { metadataFilters?: Record<string, unknown>; documentTypeIds?: string[] },\n ): Promise<AXMDocumentDto[]>;\n\n abstract findManyDocuments(ids: string[]): Promise<AXMDocumentDto[]>;\n\n // Folder methods\n abstract getFolderPath(folderId: string, stopFolderId?: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n abstract searchFolders(searchTerm: string, rootFolderId: string): Promise<AXMDocumentManagementFolderEntityModel[]>;\n\n // DocumentType methods\n abstract getDocumentTypeByName(name: string): Promise<AXMDocumentDocDto>;\n\n /**\n * Collects unique metadata field definitions across document types.\n * When `documentTypeIds` is omitted, the backend aggregates all types.\n * When `documentTypeIds` is an empty array, an empty list is returned (no types selected).\n * Otherwise only fields from the given document types are included (deduplicated by name).\n */\n abstract getUniqueMetadataDefinitions(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n}\n","//#region ---- Imports ----\n\nimport type { AXMMetaDataBuilderValue, AXMMetaDataLocalizedString } from '@acorex/modules/data-management';\n\n//#endregion\n\n//#region ---- Types ----\n\nexport interface DocumentMetadataFieldDescriptor {\n name: string;\n title: AXMMetaDataLocalizedString;\n interfaceType: string;\n}\n\n//#endregion\n\n//#region ---- Field collection ----\n\n/**\n * Flattens metadata selector value into field descriptors for LLM mapping prompts.\n */\nexport function collectMetadataFieldDescriptors(\n meta: AXMMetaDataBuilderValue | undefined | null,\n): DocumentMetadataFieldDescriptor[] {\n if (!meta?.groups?.length) {\n return [];\n }\n const out: DocumentMetadataFieldDescriptor[] = [];\n for (const g of meta.groups) {\n for (const f of g.fields ?? []) {\n out.push({\n name: f.name,\n title: f.title ?? f.name,\n interfaceType: f.interface,\n });\n }\n }\n return out;\n}\n\n//#endregion\n\n//#region ---- Prompt + JSON parsing ----\n\nexport const DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT =\n 'You are a precise assistant. Output only a single JSON object with string keys matching the requested field names. No markdown fences, no commentary.';\n\n/**\n * Builds the user message body for OCR → metadata JSON mapping.\n */\nexport function buildMetadataMappingUserPayload(ocrText: string, fields: DocumentMetadataFieldDescriptor[]): string {\n const lines = fields.map((x) => `- \"${x.name}\" (${x.title}) [widget: ${x.interfaceType}]`);\n return [\n 'You map document OCR text to metadata fields.',\n 'Reply with a single JSON object only. Keys must be exactly the \"name\" values listed below.',\n 'Use null for unknown or not found values. Do not invent unrelated keys.',\n '',\n 'Fields:',\n ...lines,\n '',\n 'OCR text:',\n ocrText,\n ].join('\\n');\n}\n\n/**\n * Parses a JSON object from an assistant reply (strips optional ```json fences).\n */\nexport function parseMetadataMappingJson(text: string): Record<string, unknown> {\n const trimmed = text.trim();\n const fence = /^```(?:json)?\\s*([\\s\\S]*?)```$/m.exec(trimmed);\n const raw = fence ? fence[1]!.trim() : trimmed;\n try {\n const parsed = JSON.parse(raw) as unknown;\n if (parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)) {\n return parsed as Record<string, unknown>;\n }\n } catch {\n // ignore\n }\n return {};\n}\n\n/**\n * Shallow merge: only fills keys that are empty in `existing`.\n */\nexport function mergeMetadataPrefill(\n existing: Record<string, unknown> | undefined,\n partial: Record<string, unknown>,\n): Record<string, unknown> {\n const base = { ...(existing ?? {}) };\n for (const [k, v] of Object.entries(partial)) {\n const cur = base[k];\n const empty = cur === undefined || cur === null || cur === '';\n if (empty && v !== undefined && v !== null && v !== '') {\n base[k] = v;\n }\n }\n return base;\n}\n\n//#endregion\n\n//#region ---- File kind ----\n\n/**\n * Returns true when the file list item is an image suitable for vision OCR.\n */\nexport function isImageFileListItem(item: { name?: string; type?: string } | undefined): boolean {\n if (!item) {\n return false;\n }\n const t = typeof item.type === 'string' ? item.type : '';\n if (t.startsWith('image/')) {\n return true;\n }\n const name = String(item.name ?? '');\n return /\\.(png|jpe?g|gif|webp|bmp|tif|tiff)$/i.test(name);\n}\n\n//#endregion\n","/**\n * Tenant settings for optional OCR-based metadata prefill on image uploads.\n */\nexport enum AXMDocumentMetadataOcrSettings {\n /** When true, image uploads may run OCR + mapping into metadata fields (when document type defines metadata). */\n Enabled = 'DocumentManagement:Setting:MetadataOcr.Enabled',\n /**\n * Optional assist primary key for OCR/mapping. When empty, {@link AXPAiManagementSettings.DefaultAssistId} is used.\n */\n AssistId = 'DocumentManagement:Setting:MetadataOcr.AssistId',\n}\n","//#region ---- Imports ----\n\nimport {\n AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY,\n AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY,\n AXPAiAssistChatModelCatalogService,\n AXPAiManagementSettings,\n axpAiChatTextMessage,\n type AXPAiChatModelListItem,\n type AXPAiChatTransport,\n} from '@acorex/modules/ai-management';\nimport type { AXMMetaDataBuilderValue } from '@acorex/modules/data-management';\nimport { AXPFileStorageService, AXPFileStorageStatus, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentMetadataOcrSettings } from '../../document-metadata-ocr.settings.keys';\nimport {\n DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT,\n buildMetadataMappingUserPayload,\n collectMetadataFieldDescriptors,\n mergeMetadataPrefill,\n parseMetadataMappingJson,\n} from './document-metadata-schema.util';\n\n//#endregion\n\nfunction toChatTransport(raw: string | undefined): AXPAiChatTransport {\n return String(raw ?? '').toLowerCase() === 'gemini' ? 'gemini' : 'openai';\n}\n\nfunction readSettingString(raw: unknown): string {\n if (typeof raw === 'string') {\n return raw.trim();\n }\n if (raw && typeof raw === 'object' && 'value' in raw && (raw as { value?: unknown }).value != null) {\n return String((raw as { value?: unknown }).value).trim();\n }\n return '';\n}\n\nfunction readSettingBool(raw: unknown): boolean {\n if (typeof raw === 'boolean') {\n return raw;\n }\n if (raw && typeof raw === 'object' && 'value' in raw) {\n const v = (raw as { value?: unknown }).value;\n return v === true || v === 'true';\n }\n return false;\n}\n\n//#region ---- Service ----\n\n/**\n * Runs vision OCR + text-only JSON mapping for document metadata prefill (image files).\n */\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentMetadataAiPrefillService {\n private readonly fileStorage = inject(AXPFileStorageService);\n private readonly modelCatalog = inject(AXPAiAssistChatModelCatalogService);\n private readonly commandService = inject(AXPCommandService);\n private readonly settings = inject(AXPSettingsService);\n\n /**\n * Whether OCR metadata prefill is enabled in tenant settings.\n * Defaults to true when the setting has never been stored (opt-out via settings UI).\n */\n async isMetadataOcrEnabled(): Promise<boolean> {\n const raw = await this.settings.get<unknown>(AXMDocumentMetadataOcrSettings.Enabled);\n if (raw === undefined || raw === null) {\n return true;\n }\n return readSettingBool(raw);\n }\n\n /**\n * Resolves assist id: document override, else AI default assist setting.\n */\n async resolveAssistIdForMetadataOcr(): Promise<string> {\n const doc = readSettingString(await this.settings.get<unknown>(AXMDocumentMetadataOcrSettings.AssistId));\n if (doc) {\n return doc;\n }\n return readSettingString(await this.settings.get<unknown>(AXPAiManagementSettings.DefaultAssistId));\n }\n\n /**\n * Uploads a blob-backed file item to storage for vision APIs that require {@link fileId}.\n */\n async ensureStoredFileId(fileItem: AXPFileListItem & { type?: string }, folderId: string): Promise<string | null> {\n const existing =\n fileItem.source?.kind === 'fileId' && typeof fileItem.source.value === 'string'\n ? fileItem.source.value.trim()\n : typeof fileItem.id === 'string'\n ? fileItem.id.trim()\n : '';\n if (existing) {\n return existing;\n }\n\n const file = this.resolveFileForUpload(fileItem);\n if (!file) {\n return null;\n }\n\n const refId = folderId?.trim() || 'document-metadata-ocr-prefill';\n const saved = await this.fileStorage.save({\n file,\n name: fileItem.name,\n refId,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n category: 'document',\n status: AXPFileStorageStatus.Temporary,\n });\n return saved.fileId?.trim() || null;\n }\n\n /**\n * OCR + structured mapping; returns merged metadata (only fills empty keys in {@link existingMeta}).\n */\n async prefillFromImageOcr(options: {\n fileItem: AXPFileListItem & { type?: string };\n folderId: string;\n metaDataList: AXMMetaDataBuilderValue | undefined | null;\n existingMeta: Record<string, unknown> | undefined;\n }): Promise<{ ocrText: string; merged: Record<string, unknown> }> {\n const fields = collectMetadataFieldDescriptors(options.metaDataList ?? undefined);\n if (fields.length === 0) {\n return { ocrText: '', merged: { ...(options.existingMeta ?? {}) } };\n }\n\n const assistId = await this.resolveAssistIdForMetadataOcr();\n if (!assistId) {\n throw new Error('No AI assist is configured for metadata OCR. Set Document Management or AI default assist.');\n }\n\n const models = await this.modelCatalog.listModels({ assistId });\n const model = this.pickChatModelForMetadataOcr(models);\n if (!model?.id) {\n throw new Error('No chat model is available for this assist. Configure models in AI Management.');\n }\n\n const chatTransport = toChatTransport(model.chatTransport);\n\n const fileId = await this.ensureStoredFileId(options.fileItem, options.folderId);\n if (!fileId) {\n throw new Error('Could not upload the file for OCR.');\n }\n\n const extractResult = await this.commandService.execute(AIMANAGEMENT_EXTRACT_DOCUMENT_TEXT_COMMAND_KEY, {\n fileId,\n assistId,\n chatTransport,\n modelEntityId: model.id,\n });\n if (extractResult == null || !extractResult.success || !extractResult.data) {\n const detail =\n extractResult != null && typeof extractResult.message?.text === 'string' && extractResult.message.text.trim()\n ? extractResult.message.text\n : 'Document text extraction failed.';\n throw new Error(detail);\n }\n const ocrText = extractResult.data.text;\n\n const userBody = buildMetadataMappingUserPayload(ocrText, fields);\n const structuredResult = await this.commandService.execute(AIMANAGEMENT_STRUCTURED_TEXT_COMPLETION_COMMAND_KEY, {\n assistId,\n modelEntityId: model.id,\n messages: [\n axpAiChatTextMessage('system', DOCUMENT_METADATA_MAPPING_SYSTEM_PROMPT),\n axpAiChatTextMessage('user', userBody),\n ],\n maxTokens: 2048,\n temperature: 0.1,\n });\n if (structuredResult == null || !structuredResult.success || !structuredResult.data) {\n const detail =\n structuredResult != null &&\n typeof structuredResult.message?.text === 'string' &&\n structuredResult.message.text.trim()\n ? structuredResult.message.text\n : 'Structured metadata mapping failed.';\n throw new Error(detail);\n }\n const assistantText = structuredResult.data.text;\n\n const parsed = parseMetadataMappingJson(assistantText);\n const merged = mergeMetadataPrefill(options.existingMeta, parsed);\n return { ocrText, merged };\n }\n\n //#region ---- Utility Methods ----\n\n /**\n * Prefers catalog model `gpt-5.4` (GPT-5.4) when present; otherwise first allowed model.\n */\n private pickChatModelForMetadataOcr(models: AXPAiChatModelListItem[]): AXPAiChatModelListItem | undefined {\n if (!models.length) {\n return undefined;\n }\n const preferredName = 'gpt-5.4';\n return (\n models.find(\n (m) =>\n String(m.name ?? '')\n .trim()\n .toLowerCase() === preferredName,\n ) ??\n models.find((m) => /gpt-5\\.4/i.test(String(m.title ?? ''))) ??\n models[0]\n );\n }\n\n private resolveFileForUpload(item: AXPFileListItem & { type?: string }): File | null {\n const v = item.source?.value;\n if (v instanceof File) {\n return v;\n }\n if (item.source?.kind === 'blob' && v instanceof Blob) {\n return new File([v], item.name, { type: item.type ?? v.type ?? 'application/octet-stream' });\n }\n return null;\n }\n\n //#endregion\n}\n\n//#endregion\n","import { Injectable, inject } from '@angular/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPContextData } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../../const';\nimport { AXMDocumentDto, AXMDocumentTypeService } from '../../../entities';\nimport { isImageFileListItem } from '../document-metadata-schema.util';\nimport { AXMDocumentMetadataAiPrefillService } from '../document-metadata-ai-prefill.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AXMDocumentDialogService {\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n private readonly metadataPrefill = inject(AXMDocumentMetadataAiPrefillService);\n\n async openAttachmentDialog(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }> {\n const { documentType, files, parentId, metaData, documentId, version, showMeta = true } = data ?? {};\n\n const accept = (documentType?.type?.selectedItems ?? [])\n .map((f: any) => `.${f.name.split('.')[1]}`)\n .join(',');\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n const editableMetaDataList =\n documentType?.metaDataList && (documentType.metaDataList as any).groups\n ? {\n ...documentType.metaDataList,\n groups: (documentType.metaDataList.groups ?? []).map((group: any) => ({\n ...group,\n fields: (group.fields ?? []).map((field: any) => ({\n ...field,\n mode: 'edit',\n })),\n })),\n }\n : { groups: [] };\n\n const hasMetaFields = (editableMetaDataList.groups ?? []).some((g: any) => (g.fields?.length ?? 0) > 0);\n const ocrFeatureEnabled = await this.metadataPrefill.isMetadataOcrEnabled();\n const hasImage = fileList.some((f) => isImageFileListItem(f));\n const showAiMetadataButton = !!showMeta && hasMetaFields && ocrFeatureEnabled && hasImage;\n\n // Build initial context for all files\n const initialContext: any = {};\n if (showMeta) {\n initialContext['file-0'] = {\n metaDataForm: metaData,\n ...(enableExpiration && metaData && (metaData as any).expirationDate != null\n ? { expirationDate: (metaData as any).expirationDate }\n : {}),\n };\n }\n // Initialize files array context with default values\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; isReviewSent?: boolean; fileIds?: string[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n if (showAiMetadataButton) {\n flex.formField('', (field) => {\n field.customWidget('document-metadata-ai-fill-button', {\n parentId: parentId ?? '',\n documentType,\n });\n });\n }\n\n // Add fields for each file dynamically\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n\n if (showMeta) {\n if (hasMetaFields) {\n // Bind meta-data-form-editor to file-${index}.metaDataForm so that\n // metaDataFormWithExpiration can read/write correctly.\n flex.formField('@document-management:terms.common.meta-data', (field) => {\n field.path(`file-${index}.metaDataForm`);\n field.customWidget('meta-data-form-editor', editableMetaDataList);\n });\n }\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n }\n\n flex.formField('@document-management:terms.common.file', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('file-uploader', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title');\n actions.submit('@general:actions.submit.title');\n })\n .setCloseButton(true)\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { data: { cancel: true } };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const metaDataFormWithExpiration = (context: any, fileIndex: number) => {\n const meta = context?.[`file-${fileIndex}`]?.['metaDataForm'];\n const exp = context?.[`file-${fileIndex}`]?.['expirationDate'];\n return { ...(meta || {}), ...(exp != null ? { expirationDate: exp } : {}) };\n };\n if (documentId) {\n dialogRef.setLoading(true);\n try {\n const updatePayload: any = { version: (version ?? 0) + 1 };\n if (showMeta) {\n const meta = metaDataFormWithExpiration(ctx as any, 0);\n updatePayload.metaDataForm = meta;\n if (meta?.expirationDate != null) {\n updatePayload.expirationDate = meta.expirationDate;\n }\n }\n await this.documentData.update(documentId, updatePayload);\n return {\n data: {\n cancel: false,\n fileIds: [documentId],\n },\n };\n } finally {\n dialogRef.setLoading(false);\n }\n }\n dialogRef.setLoading(true);\n try {\n const promises = (ctx?.['files'] as any[]).map<Promise<string>>(async (item: any, index: number) => {\n const f = fileList[index];\n const meta = metaDataFormWithExpiration(ctx as any, index);\n const newId = await this.documentData.create({\n fileInfo: f,\n name: f?.name,\n title: f?.title ?? f?.name,\n description: f?.description,\n documentType,\n parentId,\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n version: (version ?? 0) + 1,\n metaDataForm: meta,\n ...(meta?.expirationDate != null ? { expirationDate: meta.expirationDate } : {}),\n });\n return newId;\n });\n const fileIds = await Promise.all(promises);\n return {\n data: {\n cancel: false,\n fileIds,\n },\n };\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n return result;\n }\n\n async openAttachmentDialogWithoutSave(\n title: string,\n data: any,\n ): Promise<{ data?: { cancel?: boolean; files?: any[] } }> {\n const { documentType, files, parentId, metaData, documentId, showMeta = true } = data ?? {};\n\n const accept = (documentType?.type?.selectedItems ?? [])\n .map((f: any) => `.${f.name.split('.')[1]}`)\n .join(',');\n\n const fileList: any[] = Array.isArray(files) ? files : [];\n\n const enableExpiration = !!(documentType as { enableExpiration?: boolean })?.enableExpiration;\n\n /** Get metaDataForm from a file item (widget may store under meta or metaDataForm). */\n const getFileMeta = (item: any) =>\n item?.metaDataForm ?? (item?.meta && typeof item.meta === 'object' && !Array.isArray(item.meta) ? item.meta : undefined);\n\n const hasMetaFields = (documentType?.metaDataList?.groups ?? []).some((g: any) => (g.fields?.length ?? 0) > 0);\n const ocrFeatureEnabled = await this.metadataPrefill.isMetadataOcrEnabled();\n const hasImage = fileList.some((f) => isImageFileListItem(f));\n const showAiMetadataButton = !!showMeta && hasMetaFields && ocrFeatureEnabled && hasImage;\n\n // Build initial context for all files: each file-${index} gets that file's metaDataForm so form shows existing meta\n const initialContext: any = {};\n if (showMeta) {\n fileList.forEach((item, index) => {\n const fileMeta = getFileMeta(item) ?? metaData;\n initialContext[`file-${index}`] = {\n metaDataForm: fileMeta,\n ...(enableExpiration && fileMeta && (fileMeta as any).expirationDate != null\n ? { expirationDate: (fileMeta as any).expirationDate }\n : {}),\n };\n });\n if (fileList.length === 0) initialContext['file-0'] = { metaDataForm: metaData };\n }\n // Initialize files array context with default values\n initialContext['files'] = fileList.map((item) => ({ file: [item] }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ data?: { cancel?: boolean; files?: any[] } }>((dialog) => {\n dialog\n .setTitle(title)\n .setSize('md')\n .setContext(initialContext)\n .content((flex) => {\n flex.setDirection('column');\n\n if (showAiMetadataButton) {\n flex.formField('', (field) => {\n field.customWidget('document-metadata-ai-fill-button', {\n parentId: parentId ?? '',\n documentType,\n });\n });\n }\n\n // Add fields for each file dynamically\n for (let index = 0; index < fileList.length; index++) {\n const item = fileList[index];\n if (showMeta) {\n if (hasMetaFields) {\n flex.formField('@document-management:terms.common.meta-data', (field) => {\n field.path(`file-${index}.metaDataForm`);\n field.customWidget('meta-data-form-editor', documentType?.metaDataList ?? { groups: [] });\n });\n }\n if (enableExpiration) {\n flex.formField('@document-management:terms.document.expire-date', (field) => {\n field.path(`file-${index}.expirationDate`);\n field.dateTimeBox({});\n });\n }\n }\n\n flex.formField('File', (field) => {\n field.path(`files[${index}].file`);\n field.customWidget('file-uploader', {\n defaultValue: [item],\n fileEditable: false,\n readonly: true,\n accept,\n });\n });\n }\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return {\n data: {\n cancel: true,\n },\n };\n }\n const ctx = dialogRef.context() as AXPContextData & { files: any[] };\n const metaDataFormWithExpiration = (context: any, fileIndex: number) => {\n const meta = context?.[`file-${fileIndex}`]?.['metaDataForm'];\n const exp = context?.[`file-${fileIndex}`]?.['expirationDate'];\n return { ...(meta || {}), ...(exp != null ? { expirationDate: exp } : {}) };\n };\n const outFiles = (ctx?.['files'] as any[]).map((item: any, index: number) => ({\n ...item,\n ...(showMeta ? { metaDataForm: metaDataFormWithExpiration(ctx as any, index) } : {}),\n }));\n return { data: { cancel: false, files: outFiles } };\n });\n })\n .show();\n return result;\n }\n\n async chooseDocumentType(): Promise<{ cancelled: boolean; documentTypeId?: string }> {\n const res = await this.documentTypeService.query({ skip: 0, take: 100 });\n const items = (res?.items ?? []).map((x: any) => ({ value: x.id, text: x.title }));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<{ cancelled: boolean; documentTypeId?: string }>((dialog) => {\n dialog\n .setTitle('@document-management:dialogs.choose-document-type.title')\n .setContext({ documentTypeId: undefined })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@document-management:dialogs.choose-document-type.label', (field) => {\n field.path('documentTypeId');\n field.selectionList({ valueField: 'value', textField: 'text', dataSource: items });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.submit.title');\n })\n .onAction(async (dialogRef) => {\n const action = dialogRef.action();\n if (action === 'cancel') {\n return { cancelled: true };\n }\n const ctx = dialogRef.context() as any;\n return { cancelled: false, documentTypeId: ctx?.documentTypeId };\n });\n })\n .show();\n\n return result;\n }\n}\n","import { AXFileService } from '@acorex/core/file';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../../const';\nimport {\n AXMDocumentDocDto,\n AXMDocumentDto,\n AXMDocumentManagementDocumentTypeEntityModel,\n AXMDocumentTypeService,\n} from '../../../entities';\nimport { AXMDocumentDialogService } from './document-dialog.service';\nimport { AXTranslationService } from '@acorex/core/translation';\n\ninterface AttachmentOptions {\n multiple?: boolean;\n folderId?: string;\n entityId?: string;\n entityRecordId?: string;\n}\n\ninterface UpdateAttachmentOptions {\n entityId?: string;\n entityRecordId?: string;\n folderId?: string;\n}\n\ninterface PopupResult {\n data?: {\n cancel?: boolean;\n fileIds?: string[];\n };\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DocumentAttachmentsService {\n private readonly fileService = inject(AXFileService);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n private readonly entityService = inject(AXPEntityService);\n private readonly documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n private readonly documentDialog = inject(AXMDocumentDialogService);\n private readonly translateService = inject(AXTranslationService);\n\n async attachFile(\n fileType: string | AXMDocumentDocDto,\n options?: AttachmentOptions,\n ): Promise<boolean> {\n // Validate input data\n this.validateAttachmentOptions(options);\n\n const fileTypeEntity = await this.resolveFileType(fileType);\n const files = await this.chooseFiles(fileTypeEntity, options?.multiple);\n\n if (files.length === 0) {\n return false;\n }\n\n const popupData = {\n documentType: fileTypeEntity,\n files: this.mapFilesToFileListItems(files),\n parentId: options?.folderId ?? '',\n version: 0,\n };\n\n const title = await this.translateService.translateAsync('@document-management:dialogs.attach-file.title', {\n params: { title: fileTypeEntity.title },\n });\n const result = await this.documentDialog.openAttachmentDialog(\n title,\n popupData,\n );\n\n return this.handlePopupResult(result);\n }\n\n async updateAttachedFile(fileId: string, options?: UpdateAttachmentOptions): Promise<boolean> {\n const file = await this.documentData.byKey(fileId);\n if (!file) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(file.documentType);\n\n const popupData = {\n documentType: documentTypeEntity,\n files: [file.fileInfo],\n parentId: options?.folderId ?? '',\n metaData: file.metaDataForm,\n documentId: fileId,\n version: file.version,\n };\n\n const result = await this.documentDialog.openAttachmentDialog(`Edit ${file.name}`, popupData);\n\n return this.handlePopupResult(result);\n }\n\n /**\n * Upload a new version for an existing document. Lets user choose a new file, edit metadata, and updates the document\n * with incremented version number while keeping the same document identity.\n */\n async uploadNewVersion(fileId: string): Promise<boolean> {\n const document = await this.documentData.byKey(fileId);\n if (!document) {\n throw new Error('File not found');\n }\n\n const documentTypeEntity = await this.resolveFileType(document.documentType);\n\n // Choose a single new file based on document type constraints\n const files = await this.chooseFiles(documentTypeEntity, false);\n if (!files || files.length === 0) {\n return false;\n }\n\n const mapped = this.mapFilesToFileListItems(files);\n\n // Open a lightweight dialog to edit metadata (no auto-save); then apply update with new file\n const result = await this.documentDialog.openAttachmentDialogWithoutSave(\n '@document-management:dialogs.manage-version.upload-new-version',\n {\n documentType: documentTypeEntity,\n files: mapped,\n parentId: document.parentId,\n metaData: document.metaDataForm,\n showMeta: false,\n },\n );\n\n if (result?.data?.cancel) {\n return false;\n }\n\n // When metadata is hidden, do not change it\n const metaDataForm = document.metaDataForm;\n const newName = files[0]?.name ?? document.name;\n\n await this.documentData.update(fileId, {\n fileInfo: mapped[0],\n version: (document.version ?? 0) + 1,\n metaDataForm,\n name: newName,\n title: newName,\n });\n\n return true;\n }\n\n private validateAttachmentOptions(options?: AttachmentOptions): void {\n if (!((options?.entityId && options?.entityRecordId) || options?.folderId)) {\n throw new Error('You must provide either both entityId and entityRecordId, or folderId.');\n }\n }\n\n private async resolveFileType(\n fileType: string | AXMDocumentDocDto,\n ): Promise<AXMDocumentManagementDocumentTypeEntityModel> {\n const id = typeof fileType === 'string' ? fileType : fileType.id;\n const entity = await this.documentTypeService.getOne(id);\n if (!entity) {\n throw new Error(`Document type not found: ${id}`);\n }\n return entity;\n }\n\n private async chooseFiles(\n fileTypeEntity: AXMDocumentManagementDocumentTypeEntityModel,\n multiple?: boolean,\n ): Promise<File[]> {\n const selectedItems = fileTypeEntity.type?.selectedItems ?? [];\n const acceptTypes = selectedItems.map((item) => `.${item.name.split('.')[1]}`).join(',');\n\n return await this.fileService.choose({\n multiple: multiple ?? false,\n accept: acceptTypes,\n });\n }\n\n private mapFilesToFileListItems(files: File[]): AXPFileListItem[] {\n return files.map<AXPFileListItem>((file) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'attached',\n source: {\n kind: 'blob',\n value: file,\n },\n }));\n }\n\n // moved to AXMDocumentDialogService\n\n private async handlePopupResult(result: PopupResult): Promise<boolean> {\n if (result?.data?.cancel) {\n return false;\n }\n\n return true;\n }\n}\n","//#region ---- Imports ----\n\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXMediaViewerData } from '@acorex/components/media-viewer';\nimport { AXPopupService } from '@acorex/components/popup';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileStorageInfo, AXPFileStorageService, AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { AXPDialogRef, AXPLayoutBuilderService, IWidgetBuilder } from '@acorex/platform/layout/builder';\nimport { AXPCommandService } from '@acorex/platform/runtime';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\n\nimport { AXFileService } from '@acorex/core/file';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPFileListItem, AXPHookService, AXPPlatformScope, AXPQueryRequest } from '@acorex/platform/core';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { castArray } from 'lodash-es';\nimport {\n AXMDocumentDto,\n AXMDocumentManagementFolderCreateDto,\n AXMDocumentManagementFolderEntityModel,\n AXMDocumentShortcutEntityModel,\n AXMDocumentTypeService,\n} from '../../entities';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMMetadataFieldInfo,\n AXMNodeType,\n CreateFileDto,\n UpdateFileDto,\n UpdateFolderDto,\n} from './document-manager.types';\nimport { DocumentAttachmentsService } from './services/document-attachments.service';\n//#endregion\n\n//#region ---- Contract (Abstract Service) ----\n\n/**\n * Contract for document drive service. Inject this token; implementation is provided by the module.\n */\n@Injectable()\nexport abstract class AXMDocumentManagerService {\n // Scope management\n abstract scope(scope: AXPPlatformScope): ScopedDriveService;\n\n // Root and folder operations\n abstract getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n /**\n * Gets (or creates) the folder for the given entity record and returns it as explorer root.\n * Used by the document plugin when viewing an entity single.\n */\n abstract getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }>;\n abstract createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFolder(folderId: string): Promise<void>;\n abstract getAvailableSpace(): Promise<number>;\n\n // File operations\n abstract createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode>;\n abstract deleteFile(fileId: string): Promise<void>;\n\n // Node operations\n abstract deleteNodes(nodeIds: AXMDocumentExplorerNode[]): Promise<void>;\n abstract copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode>;\n\n /** Creates a shortcut to a document or folder in the given folder. */\n abstract createShortcut(\n targetId: string,\n targetType: 'file' | 'folder',\n folderId: string,\n options?: { nameOverride?: string },\n ): Promise<AXMDocumentExplorerNode>;\n /** Deletes a shortcut by its node id (shortcut entity id). */\n abstract deleteShortcut(shortcutId: string): Promise<void>;\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n * Returns true if a shortcut was created, false if cancelled.\n */\n abstract createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean>;\n\n // Dialog operations\n abstract showCreateFolderDialog(\n parentId?: string,\n options?: { allowedDocumentTypeNames?: string[] },\n ): Promise<AXMDocumentExplorerNode | null>;\n abstract getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]>;\n abstract showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean>;\n abstract showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined>;\n\n // Search operations\n abstract searchFolders(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]>;\n abstract searchFiles(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]>;\n abstract searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]>;\n\n /** Collects unique metadata fields; pass ids to limit to those document types. */\n abstract getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]>;\n\n // File browsing and actions\n abstract showChooseFileDialog(root: string): Promise<AXMDocumentExplorerNode[]>;\n abstract moveTo(options: {\n node: AXMDocumentExplorerNode;\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean>;\n abstract copyTo(options: {\n node: AXMDocumentExplorerNode;\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean>;\n abstract showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: { index?: number; folderVirtualFiles?: AXMDocumentExplorerNode[] },\n ): Promise<void>;\n abstract openFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n /** Returns nodes that are supported by the gallery (image/pdf extensions). */\n abstract getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[];\n\n // Data retrieval\n abstract getAllFolders(): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]>;\n abstract getAllNodes(): Promise<AXMDocumentExplorerNode[]>;\n abstract downloadFile(node: AXMDocumentExplorerNode): Promise<void>;\n\n // Sharing and collaboration\n abstract showShareDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLinkDialog(node: AXMDocumentExplorerNode): Promise<void>;\n abstract showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode>;\n\n // Upload and versioning\n abstract uploadFileByType(folderId: string, docTypeId: string): Promise<boolean>;\n abstract updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean>;\n abstract showVersionHistory(node: AXMDocumentExplorerNode): Promise<void>;\n}\n\n//#endregion\n\n//#region ---- Service Implementation ----\n\n/**\n * Default implementation of document drive service.\n */\n@Injectable()\nexport class AXMDocumentManagerServiceImpl extends AXMDocumentManagerService {\n //#region ---- Services & Dependencies ----\n\n protected sessionService = inject(AXPSessionService);\n protected entityService = inject(AXPEntityService);\n protected folderData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.folder.name)\n .data<string, AXMDocumentManagementFolderEntityModel, AXMDocumentManagementFolderEntityModel>();\n protected documentData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n protected shortcutData = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.documentShortcut.name)\n .data<string, AXMDocumentShortcutEntityModel, AXMDocumentShortcutEntityModel>();\n protected documentTypeService = inject(AXMDocumentTypeService);\n protected documentManagementService = inject(AXPDocumentManagementService);\n protected popupService = inject(AXPopupService);\n protected dialogService = inject(AXDialogService);\n protected fileService = inject(AXPFileStorageService);\n protected fileManagerService = inject(AXFileService);\n protected commandService = inject(AXPCommandService);\n protected workflow = inject(AXPWorkflowService);\n protected translate = inject(AXTranslationService);\n protected layoutBuilder = inject(AXPLayoutBuilderService);\n\n protected attachmentsService = inject(DocumentAttachmentsService);\n\n protected filterMiddlewareService = inject(AXPFilterOperatorMiddlewareService);\n\n protected hooks = inject(AXPHookService, { optional: true });\n\n //#endregion\n\n //#region ---- Private Properties ----\n\n private scopedDriveCache: Map<AXPPlatformScope, ScopedDriveService> = new Map();\n private buildPathCache: Map<string, Promise<AXMDocumentExplorerNode[]>> = new Map();\n\n //#endregion\n\n //#region ---- Scope Management Methods ----\n\n /**\n * Creates a scoped drive service for the specified platform scope.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\n scope(scope: AXPPlatformScope): ScopedDriveService {\n if (!this.scopedDriveCache.has(scope)) {\n this.scopedDriveCache.set(scope, new ScopedDriveService(this, scope));\n }\n return this.scopedDriveCache.get(scope)!;\n }\n\n //#endregion\n\n //#region ---- Mapping Methods ----\n\n /**\n * Maps folder entity to document explorer node\n */\n private mapFolderDtoToFolderNode = (folder: AXMDocumentManagementFolderEntityModel): AXMDocumentExplorerNode => {\n return {\n id: folder.id!,\n name: this.translate.resolve(folder.title),\n type: 'folder',\n parentId: folder.parentId || null,\n modifiedAt: (folder as any)?.updated?.at,\n createdAt: (folder as any)?.created?.at,\n description: folder.description != null ? this.translate.resolve(folder.description) : undefined,\n childrenCount: folder.childrenCount,\n size: folder.size,\n documentTypes: folder.documentTypes || [],\n storageType: 'physical',\n inherit: folder.inherit,\n children: [\n ...(folder.folders?.map(this.mapFolderDtoToFolderNode) || []),\n ...(folder.documents?.map(this.mapFileToNode) || []),\n ...(folder.shortcuts?.map(this.mapShortcutToNode) || []),\n ],\n };\n };\n\n /**\n * Maps file entity to document explorer node\n */\n private mapFileToNode(file: AXMDocumentDto): AXMDocumentExplorerNode {\n const expirationDate =\n file.expirationDate ?? (file.metaDataForm as Record<string, unknown> | undefined)?.['expirationDate'];\n const toDate = (v: unknown): Date | undefined => {\n if (v == null) return undefined;\n if (v instanceof Date) return v;\n if (typeof v === 'string') {\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? undefined : d;\n }\n if (typeof v === 'number') {\n const d = new Date(v);\n return Number.isNaN(d.getTime()) ? undefined : d;\n }\n return undefined;\n };\n const node: AXMDocumentExplorerNode = {\n id: file.id!,\n name: file.name,\n type: 'file',\n parentId: file.parentId,\n modifiedAt: (file as any)?.updated?.at,\n createdAt: (file as any)?.created?.at,\n size: (file.fileInfo as AXPFileListItem | undefined)?.size ?? 0,\n fileId: file.fileInfo,\n storageType: 'physical',\n metaDataForm: file.metaDataForm ?? undefined,\n documentTypes: file.documentType ? [file.documentType] : [],\n expirationDate: toDate(expirationDate),\n };\n return node;\n }\n\n /**\n * Maps shortcut entity to document explorer node.\n * Uses minimal data from shortcut itself; target-specific details are resolved by operations when needed.\n */\n private mapShortcutToNode = (shortcut: AXMDocumentShortcutEntityModel): AXMDocumentExplorerNode => {\n const isFolderShortcut = typeof shortcut.targetFolderId === 'string' && !!shortcut.targetFolderId;\n return {\n id: shortcut.id!,\n name: shortcut.name ?? '',\n description: shortcut.description,\n type: isFolderShortcut ? 'folder' : 'file',\n parentId: shortcut.folderId,\n storageType: 'shortcut',\n size: 0,\n documentTypes: [],\n isShortcut: true,\n targetDocumentId: shortcut.targetDocumentId,\n targetFolderId: shortcut.targetFolderId,\n children: [],\n };\n };\n\n /**\n * Maps document to media viewer data\n */\n private async mapDocumentToMediaViewerData(\n doc: AXMDocumentDto | AXMDocumentExplorerNode,\n fileInfosMap?: Map<string, AXPFileStorageInfo>,\n ): Promise<AXMediaViewerData> {\n const f = (doc as { fileInfo?: unknown; fileId?: unknown }).fileInfo ?? (doc as { fileId?: unknown }).fileId;\n const fileIdStr =\n f == null\n ? undefined\n : typeof f === 'string'\n ? f\n : (f as { source?: { kind?: string; value?: unknown }; id?: string }).source?.kind === 'fileId' &&\n typeof (f as { source?: { value?: unknown } }).source?.value === 'string'\n ? (f as { source: { value: string } }).source.value\n : typeof (f as { id?: string }).id === 'string'\n ? (f as { id: string }).id\n : undefined;\n if (fileIdStr) {\n let fileInfo: AXPFileStorageInfo | undefined;\n if (fileInfosMap) {\n fileInfo = fileInfosMap.get(fileIdStr);\n } else {\n fileInfo = await this.fileService.getInfo(fileIdStr);\n }\n const resolvedSize = fileInfo?.size ?? (doc as any)?.fileId?.size ?? 0;\n return {\n id: doc.id ?? '',\n name: doc.name,\n type: doc.name.endsWith('.pdf') ? 'pdf' : 'image',\n url: fileInfo?.url ?? '',\n size: resolvedSize.toString(),\n thumbnailUrl: fileInfo?.url ?? '',\n };\n }\n\n const fallbackUrl =\n (doc as any)?.fileId?.source?.kind === 'url' && typeof (doc as any).fileId.source.value === 'string'\n ? ((doc as any).fileId.source.value as string)\n : '';\n const fallbackSize = ((doc as any)?.fileId?.size as number | undefined) ?? 0;\n\n return {\n id: doc.id ?? '',\n name: doc.name,\n type: ((doc as { meta?: Record<string, unknown> }).meta?.['type'] as 'image') ?? 'image',\n url: fallbackUrl,\n size: fallbackSize.toString(),\n thumbnailUrl: fallbackUrl,\n };\n }\n\n //#endregion\n\n //#region ---- Utility Methods ----\n\n /**\n * Builds navigation path for a node\n */\n private async buildPath(node: AXMDocumentExplorerNode, stopFolderId?: string): Promise<AXMDocumentExplorerNode[]> {\n const cacheKey = `${node.id}_${stopFolderId || ''}`;\n\n if (!this.buildPathCache.has(cacheKey)) {\n const pathPromise = (async () => {\n // For shortcut nodes, resolve path from the target document/folder\n if (node.storageType === 'shortcut') {\n if (node.type === 'file' && node.targetDocumentId) {\n return (await this.documentManagementService.getDocumentPath(node.targetDocumentId, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n if (node.type === 'folder' && node.targetFolderId) {\n return (await this.documentManagementService.getFolderPath(node.targetFolderId, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n }\n\n if (node.type === 'file') {\n return (await this.documentManagementService.getDocumentPath(node.id, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n }\n\n return (await this.documentManagementService.getFolderPath(node.id, stopFolderId)).map(\n this.mapFolderDtoToFolderNode,\n );\n })();\n\n this.buildPathCache.set(cacheKey, pathPromise);\n return pathPromise;\n }\n\n return this.buildPathCache.get(cacheKey)!;\n }\n\n /**\n * Creates a copy name by adding \" copy\" before the extension\n */\n private createCopyName(originalName: string): string {\n const lastDotIndex = originalName.lastIndexOf('.');\n\n if (lastDotIndex === -1) {\n // No extension\n return `${originalName} copy`;\n }\n\n const nameWithoutExt = originalName.substring(0, lastDotIndex);\n const extension = originalName.substring(lastDotIndex);\n\n return `${nameWithoutExt} copy${extension}`;\n }\n\n /**\n * Prepares file for copy operation by downloading from storage and converting to blob source.\n * Accepts document fileId (AXPFileListItem or legacy string) and returns AXPFileListItem with blob source.\n */\n private async prepareFileForCopy(\n fileId: AXPFileListItem | string,\n fileName?: string,\n ): Promise<AXPFileListItem | undefined> {\n try {\n // Extract fileId string from the source\n let fileIdString: string | undefined;\n let existingFileItem: AXPFileListItem | undefined;\n\n if (typeof fileId === 'string') {\n fileIdString = fileId;\n } else if (fileId && typeof fileId === 'object') {\n // If it's already an AXPFileListItem with source.kind === 'fileId'\n if (fileId.source?.kind === 'fileId' && typeof fileId.source.value === 'string') {\n fileIdString = fileId.source.value;\n existingFileItem = fileId as AXPFileListItem;\n } else if (fileId.id && typeof fileId.id === 'string') {\n fileIdString = fileId.id;\n existingFileItem = fileId as AXPFileListItem;\n }\n }\n\n if (!fileIdString) {\n console.warn('Could not extract fileId from:', fileId);\n return undefined;\n }\n\n // Get file info from file storage service using source.value\n const fileInfo: AXPFileStorageInfo = await this.fileService.getInfo(fileIdString);\n\n if (!fileInfo) {\n throw new Error(`File not found in storage: ${fileIdString}`);\n }\n\n // Get binary data\n const binary = fileInfo.binary;\n if (!binary) {\n throw new Error(`File binary data not available for: ${fileIdString}`);\n }\n\n // Create blob from binary (in case it's not already a Blob)\n const blob = binary instanceof Blob ? binary : new Blob([binary as BlobPart], { type: fileInfo.mimeType });\n\n // If we have an existing file item, clone it and update source and status\n if (existingFileItem) {\n return {\n ...existingFileItem,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n }\n\n // Otherwise create a new AXPFileListItem\n return {\n id: fileInfo.fileId,\n name: fileName ?? fileInfo.name ?? 'unknown',\n size: fileInfo.size,\n status: 'uploading',\n source: {\n kind: 'blob',\n value: blob,\n },\n };\n } catch (error) {\n console.error('Error preparing file for copy:', error);\n throw error;\n }\n }\n\n //#endregion\n\n //#region ---- Root and Folder Operations ----\n\n /**\n * Loads shortcuts for a folder and attaches them; recurses into child folders.\n */\n private async enrichFolderWithShortcuts(folder: AXMDocumentManagementFolderEntityModel): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 500,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'folderId', operator: { type: 'equal' }, value: folder.id }],\n },\n });\n (folder as AXMDocumentManagementFolderEntityModel & { shortcuts?: AXMDocumentShortcutEntityModel[] }).shortcuts =\n shortcutRes.items ?? [];\n for (const child of folder.folders ?? []) {\n await this.enrichFolderWithShortcuts(child);\n }\n }\n\n /**\n * Gets the root folder for the given scope.\n * Backend returns only the root folder; path is built here for the explorer.\n */\n async getRoot(scope: AXPPlatformScope): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const rootFolder = await this.documentManagementService.getRoot(scope);\n await this.enrichFolderWithShortcuts(rootFolder);\n const result = this.mapFolderDtoToFolderNode(rootFolder);\n const path = await this.buildPath(result);\n return { path, result };\n }\n\n /**\n * Gets (or creates) the folder bound to the entity record and returns it as explorer root.\n */\n async getRootByEntityRef(\n refType: string,\n refId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n const folder = await this.documentManagementService.getRootByEntityRef(refType, refId);\n await this.enrichFolderWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n return { path: [result], result };\n }\n\n /**\n * Returns document types whose name is in the given list. Used when allowed list is set but folder has no documentTypes yet.\n */\n async getDocumentTypesByNames(names: string[]): Promise<AXMNodeType[]> {\n if (names.length === 0) return [];\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as { items?: AXMNodeType[] })?.items ?? [];\n const set = new Set(names);\n return items.filter((it) => it?.name && set.has(it.name));\n }\n\n /**\n * Gets a specific folder by ID.\n * Root for path is resolved from current session (security: only scope is used).\n * If folderId is a shortcut (DocumentShortcut) pointing to a folder, resolves to the target folder.\n */\n async getFolder(\n scope: AXPPlatformScope,\n folderId: string,\n ): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n if (!folderId) {\n throw new Error('Folder ID is required');\n }\n\n // Resolve shortcut: if folderId is a shortcut entity pointing to a folder, use target folder id\n const shortcut = await this.shortcutData.byKey(folderId);\n const resolvedFolderId =\n shortcut && typeof shortcut.targetFolderId === 'string' && shortcut.targetFolderId\n ? shortcut.targetFolderId\n : folderId;\n\n const folder = await this.folderData.byKey(resolvedFolderId);\n if (!folder) {\n throw new Error('Folder not found');\n }\n\n await this.enrichFolderWithShortcuts(folder);\n const result = this.mapFolderDtoToFolderNode(folder);\n const path = await this.buildPath(result, (await this.getRoot(scope)).result.id);\n\n return { path, result };\n }\n\n /**\n * Creates a new folder\n */\n async createFolder(data: AXMDocumentManagementFolderCreateDto): Promise<AXMDocumentExplorerNode> {\n const now = new Date();\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n\n const folderToCreate: Omit<AXMDocumentManagementFolderEntityModel, 'id'> = {\n ...data,\n title: data.title,\n childrenCount: 0,\n created: { at: now, user: userRef },\n updated: { at: now, user: userRef },\n isSystem: false,\n isHidden: false,\n isDeleted: false,\n size: data.size ?? 0,\n } as any;\n\n const createdId = await this.folderData.create(folderToCreate as any);\n const folder = await this.folderData.byKey(createdId);\n if (!folder) {\n throw new Error('Failed to load created folder');\n }\n return this.mapFolderDtoToFolderNode(folder);\n }\n\n /**\n * Updates an existing folder\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n const currentUser = this.sessionService.user;\n const userId = currentUser?.id?.toString() ?? 'system';\n const userRef = { id: userId, type: 'user' } as any;\n const updateData = {\n ...data,\n updated: { at: new Date(), user: userRef },\n } as any;\n const updatedFolder = await this.folderData.update(folderId, updateData);\n return this.mapFolderDtoToFolderNode(updatedFolder);\n }\n\n /**\n * Deletes a folder. Cascades to delete any shortcuts that point to this folder.\n */\n async deleteFolder(folderId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetFolderId', operator: { type: 'equal' }, value: folderId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.folderData.delete(folderId);\n }\n\n /**\n * Gets available storage space\n */\n async getAvailableSpace(): Promise<number> {\n // For now, return a fixed value of 100GB (56 * 1024 * 1024 * 1024 bytes)\n // This should be replaced with actual storage quota logic when implemented\n return 56 * 1024 * 1024 * 1024;\n }\n\n //#endregion\n\n //#region ---- File Operations ----\n\n /**\n * Creates a new file\n */\n async createFile(data: CreateFileDto): Promise<AXMDocumentExplorerNode> {\n const createdId = await this.documentData.create(data as any);\n const file = await this.documentData.byKey(createdId);\n if (!file) {\n throw new Error('Failed to load created document');\n }\n return this.mapFileToNode(file);\n }\n\n /**\n * Updates an existing file\n */\n async updateFile(fileId: string, data: UpdateFileDto): Promise<AXMDocumentExplorerNode> {\n const updatedFile = await this.documentData.update(fileId, data);\n return this.mapFileToNode(updatedFile);\n }\n\n /**\n * Deletes a file. Cascades to delete any shortcuts that point to this document.\n */\n async deleteFile(fileId: string): Promise<void> {\n const shortcutRes = await this.shortcutData.query({\n skip: 0,\n take: 1000,\n filter: {\n operator: null!,\n logic: 'and',\n filters: [{ field: 'targetDocumentId', operator: { type: 'equal' }, value: fileId }],\n },\n });\n for (const s of shortcutRes.items ?? []) {\n if (s.id) await this.shortcutData.delete(s.id);\n }\n await this.documentData.delete(fileId);\n }\n\n /**\n * Opens a file. For shortcut nodes, opens the target document.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n const documentId = node.storageType === 'shortcut' && node.targetDocumentId ? node.targetDocumentId : node.id;\n const file = await this.documentData.byKey(documentId);\n // Could trigger open/edit workflow or preview\n }\n\n /**\n * Downloads a file using the same logic as file-uploader component.\n * For shortcut nodes, downloads the target document.\n */\n async downloadFile(node: AXMDocumentExplorerNode): Promise<void> {\n const targetNode =\n node.storageType === 'shortcut' && node.targetDocumentId\n ? await this.documentData.byKey(node.targetDocumentId).then((doc) => (doc ? this.mapFileToNode(doc) : null))\n : node;\n if (!targetNode) {\n console.error('Shortcut target document not found.', node);\n return;\n }\n if (!targetNode.fileId) {\n console.error('File ID is undefined, cannot download.', targetNode);\n return;\n }\n\n const file: AXPFileListItem = {\n ...targetNode.fileId,\n name: targetNode.fileId.name ?? targetNode.name,\n };\n\n // Run BeforeDownload hook if available\n // if (this.hooks) {\n // try {\n // await this.hooks.runAsync<any>('file-uploader.fileItem.before-download', {\n // host: undefined,\n // file,\n // plugins: [],\n // excludePlugins: [],\n // });\n // } catch {\n // // Ignore hook errors\n // }\n // }\n\n if (!file.source) {\n console.error('File source is undefined, cannot download.', file);\n return;\n }\n\n const triggerDownload = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n };\n\n switch (file.source.kind) {\n case 'blob':\n if (file.source.value instanceof Blob) {\n triggerDownload(file.source.value, file.name ?? targetNode.name ?? 'download');\n } else {\n console.error('Source kind is blob, but value is not a Blob.', file);\n }\n break;\n case 'fileId':\n if (typeof file.source.value === 'string') {\n try {\n const fileInfo = await this.fileService.getInfo(file.source.value);\n if (fileInfo && fileInfo.url) {\n const link = document.createElement('a');\n link.href = fileInfo.url;\n link.download = file.name ?? targetNode.name ?? fileInfo.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else if (fileInfo && (fileInfo as any).binary instanceof Blob) {\n triggerDownload((fileInfo as any).binary, file.name ?? targetNode.name ?? fileInfo.name ?? 'download');\n } else {\n console.error('Could not retrieve file for download from fileId:', fileInfo);\n }\n } catch (error) {\n console.error('Error downloading file by fileId:', file.source.value, error);\n }\n } else {\n console.error('Source kind is fileId, but value is not a string ID.', file);\n }\n break;\n case 'url':\n if (typeof file.source.value === 'string') {\n const link = document.createElement('a');\n link.href = file.source.value;\n link.download = file.name ?? targetNode.name ?? 'download';\n link.target = '_blank';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } else {\n console.error('Source kind is url, but value is not a string URL.', file);\n }\n break;\n case 'reference':\n console.error('Download not supported for source kind: reference', file);\n break;\n case 'preview':\n case 'none':\n default:\n console.error(`Download not supported for source kind: ${file.source.kind}`, file);\n break;\n }\n\n // Run AfterDownload hook if available\n if (this.hooks) {\n try {\n await this.hooks.runAsync<any>('file-uploader.fileItem.after-download', {\n host: undefined,\n file,\n plugins: [],\n excludePlugins: [],\n });\n } catch {\n // Ignore hook errors\n }\n }\n }\n\n //#endregion\n\n //#region ---- Node Operations ----\n\n /**\n * Deletes multiple nodes (files, folders, and shortcuts).\n */\n async deleteNodes(nodes: AXMDocumentExplorerNode[]): Promise<void> {\n for (const node of nodes) {\n if (node.storageType === 'shortcut' || node.isShortcut) {\n await this.deleteShortcut(node.id);\n } else if (node.type === 'folder') {\n await this.deleteFolder(node.id);\n } else {\n await this.deleteFile(node.id);\n }\n }\n }\n\n /**\n * Creates a shortcut to a document or folder in the given folder.\n */\n async createShortcut(\n targetId: string,\n targetType: 'file' | 'folder',\n folderId: string,\n options?: { nameOverride?: string },\n ): Promise<AXMDocumentExplorerNode> {\n let name = options?.nameOverride;\n if (name == null || name === '') {\n if (targetType === 'file') {\n const doc = await this.documentData.byKey(targetId);\n name = doc?.name ?? doc?.title ?? 'Document';\n } else {\n const folder = await this.folderData.byKey(targetId);\n const rawTitle = folder?.title;\n name = rawTitle != null && rawTitle !== '' ? this.translate.resolve(rawTitle) : 'Folder';\n }\n }\n const payload: Record<string, unknown> = {\n folderId,\n name,\n };\n if (targetType === 'file') {\n payload['targetDocumentId'] = targetId;\n } else {\n payload['targetFolderId'] = targetId;\n }\n const createdId = await this.shortcutData.create(payload as any);\n const shortcut = await this.shortcutData.byKey(createdId);\n if (!shortcut) throw new Error('Failed to load created shortcut');\n return this.mapShortcutToNode(shortcut);\n }\n\n /**\n * Deletes a shortcut by its entity id.\n */\n async deleteShortcut(shortcutId: string): Promise<void> {\n await this.shortcutData.delete(shortcutId);\n }\n\n /**\n * Opens the drive folder picker and creates a shortcut to the given node in the selected folder.\n */\n async createShortcutWithPicker(node: AXMDocumentExplorerNode, scope: AXPPlatformScope): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: await this.translate.translateAsync('@document-management:actions.choose-folder-for-shortcut'),\n data: {\n selectionMode: 'single',\n browseMode: 'folder',\n scope,\n },\n });\n const selected = popup.data?.result ? ((popup.data?.items ?? []) as AXMDocumentExplorerNode[]) : [];\n const folder = selected[0];\n if (!folder?.id) return false;\n const targetType = node.type === 'file' ? 'file' : 'folder';\n const targetId =\n node.storageType === 'shortcut' && node.type === 'file'\n ? node.targetDocumentId!\n : node.storageType === 'shortcut' && node.type === 'folder'\n ? node.targetFolderId!\n : node.id;\n await this.createShortcut(targetId, targetType, folder.id);\n return true;\n }\n\n /**\n * Creates a copy of a node (file or folder)\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n if (!node) {\n throw new Error('Node to copy cannot be null or undefined');\n }\n\n // Create a name with \" copy\" before the extension\n const newName = this.createCopyName(node.name);\n\n if (node.type === 'file') {\n // Get the original file to copy all its data\n const originalFile = await this.documentData.byKey(node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${node.id} not found`);\n }\n\n // Create a document model from the original with the new name\n // Extract needed properties without id\n const { id, ...fileDataWithoutId } = originalFile;\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, newName);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n const fileData: CreateFileDto = {\n ...fileDataWithoutId,\n name: newName,\n title: newName,\n fileInfo: fileListItem,\n };\n\n // Create the new file\n return await this.createFile(fileData);\n } else if (node.type === 'folder') {\n // Get the original folder to copy all its data\n const originalFolder = await this.folderData.byKey(node.id);\n if (!originalFolder) {\n throw new Error(`Folder with ID ${node.id} not found`);\n }\n\n // Create a folder model from the original with the new name\n const { id, description: descMl, ...folderRest } = originalFolder;\n const folderData: AXMDocumentManagementFolderCreateDto = {\n ...(folderRest as Omit<AXMDocumentManagementFolderEntityModel, 'id' | 'description'>),\n title: newName,\n description: descMl != null ? this.translate.resolve(descMl) : undefined,\n };\n\n // Create the new folder\n return await this.createFolder(folderData);\n } else {\n throw new Error(`Unsupported node type: ${node.type}`);\n }\n }\n\n /**\n * Moves a node to another location\n */\n async moveTo(options: {\n node: AXMDocumentExplorerNode;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: `Choose ${options.browseMode == 'file' ? 'File' : 'Folder'}`,\n data: {\n selectionMode: options.multiple ? 'multiple' : 'single',\n browseMode: options.browseMode ?? 'file',\n scope: options.scope,\n },\n });\n\n const selectedFolders = popup.data.result ? (popup.data?.items ?? []) : [];\n if (selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.updateFolder(options.node.id, { parentId: selectedFolder.id });\n } else {\n await this.updateFile(options.node.id, { parentId: selectedFolder.id });\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n /**\n * Copies a node to another location\n */\n async copyTo(options: {\n node: AXMDocumentExplorerNode;\n scope: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n multiple?: boolean;\n }): Promise<boolean> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const popup = await this.popupService.open(comp, {\n title: `Choose ${options.browseMode == 'file' ? 'File' : 'Folder'}`,\n data: {\n selectionMode: options.multiple ? 'multiple' : 'single',\n browseMode: options.browseMode ?? 'file',\n scope: options.scope,\n },\n });\n\n const selectedFolders = popup.data.result ? (popup.data?.items ?? []) : [];\n if (selectedFolders.length > 0) {\n const selectedFolder = selectedFolders[0];\n if (selectedFolder) {\n if (options.node.type === 'folder') {\n await this.createFolder({\n title: options.node.name,\n parentId: selectedFolder.id,\n color: '#ffffff',\n size: options.node.size,\n inherit: options.node.inherit ?? 'None',\n });\n } else {\n // Get the original file to copy its data\n const originalFile = await this.documentData.byKey(options.node.id);\n if (!originalFile) {\n throw new Error(`File with ID ${options.node.id} not found`);\n }\n\n // Prepare file for copy by downloading from storage and converting to blob source\n const fileListItem = await this.prepareFileForCopy(originalFile.fileInfo, options.node.name);\n if (!fileListItem) {\n throw new Error('Could not prepare file for copy');\n }\n\n await this.createFile({\n title: options.node.name,\n name: options.node.name,\n parentId: selectedFolder.id,\n fileInfo: fileListItem,\n documentType: options.node.documentTypes[0],\n statusId: 'draft',\n status: { id: 'draft', title: '@general:statuses.draft.title' },\n });\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n }\n\n //#endregion\n\n //#region ---- Search Operations ----\n\n /**\n * Searches for folders by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFolders(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n\n const folders = await this.documentManagementService.searchFolders(searchTerm, rootNode.id);\n\n return folders.map((folder) => this.mapFolderDtoToFolderNode(folder));\n }\n\n /**\n * Searches for files by term within a scope.\n * Root is resolved from current session when folderId is not provided.\n */\n async searchFiles(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: { folderId?: string },\n ): Promise<AXMDocumentExplorerNode[]> {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n\n const files = await this.documentManagementService.searchFiles(searchTerm, rootNode.id);\n\n return files.map((file) => this.mapFileToNode(file));\n }\n\n /**\n * Searches for both files and folders by term within a scope.\n * Supports optional metadata filters to narrow down results by metadata field values.\n */\n async searchNodes(\n searchTerm: string,\n scope: AXPPlatformScope,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n const hasSearchTerm = searchTerm?.trim().length > 0;\n const hasMetadataFilters = options?.metadataFilters && Object.keys(options.metadataFilters).length > 0;\n const hasDocTypeFilter = Boolean(options?.documentTypeIds && options.documentTypeIds.length > 0);\n\n let folders: AXMDocumentExplorerNode[] = [];\n let files: AXMDocumentExplorerNode[] = [];\n\n if (hasMetadataFilters || hasDocTypeFilter) {\n const { result: rootNode } = options?.folderId\n ? await this.getFolder(scope, options.folderId)\n : await this.getRoot(scope);\n const treeRootId = options?.folderId ?? rootNode.id;\n const allDtos = await this.documentManagementService.searchFiles(searchTerm, treeRootId!, {\n ...(hasMetadataFilters ? { metadataFilters: options!.metadataFilters! } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds: options!.documentTypeIds! } : {}),\n });\n files = allDtos.map((f) => this.mapFileToNode(f));\n } else if (hasSearchTerm) {\n [folders, files] = await Promise.all([\n this.searchFolders(searchTerm, scope, options),\n this.searchFiles(searchTerm, scope, options),\n ]);\n }\n\n return [...folders, ...files];\n }\n\n /**\n * Returns unique metadata field definitions for the given document types (or all types when `documentTypeIds` is omitted).\n */\n async getUniqueMetadataFields(documentTypeIds?: string[]): Promise<AXMMetadataFieldInfo[]> {\n return this.documentManagementService.getUniqueMetadataDefinitions(documentTypeIds);\n }\n\n //#endregion\n\n //#region ---- Data Retrieval Operations ----\n\n /**\n * Gets all folders\n */\n async getAllFolders(): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.folderData.query()).items.map(this.mapFolderDtoToFolderNode);\n }\n\n /**\n * Gets all files with optional query\n */\n async getAllFiles(request?: AXPQueryRequest): Promise<AXMDocumentExplorerNode[]> {\n //TODO filter by scope\n return (await this.documentData.query(request)).items.map(this.mapFileToNode);\n }\n\n /**\n * Gets all nodes (files and folders)\n */\n async getAllNodes(): Promise<AXMDocumentExplorerNode[]> {\n return [...(await this.getAllFolders()), ...(await this.getAllFiles())];\n }\n\n //#endregion\n\n //#region ---- File Upload Operations ----\n\n /**\n * Uploads file by document type to a specific folder\n */\n async uploadFileByType(folderId: string, docTypeId: string): Promise<boolean> {\n const result = await this.attachmentsService.attachFile(docTypeId, {\n multiple: true,\n folderId: folderId,\n });\n return result;\n }\n\n /**\n * Uploads file by document type to a specific folder\n */\n async updateUploadFileByType(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.attachmentsService.updateAttachedFile(node.id, {\n folderId: node.parentId ?? '',\n });\n return result;\n }\n\n /**\n * Manage versions: Upload a new version for a specific document\n */\n async uploadNewVersion(node: AXMDocumentExplorerNode): Promise<boolean> {\n return await this.attachmentsService.uploadNewVersion(node.id);\n }\n\n /**\n * Opens version history popup using common version-history command.\n * For shortcut nodes, shows history of the target document.\n */\n async showVersionHistory(node: AXMDocumentExplorerNode): Promise<void> {\n await this.commandService.execute('show-version-history-popup', {\n options: {\n refId: node.id,\n refType: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n },\n });\n }\n\n //#region ---- Dialog Operations ----\n\n /**\n * Shows share dialog for a node\n */\n async showShareDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/share-dialog/share-dialog.component')).AXMShareDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the share action with popup.data.data\n }\n }\n\n /**\n * Shows share via email dialog for a node\n */\n async showShareWithEmailDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/share-email-dialog/share-email-dialog.component'))\n .AXMShareEmailDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share via Email',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the share via email action with popup.data.data\n }\n }\n\n /**\n * Shows link dialog for a node\n */\n async showLinkDialog(node: AXMDocumentExplorerNode): Promise<void> {\n const comp = (await import('./components/link-dialog/link-dialog.component')).AXMLinkDialogComponent;\n const popup = await this.popupService.open(comp, {\n title: 'Share Link',\n data: {\n node,\n },\n });\n\n if (popup.data?.result) {\n // Handle the link generation with popup.data.data\n }\n }\n\n /**\n * Shows lock dialog for a document\n */\n async showLockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.workflow.execute('lock-popup', {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n const isCanceled = result.getOutput('isCanceled') as boolean;\n return !isCanceled;\n }\n\n /**\n * Shows unlock dialog for a document\n */\n async showUnlockDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n const result = await this.workflow.execute('unlock-confirm', {\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n\n const unlocked = result.getOutput('unlocked') as boolean;\n return unlocked;\n }\n\n /**\n * Shows folder edit dialog\n */\n async showFolderEditDialog(node: AXMDocumentExplorerNode): Promise<boolean> {\n // Load document types for selection\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n const items = (res as any)?.items ?? [];\n\n const result = await this.layoutBuilder\n .create()\n .dialog<boolean>((dialog) => {\n dialog\n .setTitle('@document-management:actions.update-folder')\n .setContext({\n name: node.name,\n description: node.description ?? '',\n inherit: node.inherit ?? 'None',\n documentTypes: node.documentTypes ?? [],\n color: '#FFFFFF',\n })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.name', (field) => {\n field.path('name');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'None', text: 'None' },\n { value: 'Inherited', text: 'Inherited' },\n { value: 'Extends', text: 'Extends' },\n ],\n });\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'name',\n textField: 'title',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n });\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return false;\n }\n const form = context as any;\n const selected = Array.isArray(form.documentTypes) ? form.documentTypes : [];\n const selectedTypes = selected.map((v: any) =>\n typeof v === 'object' ? v : items.find((it: any) => it.name === v) || { name: v, title: v, id: v },\n );\n await this.updateFolder(node.id, {\n title: form.title ?? form.name,\n description: form.description,\n inherit: form.inherit,\n documentTypes: selectedTypes,\n color: form.color,\n });\n return true;\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows create folder dialog.\n * @param parentId Parent folder id\n * @param options.allowedDocumentTypeNames When set, only these document type names can be selected\n */\n async showCreateFolderDialog(\n parentId?: string,\n options?: { allowedDocumentTypeNames?: string[] },\n ): Promise<AXMDocumentExplorerNode | null> {\n const res = await this.documentTypeService.query({ skip: 0, take: 1000 });\n let items = (res as any)?.items ?? [];\n const allowedNames = options?.allowedDocumentTypeNames;\n if (Array.isArray(allowedNames) && allowedNames.length > 0) {\n const set = new Set(allowedNames);\n items = items.filter((it: { name?: string }) => it?.name && set.has(it.name));\n }\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | null>((dialog) => {\n dialog\n .setTitle('@document-management:actions.create-folder')\n .setContext({ title: '', description: '', inherit: 'None', documentTypes: [], color: '#FFFFFF' })\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@general:terms.common.title', (field) => {\n field.path('title');\n field.textBox({ validations: [{ rule: 'required' }] });\n })\n .formField('@general:terms.common.description', (field) => {\n field.path('description');\n field.largeTextBox({});\n })\n .formField('@document-management:terms.common.inherited', (field) => {\n field.path('inherit');\n field.selectionList({\n valueField: 'value',\n textField: 'text',\n dataSource: [\n { value: 'None', text: 'None' },\n { value: 'Inherited', text: 'Inherited' },\n { value: 'Extends', text: 'Extends' },\n ],\n });\n })\n .formField('@document-management:entities.document-types.title-plural', (field) => {\n field.path('documentTypes');\n field.selectBox({\n valueField: 'name',\n textField: 'title',\n dataSource: items,\n multiple: true,\n allowSearch: true,\n });\n })\n .formField('@general:terms.common.color', (field) => {\n field.path('color');\n field.colorBox({});\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return null;\n }\n const form = context as any;\n try {\n const folder = await this.createFolder({\n title: form.title,\n color: form.color,\n parentId,\n description: form.description,\n documentTypes: form.documentTypes,\n size: 0,\n inherit: form.inherit,\n });\n return folder;\n } catch (err) {\n console.error('[showCreateFolderDialog] createFolder failed', err);\n throw err;\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows rename popup for a node using dynamic form builder\n */\n async showRenamePopup(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n const result = await this.layoutBuilder\n .create()\n .dialog<AXMDocumentExplorerNode | undefined>((dialog) => {\n dialog\n .setTitle('@document-management:actions.rename')\n .setContext({ name: node.name })\n .content((flex) => {\n flex.setDirection('column').formField('@document-management:dialogs.rename.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@document-management:dialogs.rename.name-placeholder',\n validations: [{ rule: 'required' }],\n });\n });\n })\n .setActions((actions) => {\n actions.cancel().submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return undefined;\n }\n const formData = context as { name?: string };\n if (!formData?.name) {\n return undefined;\n }\n dialogRef.setLoading(true);\n try {\n if (node.type === 'folder') {\n return await this.updateFolder(node.id, { title: formData.name });\n }\n await this.updateFileName(node, formData.name);\n return await this.updateFile(node.id, { name: formData.name });\n } finally {\n dialogRef.setLoading(false);\n }\n });\n })\n .show();\n\n return result;\n }\n\n /**\n * Shows delete nodes confirmation dialog\n */\n async showDeleteNodesDialog(nodeIds: AXMDocumentExplorerNode[]): Promise<boolean> {\n const folderNodes = nodeIds.filter((n) => n.type === 'folder' && n.storageType !== 'shortcut');\n const fileNodes = nodeIds.filter((n) => n.type === 'file' && n.storageType !== 'shortcut');\n const shortcutNodes = nodeIds.filter((n) => n.storageType === 'shortcut' || n.isShortcut);\n const hasFolders = folderNodes.length > 0;\n const hasFiles = fileNodes.length > 0;\n const hasShortcuts = shortcutNodes.length > 0;\n\n const baseOptions = { process: { showResult: true } };\n\n let result: Awaited<ReturnType<AXPWorkflowService['execute']>>;\n if (hasShortcuts && (hasFolders || hasFiles)) {\n result = await this.workflow.execute('delete-entity', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${\n node.storageType === 'shortcut' || node.isShortcut\n ? RootConfig.entities.documentShortcut.name\n : node.type === 'folder'\n ? RootConfig.entities.folder.name\n : RootConfig.entities.document.name\n }`,\n ids: [node.id],\n })),\n options: baseOptions,\n });\n } else if (hasFolders && hasFiles) {\n result = await this.workflow.execute('delete-entity', {\n entities: nodeIds.map((node) => ({\n source: `${RootConfig.module.name}.${\n node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name\n }`,\n ids: [node.id],\n })),\n options: baseOptions,\n });\n } else if (hasShortcuts) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.documentShortcut.name}`,\n data: shortcutNodes.length === 1 ? shortcutNodes[0] : shortcutNodes,\n options: baseOptions,\n });\n } else if (hasFolders) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.folder.name}`,\n data: folderNodes.length === 1 ? folderNodes[0] : folderNodes,\n options: baseOptions,\n });\n } else if (hasFiles) {\n result = await this.workflow.execute('delete-entity', {\n entity: `${RootConfig.module.name}.${RootConfig.entities.document.name}`,\n data: fileNodes.length === 1 ? fileNodes[0] : fileNodes,\n options: baseOptions,\n });\n } else {\n return false;\n }\n return (result.getOutput('result') as boolean) ?? false;\n }\n\n /**\n * Shows choose file dialog\n */\n async showChooseFileDialog(scope: AXPPlatformScope): Promise<AXMDocumentExplorerNode[]> {\n const comp = (await import('../drive-choose/drive-choose.component')).AXMDocumentDriveChooseComponent;\n const result = await this.popupService.open(comp, {\n title: await this.translate.translateAsync('@document-management:actions.choose-from-drive'),\n data: {\n scope: scope,\n },\n });\n if (result.data?.result) {\n return castArray(result.data.items);\n }\n return [];\n }\n\n /** File extensions supported by the gallery viewer (images + PDF). */\n static readonly GALLERY_EXTENSIONS = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'pdf'] as const;\n\n /**\n * Returns nodes that are supported by the gallery (image/pdf extensions).\n */\n getGallerySupportedFiles(nodes: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n return nodes.filter((item) => {\n if (!item.name || item.type !== 'file') return false;\n const ext = item.name.split('.').pop()?.toLowerCase();\n return ext && (AXMDocumentManagerServiceImpl.GALLERY_EXTENSIONS as readonly string[]).includes(ext);\n });\n }\n\n /**\n * Shows file viewer popup using the gallery widget\n */\n async showFileViewerPopup(\n node: AXMDocumentExplorerNode,\n options?: { index?: number; folderVirtualFiles?: AXMDocumentExplorerNode[] },\n ): Promise<void> {\n const isVirtualFolder = node.parentId === 'virtual';\n const parentFolder = await this.folderData.byKey(node.parentId!);\n const parentFolderName = isVirtualFolder ? 'Virtual' : this.translate.resolve(parentFolder?.title ?? '');\n const documents = isVirtualFolder ? (options?.folderVirtualFiles ?? []) : (parentFolder?.documents ?? []);\n\n // Filter documents by gallery-supported extensions\n const filteredDocuments = documents.filter((item) => {\n if (!item.name) return false;\n const ext = item.name.split('.').pop()?.toLowerCase();\n return ext && (AXMDocumentManagerServiceImpl.GALLERY_EXTENSIONS as readonly string[]).includes(ext);\n });\n\n // Convert documents to AXPFileListItem[] format for the gallery widget\n const fileListItems: AXPFileListItem[] = filteredDocuments.map((doc) => {\n const fileInfo =\n (doc as { fileInfo?: AXPFileListItem; fileId?: AXPFileListItem }).fileInfo ??\n (doc as { fileId?: AXPFileListItem }).fileId;\n return {\n ...fileInfo,\n id: doc.id ?? fileInfo?.id ?? '',\n name: doc.name,\n size: fileInfo?.size ?? 0,\n status: 'attached' as const,\n source: fileInfo?.source,\n };\n });\n\n // Calculate start index\n const startIndex = isVirtualFolder\n ? (options?.folderVirtualFiles?.findIndex((f) => f.id === node.id) ?? 0)\n : (options?.index ?? 0);\n\n // Open dialog using layout builder with gallery widget (same config as file-gallery-popup)\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(parentFolderName)\n .setSize('lg')\n .setCloseButton(true)\n .content((layout) => {\n layout\n .setDirection('column')\n .setGap('0')\n .customWidget('gallery', (widget: IWidgetBuilder) => {\n widget.path('galleryFiles').defaultValue(fileListItems).options({\n thumbnail: true,\n header: true,\n fileInfo: true,\n fullScreenButton: true,\n allowUpload: false,\n height: '100%',\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.close.title');\n });\n })\n .show();\n\n // Close the dialog when user clicks the Close action\n (dialogRef as AXPDialogRef | undefined)?.close();\n }\n\n /**\n * Updates a file name\n */\n async updateFileName(node: AXMDocumentExplorerNode, name: string): Promise<AXMDocumentExplorerNode> {\n if (node.storageType == 'physical') {\n return this.mapFileToNode(await this.documentData.update(node.id, { name }));\n } else {\n node.name = name;\n return node;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ---- Scoped Drive Service ----\n\n/**\n * Scoped drive service for specific platform scopes.\n * Backend resolves tenant/user from request context (client sends only scope).\n */\nexport class ScopedDriveService {\n //#region ---- Constructor ----\n\n constructor(\n private parent: AXMDocumentManagerService,\n private scope: AXPPlatformScope,\n ) {}\n\n //#endregion\n\n //#region ---- Scoped Operations ----\n\n /**\n * Gets root folder for this scope (tenant/user from session).\n */\n async getRoot(): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getRoot(this.scope);\n }\n\n /**\n * Gets folder for this scope.\n */\n async getFolder(folderId: string): Promise<{\n path: AXMDocumentExplorerNode[];\n result: AXMDocumentExplorerNode;\n }> {\n return this.parent.getFolder(this.scope, folderId);\n }\n\n /**\n * Creates folder in this scope. Backend sets tenant/user from request context.\n */\n async createFolder(\n data: Omit<AXMDocumentManagementFolderCreateDto, 'tenantId' | 'userId'>,\n ): Promise<AXMDocumentExplorerNode> {\n return this.parent.createFolder(data as AXMDocumentManagementFolderCreateDto);\n }\n\n /**\n * Updates folder in this scope\n */\n async updateFolder(folderId: string, data: UpdateFolderDto): Promise<AXMDocumentExplorerNode> {\n return this.parent.updateFolder(folderId, data);\n }\n\n /**\n * Deletes folder in this scope\n */\n async deleteFolder(folderId: string): Promise<void> {\n return this.parent.deleteFolder(folderId);\n }\n\n /**\n * Gets available space for this scope\n */\n async getAvailableSpace(): Promise<number> {\n return this.parent.getAvailableSpace();\n }\n\n /**\n * Searches folders in this scope\n */\n async searchFolders(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFolders(searchTerm, this.scope, options);\n }\n\n /**\n * Searches files in this scope\n */\n async searchFiles(searchTerm: string, options?: { folderId?: string }): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchFiles(searchTerm, this.scope, options);\n }\n\n /**\n * Searches nodes in this scope\n */\n async searchNodes(\n searchTerm: string,\n options?: {\n folderId?: string;\n metadataFilters?: Record<string, unknown>;\n documentTypeIds?: string[];\n },\n ): Promise<AXMDocumentExplorerNode[]> {\n return this.parent.searchNodes(searchTerm, this.scope, options);\n }\n\n /**\n * Creates a copy of a node in this scope\n */\n async copy(node: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode> {\n return this.parent.copy(node);\n }\n\n //#endregion\n}\n\n//#endregion\n","export enum AXPDocumentExplorerSettings {\n ViewMode = 'DocumentManagement:Setting:DocumentExplorer.Layout.ViewMode',\n SortField = 'DocumentManagement:Setting:DocumentExplorer.Layout.SortField',\n SortDirection = 'DocumentManagement:Setting:DocumentExplorer.Layout.SortDirection',\n}\n\n","import { AXMenuItem } from '@acorex/components/menu';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileType, AXPFileTypeProviderService, AXPLockService, AXPSettingsService } from '@acorex/platform/common';\nimport { AXPActionMenuItem, AXPPlatformScope } from '@acorex/platform/core';\nimport { computed, inject } from '@angular/core';\nimport { patchState, signalStore, withComputed, withMethods, withState } from '@ngrx/signals';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentTypeService } from '../../entities';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerSettings } from './settings.keys';\n\nexport const AXPDocumentExplorerViewModel = signalStore(\n { providedIn: 'root' },\n\n withState(() => ({\n // View State\n viewMode: 'large-tiles' as AXPDocumentExplorerViewMode,\n isLoading: false,\n scope: AXPPlatformScope.User,\n\n // Navigation State\n currentPath: [] as AXMDocumentExplorerNode[],\n currentNode: null as AXMDocumentExplorerNode | null,\n loadingFolderId: null as string | null,\n navigatingFolderId: null as string | null,\n backHistory: [] as { folderId: string; path: AXMDocumentExplorerNode[] }[],\n\n // Selection State\n selectionMode: 'none' as AXMDocumentSelectionMode,\n selectedNodes: [] as AXMDocumentExplorerNode[],\n\n // Browse State\n browseMode: 'file' as AXMDocumentExplorerBrowseMode,\n\n // Sort State\n sortField: 'name',\n sortDirection: 'asc',\n\n // Content State\n folders: [] as AXMDocumentExplorerNode[],\n files: [] as AXMDocumentExplorerNode[],\n itemsCount: 0,\n availableSpace: 0,\n\n // Drive State\n currentDrive: null as AXPPlatformScope | null,\n\n // File Type State\n fileTypes: [] as AXPFileType[],\n /** Current file type filter key: 'all' or a file type name from fileTypes. */\n fileTypeFilter: 'all' as string,\n // Detail Panel State\n detailPanel: false,\n /** When set, only these document type names can be selected (create folder) or shown (add item menu). */\n allowedDocumentTypeNames: null as string[] | null,\n })),\n\n withComputed((store) => ({\n isRoot: computed(() => {\n const path = store.currentPath();\n return path.length === 1;\n }),\n\n isVirtual: computed(() => {\n const node = store.currentNode();\n return node?.storageType === 'virtual';\n }),\n\n currentFolder: computed(() => store.currentNode()),\n\n currentFolderContents: computed(() => ({\n folders: store.folders(),\n files: store.files(),\n })),\n\n /** Folders to display: always all folders when filtering by type. */\n filteredFolders: computed(() => store.folders()),\n\n /** Files to display: all files when filter is 'all', otherwise only files whose extension matches the selected type. */\n filteredFiles: computed(() => {\n const filter = store.fileTypeFilter();\n const files = store.files();\n if (filter === 'all') return files;\n const type = store.fileTypes().find((t) => t.name === filter);\n if (!type?.extensions?.length) return files;\n const extSet = new Set(type.extensions.map((e) => e.name.toLowerCase()));\n return files.filter((f) => {\n const ext = f.name.split('.').pop()?.toLowerCase() ?? '';\n return extSet.has(ext);\n });\n }),\n\n isLargeTilesView: computed(() => store.viewMode() === 'large-tiles'),\n isSmallTilesView: computed(() => store.viewMode() === 'small-tiles'),\n isListView: computed(() => store.viewMode() === 'list'),\n isDetailsView: computed(() => store.viewMode() === 'details'),\n isLargeIconsView: computed(() => store.viewMode() === 'large-icons'),\n isSmallIconsView: computed(() => store.viewMode() === 'small-icons'),\n\n isBackAvailable: computed(() => store.backHistory().length > 0),\n isUpAvailable: computed(() => {\n const node = store.currentNode();\n return node?.parentId != null;\n }),\n\n selectedCount: computed(() => store.selectedNodes().length),\n hasSelectedItems: computed(() => store.selectedNodes().length > 0),\n hasMultipleSelectedItems: computed(() => store.selectedNodes().length > 1),\n isMultiSelect: computed(() => store.selectionMode() === 'multiple'),\n selectedNode: computed<AXMDocumentExplorerNode | null>(() => store.selectedNodes()[0] ?? null),\n\n isDetailPanelOpen: computed(() => store.detailPanel()),\n })),\n\n withMethods(\n (\n store,\n fileTypeService = inject(AXPFileTypeProviderService),\n driveService = inject(AXMDocumentManagerService),\n settingsService = inject(AXPSettingsService),\n translateService = inject(AXTranslationService),\n lockService = inject(AXPLockService),\n ) => ({\n setAllowedDocumentTypeNames(names: string[] | null): void {\n patchState(store, { allowedDocumentTypeNames: names });\n },\n\n async initialize(options?: {\n scope?: AXPPlatformScope;\n browseMode?: AXMDocumentExplorerBrowseMode;\n filter?: any;\n }) {\n // Apply route scope synchronously before any await so nested UI (e.g. query-filters effect) cannot\n // navigate while the store still holds the default User scope.\n const scope = options?.scope ?? AXPPlatformScope.User;\n const browseMode = options?.browseMode ?? 'file';\n patchState(store, { scope, browseMode });\n\n const fileTypes = await fileTypeService.items();\n patchState(store, { fileTypes });\n // Load initial settings (use same scope for get/set so persistence works after refresh)\n const scopedSettings = settingsService.scope(scope);\n const viewMode = await scopedSettings.get(AXPDocumentExplorerSettings.ViewMode);\n const sortField = await scopedSettings.get(AXPDocumentExplorerSettings.SortField);\n const sortDirection = await scopedSettings.get(AXPDocumentExplorerSettings.SortDirection);\n patchState(store, {\n viewMode: viewMode ?? 'large-tiles',\n sortField: sortField ?? 'name',\n sortDirection: sortDirection ?? 'asc',\n });\n },\n\n _load: async (folderId: string) => {\n patchState(store, { loadingFolderId: folderId, isLoading: true });\n\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n try {\n const node = await driveService.getFolder(store.scope(), folderId);\n\n // Sort with direction\n const sortField = store.sortField();\n const sortDirection = store.sortDirection();\n const directionMultiplier = sortDirection === 'asc' ? 1 : -1;\n\n switch (sortField) {\n case 'name':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n case 'modified':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.modifiedAt?.getTime() ?? 0) - (b.modifiedAt?.getTime() ?? 0)),\n );\n break;\n case 'size':\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * ((a.size ?? 0) - (b.size ?? 0)),\n );\n break;\n default:\n node.result.children = node.result.children?.sort(\n (a, b) => directionMultiplier * a.name.localeCompare(b.name),\n );\n break;\n }\n\n patchState(store, {\n currentNode: node.result,\n currentPath: node.path,\n\n folders: node.result.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'folder') || [],\n files:\n node.result.children?.filter(\n (item: AXMDocumentExplorerNode) => store.browseMode() == 'file' && item.type === 'file',\n ) || [],\n itemsCount: node.result.children?.length || 0,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n });\n } catch (error) {\n patchState(store, {\n loadingFolderId: null,\n isLoading: false,\n });\n throw error;\n }\n },\n\n navigateToFolder(folderId: string) {\n const currentNode = store.currentNode();\n if (currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n }\n patchState(store, { navigatingFolderId: folderId });\n },\n\n async loadFolderContents(folderId: string) {\n await this._load(folderId);\n this.deselectAll();\n },\n\n async virtualFolder(\n files: AXMDocumentExplorerNode[] = [],\n options?: {\n name?: string;\n parentId?: string;\n },\n ) {\n const id = 'virtual';\n patchState(store, {\n loadingFolderId: id,\n isLoading: true,\n });\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n const node: AXMDocumentExplorerNode = {\n id: id,\n name: options?.name || 'virtual',\n type: 'folder',\n children: files,\n parentId: options?.parentId || null,\n size: 0,\n // TODO\n documentTypes: [],\n storageType: 'virtual',\n };\n patchState(store, {\n currentNode: node,\n currentPath: [node],\n folders: files.filter((item) => item.type === 'folder'),\n files: files.filter((item) => item.type === 'file'),\n itemsCount: files.length,\n availableSpace: await driveService.getAvailableSpace(),\n loadingFolderId: null,\n isLoading: false,\n navigatingFolderId: null,\n });\n },\n\n setViewMode(mode: AXPDocumentExplorerViewMode | string) {\n patchState(store, { viewMode: mode as AXPDocumentExplorerViewMode });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.ViewMode, mode);\n },\n isViewMode(mode: AXPDocumentExplorerViewMode | string) {\n return store.viewMode() === mode;\n },\n\n setSortField(field: string) {\n patchState(store, { sortField: field });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.SortField, field);\n this.refresh();\n },\n\n setSortDirection(direction: string) {\n patchState(store, { sortDirection: direction });\n settingsService.scope(store.scope()).set(AXPDocumentExplorerSettings.SortDirection, direction);\n this.refresh();\n },\n setSelectionMode(mode: AXMDocumentSelectionMode | string) {\n patchState(store, { selectionMode: mode as AXMDocumentSelectionMode });\n },\n\n setDrive(scope: AXPPlatformScope) {\n patchState(store, { currentDrive: scope });\n },\n\n /** Sets the file type filter: 'all' or a file type name. Only files with matching extension are shown. */\n setFileTypeFilter(key: string) {\n patchState(store, { fileTypeFilter: key ?? 'all' });\n },\n\n isLoadingFolder(folderId: string): boolean {\n return store.loadingFolderId() === folderId;\n },\n\n getFileInfo(fileName: string): { icon: string; type: string } {\n const fileTypes = store.fileTypes();\n const extension = fileName.split('.').pop()?.toLowerCase() || '';\n const extensions = fileTypes.flatMap((type) => type.extensions);\n const fileType = extensions.find((e) => e.name === extension);\n\n return {\n icon: fileType?.icon || 'fa-light fa-file',\n type: fileType?.name || 'Unknown',\n };\n },\n\n /**\n * Returns display info for any node (file or folder), including shortcut indicator.\n * Use in views to show the correct icon and a Windows-style shortcut arrow when applicable.\n */\n getNodeDisplayInfo(node: AXMDocumentExplorerNode): { icon: string; type: string; isShortcut: boolean } {\n const isShortcut = node.storageType === 'shortcut' || node.isShortcut === true;\n if (node.type === 'file') {\n const info = this.getFileInfo(node.name);\n return { icon: info.icon, type: info.type, isShortcut };\n }\n return {\n icon: 'fa-light fa-folder ax-text-yellow-500',\n type: 'Folder',\n isShortcut,\n };\n },\n\n\n getNodeInfo(node: AXMDocumentExplorerNode): {\n name: string;\n icon: string;\n type: string;\n sections: {\n title: string;\n details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[];\n }[];\n } {\n // If no node, return a default object\n if (!node) {\n return {\n name: '---',\n icon: 'fa-light fa-folder',\n type: 'Folder',\n sections: [\n {\n title: 'Details',\n details: [],\n },\n ],\n };\n }\n\n // If the node is a file, return the file info\n if (node.type === 'file') {\n const fileTypes = store.fileTypes();\n const extension = node.name.split('.').pop()?.toLowerCase() || '';\n const extensions = fileTypes.flatMap((type) => type.extensions);\n const fileType = extensions.find((e) => e.name === extension);\n const details: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: 'Description',\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Size',\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n ...(node.expirationDate\n ? [\n {\n title: 'Expire Date',\n content: node.expirationDate,\n format: 'date' as const,\n icon: 'fa-solid fa-calendar-days',\n },\n ]\n : []),\n {\n title: 'Created at',\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: 'Modified at',\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n details.unshift({\n title: 'Shortcut',\n content: node.targetDocumentId ? 'Links to a document' : 'Links to a folder',\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: fileType?.icon || 'fa-light fa-file',\n type: 'File',\n sections: node.metaDataForm && typeof node.metaDataForm === 'object'\n ? [\n {\n title: 'Details',\n details,\n },\n {\n title: 'Metadata',\n details: [],\n },\n ]\n : [\n {\n title: 'Details',\n details,\n },\n ],\n };\n }\n // If the node is a folder, return the folder info\n else {\n const folderDetails: {\n title: string;\n content?: any;\n icon?: string;\n format?: 'datetime' | 'date' | 'filesize' | 'number' | 'string';\n }[] = [\n {\n title: 'Description',\n content: node.description,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Items',\n content: node.childrenCount,\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Size',\n content: node.size || 0,\n format: 'filesize',\n icon: 'fa-solid fa-file-lines',\n },\n {\n title: 'Created at',\n content: node.createdAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n {\n title: 'Modified at',\n content: node.modifiedAt || new Date(),\n format: 'datetime',\n icon: 'fa-solid fa-calendar-days',\n },\n ];\n if (node.storageType === 'shortcut' || node.isShortcut) {\n folderDetails.unshift({\n title: 'Shortcut',\n content: 'Links to a folder',\n icon: 'fa-light fa-up-right-from-square',\n });\n }\n return {\n name: node.name,\n icon: 'fa-light fa-folder ax-text-yellow-500',\n type: 'Folder',\n sections: [\n {\n title: 'Details',\n details: folderDetails,\n },\n ],\n };\n }\n },\n\n sortItems(items: AXMDocumentExplorerNode[]): AXMDocumentExplorerNode[] {\n const field = store.sortField();\n const direction = store.sortDirection();\n\n return [...items].sort((a, b) => {\n let comparison = 0;\n\n switch (field) {\n case 'name':\n comparison = a.name.localeCompare(b.name);\n break;\n case 'modified':\n const aDate = a.modifiedAt ? new Date(a.modifiedAt) : new Date(0);\n const bDate = b.modifiedAt ? new Date(b.modifiedAt) : new Date(0);\n comparison = aDate.getTime() - bDate.getTime();\n break;\n case 'size':\n comparison = (a.size || 0) - (b.size || 0);\n break;\n }\n\n return direction === 'asc' ? comparison : -comparison;\n });\n },\n\n async refresh() {\n if (!store.isVirtual()) {\n const currentFolder = store.currentNode();\n if (currentFolder) {\n await this._load(currentFolder.id);\n }\n } else {\n patchState(store, { loadingFolderId: 'fake' });\n patchState(store, { loadingFolderId: null });\n }\n },\n\n navigateToUp() {\n const currentNode = store.currentNode();\n const parentId = currentNode?.parentId;\n if (parentId && currentNode) {\n patchState(store, {\n backHistory: [...store.backHistory(), { folderId: currentNode.id, path: store.currentPath() }],\n });\n patchState(store, { navigatingFolderId: parentId });\n this.loadFolderContents(parentId);\n }\n },\n\n async navigateBack() {\n const history = store.backHistory();\n if (history.length === 0) {\n return;\n }\n const lastEntry = history[history.length - 1];\n patchState(store, { backHistory: history.slice(0, history.length - 1) });\n patchState(store, { navigatingFolderId: lastEntry.folderId });\n await this.loadFolderContents(lastEntry.folderId);\n },\n\n async openGalleryWithFolderId(): Promise<void> {\n const folder = store.currentNode();\n const files = folder?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') || [];\n const galleryFiles = driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await driveService.showFileViewerPopup(galleryFiles[0]);\n }\n },\n\n //TODO: Delete only one node at a time\n async deleteNodes(nodes: AXMDocumentExplorerNode[] = store.selectedNodes()) {\n if (store.isVirtual()) {\n patchState(store, {\n files: store.currentFolderContents().files.filter((file) => !nodes.some((node) => node.name === file.name)),\n });\n this.deselectAll();\n } else {\n const result = await driveService.showDeleteNodesDialog(nodes);\n if (result) {\n this.deselectAll();\n await this.refresh();\n }\n }\n },\n\n toggleSelect(node: AXMDocumentExplorerNode) {\n if (store.selectionMode() === 'multiple') {\n patchState(store, {\n selectedNodes: store.selectedNodes().includes(node)\n ? store.selectedNodes().filter((n) => n.id !== node.id)\n : [...store.selectedNodes(), node],\n });\n } else {\n patchState(store, { selectedNodes: [node] });\n }\n },\n\n isItemSelected(node: AXMDocumentExplorerNode): boolean {\n return store.selectedNodes().some((selectedNode) => selectedNode.id === node.id);\n },\n\n selectAll() {\n patchState(store, {\n selectedNodes: [...store.filteredFolders(), ...store.filteredFiles()],\n });\n },\n\n deselectAll() {\n patchState(store, { selectedNodes: [] });\n },\n\n openDetailPanel() {\n patchState(store, { detailPanel: true });\n },\n\n closeDetailPanel() {\n patchState(store, { detailPanel: false });\n },\n\n toggleDetailPanel() {\n patchState(store, { detailPanel: !store.detailPanel() });\n },\n\n //#region Menu Items\n\n async getFolderAddMenuItems({canAddFolder = true}: {canAddFolder?: boolean} = {}): Promise<AXPActionMenuItem[]> {\n const files =\n store.currentFolder()?.children?.filter((item: AXMDocumentExplorerNode) => item.type === 'file') ?? [];\n const galleryFiles = driveService.getGallerySupportedFiles(files);\n const openGalleryItem =\n galleryFiles.length > 0\n ? [\n {\n title: await translateService.translateAsync('@document-management:actions.open-gallery'),\n icon: 'fa-light fa-images',\n break: true,\n command: {\n name: 'open-gallery',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n },\n ]\n : [];\n const folderTypes = store.currentFolder()?.documentTypes ?? [];\n const allowedNames = store.allowedDocumentTypeNames();\n let typesToShow =\n allowedNames != null && allowedNames.length > 0\n ? folderTypes.filter((t) => t?.name && allowedNames.includes(t.name))\n : folderTypes;\n if (\n allowedNames != null &&\n allowedNames.length > 0 &&\n typesToShow.length === 0\n ) {\n typesToShow = await driveService.getDocumentTypesByNames(allowedNames);\n }\n\n return [\n ...(canAddFolder ? [ {\n title: await translateService.translateAsync('@document-management:actions.create-folder'),\n icon: 'fa-light fa-folder-plus',\n break: true,\n command: {\n name: 'new-folder',\n options: {\n folderId: store.currentFolder()?.id,\n },\n },\n }] : []),\n ...typesToShow.map((type) => ({\n title: type.title,\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n command: {\n name: `upload.${type.name}`,\n options: {\n folderId: store.currentFolder()?.id,\n documentType: type,\n },\n },\n })),\n ...openGalleryItem,\n ] as AXPActionMenuItem[];\n },\n\n async getFolderActionMenuItems(): Promise<AXPActionMenuItem[]> {\n return [\n {\n name: 'refresh',\n title: await translateService.translateAsync('@document-management:actions.refresh'),\n icon: 'fa-light fa-rotate-right',\n // break: true,\n },\n // {\n // name: 'delete',\n // title: await translateService.translateAsync('delete'),\n // color: 'danger',\n // icon: 'fa-light fa-trash',\n // },\n ];\n },\n\n //#endregion\n\n //#region Context Menu Items\n\n async getContextMenuItems(): Promise<AXPActionMenuItem[]> {\n return [...(await this.getFolderAddMenuItems()), ...(await this.getFolderActionMenuItems())];\n },\n\n //#endregion\n\n //#region ---- Menu Items ----\n\n /**\n * Returns menu items for file context menu\n */\n async getFileContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n const isLocked = async () => await this.isLocked(node);\n // const isNodeLocked = false;\n\n const menuItems: AXMenuItem[] = [\n {\n name: 'open-file',\n text: await trans('menus.context.open'),\n icon: this.getFileInfo(node.name).icon,\n data: node,\n },\n {\n name: 'download',\n text: await trans('menus.context.download'),\n icon: 'fa-light fa-download',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-share-nodes',\n items: [\n {\n name: 'share',\n text: await trans('menus.context.share.share'),\n icon: 'fa-light fa-users',\n data: node,\n },\n {\n name: 'share-with-email',\n text: await trans('menus.context.share.email'),\n icon: 'fa-light fa-envelope',\n data: node,\n },\n {\n name: 'link',\n text: await trans('menus.context.share.link'),\n icon: 'fa-light fa-link',\n data: node,\n },\n ],\n break: true,\n },\n ];\n\n // Manage versions (only if document type has versioning enabled)\n // const docType = node.documentTypes?.[0];\n //TODO handle versioning\n // if (docType?.enableVersioning) {\n // menuItems.push({\n // name: 'manage-versions',\n // text: await trans('menus.context.manage-versions'),\n // icon: 'fa-light fa-clock-rotate-left',\n // items: [\n // {\n // name: 'upload-new-version',\n // text: await trans('menus.context.upload-new-version'),\n // icon: 'fa-light fa-file-circle-plus',\n // data: node,\n // },\n // {\n // name: 'show-version-history',\n // text: await trans('menus.context.show-version-history'),\n // icon: 'fa-light fa-timeline',\n // data: node,\n // },\n // ],\n // break: true,\n // });\n // }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n // if (!isNodeLocked) {\n // infoSubItems.unshift({\n // name: 'rename',\n // text: await trans('menu.rename'),\n // icon: 'fa-light fa-pencil',\n // data: node,\n // });\n // }\n\n //Add lock or unlock based on current state\n // if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n // } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n // }\n\n menuItems.push({\n name: 'file-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n menuItems.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n break: true,\n data: node,\n },\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n\n return menuItems;\n },\n\n /**\n * Returns menu items for folder context menu\n */\n async getFolderContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n const trans = async (key: string) => await translateService.translateAsync(`@document-management:${key}`);\n // const isNodeLocked = await this.isLocked(node);\n const isNodeLocked = false;\n\n const items: AXMenuItem[] = [\n {\n name: 'open-folder',\n text: await trans('menus.context.open'),\n icon: 'fa-light fa-folder-open',\n data: node,\n },\n ];\n\n // Add upload menu only if not locked\n if (!isNodeLocked && node?.documentTypes?.length) {\n items.push({\n text: await trans('menus.context.upload'),\n icon: 'fa-light fa-file-arrow-up',\n break: true,\n items: node.documentTypes.map((type, index, array) => ({\n name: `upload.${type.name}`,\n text: type.title,\n icon: 'fa-light fa-file-arrow-up',\n break: index !== array.length - 1,\n data: {\n node,\n documentType: type,\n },\n })),\n });\n }\n\n // Information submenu items\n const infoSubItems: AXMenuItem[] = [\n {\n name: 'properties',\n text: await trans('menus.context.properties'),\n icon: 'fa-light fa-memo-circle-info',\n break: true,\n data: node,\n },\n ];\n\n // Add rename only if not locked\n if (!isNodeLocked) {\n infoSubItems.unshift({\n name: 'rename',\n text: await trans('menus.context.rename'),\n icon: 'fa-light fa-pencil',\n data: node,\n });\n }\n\n // Add lock or unlock based on current state\n if (isNodeLocked) {\n infoSubItems.push({\n name: 'unlock',\n text: await trans('menus.context.unlock'),\n icon: 'fa-light fa-unlock',\n data: node,\n });\n } else {\n infoSubItems.push({\n name: 'lock',\n text: await trans('menus.context.lock'),\n icon: 'fa-light fa-lock',\n data: node,\n });\n }\n\n items.push({\n name: 'folder-info',\n text: await trans('menus.context.information'),\n icon: 'fa-light fa-circle-info',\n items: infoSubItems,\n break: true,\n });\n\n // Add copy/move/delete operations only if not locked\n if (!isNodeLocked) {\n items.push(\n {\n name: 'copy',\n text: await trans('menus.context.make-copy'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'copy-to',\n text: await trans('menus.context.copy-to'),\n icon: 'fa-light fa-copy',\n data: node,\n },\n {\n name: 'move-to',\n text: await trans('menus.context.move-to'),\n icon: 'fa-light fa-arrow-right-arrow-left',\n data: node,\n },\n ...(node.storageType !== 'shortcut' && !node.isShortcut\n ? [\n {\n name: 'create-shortcut',\n text: await trans('menus.context.create-shortcut'),\n icon: 'fa-light fa-up-right-from-square',\n data: node,\n },\n ]\n : []),\n {\n name: 'delete',\n text: await trans('menus.context.delete'),\n icon: 'fa-light fa-trash',\n data: node,\n },\n );\n }\n\n return items;\n },\n\n /**\n * Returns context menu items based on node type\n */\n async getNodeContextMenuItems(node: AXMDocumentExplorerNode): Promise<AXMenuItem[]> {\n if (node.type === 'file') {\n return await this.getFileContextMenuItems(node);\n } else {\n return await this.getFolderContextMenuItems(node);\n }\n },\n\n //#endregion\n\n //#region ---- Menu Actions ----\n\n /**\n * Opens a file (double-click / Open action). For files, triggers download; same behavior as Download action.\n */\n async openFile(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type === 'file') {\n this.downloadFile(node);\n } else {\n await driveService.openFile(node);\n }\n },\n\n /**\n * Handles all menu item clicks\n */\n async handleMenuItemClick(name: string, data: any): Promise<void> {\n const node = data as AXMDocumentExplorerNode;\n switch (name) {\n case 'open-folder':\n this.navigateToFolder(node.id);\n break;\n case 'open-file':\n await this.openFile(node);\n break;\n case 'open-gallery':\n if (data.folderId != null) {\n await this.openGalleryWithFolderId();\n } else {\n await this.openGallery(node);\n }\n break;\n case 'download':\n this.downloadFile(node);\n break;\n case 'new-folder':\n await this.createFolder(node);\n break;\n case 'paste':\n //TODO: Handle paste operation\n break;\n case 'move-to':\n await this.moveTo(node);\n break;\n case 'copy-to':\n await this.copyTo(node);\n break;\n case 'create-shortcut':\n await this.createShortcut(node);\n break;\n case 'rename':\n await this.renameNode(node);\n break;\n case 'properties':\n await this.showFolderProperty(node);\n break;\n case 'delete':\n await this.deleteNodes([node]);\n break;\n case 'refresh':\n await this.refresh();\n break;\n case 'upload-new-version':\n await driveService.uploadNewVersion(node);\n await this.refresh();\n break;\n case 'show-version-history':\n await driveService.showVersionHistory(node);\n break;\n case 'copy':\n await this.makeCopy(node);\n break;\n /*\n case 'share':\n await this.share(node);\n break;\n case 'share-with-email':\n await this.shareWithEmail(node);\n break;\n case 'link':\n await this.link(node);\n break;\n */\n case 'lock':\n await this.lock(node);\n break;\n case 'unlock':\n await this.unlock(node);\n break;\n default:\n if (name?.startsWith('upload.')) {\n await this.uploadFileByType(data.node?.id ?? store.currentNode()?.id, data.documentType.id);\n await this.refresh();\n }\n break;\n }\n },\n\n /**\n * Downloads the specified file\n */\n downloadFile(node: AXMDocumentExplorerNode): void {\n driveService.downloadFile(node);\n },\n\n /**\n * Opens the gallery for a folder\n */\n async openGallery(node: AXMDocumentExplorerNode): Promise<void> {\n await driveService.showFileViewerPopup(node, {\n folderVirtualFiles: store.files(),\n index: store.files().findIndex((f: AXMDocumentExplorerNode) => f.id === node.id),\n });\n },\n\n /**\n * Shows properties for a folder\n */\n async showFolderProperty(node: AXMDocumentExplorerNode): Promise<void> {\n if (node.type == 'folder') {\n if (await driveService.showFolderEditDialog(node)) {\n await this.refresh();\n }\n } else {\n if (await driveService.updateUploadFileByType(node)) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a new folder\n */\n async createFolder(node?: AXMDocumentExplorerNode): Promise<void> {\n const parentId = node?.id ?? store.currentNode()?.id;\n if (parentId) {\n const allowedNames = store.allowedDocumentTypeNames();\n console.log('allowedNames', allowedNames);\n \n const result = await driveService.showCreateFolderDialog(parentId, {\n allowedDocumentTypeNames:\n allowedNames != null && allowedNames.length > 0 ? allowedNames : undefined,\n });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Renames a node\n */\n async renameNode(node?: AXMDocumentExplorerNode): Promise<AXMDocumentExplorerNode | undefined> {\n if (node) {\n const result = await driveService.showRenamePopup(node);\n if (result) {\n if (node.storageType == 'virtual') {\n const files = store.files();\n const updatedFiles = files.map((file) => {\n if (file.id === result.id) {\n return result;\n }\n return file;\n });\n this.virtualFolder(updatedFiles);\n }\n await this.refresh();\n }\n return result;\n }\n return;\n },\n\n /**\n * Makes a copy of a node\n */\n async makeCopy(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n try {\n await driveService.copy(node);\n await this.refresh();\n } catch (error) {\n console.error('Error copying node:', error);\n }\n }\n },\n\n /**\n * Checks if a node is locked\n */\n async isLocked(node: AXMDocumentExplorerNode): Promise<boolean> {\n try {\n return lockService.check({\n refId: node.id,\n refType: `${RootConfig.module.name}.${node.type === 'folder' ? RootConfig.entities.folder.name : RootConfig.entities.document.name}`,\n });\n } catch (error) {\n console.error('Error checking lock status:', error);\n return false;\n }\n },\n\n /**\n * Locks a node\n */\n async lock(node: AXMDocumentExplorerNode): Promise<void> {\n const locked = await driveService.showLockDialog(node);\n if (locked) {\n await this.refresh();\n }\n },\n\n /**\n * Unlocks a node\n */\n async unlock(node: AXMDocumentExplorerNode): Promise<void> {\n const unlocked = await driveService.showUnlockDialog(node);\n if (unlocked) {\n await this.refresh();\n }\n },\n\n /**\n * Moves a node to a different location\n */\n async moveTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.moveTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Copies a node to a different location\n */\n async copyTo(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const result = await driveService.copyTo({ browseMode: 'folder', node: node, scope: store.scope() });\n if (result) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Creates a shortcut to the node in a folder chosen by the user.\n */\n async createShortcut(node?: AXMDocumentExplorerNode): Promise<void> {\n if (node) {\n const created = await driveService.createShortcutWithPicker(node, store.scope());\n if (created) {\n await this.refresh();\n }\n }\n },\n\n /**\n * Uploads a file by type\n */\n async uploadFileByType(folderId: string, documentTypeId: string): Promise<void> {\n await driveService.uploadFileByType(folderId, documentTypeId);\n await this.refresh();\n },\n\n //#endregion\n }),\n ),\n);\n","import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXContextMenuComponent,\n AXContextMenuItemsClickEvent,\n AXContextMenuOpeningEvent,\n AXMenuItem,\n AXMenuModule,\n} from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPStateMessageComponent } from '@acorex/platform/layout/components';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, signal, Type, viewChild, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { get } from 'lodash-es';\nimport { AXMDocumentManagerService } from '../shared/document-manager.service';\nimport {\n AXMDocumentExplorerBrowseMode,\n AXMDocumentExplorerNode,\n AXMDocumentSelectionMode,\n AXPDocumentExplorerViewMode,\n} from '../shared/document-manager.types';\nimport { AXPDocumentExplorerViewModel } from './document-explorer.viewmodel';\n@Component({\n selector: 'axm-document-explorer',\n templateUrl: './document-explorer.component.html',\n styleUrls: ['./document-explorer.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n RouterModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXFormatModule,\n AXDateTimeModule,\n AXMenuModule,\n AXPStateMessageComponent,\n ],\n})\nexport class AXMDocumentExplorerComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected contextMenu = viewChild<AXContextMenuComponent>('itemsContextMenu');\n protected rootContextMenu = viewChild<AXContextMenuComponent>('rootContextMenu');\n protected driveService = inject(AXMDocumentManagerService);\n protected translateService = inject(AXTranslationService);\n protected readonly layout = inject(AXPLayoutThemeService);\n\n browseMode = input<AXMDocumentExplorerBrowseMode>('file');\n viewMode = input<AXPDocumentExplorerViewMode>();\n selectionMode = input<AXMDocumentSelectionMode>('none');\n showContextMenu = input<boolean>(true);\n\n protected view = signal<Type<any> | null>(null);\n\n private viewMap = {\n list: async () => (await import('./views/list/list-view.component')).AXMDocumentExplorerListViewComponent,\n 'small-tiles': async () =>\n (await import('./views/small-tiles/small-tiles-view.component')).AXMDocumentExplorerSmallTilesViewComponent,\n 'large-tiles': async () =>\n (await import('./views/large-tiles/large-tiles-view.component')).AXMDocumentExplorerLargeTilesViewComponent,\n details: async () =>\n (await import('./views/details/details-view.component')).AXMDocumentExplorerDetailsViewComponent,\n 'large-icons': async () =>\n (await import('./views/large-icons/large-icons-view.component')).AXMDocumentExplorerLargeIconsViewComponent,\n 'small-icons': async () =>\n (await import('./views/small-icons/small-icons-view.component')).AXMDocumentExplorerSmallIconsViewComponent,\n 'attachment': async () =>\n (await import('./views/attachement-widget/attachment-widget.component')).AXMDocumentExplorerAttachmentComponent,\n };\n\n #effect = effect(() => {\n if (this.vm.loadingFolderId() == null) {\n setTimeout(() => {\n this.contextMenu()?.refresh();\n this.rootContextMenu()?.refresh();\n }, 300);\n }\n });\n\n #effect2 = effect(() => {\n if (this.viewMode()) {\n this.vm.setViewMode(this.viewMode()!);\n }\n if (this.selectionMode()) {\n this.vm.setSelectionMode(this.selectionMode()!);\n }\n });\n\n #effect3 = effect(async () => {\n const func = get(this.viewMap, this.vm.viewMode() as string) ?? this.viewMap['large-tiles'];\n const comp = await func();\n this.view.set(comp);\n // Re-bind context menus to the new view DOM so right-click on items is recognized\n setTimeout(() => {\n this.contextMenu()?.refresh();\n this.rootContextMenu()?.refresh();\n }, 100);\n });\n\n //#region Menu and Context Menu\n\n protected async handleContextMenuOnOpening(e: AXContextMenuOpeningEvent) {\n const el = e.targetElement as HTMLElement | undefined;\n const node = (get(el, '__data__') ?? get(el?.closest?.('.__explorer-item'), '__data__')) as\n | AXMDocumentExplorerNode\n | undefined;\n if (!node) {\n return;\n }\n\n // Get menu items from ViewModel\n const items = await this.vm.getNodeContextMenuItems(node);\n\n // Set items directly to the context menu\n e.items.push(...items);\n }\n\n protected async handleContextMenuRootOnOpening(e: AXContextMenuOpeningEvent) {\n //TODO: check async translate method in acorex\n const items = [\n ...(await this.vm.getFolderAddMenuItems()).map((m) => ({\n ...m,\n name: m.command?.name,\n data: m.command?.options,\n })),\n ...(await this.vm.getFolderActionMenuItems()),\n ];\n const mappedItems = items.map((m) => ({\n ...m,\n text: m.title,\n })) as AXMenuItem[];\n e.items.push(...mappedItems);\n\n e.items[e.items.length - 1].break = false;\n }\n\n protected async handleContextMenuItemClick(e: AXContextMenuItemsClickEvent) {\n if (e.item.name) {\n await this.vm.handleMenuItemClick(e.item.name, e.item.data);\n }\n }\n\n //#endregion\n\n // تمام متدهای زیر به ViewModel منتقل شده‌اند و دیگر مورد نیاز نیستند\n\n}\n","<!-- Empty State -->\n<div class=\"view-container\">\n @if (vm.filteredFolders().length === 0 && vm.filteredFiles().length === 0) {\n <axp-state-message\n icon=\"fa-light fa-folder-open\"\n [title]=\"'@document-management:empty-states.no-items.title'\"\n [description]=\"'@document-management:empty-states.no-items.description'\"\n >\n </axp-state-message>\n } @else {\n <ng-container [ngComponentOutlet]=\"view()\"></ng-container>\n }\n</div>\n\n<!-- Context Menu -->\n@if (showContextMenu()) {\n <!-- Item Context Menu-->\n <ax-context-menu\n #itemsContextMenu\n [target]=\"'.__explorer-item'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuOnOpening($event)\"\n >\n </ax-context-menu>\n <!-- Root Context Menu-->\n <ax-context-menu\n #rootContextMenu\n [target]=\"'.view-container'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n (onOpening)=\"handleContextMenuRootOnOpening($event)\"\n >\n </ax-context-menu>\n}\n","import { AXButtonModule } from \"@acorex/components/button\";\nimport { AXDecoratorModule } from \"@acorex/components/decorators\";\nimport { AXPDocumentExplorerViewModel } from \"../../../document-explorer\";\nimport { AXMDocumentExplorerNode } from \"../../document-manager.types\";\nimport { Component, inject } from \"@angular/core\";\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\n\n\n@Component({\n selector: 'axm-folder-path-breadcrumbs',\n templateUrl: './folder-path-breadcrumbs.component.html',\n styleUrls: ['./folder-path-breadcrumbs.component.scss'],\n standalone: true,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n ],\n})\nexport class AXMFolderPathBreadcrumbsComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n protected layout = inject(AXPLayoutThemeService);\n}\n","<!-- Breadcrumbs Section -->\n<div class=\"__breadcrumb ax-xs\">\n <!-- Desktop Breadcrumb -->\n @for (item of vm.currentPath(); track item.id; let i = $index;let last = $last) {\n <!-- Navigation Button -->\n <ax-button look=\"blank\" (onClick)=\"vm.navigateToFolder(item.id)\" [text]=\"item.name\" [disabled]=\"last\">\n @if(i === 0) {\n <ax-icon icon=\"fa-light fa-cloud\"></ax-icon>\n }@else {\n <ax-icon icon=\"fa-light fa-folder-closed\"></ax-icon>\n }\n </ax-button>\n <!-- Separator -->\n @if(!last) {\n <i class=\"far fa-chevron-right rtl:ax-rotate-180 fa-fw fa-xs ax-me-2\"></i>\n }\n <!-- End Navigation Button -->\n }\n</div>\n","import { inject } from '@angular/core';\nimport { AXPDataGenerator } from '@acorex/platform/core';\nimport {\n AXPFileActionProvider,\n AXPFileStorageService,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex/platform/common';\nimport { AXMDocumentManagerService } from '../../../shared';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPFileListItem } from '@acorex/platform/core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXDialogService } from '@acorex/components/dialog';\n\n/**\n * Build a Blob for \"clone\" attachment from drive file metadata (storage fileId, url, or existing blob).\n */\nasync function resolveCloneBlob(\n fileInfo: AXPFileListItem | undefined,\n fileStorageService: AXPFileStorageService,\n): Promise<{ blob: Blob; name?: string; size?: number; mimeType?: string } | null> {\n if (!fileInfo) {\n return null;\n }\n if (fileInfo.source?.kind === 'blob' && fileInfo.source.value instanceof Blob) {\n const b = fileInfo.source.value;\n return { blob: b, name: fileInfo.name, size: fileInfo.size ?? b.size, mimeType: b.type };\n }\n const storageKeyFromSource =\n fileInfo.source?.kind === 'fileId' && typeof fileInfo.source.value === 'string'\n ? fileInfo.source.value\n : undefined;\n if (storageKeyFromSource) {\n try {\n const storageInfo = await fileStorageService.getInfo(storageKeyFromSource);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* try fallbacks */\n }\n }\n if (typeof fileInfo.id === 'string' && fileInfo.source?.kind !== 'url') {\n try {\n const storageInfo = await fileStorageService.getInfo(fileInfo.id);\n const bin = storageInfo.binary as unknown as BlobPart;\n return {\n blob: new Blob([bin], { type: storageInfo.mimeType }),\n name: storageInfo.name ?? fileInfo.name,\n size: storageInfo.size,\n mimeType: storageInfo.mimeType,\n };\n } catch {\n /* fall through */\n }\n }\n if (fileInfo.source?.kind === 'url' && typeof fileInfo.source.value === 'string') {\n try {\n const res = await fetch(fileInfo.source.value, { credentials: 'include' });\n if (!res.ok) {\n return null;\n }\n const blob = await res.blob();\n return {\n blob,\n name: fileInfo.name,\n size: fileInfo.size ?? blob.size,\n mimeType: blob.type || 'application/octet-stream',\n };\n } catch {\n return null;\n }\n }\n return null;\n}\n\nexport const UploadFromDriveActionProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 2,\n execute: (payload: AXCFileUploaderActionsPayload): AXCFileUploaderActionsPayload => {\n const driveService = inject(AXMDocumentManagerService);\n const fileStorageService = inject(AXPFileStorageService);\n const translationService = inject(AXTranslationService);\n const dialogService = inject(AXDialogService);\n\n payload.actions = [\n ...payload.actions,\n {\n plugin: 'upload-document-from-drive',\n global: true,\n textKey: '@document-management:actions.choose-from-drive',\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const result = await driveService.showChooseFileDialog(AXPPlatformScope.Tenant);\n\n if (!result || result.length === 0) {\n return;\n }\n\n const dialogTitle = await translationService.translateAsync(\n '@document-management:actions.upload-options.title',\n );\n const dialogMessage = await translationService.translateAsync(\n '@document-management:actions.upload-options.confirm-message',\n );\n\n const dialogResult = await dialogService.confirm(\n dialogTitle,\n dialogMessage,\n 'primary',\n 'horizontal',\n false,\n 'cancel',\n );\n\n // OK / primary -> clone copy; Cancel / secondary -> link by document reference (see i18n confirm-message)\n const attachmentType = dialogResult.result ? 'clone' : 'by-reference';\n\n const finalItems: AXPFileListItem[] = [];\n\n for (const item of result) {\n if (item.type === 'folder') {\n continue;\n }\n\n const fi = item.fileId;\n const displayName = (fi?.name ?? item.name ?? '').trim() || 'file';\n const displaySize = fi?.size ?? item.size ?? 0;\n\n if (attachmentType === 'by-reference') {\n // Use document id as row id so storage/middleware correlation matches entity link (document:… after save)\n finalItems.push({\n id: item.id,\n name: displayName,\n size: displaySize,\n status: 'attached',\n source: {\n kind: 'reference',\n value: {\n id: item.id,\n type: 'document',\n },\n },\n });\n continue;\n }\n\n const resolved = await resolveCloneBlob(fi, fileStorageService);\n if (!resolved) {\n continue;\n }\n\n finalItems.push({\n id: AXPDataGenerator.uuid(),\n name: resolved.name ?? displayName,\n size: resolved.size ?? resolved.blob.size,\n status: 'attached',\n source: {\n kind: 'blob',\n value: resolved.blob,\n },\n });\n }\n\n if (finalItems.length > 0) {\n capabilities.addFiles(finalItems);\n }\n },\n },\n ];\n\n return payload;\n },\n};\n","import { CommonModule } from \"@angular/common\";\nimport { NgModule } from \"@angular/core\";\nimport { AXP_FILE_ACTION_PROVIDER, UploadFromComputerActionProvider } from \"@acorex/platform/common\";\nimport { UploadFromDriveActionProvider } from \"./slots/file-uploader-widget-extension\";\n\n@NgModule({\n imports:[\n ],\n providers: [\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromComputerActionProvider, multi: true },\n { provide: AXP_FILE_ACTION_PROVIDER, useValue: UploadFromDriveActionProvider, multi: true }\n ]\n}) \nexport class AXMDriveChooseModule { \n\n}","import { AXUploaderService } from '@acorex/cdk/uploader';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext } from '@acorex/platform/workflow';\nimport { Injectable, inject } from '@angular/core';\nimport { AXMDocumentDocDto, AXMDocumentTypeService } from '../../../entities';\nimport { AXMDocumentDialogService } from '../../shared/services/document-dialog.service';\n\n@Injectable()\nexport class AXMCheckDocumentTypeWorkflowAction extends AXPWorkflowAction {\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const documentType = context.getVariable('documentType');\n if (documentType) {\n context.setOutput('need-choose-document-type', false);\n } else {\n context.setOutput('need-choose-document-type', true);\n }\n }\n}\n\n@Injectable()\nexport class AXMChooseDocumentTypeWorkflowAction extends AXPWorkflowAction {\n private readonly documentDialog = inject(AXMDocumentDialogService);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const result = await this.documentDialog.chooseDocumentType();\n if (result.cancelled) {\n context.setOutput('isCanceled', true);\n return;\n }\n context.setVariable('documentTypeId', result.documentTypeId);\n context.setOutput('isCanceled', false);\n }\n}\n\n@Injectable()\nexport class AXMChooseFileWorkflowAction extends AXPWorkflowAction {\n documentTypeService = inject(AXMDocumentTypeService);\n uploadService = inject(AXUploaderService);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n var doc: AXMDocumentDocDto = context.getVariable('documentType');\n if (!doc) {\n const docId = context.getVariable('documentTypeId');\n doc = await this.documentTypeService.getOne(docId);\n }\n\n this.uploadService.browse({\n //accept: doc.type,\n multiple: false,\n });\n }\n}\n\nexport const AXMUploadWorkflow: AXPWorkflow = {\n startStepId: 'check-document-type',\n steps: {\n 'check-document-type': {\n action: 'AXMCheckDocumentTypeWorkflowAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"need-choose-document-type\") == true' }],\n nextStepId: 'choose-document-type',\n },\n ],\n },\n 'choose-document-type': {\n action: 'AXMChooseDocumentTypeWorkflowAction',\n nextSteps: [\n {\n conditions: [{ type: 'SINGLE', expression: 'context.getOutput(\"isCanceled\") == false' }],\n nextStepId: 'file-browser',\n },\n ],\n },\n 'file-browser': {\n action: 'AXMChooseFileWorkflowAction',\n nextSteps: [\n {\n conditions: [],\n nextStepId: 'dispatch-event',\n },\n ],\n },\n },\n};\n","import {\n AXPEntityActionPlugin,\n ensureListActions,\n resolveEntityPluginDetailPageOrder,\n} from '@acorex/platform/layout/entity';\n\n/** Component key for the entity Documents (EDMS) page. Register via AXP_PAGE_COMPONENT_PROVIDER. */\nexport const DOCUMENT_DRIVE_PAGE_COMPONENT_KEY = 'entity-document-drive-page';\n\nexport type DocumentPluginOptions = {\n /** Page title. Default: @document-management:terms.common.documents */\n title?: string;\n /** Page icon. Default: fa-light fa-folder-open */\n icon?: string;\n /**\n * Restrict document types for this entity: only these types can be selected when creating a folder\n * or uploading. User cannot see or select other document types.\n */\n documentTypeNames?: string[];\n};\n\n/**\n * Document (EDMS) plugin. Adds a \"Documents\" page to the entity that loads the folder\n * bound to the current record via refType/refId (getRootByEntityRef). Uses the same\n * drive UI (explorer, toolbar, detail panel) scoped to that folder.\n */\nexport const documentPlugin: AXPEntityActionPlugin = {\n name: 'documents',\n order: 51,\n apply: (ctx, options?: DocumentPluginOptions) => {\n const opts = options ?? {};\n const title = (opts.title?.trim().length ?? 0) > 0 ? opts.title! : '@document-management:terms.common.documents';\n const refType = `${ctx.entity.module}.${ctx.entity.name}`;\n\n ctx.entity.pages ??= [];\n const pageExists = ctx.entity.pages.some(\n (p: { componentKey?: string }) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n );\n const pageOrder = resolveEntityPluginDetailPageOrder(\n { relatedEntities: ctx.entity.relatedEntities, pages: ctx.entity.pages },\n 'documents',\n {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n skipPage: pageExists\n ? { componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY }\n : undefined,\n },\n );\n const pageEntry: {\n componentKey: string;\n title: string;\n icon: string;\n layout: { order: number };\n refType: string;\n allowedDocumentTypeNames?: string[];\n options?: Record<string, any>;\n } = {\n componentKey: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n title,\n icon: opts.icon ?? 'fa-light fa-files',\n layout: { order: pageOrder },\n refType,\n options: {\n documentTypeNames: opts.documentTypeNames,\n },\n };\n if (Array.isArray(opts.documentTypeNames) && opts.documentTypeNames.length > 0) {\n pageEntry.allowedDocumentTypeNames = opts.documentTypeNames;\n }\n if (!pageExists) {\n (ctx.entity.pages as (typeof pageEntry)[]).push(pageEntry);\n } else {\n const pages = ctx.entity.pages as typeof pageEntry[];\n const index = pages.findIndex((p) => p.componentKey === DOCUMENT_DRIVE_PAGE_COMPONENT_KEY);\n if (index >= 0) {\n pages[index] = { ...pages[index], ...pageEntry };\n }\n }\n\n ensureListActions(ctx);\n },\n};\n","import { Component, effect, inject, signal, ViewEncapsulation } from '@angular/core';\nimport { AXPDocumentExplorerViewModel } from '../../document-explorer.viewmodel';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { CommonModule } from '@angular/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDocumentExplorerNode } from '../../../shared/document-manager.types';\nimport { AXMDocumentTypeService } from '../../../../entities';\nimport type { AXMMetaDataBuilderValue } from '@acorex/modules/data-management';\n\n@Component({\n selector: 'axm-document-explorer-detail-panel',\n templateUrl: './detail-panel.component.html',\n styleUrls: ['./detail-panel.component.scss'],\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [\n CommonModule,\n AXDecoratorModule,\n AXFormatModule,\n AXButtonModule,\n AXTranslationModule,\n AXPWidgetCoreModule,\n ],\n})\nexport class AXMDocumentExplorerDetailPanelComponent {\n protected vm = inject(AXPDocumentExplorerViewModel);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n\n /** Schema (groups) for metadata form; set when selected file has a document type with metaDataList. */\n protected metadataSchema = signal<AXMMetaDataBuilderValue | null>(null);\n /** Context passed to meta-data-form-editor widget (value = metaDataForm). */\n protected metadataContext = signal<{ metaDataForm: Record<string, unknown> }>({ metaDataForm: {} });\n /** Stable widget node for meta-data-form-editor; only updated when schema loads, to avoid re-render loop. */\n protected metadataWidgetNode = signal<{ type: string; path: string; options: { groups: any[] } } | null>(null);\n\n constructor() {\n effect(() => {\n const node = this.vm.selectedNode() as AXMDocumentExplorerNode | null | undefined;\n if (!node || node.type !== 'file' || !node.documentTypes?.[0]?.id) {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n return;\n }\n const documentTypeId = node.documentTypes[0].id;\n this.documentTypeService.getOne(documentTypeId).then((doc: { metaDataList?: AXMMetaDataBuilderValue }) => {\n const metaDataList = doc?.metaDataList ?? null;\n this.metadataSchema.set(metaDataList);\n this.metadataContext.set({ metaDataForm: (node.metaDataForm ?? {}) as Record<string, unknown> });\n this.metadataWidgetNode.set(\n metaDataList\n ? {\n type: 'meta-data-form-editor',\n path: 'metaDataForm',\n options: {\n groups: (metaDataList.groups ?? []).map((group) => ({\n ...group,\n fields: (group.fields ?? []).map((field) => ({ ...field, mode: 'view' as const })),\n })),\n },\n }\n : null,\n );\n \n }).catch(() => {\n this.metadataSchema.set(null);\n this.metadataContext.set({ metaDataForm: {} });\n this.metadataWidgetNode.set(null);\n });\n });\n }\n}\n","<!-- Multiple Selected -->\n@if (vm.hasMultipleSelectedItems()) {\n <div class=\"__header\" *translate=\"let t\">\n <div class=\"__title\">\n <i class=\"fa-fw fa-lg fa-solid\"></i>\n <span> {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\"></div>\n}\n<!-- Single Selected -->\n@else {\n <!-- Info -->\n @let nodeInfo = vm.getNodeInfo((vm.selectedNode() ?? vm.currentFolder())!);\n @let sel = vm.selectedNode() ?? vm.currentFolder();\n @let isShortcut = sel && (sel.storageType === 'shortcut' || sel.isShortcut);\n <div class=\"__header\">\n <div class=\"__title\">\n <span class=\"detail-panel-icon\" [class.detail-panel-icon--shortcut]=\"isShortcut\">\n <i class=\"fa-fw fa-lg {{ nodeInfo.icon }} fa-solid\"></i>\n @if (isShortcut) {\n <i class=\"fa-light fa-up-right-from-square detail-panel-icon__arrow\" aria-hidden=\"true\"></i>\n }\n </span>\n <span>{{ nodeInfo.name }}</span>\n </div>\n <ax-button [look]=\"'blank'\" class=\"ax-sm ax-rounded-full\" (onClick)=\"vm.closeDetailPanel()\">\n <ax-icon icon=\"fa-solid fa-xmark\"></ax-icon>\n </ax-button>\n </div>\n <div class=\"__content\">\n @for (section of nodeInfo.sections; track section.title) {\n <div class=\"__section\">\n <div class=\"__title\">\n <span>{{ section.title }}</span>\n </div>\n <div class=\"__content\">\n @if (section.title === 'Metadata' && metadataWidgetNode(); as widgetNode) {\n <axp-widgets-container [context]=\"metadataContext()\">\n <ng-container axp-widget-renderer [node]=\"widgetNode\" [mode]=\"'view'\"></ng-container>\n </axp-widgets-container>\n } @else {\n @for (detail of section.details; track detail.title) {\n <div class=\"__row\">\n <div class=\"__title\">\n <span>{{ detail.title }}</span>\n </div>\n <div class=\"__content\">\n @if (detail.format) {\n <span>{{ detail.content | format: detail.format | async }}</span>\n } @else {\n <span>{{ detail.content ?? '---' }}</span>\n }\n </div>\n </div>\n }\n }\n </div>\n </div>\n }\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n untracked,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent } from '@acorex/platform/layout/views';\n\nimport { AXValueChangedEvent } from '@acorex/cdk/common';\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPPlatformScope,\n} from '@acorex/platform/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { RootConfig } from '../../../const';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../../shared';\nimport { AXMDocumentSelectionMode } from '../../shared/document-manager.types';\n\n//#region ---- Document Drive Page Component ----\n\n/**\n * Entity page component that shows the EDMS drive UI scoped to the current record's folder.\n * Uses getRootByEntityRef(refType, refId) to load the folder; navigation stays in-page (no router).\n */\n@Component({\n selector: 'axm-document-drive-page',\n templateUrl: './document-drive-page.component.html',\n styleUrls: ['./document-drive-page.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBadgeModule,\n AXSearchBoxModule,\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDrivePageComponent,\n },\n ],\n})\nexport class AXMDocumentDrivePageComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---- Inputs ----\n\n rootContext = input.required<Record<string, unknown>>();\n pageConfig = input<Record<string, unknown>>();\n options = input<Record<string, any>>({});\n\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n private readonly route = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---- View State ----\n\n protected readonly filterItems = signal<Array<{ key: string; textKey: string; icon: string }>>([]);\n protected selectedFilter = signal<string>('all');\n protected searchQuery: string | null = null;\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n protected readonly viewsItems = signal([\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'details', icon: 'fa-bars', break: true },\n { key: 'list', icon: 'fa-list' },\n ]);\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) ?? this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n\n /** Folder id that was loaded as this page's root (entity ref root). We must not go back above it. */\n private readonly pageRootFolderId = signal<string | null>(null);\n\n //#endregion\n\n //#region ---- Computed ----\n\n /** True when we can show/use back: we're not on the page root and VM allows going up. */\n protected readonly canGoBackInPage = computed(() => {\n const rootId = this.pageRootFolderId();\n if (rootId == null) return false;\n const currentId = this.vm.currentNode()?.id;\n return this.vm.isUpAvailable() && currentId != null && currentId !== rootId;\n });\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) ?? items[0];\n });\n\n //#endregion\n\n //#region ---- Effects ----\n\n /** In embedded mode: when VM requests folder navigation, load that folder (no router). */\n #navigateEffect = effect(() => {\n const folderId = this.vm.navigatingFolderId();\n if (folderId) {\n this.vm.loadFolderContents(folderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n override async ngOnInit(): Promise<void> {\n super.ngOnInit();\n await this.loadFilterItems();\n\n const { refType, refId } = this.resolveEntityRef();\n if (!refType || !refId) {\n return;\n }\n\n console.log('options: ', this.options());\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n const pageConfigSnapshot = this.pageConfig();\n console.log('[document-drive-page] ngOnInit pageConfig():', pageConfigSnapshot);\n const allowedNames = this.getAllowedDocumentTypeNames();\n console.log('[document-drive-page] getAllowedDocumentTypeNames():', allowedNames);\n if (allowedNames) {\n this.vm.setAllowedDocumentTypeNames(allowedNames);\n }\n const { result } = await this.driveService.getRootByEntityRef(refType, refId);\n this.pageRootFolderId.set(result.id);\n await this.vm.loadFolderContents(result.id);\n this.recompute();\n }\n\n /** Allowed document type names from pageConfig (when plugin is configured with documentTypeNames). */\n private getAllowedDocumentTypeNames(): string[] | undefined {\n const config = this.pageConfig();\n const arr = config && (config as { allowedDocumentTypeNames?: string[] }).allowedDocumentTypeNames;\n return Array.isArray(arr) && arr.length > 0 ? arr : undefined;\n }\n\n /**\n * Resolves refType and refId for getRootByEntityRef from pageConfig, rootContext, or route.\n * Order: pageConfig.refType → rootContext (moduleName + entityName) → route params. refId from rootContext.id or recordId.\n */\n private resolveEntityRef(): { refType: string | null; refId: string | null } {\n const config = this.pageConfig();\n const context = this.rootContext() ?? {};\n const ctx = context as Record<string, unknown>;\n\n let refType: string | null =\n config && typeof (config as { refType?: string }).refType === 'string'\n ? (config as { refType: string }).refType\n : null;\n if (!refType) {\n const moduleName = typeof ctx['moduleName'] === 'string' ? ctx['moduleName'] : null;\n const entityName = typeof ctx['entityName'] === 'string' ? ctx['entityName'] : null;\n if (moduleName && entityName) {\n refType = `${moduleName}.${entityName}`;\n }\n }\n if (!refType) {\n const module = this.route.snapshot.parent?.paramMap.get('module');\n const entity = this.route.snapshot.paramMap.get('entity');\n if (module && entity) {\n refType = `${module}.${entity}`;\n }\n }\n\n const refId =\n (typeof ctx['id'] === 'string' ? ctx['id'] : null) ??\n (typeof ctx['recordId'] === 'string' ? ctx['recordId'] : null) ??\n null;\n\n return { refType, refId };\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n protected handleSearchChange(event: AXValueChangedEvent): void {\n this.searchQuery = event.value ?? null;\n if (this.searchQuery && this.searchQuery.length > 0) {\n this.performSearch(this.searchQuery);\n }\n }\n\n private async performSearch(searchValue: string): Promise<void> {\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.currentNode()?.id,\n });\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: this.vm.currentNode()?.id,\n });\n }\n\n protected handleNavigateToFolder(folderId: string): void {\n this.vm.navigateToFolder(folderId);\n }\n\n /** Navigate back one folder; only when not already on page root. */\n protected handleBack(): void {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n //#endregion\n\n //#region ---- Data Loading ----\n\n private async loadFilterItems(): Promise<void> {\n const types = await this.fileTypeService.items();\n const items = [\n { key: 'all', textKey: 'file-types.all', icon: 'fa-light fa-folder-closed' },\n ...types.map((type) => ({\n key: type.name,\n textKey: `file-types.${type.name}`,\n icon: type.icon ?? 'fa-light fa-file',\n })),\n ];\n this.filterItems.set(items);\n }\n\n //#endregion\n\n //#region ---- Filter Helpers ----\n\n protected setFilter(key: string): void {\n this.selectedFilter.set(key);\n }\n\n protected getFilterIcon(): string {\n if (this.selectedFilter() === 'all') return 'fa-light fa-folder-closed';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.icon ?? 'fa-light fa-file';\n }\n\n protected getFilterText(): string {\n if (this.selectedFilter() === 'all') return 'file-types.all';\n const item = this.filterItems().find((i) => i.key === this.selectedFilter());\n return item?.textKey ?? 'file-types.all';\n }\n\n //#endregion\n\n //#region ---- Page Layout Overrides ----\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems({canAddFolder : false});\n console.log('[document-drive-page] addItemItems:', addItemItems);\n if (addItemItems.length > 0) {\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n return [];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return await this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n return this.vm.currentFolder()?.name ?? '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = this.vm.itemsCount();\n const size = this.vm.availableSpace();\n const formattedSize = this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync('@document-management:terms.common.documents-description', {\n params: { count, size: formattedSize },\n });\n }\n\n override getBackButton(): AXPBackButton | null {\n if (!this.canGoBackInPage() || this.vm.currentPath().length < 2) return null;\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2]!.name,\n };\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.canGoBackInPage()) {\n this.vm.navigateToUp();\n }\n }\n\n /** Return empty so the page does not show a second breadcrumb bar; main breadcrumb stays at top. */\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n return [];\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems': {\n const nodes = this.vm.selectedNodes();\n if (nodes.length > 0) {\n const deleted = await this.driveService.showDeleteNodesDialog(nodes);\n if (deleted) this.vm.refresh();\n }\n break;\n }\n case 'navigate-to-folder':\n if (folderId) this.vm.navigateToFolder(folderId);\n break;\n case 'new-folder':\n if (folderId) {\n const allowedNames = this.getAllowedDocumentTypeNames();\n await this.driveService.showCreateFolderDialog(folderId, {\n allowedDocumentTypeNames: allowedNames,\n });\n this.vm.refresh();\n }\n break;\n case 'open-gallery':\n if (folderId) {\n const folder = this.vm.currentFolder();\n const files = folder?.children?.filter((item) => item.type === 'file') ?? [];\n const galleryFiles = this.driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await this.driveService.showFileViewerPopup(galleryFiles[0]);\n }\n }\n break;\n default:\n if (typeof command.name === 'string' && command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id);\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- Back (left) + View Mode & Detail Panel Toggle (right) -->\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n @if (canGoBackInPage()) {\n <ax-button (onClick)=\"handleBack()\" [title]=\"'@general:actions.back.title' | translate | async\">\n <ax-icon icon=\"fa-light fa-arrow-left\"></ax-icon>\n </ax-button>\n }\n </div>\n <div class=\"ax-flex ax-gap-2 ax-items-center\">\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <ax-button-item\n [text]=\"('@document-management:view-modes.' + item.key | translate | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n @if (deviceService.isLarge()) {\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </div>\n </div>\n <div class=\"ax-overflow-auto ax-flex ax-flex-row ax-gap-4\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"ax-sticky ax-top-0 ax-z-50\"></axm-document-explorer-detail-panel>\n }\n </div>\n</div>\n\n","import {\n AXPPageComponentDefinition,\n AXPPageComponentProvider,\n} from '@acorex/platform/layout/components';\nimport { Injectable } from '@angular/core';\nimport { DOCUMENT_DRIVE_PAGE_COMPONENT_KEY } from '../document.plugin';\n\n//#region ---- Document Drive Page Component Provider ----\n\n@Injectable()\nexport class AXMDocumentDrivePageComponentProvider implements AXPPageComponentProvider {\n async components(): Promise<AXPPageComponentDefinition[]> {\n return [\n {\n key: DOCUMENT_DRIVE_PAGE_COMPONENT_KEY,\n loader: () =>\n import('./document-drive-page.component').then((m) => m.AXMDocumentDrivePageComponent),\n },\n ];\n }\n}\n\n//#endregion\n","import { inject } from '@angular/core';\nimport { AXPFileStorageInfo, AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPEntityStorageMiddleware, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\n\nfunction getDocumentMetaDataForm(\n item: { meta?: { metaDataForm?: Record<string, unknown> }; metaDataForm?: Record<string, unknown> } | undefined,\n): Record<string, unknown> | undefined {\n if (item?.meta?.metaDataForm != null) return item.meta.metaDataForm;\n if (item?.metaDataForm != null) return item.metaDataForm;\n if (item?.meta != null && typeof item.meta === 'object' && !Array.isArray(item.meta)) {\n const m = item.meta as Record<string, unknown>;\n return (m['metaDataForm'] as Record<string, unknown> | undefined) ?? m;\n }\n return undefined;\n}\n\n/** Resolve list of attachment field names from entity extensions.attachments. */\nfunction getAttachmentFields(attachCfg: any): string[] {\n if (!attachCfg || typeof attachCfg !== 'object') return [];\n if (typeof (attachCfg as { field?: string }).field === 'string') return [(attachCfg as { field: string }).field];\n return Object.keys(attachCfg).filter((k) => k && typeof k === 'string');\n}\n\n/** Fallback: get attachment field names from properties with file-uploader interface (when extensions.attachments is missing e.g. cached def). */\nfunction getAttachmentFieldsFromProperties(def: any): string[] {\n const props = def?.properties as Array<{ name: string; schema?: { interface?: { type?: string } } }> | undefined;\n if (!Array.isArray(props)) return [];\n return props\n .filter((p) => p?.schema?.interface?.type === 'file-uploader' && p?.name)\n .map((p) => p.name);\n}\n\n/**\n * Handles file list fields configured via entity.extensions.attachments.\n * Preserves metaDataForm from widget; uploads pending blobs after persistence and writes final references.\n * Runs before file-cast (order 25) so blobs are uploaded before file-cast sees the data.\n */\n// Run before file-cast (order 25) so blobs are uploaded and refs written before file-cast sees the data\nexport const attachmentsUploadMiddleware: AXPEntityStorageMiddleware = {\n target: { ops: ['create', 'update'], order: 22 },\n execute: async (ctx, next) => {\n const registry = inject(AXPEntityDefinitionRegistryService);\n const storage = inject(AXPFileStorageService);\n const [moduleName, entityNameOnly] = ctx.entityName.split('.');\n const def = await registry.resolve(moduleName, entityNameOnly).catch(() => null as any);\n const attachCfg = (def as any)?.extensions?.attachments;\n let fields = getAttachmentFields(attachCfg);\n if (!fields.length && def) fields = getAttachmentFieldsFromProperties(def);\n if (!fields.length) {\n await next();\n return;\n }\n\n const pendingByField = (ctx.locals as any).attach_pending ?? {};\n (ctx.locals as any).attach_pending = pendingByField;\n\n if (ctx.data && typeof ctx.data === 'object') {\n for (const field of fields) {\n const list: any[] = Array.isArray((ctx.data as any)[field]) ? (ctx.data as any)[field] : [];\n pendingByField[field] = [] as Array<{ fileItem: any; blob: File }>;\n const normalized: any[] = [];\n\n for (const item of list) {\n const metaDataForm = getDocumentMetaDataForm(item);\n\n if (item?.source?.kind === 'blob' && item.source.value instanceof Blob) {\n const blob = item.source.value as File;\n const name = item.name || `file-${Date.now()}`;\n pendingByField[field].push({ fileItem: { ...item, name, metaDataForm }, blob });\n const entry: any = {\n tempId: item.id,\n name,\n size: item.size ?? (blob as File).size,\n status: 'pending_upload',\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.source?.kind === 'fileId' && item.id && typeof item.source.value === 'string') {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: { kind: 'fileId', value: item.source.value },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n } else if (item?.id && item?.name) {\n const entry: any = {\n id: item.id,\n name: item.name,\n size: item.size,\n status: item.status || 'uploaded',\n source: item.source ? { kind: item.source.kind, value: item.source.value } : undefined,\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n normalized.push(entry);\n }\n }\n\n const dataForBackend = normalized.filter((x: any) => x.status !== 'pending_upload');\n (ctx.data as any)[field] = dataForBackend;\n }\n }\n\n await next();\n\n const refId = ctx.op === 'create' ? String(ctx.result) : String(ctx.id);\n const refType = ctx.entityName;\n\n for (const field of fields) {\n const pending: Array<{ fileItem: any; blob: File }> = pendingByField[field] ?? [];\n if (!pending.length) continue;\n if (!storage) continue;\n\n const finalRefs: any[] = ((ctx.data as any)[field] ?? []).filter((x: any) => x.status !== 'pending_upload');\n\n for (const { fileItem, blob } of pending) {\n const metaDataForm = fileItem.metaDataForm ?? getDocumentMetaDataForm(fileItem);\n try {\n const info: AXPFileStorageInfo = await storage.save({\n file: blob,\n refId,\n refType,\n category: '',\n name: fileItem.name,\n });\n await storage.commit(info.fileId);\n const entry: any = {\n id: info.fileId,\n name: info.name || fileItem.name,\n size: info.size || blob.size,\n type: info.mimeType || blob.type,\n status: 'uploaded',\n source: { kind: 'fileId', value: info.fileId },\n };\n if (metaDataForm) entry.metaDataForm = metaDataForm;\n finalRefs.push(entry);\n } catch (err: any) {\n finalRefs.push({\n tempId: fileItem.id,\n name: fileItem.name,\n size: fileItem.size,\n type: (blob as File).type,\n status: 'upload_failed',\n error: err?.message,\n });\n }\n }\n\n const entityId = ctx.op === 'create' ? ctx.result : ctx.id;\n if (entityId != null) {\n const payload = { [field]: finalRefs } as any;\n const withMeta = finalRefs.filter((r: any) => r?.metaDataForm != null).length;\n console.log('[attachments-upload] ذخیره — الان میخوام ctx.backend.updateOne بزنم (پچ با metaDataForm)', {\n entityName: ctx.entityName,\n entityId,\n field,\n finalRefsLength: finalRefs.length,\n withMetaCount: withMeta,\n payloadSample: payload[field]?.map((r: any, i: number) => ({ i, hasMeta: !!r?.metaDataForm })),\n });\n try {\n await ctx.backend.updateOne(ctx.entityName, entityId, payload);\n console.log('[attachments-upload] ذخیره — ctx.backend.updateOne انجام شد (ok)');\n } catch (err) {\n console.warn('[attachments-upload] ذخیره — ctx.backend.updateOne خطا', err);\n // Result already persisted; optional patch for final refs failed\n }\n }\n if (typeof ctx.result === 'object' && ctx.result !== null) {\n ctx.result = { ...(ctx.result as any), [field]: finalRefs };\n }\n }\n },\n};\n\n","import { AXPSettingDefinitionProvider, AXPSettingDefinitionProviderContext } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXMDocumentMetadataOcrSettings } from './document-metadata-ocr.settings.keys';\n\n@Injectable()\nexport class AXMSettingProvider implements AXPSettingDefinitionProvider {\n private readonly translateService = this.injector.get(AXTranslationService);\n\n constructor(private injector: Injector) {}\n\n async provide(context: AXPSettingDefinitionProviderContext): Promise<void> {\n const t = async (key: string) =>\n await this.translateService.translateAsync(`@document-management:settings.metadata-ocr.${key}`);\n\n context\n .addGroup(\n 'document-management-metadata-ocr',\n await t('group-title'),\n await t('group-description'),\n RootConfig.module.icon,\n )\n .addSection('metadata-ocr', await t('section-title'), await t('section-description'))\n .addSetting({\n key: AXMDocumentMetadataOcrSettings.Enabled,\n title: await t('enabled-title'),\n scope: 'T',\n isInherited: true,\n defaultValue: true,\n widget: {\n type: AXPWidgetsCatalog.toggle,\n },\n description: await t('enabled-description'),\n })\n .addSetting({\n key: AXMDocumentMetadataOcrSettings.AssistId,\n title: await t('assist-id-title'),\n scope: 'T',\n isInherited: true,\n defaultValue: '',\n widget: {\n type: AXPWidgetsCatalog.text,\n options: {\n placeholder: await t('assist-id-placeholder'),\n },\n },\n description: await t('assist-id-description'),\n })\n .endSection()\n .endGroup();\n }\n}\n","import {\n AXP_FILE_ACTION_PROVIDER,\n AXPFileActionProvider,\n AXPFileStorageService,\n AXCFileUploaderActionsPayload,\n AXCFileUploaderCapabilities,\n} from '@acorex/platform/common';\nimport { AXPDistributedEventListenerProvider, AXPDataGenerator, AXPEntityReference, AXPFileListItem } from '@acorex/platform/core';\nimport { AXPDynamicFormFieldDefinition, AXPDynamicFormGroupDefinition } from '@acorex/platform/layout/builder';\nimport { inject, Injector } from '@angular/core';\nimport { set } from 'lodash-es';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXPEntityService } from '@acorex/platform/layout/entity';\nimport { AXMDocumentDocDto, AXMDocumentDto } from '../../entities';\nimport { RootConfig } from '../../const';\nimport { AXPDocumentManagementService } from './document-management.service';\nimport { AXMDocumentDialogService } from './services/document-dialog.service';\n\n/** Document fields without fileInfo (meta on AXPFileListItem). */\ntype AXMDocumentMeta = Omit<AXMDocumentDto, 'fileInfo'>;\n\nfunction getFileIdFromFileInfo(\n fileInfo: { id?: string; source?: { kind?: string; value?: unknown } } | string | undefined,\n): string | undefined {\n if (fileInfo == null) return undefined;\n if (typeof fileInfo === 'string') return fileInfo;\n if (fileInfo.source?.kind === 'fileId' && typeof fileInfo.source.value === 'string') return fileInfo.source.value;\n if (typeof fileInfo.id === 'string') return fileInfo.id;\n return undefined;\n}\n\n/**\n * Document File Uploader Widget Plugin\n *\n * Provides hook providers for the File Uploader widget to integrate Document Management behaviors.\n * Keys implemented here:\n * - file-uploader.configure → override accept based on docTypeId\n * - file-uploader.actions → one \"Upload\" button per document type (replaces generic Upload from Device)\n * - file-uploader.beforeFilesAdded → open metadata dialog for selected type\n * - file-uploader.fileItem.actions → add per-file actions (e.g., Edit Metadata)\n *\n * Conventions:\n * - plugin name: 'document'\n * - options: { docTypeName: string } or { docTypeNames: string[] } for multiple types\n */\n\nexport type DocumentPluginOptions = { docTypeName?: string; docTypeNames?: string[] };\n\ntype BasePayload = {\n plugins: { name: string; options?: unknown }[];\n excludePlugins: string[];\n pluginOptions?: Record<string, unknown>;\n capabilities: any;\n};\n\n//#region ---- Plugin Guard Utilities ----\n\n/**\n * Check if the 'document' plugin is active (enabled and not excluded) in the payload.\n */\nfunction isDocumentPluginActive(payload: BasePayload): boolean {\n const isEnabled = Array.isArray(payload.plugins) && payload.plugins.some((p) => p.name === 'document');\n const isExcluded = Array.isArray(payload.excludePlugins) && payload.excludePlugins.includes('document');\n return isEnabled && !isExcluded;\n}\n\n/**\n * Extract document plugin options from payload.\n * Returns undefined if plugin is not active or options are missing.\n */\nfunction getDocumentPluginOptions(payload: BasePayload): DocumentPluginOptions | undefined {\n if (!isDocumentPluginActive(payload)) {\n return undefined;\n }\n return (payload.plugins.find((p) => p.name === 'document')?.options ?? {}) as DocumentPluginOptions;\n}\n\n/** Resolve list of document type names from plugin options (single or multiple). */\nfunction getDocTypeNames(opts: DocumentPluginOptions | undefined): string[] {\n if (!opts) return [];\n if (Array.isArray(opts.docTypeNames) && opts.docTypeNames.length > 0) return opts.docTypeNames;\n if (typeof opts.docTypeName === 'string' && opts.docTypeName.trim()) return [opts.docTypeName.trim()];\n return [];\n}\n\n//#endregion\n\n// ---------------- Configure: set accept based on docTypeId / docTypeNames ----------------\nexport const DocumentFileUploaderConfigureProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.configure',\n priority: 0,\n async execute(payload: BasePayload & { overrides: Record<string, unknown> }) {\n const opts = getDocumentPluginOptions(payload);\n const names = getDocTypeNames(opts);\n if (!names.length) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const allExtensions: string[] = [];\n for (const name of names) {\n const docType = await documentManagementService.getDocumentTypeByName(name) as { type?: { selectedItems?: unknown[] } } | null;\n const selected = docType?.type?.selectedItems ?? [];\n const extList = (selected as any[])\n .map((s) => s?.name)\n .filter((n: string) => typeof n === 'string' && n.includes('.'))\n .map((n: string) => `.${n.split('.').pop()?.toLowerCase()}`);\n allExtensions.push(...extList);\n }\n const extensions = Array.from(new Set(allExtensions));\n\n payload.overrides = payload.overrides || {};\n payload.overrides['accept'] = extensions.join(',');\n return payload;\n },\n};\n\n// ---------------- Actions: one \"Upload\" button per document type (replaces generic Upload from Device) ----------------\nexport const DocumentFileUploaderActionsByTypeProvider: AXPFileActionProvider = {\n key: 'file-uploader.actions',\n priority: 5,\n execute: async (payload: AXCFileUploaderActionsPayload): Promise<AXCFileUploaderActionsPayload> => {\n const opts = getDocumentPluginOptions({\n plugins: payload.plugins,\n excludePlugins: payload.excludePlugins ?? [],\n capabilities: payload.capabilities,\n } as BasePayload);\n const docTypeNames = getDocTypeNames(opts);\n if (docTypeNames.length === 0) return payload;\n\n const documentManagementService = inject(AXPDocumentManagementService);\n const documentDialogService = inject(AXMDocumentDialogService);\n const fileService = inject(AXFileService);\n const docTypes = await Promise.all(\n docTypeNames.map((name) => documentManagementService.getDocumentTypeByName(name)),\n );\n\n const byTypeActions = docTypes\n .filter((dt) => dt != null)\n .map((docType) => {\n const selected = (docType as any)?.type?.selectedItems ?? [];\n const accept = Array.from(\n new Set(\n (selected as any[])\n .map((s) => s?.name)\n .filter((n: string) => typeof n === 'string' && n.includes('.'))\n .map((n: string) => `.${n.split('.').pop()?.toLowerCase()}`),\n ),\n ).join(',');\n const typeName = (docType as any)?.name as string;\n const title = (docType as any)?.title ?? typeName;\n const metaGroups = (docType as any)?.metaDataList?.groups as { fields?: unknown[] }[] | undefined;\n const hasMeta =\n Array.isArray(metaGroups) && metaGroups.some((g) => (g?.fields?.length ?? 0) > 0);\n return {\n plugin: 'document',\n global: false,\n text: title,\n icon: 'fa-light fa-file-arrow-up',\n run: async (capabilities: AXCFileUploaderCapabilities) => {\n const files = await fileService.choose({\n multiple: payload.options?.multiple ?? true,\n accept: accept || undefined,\n });\n if (files.length === 0) return;\n const documentType: AXMDocumentDocDto = {\n id: (docType as { id?: string })?.id ?? '',\n name: typeName,\n title: (docType as { title?: string })?.title ?? typeName,\n };\n const fileItems = files.map(\n (file) =>\n ({\n id: AXPDataGenerator.uuid(),\n name: file.name,\n size: file.size,\n type: file.type,\n status: 'attached',\n source: { kind: 'blob' as const, value: file },\n meta: { documentType } as Partial<AXMDocumentMeta>,\n }) as AXPFileListItem,\n );\n if (hasMeta) {\n const result = await documentDialogService.openAttachmentDialogWithoutSave(\n 'Document Type Choose File',\n {\n documentType: docType,\n files: fileItems,\n },\n );\n if (result.data?.cancel != null && !result.data.cancel && result.data?.files) {\n result.data.files.forEach((f: { metaDataForm?: Record<string, unknown> }, i: number) => {\n if (fileItems[i]) {\n const meta: Partial<AXMDocumentMeta> = {\n ...(fileItems[i].meta as Partial<AXMDocumentMeta>),\n documentType,\n metaDataForm: f?.metaDataForm,\n };\n set(fileItems[i], 'meta', meta);\n set(fileItems[i], 'metaDataForm', f?.metaDataForm);\n }\n });\n } else if (result.data?.cancel) {\n return;\n }\n }\n capabilities.addFiles(fileItems);\n },\n };\n });\n\n payload.actions = payload.actions.filter((a) => a.plugin !== 'upload-from-computer');\n payload.actions = [...byTypeActions, ...payload.actions];\n return payload;\n },\n};\n\n// --------------- Before Files Added: no-op (dialog moved into uploader) ---------------\n// When the uploader option \"showEditDialogAfterSelect\" is true, the uploader shows the edit dialog (with EditDialog hooks) per file before adding.\n// When false, files are added directly and the user opens the same edit dialog via the Edit button. The document metadata form is injected via EditDialogAfterFormProvider (below the main form). This provider no longer opens a separate dialog.\nexport const DocumentFileUploaderBeforeFilesAddedProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.beforeFilesAdded',\n priority: 0,\n async execute(payload: BasePayload & { newFiles: AXPFileListItem[] }) {\n return payload;\n },\n};\n\n// --------------- Edit Dialog: inject metadata group after 'form' ---------------\nexport const DocumentFileUploaderEditDialogAfterFormProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.edit-dialog.groups.after-form',\n priority: 0,\n async execute(payload: BasePayload & { file: AXPFileListItem; groups: AXPDynamicFormGroupDefinition[] }) {\n const fileMeta = payload.file.meta as Partial<AXMDocumentMeta> | undefined;\n const metaObj = (fileMeta?.metaDataForm ?? (payload.file as { metaDataForm?: unknown }).metaDataForm) as\n | Record<string, { name: string; title: string; value: unknown }>\n | undefined;\n\n const opts = getDocumentPluginOptions(payload);\n const docTypeName = fileMeta?.documentType?.name ?? opts?.docTypeName;\n const injector = inject(Injector);\n const documentManagementService = injector.get(AXPDocumentManagementService);\n const docType = docTypeName\n ? await documentManagementService.getDocumentTypeByName(docTypeName)\n : undefined;\n\n if (!docType && (!metaObj || Object.keys(metaObj).length === 0)) return payload;\n\n const metaDataList = (docType as any)?.metaDataList ?? { groups: [] };\n const hasDefinitions = Array.isArray(metaDataList.groups) && metaDataList.groups.length > 0;\n\n const fields: AXPDynamicFormFieldDefinition[] = [\n {\n path: 'metaDataForm',\n title: '@document-management:terms.common.meta-data',\n widget: {\n name: 'metaDataForm',\n type: 'meta-data-form-editor',\n options: metaDataList,\n defaultValue: metaObj,\n } as any,\n },\n ];\n\n const group: AXPDynamicFormGroupDefinition = {\n name: 'metadata',\n title: (docType as any)?.title ?? '@document-management:terms.common.meta-data',\n parameters: fields,\n };\n\n if (hasDefinitions) {\n payload.groups = [...(payload.groups ?? []), group];\n }\n return payload;\n },\n};\n\n// --------------- Download Reference: handle reference-based file downloads ---------------\nexport const DocumentFileUploaderDownloadReferenceProvider: AXPDistributedEventListenerProvider<any, any> = {\n key: 'file-uploader.fileItem.download-reference',\n priority: 0,\n async execute(\n payload: BasePayload & {\n file: AXPFileListItem;\n reference: AXPEntityReference;\n fileInfo?: { url?: string; binary?: Blob; name?: string };\n },\n ) {\n // Only handle if reference type is 'document'\n if (payload.reference.type !== 'document') {\n return payload;\n }\n\n const entityService = inject(AXPEntityService);\n const fileStorageService = inject(AXPFileStorageService);\n const documentData = entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.document.name)\n .data<string, AXMDocumentDto, AXMDocumentDto>();\n\n try {\n // Get document by id\n const document = await documentData.byKey(payload.reference.id);\n\n if (!document) {\n console.error('Document not found for reference:', payload.reference);\n return payload;\n }\n\n const fileId = getFileIdFromFileInfo(document.fileInfo);\n if (!fileId) {\n console.error('Document does not have a valid fileId:', document);\n return payload;\n }\n\n // Get file info from file storage service\n const fileInfo = await fileStorageService.getInfo(fileId);\n\n if (fileInfo) {\n payload.fileInfo = {\n url: fileInfo.url,\n binary: (fileInfo as any).binary,\n name: fileInfo.name ?? document.name ?? document.title,\n };\n } else {\n console.error('Could not retrieve file info from fileId:', fileId);\n }\n } catch (error) {\n console.error('Error processing reference download:', payload.reference, error);\n }\n\n return payload;\n },\n};\n\n// Convenience export to register all providers at once in a module\nexport const DocumentFileUploaderWidgetPluginProviders = [\n DocumentFileUploaderConfigureProvider,\n DocumentFileUploaderBeforeFilesAddedProvider,\n DocumentFileUploaderEditDialogAfterFormProvider,\n DocumentFileUploaderDownloadReferenceProvider,\n];\n","import { AXPAuthGuard } from '@acorex/platform/auth';\nimport { AXP_PAGE_COMPONENT_PROVIDER } from '@acorex/platform/layout/components';\nimport {\n AXP_ENTITY_ACTION_PLUGIN,\n AXP_ENTITY_CONFIG_TOKEN,\n AXP_ENTITY_DEFINITION_LOADER,\n AXP_ENTITY_STORAGE_MIDDLEWARE,\n} from '@acorex/platform/layout/entity';\nimport { AXP_MODULE_MANIFEST_PROVIDER, AXP_FEATURE_DEFINITION_PROVIDER } from '@acorex/platform/core';\nimport { DocumentManagementManifest } from './manifest';\nimport {\n AXP_FILE_ACTION_PROVIDER,\n AXP_MENU_PROVIDER,\n AXP_SEARCH_PROVIDER,\n AXP_SETTING_DEFINITION_PROVIDER,\n} from '@acorex/platform/common';\nimport { AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { inject, NgModule } from '@angular/core';\nimport { AXPDocumentManagementFeatureDefinitionProvider } from './feature-definition.provider';\nimport { AXMPermissionDefinitionProvider } from './permission-definition.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXMEntityProvider } from './entity.provider';\nimport { AXMSearchCommandProvider } from './search-command.provider';\n\nimport { AXP_WIDGET_DEFINITION_PROVIDER, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXMDocumentManagementWidgetsProvider } from './widget-definition.provider';\nimport { ROUTES, Routes } from '@angular/router';\n\n// Entity Modules\nimport { AXMDocumentManagementDocumentTypeEntityModule } from './entities';\nimport {\n AXMDocumentManagerService,\n AXMDocumentManagerServiceImpl,\n} from './features/shared/document-manager.service';\n\nimport { AXMediaViewerModule } from '@acorex/components/media-viewer';\nimport { AXMDriveChooseModule } from './features/drive-choose/drive-choose.module';\nimport {\n AXMCheckDocumentTypeWorkflowAction,\n AXMChooseDocumentTypeWorkflowAction,\n AXMChooseFileWorkflowAction,\n AXMUploadWorkflow,\n} from './features/workflow/upload/upload.workflow';\n\nfunction routesFacory() {\n const config = inject(AXP_ENTITY_CONFIG_TOKEN);\n const routes: Routes = [\n {\n path: ':app/drive/:scope',\n loadComponent: () => {\n return config.viewers.root();\n },\n canActivate: [AXPAuthGuard],\n data: { reuse: true },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\n },\n {\n path: ':id',\n loadComponent: () => import('./features/drive/drive.component').then((c) => c.AXMDocumentDriveComponent),\n },\n ],\n },\n ];\n return routes;\n}\n\nimport { documentPlugin } from './features/document-plugin';\nimport { AXMDocumentDrivePageComponentProvider } from './features/document-plugin/document-drive-page';\nimport { attachmentsUploadMiddleware } from './features/shared/attachments-upload.middleware';\nimport { AXMSettingProvider } from './settings.provider';\nimport { AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER } from '@acorex/platform/core';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport {\n DocumentFileUploaderActionsByTypeProvider,\n DocumentFileUploaderWidgetPluginProviders,\n} from './features/shared/document-file-uploader.widget.plugin';\n@NgModule({\n imports: [\n AXMDriveChooseModule,\n // Entity Modules\n AXMDocumentManagementDocumentTypeEntityModule,\n AXPWidgetCoreModule,\n AXMediaViewerModule.forRoot(),\n AXPWorkflowModule.forChild({\n actions: {\n AXMCheckDocumentTypeWorkflowAction,\n AXMChooseDocumentTypeWorkflowAction,\n AXMChooseFileWorkflowAction,\n },\n workflows: {\n 'upload-document': AXMUploadWorkflow,\n },\n }),\n ],\n exports: [],\n\n providers: [\n { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXMDocumentManagementWidgetsProvider, multi: true },\n { provide: AXP_ENTITY_ACTION_PLUGIN, multi: true, useValue: documentPlugin },\n { provide: AXP_PAGE_COMPONENT_PROVIDER, multi: true, useClass: AXMDocumentDrivePageComponentProvider },\n { provide: AXP_ENTITY_STORAGE_MIDDLEWARE, multi: true, useValue: attachmentsUploadMiddleware },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFacory,\n },\n ...DocumentFileUploaderWidgetPluginProviders.map((p) => ({\n provide: AXP_DISTRIBUTED_EVENT_LISTENER_PROVIDER,\n useValue: p,\n multi: true,\n })),\n {\n provide: AXP_FILE_ACTION_PROVIDER,\n useValue: DocumentFileUploaderActionsByTypeProvider,\n multi: true,\n },\n // Module Manifest Provider\n {\n provide: AXP_MODULE_MANIFEST_PROVIDER,\n useValue: DocumentManagementManifest,\n multi: true,\n },\n // Provider references (now using tokens)\n {\n provide: AXP_FEATURE_DEFINITION_PROVIDER,\n useClass: AXPDocumentManagementFeatureDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useClass: AXMPermissionDefinitionProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMEntityProvider,\n multi: true,\n },\n {\n provide: AXP_SEARCH_PROVIDER,\n useClass: AXMSearchCommandProvider,\n multi: true,\n },\n {\n provide: AXP_SETTING_DEFINITION_PROVIDER,\n useClass: AXMSettingProvider,\n multi: true,\n },\n {\n provide: AXMDocumentManagerService,\n useClass: AXMDocumentManagerServiceImpl,\n },\n ],\n})\nexport class AXMDocumentManagementModule { }\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n HostListener,\n inject,\n OnInit,\n signal,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXButtonGroupModule } from '@acorex/components/button-group';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXMenuModule } from '@acorex/components/menu';\nimport { AXDateTimeModule } from '@acorex/core/date-time';\nimport { AXFileModule } from '@acorex/core/file';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPFileTypeProviderService } from '@acorex/platform/common';\nimport { AXPQueryFiltersComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\n\nimport {\n AXPActionMenuItem,\n AXPBackButton,\n AXPBreadcrumbItem,\n AXPDeviceService,\n AXPExecuteCommand,\n AXPFilterDefinition,\n AXPFilterQuery,\n AXPPlatformScope,\n resolvePlatformScopeKey,\n resolvePlatformScopeName,\n} from '@acorex/platform/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { RootConfig } from '../../const';\nimport { AXMDocumentTypeService } from '../../entities';\nimport { AXMDocumentExplorerComponent, AXPDocumentExplorerViewModel } from '../document-explorer';\nimport { AXMDocumentExplorerDetailPanelComponent } from '../document-explorer/views/detail-panel/detail-panel.component';\nimport { AXMDocumentManagerService } from '../shared';\nimport { AXMDocumentSelectionMode } from '../shared/document-manager.types';\n\n/**\n * Walks `ActivatedRoute` ancestors until a `scope` param is found (`:app/drive/:scope` may not be the direct parent).\n */\nfunction readDriveScopeSegmentFromRoute(route: ActivatedRoute): string | undefined {\n let current: ActivatedRoute | null = route;\n while (current) {\n const raw = current.snapshot.paramMap.get('scope');\n if (raw != null && String(raw).trim() !== '') {\n return String(raw).trim().toLowerCase();\n }\n current = current.parent;\n }\n return undefined;\n}\n\n@Component({\n selector: 'axp-document-drive',\n templateUrl: './drive.component.html',\n styleUrls: ['./drive.component.scss'],\n standalone: true,\n imports: [\n CommonModule,\n RouterModule,\n //\n AXMenuModule,\n AXButtonModule,\n AXButtonGroupModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXBreadcrumbsModule,\n AXBadgeModule,\n AXFormatModule,\n AXFileModule,\n AXDateTimeModule,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n //\n AXMDocumentExplorerComponent,\n AXMDocumentExplorerDetailPanelComponent,\n AXPQueryFiltersComponent,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n AXPDocumentExplorerViewModel,\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMDocumentDriveComponent,\n },\n ],\n})\nexport class AXMDocumentDriveComponent extends AXPPageLayoutBaseComponent implements OnInit {\n //#region ---------------- Services & Dependencies ----------------\n\n protected readonly rootConfig = RootConfig;\n protected readonly deviceService = inject(AXPDeviceService);\n private readonly fileTypeService = inject(AXPFileTypeProviderService);\n private readonly driveService = inject(AXMDocumentManagerService);\n private readonly documentTypeService = inject(AXMDocumentTypeService);\n protected readonly vm = inject(AXPDocumentExplorerViewModel);\n protected readonly router = inject(Router);\n protected readonly activatedRoute = inject(ActivatedRoute);\n\n //#endregion\n\n //#region ---------------- View Properties ----------------\n\n private previousFolderId: string | null = null;\n\n /** Resolved once per drive page visit; avoids repeated getRoot calls when normalizing URL scope. */\n private driveRootIds: { tenantId: string; userId: string; distinct: boolean } | null = null;\n\n /** Filter definitions: document type (cascade parent) + metadata + search + file type. */\n protected advancedFilterDefinitions = signal<AXPFilterDefinition[]>([]);\n\n /** Active metadata filter values from the query filter panel. */\n private activeMetadataFilters = signal<Record<string, unknown>>({});\n\n /** Options for the document type filter (drive search). */\n private documentTypeFilterOptions = signal<Array<{ id: string; title: string }>>([]);\n\n /**\n * Initial filters for axp-query-filters (URL search on first load, or preserved filters after cascade refresh).\n */\n protected panelInitialFilters = signal<AXPFilterQuery[]>([]);\n\n /** Bumps when the filter panel is recreated after document type changes (clears stale metadata chips). */\n protected queryFiltersKey = signal(0);\n\n /** Last document type ids used to load metadata field definitions (cascade detection). */\n private lastAppliedDocumentTypeIds = signal<string[]>([]);\n\n /** Normalized document type ids from the panel; used for search API. */\n private activeDocumentTypeFilterIds = signal<string[]>([]);\n\n protected readonly sortItems = signal([\n { key: 'name', textKey: 'actions.sort-by-name', icon: 'fa-light fa-font' },\n { key: 'modified', textKey: 'actions.sort-by-date', icon: 'fa-light fa-calendar' },\n { key: 'size', textKey: 'actions.sort-by-size', icon: 'fa-light fa-weight-hanging' },\n ]);\n\n protected readonly viewsItems = signal([\n { key: 'large-icons', icon: 'fa-light fa-grid' },\n { key: 'small-icons', icon: 'fa-light fa-grid', break: true },\n { key: 'large-tiles', icon: 'fa-grid-2' },\n { key: 'small-tiles', icon: 'fa-grid-2', break: true },\n { key: 'details', icon: 'fa-bars', break: true },\n { key: 'list', icon: 'fa-list' },\n ]);\n\n protected readonly selectedViewMode = computed(\n () => this.viewsItems().find((item) => item.key === this.vm.viewMode()) || this.viewsItems()[0],\n );\n protected readonly selectionMode = signal<AXMDocumentSelectionMode>('single');\n protected documentExplorer = viewChild(AXMDocumentExplorerComponent);\n\n //#endregion\n\n //#region ---------------- Computed Properties ----------------\n\n protected readonly selectedSort = computed(() => {\n const items = this.sortItems();\n return items.find((item) => item.key === this.vm.sortField()) || items[0];\n });\n\n //#endregion\n\n //#region ---------------- Effects ----------------\n\n #navigateEffect = effect(() => {\n const navigatingFolderId = this.vm.navigatingFolderId();\n if (navigatingFolderId) {\n this.handleNavigateToFolder(navigatingFolderId);\n }\n });\n\n #loadingEffect = effect(() => {\n const isLoading = this.vm.isLoading();\n untracked(() => {\n this.layoutService.setNavigationLoading(isLoading);\n });\n });\n\n //#endregion\n\n //#region ---------------- Lifecycle Hooks ----------------\n\n override async ngOnInit() {\n super.ngOnInit();\n // Resolve scope from the route before loading filter definitions (see `initialize` early `patchState`\n // in the explorer view model so `scope` is correct before any async gap while filters mount).\n const snapshot = this.activatedRoute.snapshot;\n const searchParam = snapshot.queryParams['search'];\n this.panelInitialFilters.set(\n searchParam && typeof searchParam === 'string' && searchParam.trim()\n ? [{ field: 'all', value: searchParam.trim(), operator: { type: 'contains' } }]\n : [],\n );\n\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n const routerScope = resolvePlatformScopeKey(scopeSegment ?? 'user');\n await this.vm.initialize({ browseMode: 'file', scope: routerScope as AXPPlatformScope });\n this.vm.setFileTypeFilter('all');\n\n const docTypes = await this.documentTypeService.query({ skip: 0, take: 1000 });\n this.documentTypeFilterOptions.set(\n (docTypes.items ?? []).map((it) => ({\n id: it.id,\n title: (it.title ?? it.name ?? it.id) as string,\n })),\n );\n await this.loadAdvancedFilterDefinitions([]);\n\n const searchQuery = snapshot.queryParams['search'];\n const folderId = snapshot.paramMap.get('id');\n\n if (searchQuery) {\n if (folderId) {\n this.previousFolderId = folderId;\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfTenantRootFolder(folderId);\n }\n await this.performSearch(searchQuery);\n } else {\n this.activatedRoute.paramMap.subscribe(async () => {\n this.loadDrive();\n });\n }\n\n this.activatedRoute.queryParams.subscribe(async (params) => {\n if (!params['search'] && this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId = this.previousFolderId\n ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n });\n }\n\n //#endregion\n\n //#region ---------------- Event Handlers ----------------\n\n private async performSearch(searchValue: string) {\n if (!this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n this.previousFolderId = currentNode?.id ?? null;\n }\n\n const metadataFilters = this.activeMetadataFilters();\n const hasMetadataFilters = Object.keys(metadataFilters).length > 0;\n const documentTypeIds = this.activeDocumentTypeFilterIds();\n const hasDocTypeFilter = documentTypeIds.length > 0;\n\n const result = await this.driveService.searchNodes(searchValue, this.vm.scope(), {\n folderId: this.vm.isVirtual() ? (this.previousFolderId ?? undefined) : (this.vm.currentNode()?.id ?? undefined),\n ...(hasMetadataFilters ? { metadataFilters } : {}),\n ...(hasDocTypeFilter ? { documentTypeIds } : {}),\n });\n\n const currentNode = this.vm.currentNode();\n const folderIdForParent = this.vm.isVirtual()\n ? (currentNode?.parentId ?? this.previousFolderId ?? undefined)\n : (currentNode?.id ?? this.previousFolderId ?? undefined);\n\n this.vm.virtualFolder(result, {\n name: 'Search Result',\n parentId: folderIdForParent,\n });\n }\n\n /** Handles filter changes from the query filter panel (search, file type, document type, metadata). */\n protected async handleAdvancedFiltersChanged(filters: AXPFilterQuery[]): Promise<void> {\n const docTypeFilter = filters.find((f) => f.field === 'documentTypeId');\n const documentTypeIds = this.normalizeDocumentTypeIds(docTypeFilter?.value);\n this.activeDocumentTypeFilterIds.set(documentTypeIds);\n\n if (!this.docTypeIdsEqual(documentTypeIds, this.lastAppliedDocumentTypeIds())) {\n this.lastAppliedDocumentTypeIds.set(documentTypeIds);\n await this.loadAdvancedFilterDefinitions(documentTypeIds);\n const preserved = filters.filter(\n (f) =>\n f.field === 'all' ||\n f.field === 'title' ||\n f.field === 'fileType' ||\n f.field === 'documentTypeId',\n );\n this.panelInitialFilters.set(preserved);\n this.queryFiltersKey.update((k) => k + 1);\n return;\n }\n\n const allFilter = filters.find((f) => f.field === 'all');\n const titleFilter = filters.find((f) => f.field === 'title');\n const fromAll = allFilter?.value != null ? String(allFilter.value).trim() : '';\n const fromTitle = titleFilter?.value != null ? String(titleFilter.value).trim() : '';\n const searchValue = fromAll || fromTitle;\n\n const fileTypeFilter = filters.find((f) => f.field === 'fileType');\n const fileTypeValue = fileTypeFilter?.value != null ? String(fileTypeFilter.value) : 'all';\n this.vm.setFileTypeFilter(fileTypeValue);\n\n const metaFilters: Record<string, unknown> = {};\n for (const filter of filters) {\n if (\n filter.field &&\n filter.field !== 'all' &&\n filter.field !== 'title' &&\n filter.field !== 'fileType' &&\n filter.field !== 'documentTypeId' &&\n filter.value != null &&\n filter.value !== ''\n ) {\n metaFilters[filter.field] = filter.value;\n }\n }\n this.activeMetadataFilters.set(metaFilters);\n\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const baseUrl = folderId\n ? `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`\n : `${app}/drive/${resolvePlatformScopeName(this.vm.scope())}`;\n\n const normalizePath = (url: string): string => url.split('?')[0].replace(/^\\/+/, '');\n const currentPath = normalizePath(this.router.url);\n const targetPath = normalizePath(baseUrl);\n const snapSearch = this.activatedRoute.snapshot.queryParams['search'];\n const currentSearch =\n snapSearch != null && String(snapSearch).trim() !== '' ? String(snapSearch).trim() : '';\n if (currentPath !== targetPath || currentSearch !== searchValue) {\n await this.router.navigate([baseUrl], {\n queryParams: { search: searchValue || null },\n queryParamsHandling: 'merge',\n });\n }\n\n const hasDocTypeFilter = documentTypeIds.length > 0;\n if (searchValue.length > 0 || Object.keys(metaFilters).length > 0 || hasDocTypeFilter) {\n await this.performSearch(searchValue);\n } else if (this.vm.isVirtual()) {\n const currentNode = this.vm.currentNode();\n const targetFolderId = this.previousFolderId\n ?? (currentNode?.parentId && currentNode.parentId !== 'virtual' ? currentNode.parentId : null);\n\n if (targetFolderId) {\n await this.vm.loadFolderContents(targetFolderId);\n this.previousFolderId = null;\n } else {\n this.vm.navigateToUp();\n }\n }\n }\n\n @HostListener('document:keydown.control', ['$event'])\n handleCtrlKey(e: Event) {\n this.selectionMode.set('multiple');\n }\n\n @HostListener('document:keyup.control', ['$event'])\n handleCtrlKeyUp(e: Event) {\n this.selectionMode.set('single');\n }\n\n protected handleNavigateToFolder(folderId: string) {\n const queryParams = this.activatedRoute.snapshot.queryParams;\n this.router.navigate(\n [`${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${folderId}`],\n {\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n },\n );\n }\n\n //#endregion\n\n //#region ---------------- Data Loading Methods ----------------\n\n /**\n * When the path segment is `user` but the folder id is the tenant drive root (and user root differs),\n * align URL and view model to `tenant` (e.g. after an earlier navigation bug or stale link).\n */\n private async correctDriveUrlIfTenantRootFolder(folderId: string): Promise<void> {\n const scopeSegment = readDriveScopeSegmentFromRoute(this.activatedRoute);\n if (scopeSegment !== 'user') {\n return;\n }\n\n await this.ensureDriveRootIdsCached();\n const cached = this.driveRootIds;\n if (!cached?.distinct || folderId !== cached.tenantId) {\n return;\n }\n\n await this.vm.initialize({ browseMode: 'file', scope: AXPPlatformScope.Tenant });\n await this.vm.loadFolderContents(folderId);\n\n const queryParams = this.activatedRoute.snapshot.queryParams;\n const app = this.sessionService.application?.name;\n if (!app) {\n return;\n }\n await this.router.navigate(\n [`${app}/drive/${resolvePlatformScopeName(AXPPlatformScope.Tenant)}/${folderId}`],\n { replaceUrl: true, queryParams, queryParamsHandling: 'merge' },\n );\n }\n\n private async ensureDriveRootIdsCached(): Promise<void> {\n if (this.driveRootIds !== null) {\n return;\n }\n const [tenantRoot, userRoot] = await Promise.all([\n this.driveService.getRoot(AXPPlatformScope.Tenant),\n this.driveService.getRoot(AXPPlatformScope.User),\n ]);\n const tenantId = tenantRoot.result?.id ?? '';\n const userId = userRoot.result?.id ?? '';\n this.driveRootIds = {\n tenantId,\n userId,\n distinct: tenantId !== '' && userId !== '' && tenantId !== userId,\n };\n }\n\n private async loadDrive() {\n const folderId = this.activatedRoute.snapshot.paramMap.get('id');\n const queryParams = this.activatedRoute.snapshot.queryParams;\n\n if (folderId) {\n await this.vm.loadFolderContents(folderId);\n await this.correctDriveUrlIfTenantRootFolder(folderId);\n } else {\n // TODO: get root from tenant or user by scope\n const root = await this.driveService.getRoot(this.vm.scope());\n if (root.result) {\n await this.router.navigate(\n [\n `${this.sessionService.application?.name}/drive/${resolvePlatformScopeName(this.vm.scope())}/${\n root.result.id\n }`,\n ],\n {\n replaceUrl: true,\n queryParams: queryParams, // Preserve query params (e.g., search)\n queryParamsHandling: 'merge',\n },\n );\n }\n }\n //\n this.recompute();\n }\n\n /**\n * Loads filter definitions. Metadata fields load only when `documentTypeIds` is non-empty (cascade).\n */\n private async loadAdvancedFilterDefinitions(documentTypeIds: string[]): Promise<void> {\n const definitions: AXPFilterDefinition[] = [];\n\n definitions.push({\n field: 'all',\n title: '@document-management:drive.filters.search.title',\n icon: 'fa-light fa-magnifying-glass',\n widget: { type: 'string-filter' },\n filterType: { inline: true, advance: false },\n });\n\n const docOpts = this.documentTypeFilterOptions();\n if (docOpts.length > 0) {\n definitions.push({\n field: 'documentTypeId',\n operator: { type: 'equal' },\n title: '@document-management:drive.filters.document-type.title',\n icon: 'fa-light fa-file-lines',\n widget: {\n type: 'select-filter',\n options: {\n dataSource: docOpts,\n valueField: 'id',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n }\n\n definitions.push({\n field: 'title',\n operator: { type: 'contains' },\n title: '@document-management:drive.filters.title.title',\n icon: 'fa-light fa-font',\n widget: { type: 'string-filter' },\n filterType: { advance: true, inline: false },\n });\n\n const types = await this.fileTypeService.items();\n const allTitle = await this.translateService.translateAsync(\n '@document-management:drive.filters.file-types.all',\n );\n const fileTypeDataSource = [\n { name: 'all', title: allTitle },\n ...types.map((t) => ({ name: t.name, title: t.title })),\n ];\n definitions.push({\n operator: { type: 'equal' },\n field: 'fileType',\n title: '@document-management:drive.filters.file-type.title',\n icon: 'fa-light fa-file',\n widget: {\n type: 'document-file-type-filter',\n options: {\n dataSource: fileTypeDataSource,\n valueField: 'name',\n textField: 'title',\n },\n },\n filterType: { advance: true, inline: false },\n });\n\n const metadataFields =\n documentTypeIds.length > 0\n ? await this.driveService.getUniqueMetadataFields(documentTypeIds)\n : [];\n\n for (const field of metadataFields) {\n definitions.push({\n field: field.widgetPath,\n operator: { type: this.getDefaultOperatorForEditor(field.widgetType) as 'contains' | 'equal' },\n title: field.title,\n icon: this.getMetadataFieldIcon(field.widgetType),\n widget: {\n type: this.mapEditorToFilterWidget(field.widgetType),\n options: field.widgetOptions ?? {},\n },\n filterType: {\n advance: true,\n inline: false,\n },\n });\n }\n\n this.advancedFilterDefinitions.set(definitions);\n }\n\n //#region ---------------- Filter helpers ----------------\n\n /**\n * Unwraps filter widget values (e.g. select `{ value, text }`) for document type id extraction.\n */\n private unwrapFilterValue(value: unknown): unknown {\n let v = value;\n while (v != null && typeof v === 'object' && !Array.isArray(v) && 'value' in v) {\n v = (v as Record<string, unknown>)['value'];\n }\n return v;\n }\n\n private normalizeDocumentTypeIds(value: unknown): string[] {\n const v = this.unwrapFilterValue(value);\n if (v == null || v === '') {\n return [];\n }\n if (Array.isArray(v)) {\n return v.map((x) => String(x)).filter((id) => id.length > 0);\n }\n return [String(v)];\n }\n\n private docTypeIdsEqual(a: string[], b: string[]): boolean {\n if (a.length !== b.length) {\n return false;\n }\n const sa = [...a].sort();\n const sb = [...b].sort();\n return sa.every((id, i) => id === sb[i]);\n }\n\n //#endregion\n\n /** Maps metadata editor widget type to filter widget type. */\n private mapEditorToFilterWidget(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'number-filter';\n case 'select-editor':\n return 'select-filter';\n case 'date-time-editor':\n return 'date-filter';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'string-filter';\n }\n }\n\n /** Returns default operator type name for a given editor widget type. */\n private getDefaultOperatorForEditor(editorType: string): string {\n switch (editorType) {\n case 'number-editor':\n return 'equal';\n case 'select-editor':\n return 'equal';\n case 'date-time-editor':\n return 'equal';\n case 'text-editor':\n case 'large-text-editor':\n default:\n return 'contains';\n }\n }\n\n /** Returns an icon class based on the editor widget type. */\n private getMetadataFieldIcon(widgetType: string): string {\n switch (widgetType) {\n case 'number-editor':\n return 'fa-hashtag';\n case 'select-editor':\n return 'fa-list';\n case 'date-time-editor':\n return 'fa-calendar';\n default:\n return 'fa-font';\n }\n }\n\n //#endregion\n\n //#region ---------------- Page Configuration Overrides ----------------\n\n override async getPrimaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'deleteItems',\n title: '@general:actions.delete-items.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n const addItemItems = await this.vm.getFolderAddMenuItems();\n addItemItems[addItemItems.length - 1].break = false;\n return [\n {\n title: '@document-management:actions.add-item',\n icon: 'fa-light fa-plus',\n color: 'primary',\n items: addItemItems,\n },\n ];\n }\n\n override async getSecondaryMenuItems(): Promise<AXPActionMenuItem[]> {\n if (this.vm.hasMultipleSelectedItems()) {\n return [\n {\n name: 'delete',\n title: '@general:actions.delete.title',\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: 'deleteItems' },\n },\n ];\n }\n return this.vm.getFolderActionMenuItems();\n }\n\n override async getPageTitle(): Promise<string> {\n if (this.vm.isRoot()) {\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n );\n }\n return this.vm.currentFolder()?.name || '';\n }\n\n override async getPageDescription(): Promise<string> {\n const count = await this.vm.itemsCount();\n const size = await this.vm.availableSpace();\n const formattedSize = await this.formatService.format(size, 'filesize');\n return this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.description`,\n {\n params: {\n count,\n size: formattedSize,\n },\n },\n );\n }\n\n override getBackButton(): AXPBackButton | null {\n if (this.vm.isUpAvailable() && this.vm.currentPath().length > 1) {\n return {\n title: this.vm.currentPath()[this.vm.currentPath().length - 2].name,\n };\n }\n return null;\n }\n\n override onBackButtonClick(): void | Promise<void> {\n if (this.vm.isUpAvailable()) {\n this.vm.navigateToUp();\n }\n }\n\n override async getPageBreadcrumbs(): Promise<AXPBreadcrumbItem[]> {\n const path = this.vm.currentPath();\n if (!path || path.length === 0) {\n return [\n {\n title: await this.translateService.translateAsync(\n `@document-management:scopes.${resolvePlatformScopeName(this.vm.scope() as AXPPlatformScope)}.title`,\n ),\n },\n ];\n }\n\n const breadcrumbs: AXPBreadcrumbItem[] = [];\n for (let i = 0; i < path.length; i++) {\n const node = path[i]!;\n const isLast = i === path.length - 1;\n breadcrumbs.push({\n name: node.id,\n title: node.name,\n command: isLast\n ? undefined\n : {\n name: 'navigate-to-folder',\n options: { folderId: node.id },\n },\n });\n }\n return breadcrumbs;\n }\n\n override async execute(command: AXPExecuteCommand): Promise<void> {\n const folderId = command.options?.['folderId'] as string;\n switch (command.name) {\n case 'deleteItems':\n const nodes = this.vm.selectedNodes();\n if (nodes.length > 0) {\n const deleted = await this.driveService.showDeleteNodesDialog(nodes);\n if (deleted) {\n this.vm.refresh();\n }\n }\n break;\n case 'navigate-to-folder':\n if (folderId) {\n this.vm.navigateToFolder(folderId);\n }\n break;\n case 'new-folder':\n if (folderId) {\n await this.driveService.showCreateFolderDialog(folderId);\n this.vm.refresh();\n }\n break;\n case 'open-gallery':\n if (folderId) {\n const folder = this.vm.currentFolder();\n const files = folder?.children?.filter((item) => item.type === 'file') ?? [];\n const galleryFiles = this.driveService.getGallerySupportedFiles(files);\n if (galleryFiles.length > 0) {\n await this.driveService.showFileViewerPopup(galleryFiles[0]);\n }\n }\n break;\n default:\n if (command.name.startsWith('upload.')) {\n await this.driveService.uploadFileByType(folderId, command.options?.['documentType']?.id);\n this.vm.refresh();\n }\n break;\n }\n }\n\n //#endregion\n}\n","<!-- Main Layout -->\n<axp-page-layout *translate=\"let t\">\n <axp-page-toolbar>\n <!-- Left Side Toolbar -->\n <div class=\"ax-w-full ax-flex ax-items-center\">\n <axp-layout-prefix class=\"ax-w-full\">\n @if (vm.hasMultipleSelectedItems()) {\n <div class=\"ax-flex ax-gap-3 ax-items-center ax-h-10\">\n <span class=\"ax-text-xl ax-font-bold\">\n {{ vm.selectedCount() }} {{ '@general:terms.items-selected' | translate | async }}\n </span>\n <span (click)=\"vm.deselectAll()\" class=\"ax-text-sm ax-text-secondary ax-underline ax-cursor-pointer\">{{\n '@general:actions.unselect.title' | translate | async\n }}</span>\n </div>\n } @else {\n @for (_k of [queryFiltersKey()]; track _k) {\n <axp-query-filters\n [filtersDefinitions]=\"advancedFilterDefinitions()\"\n [initialFilters]=\"panelInitialFilters()\"\n (onFiltersChanged)=\"handleAdvancedFiltersChanged($event)\"\n ></axp-query-filters>\n }\n }\n </axp-layout-prefix>\n\n <!-- Right Side Toolbar -->\n\n <axp-layout-suffix class=\"ax-flex ax-gap-2\">\n <!-- Sort Dropdown -->\n <ax-button>\n <ax-icon\n [icon]=\"'fa-light fa-arrow-' + (vm.sortDirection() === 'asc' ? 'up' : 'down') + '-wide-short'\"\n ></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <!-- Sort By Options -->\n @for (item of sortItems(); track item.key) {\n <ax-button-item\n [text]=\"(t(item.textKey, { scope: rootConfig.config.i18n }) | async)!\"\n (onClick)=\"vm.setSortField(item.key)\"\n [selected]=\"vm.sortField() === item.key\"\n >\n <ax-prefix>\n <ax-icon [icon]=\"item.icon\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n }\n <ax-divider></ax-divider>\n <!-- Sort Direction Options -->\n <ax-button-item\n [text]=\"(t('actions.sort-ascending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'asc'\"\n (onClick)=\"vm.setSortDirection('asc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-up-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n <ax-button-item\n [text]=\"(t('actions.sort-descending', { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.sortDirection() === 'desc'\"\n (onClick)=\"vm.setSortDirection('desc')\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light fa-arrow-down-wide-short\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <!-- View Mode Toggle -->\n <ax-button>\n <ax-icon icon=\"fa-light {{ selectedViewMode().icon }}\"></ax-icon>\n <ax-dropdown-panel>\n <ax-button-item-list>\n @for (item of viewsItems(); track item.key) {\n <!-- view mode items -->\n <ax-button-item\n [text]=\"(t('view-modes.' + item.key, { scope: rootConfig.config.i18n }) | async)!\"\n [selected]=\"vm.isViewMode(item.key)\"\n (onClick)=\"vm.setViewMode(item.key)\"\n >\n <ax-prefix>\n <ax-icon icon=\"fa-light {{ item.icon }}\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n @if (item.break) {\n <ax-divider></ax-divider>\n }\n <!-- end of view mode items -->\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n @if (deviceService.isLarge()) {\n <!-- Detail Panel Toggle -->\n <ax-button (onClick)=\"vm.toggleDetailPanel()\">\n <ax-icon\n icon=\"{{ vm.isDetailPanelOpen() ? 'fa-solid fa-square-info' : 'fa-light fa-square-info' }}\"\n ></ax-icon>\n </ax-button>\n }\n </axp-layout-suffix>\n </div>\n </axp-page-toolbar>\n\n <!-- Content Section -->\n <axp-page-content class=\"ax-overflow-auto ax-flex ax-flex-col\">\n <div class=\"ax-flex ax-flex-row ax-gap-4 ax-flex-1 ax-overflow-auto\">\n <axm-document-explorer [selectionMode]=\"selectionMode()\"></axm-document-explorer>\n @if (vm.isDetailPanelOpen() && deviceService.isLarge()) {\n <axm-document-explorer-detail-panel class=\"ax-sticky ax-top-0 ax-z-50\"></axm-document-explorer-detail-panel>\n }\n </div>\n </axp-page-content>\n\n <!-- Footer Section removed: breadcrumbs are now provided via page-level breadcrumbs -->\n</axp-page-layout>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i5","i1","i2","i4","get","i6","i3","set"],"mappings":"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"}