@ixo/editor 6.33.0 → 6.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BidConfig-YLGSEIOS.js +154 -0
- package/dist/BidConfig-YLGSEIOS.js.map +1 -0
- package/dist/BidFlowDetail-TJCJBJZZ.js +365 -0
- package/dist/BidFlowDetail-TJCJBJZZ.js.map +1 -0
- package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
- package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
- package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
- package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
- package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
- package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
- package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
- package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
- package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
- package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
- package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
- package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
- package/dist/ClaimConfig-3HKPGK55.js +200 -0
- package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
- package/dist/ClaimFlowDetail-UVEQMEI5.js +641 -0
- package/dist/ClaimFlowDetail-UVEQMEI5.js.map +1 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
- package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js +647 -0
- package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js.map +1 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
- package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js +1276 -0
- package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js.map +1 -0
- package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
- package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
- package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
- package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
- package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
- package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
- package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
- package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
- package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
- package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
- package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
- package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
- package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
- package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
- package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
- package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
- package/dist/DomainSignConfig-XFIXROVK.js +47 -0
- package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
- package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
- package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
- package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
- package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
- package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
- package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
- package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
- package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
- package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
- package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
- package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
- package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
- package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
- package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
- package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
- package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
- package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
- package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
- package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
- package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
- package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
- package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
- package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
- package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
- package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
- package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
- package/dist/EvaluateBidFlowDetail-2S2N4YTW.js +564 -0
- package/dist/EvaluateBidFlowDetail-2S2N4YTW.js.map +1 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
- package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js +2237 -0
- package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js.map +1 -0
- package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
- package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
- package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
- package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
- package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
- package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
- package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
- package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
- package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
- package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
- package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
- package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
- package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
- package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
- package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
- package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
- package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
- package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
- package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
- package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
- package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
- package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
- package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
- package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
- package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
- package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
- package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
- package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
- package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
- package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
- package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
- package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
- package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
- package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
- package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
- package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
- package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
- package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
- package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
- package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
- package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
- package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
- package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
- package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
- package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
- package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
- package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
- package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
- package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
- package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
- package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
- package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
- package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
- package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
- package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
- package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
- package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
- package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
- package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
- package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
- package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
- package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
- package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
- package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
- package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
- package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
- package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
- package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
- package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
- package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
- package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
- package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
- package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
- package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
- package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
- package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
- package/dist/HarvestConfig-AIGOGBFR.js +56 -0
- package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
- package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
- package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
- package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
- package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
- package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
- package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
- package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
- package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
- package/dist/IdentityCreateFlowDetail-WGKO43IH.js +83 -0
- package/dist/IdentityCreateFlowDetail-WGKO43IH.js.map +1 -0
- package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
- package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
- package/dist/IidCreateFlowDetail-6M32S6XS.js +57 -0
- package/dist/IidCreateFlowDetail-6M32S6XS.js.map +1 -0
- package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
- package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
- package/dist/KycVerifyFlowDetail-EWOMXSD3.js +421 -0
- package/dist/KycVerifyFlowDetail-EWOMXSD3.js.map +1 -0
- package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
- package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
- package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
- package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
- package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
- package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
- package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
- package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
- package/dist/MatrixDmConfig-NBII27CS.js +120 -0
- package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
- package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
- package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
- package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
- package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
- package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
- package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
- package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
- package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
- package/dist/OracleConfig-R7TDTTKN.js +56 -0
- package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
- package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
- package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
- package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js +255 -0
- package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js.map +1 -0
- package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
- package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
- package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
- package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
- package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
- package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
- package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
- package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
- package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
- package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
- package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
- package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
- package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
- package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
- package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
- package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
- package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
- package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
- package/dist/OraclePromptConfig-YBRESISH.js +39 -0
- package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
- package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
- package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
- package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
- package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
- package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
- package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
- package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
- package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js +220 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js.map +1 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
- package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js +197 -0
- package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js.map +1 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
- package/dist/ProposalCreateFlowDetail-4VZZPAWH.js +235 -0
- package/dist/ProposalCreateFlowDetail-4VZZPAWH.js.map +1 -0
- package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
- package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
- package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
- package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
- package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
- package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
- package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
- package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
- package/dist/RetireConfig-MV37WWZ6.js +59 -0
- package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
- package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
- package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
- package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
- package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
- package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
- package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
- package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
- package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
- package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
- package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
- package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
- package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
- package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
- package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
- package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
- package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
- package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
- package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
- package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
- package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
- package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
- package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
- package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
- package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
- package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
- package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
- package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
- package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
- package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
- package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
- package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
- package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
- package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
- package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
- package/dist/action-manifest.json +2091 -393
- package/dist/chunk-2GAYKKTL.js +9 -0
- package/dist/chunk-2GAYKKTL.js.map +1 -0
- package/dist/chunk-2WPEATI7.js +315 -0
- package/dist/chunk-2WPEATI7.js.map +1 -0
- package/dist/chunk-3O42FYT3.js +3333 -0
- package/dist/chunk-3O42FYT3.js.map +1 -0
- package/dist/chunk-3TUYY4HK.js +20 -0
- package/dist/chunk-3TUYY4HK.js.map +1 -0
- package/dist/chunk-3XSLBJYI.js +554 -0
- package/dist/chunk-3XSLBJYI.js.map +1 -0
- package/dist/chunk-4DGCCXD6.js +710 -0
- package/dist/chunk-4DGCCXD6.js.map +1 -0
- package/dist/chunk-4NAFQF6V.js +11 -0
- package/dist/chunk-4NAFQF6V.js.map +1 -0
- package/dist/chunk-4PONO4US.js +799 -0
- package/dist/chunk-4PONO4US.js.map +1 -0
- package/dist/chunk-4TMOIK5M.js +21 -0
- package/dist/chunk-4TMOIK5M.js.map +1 -0
- package/dist/chunk-5IH3VC5I.js +102 -0
- package/dist/chunk-5IH3VC5I.js.map +1 -0
- package/dist/chunk-5NTKDOP6.js +89 -0
- package/dist/chunk-5NTKDOP6.js.map +1 -0
- package/dist/chunk-5O2SFRGU.js +18 -0
- package/dist/chunk-5O2SFRGU.js.map +1 -0
- package/dist/chunk-632JLECF.js +55 -0
- package/dist/chunk-632JLECF.js.map +1 -0
- package/dist/chunk-676HDB7K.js +95 -0
- package/dist/chunk-676HDB7K.js.map +1 -0
- package/dist/chunk-6ESTNTSH.js +223 -0
- package/dist/chunk-6ESTNTSH.js.map +1 -0
- package/dist/chunk-6GKJR52N.js +15 -0
- package/dist/chunk-6GKJR52N.js.map +1 -0
- package/dist/chunk-6L4ZIKYU.js +23 -0
- package/dist/chunk-6L4ZIKYU.js.map +1 -0
- package/dist/chunk-76YX5R4L.js +11 -0
- package/dist/chunk-76YX5R4L.js.map +1 -0
- package/dist/chunk-7J3GFMN3.js +32 -0
- package/dist/chunk-7J3GFMN3.js.map +1 -0
- package/dist/chunk-7LSARC2G.js +102 -0
- package/dist/chunk-7LSARC2G.js.map +1 -0
- package/dist/chunk-7W7UUUIE.js +609 -0
- package/dist/chunk-7W7UUUIE.js.map +1 -0
- package/dist/chunk-7ZLW7H37.js +21 -0
- package/dist/chunk-7ZLW7H37.js.map +1 -0
- package/dist/chunk-AAZHI22G.js +18 -0
- package/dist/chunk-AAZHI22G.js.map +1 -0
- package/dist/chunk-ACNE455I.js +76 -0
- package/dist/chunk-ACNE455I.js.map +1 -0
- package/dist/chunk-BKLSSLPZ.js +27 -0
- package/dist/chunk-BKLSSLPZ.js.map +1 -0
- package/dist/chunk-BZ7UPUTY.js +417 -0
- package/dist/chunk-BZ7UPUTY.js.map +1 -0
- package/dist/chunk-CGFAICUE.js +28 -0
- package/dist/chunk-CGFAICUE.js.map +1 -0
- package/dist/chunk-CMCEWQ3C.js +19 -0
- package/dist/chunk-CMCEWQ3C.js.map +1 -0
- package/dist/chunk-CP4UV436.js +41 -0
- package/dist/chunk-CP4UV436.js.map +1 -0
- package/dist/chunk-D2CQPNQG.js +27508 -0
- package/dist/chunk-D2CQPNQG.js.map +1 -0
- package/dist/chunk-DIQRZP7Z.js +51 -0
- package/dist/chunk-DIQRZP7Z.js.map +1 -0
- package/dist/chunk-EBFFDDAS.js +13 -0
- package/dist/chunk-EBFFDDAS.js.map +1 -0
- package/dist/chunk-EGVS23DR.js +85 -0
- package/dist/chunk-EGVS23DR.js.map +1 -0
- package/dist/chunk-EKBQ7K4N.js +15 -0
- package/dist/chunk-EKBQ7K4N.js.map +1 -0
- package/dist/chunk-EKQCZRAN.js +24 -0
- package/dist/chunk-EKQCZRAN.js.map +1 -0
- package/dist/chunk-EYKZIZ5J.js +48 -0
- package/dist/chunk-EYKZIZ5J.js.map +1 -0
- package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
- package/dist/chunk-F4PTFXZH.js.map +1 -0
- package/dist/chunk-FFYZXA75.js +58 -0
- package/dist/chunk-FFYZXA75.js.map +1 -0
- package/dist/chunk-GFGDHPZ2.js +22 -0
- package/dist/chunk-GFGDHPZ2.js.map +1 -0
- package/dist/chunk-GR3CDFID.js +18 -0
- package/dist/chunk-GR3CDFID.js.map +1 -0
- package/dist/chunk-GR4SIU32.js +104 -0
- package/dist/chunk-GR4SIU32.js.map +1 -0
- package/dist/chunk-H5E46IIS.js +18 -0
- package/dist/chunk-H5E46IIS.js.map +1 -0
- package/dist/chunk-HFHVAMZL.js +22 -0
- package/dist/chunk-HFHVAMZL.js.map +1 -0
- package/dist/chunk-HRRI4BLF.js +4456 -0
- package/dist/chunk-HRRI4BLF.js.map +1 -0
- package/dist/chunk-HT6L7A5M.js +12 -0
- package/dist/chunk-HT6L7A5M.js.map +1 -0
- package/dist/chunk-I2FPFISM.js +301 -0
- package/dist/chunk-I2FPFISM.js.map +1 -0
- package/dist/chunk-IADAQJDH.js +28 -0
- package/dist/chunk-IADAQJDH.js.map +1 -0
- package/dist/chunk-IBOBCMQQ.js +99 -0
- package/dist/chunk-IBOBCMQQ.js.map +1 -0
- package/dist/chunk-IFWKRCFF.js +56 -0
- package/dist/chunk-IFWKRCFF.js.map +1 -0
- package/dist/chunk-IH4T7V4C.js +40 -0
- package/dist/chunk-IH4T7V4C.js.map +1 -0
- package/dist/chunk-IIIZZ4E4.js +1679 -0
- package/dist/chunk-IIIZZ4E4.js.map +1 -0
- package/dist/chunk-ILSFU3WD.js +83 -0
- package/dist/chunk-ILSFU3WD.js.map +1 -0
- package/dist/chunk-IX3VBV3L.js +43 -0
- package/dist/chunk-IX3VBV3L.js.map +1 -0
- package/dist/chunk-JBBFSORW.js +846 -0
- package/dist/chunk-JBBFSORW.js.map +1 -0
- package/dist/chunk-JIDTNKKL.js +1183 -0
- package/dist/chunk-JIDTNKKL.js.map +1 -0
- package/dist/chunk-JSPE6NGZ.js +22 -0
- package/dist/chunk-JSPE6NGZ.js.map +1 -0
- package/dist/chunk-JVROGQ7Q.js +150 -0
- package/dist/chunk-JVROGQ7Q.js.map +1 -0
- package/dist/chunk-K4WUMWNJ.js +32 -0
- package/dist/chunk-K4WUMWNJ.js.map +1 -0
- package/dist/chunk-K74XQ4Q5.js +11 -0
- package/dist/chunk-K74XQ4Q5.js.map +1 -0
- package/dist/chunk-KLLMJ4U3.js +22 -0
- package/dist/chunk-KLLMJ4U3.js.map +1 -0
- package/dist/chunk-LTKVCJ2E.js +27 -0
- package/dist/chunk-LTKVCJ2E.js.map +1 -0
- package/dist/chunk-M36DJTFZ.js +34 -0
- package/dist/chunk-M36DJTFZ.js.map +1 -0
- package/dist/chunk-MHM52LCJ.js +154 -0
- package/dist/chunk-MHM52LCJ.js.map +1 -0
- package/dist/chunk-MQCDMHRZ.js +59 -0
- package/dist/chunk-MQCDMHRZ.js.map +1 -0
- package/dist/chunk-N3ORMGAI.js +348 -0
- package/dist/chunk-N3ORMGAI.js.map +1 -0
- package/dist/chunk-NCSGIRRQ.js +28 -0
- package/dist/chunk-NCSGIRRQ.js.map +1 -0
- package/dist/chunk-NIXT2SBH.js +1423 -0
- package/dist/chunk-NIXT2SBH.js.map +1 -0
- package/dist/chunk-NJAII6CO.js +148 -0
- package/dist/chunk-NJAII6CO.js.map +1 -0
- package/dist/chunk-NKE4TL43.js +92 -0
- package/dist/chunk-NKE4TL43.js.map +1 -0
- package/dist/chunk-NZ7AXA7B.js +1 -0
- package/dist/chunk-NZ7AXA7B.js.map +1 -0
- package/dist/chunk-OCAYEGI2.js +26 -0
- package/dist/chunk-OCAYEGI2.js.map +1 -0
- package/dist/chunk-OMLI45ER.js +90 -0
- package/dist/chunk-OMLI45ER.js.map +1 -0
- package/dist/chunk-P7OBLJAG.js +88 -0
- package/dist/chunk-P7OBLJAG.js.map +1 -0
- package/dist/chunk-PAY3CBWL.js +2321 -0
- package/dist/chunk-PAY3CBWL.js.map +1 -0
- package/dist/chunk-PFF6VY35.js +257 -0
- package/dist/chunk-PFF6VY35.js.map +1 -0
- package/dist/chunk-PYNDJDWZ.js +1758 -0
- package/dist/chunk-PYNDJDWZ.js.map +1 -0
- package/dist/chunk-QDQ6UMMN.js +53 -0
- package/dist/chunk-QDQ6UMMN.js.map +1 -0
- package/dist/chunk-QGT3G2XG.js +24 -0
- package/dist/chunk-QGT3G2XG.js.map +1 -0
- package/dist/chunk-QZYCJ2GZ.js +55 -0
- package/dist/chunk-QZYCJ2GZ.js.map +1 -0
- package/dist/chunk-REZ7RFSA.js +124 -0
- package/dist/chunk-REZ7RFSA.js.map +1 -0
- package/dist/chunk-RRYBAE6E.js +2449 -0
- package/dist/chunk-RRYBAE6E.js.map +1 -0
- package/dist/chunk-RWUZOB62.js +34 -0
- package/dist/chunk-RWUZOB62.js.map +1 -0
- package/dist/chunk-SB5UCPZH.js +116 -0
- package/dist/chunk-SB5UCPZH.js.map +1 -0
- package/dist/chunk-SEJJ7CRI.js +99 -0
- package/dist/chunk-SEJJ7CRI.js.map +1 -0
- package/dist/chunk-SHBFGRPV.js +45 -0
- package/dist/chunk-SHBFGRPV.js.map +1 -0
- package/dist/chunk-SOFJ4GC5.js +45 -0
- package/dist/chunk-SOFJ4GC5.js.map +1 -0
- package/dist/chunk-STH2HPZK.js +44 -0
- package/dist/chunk-STH2HPZK.js.map +1 -0
- package/dist/chunk-TK3JNKME.js +28 -0
- package/dist/chunk-TK3JNKME.js.map +1 -0
- package/dist/chunk-TMONHFE3.js +46 -0
- package/dist/chunk-TMONHFE3.js.map +1 -0
- package/dist/chunk-TR4KO3AG.js +44 -0
- package/dist/chunk-TR4KO3AG.js.map +1 -0
- package/dist/chunk-TS2LNBF2.js +68 -0
- package/dist/chunk-TS2LNBF2.js.map +1 -0
- package/dist/chunk-UZUMBFPP.js +26 -0
- package/dist/chunk-UZUMBFPP.js.map +1 -0
- package/dist/chunk-VRZ5LMOW.js +176 -0
- package/dist/chunk-VRZ5LMOW.js.map +1 -0
- package/dist/chunk-WLGGY6Z6.js +75 -0
- package/dist/chunk-WLGGY6Z6.js.map +1 -0
- package/dist/chunk-WO7V6ZNC.js +11 -0
- package/dist/chunk-WO7V6ZNC.js.map +1 -0
- package/dist/chunk-WXSENSRP.js +64 -0
- package/dist/chunk-WXSENSRP.js.map +1 -0
- package/dist/chunk-XEKBZ2SA.js +19 -0
- package/dist/chunk-XEKBZ2SA.js.map +1 -0
- package/dist/chunk-XPBKU3JX.js +61 -0
- package/dist/chunk-XPBKU3JX.js.map +1 -0
- package/dist/chunk-XRYXBXWH.js +24 -0
- package/dist/chunk-XRYXBXWH.js.map +1 -0
- package/dist/chunk-XVA7QRVH.js +22 -0
- package/dist/chunk-XVA7QRVH.js.map +1 -0
- package/dist/chunk-YCTHHBSS.js +37 -0
- package/dist/chunk-YCTHHBSS.js.map +1 -0
- package/dist/chunk-YHPWD5NE.js +70 -0
- package/dist/chunk-YHPWD5NE.js.map +1 -0
- package/dist/chunk-YLNEKJQ5.js +126 -0
- package/dist/chunk-YLNEKJQ5.js.map +1 -0
- package/dist/chunk-YN4CEKCF.js +73 -0
- package/dist/chunk-YN4CEKCF.js.map +1 -0
- package/dist/chunk-YYNMESIF.js +17 -0
- package/dist/chunk-YYNMESIF.js.map +1 -0
- package/dist/chunk-Z6PRMCV6.js +1 -0
- package/dist/chunk-Z6PRMCV6.js.map +1 -0
- package/dist/chunk-ZDNW6VQG.js +11 -0
- package/dist/chunk-ZDNW6VQG.js.map +1 -0
- package/dist/chunk-ZP4D73DO.js +36 -0
- package/dist/chunk-ZP4D73DO.js.map +1 -0
- package/dist/chunk-ZUATADUV.js +26 -0
- package/dist/chunk-ZUATADUV.js.map +1 -0
- package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
- package/dist/core/index.cjs +14041 -6973
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +422 -138
- package/dist/core/index.js +425 -183
- package/dist/core/index.js.map +1 -1
- package/dist/flow-vnext/index.cjs +2842 -0
- package/dist/flow-vnext/index.cjs.map +1 -0
- package/dist/flow-vnext/index.d.ts +3 -0
- package/dist/flow-vnext/index.js +119 -0
- package/dist/flow-vnext/index.js.map +1 -0
- package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
- package/dist/index-b9xxXGFs.d.ts +1230 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +202 -37
- package/dist/index.js.map +1 -1
- package/dist/legacy-BpgIqaQ5.d.ts +14 -0
- package/dist/mantine/index.d.ts +7 -4
- package/dist/mantine/index.js +84 -30
- package/dist/mantine/index.js.map +1 -1
- package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
- package/package.json +12 -2
- package/dist/chunk-A4CWC4AG.js +0 -374
- package/dist/chunk-A4CWC4AG.js.map +0 -1
- package/dist/chunk-NEOPTPDF.js.map +0 -1
- package/dist/chunk-VRCRDKN5.js +0 -59694
- package/dist/chunk-VRCRDKN5.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/collectionUsers/CollectionUsersFlowDetail.tsx","../src/mantine/blocks/action/actionTypes/_shared/bids/decidedBids.ts"],"sourcesContent":["import { useRunRuntimeReader } from '@/mantine/hooks/useRunRuntimeReader';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActionIcon, Alert as MantineAlert, Badge, Box, Button, Divider, Group, Loader, Radio, SegmentedControl, Stack, Text } from '@mantine/core';\nimport { DismissibleAlert as Alert } from '@/mantine/components/Base/DismissibleAlert';\nimport { useDebouncedValue } from '@mantine/hooks';\nimport { IconAlertCircle, IconArrowLeft, IconCheck, IconRefresh, IconTrash } from '@tabler/icons-react';\nimport BaseNumberInput from '@/mantine/components/Base/BaseNumberInput';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport BaseTextArea from '@/mantine/components/Base/BaseTextArea';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport ListItemContainer from '@/mantine/blocks/list/ListItemContainer';\nimport { CollapsibleSection } from '@/mantine/components/CollapsibleSection';\nimport { RecipientInput } from '../governance/_shared/RecipientInput';\nimport { resolveReferences } from '@/mantine/utils/referenceResolver';\nimport { useBlocknoteHandlers, useTranslate, type Bid, type IUserMatrixProfile } from '@/mantine/context/BlocknoteContext';\nimport type { ActionTypeFlowProps } from '../../actionTypeUI';\nimport { ActAsGroupSection, actAsGroupReady, actAsGroupRuntimeInputs, emptyActAsGroupState, type ActAsGroupState } from '../_shared/groupExecution/ActAsGroupSection';\nimport { DownloadCsvButton, DownloadZipButton, buildBidRows, bidAnswers, buildCollectionMembersSections, buildExportBundle, exportFileNames } from '../_shared/dataExport';\nimport { ReadableKeyValues } from '../_shared/ReadableKeyValues';\nimport { downloadArrayAsCsv, downloadBlob, downloadSectionedCsv, rowsToCsv, sectionsToCsv } from '@/core/utils/files';\nimport { parseAccountList, type AccountRowProblem, type ParsedAccountList } from '@/core/utils/accountList';\nimport { getBidStatusInfo } from '@/mantine/utils/bidStatus';\nimport { fetchAllBids, dedupeBids, describeBidsPagingStop } from '../_shared/bids/fetchAllBids';\nimport { partitionBidsByDecision } from '../_shared/bids/sortBids';\nimport { fetchDecidedBids } from '../_shared/bids/decidedBids';\nimport { GroupProposalStatus } from '../_shared/groupExecution/GroupProposalStatus';\nimport { actionAlertStyles } from '../../alertStyles';\nimport { ActionDiffView } from '../../diff';\nimport type { DiffResult } from '@/core/lib/actionRegistry/diffTypes';\nimport { parseCollectionUsersActionInputs } from './types';\nimport type {\n AddressClassification,\n CollectionCoin,\n CollectionGrantee,\n CollectionGranteeKind,\n CollectionMember,\n CollectionUserRole,\n CollectionUsersListOutput,\n CollectionUsersRuntimeInputs,\n} from '@/core/lib/actionRegistry/actions/collectionUsers/types';\nimport { COLLECTION_USERS_MAX_GRANTS_PER_TX, collectionUsersBatchCount } from '@/core/lib/actionRegistry/actions/collectionUsers';\n\nconst LOG = '[collection.users]';\n\n// ---------------------------------------------------------------------------\n// Optional consumer handlers. classifyAddress / enumerateMembers live ONLY on\n// the `collectionUsers` service (reached at run time via executeAction), not on\n// the BlocknoteContext handler surface. The live address picker needs them\n// BEFORE a run, so we probe for optional handlers of the same name and degrade\n// gracefully when the host doesn't expose them (treat the address as a plain\n// user and offer only the per-account grant).\n// ---------------------------------------------------------------------------\ntype ClassifyAddressHandler = (params: { address: string }) => Promise<AddressClassification>;\ntype EnumerateMembersHandler = (params: { groupAddress: string }) => Promise<{ members: CollectionMember[] }>;\n\ntype Section = 'list' | 'add' | 'bids';\n\n/**\n * How the Add section collects grantees: one account picked/typed, or a list\n * pasted straight out of a spreadsheet (IXO-4396). Role, quota and limits are\n * shared — they apply to every account in the list.\n */\ntype AddMode = 'single' | 'list';\n\n// Rejected rows are listed individually up to this many; beyond it the alert\n// summarises so a bad 500-row paste can't flood the block.\nconst MAX_LISTED_REJECTIONS = 8;\n\nfunction roleLabel(role: CollectionUserRole): string {\n return role === 'submit' ? 'Submit (Contributor)' : 'Evaluate (Evaluator)';\n}\n\n// Agent quota is a per-agent claim/evaluation cap. The chain requires it to be\n// strictly greater than 0 (\"agent quota must be bigger than 0\") — there is NO\n// \"0 = unlimited\" sentinel here (that only applies to a collection's own quota).\n// So we never render 0 as \"Unlimited\"; we show the number (or — when absent).\nconst MIN_AGENT_QUOTA = 1;\nconst DEFAULT_CONTRIBUTOR_QUOTA = 100;\nconst DEFAULT_EVALUATOR_QUOTA = 100;\nconst IXO_DENOM = 'uixo';\nconst USDC_DENOM = 'ibc/6BBE9BD4246F8E04948D5A4EEE7164B2630263B9EBB5E7DC5F0A46C62A2FF97B';\n// uixo and the IBC USDC denom are both 6-decimal micro denoms. The consumer\n// grant / approve-evaluator handlers expect maxAmount coins ALREADY in base\n// (micro) units — collectionGrant.ts `toCoins` and agent-authz.ts\n// `grantEvaluatorAuthz` apply no conversion (\"the grant UI is expected to pass\n// base-unit coins\"). The UI collects human amounts (e.g. \"1000\" IXO), so we\n// scale by 10^DENOM_DECIMALS before handing coins off and divide only for display.\nconst DENOM_DECIMALS = 6;\n\ntype MaxAmountValues = {\n ixo: string;\n usdc: string;\n};\n\nconst EMPTY_MAX_AMOUNTS: MaxAmountValues = { ixo: '', usdc: '' };\n\nfunction formatQuota(value: string | undefined): string {\n if (value == null || value === '') return '—';\n return value;\n}\n\nfunction truncateAddress(address: string): string {\n if (!address) return '';\n if (address.length <= 16) return address;\n return `${address.slice(0, 10)}...${address.slice(-4)}`;\n}\n\nfunction toIxoDid(value: string | undefined): string {\n const trimmed = String(value || '').trim();\n if (!trimmed) return '';\n return trimmed.startsWith('did:') ? trimmed : `did:ixo:${trimmed}`;\n}\n\nfunction getGranteeDid(grantee: CollectionGrantee): string {\n return toIxoDid(grantee.did || grantee.address);\n}\n\n// Scale a human/display amount (e.g. \"1000\" IXO) to on-chain base/micro units\n// (uixo, micro-USDC). Parses the decimal string directly to avoid float drift on\n// large amounts. Returns \"0\" for empty/invalid/non-positive input.\nfunction toBaseUnits(displayAmount: string): string {\n const trimmed = String(displayAmount ?? '').trim();\n const n = Number(trimmed);\n if (!Number.isFinite(n) || n <= 0) return '0';\n const [intPart = '', fracRaw = ''] = trimmed.split('.');\n const frac = fracRaw.slice(0, DENOM_DECIMALS).padEnd(DENOM_DECIMALS, '0');\n return `${intPart}${frac}`.replace(/^0+/, '') || '0';\n}\n\n// Inverse of toBaseUnits — base/micro units back to a display amount for the diff.\nfunction fromBaseUnits(baseAmount: string | number): string {\n const n = Number(baseAmount);\n if (!Number.isFinite(n)) return String(baseAmount ?? '');\n return String(n / Math.pow(10, DENOM_DECIMALS));\n}\n\nfunction buildMaxAmounts(values: MaxAmountValues): CollectionCoin[] {\n return [\n { denom: IXO_DENOM, amount: values.ixo },\n { denom: USDC_DENOM, amount: values.usdc },\n ]\n .filter((coin) => {\n const amount = Number(coin.amount);\n return Number.isFinite(amount) && amount > 0;\n })\n .map((coin) => ({ denom: coin.denom, amount: toBaseUnits(coin.amount) }));\n}\n\nfunction formatCoin(coin: CollectionCoin): string {\n const denom = coin.denom === IXO_DENOM ? 'IXO' : coin.denom === USDC_DENOM ? 'USDC' : coin.denom;\n return `${fromBaseUnits(coin.amount)} ${denom}`;\n}\n\nfunction MaxAmountsInput({ value, onChange, disabled }: { value: MaxAmountValues; onChange: (value: MaxAmountValues) => void; disabled?: boolean }) {\n return (\n <Stack gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\">\n Evaluator max amounts\n </Text>\n <Group grow align=\"flex-start\">\n <BaseNumberInput\n label=\"IXO\"\n min={0}\n value={value.ixo === '' ? '' : Number(value.ixo)}\n onChange={(amount) => onChange({ ...value, ixo: amount === '' || amount == null ? '' : String(amount) })}\n disabled={disabled}\n />\n <BaseNumberInput\n label=\"USDC\"\n min={0}\n value={value.usdc === '' ? '' : Number(value.usdc)}\n onChange={(amount) => onChange({ ...value, usdc: amount === '' || amount == null ? '' : String(amount) })}\n disabled={disabled}\n />\n </Group>\n </Stack>\n );\n}\n\n/**\n * Success line for a completed `add`. A bulk grant states how many accounts it\n * covered and how many transactions carried them — with several, the tx hash\n * shown alongside is only the last of them.\n */\nfunction broadcastTxCount(output: Record<string, any> | undefined): number {\n if (Array.isArray(output?.transactionHashes)) return output!.transactionHashes.length;\n return output?.batched === false ? Number(output?.grantedCount) || 1 : 1;\n}\n\nfunction grantBroadcastSummary(output: Record<string, any> | undefined): string {\n const count = Number(output?.grantedCount);\n if (!Number.isFinite(count) || count <= 1) return 'Grant broadcast';\n const transactions = broadcastTxCount(output);\n return transactions === 1 ? `${count} accounts granted in one transaction` : `${count} accounts granted in ${transactions} transactions`;\n}\n\nfunction rejectionReason(problem: AccountRowProblem | undefined): string {\n if (problem === 'invalid-address') return 'not a valid ixo1… address';\n if (problem === 'extra-in-row') return 'a second account on the same row — only the first one on a row is granted';\n return 'no account found in this row';\n}\n\n/**\n * What signing this add will actually cost the user: one signature, or several\n * because the grants exceed the per-transaction cap (or the host cannot bundle\n * them at all). Returned as data so both the pasted list and the group fan-out\n * state it the same way. `null` for a single grant — nothing to warn about.\n */\nfunction signingPlan(count: number, canBatchGrants: boolean): { color: string; message: string } | null {\n if (count <= 1) return null;\n if (!canBatchGrants) {\n return { color: 'yellow', message: `This host cannot bundle grants — it will ask you to sign ${count} separate transactions, one per account.` };\n }\n const batches = collectionUsersBatchCount(count);\n if (batches === 1) return { color: 'blue', message: `All ${count} grants go in one transaction — you sign once.` };\n return {\n color: 'yellow',\n message: `${count} grants exceed the ${COLLECTION_USERS_MAX_GRANTS_PER_TX} per transaction limit, so they are split into ${batches} batches — you will be asked to sign ${batches} times, one after the other.`,\n };\n}\n\n/**\n * Bulk grantee entry: paste a spreadsheet column of accounts, see exactly what\n * was read out of it, then grant them all in one signature (IXO-4396).\n *\n * The parse is shown, not assumed. Every row that produced no account is\n * reported with its row number and reason — a silently-skipped row is a person\n * who silently never gets access — and the accounts that WILL be granted are\n * listed so the count on the slider is verifiable before signing.\n */\nfunction BulkAccountsInput({\n text,\n onChange,\n parsed,\n isDisabled,\n canBatchGrants,\n actingAsGroup,\n}: {\n text: string;\n onChange: (text: string) => void;\n parsed: ParsedAccountList;\n isDisabled?: boolean;\n canBatchGrants: boolean;\n /** A POD proposal executes as ONE transaction, so it cannot be split. */\n actingAsGroup: boolean;\n}) {\n const { addresses, rejected, duplicates } = parsed;\n const listed = rejected.slice(0, MAX_LISTED_REJECTIONS);\n const plan = signingPlan(addresses.length, canBatchGrants);\n\n return (\n <Stack gap=\"xs\">\n <BaseTextArea\n label=\"Accounts\"\n description=\"Paste (Ctrl+V) a column copied from Google Sheets or Excel — one account per row. Other columns, headers and blank rows are ignored.\"\n placeholder={'ixo1…\\nixo1…\\nixo1…'}\n minRows={4}\n maxRows={12}\n value={text}\n onChange={(event) => onChange(event.currentTarget.value)}\n disabled={isDisabled}\n styles={{ input: { fontFamily: 'var(--mantine-font-family-monospace)' } }}\n />\n\n <Group justify=\"space-between\" align=\"center\">\n <Group gap=\"xs\">\n <Badge size=\"sm\" variant=\"light\" color={addresses.length > 0 ? 'green' : 'gray'}>\n {addresses.length} account{addresses.length === 1 ? '' : 's'} to grant\n </Badge>\n {duplicates > 0 && (\n <Badge size=\"sm\" variant=\"light\" color=\"gray\">\n {duplicates} duplicate{duplicates === 1 ? '' : 's'} removed\n </Badge>\n )}\n {rejected.length > 0 && (\n <Badge size=\"sm\" variant=\"light\" color=\"yellow\">\n {rejected.length} row{rejected.length === 1 ? '' : 's'} skipped\n </Badge>\n )}\n </Group>\n {!!text.trim() && (\n <Button size=\"compact-xs\" variant=\"subtle\" color=\"gray\" onClick={() => onChange('')} disabled={isDisabled}>\n Clear\n </Button>\n )}\n </Group>\n\n {rejected.length > 0 && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n <Stack gap={2}>\n <Text size=\"xs\" fw={600}>\n These rows will NOT be granted:\n </Text>\n {listed.map((row) => (\n <Text key={row.line} size=\"xs\">\n Row {row.line}: “{row.raw.length > 60 ? `${row.raw.slice(0, 60)}…` : row.raw}” — {rejectionReason(row.problem)}\n </Text>\n ))}\n {rejected.length > listed.length && (\n <Text size=\"xs\" c=\"dimmed\">\n …and {rejected.length - listed.length} more.\n </Text>\n )}\n </Stack>\n </Alert>\n )}\n\n {addresses.length > 0 && (\n <Box\n style={{\n border: '1px solid var(--mantine-color-neutralColor-6)',\n borderRadius: 8,\n padding: 8,\n maxHeight: 160,\n overflowY: 'auto',\n background: 'var(--mantine-color-neutralColor-5)',\n }}\n >\n <Stack gap={2}>\n {addresses.map((address, index) => (\n <Text key={address} size=\"xs\" ff=\"monospace\" truncate>\n {index + 1}. {address}\n </Text>\n ))}\n </Stack>\n </Box>\n )}\n\n {actingAsGroup && addresses.length > COLLECTION_USERS_MAX_GRANTS_PER_TX && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n Acting as a POD puts every grant in one proposal, which executes as a single transaction — so this list cannot be split. Reduce it to {COLLECTION_USERS_MAX_GRANTS_PER_TX}{' '}\n accounts or fewer, or grant without acting as a POD.\n </Alert>\n )}\n\n {!actingAsGroup && plan && (\n <Alert color={plan.color} styles={actionAlertStyles}>\n {plan.message}\n </Alert>\n )}\n </Stack>\n );\n}\n\n// Normalize an agent-quota input to a positive-integer string the chain accepts.\n// Empty / invalid / below-minimum values clamp up to MIN_AGENT_QUOTA (1) so we\n// never broadcast a grant the chain will reject with \"agent quota must be > 0\".\nfunction toQuotaString(value: number | string | undefined): string {\n const n = Number(value);\n if (!Number.isFinite(n) || n < MIN_AGENT_QUOTA) return String(MIN_AGENT_QUOTA);\n return String(Math.floor(n));\n}\n\n// ── Bid inbox helpers (carried over from EvaluateBidFlowDetail) ──────────────\nfunction getRoleColor(role: string): string {\n const r = String(role || '').toLowerCase();\n if (r === 'service_agent' || r === 'sa') return 'blue';\n if (r === 'evaluation_agent' || r === 'ea') return 'green';\n return 'gray';\n}\n\nfunction getBidRoleLabel(role: string): string {\n const r = String(role || '').toLowerCase();\n if (r === 'service_agent' || r === 'sa') return 'Contributor';\n if (r === 'evaluation_agent' || r === 'ea') return 'Evaluator';\n return role || 'Unknown';\n}\n\nfunction getTimeAgo(dateString: string): string {\n if (!dateString) return '';\n try {\n const date = new Date(dateString);\n const diffMs = Date.now() - date.getTime();\n const diffMins = Math.floor(diffMs / 60000);\n if (diffMins < 1) return 'just now';\n if (diffMins < 60) return `${diffMins}m ago`;\n const diffHours = Math.floor(diffMins / 60);\n if (diffHours < 24) return `${diffHours}h ago`;\n const diffDays = Math.floor(diffHours / 24);\n if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;\n const diffMonths = Math.floor(diffDays / 30);\n return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`;\n } catch {\n return dateString;\n }\n}\n\n/**\n * Single-block claim-collection user-management execution UI (IXO-2588).\n *\n * `runtime` is the single source of truth — never mirrored to React state. The\n * only useState here is genuinely ephemeral per-operation selection (which op,\n * which grantee, which role) that the user is mid-editing before they sign, plus\n * the live address-classification probe (a pre-run convenience, not durable\n * state).\n *\n * Three sections via a SegmentedControl, mirroring the lifecycle block:\n * - **List** — read-only `list` op runs once on mount; renders grantees with a\n * per-row Revoke that arms the slider for that grantee+role.\n * - **Add** — grantee address + classify probe + optional group prompt + role\n * + quota; arms the slider for the `add` op.\n * - **Bids** — reactive bid inbox (approve/reject) carried over from the\n * evaluateBid block, using the existing reactive `bid` handlers.\n *\n * The shared executor (executeAction) owns durable runtime writes for add/revoke\n * /list. We only write runtime locally for stale-state recovery and to surface a\n * failure message.\n */\nexport const CollectionUsersFlowDetail: React.FC<ActionTypeFlowProps<CollectionUsersRuntimeInputs>> = ({\n inputs,\n editor,\n block,\n runtime,\n updateRuntime,\n isDisabled,\n provideSigningHandler,\n unlockSigning,\n registerRuntimeInputs,\n executeAction,\n activePendingInvocation,\n}) => {\n const [actAs, setActAs] = useState<ActAsGroupState>(emptyActAsGroupState());\n const t = useTranslate();\n const handlers = useBlocknoteHandlers();\n const handlersRef = useRef(handlers);\n useEffect(() => {\n handlersRef.current = handlers;\n }, [handlers]);\n\n const parsed = useMemo(() => parseCollectionUsersActionInputs(inputs), [inputs]);\n const editorDocument = editor?.document || [];\n const runtimeReader = useRunRuntimeReader(editor);\n const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);\n\n // Template-configured context (manual mode). May be empty when this block is\n // an event listener — see `pendingPayload` below.\n const templateDeedDid = useMemo(() => resolveReferences(parsed.deedDid || '', editorDocument, resolveOpts).trim(), [parsed.deedDid, editorDocument, resolveOpts]);\n const templateCollectionId = useMemo(() => resolveReferences(parsed.collectionId || '', editorDocument, resolveOpts).trim(), [parsed.collectionId, editorDocument, resolveOpts]);\n\n // Listener mode: when bound to a pending invocation (e.g. a Claim Collection\n // block's `created` event), the collection + owning entity arrive in the\n // frozen event payload. They take precedence over the template config so the\n // block manages exactly the collection that was just created (IXO-2596).\n //\n // Unlike a one-shot signed listener, this block is a PERSISTENT management\n // surface: it does not consume the invocation. The auto-resolve binding\n // (registered via `autoResolvePendingInvocation` in the UI registry) makes the\n // block render exactly as if `collectionId`/`entity` had been entered in\n // template mode, and stays bound across reloads and repeated add/revoke ops.\n const isListener = !!activePendingInvocation;\n const pendingPayload = useMemo(() => {\n if (!activePendingInvocation) return undefined;\n return {\n ...(activePendingInvocation.payload || {}),\n ...(activePendingInvocation.refSnapshots || {}),\n } as Record<string, unknown>;\n }, [activePendingInvocation]);\n\n const deedDid = useMemo(() => String(pendingPayload?.entity || '').trim() || templateDeedDid, [pendingPayload, templateDeedDid]);\n const collectionId = useMemo(() => String(pendingPayload?.collectionId || '').trim() || templateCollectionId, [pendingPayload, templateCollectionId]);\n\n // -------------------------------------------------------------------------\n // Entity admin account (the authz granter). Resolved from the deed DID — the\n // list / add / revoke ops all require it. Genuinely async-fetched value, not\n // runtime/result state, so local state is correct.\n // -------------------------------------------------------------------------\n const [adminAddress, setAdminAddress] = useState('');\n const [adminError, setAdminError] = useState<string | null>(null);\n\n useEffect(() => {\n let mounted = true;\n if (!deedDid) {\n setAdminAddress('');\n return;\n }\n (async () => {\n try {\n const addr = await handlersRef.current.getAdminAccountAddress(deedDid);\n if (mounted) {\n setAdminAddress(String(addr || '').trim());\n setAdminError(null);\n }\n } catch (err) {\n if (mounted) {\n setAdminAddress('');\n setAdminError(err instanceof Error ? err.message : 'Failed to resolve entity admin account');\n }\n }\n })();\n return () => {\n mounted = false;\n };\n }, [deedDid]);\n\n // -------------------------------------------------------------------------\n // Derived runtime state — read directly from the Y.Map on every render.\n // -------------------------------------------------------------------------\n const output = (runtime.output as Record<string, any> | undefined) || undefined;\n const lastOp = String(output?.operation || '') as CollectionUsersRuntimeInputs['operation'] | '';\n const listGrantees = useMemo<CollectionGrantee[]>(() => {\n const out = output as CollectionUsersListOutput | undefined;\n return Array.isArray(out?.grantees) ? (out!.grantees as CollectionGrantee[]) : [];\n }, [output]);\n const [granteeProfilesByDid, setGranteeProfilesByDid] = useState<Record<string, IUserMatrixProfile>>({});\n\n const isRunning = runtime.state === 'running';\n const isFailed = runtime.state === 'failed';\n const errorMessage = runtime.error?.message || null;\n\n // Proof: a write op (add/revoke) needs a transactionHash; list needs a\n // grantees array. `completed` without the matching proof is stale.\n const hasTxProof = !!String(output?.transactionHash || '').trim();\n const hasListProof = Array.isArray(output?.grantees);\n const hasProof = hasTxProof || hasListProof;\n const isCompletedWithProof = runtime.state === 'completed' && hasProof;\n const isStale = runtime.state === 'completed' && !hasProof;\n\n // -------------------------------------------------------------------------\n // Section + per-op selection state. Genuinely ephemeral (in-progress user\n // selection before signing) — useState is correct, this is not result state.\n // -------------------------------------------------------------------------\n const [section, setSection] = useState<Section>('list');\n\n // Active write operation the slider will trigger. `list` is read-only and\n // never the active op for the slider.\n const [activeOp, setActiveOp] = useState<'add' | 'revoke'>('add');\n\n // Add-form fields.\n const [addAddress, setAddAddress] = useState('');\n const [addRole, setAddRole] = useState<CollectionUserRole>('submit');\n const [addQuota, setAddQuota] = useState<string>(String(DEFAULT_CONTRIBUTOR_QUOTA));\n const [addMaxAmounts, setAddMaxAmounts] = useState<MaxAmountValues>(EMPTY_MAX_AMOUNTS);\n const [granteeKind, setGranteeKind] = useState<CollectionGranteeKind>('user');\n const [members, setMembers] = useState<CollectionMember[]>([]);\n\n // Bulk add: the raw pasted spreadsheet text and the accounts parsed out of it.\n // The text is ephemeral pre-sign input, so useState is correct here; the\n // parsed result is derived on every render rather than stored (parsing a few\n // hundred rows is trivial and a second copy could drift from the text).\n const [addMode, setAddMode] = useState<AddMode>('single');\n const [bulkText, setBulkText] = useState('');\n const parsedAccounts = useMemo(() => parseAccountList(bulkText), [bulkText]);\n const bulkAddresses = parsedAccounts.addresses;\n\n // Whether the host can bundle many grants into one transaction. Probed the\n // same way as classifyAddress / enumerateMembers — the service form of the\n // handler is only built at execution time, so the pre-sign UI reads the\n // handler directly and tells the user plainly when this host would instead\n // ask for one signature per account.\n const canBatchGrants = typeof (handlers as unknown as { collectionUsers?: { grantMany?: unknown } }).collectionUsers?.grantMany === 'function';\n\n // Revoke target (chosen from a list row).\n const [revokeTarget, setRevokeTarget] = useState<{ address: string; role: CollectionUserRole } | null>(null);\n\n // Paste into the single-account field with more than one row/column on the\n // clipboard: the user meant the list, and a single-line input would mangle it.\n // Switch modes and keep everything — an address already resolved in the single\n // field is carried into the list rather than discarded, and a second paste\n // appends to the first.\n const handleBulkPaste = useCallback(\n (text: string) => {\n const carried = addAddress.trim();\n setActiveOp('add');\n setRevokeTarget(null);\n setAddAddress('');\n setAddMode('list');\n setBulkText((prev) => [prev.replace(/\\s+$/, ''), carried, text].filter((part) => part.trim()).join('\\n'));\n },\n [addAddress]\n );\n\n const handleAddModeChange = useCallback((mode: AddMode) => {\n setActiveOp('add');\n setRevokeTarget(null);\n setAddMode(mode);\n }, []);\n\n // -------------------------------------------------------------------------\n // Live address classification probe (Add section). Optional consumer handler;\n // gated behind a manual \"Check address\" button when present, no-op otherwise.\n // -------------------------------------------------------------------------\n const classifyHandler = (handlers as unknown as { classifyAddress?: ClassifyAddressHandler }).classifyAddress;\n const enumerateHandler = (handlers as unknown as { enumerateMembers?: EnumerateMembersHandler }).enumerateMembers;\n const canClassify = typeof classifyHandler === 'function';\n const canEnumerate = typeof enumerateHandler === 'function';\n\n const [classification, setClassification] = useState<AddressClassification | null>(null);\n const [classifying, setClassifying] = useState(false);\n const [classifyError, setClassifyError] = useState<string | null>(null);\n const [debouncedAddress] = useDebouncedValue(addAddress.trim(), 400);\n\n // Reset classification whenever the typed address changes — a prior result no\n // longer describes the new address.\n useEffect(() => {\n setClassification(null);\n setClassifyError(null);\n setGranteeKind('user');\n setMembers([]);\n }, [debouncedAddress]);\n\n const runClassify = useCallback(async () => {\n const address = addAddress.trim();\n if (!address || !classifyHandler) return;\n setClassifying(true);\n setClassifyError(null);\n try {\n console.log(`${LOG} classifyAddress →`, { address });\n const result = await classifyHandler({ address });\n setClassification(result);\n // Default the kind: a DAO group that cannot exercise the grant must fan out\n // to members; everything else starts as a single grant.\n if (result?.daodao && !result.daodao.canExerciseGrant) {\n setGranteeKind('group-members');\n } else {\n setGranteeKind('user');\n }\n } catch (err) {\n setClassification(null);\n setClassifyError(err instanceof Error ? err.message : 'Failed to classify address');\n } finally {\n setClassifying(false);\n }\n }, [addAddress, classifyHandler]);\n\n // Resolve group members when the user opts to fan out to members.\n const enumerateGroupMembers = useCallback(async () => {\n const address = addAddress.trim();\n if (!address || !enumerateHandler) return;\n setClassifying(true);\n try {\n console.log(`${LOG} enumerateMembers →`, { address });\n const result = await enumerateHandler({ groupAddress: address });\n setMembers(Array.isArray(result?.members) ? result.members : []);\n } catch (err) {\n setMembers([]);\n setClassifyError(err instanceof Error ? err.message : 'Failed to enumerate group members');\n } finally {\n setClassifying(false);\n }\n }, [addAddress, enumerateHandler]);\n\n // Whenever the user selects group-members, (re)enumerate so `members` is fresh.\n useEffect(() => {\n if (granteeKind === 'group-members' && classification?.daodao && canEnumerate) {\n enumerateGroupMembers();\n } else if (granteeKind !== 'group-members') {\n setMembers([]);\n }\n }, [granteeKind, classification, canEnumerate, enumerateGroupMembers]);\n\n useEffect(() => {\n setAddQuota(String(addRole === 'evaluate' ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));\n }, [addRole]);\n\n const isGroup = !!classification?.daodao;\n const canExerciseGrant = !!classification?.daodao?.canExerciseGrant;\n\n // How many separate authorizations this add will confer — one per member for a\n // group fan-out, one per pasted account, one otherwise. Drives the signing\n // plan the user is shown and the POD-proposal ceiling.\n const pendingGranteeCount = addMode === 'list' ? bulkAddresses.length : granteeKind === 'group-members' ? members.length : 1;\n // A member fan-out is batched like a pasted list, so it owes the user the same\n // statement of how many times they will be asked to sign.\n const memberSigningPlan = useMemo(() => signingPlan(members.length, canBatchGrants), [members.length, canBatchGrants]);\n\n // -------------------------------------------------------------------------\n // List section — one-shot `list` op on mount (read-only). Ref-guarded like\n // the lifecycle block's refresh-on-load.\n // -------------------------------------------------------------------------\n const listOnLoadRef = useRef(false);\n const runList = useCallback(async () => {\n if (!executeAction) {\n updateRuntime({ state: 'failed', error: { message: 'Shared action executor is unavailable', at: Date.now() } });\n return;\n }\n if (!collectionId || !adminAddress) return;\n console.log(`${LOG} list →`, { collectionId, adminAddress });\n try {\n const outcome = await executeAction({ runtimeInputs: { operation: 'list', collectionId, adminAddress } });\n if (!outcome.success) {\n throw new Error(outcome.error || 'Failed to list collection grantees');\n }\n const payload = outcome.output as CollectionUsersListOutput | undefined;\n if (!Array.isArray(payload?.grantees)) {\n throw new Error('List returned no grantees array. Check the [collection:list] handler logs.');\n }\n console.log(`${LOG} list success`, { count: payload!.grantees.length });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to list collection grantees';\n console.error(`${LOG} list failed`, { message });\n updateRuntime({ state: 'failed', error: { message, at: Date.now() } });\n }\n }, [executeAction, collectionId, adminAddress, updateRuntime]);\n\n useEffect(() => {\n if (listOnLoadRef.current) return;\n if (!collectionId || !adminAddress) return; // wait for resolved context\n if (isRunning || isFailed) return;\n if (runtime.state === 'needs_verification') return; // ran-but-unproven — never auto-retry (H1)\n if (hasListProof) return; // already have a grantee snapshot\n listOnLoadRef.current = true;\n console.log(`${LOG} list-on-load`, { collectionId });\n runList();\n }, [collectionId, adminAddress, isRunning, isFailed, runtime.state, hasListProof, runList]);\n\n const handleManualRefreshList = useCallback(() => {\n listOnLoadRef.current = false;\n runList();\n }, [runList]);\n\n // IXO-4235 — per-bid evaluated record for the Bids section, held here so it\n // survives switching between the Users/Add/Bids tabs.\n const [evaluatedBids, setEvaluatedBids] = useState<Record<string, 'approved' | 'rejected'>>({});\n const handleBidEvaluated = useCallback((bidId: string, outcome: 'approved' | 'rejected') => {\n setEvaluatedBids((prev) => ({ ...prev, [bidId]: outcome }));\n }, []);\n\n // IXO-4066 — export the collection's members. Two parts in one file: part 1\n // is the active grants (who can act on the collection now), part 2 is every\n // bid ever submitted with its status and the bidder's grant state. Part 2\n // includes accounts that were never granted anything, so it cannot be derived\n // from part 1 — bids are fetched here rather than read out of the Bids tab so\n // the export works whether or not that tab has been opened.\n const granteeNamesByDid = useMemo(() => {\n const namesByDid: Record<string, string> = {};\n for (const [did, profile] of Object.entries(granteeProfilesByDid)) {\n if (profile?.displayname) namesByDid[did] = profile.displayname;\n }\n return namesByDid;\n }, [granteeProfilesByDid]);\n\n // Open bids come from the bids service (paged — one call returns only 10).\n // Decided bids are not in that response at all; they are recovered from the\n // collection room via the optional `bids.queryDecided` host capability. Both\n // are needed for part 2 to mean \"who asked and what came of it\" rather than\n // \"who is still waiting\".\n const fetchCollectionBids = useCallback(async (): Promise<{ bids: Bid[]; truncated: boolean; decidedIncluded: boolean }> => {\n if (!deedDid || !collectionId) return { bids: [], truncated: false, decidedIncluded: false };\n const handlers = handlersRef.current;\n let open: Bid[] = [];\n let truncated = false;\n try {\n const result = await fetchAllBids(handlers.queryBids, { collectionId, entityDid: deedDid });\n open = result.bids;\n truncated = result.truncated;\n } catch {\n open = [];\n }\n const decided = await fetchDecidedBids(handlers, { collectionId, entityDid: deedDid });\n return { bids: dedupeBids([...open, ...decided.bids]), truncated, decidedIncluded: decided.supported };\n }, [deedDid, collectionId]);\n\n const [membersExportError, setMembersExportError] = useState<string | null>(null);\n\n const handleDownloadGranteesCsv = useCallback(async () => {\n const { bids, truncated, decidedIncluded } = await fetchCollectionBids();\n downloadSectionedCsv(\n buildCollectionMembersSections({\n grantees: listGrantees,\n bids,\n namesByDid: granteeNamesByDid,\n bidOptions: { evaluatedByBidId: evaluatedBids },\n collectionId,\n bidsTruncated: truncated,\n decidedBidsIncluded: decidedIncluded,\n }),\n { filename: exportFileNames.collectionMembers(collectionId).csv }\n );\n setMembersExportError(truncated ? 'Bid paging stopped early — part 2 of the export is incomplete.' : null);\n }, [fetchCollectionBids, listGrantees, granteeNamesByDid, evaluatedBids, collectionId]);\n\n const handleDownloadGranteesZip = useCallback(async () => {\n const { bids, truncated, decidedIncluded } = await fetchCollectionBids();\n const names = exportFileNames.collectionMembers(collectionId);\n const handlers = handlersRef.current;\n const fetchMedia = handlers.fetchClaimMedia ? (url: string) => handlers.fetchClaimMedia!(url, { entityDid: deedDid }) : undefined;\n\n const { blob, mediaTotal, mediaFailed } = await buildExportBundle({\n records: bids.map((bid) => ({\n recordId: bid.id,\n answers: bidAnswers(bid),\n manifest: {\n bidId: bid.id,\n did: bid.did,\n address: bid.address,\n role: bid.role,\n created: bid.created,\n status: getBidStatusInfo(bid, { grantees: listGrantees, evaluatedByBidId: evaluatedBids }).key,\n },\n })),\n fetchMedia,\n renderCsv: (answersByBidId) =>\n sectionsToCsv(\n buildCollectionMembersSections({\n grantees: listGrantees,\n bids,\n namesByDid: granteeNamesByDid,\n bidOptions: { evaluatedByBidId: evaluatedBids, answersByBidId },\n collectionId,\n bidsTruncated: truncated,\n decidedBidsIncluded: decidedIncluded,\n })\n ),\n csvName: names.csv,\n manifestName: names.manifest,\n });\n\n downloadBlob(blob, names.zip);\n const notes = [\n truncated ? 'Bid paging stopped early — part 2 of the export is incomplete.' : '',\n mediaFailed > 0 ? `${mediaFailed} of ${mediaTotal} bid media files could not be downloaded — see downloadStatus in ${names.manifest}.` : '',\n ].filter(Boolean);\n setMembersExportError(notes.length > 0 ? notes.join(' ') : null);\n }, [fetchCollectionBids, listGrantees, granteeNamesByDid, evaluatedBids, collectionId, deedDid]);\n\n useEffect(() => {\n let mounted = true;\n const dids = Array.from(new Set(listGrantees.map(getGranteeDid).filter(Boolean)));\n const missing = dids.filter((did) => !granteeProfilesByDid[did]);\n if (missing.length === 0)\n return () => {\n mounted = false;\n };\n\n const loadProfiles = async () => {\n const results = await Promise.all(\n missing.map(async (did) => {\n try {\n const profile = await handlersRef.current.getMatrixInfoPerDid(did);\n return [did, profile] as const;\n } catch {\n return [did, null] as const;\n }\n })\n );\n\n if (!mounted) return;\n setGranteeProfilesByDid((prev) => {\n const next = { ...prev };\n results.forEach(([did, profile]) => {\n if (profile) {\n next[did] = profile;\n }\n });\n return next;\n });\n };\n\n void loadProfiles();\n return () => {\n mounted = false;\n };\n }, [listGrantees, granteeProfilesByDid]);\n\n // -------------------------------------------------------------------------\n // Per-operation validation → drives unlockSigning + inline errors. `list` is\n // not a slider op, so the slider validates only add / revoke.\n // -------------------------------------------------------------------------\n const validation = useMemo((): { ok: boolean; error?: string } => {\n // Bids have their own approve/reject controls — the slide-to-sign slider is\n // not used here, so it stays locked.\n if (section === 'bids') return { ok: false };\n if (!collectionId) return { ok: false, error: 'No collection configured. Set one in template mode.' };\n if (!adminAddress) return { ok: false, error: adminError || 'Resolving entity admin account…' };\n\n if (activeOp === 'revoke') {\n if (!revokeTarget?.address) return { ok: false, error: 'Pick a grantee to revoke from the list.' };\n return { ok: true };\n }\n\n // add — the grantee requirement differs per mode; the quota rule is shared.\n if (addMode === 'list') {\n if (bulkAddresses.length === 0) {\n return { ok: false, error: parsedAccounts.rows.length > 0 ? 'No valid ixo1… accounts in the pasted list.' : 'Paste a list of accounts to grant.' };\n }\n } else {\n const address = addAddress.trim();\n if (!address) return { ok: false, error: 'Enter a grantee address.' };\n if (granteeKind === 'group-account' && !canExerciseGrant) {\n return { ok: false, error: 'This group cannot hold the authorization. Grant its members individually instead.' };\n }\n if (granteeKind === 'group-members') {\n if (members.length === 0) return { ok: false, error: 'No group members resolved yet.' };\n }\n }\n\n // A POD proposal executes as ONE transaction and cannot be split into\n // batches the way a directly-signed grant can, so an oversized grantee set\n // could never execute — refuse to arm it rather than send it to a vote.\n if (actAs.actAsGroup && pendingGranteeCount > COLLECTION_USERS_MAX_GRANTS_PER_TX) {\n return {\n ok: false,\n error: `Acting as a POD allows at most ${COLLECTION_USERS_MAX_GRANTS_PER_TX} accounts per proposal; this grants ${pendingGranteeCount}. Remove ${pendingGranteeCount - COLLECTION_USERS_MAX_GRANTS_PER_TX}, or grant without acting as a POD.`,\n };\n }\n // The chain rejects a grant with agent quota 0 (\"agent quota must be bigger\n // than 0\"), so require a positive integer before arming the slider.\n const quotaNum = Number(addQuota);\n if (!Number.isFinite(quotaNum) || quotaNum < MIN_AGENT_QUOTA) {\n return { ok: false, error: `Agent quota must be at least ${MIN_AGENT_QUOTA}.` };\n }\n return { ok: true };\n }, [\n section,\n collectionId,\n adminAddress,\n adminError,\n activeOp,\n revokeTarget,\n addMode,\n bulkAddresses.length,\n parsedAccounts.rows.length,\n actAs.actAsGroup,\n pendingGranteeCount,\n addAddress,\n granteeKind,\n canExerciseGrant,\n members.length,\n addQuota,\n ]);\n\n // -------------------------------------------------------------------------\n // Build the runtime inputs for the currently-active write op.\n // -------------------------------------------------------------------------\n const buildRuntimeInputs = useCallback((): CollectionUsersRuntimeInputs => {\n // The Bids section manages applications through its own approve/reject UI\n // (with a bid-specific diff), not the slide-to-sign add/revoke flow. Register\n // a read-only `list` op so the generic diff resolves to empty and its slider\n // is hidden — otherwise it would surface the default add role (\"Submit\") and\n // contradict the evaluator/contributor role of the bid being viewed.\n if (section === 'bids') {\n return { operation: 'list', collectionId, adminAddress };\n }\n if (activeOp === 'revoke') {\n return {\n operation: 'revoke',\n collectionId,\n adminAddress,\n deedDid: deedDid || undefined,\n granteeAddress: revokeTarget?.address || '',\n role: revokeTarget?.role || 'submit',\n };\n }\n // add — role / quota / limits are identical for every grantee; only the\n // grantee set differs between a pasted list and a single account.\n const maxAmounts = buildMaxAmounts(addMaxAmounts);\n const isBulk = addMode === 'list';\n return {\n operation: 'add',\n collectionId,\n adminAddress,\n deedDid: deedDid || undefined,\n granteeAddress: isBulk ? undefined : addAddress.trim(),\n role: addRole,\n granteeKind: isBulk ? 'address-list' : granteeKind,\n agentQuota: toQuotaString(addQuota),\n maxAmount: addRole === 'evaluate' && maxAmounts.length > 0 ? maxAmounts : undefined,\n members: !isBulk && granteeKind === 'group-members' ? members : undefined,\n granteeAddresses: isBulk ? bulkAddresses : undefined,\n };\n }, [section, activeOp, collectionId, adminAddress, deedDid, revokeTarget, addMode, bulkAddresses, addAddress, addRole, granteeKind, addQuota, addMaxAmounts, members]);\n\n // Push runtime inputs upward so the diff resolver (and executor merge) see the\n // current per-op selection.\n useEffect(() => {\n if (!registerRuntimeInputs) return;\n registerRuntimeInputs(buildRuntimeInputs());\n }, [registerRuntimeInputs, buildRuntimeInputs]);\n\n // Unlock the slider only when the active write op is valid.\n useEffect(() => {\n unlockSigning?.(!isDisabled && !isRunning && validation.ok && actAsGroupReady(actAs));\n }, [unlockSigning, isDisabled, isRunning, validation.ok]);\n\n // -------------------------------------------------------------------------\n // Signing handler — triggers the active write op (add | revoke).\n // -------------------------------------------------------------------------\n const execute = useCallback(async () => {\n if (isDisabled || isRunning) return;\n if (!executeAction) {\n updateRuntime({ state: 'failed', error: { message: 'Shared action executor is unavailable', at: Date.now() } });\n return;\n }\n if (!validation.ok) {\n console.warn(`${LOG} refusing to execute — invalid inputs`, { activeOp, error: validation.error });\n return;\n }\n\n const runtimeInputs = buildRuntimeInputs();\n console.log(`${LOG} execute →`, {\n operation: runtimeInputs.operation,\n collectionId,\n granteeAddress: runtimeInputs.granteeAddress,\n granteeKind: runtimeInputs.granteeKind,\n granteeCount: runtimeInputs.granteeAddresses?.length,\n listener: isListener,\n });\n try {\n // This block is a persistent management surface even when event-bound, so\n // we deliberately do NOT pass `pendingInvocationId`: the invocation must\n // survive so the block stays bound to its collection (across reloads and\n // repeated ops), exactly like a template-configured manage-mode block.\n const outcome = await executeAction({ runtimeInputs: { ...runtimeInputs, ...actAsGroupRuntimeInputs(actAs) } as CollectionUsersRuntimeInputs });\n if (!outcome.success) {\n throw new Error(outcome.error || `Collection ${runtimeInputs.operation} failed`);\n }\n const payload = outcome.output as { transactionHash?: string } | undefined;\n // Proof guard: a write op must read back a transactionHash.\n if (!String(payload?.transactionHash || '').trim()) {\n throw new Error('Action returned success without a transaction hash. Check the [collection.users] handler logs.');\n }\n console.log(`${LOG} execute success`, { operation: runtimeInputs.operation, transactionHash: payload!.transactionHash });\n\n // Reset the per-op form and re-list so the grantee table reflects the\n // change. Same in manual and listener mode — the binding persists either way.\n if (runtimeInputs.operation === 'add') {\n setAddAddress('');\n setBulkText('');\n setAddQuota(String(runtimeInputs.role === 'evaluate' ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));\n setAddMaxAmounts(EMPTY_MAX_AMOUNTS);\n setGranteeKind('user');\n setMembers([]);\n setClassification(null);\n } else {\n setRevokeTarget(null);\n setActiveOp('add');\n }\n listOnLoadRef.current = false;\n // Defer the re-list so the write's runtime write settles first.\n setTimeout(() => {\n runList();\n }, 0);\n } catch (err) {\n const message = err instanceof Error ? err.message : `Failed to ${runtimeInputs.operation} grantee`;\n console.error(`${LOG} execute failed`, { operation: runtimeInputs.operation, message });\n updateRuntime({ state: 'failed', error: { message, at: Date.now() } });\n }\n }, [isDisabled, isRunning, executeAction, validation.ok, validation.error, activeOp, buildRuntimeInputs, collectionId, updateRuntime, runList, isListener]);\n\n // Re-arm the signing handler whenever execute identity changes.\n useEffect(() => {\n if (!provideSigningHandler) return;\n provideSigningHandler(execute);\n }, [provideSigningHandler, execute]);\n\n // -------------------------------------------------------------------------\n // Stale / failure recovery.\n // -------------------------------------------------------------------------\n const handleReset = useCallback(() => {\n console.log(`${LOG} reset → idle`);\n listOnLoadRef.current = false;\n updateRuntime({ state: 'idle', error: undefined, output: {} });\n }, [updateRuntime]);\n\n const handleForceRun = useCallback(() => {\n console.log(`${LOG} force run`);\n updateRuntime({ state: 'idle', error: undefined, output: {} });\n setTimeout(() => {\n execute();\n }, 0);\n }, [updateRuntime, execute]);\n\n // -------------------------------------------------------------------------\n // Revoke a grantee from a list row — arm the slider for that grantee+role.\n // -------------------------------------------------------------------------\n const handleSelectRevoke = useCallback((grantee: CollectionGrantee) => {\n setActiveOp('revoke');\n setRevokeTarget({ address: grantee.address, role: grantee.role });\n }, []);\n\n const cancelRevoke = useCallback(() => {\n setRevokeTarget(null);\n setActiveOp('add');\n }, []);\n\n // -------------------------------------------------------------------------\n // Render\n // -------------------------------------------------------------------------\n const title = (block?.props?.title as string) || 'Collection Users';\n const description = (block?.props?.description as string) || '';\n const configMissing = !collectionId;\n\n return (\n <Stack gap=\"md\">\n <GroupProposalStatus editor={editor} block={block} runtime={runtime} />\n {runtime?.state !== 'awaiting_readback' && <ActAsGroupSection value={actAs} onChange={setActAs} isDisabled={isDisabled} actionLabel=\"change this collection's users\" />}\n <Stack gap={2}>\n <Text fw={600}>{title}</Text>\n {description && (\n <Text size=\"sm\" c=\"dimmed\">\n {description}\n </Text>\n )}\n </Stack>\n\n {configMissing && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n {t('actionTypes.collectionUsers.flow.errors.configRequired', {\n defaultValue: 'Configure the {{did}} and {{claimCollection}} in template mode before running this action.',\n did: 'DID',\n claimCollection: 'claim collection',\n })}\n </Alert>\n )}\n\n {isStale && (\n <Alert icon={<IconAlertCircle size={16} />} color=\"yellow\" title=\"Inconsistent State\">\n <Stack gap=\"xs\">\n <Text size=\"sm\">Block was marked completed but no result was recorded. This is stale state from a previous run — reset and re-run.</Text>\n <Group>\n <Button variant=\"outline\" size=\"xs\" onClick={handleReset}>\n Reset\n </Button>\n <Button variant=\"filled\" size=\"xs\" onClick={handleForceRun} disabled={!validation.ok}>\n Force Run Now\n </Button>\n </Group>\n </Stack>\n </Alert>\n )}\n\n {isFailed && (\n <Alert icon={<IconAlertCircle size={16} />} color=\"red\" title=\"Action Failed\" styles={actionAlertStyles}>\n <Stack gap=\"xs\">\n {errorMessage && <Text size=\"sm\">{errorMessage}</Text>}\n <Group>\n <Button variant=\"outline\" size=\"xs\" onClick={handleReset}>\n Reset\n </Button>\n {!!collectionId && !!adminAddress && (\n <Button variant=\"filled\" size=\"xs\" leftSection={<IconRefresh size={14} />} onClick={handleManualRefreshList}>\n Refresh List\n </Button>\n )}\n </Group>\n </Stack>\n </Alert>\n )}\n\n {isCompletedWithProof && hasTxProof && (lastOp === 'add' || lastOp === 'revoke') && (\n <Alert icon={<IconCheck size={16} />} color=\"green\" styles={actionAlertStyles}>\n {lastOp === 'add' ? grantBroadcastSummary(output) : 'Revoke broadcast'} — {broadcastTxCount(output) > 1 ? 'last tx' : 'tx'}{' '}\n {truncateAddress(String(output?.transactionHash || ''))}.\n </Alert>\n )}\n\n {!configMissing && (\n <SegmentedControl\n fullWidth\n value={section}\n onChange={(value) => setSection(value as Section)}\n disabled={isDisabled || isRunning}\n data={[\n { label: 'Users', value: 'list' },\n { label: 'Add', value: 'add' },\n { label: 'Bids', value: 'bids' },\n ]}\n />\n )}\n\n {/* ── List section ── */}\n {!configMissing && section === 'list' && (\n <Stack gap=\"sm\">\n <Group justify=\"space-between\" align=\"center\">\n <Text size=\"sm\" fw={600}>\n Grantees\n </Text>\n <Group gap={4}>\n <DownloadCsvButton onDownload={handleDownloadGranteesCsv} disabled={isRunning} label=\"Download members CSV (grants + bids)\" onError={setMembersExportError} />\n <DownloadZipButton onDownload={handleDownloadGranteesZip} disabled={isRunning} label=\"Download members + bid media (ZIP)\" onError={setMembersExportError} />\n <ActionIcon variant=\"subtle\" color=\"gray\" size=\"sm\" onClick={handleManualRefreshList} disabled={isRunning || !adminAddress}>\n <IconRefresh size={16} />\n </ActionIcon>\n </Group>\n </Group>\n\n {membersExportError && (\n <Alert color=\"yellow\" styles={actionAlertStyles} onClose={() => setMembersExportError(null)}>\n {membersExportError}\n </Alert>\n )}\n\n {isRunning && lastOp !== 'add' && lastOp !== 'revoke' && (\n <Group gap=\"xs\" justify=\"center\" py=\"sm\">\n <Loader size=\"xs\" />\n <Text size=\"xs\" c=\"dimmed\">\n Loading grantees…\n </Text>\n </Group>\n )}\n\n {!isRunning && listGrantees.length === 0 && (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n No grantees hold a constraint for this collection yet.\n </Text>\n )}\n\n {listGrantees.map((grantee) => {\n const isTarget = revokeTarget?.address === grantee.address && revokeTarget?.role === grantee.role;\n const granteeDid = getGranteeDid(grantee);\n const profile = granteeProfilesByDid[granteeDid];\n const displayName = profile?.displayname || truncateAddress(grantee.address);\n return (\n <Box\n key={`${grantee.address}-${grantee.role}`}\n style={{\n border: `1px solid ${isTarget ? 'var(--mantine-color-red-5)' : 'var(--mantine-color-neutralColor-6)'}`,\n borderRadius: 8,\n padding: 12,\n background: 'var(--mantine-color-neutralColor-5)',\n }}\n >\n <Group justify=\"space-between\" align=\"center\" wrap=\"nowrap\">\n <Stack gap={2} style={{ minWidth: 0 }}>\n <Text size=\"sm\" fw={600} truncate>\n {displayName}\n </Text>\n {profile?.displayname && (\n <Text size=\"xs\" c=\"dimmed\" truncate>\n {truncateAddress(grantee.address)}\n </Text>\n )}\n <Group gap=\"xs\">\n <Badge size=\"xs\" variant=\"light\" color={grantee.role === 'submit' ? 'blue' : 'green'}>\n {roleLabel(grantee.role)}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n Quota: {formatQuota(grantee.agentQuota)}\n </Text>\n </Group>\n </Stack>\n {isTarget ? (\n <Button size=\"compact-xs\" variant=\"subtle\" color=\"gray\" onClick={cancelRevoke} disabled={isDisabled || isRunning}>\n Cancel\n </Button>\n ) : (\n <Button\n size=\"compact-xs\"\n variant=\"light\"\n color=\"red\"\n leftSection={<IconTrash size={12} />}\n onClick={() => handleSelectRevoke(grantee)}\n disabled={isDisabled || isRunning}\n >\n Revoke\n </Button>\n )}\n </Group>\n </Box>\n );\n })}\n\n {revokeTarget && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n Slide to sign to revoke {roleLabel(revokeTarget.role)} from {truncateAddress(revokeTarget.address)}.\n </Alert>\n )}\n </Stack>\n )}\n\n {/* ── Add section ── */}\n {!configMissing && section === 'add' && (\n <Stack gap=\"sm\">\n {revokeTarget && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n A revoke is currently armed. Switch to the Users tab to sign it, or change the grantee below to arm an add instead.\n </Alert>\n )}\n\n <SegmentedControl\n fullWidth\n size=\"xs\"\n value={addMode}\n onChange={(value) => handleAddModeChange(value as AddMode)}\n disabled={isDisabled || isRunning}\n data={[\n { label: 'One account', value: 'single' },\n { label: 'Paste a list', value: 'list' },\n ]}\n />\n\n {addMode === 'list' && (\n <BulkAccountsInput\n text={bulkText}\n onChange={setBulkText}\n parsed={parsedAccounts}\n isDisabled={isDisabled || isRunning}\n canBatchGrants={canBatchGrants}\n actingAsGroup={actAs.actAsGroup}\n />\n )}\n\n {addMode === 'single' && (\n <Stack gap={4}>\n <Text size=\"sm\" fw={500}>\n Grantee address\n </Text>\n <RecipientInput\n value={addAddress}\n onChange={(address) => {\n setActiveOp('add');\n setRevokeTarget(null);\n setAddAddress(address);\n }}\n onBulkPaste={handleBulkPaste}\n isDisabled={isDisabled || isRunning}\n placeholder=\"Search by name / @user:…, or paste an ixo1… address\"\n />\n </Stack>\n )}\n\n {addMode === 'single' &&\n (canClassify ? (\n <Button size=\"xs\" variant=\"light\" onClick={runClassify} disabled={!addAddress.trim() || classifying || isRunning} loading={classifying}>\n Check address\n </Button>\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n Address classification is unavailable in this host — the grantee will be added as a plain account.\n </Text>\n ))}\n\n {addMode === 'single' && classifyError && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n {classifyError}\n </Alert>\n )}\n\n {/* Group-detect prompt — shown only when classify resolved a DAO group. */}\n {addMode === 'single' && isGroup && (\n <Box style={{ border: '1px solid var(--mantine-color-neutralColor-6)', borderRadius: 8, padding: 12 }}>\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Add the group, or all the members of the POD?\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n Detected a DAO DAO group ({classification?.daodao?.type}). Choose how to grant access.\n </Text>\n <Radio.Group value={granteeKind} onChange={(value) => setGranteeKind(value as CollectionGranteeKind)}>\n <Stack gap=\"xs\" mt=\"xs\">\n <Radio\n value=\"group-account\"\n disabled={!canExerciseGrant || isDisabled || isRunning}\n label={\n <Stack gap={0}>\n <Text size=\"sm\">Add the group</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {canExerciseGrant ? 'Grant the group account directly (it can exercise the grant).' : 'Unavailable — this group cannot exercise the grant.'}\n </Text>\n </Stack>\n }\n />\n <Radio\n value=\"group-members\"\n disabled={isDisabled || isRunning}\n label={\n <Stack gap={0}>\n <Text size=\"sm\">Add all members of the POD</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {canEnumerate\n ? `Fan out: grant each member individually${members.length ? ` (${members.length} resolved)` : ''}.`\n : 'Member enumeration is unavailable in this host.'}\n </Text>\n </Stack>\n }\n />\n </Stack>\n </Radio.Group>\n {/* The fan-out now batches, so state what signing it will cost. */}\n {granteeKind === 'group-members' && !actAs.actAsGroup && memberSigningPlan && (\n <Alert color={memberSigningPlan.color} styles={actionAlertStyles}>\n {memberSigningPlan.message}\n </Alert>\n )}\n </Stack>\n </Box>\n )}\n\n {addMode === 'list' && bulkAddresses.length > 0 && (\n <Text size=\"xs\" c=\"dimmed\">\n The role, quota and limits below apply to all {bulkAddresses.length} accounts.\n </Text>\n )}\n\n <BaseSelect\n label=\"Role\"\n value={addRole}\n onChange={(value) => setAddRole((value as CollectionUserRole) || 'submit')}\n allowDeselect={false}\n data={[\n { value: 'submit', label: 'Submit (Contributor)' },\n { value: 'evaluate', label: 'Evaluate (Evaluator)' },\n ]}\n disabled={isDisabled || isRunning}\n />\n\n <BaseNumberInput\n label=\"Agent quota (max claims, at least 1)\"\n min={MIN_AGENT_QUOTA}\n value={addQuota === '' ? '' : Number(addQuota)}\n onChange={(value) => setAddQuota(value === '' || value == null ? '' : String(value))}\n disabled={isDisabled || isRunning}\n />\n\n {addRole === 'evaluate' && <MaxAmountsInput value={addMaxAmounts} onChange={setAddMaxAmounts} disabled={isDisabled || isRunning} />}\n\n {!validation.ok && validation.error && activeOp === 'add' && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n {validation.error}\n </Alert>\n )}\n </Stack>\n )}\n\n {/* ── Bid inbox section ── */}\n {!configMissing && section === 'bids' && (\n <BidInboxSection\n deedDid={deedDid}\n collectionId={collectionId}\n adminAddress={adminAddress}\n isDisabled={isDisabled}\n handlersRef={handlersRef}\n grantees={listGrantees}\n actAs={actAs}\n evaluatedByBidId={evaluatedBids}\n onBidEvaluated={handleBidEvaluated}\n onGrantsChanged={handleManualRefreshList}\n />\n )}\n\n {isDisabled && (\n <Text size=\"xs\" c=\"dimmed\">\n This block is currently disabled.\n </Text>\n )}\n </Stack>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Bid inbox — reactive approve/reject management section carried over from the\n// evaluateBid block. Uses the existing reactive `bid` handlers (queryBids +\n// approveServiceAgentApplication / approveEvaluatorApplication / rejectBid).\n// Kept as an informational/management subsection: it manages incoming bids that\n// precede a grant, complementing the authz-grant lifecycle the main block owns.\n// ---------------------------------------------------------------------------\ninterface BidInboxSectionProps {\n deedDid: string;\n collectionId: string;\n adminAddress: string;\n isDisabled: boolean;\n handlersRef: React.MutableRefObject<ReturnType<typeof useBlocknoteHandlers>>;\n grantees: CollectionGrantee[];\n /** Act-as selection from the block header — a bid decision must honour it. */\n actAs: ActAsGroupState;\n /** Lives in the parent so the record survives section (tab) switches. */\n evaluatedByBidId: Record<string, 'approved' | 'rejected'>;\n onBidEvaluated: (bidId: string, outcome: 'approved' | 'rejected') => void;\n /** Re-runs the `list` op so `runtime.output.grantees` reflects the new grant. */\n onGrantsChanged: () => void;\n}\n\nconst BidInboxSection: React.FC<BidInboxSectionProps> = ({\n deedDid,\n collectionId,\n adminAddress,\n isDisabled,\n handlersRef,\n grantees,\n actAs,\n evaluatedByBidId,\n onBidEvaluated,\n onGrantsChanged,\n}) => {\n const [bids, setBids] = useState<Bid[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [selectedBidId, setSelectedBidId] = useState<string>('');\n const [decision, setDecision] = useState<'approve' | 'reject' | ''>('');\n const [rejectReason, setRejectReason] = useState('');\n // Agent quota granted on approval. The chain requires it to be > 0, so it\n // defaults to the minimum rather than 0. String at the boundary.\n const [approveQuota, setApproveQuota] = useState<string>(String(DEFAULT_CONTRIBUTOR_QUOTA));\n const [approveMaxAmounts, setApproveMaxAmounts] = useState<MaxAmountValues>(EMPTY_MAX_AMOUNTS);\n const [submitting, setSubmitting] = useState(false);\n const [profilesByDid, setProfilesByDid] = useState<Record<string, IUserMatrixProfile>>({});\n // IXO-4235 — the last decision, surfaced as a confirmation after the signing\n // modal closes. The per-bid evaluated record lives in the parent (props).\n // `proposed` is the POD outcome: nothing is granted yet, a vote decides it.\n const [lastDecision, setLastDecision] = useState<{ kind: 'approved' | 'rejected' | 'proposed'; name: string; roleLabel: string; proposalId?: string } | null>(null);\n\n const selectedBid = useMemo(() => bids.find((b) => b.id === selectedBidId) || null, [bids, selectedBidId]);\n const selectedBidIsEvaluator = useMemo(() => {\n const role = String(selectedBid?.role || '').toLowerCase();\n return role === 'evaluation_agent' || role === 'ea';\n }, [selectedBid]);\n\n // Evaluated this session → parent record; otherwise an existing grant for the\n // bidder's address in the bid's role means it was approved in an earlier\n // session. Role-aware: a contributor grant must not mark an evaluator bid.\n // Delegates to the shared resolver so the badge here and the exported CSV\n // cannot disagree; `null` keeps the caller's \"no decision yet\" distinction.\n const bidStatusContext = useMemo(() => ({ grantees, evaluatedByBidId }), [grantees, evaluatedByBidId]);\n const bidEvaluatedStatus = useCallback(\n (bid: Bid): 'approved' | 'rejected' | null => {\n const info = getBidStatusInfo(bid, bidStatusContext);\n return info.key === 'pending' ? null : info.key;\n },\n [bidStatusContext]\n );\n\n // The service returns insertion order, in which bidders granted access\n // outside this flow keep an undecided bid at the front of page one forever.\n // Splitting on decision state keeps the rows that need one at the top,\n // however far paging got.\n const { open: openBids, decided: decidedBids } = useMemo(() => partitionBidsByDecision(bids, bidStatusContext), [bids, bidStatusContext]);\n\n const bidRowOptions = useMemo(\n () => ({\n evaluatedByBidId,\n namesByDid: Object.fromEntries(Object.entries(profilesByDid).map(([did, profile]) => [did, profile?.displayname || ''])),\n }),\n [evaluatedByBidId, profilesByDid]\n );\n\n // IXO-4066 — export submitted bids with their status and each account's\n // current grant state.\n const downloadBidsCsv = useCallback(\n (subset: Bid[], filename: string) => {\n downloadArrayAsCsv(buildBidRows(subset, grantees, bidRowOptions), { filename });\n },\n [grantees, bidRowOptions]\n );\n\n const downloadBidsZip = useCallback(\n async (subset: Bid[], names: { csv: string; manifest: string; zip: string }) => {\n const handlers = handlersRef.current;\n const fetchMedia = handlers.fetchClaimMedia ? (url: string) => handlers.fetchClaimMedia!(url, { entityDid: deedDid }) : undefined;\n\n const { blob, mediaTotal, mediaFailed } = await buildExportBundle({\n records: subset.map((bid) => ({\n recordId: bid.id,\n answers: bidAnswers(bid),\n manifest: {\n bidId: bid.id,\n did: bid.did,\n address: bid.address,\n role: bid.role,\n created: bid.created,\n status: getBidStatusInfo(bid, bidStatusContext).key,\n },\n })),\n fetchMedia,\n renderCsv: (answersByBidId) => rowsToCsv(buildBidRows(subset, grantees, { ...bidRowOptions, answersByBidId })),\n csvName: names.csv,\n manifestName: names.manifest,\n });\n\n downloadBlob(blob, names.zip);\n setError(mediaFailed > 0 ? `${mediaFailed} of ${mediaTotal} media files could not be downloaded — see downloadStatus in ${names.manifest}.` : null);\n },\n [grantees, bidRowOptions, bidStatusContext, deedDid, handlersRef]\n );\n\n const handleDownloadBidsCsv = useCallback(() => downloadBidsCsv(bids, exportFileNames.bids(collectionId).csv), [downloadBidsCsv, bids, collectionId]);\n const handleDownloadBidsZip = useCallback(() => downloadBidsZip(bids, exportFileNames.bids(collectionId)), [downloadBidsZip, bids, collectionId]);\n\n const refreshBids = useCallback(async () => {\n if (!deedDid || !collectionId) return;\n setLoading(true);\n setError(null);\n try {\n // Pages through the bot's 10-bid response rather than showing only the first page.\n const result = await fetchAllBids(handlersRef.current.queryBids, { collectionId, entityDid: deedDid });\n // Keep whatever the walk collected: a failed page mid-list is worth\n // reporting, not worth discarding the pages before it.\n setBids(dedupeBids(result.bids));\n setError(describeBidsPagingStop(result));\n } catch {\n setBids([]);\n setError(null);\n } finally {\n setLoading(false);\n }\n }, [deedDid, collectionId, handlersRef]);\n\n useEffect(() => {\n setSelectedBidId('');\n setDecision('');\n setRejectReason('');\n setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));\n setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);\n if (deedDid && collectionId) refreshBids();\n }, [deedDid, collectionId, refreshBids]);\n\n useEffect(() => {\n setDecision('');\n setRejectReason('');\n setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);\n setApproveQuota(String(selectedBidIsEvaluator ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));\n }, [selectedBidId, selectedBidIsEvaluator]);\n\n // Resolve display profiles for bidder DIDs.\n useEffect(() => {\n let mounted = true;\n const dids = Array.from(new Set(bids.map((b) => b.did).filter(Boolean)));\n const missing = dids.filter((did) => !profilesByDid[did]);\n if (missing.length === 0) return;\n (async () => {\n const results = await Promise.all(\n missing.map(async (did) => {\n try {\n const profile = await handlersRef.current.getMatrixInfoPerDid(did);\n return [did, profile] as const;\n } catch {\n return [did, null] as const;\n }\n })\n );\n if (!mounted) return;\n setProfilesByDid((prev) => {\n const next = { ...prev };\n results.forEach(([did, profile]) => {\n if (profile) next[did] = profile;\n });\n return next;\n });\n })();\n return () => {\n mounted = false;\n };\n }, [bids, profilesByDid, handlersRef]);\n\n const submitDecision = useCallback(async () => {\n if (!selectedBid || !decision) return;\n const role = String(selectedBid.role || '').toLowerCase();\n const isEvaluator = role === 'evaluation_agent' || role === 'ea';\n setSubmitting(true);\n setError(null);\n try {\n const h = handlersRef.current;\n const granteeName = profilesByDid[selectedBid.did]?.displayname || selectedBid.did || selectedBid.address;\n const roleLabel = getBidRoleLabel(selectedBid.role);\n\n // ── Acting as a POD ────────────────────────────────────────────────\n // The decision is not the signer's to make: prepare the same grant with\n // the POD core as the actor and put it to a vote. Nothing is granted\n // until the proposal passes, so the bid stays pending here — mirrors\n // the evaluateBid block's group branch (actions/evaluateBid.ts).\n if (actAs.actAsGroup) {\n if (decision !== 'approve') {\n throw new Error('Rejecting a bid on a POD’s behalf is not supported from this panel yet — switch \"Acting as\" to Myself, or use the Evaluate Bid block.');\n }\n if (!adminAddress) throw new Error('Entity admin account is not resolved yet.');\n if (typeof h.prepareGroupAgentApplicationApproval !== 'function' || typeof h.createGroupExecutionProposal !== 'function') {\n throw new Error('Acting as a POD is not available: the host does not implement the POD proposal handlers.');\n }\n const coreAddress = actAs.groupCoreAddress.trim();\n const podMaxAmounts = isEvaluator ? buildMaxAmounts(approveMaxAmounts) : [];\n const prepared = await h.prepareGroupAgentApplicationApproval({\n groupAddress: coreAddress,\n deedDid,\n collectionId,\n adminAddress,\n role: isEvaluator ? 'evaluation_agent' : 'service_agent',\n applicantAddress: selectedBid.address,\n agentQuota: Number(toQuotaString(approveQuota)),\n maxAmounts: podMaxAmounts.length > 0 ? podMaxAmounts : undefined,\n });\n const { proposalId } = await h.createGroupExecutionProposal({\n coreAddress,\n title: actAs.proposalTitle.trim(),\n description: actAs.proposalDescription.trim(),\n msgs: prepared.msgs || [],\n });\n if (!String(proposalId ?? '').trim()) throw new Error('POD proposal creation returned no proposal id. Check the handler logs.');\n setLastDecision({ kind: 'proposed', name: granteeName, roleLabel, proposalId: String(proposalId) });\n setSelectedBidId('');\n setDecision('');\n setRejectReason('');\n setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));\n setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);\n await refreshBids();\n return;\n }\n\n if (decision === 'approve') {\n if (!adminAddress) throw new Error('Entity admin account is not resolved yet.');\n // Quota granted on approval. The chain rejects 0 (\"agent quota must be\n // bigger than 0\"), so clamp up to the minimum.\n const quotaNum = Number(toQuotaString(approveQuota));\n if (isEvaluator) {\n const maxAmounts = buildMaxAmounts(approveMaxAmounts);\n await h.approveEvaluatorApplication({\n adminAddress,\n collectionId,\n deedDid,\n evaluatorAddress: selectedBid.address,\n agentQuota: quotaNum,\n maxAmounts: maxAmounts.length > 0 ? maxAmounts : undefined,\n });\n } else {\n // Grant the service-agent role to the applicant (the bidder), not the\n // approver. `currentUserAddress` is the address being granted — see the\n // evaluator branch above and evaluateBid.ts, which both use the bid's\n // own address.\n await h.approveServiceAgentApplication({\n adminAddress,\n collectionId,\n agentQuota: quotaNum,\n deedDid,\n currentUserAddress: selectedBid.address,\n });\n }\n } else {\n await h.rejectBid({ bidId: selectedBid.id, collectionId, did: selectedBid.did, reason: rejectReason.trim() || 'Rejected', entityDid: deedDid });\n }\n onBidEvaluated(selectedBid.id, decision === 'approve' ? 'approved' : 'rejected');\n // A new grant exists on-chain — refresh the grantees snapshot so the\n // Approved badge survives remounts instead of falling back to Pending.\n if (decision === 'approve') onGrantsChanged();\n setLastDecision({ kind: decision === 'approve' ? 'approved' : 'rejected', name: granteeName, roleLabel });\n setSelectedBidId('');\n setDecision('');\n setRejectReason('');\n setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));\n setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);\n await refreshBids();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to evaluate bid');\n } finally {\n setSubmitting(false);\n }\n }, [\n selectedBid,\n decision,\n adminAddress,\n collectionId,\n deedDid,\n rejectReason,\n approveQuota,\n approveMaxAmounts,\n handlersRef,\n refreshBids,\n profilesByDid,\n onBidEvaluated,\n onGrantsChanged,\n actAs,\n ]);\n\n if (selectedBid) {\n const profile = profilesByDid[selectedBid.did];\n const displayName = profile?.displayname || selectedBid.did || selectedBid.address;\n const role = String(selectedBid.role || '').toLowerCase();\n const isEvaluator = role === 'evaluation_agent' || role === 'ea';\n const maxAmounts = isEvaluator ? buildMaxAmounts(approveMaxAmounts) : [];\n const evaluatedStatus = bidEvaluatedStatus(selectedBid);\n\n // Submission data the applicant bid with. Surfaced read-only so the\n // approver can review what was submitted before deciding (parity with the\n // standalone evaluateBid block's \"Inputs\" section).\n let bidData: unknown = null;\n try {\n bidData = typeof selectedBid.data === 'string' ? JSON.parse(selectedBid.data) : selectedBid.data;\n } catch {\n // ignore parse errors — fall through to \"no input data\"\n }\n\n // Approval preview — uses the bid's ACTUAL role (contributor/evaluator), the\n // grantee's matrix display name, and the quota about to be granted. Replaces\n // the generic add/revoke diff (which is suppressed in the Bids section).\n const approvalDiffs: DiffResult[] = [\n { key: 'role', label: 'Role', before: null, after: getBidRoleLabel(selectedBid.role), changeType: 'add' },\n { key: 'grantee', label: 'Grantee', before: null, after: displayName, changeType: 'add' },\n ...(collectionId ? [{ key: 'collectionId', label: 'Collection', before: null, after: collectionId, changeType: 'add' as const }] : []),\n {\n key: 'agentQuota',\n label: 'Agent Quota',\n before: null,\n after: toQuotaString(approveQuota),\n changeType: 'add',\n unit: 'claims',\n },\n ...(isEvaluator\n ? [\n {\n key: 'maxAmount',\n label: 'Max Amounts',\n before: null,\n after: maxAmounts.length > 0 ? maxAmounts.map(formatCoin).join(', ') : 'None',\n changeType: maxAmounts.length > 0 ? ('add' as const) : ('unchanged' as const),\n },\n ]\n : []),\n ];\n\n return (\n <Stack gap=\"md\">\n <Group gap=\"xs\" align=\"center\">\n <ActionIcon variant=\"subtle\" color=\"gray\" size=\"sm\" onClick={() => setSelectedBidId('')}>\n <IconArrowLeft size={16} />\n </ActionIcon>\n <Text fw={500} size=\"sm\" truncate style={{ flex: 1, minWidth: 0 }}>\n Bid #{selectedBid.id}\n </Text>\n <DownloadCsvButton onDownload={() => downloadBidsCsv([selectedBid], exportFileNames.bid(selectedBid.id).csv)} label=\"Download bid CSV\" onError={setError} />\n <DownloadZipButton onDownload={() => downloadBidsZip([selectedBid], exportFileNames.bid(selectedBid.id))} label=\"Download bid + media (ZIP)\" onError={setError} />\n </Group>\n\n <Stack gap={4}>\n <Text size=\"sm\" fw={600} truncate>\n {displayName}\n </Text>\n <Group gap=\"xs\">\n <Badge size=\"xs\" variant=\"light\" color={getRoleColor(selectedBid.role)}>\n {getBidRoleLabel(selectedBid.role)}\n </Badge>\n <Text size=\"xs\" c=\"dimmed\">\n {truncateAddress(selectedBid.address)}\n </Text>\n </Group>\n </Stack>\n\n <CollapsibleSection title=\"Inputs\">\n {bidData && typeof bidData === 'object' && Object.keys(bidData).length > 0 ? (\n <ReadableKeyValues data={bidData as Record<string, unknown>} />\n ) : (\n <Text size=\"xs\" c=\"dimmed\">\n No input data available.\n </Text>\n )}\n </CollapsibleSection>\n\n {evaluatedStatus ? (\n <MantineAlert\n color={evaluatedStatus === 'approved' ? 'green' : 'red'}\n icon={evaluatedStatus === 'approved' ? <IconCheck size={16} /> : <IconAlertCircle size={16} />}\n title={evaluatedStatus === 'approved' ? 'Bid approved' : 'Bid rejected'}\n styles={actionAlertStyles}\n >\n {evaluatedStatus === 'approved' ? `${getBidRoleLabel(selectedBid.role)} access is already granted for this collection.` : 'This application was declined.'}\n </MantineAlert>\n ) : (\n <>\n <BaseSelect\n label=\"Decision\"\n placeholder=\"Select decision\"\n value={decision || null}\n onChange={(value) => setDecision((value as 'approve' | 'reject') || '')}\n data={[\n { value: 'approve', label: 'Approve' },\n { value: 'reject', label: 'Reject' },\n ]}\n disabled={isDisabled || submitting}\n />\n\n {decision === 'approve' && (\n <>\n <BaseNumberInput\n label=\"Agent quota (max claims, at least 1)\"\n min={MIN_AGENT_QUOTA}\n value={approveQuota === '' ? '' : Number(approveQuota)}\n onChange={(value) => setApproveQuota(value === '' || value == null ? '' : String(value))}\n disabled={isDisabled || submitting}\n />\n {isEvaluator && <MaxAmountsInput value={approveMaxAmounts} onChange={setApproveMaxAmounts} disabled={isDisabled || submitting} />}\n <ActionDiffView diffs={approvalDiffs} />\n </>\n )}\n\n {decision === 'reject' && (\n <BaseTextInput\n label={`Reason${isEvaluator ? ' *' : ''}`}\n placeholder=\"Reason for rejection\"\n value={rejectReason}\n onChange={(e) => setRejectReason(e.currentTarget.value)}\n disabled={isDisabled || submitting}\n />\n )}\n\n {error && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n {error}\n </Alert>\n )}\n\n <Button\n onClick={submitDecision}\n loading={submitting}\n disabled={\n isDisabled ||\n !decision ||\n (decision === 'reject' && isEvaluator && !rejectReason.trim()) ||\n (decision === 'approve' && Number(approveQuota) < MIN_AGENT_QUOTA) ||\n // Acting as a POD needs a core + proposal title/description\n // before there is anything voters could read.\n !actAsGroupReady(actAs)\n }\n color={decision === 'reject' ? 'red' : undefined}\n >\n {decision === 'reject' ? 'Reject bid' : actAs.actAsGroup ? 'Propose approval' : 'Approve bid'}\n </Button>\n </>\n )}\n </Stack>\n );\n }\n\n const renderBidRow = (bid: Bid) => {\n const profile = profilesByDid[bid.did];\n const displayName = profile?.displayname || bid.did || bid.address;\n const status = bidEvaluatedStatus(bid) || 'pending';\n return (\n <ListItemContainer key={bid.id} isChecked={false} onClick={() => setSelectedBidId(bid.id)}>\n <Stack gap={0} style={{ flex: 1, minWidth: 0 }}>\n <Text fw={500} size=\"sm\" truncate>\n {displayName}\n </Text>\n <Text size=\"xs\" c=\"dimmed\" truncate>\n {truncateAddress(bid.address)}\n </Text>\n </Stack>\n <Stack gap={2} align=\"flex-end\" style={{ flexShrink: 0 }}>\n <Group gap={4}>\n <Badge size=\"xs\" variant=\"light\" color={getRoleColor(bid.role)}>\n {getBidRoleLabel(bid.role)}\n </Badge>\n <Badge size=\"xs\" variant=\"light\" color={status === 'approved' ? 'green' : status === 'rejected' ? 'red' : 'gray'}>\n {status === 'approved' ? 'Approved' : status === 'rejected' ? 'Rejected' : 'Pending'}\n </Badge>\n </Group>\n <Text size=\"xs\" c=\"dimmed\">\n {getTimeAgo(bid.created || '')}\n </Text>\n </Stack>\n </ListItemContainer>\n );\n };\n\n return (\n <Stack gap=\"sm\">\n {lastDecision && (\n <MantineAlert\n color={lastDecision.kind === 'rejected' ? 'red' : 'green'}\n icon={lastDecision.kind === 'rejected' ? <IconAlertCircle size={16} /> : <IconCheck size={16} />}\n title={lastDecision.kind === 'proposed' ? 'Proposal created' : lastDecision.kind === 'approved' ? 'Bid approved' : 'Bid rejected'}\n withCloseButton\n onClose={() => setLastDecision(null)}\n styles={actionAlertStyles}\n >\n {lastDecision.kind === 'proposed'\n ? `Proposal #${lastDecision.proposalId} asks the POD to grant ${lastDecision.roleLabel} access to ${lastDecision.name}. Nothing is granted until the vote passes — the bid stays pending until then.`\n : lastDecision.kind === 'approved'\n ? `${lastDecision.roleLabel} access granted to ${lastDecision.name}. They can now ${lastDecision.roleLabel === 'Evaluator' ? 'evaluate' : 'submit'} claims in this collection.`\n : `${lastDecision.name}'s application was declined.`}\n </MantineAlert>\n )}\n\n <Group justify=\"space-between\" align=\"center\">\n <Text size=\"sm\" fw={600}>\n Incoming bids\n </Text>\n <Group gap={4}>\n <DownloadCsvButton onDownload={handleDownloadBidsCsv} disabled={loading || bids.length === 0} label=\"Download bids CSV\" onError={setError} />\n <DownloadZipButton onDownload={handleDownloadBidsZip} disabled={loading || bids.length === 0} label=\"Download bids + media (ZIP)\" onError={setError} />\n <ActionIcon variant=\"subtle\" color=\"gray\" size=\"sm\" onClick={refreshBids} disabled={loading}>\n <IconRefresh size={16} />\n </ActionIcon>\n </Group>\n </Group>\n\n <Divider color=\"color-mix(in srgb, var(--mantine-color-text) 6%, transparent)\" />\n\n {loading && (\n <Group gap=\"xs\" justify=\"center\" py=\"sm\">\n <Loader size=\"xs\" />\n <Text size=\"xs\" c=\"dimmed\">\n Loading bids…\n </Text>\n </Group>\n )}\n\n {!loading && bids.length === 0 && (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n No bids available for this collection.\n </Text>\n )}\n\n {!loading && bids.length > 0 && openBids.length === 0 && (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n No bids are awaiting a decision.\n </Text>\n )}\n\n {openBids.map(renderBidRow)}\n\n {decidedBids.length > 0 && (\n <>\n <Group justify=\"space-between\" align=\"center\" mt=\"xs\">\n <Text size=\"sm\" fw={600} c=\"dimmed\">\n Already decided\n </Text>\n <Badge size=\"xs\" variant=\"light\" color=\"gray\">\n {decidedBids.length}\n </Badge>\n </Group>\n <Divider color=\"color-mix(in srgb, var(--mantine-color-text) 6%, transparent)\" />\n {decidedBids.map(renderBidRow)}\n </>\n )}\n\n {error && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n {error}\n </Alert>\n )}\n </Stack>\n );\n};\n\nexport default CollectionUsersFlowDetail;\n","import type { Bid } from '@/mantine/context/BlocknoteContext';\n\n// Recovering bids that have already been approved or rejected.\n//\n// The bids service drops a bid from `get-bids` (and `get-bids-by-did`) the\n// moment it is decided: `handleEvaluateBid` clears the bidder's `bid` pointer\n// from `ixo.room.bids.collections`, and both read paths skip any entry without\n// one. The record itself is untouched — verified against BeGreen collection 229\n// on mainnet (2026-08-07), where all 17 decided bids were recovered in full,\n// content and decision, by an account authorised to evaluate them:\n//\n// shard state `<collection>-<n>` -> entry.base (never cleared)\n// -> thread on base\n// ixo.room.bids.bid the original bid { address, role, data, created }\n// ixo.room.bids.bid.res the decision { status: approved | rejected, data }\n//\n// Reading that thread needs a Matrix client with the room keys — the events are\n// `m.room.encrypted`. The editor has no such client, so this is an optional\n// host capability, declared the same way as `collectionUsers.list`: when the\n// host implements it the export covers full bid history, and when it does not\n// the export degrades to open bids and says so rather than implying history.\n//\n// Host contract (implement in the Portal, where the Matrix client is live):\n//\n// handlers.bids.queryDecided({ collectionId, entityDid }) => Promise<DecidedBid[]>\n//\n// Returning the same `Bid` shape as `queryBids` plus `status` and `decidedAt`\n// means every existing row builder works on the result unchanged.\n\nexport interface DecidedBid extends Bid {\n /** The decision recorded in the room's `ixo.room.bids.bid.res` event. */\n status: 'approved' | 'rejected';\n decidedAt?: string;\n /** Free-form payload the evaluator attached to the decision (e.g. a reason). */\n decisionData?: unknown;\n /** Set so grant-state classification treats it as decided even if `status` is dropped. */\n decided?: true;\n}\n\ntype HostWithDecidedBids = {\n bids?: {\n queryDecided?: (params: { collectionId: string; entityDid?: string }) => Promise<DecidedBid[] | { data: DecidedBid[] }>;\n };\n};\n\nexport interface DecidedBidsResult {\n bids: DecidedBid[];\n /** False when the host does not implement the capability — not the same as \"none exist\". */\n supported: boolean;\n}\n\n/**\n * Fetches decided bids when the host can supply them. Never throws: an export\n * that cannot reach history should still produce its open-bid rows.\n */\nexport async function fetchDecidedBids(handlers: unknown, params: { collectionId: string; entityDid?: string }): Promise<DecidedBidsResult> {\n const queryDecided = (handlers as HostWithDecidedBids)?.bids?.queryDecided;\n if (typeof queryDecided !== 'function') return { bids: [], supported: false };\n try {\n const result = await queryDecided(params);\n const list = Array.isArray(result) ? result : result?.data ?? [];\n // Mark them decided explicitly — a host that omits `status` would otherwise\n // have its rows fall back to \"pending\", which is exactly wrong here.\n return { bids: list.map((bid) => ({ ...bid, decided: true as const })), supported: true };\n } catch {\n return { bids: [], supported: false };\n }\n}\n"],"mappings":"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","names":["handlers","roleLabel"]}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseCredentialStoreInputs,
|
|
3
|
+
serializeCredentialStoreInputs
|
|
4
|
+
} from "./chunk-K4WUMWNJ.js";
|
|
5
|
+
import {
|
|
6
|
+
DataInput
|
|
7
|
+
} from "./chunk-4PONO4US.js";
|
|
8
|
+
import "./chunk-XPBKU3JX.js";
|
|
9
|
+
import "./chunk-NZ7AXA7B.js";
|
|
10
|
+
import "./chunk-F4PTFXZH.js";
|
|
11
|
+
import "./chunk-IH4T7V4C.js";
|
|
12
|
+
import "./chunk-PYNDJDWZ.js";
|
|
13
|
+
import "./chunk-NIXT2SBH.js";
|
|
14
|
+
import "./chunk-JIDTNKKL.js";
|
|
15
|
+
import "./chunk-JVROGQ7Q.js";
|
|
16
|
+
import "./chunk-IIIZZ4E4.js";
|
|
17
|
+
import "./chunk-HT6L7A5M.js";
|
|
18
|
+
import "./chunk-N3ORMGAI.js";
|
|
19
|
+
import "./chunk-NCSGIRRQ.js";
|
|
20
|
+
import "./chunk-EBFFDDAS.js";
|
|
21
|
+
import {
|
|
22
|
+
BaseTextInput
|
|
23
|
+
} from "./chunk-WO7V6ZNC.js";
|
|
24
|
+
import "./chunk-TS2LNBF2.js";
|
|
25
|
+
|
|
26
|
+
// src/mantine/blocks/action/actionTypes/credentialStore/CredentialStoreConfig.tsx
|
|
27
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
28
|
+
import { Stack, Text } from "@mantine/core";
|
|
29
|
+
var CredentialStoreConfig = ({ inputs, onInputsChange, editor, blockId }) => {
|
|
30
|
+
const [local, setLocal] = useState(() => parseCredentialStoreInputs(inputs));
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
setLocal(parseCredentialStoreInputs(inputs));
|
|
33
|
+
}, [inputs]);
|
|
34
|
+
const update = useCallback(
|
|
35
|
+
(patch) => {
|
|
36
|
+
const updated = { ...local, ...patch };
|
|
37
|
+
setLocal(updated);
|
|
38
|
+
onInputsChange(serializeCredentialStoreInputs(updated));
|
|
39
|
+
},
|
|
40
|
+
[local, onInputsChange]
|
|
41
|
+
);
|
|
42
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "lg" }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "neutralColor.7" }, "Credential Key"), /* @__PURE__ */ React.createElement(
|
|
43
|
+
BaseTextInput,
|
|
44
|
+
{
|
|
45
|
+
placeholder: "e.g. kycamllevel1",
|
|
46
|
+
description: "The state key under which the credential will be stored",
|
|
47
|
+
value: local.credentialKey,
|
|
48
|
+
onChange: (e) => update({ credentialKey: e.currentTarget.value })
|
|
49
|
+
}
|
|
50
|
+
)), /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "neutralColor.7" }, "Credential"), /* @__PURE__ */ React.createElement(
|
|
51
|
+
DataInput,
|
|
52
|
+
{
|
|
53
|
+
placeholder: "Credential JSON or {{blockId.output.credential}}",
|
|
54
|
+
description: "A verifiable credential as JSON, a block reference, or provided at execution time",
|
|
55
|
+
value: local.credential,
|
|
56
|
+
onChange: (value) => update({ credential: value }),
|
|
57
|
+
editorDocument: editor?.document || [],
|
|
58
|
+
currentBlockId: blockId
|
|
59
|
+
}
|
|
60
|
+
)), /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "neutralColor.7" }, "Room ID (optional)"), /* @__PURE__ */ React.createElement(
|
|
61
|
+
DataInput,
|
|
62
|
+
{
|
|
63
|
+
placeholder: "Defaults to the actor's room",
|
|
64
|
+
description: "Target Matrix room ID. Leave empty to use the current user's room.",
|
|
65
|
+
value: local.roomId,
|
|
66
|
+
onChange: (value) => update({ roomId: value }),
|
|
67
|
+
editorDocument: editor?.document || [],
|
|
68
|
+
currentBlockId: blockId
|
|
69
|
+
}
|
|
70
|
+
)));
|
|
71
|
+
};
|
|
72
|
+
export {
|
|
73
|
+
CredentialStoreConfig
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=CredentialStoreConfig-G66AQDGZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/credentialStore/CredentialStoreConfig.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { Stack, Text } from '@mantine/core';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport { DataInput } from '@/mantine/components/DataInput';\nimport type { ActionTypeConfigProps } from '../../actionTypeUI';\nimport { parseCredentialStoreInputs, serializeCredentialStoreInputs, type CredentialStoreActionInputs } from './types';\n\nexport const CredentialStoreConfig: React.FC<ActionTypeConfigProps> = ({ inputs, onInputsChange, editor, blockId }) => {\n const [local, setLocal] = useState<CredentialStoreActionInputs>(() => parseCredentialStoreInputs(inputs));\n\n useEffect(() => {\n setLocal(parseCredentialStoreInputs(inputs));\n }, [inputs]);\n\n const update = useCallback(\n (patch: Partial<CredentialStoreActionInputs>) => {\n const updated = { ...local, ...patch };\n setLocal(updated);\n onInputsChange(serializeCredentialStoreInputs(updated));\n },\n [local, onInputsChange]\n );\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" c=\"neutralColor.7\">\n Credential Key\n </Text>\n <BaseTextInput\n placeholder=\"e.g. kycamllevel1\"\n description=\"The state key under which the credential will be stored\"\n value={local.credentialKey}\n onChange={(e) => update({ credentialKey: e.currentTarget.value })}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" c=\"neutralColor.7\">\n Credential\n </Text>\n <DataInput\n placeholder=\"Credential JSON or {{blockId.output.credential}}\"\n description=\"A verifiable credential as JSON, a block reference, or provided at execution time\"\n value={local.credential}\n onChange={(value) => update({ credential: value })}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n />\n </Stack>\n\n <Stack gap=\"xs\">\n <Text size=\"sm\" c=\"neutralColor.7\">\n Room ID (optional)\n </Text>\n <DataInput\n placeholder=\"Defaults to the actor's room\"\n description=\"Target Matrix room ID. Leave empty to use the current user's room.\"\n value={local.roomId}\n onChange={(value) => update({ roomId: value })}\n editorDocument={editor?.document || []}\n currentBlockId={blockId}\n />\n </Stack>\n </Stack>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,SAAS,aAAa,WAAW,gBAAgB;AACxD,SAAS,OAAO,YAAY;AAMrB,IAAM,wBAAyD,CAAC,EAAE,QAAQ,gBAAgB,QAAQ,QAAQ,MAAM;AACrH,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAsC,MAAM,2BAA2B,MAAM,CAAC;AAExG,YAAU,MAAM;AACd,aAAS,2BAA2B,MAAM,CAAC;AAAA,EAC7C,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,SAAS;AAAA,IACb,CAAC,UAAgD;AAC/C,YAAM,UAAU,EAAE,GAAG,OAAO,GAAG,MAAM;AACrC,eAAS,OAAO;AAChB,qBAAe,+BAA+B,OAAO,CAAC;AAAA,IACxD;AAAA,IACA,CAAC,OAAO,cAAc;AAAA,EACxB;AAEA,SACE,oCAAC,SAAM,KAAI,QACT,oCAAC,SAAM,KAAI,QACT,oCAAC,QAAK,MAAK,MAAK,GAAE,oBAAiB,gBAEnC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,UAAU,CAAC,MAAM,OAAO,EAAE,eAAe,EAAE,cAAc,MAAM,CAAC;AAAA;AAAA,EAClE,CACF,GAEA,oCAAC,SAAM,KAAI,QACT,oCAAC,QAAK,MAAK,MAAK,GAAE,oBAAiB,YAEnC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,UAAU,CAAC,UAAU,OAAO,EAAE,YAAY,MAAM,CAAC;AAAA,MACjD,gBAAgB,QAAQ,YAAY,CAAC;AAAA,MACrC,gBAAgB;AAAA;AAAA,EAClB,CACF,GAEA,oCAAC,SAAM,KAAI,QACT,oCAAC,QAAK,MAAK,MAAK,GAAE,oBAAiB,oBAEnC,GACA;AAAA,IAAC;AAAA;AAAA,MACC,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,OAAO,MAAM;AAAA,MACb,UAAU,CAAC,UAAU,OAAO,EAAE,QAAQ,MAAM,CAAC;AAAA,MAC7C,gBAAgB,QAAQ,YAAY,CAAC;AAAA,MACrC,gBAAgB;AAAA;AAAA,EAClB,CACF,CACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseCredentialStoreInputs
|
|
3
|
+
} from "./chunk-K4WUMWNJ.js";
|
|
4
|
+
import {
|
|
5
|
+
useRunRuntimeReader
|
|
6
|
+
} from "./chunk-FFYZXA75.js";
|
|
7
|
+
import "./chunk-NZ7AXA7B.js";
|
|
8
|
+
import {
|
|
9
|
+
resolveReferences
|
|
10
|
+
} from "./chunk-JVROGQ7Q.js";
|
|
11
|
+
import "./chunk-IIIZZ4E4.js";
|
|
12
|
+
import "./chunk-HT6L7A5M.js";
|
|
13
|
+
import "./chunk-NCSGIRRQ.js";
|
|
14
|
+
import {
|
|
15
|
+
DismissibleAlert
|
|
16
|
+
} from "./chunk-IFWKRCFF.js";
|
|
17
|
+
import {
|
|
18
|
+
actionAlertStyles
|
|
19
|
+
} from "./chunk-6GKJR52N.js";
|
|
20
|
+
import "./chunk-4DGCCXD6.js";
|
|
21
|
+
import "./chunk-7W7UUUIE.js";
|
|
22
|
+
import "./chunk-TS2LNBF2.js";
|
|
23
|
+
|
|
24
|
+
// src/mantine/blocks/action/actionTypes/credentialStore/CredentialStoreFlowDetail.tsx
|
|
25
|
+
import React, { useCallback, useMemo, useState } from "react";
|
|
26
|
+
import { Button, Code, Loader, Stack, Text } from "@mantine/core";
|
|
27
|
+
import { IconShieldCheck } from "@tabler/icons-react";
|
|
28
|
+
function safeParse(value) {
|
|
29
|
+
let result = value;
|
|
30
|
+
for (let i = 0; i < 2; i++) {
|
|
31
|
+
if (typeof result !== "string") break;
|
|
32
|
+
try {
|
|
33
|
+
result = JSON.parse(result);
|
|
34
|
+
} catch {
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return result;
|
|
39
|
+
}
|
|
40
|
+
function CredentialPreview({ value }) {
|
|
41
|
+
const display = useMemo(() => {
|
|
42
|
+
if (!value) return null;
|
|
43
|
+
const parsed = safeParse(value);
|
|
44
|
+
if (parsed && typeof parsed === "object") {
|
|
45
|
+
return JSON.stringify(parsed, null, 2);
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}, [value]);
|
|
49
|
+
if (!display) return null;
|
|
50
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { size: "xs", fw: 600, c: "dimmed" }, "Credential"), /* @__PURE__ */ React.createElement(Code, { block: true, style: { fontSize: "11px", maxHeight: "200px", overflow: "auto" } }, display));
|
|
51
|
+
}
|
|
52
|
+
var CredentialStoreFlowDetail = ({ inputs, editor, runtime, isDisabled, executeAction }) => {
|
|
53
|
+
const parsed = useMemo(() => parseCredentialStoreInputs(inputs), [inputs]);
|
|
54
|
+
const editorDocument = editor?.document || [];
|
|
55
|
+
const runtimeReader = useRunRuntimeReader(editor);
|
|
56
|
+
const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);
|
|
57
|
+
const resolvedCredentialKey = useMemo(
|
|
58
|
+
() => resolveReferences(parsed.credentialKey || "", editorDocument, resolveOpts).trim(),
|
|
59
|
+
[parsed.credentialKey, editorDocument, resolveOpts]
|
|
60
|
+
);
|
|
61
|
+
const resolvedCredential = useMemo(() => resolveReferences(parsed.credential || "", editorDocument, resolveOpts).trim(), [parsed.credential, editorDocument, resolveOpts]);
|
|
62
|
+
const resolvedRoomId = useMemo(() => resolveReferences(parsed.roomId || "", editorDocument, resolveOpts).trim(), [parsed.roomId, editorDocument, resolveOpts]);
|
|
63
|
+
const [submitting, setSubmitting] = useState(false);
|
|
64
|
+
const [error, setError] = useState(null);
|
|
65
|
+
const hasCredential = !!resolvedCredential;
|
|
66
|
+
const hasKey = !!resolvedCredentialKey;
|
|
67
|
+
const isCompleted = runtime.state === "completed";
|
|
68
|
+
const handleExecute = useCallback(async () => {
|
|
69
|
+
if (isDisabled || submitting) return;
|
|
70
|
+
if (!executeAction) {
|
|
71
|
+
setError("Shared action executor is unavailable");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
setSubmitting(true);
|
|
75
|
+
setError(null);
|
|
76
|
+
try {
|
|
77
|
+
const outcome = await executeAction({
|
|
78
|
+
runtimeInputs: {
|
|
79
|
+
credentialKey: resolvedCredentialKey,
|
|
80
|
+
credential: resolvedCredential,
|
|
81
|
+
roomId: resolvedRoomId
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (!outcome.success) {
|
|
85
|
+
throw new Error(outcome.error || "Credential store execution failed");
|
|
86
|
+
}
|
|
87
|
+
} catch (err) {
|
|
88
|
+
const message = err instanceof Error ? err.message : "Failed to store credential";
|
|
89
|
+
setError(message);
|
|
90
|
+
} finally {
|
|
91
|
+
setSubmitting(false);
|
|
92
|
+
}
|
|
93
|
+
}, [executeAction, isDisabled, resolvedCredential, resolvedCredentialKey, resolvedRoomId, submitting]);
|
|
94
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, !hasKey && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, "No credential key configured. Set one in template mode."), hasKey && !hasCredential && !isCompleted && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, "Waiting for credential data. It will be provided by a block reference or at execution time."), hasKey && hasCredential && !isCompleted && /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Credential key: ", resolvedCredentialKey), /* @__PURE__ */ React.createElement(CredentialPreview, { value: resolvedCredential }), /* @__PURE__ */ React.createElement(Button, { leftSection: submitting ? /* @__PURE__ */ React.createElement(Loader, { size: 14 }) : /* @__PURE__ */ React.createElement(IconShieldCheck, { size: 14 }), onClick: handleExecute, disabled: isDisabled || submitting, size: "sm" }, submitting ? "Storing..." : "Store Credential")), isCompleted && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: runtime.output?.duplicate ? "yellow" : "green", styles: actionAlertStyles }, runtime.output?.duplicate ? `Credential already stored under key "${runtime.output?.credentialKey || resolvedCredentialKey}" (duplicate).` : `Credential stored successfully under key "${runtime.output?.credentialKey || resolvedCredentialKey}".`), error && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, error), runtime.error?.message && !error && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, runtime.error.message));
|
|
95
|
+
};
|
|
96
|
+
export {
|
|
97
|
+
CredentialStoreFlowDetail
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=CredentialStoreFlowDetail-FL7QAM3S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/credentialStore/CredentialStoreFlowDetail.tsx"],"sourcesContent":["import { useRunRuntimeReader } from '@/mantine/hooks/useRunRuntimeReader';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Button, Code, Loader, Stack, Text } from '@mantine/core';\nimport { DismissibleAlert as Alert } from '@/mantine/components/Base/DismissibleAlert';\nimport { IconShieldCheck } from '@tabler/icons-react';\nimport { resolveReferences } from '@/mantine/utils/referenceResolver';\nimport type { ActionTypeFlowProps } from '../../actionTypeUI';\nimport { parseCredentialStoreInputs } from './types';\nimport { actionAlertStyles } from '../../alertStyles';\n\nfunction safeParse(value: string): unknown {\n let result: unknown = value;\n // Handle double-stringified JSON — parse up to 2 times\n for (let i = 0; i < 2; i++) {\n if (typeof result !== 'string') break;\n try {\n result = JSON.parse(result);\n } catch {\n break;\n }\n }\n return result;\n}\n\nfunction CredentialPreview({ value }: { value: string }) {\n const display = useMemo(() => {\n if (!value) return null;\n const parsed = safeParse(value);\n if (parsed && typeof parsed === 'object') {\n return JSON.stringify(parsed, null, 2);\n }\n // Raw string (e.g. JWT) — show as-is\n return value;\n }, [value]);\n\n if (!display) return null;\n\n return (\n <>\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n Credential\n </Text>\n <Code block style={{ fontSize: '11px', maxHeight: '200px', overflow: 'auto' }}>\n {display}\n </Code>\n </>\n );\n}\n\nexport const CredentialStoreFlowDetail: React.FC<ActionTypeFlowProps> = ({ inputs, editor, runtime, isDisabled, executeAction }) => {\n const parsed = useMemo(() => parseCredentialStoreInputs(inputs), [inputs]);\n const editorDocument = editor?.document || [];\n const runtimeReader = useRunRuntimeReader(editor);\n const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);\n\n // Resolve block references in all input fields\n const resolvedCredentialKey = useMemo(\n () => resolveReferences(parsed.credentialKey || '', editorDocument, resolveOpts).trim(),\n [parsed.credentialKey, editorDocument, resolveOpts]\n );\n const resolvedCredential = useMemo(() => resolveReferences(parsed.credential || '', editorDocument, resolveOpts).trim(), [parsed.credential, editorDocument, resolveOpts]);\n const resolvedRoomId = useMemo(() => resolveReferences(parsed.roomId || '', editorDocument, resolveOpts).trim(), [parsed.roomId, editorDocument, resolveOpts]);\n\n const [submitting, setSubmitting] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const hasCredential = !!resolvedCredential;\n const hasKey = !!resolvedCredentialKey;\n const isCompleted = runtime.state === 'completed';\n\n const handleExecute = useCallback(async () => {\n if (isDisabled || submitting) return;\n\n if (!executeAction) {\n setError('Shared action executor is unavailable');\n return;\n }\n\n setSubmitting(true);\n setError(null);\n\n try {\n const outcome = await executeAction({\n runtimeInputs: {\n credentialKey: resolvedCredentialKey,\n credential: resolvedCredential,\n roomId: resolvedRoomId,\n },\n });\n\n if (!outcome.success) {\n throw new Error(outcome.error || 'Credential store execution failed');\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to store credential';\n setError(message);\n } finally {\n setSubmitting(false);\n }\n }, [executeAction, isDisabled, resolvedCredential, resolvedCredentialKey, resolvedRoomId, submitting]);\n\n return (\n <Stack gap=\"md\">\n {!hasKey && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n No credential key configured. Set one in template mode.\n </Alert>\n )}\n\n {hasKey && !hasCredential && !isCompleted && (\n <Alert color=\"yellow\" styles={actionAlertStyles}>\n Waiting for credential data. It will be provided by a block reference or at execution time.\n </Alert>\n )}\n\n {hasKey && hasCredential && !isCompleted && (\n <Stack gap=\"xs\">\n <Text size=\"xs\" c=\"dimmed\">\n Credential key: {resolvedCredentialKey}\n </Text>\n <CredentialPreview value={resolvedCredential} />\n <Button leftSection={submitting ? <Loader size={14} /> : <IconShieldCheck size={14} />} onClick={handleExecute} disabled={isDisabled || submitting} size=\"sm\">\n {submitting ? 'Storing...' : 'Store Credential'}\n </Button>\n </Stack>\n )}\n\n {isCompleted && (\n <Alert color={runtime.output?.duplicate ? 'yellow' : 'green'} styles={actionAlertStyles}>\n {runtime.output?.duplicate\n ? `Credential already stored under key \"${runtime.output?.credentialKey || resolvedCredentialKey}\" (duplicate).`\n : `Credential stored successfully under key \"${runtime.output?.credentialKey || resolvedCredentialKey}\".`}\n </Alert>\n )}\n\n {error && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n {error}\n </Alert>\n )}\n {runtime.error?.message && !error && (\n <Alert color=\"red\" styles={actionAlertStyles}>\n {runtime.error.message}\n </Alert>\n )}\n </Stack>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// src/mantine/blocks/action/actionTypes/designPod/DesignPodConfig.tsx
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Alert, Stack, Text } from "@mantine/core";
|
|
4
|
+
var DesignPodConfig = () => /* @__PURE__ */ React.createElement(Stack, { gap: "sm" }, /* @__PURE__ */ React.createElement(Alert, { color: "violet", title: "Governed Design POD action" }, "Runtime inputs are derived from the pinned method and current Flow state. Provider commitments and independent review decisions are supplied only at execution time."), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Use the Design POD journey in Flow mode. Do not embed artifact bodies or mutable approval data in this block."));
|
|
5
|
+
export {
|
|
6
|
+
DesignPodConfig
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=DesignPodConfig-LJ7H2CZ6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/designPod/DesignPodConfig.tsx"],"sourcesContent":["import React from 'react';\nimport { Alert, Stack, Text } from '@mantine/core';\nimport type { ActionTypeConfigProps } from '../../actionTypeUI';\n\nexport const DesignPodConfig: React.FC<ActionTypeConfigProps> = () => (\n <Stack gap=\"sm\">\n <Alert color=\"violet\" title=\"Governed Design POD action\">\n Runtime inputs are derived from the pinned method and current Flow state. Provider commitments and independent review decisions are supplied only at execution time.\n </Alert>\n <Text size=\"xs\" c=\"dimmed\">\n Use the Design POD journey in Flow mode. Do not embed artifact bodies or mutable approval data in this block.\n </Text>\n </Stack>\n);\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,SAAS,OAAO,OAAO,YAAY;AAG5B,IAAM,kBAAmD,MAC9D,oCAAC,SAAM,KAAI,QACT,oCAAC,SAAM,OAAM,UAAS,OAAM,gCAA6B,sKAEzD,GACA,oCAAC,QAAK,MAAK,MAAK,GAAE,YAAS,+GAE3B,CACF;","names":[]}
|