@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,257 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DismissibleAlert
|
|
3
|
+
} from "./chunk-IFWKRCFF.js";
|
|
4
|
+
import {
|
|
5
|
+
actionAlertStyles
|
|
6
|
+
} from "./chunk-6GKJR52N.js";
|
|
7
|
+
import {
|
|
8
|
+
useBlocknoteHandlers
|
|
9
|
+
} from "./chunk-4DGCCXD6.js";
|
|
10
|
+
import "./chunk-7W7UUUIE.js";
|
|
11
|
+
import "./chunk-TS2LNBF2.js";
|
|
12
|
+
import {
|
|
13
|
+
parseJsonSafe
|
|
14
|
+
} from "./chunk-KLLMJ4U3.js";
|
|
15
|
+
|
|
16
|
+
// src/mantine/blocks/action/actionTypes/pod/listDomainFlows/ListDomainFlowsFlowDetail.tsx
|
|
17
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
18
|
+
import { ActionIcon, Badge, Box, Button, Checkbox, Group, Loader, Stack, Text, Tooltip } from "@mantine/core";
|
|
19
|
+
import { IconAlertCircle, IconArrowLeft, IconCheck, IconFolders, IconRefresh, IconTemplate } from "@tabler/icons-react";
|
|
20
|
+
function templateSelectionKey(protocolDid, template) {
|
|
21
|
+
return `${protocolDid}::${template.sourceRoomId}`;
|
|
22
|
+
}
|
|
23
|
+
function getInitialSelection(output) {
|
|
24
|
+
const selected = /* @__PURE__ */ new Set();
|
|
25
|
+
const selectedTemplates = Array.isArray(output?.selectedProtocolTemplates) ? output?.selectedProtocolTemplates : [];
|
|
26
|
+
selectedTemplates.forEach((template) => {
|
|
27
|
+
if (template?.protocolDid && template?.sourceRoomId) {
|
|
28
|
+
selected.add(templateSelectionKey(String(template.protocolDid), { sourceRoomId: String(template.sourceRoomId) }));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
if (selected.size === 0) {
|
|
32
|
+
const selectedFlowDids = Array.isArray(output?.selectedFlowDids) ? output?.selectedFlowDids : [];
|
|
33
|
+
selectedFlowDids.forEach((sourceRoomId) => {
|
|
34
|
+
if (sourceRoomId) selected.add(String(sourceRoomId));
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return selected;
|
|
38
|
+
}
|
|
39
|
+
function isTemplateSelected(selected, protocolDid, template) {
|
|
40
|
+
return selected.has(templateSelectionKey(protocolDid, template)) || selected.has(template.sourceRoomId);
|
|
41
|
+
}
|
|
42
|
+
function buildSelectedTemplates(protocols, selected) {
|
|
43
|
+
return protocols.flatMap(
|
|
44
|
+
(protocol) => protocol.templates.filter((template) => isTemplateSelected(selected, protocol.protocolDid, template)).map((template) => ({
|
|
45
|
+
protocolDid: protocol.protocolDid,
|
|
46
|
+
protocolName: protocol.name,
|
|
47
|
+
sourceRoomId: template.sourceRoomId,
|
|
48
|
+
sourceLabel: template.label,
|
|
49
|
+
...template.path ? { path: template.path } : {}
|
|
50
|
+
}))
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
function makeFetchKey(params, entityDid) {
|
|
54
|
+
return JSON.stringify({
|
|
55
|
+
entityDid: entityDid || "",
|
|
56
|
+
domainFlowsSubspaceId: params.domainFlowsSubspaceId || "",
|
|
57
|
+
includeEmpty: !!params.includeEmpty
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function protocolsEqual(a, b) {
|
|
61
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
62
|
+
}
|
|
63
|
+
function mergeProtocolDelta(current, next) {
|
|
64
|
+
const nextByDid = new Map(next.map((protocol) => [protocol.protocolDid, protocol]));
|
|
65
|
+
const merged = current.filter((protocol) => nextByDid.has(protocol.protocolDid)).map((protocol) => {
|
|
66
|
+
const nextProtocol = nextByDid.get(protocol.protocolDid);
|
|
67
|
+
return protocolsEqual(protocol, nextProtocol) ? protocol : nextProtocol;
|
|
68
|
+
});
|
|
69
|
+
const currentDids = new Set(current.map((protocol) => protocol.protocolDid));
|
|
70
|
+
next.forEach((protocol) => {
|
|
71
|
+
if (!currentDids.has(protocol.protocolDid)) merged.push(protocol);
|
|
72
|
+
});
|
|
73
|
+
return merged;
|
|
74
|
+
}
|
|
75
|
+
var ListDomainFlowsFlowDetail = ({ inputs, block, runtime, updateRuntime, isDisabled, executeAction }) => {
|
|
76
|
+
const handlers = useBlocknoteHandlers();
|
|
77
|
+
const parsed = parseJsonSafe(inputs, {});
|
|
78
|
+
const entityDid = parsed.entity || parsed.blueprintDid || "";
|
|
79
|
+
const [protocols, setProtocols] = useState([]);
|
|
80
|
+
const [activeProtocolDid, setActiveProtocolDid] = useState("");
|
|
81
|
+
const [view, setView] = useState("deeds");
|
|
82
|
+
const [selected, setSelected] = useState(() => getInitialSelection(runtime.output));
|
|
83
|
+
const [loading, setLoading] = useState(false);
|
|
84
|
+
const [refreshing, setRefreshing] = useState(false);
|
|
85
|
+
const [confirming, setConfirming] = useState(false);
|
|
86
|
+
const [error, setError] = useState(null);
|
|
87
|
+
const cacheRef = useRef(/* @__PURE__ */ new Map());
|
|
88
|
+
const fetchedKeysRef = useRef(/* @__PURE__ */ new Set());
|
|
89
|
+
const fetchKey = useMemo(() => makeFetchKey(parsed, entityDid), [entityDid, parsed.domainFlowsSubspaceId, parsed.includeEmpty]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
setSelected(getInitialSelection(runtime.output));
|
|
92
|
+
}, [runtime.output?.selectedProtocolTemplates, runtime.output?.selectedFlowDids]);
|
|
93
|
+
const loadProtocols = useCallback(
|
|
94
|
+
async (mode = "initial") => {
|
|
95
|
+
if (!handlers.listProtocolDeedsWithTemplates) {
|
|
96
|
+
setError("Protocol template listing is not available.");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const cached = cacheRef.current.get(fetchKey);
|
|
100
|
+
if (mode === "initial" && cached) {
|
|
101
|
+
setProtocols(cached);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (mode === "initial" && fetchedKeysRef.current.has(fetchKey)) return;
|
|
105
|
+
if (mode === "refresh") setRefreshing(true);
|
|
106
|
+
else setLoading(true);
|
|
107
|
+
setError(null);
|
|
108
|
+
try {
|
|
109
|
+
const result = await handlers.listProtocolDeedsWithTemplates({
|
|
110
|
+
entityDid: entityDid || void 0,
|
|
111
|
+
domainFlowsSubspaceId: parsed.domainFlowsSubspaceId || void 0,
|
|
112
|
+
includeEmpty: parsed.includeEmpty
|
|
113
|
+
});
|
|
114
|
+
const nextProtocols = result.protocols || [];
|
|
115
|
+
fetchedKeysRef.current.add(fetchKey);
|
|
116
|
+
cacheRef.current.set(fetchKey, nextProtocols);
|
|
117
|
+
setProtocols((current) => mergeProtocolDelta(current, nextProtocols));
|
|
118
|
+
setActiveProtocolDid((current) => current && nextProtocols.some((protocol) => protocol.protocolDid === current) ? current : "");
|
|
119
|
+
} catch (err) {
|
|
120
|
+
setError(err instanceof Error ? err.message : "Failed to load protocol templates");
|
|
121
|
+
} finally {
|
|
122
|
+
setLoading(false);
|
|
123
|
+
setRefreshing(false);
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
[entityDid, fetchKey, handlers, parsed.domainFlowsSubspaceId, parsed.includeEmpty]
|
|
127
|
+
);
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
loadProtocols("initial");
|
|
130
|
+
}, [loadProtocols]);
|
|
131
|
+
const activeProtocol = useMemo(() => protocols.find((protocol) => protocol.protocolDid === activeProtocolDid) || null, [activeProtocolDid, protocols]);
|
|
132
|
+
const selectedTemplates = useMemo(() => buildSelectedTemplates(protocols, selected), [protocols, selected]);
|
|
133
|
+
const selectedProtocolCount = useMemo(() => new Set(selectedTemplates.map((template) => template.protocolDid)).size, [selectedTemplates]);
|
|
134
|
+
const openTemplates = useCallback((protocolDid) => {
|
|
135
|
+
setActiveProtocolDid(protocolDid);
|
|
136
|
+
setView("templates");
|
|
137
|
+
}, []);
|
|
138
|
+
const goBackToDeeds = useCallback(() => {
|
|
139
|
+
setView("deeds");
|
|
140
|
+
setActiveProtocolDid("");
|
|
141
|
+
}, []);
|
|
142
|
+
const setProtocolTemplatesSelected = useCallback((protocol, checked) => {
|
|
143
|
+
setSelected((prev) => {
|
|
144
|
+
const next = new Set(prev);
|
|
145
|
+
protocol.templates.forEach((template) => {
|
|
146
|
+
const key = templateSelectionKey(protocol.protocolDid, template);
|
|
147
|
+
if (checked && !template.alreadyImported) next.add(key);
|
|
148
|
+
else next.delete(key);
|
|
149
|
+
});
|
|
150
|
+
return next;
|
|
151
|
+
});
|
|
152
|
+
}, []);
|
|
153
|
+
const toggleTemplate = useCallback((protocolDid, template, checked) => {
|
|
154
|
+
const key = templateSelectionKey(protocolDid, template);
|
|
155
|
+
setSelected((prev) => {
|
|
156
|
+
const next = new Set(prev);
|
|
157
|
+
next.delete(template.sourceRoomId);
|
|
158
|
+
if (checked) next.add(key);
|
|
159
|
+
else next.delete(key);
|
|
160
|
+
return next;
|
|
161
|
+
});
|
|
162
|
+
}, []);
|
|
163
|
+
const handleConfirm = useCallback(async () => {
|
|
164
|
+
const selectedProtocolTemplates = buildSelectedTemplates(protocols, selected);
|
|
165
|
+
const selectedFlowDids = selectedProtocolTemplates.map((template) => template.sourceRoomId);
|
|
166
|
+
const flowTemplateConfig = {
|
|
167
|
+
selectedTemplates: selectedProtocolTemplates,
|
|
168
|
+
templateCount: selectedProtocolTemplates.length,
|
|
169
|
+
protocolCount: new Set(selectedProtocolTemplates.map((template) => template.protocolDid)).size
|
|
170
|
+
};
|
|
171
|
+
setConfirming(true);
|
|
172
|
+
setError(null);
|
|
173
|
+
try {
|
|
174
|
+
if (executeAction) {
|
|
175
|
+
const outcome = await executeAction({
|
|
176
|
+
runtimeInputs: {
|
|
177
|
+
selectedProtocolTemplates,
|
|
178
|
+
selectedFlowDids
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (!outcome.success) throw new Error(outcome.error || "Failed to confirm flow templates");
|
|
182
|
+
} else {
|
|
183
|
+
updateRuntime({
|
|
184
|
+
state: "completed",
|
|
185
|
+
executedAt: Date.now(),
|
|
186
|
+
output: { selectedProtocolTemplates, selectedFlowDids, flowTemplateConfig }
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
} catch (err) {
|
|
190
|
+
setError(err instanceof Error ? err.message : "Failed to confirm flow templates");
|
|
191
|
+
} finally {
|
|
192
|
+
setConfirming(false);
|
|
193
|
+
}
|
|
194
|
+
}, [executeAction, protocols, selected, updateRuntime]);
|
|
195
|
+
const renderTemplate = (protocol, template) => {
|
|
196
|
+
const checked = isTemplateSelected(selected, protocol.protocolDid, template);
|
|
197
|
+
const disabled = isDisabled || !!template.alreadyImported;
|
|
198
|
+
return /* @__PURE__ */ React.createElement(
|
|
199
|
+
Box,
|
|
200
|
+
{
|
|
201
|
+
key: template.sourceRoomId,
|
|
202
|
+
style: {
|
|
203
|
+
padding: "10px 12px",
|
|
204
|
+
borderRadius: 8,
|
|
205
|
+
border: checked ? "1px solid var(--mantine-color-blue-5)" : "1px solid var(--mantine-color-dark-4)",
|
|
206
|
+
backgroundColor: checked ? "var(--mantine-color-dark-6)" : "var(--mantine-color-dark-7)"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
/* @__PURE__ */ React.createElement(Group, { wrap: "nowrap", gap: "sm", align: "center" }, /* @__PURE__ */ React.createElement(Checkbox, { checked, disabled, onChange: (event) => toggleTemplate(protocol.protocolDid, template, event.currentTarget.checked) }), /* @__PURE__ */ React.createElement(Stack, { gap: 2, style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React.createElement(Group, { gap: "xs", wrap: "nowrap" }, /* @__PURE__ */ React.createElement(Text, { fw: 500, size: "sm", lineClamp: 1 }, template.label), template.alreadyImported && /* @__PURE__ */ React.createElement(Badge, { size: "xs", color: "gray", variant: "light" }, "imported")), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed", lineClamp: 1, ff: "monospace" }, template.path || template.sourceRoomId)))
|
|
210
|
+
);
|
|
211
|
+
};
|
|
212
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, /* @__PURE__ */ React.createElement(Stack, { gap: 2 }, /* @__PURE__ */ React.createElement(Text, { fw: 600 }, block?.props?.title || "Linked Flows"), /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed" }, block?.props?.description || "Choose flow templates from protocol deeds. You can select templates across multiple deeds.")), loading && /* @__PURE__ */ React.createElement(Group, { justify: "center", py: "sm" }, /* @__PURE__ */ React.createElement(Loader, { size: "sm" }), /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed" }, "Loading protocol templates...")), error && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }), color: "red", styles: actionAlertStyles }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, error)), !loading && !error && protocols.length === 0 && /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "No protocol deeds with templates were found."), !loading && !error && protocols.length > 0 && view === "deeds" && /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Group, { justify: "space-between", gap: "sm" }, /* @__PURE__ */ React.createElement(Text, { size: "xs", fw: 600, c: "dimmed" }, "PROTOCOL DEEDS"), /* @__PURE__ */ React.createElement(Tooltip, { label: "Refresh protocol deeds", withArrow: true }, /* @__PURE__ */ React.createElement(ActionIcon, { variant: "subtle", size: "sm", onClick: () => loadProtocols("refresh"), loading: refreshing, disabled: isDisabled }, /* @__PURE__ */ React.createElement(IconRefresh, { size: 16 })))), protocols.map((protocol) => {
|
|
213
|
+
const selectedCount = protocol.templates.filter((template) => isTemplateSelected(selected, protocol.protocolDid, template)).length;
|
|
214
|
+
return /* @__PURE__ */ React.createElement(
|
|
215
|
+
Box,
|
|
216
|
+
{
|
|
217
|
+
key: protocol.protocolDid,
|
|
218
|
+
role: "button",
|
|
219
|
+
tabIndex: 0,
|
|
220
|
+
onClick: () => openTemplates(protocol.protocolDid),
|
|
221
|
+
onKeyDown: (event) => {
|
|
222
|
+
if (event.key === "Enter" || event.key === " ") openTemplates(protocol.protocolDid);
|
|
223
|
+
},
|
|
224
|
+
style: {
|
|
225
|
+
cursor: "pointer",
|
|
226
|
+
padding: "12px 14px",
|
|
227
|
+
borderRadius: 8,
|
|
228
|
+
border: "1px solid var(--mantine-color-dark-4)",
|
|
229
|
+
backgroundColor: "var(--mantine-color-dark-7)"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
/* @__PURE__ */ React.createElement(Stack, { gap: 6 }, /* @__PURE__ */ React.createElement(Group, { gap: "xs", wrap: "nowrap" }, /* @__PURE__ */ React.createElement(IconFolders, { size: 16, color: "var(--mantine-color-blue-4)" }), /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 500, lineClamp: 1 }, protocol.name)), protocol.description && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed", lineClamp: 2 }, protocol.description), /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Badge, { size: "xs", color: "gray", variant: "light" }, protocol.templates.length, " template", protocol.templates.length === 1 ? "" : "s"), selectedCount > 0 && /* @__PURE__ */ React.createElement(Badge, { size: "xs", color: "blue", variant: "light" }, selectedCount, " selected"), protocol.importedCount ? /* @__PURE__ */ React.createElement(Badge, { size: "xs", color: "gray", variant: "dot" }, protocol.importedCount, " imported") : null))
|
|
233
|
+
);
|
|
234
|
+
})), !loading && !error && view === "templates" && activeProtocol && /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Group, { justify: "space-between", gap: "sm" }, /* @__PURE__ */ React.createElement(Group, { gap: "xs", style: { minWidth: 0 } }, /* @__PURE__ */ React.createElement(Tooltip, { label: "Back to protocol deeds", withArrow: true }, /* @__PURE__ */ React.createElement(ActionIcon, { variant: "subtle", size: "sm", onClick: goBackToDeeds }, /* @__PURE__ */ React.createElement(IconArrowLeft, { size: 16 }))), /* @__PURE__ */ React.createElement(IconTemplate, { size: 16, color: "var(--mantine-color-blue-4)" }), /* @__PURE__ */ React.createElement(Text, { size: "xs", fw: 600, c: "dimmed", lineClamp: 1 }, activeProtocol.name)), /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Badge, { size: "xs", color: "blue", variant: "light" }, activeProtocol.templates.filter((template) => isTemplateSelected(selected, activeProtocol.protocolDid, template)).length, " selected"), /* @__PURE__ */ React.createElement(
|
|
235
|
+
Button,
|
|
236
|
+
{
|
|
237
|
+
size: "compact-xs",
|
|
238
|
+
variant: "subtle",
|
|
239
|
+
disabled: isDisabled || activeProtocol.templates.every((template) => template.alreadyImported),
|
|
240
|
+
onClick: () => setProtocolTemplatesSelected(activeProtocol, true)
|
|
241
|
+
},
|
|
242
|
+
"Select all"
|
|
243
|
+
), /* @__PURE__ */ React.createElement(
|
|
244
|
+
Button,
|
|
245
|
+
{
|
|
246
|
+
size: "compact-xs",
|
|
247
|
+
variant: "subtle",
|
|
248
|
+
disabled: isDisabled || activeProtocol.templates.every((template) => !isTemplateSelected(selected, activeProtocol.protocolDid, template)),
|
|
249
|
+
onClick: () => setProtocolTemplatesSelected(activeProtocol, false)
|
|
250
|
+
},
|
|
251
|
+
"Clear"
|
|
252
|
+
))), activeProtocol.description && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed", lineClamp: 2 }, activeProtocol.description), activeProtocol.templates.length > 0 ? /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, activeProtocol.templates.map((template) => renderTemplate(activeProtocol, template))) : /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "This protocol deed has no templates.")), runtime.state === "completed" && !error && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconCheck, { size: 16 }), color: "green", styles: actionAlertStyles }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, selectedTemplates.length, " template", selectedTemplates.length === 1 ? "" : "s", " confirmed across ", selectedProtocolCount, " protocol deed", selectedProtocolCount === 1 ? "" : "s", ".")), /* @__PURE__ */ React.createElement(Button, { onClick: handleConfirm, disabled: isDisabled || loading || confirming || !!error, loading: confirming, variant: runtime.state === "completed" ? "outline" : "filled" }, runtime.state === "completed" ? "Update Template Selection" : "Confirm Templates"));
|
|
253
|
+
};
|
|
254
|
+
export {
|
|
255
|
+
ListDomainFlowsFlowDetail
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=ListDomainFlowsFlowDetail-XX5AXDZZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/pod/listDomainFlows/ListDomainFlowsFlowDetail.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { ActionIcon, Badge, Box, Button, Checkbox, Group, Loader, Stack, Text, Tooltip } from '@mantine/core';\nimport { DismissibleAlert as Alert } from '@/mantine/components/Base/DismissibleAlert';\nimport { IconAlertCircle, IconArrowLeft, IconCheck, IconFolders, IconRefresh, IconTemplate } from '@tabler/icons-react';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { ProtocolDeedWithTemplates, ProtocolTemplateSummary } from '@/mantine/context/BlocknoteContext';\nimport type { ActionTypeFlowProps } from '../../../actionTypeUI';\nimport { parseJsonSafe, type PODSelectedProtocolTemplate } from '../types';\nimport { actionAlertStyles } from '../../../alertStyles';\n\ninterface ListDomainFlowsInputs {\n entity?: string;\n blueprintDid?: string;\n domainFlowsSubspaceId?: string;\n includeEmpty?: boolean;\n}\n\nfunction templateSelectionKey(protocolDid: string, template: Pick<ProtocolTemplateSummary, 'sourceRoomId'>): string {\n return `${protocolDid}::${template.sourceRoomId}`;\n}\n\nfunction getInitialSelection(output: Record<string, any> | undefined): Set<string> {\n const selected = new Set<string>();\n const selectedTemplates = Array.isArray(output?.selectedProtocolTemplates) ? output?.selectedProtocolTemplates : [];\n selectedTemplates.forEach((template: any) => {\n if (template?.protocolDid && template?.sourceRoomId) {\n selected.add(templateSelectionKey(String(template.protocolDid), { sourceRoomId: String(template.sourceRoomId) }));\n }\n });\n\n if (selected.size === 0) {\n const selectedFlowDids = Array.isArray(output?.selectedFlowDids) ? output?.selectedFlowDids : [];\n selectedFlowDids.forEach((sourceRoomId: unknown) => {\n if (sourceRoomId) selected.add(String(sourceRoomId));\n });\n }\n return selected;\n}\n\nfunction isTemplateSelected(selected: Set<string>, protocolDid: string, template: ProtocolTemplateSummary): boolean {\n return selected.has(templateSelectionKey(protocolDid, template)) || selected.has(template.sourceRoomId);\n}\n\nfunction buildSelectedTemplates(protocols: ProtocolDeedWithTemplates[], selected: Set<string>): PODSelectedProtocolTemplate[] {\n return protocols.flatMap((protocol) =>\n protocol.templates\n .filter((template) => isTemplateSelected(selected, protocol.protocolDid, template))\n .map((template) => ({\n protocolDid: protocol.protocolDid,\n protocolName: protocol.name,\n sourceRoomId: template.sourceRoomId,\n sourceLabel: template.label,\n ...(template.path ? { path: template.path } : {}),\n }))\n );\n}\n\nfunction makeFetchKey(params: ListDomainFlowsInputs, entityDid: string): string {\n return JSON.stringify({\n entityDid: entityDid || '',\n domainFlowsSubspaceId: params.domainFlowsSubspaceId || '',\n includeEmpty: !!params.includeEmpty,\n });\n}\n\nfunction protocolsEqual(a: ProtocolDeedWithTemplates, b: ProtocolDeedWithTemplates): boolean {\n return JSON.stringify(a) === JSON.stringify(b);\n}\n\nfunction mergeProtocolDelta(current: ProtocolDeedWithTemplates[], next: ProtocolDeedWithTemplates[]): ProtocolDeedWithTemplates[] {\n const nextByDid = new Map(next.map((protocol) => [protocol.protocolDid, protocol]));\n const merged = current\n .filter((protocol) => nextByDid.has(protocol.protocolDid))\n .map((protocol) => {\n const nextProtocol = nextByDid.get(protocol.protocolDid)!;\n return protocolsEqual(protocol, nextProtocol) ? protocol : nextProtocol;\n });\n\n const currentDids = new Set(current.map((protocol) => protocol.protocolDid));\n next.forEach((protocol) => {\n if (!currentDids.has(protocol.protocolDid)) merged.push(protocol);\n });\n return merged;\n}\n\n/**\n * Flow-mode UI for ListDomainFlows.\n *\n * Lists protocol deeds with available flow templates from the host handler.\n * Users select templates across multiple deeds; the confirmed output is later\n * consumed by qi/domain.sign after the POD has been instantiated.\n */\nexport const ListDomainFlowsFlowDetail: React.FC<ActionTypeFlowProps> = ({ inputs, block, runtime, updateRuntime, isDisabled, executeAction }) => {\n const handlers = useBlocknoteHandlers();\n const parsed = parseJsonSafe<ListDomainFlowsInputs>(inputs, {});\n const entityDid = parsed.entity || parsed.blueprintDid || '';\n\n const [protocols, setProtocols] = useState<ProtocolDeedWithTemplates[]>([]);\n const [activeProtocolDid, setActiveProtocolDid] = useState<string>('');\n const [view, setView] = useState<'deeds' | 'templates'>('deeds');\n const [selected, setSelected] = useState<Set<string>>(() => getInitialSelection(runtime.output));\n const [loading, setLoading] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n const [confirming, setConfirming] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const cacheRef = useRef<Map<string, ProtocolDeedWithTemplates[]>>(new Map());\n const fetchedKeysRef = useRef<Set<string>>(new Set());\n\n const fetchKey = useMemo(() => makeFetchKey(parsed, entityDid), [entityDid, parsed.domainFlowsSubspaceId, parsed.includeEmpty]);\n\n useEffect(() => {\n setSelected(getInitialSelection(runtime.output));\n }, [runtime.output?.selectedProtocolTemplates, runtime.output?.selectedFlowDids]);\n\n const loadProtocols = useCallback(\n async (mode: 'initial' | 'refresh' = 'initial') => {\n if (!handlers.listProtocolDeedsWithTemplates) {\n setError('Protocol template listing is not available.');\n return;\n }\n\n const cached = cacheRef.current.get(fetchKey);\n if (mode === 'initial' && cached) {\n setProtocols(cached);\n return;\n }\n if (mode === 'initial' && fetchedKeysRef.current.has(fetchKey)) return;\n\n if (mode === 'refresh') setRefreshing(true);\n else setLoading(true);\n setError(null);\n try {\n const result = await handlers.listProtocolDeedsWithTemplates({\n entityDid: entityDid || undefined,\n domainFlowsSubspaceId: parsed.domainFlowsSubspaceId || undefined,\n includeEmpty: parsed.includeEmpty,\n });\n const nextProtocols = result.protocols || [];\n fetchedKeysRef.current.add(fetchKey);\n cacheRef.current.set(fetchKey, nextProtocols);\n setProtocols((current) => mergeProtocolDelta(current, nextProtocols));\n setActiveProtocolDid((current) => (current && nextProtocols.some((protocol) => protocol.protocolDid === current) ? current : ''));\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load protocol templates');\n } finally {\n setLoading(false);\n setRefreshing(false);\n }\n },\n [entityDid, fetchKey, handlers, parsed.domainFlowsSubspaceId, parsed.includeEmpty]\n );\n\n useEffect(() => {\n loadProtocols('initial');\n }, [loadProtocols]);\n\n const activeProtocol = useMemo(() => protocols.find((protocol) => protocol.protocolDid === activeProtocolDid) || null, [activeProtocolDid, protocols]);\n const selectedTemplates = useMemo(() => buildSelectedTemplates(protocols, selected), [protocols, selected]);\n const selectedProtocolCount = useMemo(() => new Set(selectedTemplates.map((template) => template.protocolDid)).size, [selectedTemplates]);\n\n const openTemplates = useCallback((protocolDid: string) => {\n setActiveProtocolDid(protocolDid);\n setView('templates');\n }, []);\n\n const goBackToDeeds = useCallback(() => {\n setView('deeds');\n setActiveProtocolDid('');\n }, []);\n\n const setProtocolTemplatesSelected = useCallback((protocol: ProtocolDeedWithTemplates, checked: boolean) => {\n setSelected((prev) => {\n const next = new Set(prev);\n protocol.templates.forEach((template) => {\n const key = templateSelectionKey(protocol.protocolDid, template);\n if (checked && !template.alreadyImported) next.add(key);\n else next.delete(key);\n });\n return next;\n });\n }, []);\n\n const toggleTemplate = useCallback((protocolDid: string, template: ProtocolTemplateSummary, checked: boolean) => {\n const key = templateSelectionKey(protocolDid, template);\n setSelected((prev) => {\n const next = new Set(prev);\n next.delete(template.sourceRoomId);\n if (checked) next.add(key);\n else next.delete(key);\n return next;\n });\n }, []);\n\n const handleConfirm = useCallback(async () => {\n const selectedProtocolTemplates = buildSelectedTemplates(protocols, selected);\n const selectedFlowDids = selectedProtocolTemplates.map((template) => template.sourceRoomId);\n const flowTemplateConfig = {\n selectedTemplates: selectedProtocolTemplates,\n templateCount: selectedProtocolTemplates.length,\n protocolCount: new Set(selectedProtocolTemplates.map((template) => template.protocolDid)).size,\n };\n\n setConfirming(true);\n setError(null);\n try {\n if (executeAction) {\n const outcome = await executeAction({\n runtimeInputs: {\n selectedProtocolTemplates,\n selectedFlowDids,\n },\n });\n if (!outcome.success) throw new Error(outcome.error || 'Failed to confirm flow templates');\n } else {\n updateRuntime({\n state: 'completed',\n executedAt: Date.now(),\n output: { selectedProtocolTemplates, selectedFlowDids, flowTemplateConfig },\n });\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to confirm flow templates');\n } finally {\n setConfirming(false);\n }\n }, [executeAction, protocols, selected, updateRuntime]);\n\n const renderTemplate = (protocol: ProtocolDeedWithTemplates, template: ProtocolTemplateSummary) => {\n const checked = isTemplateSelected(selected, protocol.protocolDid, template);\n const disabled = isDisabled || !!template.alreadyImported;\n\n return (\n <Box\n key={template.sourceRoomId}\n style={{\n padding: '10px 12px',\n borderRadius: 8,\n border: checked ? '1px solid var(--mantine-color-blue-5)' : '1px solid var(--mantine-color-dark-4)',\n backgroundColor: checked ? 'var(--mantine-color-dark-6)' : 'var(--mantine-color-dark-7)',\n }}\n >\n <Group wrap=\"nowrap\" gap=\"sm\" align=\"center\">\n <Checkbox checked={checked} disabled={disabled} onChange={(event) => toggleTemplate(protocol.protocolDid, template, event.currentTarget.checked)} />\n <Stack gap={2} style={{ flex: 1, minWidth: 0 }}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <Text fw={500} size=\"sm\" lineClamp={1}>\n {template.label}\n </Text>\n {template.alreadyImported && (\n <Badge size=\"xs\" color=\"gray\" variant=\"light\">\n imported\n </Badge>\n )}\n </Group>\n <Text size=\"xs\" c=\"dimmed\" lineClamp={1} ff=\"monospace\">\n {template.path || template.sourceRoomId}\n </Text>\n </Stack>\n </Group>\n </Box>\n );\n };\n\n return (\n <Stack gap=\"md\">\n <Stack gap={2}>\n <Text fw={600}>{block?.props?.title || 'Linked Flows'}</Text>\n <Text size=\"sm\" c=\"dimmed\">\n {block?.props?.description || 'Choose flow templates from protocol deeds. You can select templates across multiple deeds.'}\n </Text>\n </Stack>\n\n {loading && (\n <Group justify=\"center\" py=\"sm\">\n <Loader size=\"sm\" />\n <Text size=\"sm\" c=\"dimmed\">\n Loading protocol templates...\n </Text>\n </Group>\n )}\n\n {error && (\n <Alert icon={<IconAlertCircle size={16} />} color=\"red\" styles={actionAlertStyles}>\n <Text size=\"sm\">{error}</Text>\n </Alert>\n )}\n\n {!loading && !error && protocols.length === 0 && (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n No protocol deeds with templates were found.\n </Text>\n )}\n\n {!loading && !error && protocols.length > 0 && view === 'deeds' && (\n <Stack gap=\"xs\">\n <Group justify=\"space-between\" gap=\"sm\">\n <Text size=\"xs\" fw={600} c=\"dimmed\">\n PROTOCOL DEEDS\n </Text>\n <Tooltip label=\"Refresh protocol deeds\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={() => loadProtocols('refresh')} loading={refreshing} disabled={isDisabled}>\n <IconRefresh size={16} />\n </ActionIcon>\n </Tooltip>\n </Group>\n\n {protocols.map((protocol) => {\n const selectedCount = protocol.templates.filter((template) => isTemplateSelected(selected, protocol.protocolDid, template)).length;\n return (\n <Box\n key={protocol.protocolDid}\n role=\"button\"\n tabIndex={0}\n onClick={() => openTemplates(protocol.protocolDid)}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') openTemplates(protocol.protocolDid);\n }}\n style={{\n cursor: 'pointer',\n padding: '12px 14px',\n borderRadius: 8,\n border: '1px solid var(--mantine-color-dark-4)',\n backgroundColor: 'var(--mantine-color-dark-7)',\n }}\n >\n <Stack gap={6}>\n <Group gap=\"xs\" wrap=\"nowrap\">\n <IconFolders size={16} color=\"var(--mantine-color-blue-4)\" />\n <Text size=\"sm\" fw={500} lineClamp={1}>\n {protocol.name}\n </Text>\n </Group>\n {protocol.description && (\n <Text size=\"xs\" c=\"dimmed\" lineClamp={2}>\n {protocol.description}\n </Text>\n )}\n <Group gap=\"xs\">\n <Badge size=\"xs\" color=\"gray\" variant=\"light\">\n {protocol.templates.length} template{protocol.templates.length === 1 ? '' : 's'}\n </Badge>\n {selectedCount > 0 && (\n <Badge size=\"xs\" color=\"blue\" variant=\"light\">\n {selectedCount} selected\n </Badge>\n )}\n {protocol.importedCount ? (\n <Badge size=\"xs\" color=\"gray\" variant=\"dot\">\n {protocol.importedCount} imported\n </Badge>\n ) : null}\n </Group>\n </Stack>\n </Box>\n );\n })}\n </Stack>\n )}\n\n {!loading && !error && view === 'templates' && activeProtocol && (\n <Stack gap=\"xs\">\n <Group justify=\"space-between\" gap=\"sm\">\n <Group gap=\"xs\" style={{ minWidth: 0 }}>\n <Tooltip label=\"Back to protocol deeds\" withArrow>\n <ActionIcon variant=\"subtle\" size=\"sm\" onClick={goBackToDeeds}>\n <IconArrowLeft size={16} />\n </ActionIcon>\n </Tooltip>\n <IconTemplate size={16} color=\"var(--mantine-color-blue-4)\" />\n <Text size=\"xs\" fw={600} c=\"dimmed\" lineClamp={1}>\n {activeProtocol.name}\n </Text>\n </Group>\n <Group gap=\"xs\">\n <Badge size=\"xs\" color=\"blue\" variant=\"light\">\n {activeProtocol.templates.filter((template) => isTemplateSelected(selected, activeProtocol.protocolDid, template)).length} selected\n </Badge>\n <Button\n size=\"compact-xs\"\n variant=\"subtle\"\n disabled={isDisabled || activeProtocol.templates.every((template) => template.alreadyImported)}\n onClick={() => setProtocolTemplatesSelected(activeProtocol, true)}\n >\n Select all\n </Button>\n <Button\n size=\"compact-xs\"\n variant=\"subtle\"\n disabled={isDisabled || activeProtocol.templates.every((template) => !isTemplateSelected(selected, activeProtocol.protocolDid, template))}\n onClick={() => setProtocolTemplatesSelected(activeProtocol, false)}\n >\n Clear\n </Button>\n </Group>\n </Group>\n\n {activeProtocol.description && (\n <Text size=\"xs\" c=\"dimmed\" lineClamp={2}>\n {activeProtocol.description}\n </Text>\n )}\n\n {activeProtocol.templates.length > 0 ? (\n <Stack gap=\"xs\">{activeProtocol.templates.map((template) => renderTemplate(activeProtocol, template))}</Stack>\n ) : (\n <Text size=\"sm\" c=\"dimmed\" ta=\"center\" py=\"sm\">\n This protocol deed has no templates.\n </Text>\n )}\n </Stack>\n )}\n\n {runtime.state === 'completed' && !error && (\n <Alert icon={<IconCheck size={16} />} color=\"green\" styles={actionAlertStyles}>\n <Text size=\"sm\">\n {selectedTemplates.length} template{selectedTemplates.length === 1 ? '' : 's'} confirmed across {selectedProtocolCount} protocol deed\n {selectedProtocolCount === 1 ? '' : 's'}.\n </Text>\n </Alert>\n )}\n\n <Button onClick={handleConfirm} disabled={isDisabled || loading || confirming || !!error} loading={confirming} variant={runtime.state === 'completed' ? 'outline' : 'filled'}>\n {runtime.state === 'completed' ? 'Update Template Selection' : 'Confirm Templates'}\n </Button>\n </Stack>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseLoadBatchesInputs,
|
|
3
|
+
serializeLoadBatchesInputs
|
|
4
|
+
} from "./chunk-H5E46IIS.js";
|
|
5
|
+
import {
|
|
6
|
+
BaseTextInput
|
|
7
|
+
} from "./chunk-WO7V6ZNC.js";
|
|
8
|
+
|
|
9
|
+
// src/mantine/blocks/action/actionTypes/carbon/loadBatches/LoadBatchesConfig.tsx
|
|
10
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
11
|
+
import { Stack, Text } from "@mantine/core";
|
|
12
|
+
var LoadBatchesConfig = ({ inputs, onInputsChange }) => {
|
|
13
|
+
const [local, setLocal] = useState(() => parseLoadBatchesInputs(inputs));
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
setLocal(parseLoadBatchesInputs(inputs));
|
|
16
|
+
}, [inputs]);
|
|
17
|
+
const update = useCallback(
|
|
18
|
+
(patch) => {
|
|
19
|
+
const updated = { ...local, ...patch };
|
|
20
|
+
setLocal(updated);
|
|
21
|
+
onInputsChange(serializeLoadBatchesInputs(updated));
|
|
22
|
+
},
|
|
23
|
+
[local, onInputsChange]
|
|
24
|
+
);
|
|
25
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "lg" }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600 }, "Load Carbon Batches"), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Reads the wallet's CARBON batches and reconciles harvestable vs. retireable credits. Downstream Harvest/Retire blocks reference this block's output. Leave the address blank to use the connected wallet, or reference an upstream block with the ", "{{blockId.output.address}}", " pattern.")), /* @__PURE__ */ React.createElement(
|
|
26
|
+
BaseTextInput,
|
|
27
|
+
{
|
|
28
|
+
label: "Owner address",
|
|
29
|
+
placeholder: "{{walletBlock.output.address}} (or leave blank for the connected wallet)",
|
|
30
|
+
value: local.ownerAddress || "",
|
|
31
|
+
onChange: (event) => update({ ownerAddress: event.currentTarget.value })
|
|
32
|
+
}
|
|
33
|
+
));
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
LoadBatchesConfig
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=LoadBatchesConfig-IMODIWRT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/carbon/loadBatches/LoadBatchesConfig.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { Stack, Text } from '@mantine/core';\nimport BaseTextInput from '@/mantine/components/Base/BaseTextInput';\nimport type { ActionTypeConfigProps } from '../../../actionTypeUI';\nimport { parseLoadBatchesInputs, serializeLoadBatchesInputs, type LoadBatchesInputs } from './types';\n\nexport const LoadBatchesConfig: React.FC<ActionTypeConfigProps> = ({ inputs, onInputsChange }) => {\n const [local, setLocal] = useState<LoadBatchesInputs>(() => parseLoadBatchesInputs(inputs));\n\n useEffect(() => {\n setLocal(parseLoadBatchesInputs(inputs));\n }, [inputs]);\n\n const update = useCallback(\n (patch: Partial<LoadBatchesInputs>) => {\n const updated = { ...local, ...patch };\n setLocal(updated);\n onInputsChange(serializeLoadBatchesInputs(updated));\n },\n [local, onInputsChange]\n );\n\n return (\n <Stack gap=\"lg\">\n <Stack gap=\"xs\">\n <Text size=\"sm\" fw={600}>\n Load Carbon Batches\n </Text>\n <Text size=\"xs\" c=\"dimmed\">\n Reads the wallet's CARBON batches and reconciles harvestable vs. retireable credits. Downstream Harvest/Retire blocks reference this block's output. Leave the\n address blank to use the connected wallet, or reference an upstream block with the {'{{blockId.output.address}}'} pattern.\n </Text>\n </Stack>\n\n <BaseTextInput\n label=\"Owner address\"\n placeholder=\"{{walletBlock.output.address}} (or leave blank for the connected wallet)\"\n value={local.ownerAddress || ''}\n onChange={(event) => update({ ownerAddress: event.currentTarget.value })}\n />\n </Stack>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,OAAO,SAAS,aAAa,WAAW,gBAAgB;AACxD,SAAS,OAAO,YAAY;AAKrB,IAAM,oBAAqD,CAAC,EAAE,QAAQ,eAAe,MAAM;AAChG,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA4B,MAAM,uBAAuB,MAAM,CAAC;AAE1F,YAAU,MAAM;AACd,aAAS,uBAAuB,MAAM,CAAC;AAAA,EACzC,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,SAAS;AAAA,IACb,CAAC,UAAsC;AACrC,YAAM,UAAU,EAAE,GAAG,OAAO,GAAG,MAAM;AACrC,eAAS,OAAO;AAChB,qBAAe,2BAA2B,OAAO,CAAC;AAAA,IACpD;AAAA,IACA,CAAC,OAAO,cAAc;AAAA,EACxB;AAEA,SACE,oCAAC,SAAM,KAAI,QACT,oCAAC,SAAM,KAAI,QACT,oCAAC,QAAK,MAAK,MAAK,IAAI,OAAK,qBAEzB,GACA,oCAAC,QAAK,MAAK,MAAK,GAAE,YAAS,sPAE2D,8BAA6B,WACnH,CACF,GAEA;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,aAAY;AAAA,MACZ,OAAO,MAAM,gBAAgB;AAAA,MAC7B,UAAU,CAAC,UAAU,OAAO,EAAE,cAAc,MAAM,cAAc,MAAM,CAAC;AAAA;AAAA,EACzE,CACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import {
|
|
2
|
+
parseLoadBatchesInputs
|
|
3
|
+
} from "./chunk-H5E46IIS.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 {
|
|
21
|
+
useBlocknoteHandlers
|
|
22
|
+
} from "./chunk-4DGCCXD6.js";
|
|
23
|
+
import "./chunk-7W7UUUIE.js";
|
|
24
|
+
import "./chunk-TS2LNBF2.js";
|
|
25
|
+
|
|
26
|
+
// src/mantine/blocks/action/actionTypes/carbon/loadBatches/LoadBatchesFlowDetail.tsx
|
|
27
|
+
import React, { useCallback, useEffect, useMemo, useRef } from "react";
|
|
28
|
+
import { Button, Group, Loader, Stack, Text } from "@mantine/core";
|
|
29
|
+
import { IconAlertCircle, IconLeaf } from "@tabler/icons-react";
|
|
30
|
+
var LoadBatchesFlowDetail = ({ inputs, editor, block, runtime, updateRuntime, isDisabled, executeAction }) => {
|
|
31
|
+
const handlers = useBlocknoteHandlers();
|
|
32
|
+
const parsed = useMemo(() => parseLoadBatchesInputs(inputs), [inputs]);
|
|
33
|
+
const editorDocument = editor?.document || [];
|
|
34
|
+
const runtimeReader = useRunRuntimeReader(editor);
|
|
35
|
+
const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);
|
|
36
|
+
const connectedAddress = useMemo(() => {
|
|
37
|
+
try {
|
|
38
|
+
return handlers?.getCurrentUser?.()?.address || "";
|
|
39
|
+
} catch {
|
|
40
|
+
return "";
|
|
41
|
+
}
|
|
42
|
+
}, [handlers]);
|
|
43
|
+
const ownerAddress = useMemo(() => {
|
|
44
|
+
const configured = resolveReferences(parsed.ownerAddress || "", editorDocument, resolveOpts).trim();
|
|
45
|
+
return configured || connectedAddress;
|
|
46
|
+
}, [parsed.ownerAddress, editorDocument, resolveOpts, connectedAddress]);
|
|
47
|
+
const inputsReady = !!ownerAddress;
|
|
48
|
+
const harvestableBatches = Array.isArray(runtime.output?.harvestableBatches) ? runtime.output.harvestableBatches : [];
|
|
49
|
+
const retireableBatches = Array.isArray(runtime.output?.retireableBatches) ? runtime.output.retireableBatches : [];
|
|
50
|
+
const totalClaimable = runtime.output?.totalClaimable ?? 0;
|
|
51
|
+
const totalAvailable = runtime.output?.totalAvailable ?? 0;
|
|
52
|
+
const totalRetired = runtime.output?.totalRetired ?? 0;
|
|
53
|
+
const loaded = Array.isArray(runtime.output?.harvestableBatches);
|
|
54
|
+
const isRunning = runtime.state === "running";
|
|
55
|
+
const isCompleted = runtime.state === "completed" && loaded;
|
|
56
|
+
const isStale = runtime.state === "completed" && !loaded;
|
|
57
|
+
const isFailed = runtime.state === "failed";
|
|
58
|
+
const errorMessage = runtime.error?.message || null;
|
|
59
|
+
const handleExecute = useCallback(async () => {
|
|
60
|
+
if (isDisabled || isRunning) return;
|
|
61
|
+
if (!executeAction) {
|
|
62
|
+
updateRuntime({ state: "failed", error: { message: "Shared action executor is unavailable", at: Date.now() } });
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (!inputsReady) return;
|
|
66
|
+
console.log("[carbon.loadBatches] starting execution", { ownerAddress });
|
|
67
|
+
try {
|
|
68
|
+
const outcome = await executeAction({ runtimeInputs: { ownerAddress } });
|
|
69
|
+
if (!outcome.success) {
|
|
70
|
+
throw new Error(outcome.error || "Failed to load carbon batches");
|
|
71
|
+
}
|
|
72
|
+
const payload = outcome.output;
|
|
73
|
+
if (!Array.isArray(payload?.harvestableBatches)) {
|
|
74
|
+
throw new Error("carbon.loadBatches returned no batch data. Check the [carbon:loadBatches] handler logs.");
|
|
75
|
+
}
|
|
76
|
+
console.log("[carbon.loadBatches] success", { payload });
|
|
77
|
+
} catch (err) {
|
|
78
|
+
const message = err instanceof Error ? err.message : "Failed to load carbon batches";
|
|
79
|
+
console.error("[carbon.loadBatches] execution failed", { message, err });
|
|
80
|
+
updateRuntime({ state: "failed", error: { message, at: Date.now() } });
|
|
81
|
+
}
|
|
82
|
+
}, [executeAction, isDisabled, isRunning, inputsReady, ownerAddress, updateRuntime]);
|
|
83
|
+
const hasAutoExecutedRef = useRef(false);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (hasAutoExecutedRef.current) return;
|
|
86
|
+
if (isDisabled || isRunning || isCompleted || isFailed) return;
|
|
87
|
+
if (runtime.state === "needs_verification") return;
|
|
88
|
+
if (!inputsReady) return;
|
|
89
|
+
hasAutoExecutedRef.current = true;
|
|
90
|
+
handleExecute();
|
|
91
|
+
}, [inputsReady, isDisabled, isRunning, isCompleted, isFailed, runtime.state, handleExecute]);
|
|
92
|
+
const handleRetry = useCallback(() => {
|
|
93
|
+
updateRuntime({ state: "idle", error: void 0, output: {} });
|
|
94
|
+
hasAutoExecutedRef.current = false;
|
|
95
|
+
}, [updateRuntime]);
|
|
96
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, /* @__PURE__ */ React.createElement(Stack, { gap: 2 }, /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(IconLeaf, { size: 16 }), /* @__PURE__ */ React.createElement(Text, { fw: 600 }, block?.props?.title || "Load Carbon Batches")), /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed" }, block?.props?.description || "Reconcile harvestable and retireable CARBON credits for this wallet.")), !isRunning && !isCompleted && !isStale && !isFailed && !inputsReady && /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Loader, { size: 14 }), /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed" }, "Waiting for a connected wallet address...")), isRunning && /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Loader, { size: 14 }), /* @__PURE__ */ React.createElement(Text, { size: "sm" }, "Loading carbon batches...")), isCompleted && /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Group, { gap: "lg" }, /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Harvestable"), /* @__PURE__ */ React.createElement(Text, { fw: 600 }, totalClaimable, " ", /* @__PURE__ */ React.createElement(Text, { span: true, size: "xs", c: "dimmed" }, `(${harvestableBatches.length} batches)`))), /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Available"), /* @__PURE__ */ React.createElement(Text, { fw: 600 }, totalAvailable, " ", /* @__PURE__ */ React.createElement(Text, { span: true, size: "xs", c: "dimmed" }, `(${retireableBatches.length} batches)`))), /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Retired"), /* @__PURE__ */ React.createElement(Text, { fw: 600 }, totalRetired))), /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(Button, { variant: "subtle", size: "xs", onClick: handleRetry, disabled: isDisabled }, "Refresh"))), isStale && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }), color: "yellow", title: "Inconsistent State" }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, "Block was marked completed but no batch data was recorded. This is stale state \u2014 reset and re-run."), /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(Button, { variant: "outline", size: "xs", onClick: handleRetry }, "Reset"), /* @__PURE__ */ React.createElement(Button, { variant: "filled", size: "xs", onClick: handleExecute, disabled: !inputsReady }, "Force Run Now")))), isFailed && errorMessage && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }), color: "red", styles: actionAlertStyles }, errorMessage), isFailed && /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(Button, { variant: "outline", onClick: handleRetry }, "Try Again")));
|
|
97
|
+
};
|
|
98
|
+
export {
|
|
99
|
+
LoadBatchesFlowDetail
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=LoadBatchesFlowDetail-GB24T76O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/carbon/loadBatches/LoadBatchesFlowDetail.tsx"],"sourcesContent":["import { useRunRuntimeReader } from '@/mantine/hooks/useRunRuntimeReader';\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react';\nimport { Button, Group, Loader, Stack, Text } from '@mantine/core';\nimport { DismissibleAlert as Alert } from '@/mantine/components/Base/DismissibleAlert';\nimport { IconAlertCircle, IconLeaf } from '@tabler/icons-react';\nimport { resolveReferences } from '@/mantine/utils/referenceResolver';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { ActionTypeFlowProps } from '../../../actionTypeUI';\nimport type { CarbonHarvestableBatch, CarbonRetireableBatch } from '@/core/lib/actionRegistry/actions/carbon/types';\nimport { actionAlertStyles } from '../../../alertStyles';\nimport { parseLoadBatchesInputs } from './types';\n\nexport const LoadBatchesFlowDetail: React.FC<ActionTypeFlowProps> = ({ inputs, editor, block, runtime, updateRuntime, isDisabled, executeAction }) => {\n const handlers = useBlocknoteHandlers();\n const parsed = useMemo(() => parseLoadBatchesInputs(inputs), [inputs]);\n const editorDocument = editor?.document || [];\n const runtimeReader = useRunRuntimeReader(editor);\n const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);\n\n // Resolve the configured owner address; fall back to the connected wallet.\n const connectedAddress = useMemo(() => {\n try {\n return handlers?.getCurrentUser?.()?.address || '';\n } catch {\n return '';\n }\n }, [handlers]);\n const ownerAddress = useMemo(() => {\n const configured = resolveReferences(parsed.ownerAddress || '', editorDocument, resolveOpts).trim();\n return configured || connectedAddress;\n }, [parsed.ownerAddress, editorDocument, resolveOpts, connectedAddress]);\n const inputsReady = !!ownerAddress;\n\n // Derived state — read directly from runtime (the Y.Map). No local mirror.\n // A successful load always returns the five fields; `harvestableBatches` being\n // an array is our proof. Empty arrays (a wallet with no credits) is a valid\n // completed state — only a `completed` with no arrays is stale.\n const harvestableBatches: CarbonHarvestableBatch[] = Array.isArray(runtime.output?.harvestableBatches) ? runtime.output.harvestableBatches : [];\n const retireableBatches: CarbonRetireableBatch[] = Array.isArray(runtime.output?.retireableBatches) ? runtime.output.retireableBatches : [];\n const totalClaimable: number = runtime.output?.totalClaimable ?? 0;\n const totalAvailable: number = runtime.output?.totalAvailable ?? 0;\n const totalRetired: number = runtime.output?.totalRetired ?? 0;\n const loaded = Array.isArray(runtime.output?.harvestableBatches);\n const isRunning = runtime.state === 'running';\n const isCompleted = runtime.state === 'completed' && loaded;\n const isStale = runtime.state === 'completed' && !loaded;\n const isFailed = runtime.state === 'failed';\n const errorMessage = runtime.error?.message || null;\n\n const handleExecute = 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 (!inputsReady) return;\n\n console.log('[carbon.loadBatches] starting execution', { ownerAddress });\n try {\n const outcome = await executeAction({ runtimeInputs: { ownerAddress } });\n if (!outcome.success) {\n throw new Error(outcome.error || 'Failed to load carbon batches');\n }\n const payload = outcome.output as { harvestableBatches?: unknown } | undefined;\n if (!Array.isArray(payload?.harvestableBatches)) {\n throw new Error('carbon.loadBatches returned no batch data. Check the [carbon:loadBatches] handler logs.');\n }\n console.log('[carbon.loadBatches] success', { payload });\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Failed to load carbon batches';\n console.error('[carbon.loadBatches] execution failed', { message, err });\n updateRuntime({ state: 'failed', error: { message, at: Date.now() } });\n }\n }, [executeAction, isDisabled, isRunning, inputsReady, ownerAddress, updateRuntime]);\n\n // Auto-execute once when the owner address resolves. The ref guards against\n // duplicate fires when handleExecute changes identity.\n const hasAutoExecutedRef = useRef(false);\n useEffect(() => {\n if (hasAutoExecutedRef.current) return;\n if (isDisabled || isRunning || isCompleted || isFailed) return;\n if (runtime.state === 'needs_verification') return; // ran-but-unproven — never auto-retry (H1)\n if (!inputsReady) return;\n hasAutoExecutedRef.current = true;\n handleExecute();\n }, [inputsReady, isDisabled, isRunning, isCompleted, isFailed, runtime.state, handleExecute]);\n\n const handleRetry = useCallback(() => {\n updateRuntime({ state: 'idle', error: undefined, output: {} });\n hasAutoExecutedRef.current = false;\n }, [updateRuntime]);\n\n return (\n <Stack gap=\"md\">\n <Stack gap={2}>\n <Group gap=\"xs\">\n <IconLeaf size={16} />\n <Text fw={600}>{block?.props?.title || 'Load Carbon Batches'}</Text>\n </Group>\n <Text size=\"sm\" c=\"dimmed\">\n {block?.props?.description || 'Reconcile harvestable and retireable CARBON credits for this wallet.'}\n </Text>\n </Stack>\n\n {!isRunning && !isCompleted && !isStale && !isFailed && !inputsReady && (\n <Group gap=\"xs\">\n <Loader size={14} />\n <Text size=\"sm\" c=\"dimmed\">\n Waiting for a connected wallet address...\n </Text>\n </Group>\n )}\n\n {isRunning && (\n <Group gap=\"xs\">\n <Loader size={14} />\n <Text size=\"sm\">Loading carbon batches...</Text>\n </Group>\n )}\n\n {isCompleted && (\n <Stack gap=\"xs\">\n <Group gap=\"lg\">\n <Stack gap={0}>\n <Text size=\"xs\" c=\"dimmed\">\n Harvestable\n </Text>\n <Text fw={600}>\n {totalClaimable} <Text span size=\"xs\" c=\"dimmed\">{`(${harvestableBatches.length} batches)`}</Text>\n </Text>\n </Stack>\n <Stack gap={0}>\n <Text size=\"xs\" c=\"dimmed\">\n Available\n </Text>\n <Text fw={600}>\n {totalAvailable} <Text span size=\"xs\" c=\"dimmed\">{`(${retireableBatches.length} batches)`}</Text>\n </Text>\n </Stack>\n <Stack gap={0}>\n <Text size=\"xs\" c=\"dimmed\">\n Retired\n </Text>\n <Text fw={600}>{totalRetired}</Text>\n </Stack>\n </Group>\n <Group>\n <Button variant=\"subtle\" size=\"xs\" onClick={handleRetry} disabled={isDisabled}>\n Refresh\n </Button>\n </Group>\n </Stack>\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 batch data was recorded. This is stale state — reset and re-run.</Text>\n <Group>\n <Button variant=\"outline\" size=\"xs\" onClick={handleRetry}>\n Reset\n </Button>\n <Button variant=\"filled\" size=\"xs\" onClick={handleExecute} disabled={!inputsReady}>\n Force Run Now\n </Button>\n </Group>\n </Stack>\n </Alert>\n )}\n\n {isFailed && errorMessage && (\n <Alert icon={<IconAlertCircle size={16} />} color=\"red\" styles={actionAlertStyles}>\n {errorMessage}\n </Alert>\n )}\n {isFailed && (\n <Group>\n <Button variant=\"outline\" onClick={handleRetry}>\n Try Again\n </Button>\n </Group>\n )}\n </Stack>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BaseSelect
|
|
3
|
+
} from "./chunk-4NAFQF6V.js";
|
|
4
|
+
import {
|
|
5
|
+
BaseAvatar
|
|
6
|
+
} from "./chunk-XVA7QRVH.js";
|
|
7
|
+
import {
|
|
8
|
+
BaseTextArea
|
|
9
|
+
} from "./chunk-ZDNW6VQG.js";
|
|
10
|
+
import {
|
|
11
|
+
useBlocknoteHandlers
|
|
12
|
+
} from "./chunk-4DGCCXD6.js";
|
|
13
|
+
import "./chunk-7W7UUUIE.js";
|
|
14
|
+
import "./chunk-TS2LNBF2.js";
|
|
15
|
+
|
|
16
|
+
// src/mantine/blocks/action/actionTypes/matrixDm/MatrixDmConfig.tsx
|
|
17
|
+
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
18
|
+
import { Flex, Stack, Text } from "@mantine/core";
|
|
19
|
+
|
|
20
|
+
// src/mantine/blocks/action/actionTypes/matrixDm/types.ts
|
|
21
|
+
function parseMatrixDmInputs(json) {
|
|
22
|
+
try {
|
|
23
|
+
const parsed = typeof json === "string" ? JSON.parse(json) : json;
|
|
24
|
+
return {
|
|
25
|
+
targetDid: parsed?.targetDid || "",
|
|
26
|
+
message: parsed?.message || ""
|
|
27
|
+
};
|
|
28
|
+
} catch {
|
|
29
|
+
return {
|
|
30
|
+
targetDid: "",
|
|
31
|
+
message: ""
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function serializeMatrixDmInputs(inputs) {
|
|
36
|
+
return JSON.stringify(inputs);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// src/mantine/blocks/action/actionTypes/matrixDm/MatrixDmConfig.tsx
|
|
40
|
+
var MatrixDmConfig = ({ inputs, onInputsChange, editor }) => {
|
|
41
|
+
const handlers = useBlocknoteHandlers();
|
|
42
|
+
const [local, setLocal] = useState(() => parseMatrixDmInputs(inputs));
|
|
43
|
+
const [roomMembers, setRoomMembers] = useState([]);
|
|
44
|
+
const [searchValue, setSearchValue] = useState("");
|
|
45
|
+
const roomId = editor?.getRoomId?.() || null;
|
|
46
|
+
const mx = editor?.getMatrixClient?.() || null;
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
setLocal(parseMatrixDmInputs(inputs));
|
|
49
|
+
}, [inputs]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
(async () => {
|
|
52
|
+
if (!roomId || !mx) return;
|
|
53
|
+
try {
|
|
54
|
+
const members = await handlers.getRoomMembers(roomId, mx);
|
|
55
|
+
setRoomMembers(members);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.error("MatrixDmConfig: Failed to fetch room members:", error);
|
|
58
|
+
}
|
|
59
|
+
})();
|
|
60
|
+
}, [roomId, mx]);
|
|
61
|
+
const update = useCallback(
|
|
62
|
+
(patch) => {
|
|
63
|
+
const updated = { ...local, ...patch };
|
|
64
|
+
setLocal(updated);
|
|
65
|
+
onInputsChange(serializeMatrixDmInputs(updated));
|
|
66
|
+
},
|
|
67
|
+
[local, onInputsChange]
|
|
68
|
+
);
|
|
69
|
+
const selectData = useMemo(() => {
|
|
70
|
+
return roomMembers.map((member) => ({
|
|
71
|
+
value: member.did,
|
|
72
|
+
label: member.name || member.did
|
|
73
|
+
}));
|
|
74
|
+
}, [roomMembers]);
|
|
75
|
+
const memberLookup = useMemo(() => {
|
|
76
|
+
const lookup = {};
|
|
77
|
+
roomMembers.forEach((member) => {
|
|
78
|
+
lookup[member.did] = member;
|
|
79
|
+
});
|
|
80
|
+
return lookup;
|
|
81
|
+
}, [roomMembers]);
|
|
82
|
+
const selectedMember = local.targetDid ? memberLookup[local.targetDid] : void 0;
|
|
83
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, /* @__PURE__ */ React.createElement(
|
|
84
|
+
BaseSelect,
|
|
85
|
+
{
|
|
86
|
+
label: "Recipient",
|
|
87
|
+
description: "Select a person from this flow or search by name",
|
|
88
|
+
placeholder: "Search for a recipient...",
|
|
89
|
+
searchable: true,
|
|
90
|
+
value: local.targetDid || null,
|
|
91
|
+
onChange: (value) => update({ targetDid: value || "" }),
|
|
92
|
+
searchValue,
|
|
93
|
+
onSearchChange: setSearchValue,
|
|
94
|
+
data: selectData,
|
|
95
|
+
clearable: true,
|
|
96
|
+
required: true,
|
|
97
|
+
renderOption: ({ option, checked }) => {
|
|
98
|
+
const member = memberLookup[option.value];
|
|
99
|
+
if (!member) return /* @__PURE__ */ React.createElement(Text, { size: "sm" }, option.label);
|
|
100
|
+
return /* @__PURE__ */ React.createElement(Flex, { align: "center", gap: "sm" }, /* @__PURE__ */ React.createElement(BaseAvatar, { src: member.src, did: member.did, size: 24 }), /* @__PURE__ */ React.createElement(Text, { size: "sm", c: checked ? "accent" : void 0 }, option.label));
|
|
101
|
+
},
|
|
102
|
+
leftSection: selectedMember ? /* @__PURE__ */ React.createElement(BaseAvatar, { src: selectedMember.src, did: selectedMember.did, size: 20, withCenter: true }) : null
|
|
103
|
+
}
|
|
104
|
+
), /* @__PURE__ */ React.createElement(
|
|
105
|
+
BaseTextArea,
|
|
106
|
+
{
|
|
107
|
+
label: "Message",
|
|
108
|
+
description: "The message to send as a direct message",
|
|
109
|
+
placeholder: "Enter the message to send...",
|
|
110
|
+
value: local.message,
|
|
111
|
+
onChange: (event) => update({ message: event.currentTarget.value }),
|
|
112
|
+
minRows: 3,
|
|
113
|
+
required: true
|
|
114
|
+
}
|
|
115
|
+
));
|
|
116
|
+
};
|
|
117
|
+
export {
|
|
118
|
+
MatrixDmConfig
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=MatrixDmConfig-NBII27CS.js.map
|