@ixo/editor 6.33.0 → 6.35.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-U2SX5M7F.js +365 -0
- package/dist/BidFlowDetail-U2SX5M7F.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-I4OQSHAB.js +641 -0
- package/dist/ClaimFlowDetail-I4OQSHAB.js.map +1 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
- package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
- package/dist/CollectionLifecycleFlowDetail-LQHKB227.js +647 -0
- package/dist/CollectionLifecycleFlowDetail-LQHKB227.js.map +1 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
- package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
- package/dist/CollectionUsersFlowDetail-LHXVCCPQ.js +1276 -0
- package/dist/CollectionUsersFlowDetail-LHXVCCPQ.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-2EXGNBYC.js +564 -0
- package/dist/EvaluateBidFlowDetail-2EXGNBYC.js.map +1 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
- package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
- package/dist/EvaluateClaimFlowDetail-QKHJVEDE.js +2237 -0
- package/dist/EvaluateClaimFlowDetail-QKHJVEDE.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-4TE6UCEB.js +83 -0
- package/dist/IdentityCreateFlowDetail-4TE6UCEB.js.map +1 -0
- package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
- package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
- package/dist/IidCreateFlowDetail-HPVZAHVY.js +57 -0
- package/dist/IidCreateFlowDetail-HPVZAHVY.js.map +1 -0
- package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
- package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
- package/dist/KycVerifyFlowDetail-FEU43HML.js +421 -0
- package/dist/KycVerifyFlowDetail-FEU43HML.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-MIBXUEKC.js +255 -0
- package/dist/OracleConfigureOracleFlowDetail-MIBXUEKC.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-HQU3UKEB.js +220 -0
- package/dist/OracleStoreSecretsAndConfigFlowDetail-HQU3UKEB.js.map +1 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
- package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
- package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js +197 -0
- package/dist/OracleStoreSecretsFlowDetail-5RXWQ3KA.js.map +1 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
- package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
- package/dist/ProposalCreateFlowDetail-2FCRCNYV.js +235 -0
- package/dist/ProposalCreateFlowDetail-2FCRCNYV.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-3TUYY4HK.js +20 -0
- package/dist/chunk-3TUYY4HK.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-5E6Z6JJN.js +4456 -0
- package/dist/chunk-5E6Z6JJN.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-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-F5GTFCYV.js +3333 -0
- package/dist/chunk-F5GTFCYV.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-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-JB6ASLUJ.js +315 -0
- package/dist/chunk-JB6ASLUJ.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-MZIBZ5FY.js +554 -0
- package/dist/chunk-MZIBZ5FY.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-XYXDY72K.js +27508 -0
- package/dist/chunk-XYXDY72K.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,83 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useBlocknoteHandlers
|
|
3
|
+
} from "./chunk-4DGCCXD6.js";
|
|
4
|
+
|
|
5
|
+
// src/mantine/blocks/action/actionTypes/evalRegister/pricing.ts
|
|
6
|
+
import { useEffect, useRef, useState } from "react";
|
|
7
|
+
var PRICING = {
|
|
8
|
+
/** Base fee per evaluated claim. */
|
|
9
|
+
baseUsd: 0.3,
|
|
10
|
+
/** Top-up per AI rule per claim. */
|
|
11
|
+
aiRuleUsd: 0.01,
|
|
12
|
+
/** Top-up per photo screened by fake-photo detection. */
|
|
13
|
+
photoUsd: 0.1
|
|
14
|
+
};
|
|
15
|
+
function usdLabel(usd) {
|
|
16
|
+
const cents = usd * 100;
|
|
17
|
+
const wholeCents = Math.abs(cents - Math.round(cents)) < 1e-6;
|
|
18
|
+
return `$${usd.toFixed(wholeCents ? 2 : 3)}`;
|
|
19
|
+
}
|
|
20
|
+
function billingNote(card, live) {
|
|
21
|
+
const estimate = live?.estimate;
|
|
22
|
+
if (!estimate || !Number.isFinite(estimate.cardUsd) || !Number.isFinite(estimate.ownerPaysUsd)) {
|
|
23
|
+
return `The billing engine charges for every claim it evaluates \u2014 ${usdLabel(card.baseUsd)} plus whatever the checks you turn on add. If your collection pays an on-chain evaluation fee, that fee covers the charge first; anything left is paid from your subscription credits.`;
|
|
24
|
+
}
|
|
25
|
+
if (estimate.ownerPaysUsd <= 0 && estimate.chainCreditUsd > 0) {
|
|
26
|
+
return "Your collection's on-chain evaluation fee covers the whole charge \u2014 nothing is taken from your subscription credits.";
|
|
27
|
+
}
|
|
28
|
+
if (estimate.chainCreditUsd > 0) {
|
|
29
|
+
return `Your collection's on-chain evaluation fee covers ${usdLabel(estimate.chainCreditUsd)} of each claim; the remaining ${usdLabel(estimate.ownerPaysUsd)} is paid from your subscription credits.`;
|
|
30
|
+
}
|
|
31
|
+
return "This collection pays no on-chain evaluation fee, so the full charge is paid from your subscription credits.";
|
|
32
|
+
}
|
|
33
|
+
function ownerPaysLine(live) {
|
|
34
|
+
const estimate = live?.estimate;
|
|
35
|
+
if (!estimate || !Number.isFinite(estimate.cardUsd) || !Number.isFinite(estimate.ownerPaysUsd)) return null;
|
|
36
|
+
const perClaim = `About ${usdLabel(estimate.cardUsd)} per claim`;
|
|
37
|
+
if (estimate.ownerPaysUsd <= 0) return `${perClaim} \u2014 your collection's evaluation payment covers it, so you pay nothing.`;
|
|
38
|
+
if (estimate.chainCreditUsd > 0) {
|
|
39
|
+
return `${perClaim} \u2014 your collection's evaluation payment covers ${usdLabel(estimate.chainCreditUsd)}, so you pay about ${usdLabel(estimate.ownerPaysUsd)}.`;
|
|
40
|
+
}
|
|
41
|
+
return `${perClaim} \u2014 your collection funds no evaluation payment, so you pay all of it.`;
|
|
42
|
+
}
|
|
43
|
+
function isUsableCard(card) {
|
|
44
|
+
return !!card && [card.baseUsd, card.aiRuleUsd, card.photoUsd].every((price) => typeof price === "number" && Number.isFinite(price));
|
|
45
|
+
}
|
|
46
|
+
function useEnginePricing(params) {
|
|
47
|
+
const { collectionId, evalEngineUrl } = params;
|
|
48
|
+
const handlers = useBlocknoteHandlers();
|
|
49
|
+
const handlersRef = useRef(handlers);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
handlersRef.current = handlers;
|
|
52
|
+
}, [handlers]);
|
|
53
|
+
const supported = typeof handlers.getEnginePricing === "function";
|
|
54
|
+
const [live, setLive] = useState(null);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!supported || !collectionId) {
|
|
57
|
+
setLive(null);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
let cancelled = false;
|
|
61
|
+
(async () => {
|
|
62
|
+
try {
|
|
63
|
+
const result = await handlersRef.current.getEnginePricing({ collectionId, evalEngineUrl });
|
|
64
|
+
if (!cancelled) setLive(result ?? null);
|
|
65
|
+
} catch (err) {
|
|
66
|
+
console.warn("[eval.register] getEnginePricing failed", err);
|
|
67
|
+
if (!cancelled) setLive(null);
|
|
68
|
+
}
|
|
69
|
+
})();
|
|
70
|
+
return () => {
|
|
71
|
+
cancelled = true;
|
|
72
|
+
};
|
|
73
|
+
}, [supported, collectionId, evalEngineUrl]);
|
|
74
|
+
return { card: isUsableCard(live?.rateCard) ? live.rateCard : PRICING, live };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export {
|
|
78
|
+
usdLabel,
|
|
79
|
+
billingNote,
|
|
80
|
+
ownerPaysLine,
|
|
81
|
+
useEnginePricing
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=chunk-ILSFU3WD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/evalRegister/pricing.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useBlocknoteHandlers, type EnginePricing, type EngineRateCard } from '@/mantine/context/BlocknoteContext';\n\n/**\n * Evaluation-engine check pricing (eval-dashboard spec §B.4) — the ONE place\n * every price the editor displays comes from. Prices display as USD fractions\n * (\"$0.30\"); the deduction happens in subscription credits, said once per\n * surface in plain words with NO figures (owner, 2026-07-18 — credit numbers\n * read inflated against small plans).\n *\n * **The engine, not this file, is the source of truth.** It serves the real\n * numbers publicly at `GET {evalEngineUrl}/v1/pricing?collectionId=…`\n * (per-claim billing guide §11), and prices differ **per relayer node** — a\n * collection on a partner node is priced off a different card than one on the\n * default. `useEnginePricing()` below reads that endpoint through the host and\n * is what the blocks render. The literals here are only the fallback shown when\n * no collection is chosen yet, the host wires no handler, or the read fails;\n * they mirror the engine's default (\"Partner Standard\") card seed and are kept\n * equal by review (no shared package — repo rule).\n */\nexport const PRICING = {\n /** Base fee per evaluated claim. */\n baseUsd: 0.3,\n /** Top-up per AI rule per claim. */\n aiRuleUsd: 0.01,\n /** Top-up per photo screened by fake-photo detection. */\n photoUsd: 0.1,\n} as const;\n\n/** The one payment note each pricing surface shows exactly once (§B.3). */\nexport const CREDITS_NOTE = 'Paid from your subscription credits.';\n\n/** \"$0.30\" — USD-fraction display; sub-cent prices keep a third decimal. */\nexport function usdLabel(usd: number): string {\n // Compare on rounded cents, not `usd * 100` exactly: live figures are\n // subtractions (card − chain credit), so 0.29 arrives as 28.999999999999996\n // cents and a strict equality would print \"$0.290\".\n const cents = usd * 100;\n const wholeCents = Math.abs(cents - Math.round(cents)) < 1e-6;\n return `$${usd.toFixed(wholeCents ? 2 : 3)}`;\n}\n\n/**\n * The plain-words \"where does the money come from\" explanation, in the reader's actual\n * situation once the engine has resolved their collection (billing guide §3): the on-chain\n * evaluation fee covers the charge first; whatever remains comes from subscription credits.\n * Three live states + the generic fallback while unresolved. Never a credit figure — USD only\n * (owner, 2026-07-18). This is the ONE place subscription credits are named on a surface —\n * every state's sentence says so itself, so callers must never also render a standalone\n * credits note next to this (fix round 1: the two used to double up in the unresolved state).\n */\nexport function billingNote(card: EngineRateCard, live: EnginePricing | null): string {\n const estimate = live?.estimate;\n if (!estimate || !Number.isFinite(estimate.cardUsd) || !Number.isFinite(estimate.ownerPaysUsd)) {\n return (\n `The billing engine charges for every claim it evaluates — ${usdLabel(card.baseUsd)} plus whatever the checks you turn on add. ` +\n 'If your collection pays an on-chain evaluation fee, that fee covers the charge first; anything left is paid from your subscription credits.'\n );\n }\n // A fee only \"covers\" something when it's actually positive — a zero-fee collection with\n // ownerPaysUsd === 0 (e.g. a free/zero-priced card) has nothing to credit, so it must fall\n // through to the \"pays no on-chain evaluation fee\" sentence below, not claim coverage.\n if (estimate.ownerPaysUsd <= 0 && estimate.chainCreditUsd > 0) {\n return \"Your collection's on-chain evaluation fee covers the whole charge — nothing is taken from your subscription credits.\";\n }\n if (estimate.chainCreditUsd > 0) {\n return `Your collection's on-chain evaluation fee covers ${usdLabel(estimate.chainCreditUsd)} of each claim; the remaining ${usdLabel(estimate.ownerPaysUsd)} is paid from your subscription credits.`;\n }\n return 'This collection pays no on-chain evaluation fee, so the full charge is paid from your subscription credits.';\n}\n\n/**\n * \"About $0.32 per claim — your collection's evaluation payment covers $0.27,\n * so you pay about $0.05.\" Returns `null` when the engine has not resolved this\n * collection, so the surface shows its price lines alone rather than an\n * invented number.\n */\nexport function ownerPaysLine(live: EnginePricing | null): string | null {\n const estimate = live?.estimate;\n if (!estimate || !Number.isFinite(estimate.cardUsd) || !Number.isFinite(estimate.ownerPaysUsd)) return null;\n const perClaim = `About ${usdLabel(estimate.cardUsd)} per claim`;\n if (estimate.ownerPaysUsd <= 0) return `${perClaim} — your collection's evaluation payment covers it, so you pay nothing.`;\n if (estimate.chainCreditUsd > 0) {\n return `${perClaim} — your collection's evaluation payment covers ${usdLabel(estimate.chainCreditUsd)}, so you pay about ${usdLabel(estimate.ownerPaysUsd)}.`;\n }\n return `${perClaim} — your collection funds no evaluation payment, so you pay all of it.`;\n}\n\n/** A card is only usable if every price on it is a real number — never render \"$NaN\". */\nfunction isUsableCard(card: EngineRateCard | undefined): card is EngineRateCard {\n return !!card && [card.baseUsd, card.aiRuleUsd, card.photoUsd].every((price) => typeof price === 'number' && Number.isFinite(price));\n}\n\nexport interface EnginePricingView {\n /** The card in effect: the collection's live one, else the static fallback. */\n card: EngineRateCard;\n /** The collection's full live resolution — `null` until/unless the read lands. */\n live: EnginePricing | null;\n}\n\n/**\n * The live per-claim price for one collection, read through the host (blocks\n * never fetch a URL themselves). Degrades silently in every failure mode —\n * no handler, no collection chosen yet, engine unreachable, unknown collection,\n * malformed payload — because a pricing disclosure must never be the reason\n * someone cannot enrol.\n */\nexport function useEnginePricing(params: { collectionId?: string; evalEngineUrl?: string }): EnginePricingView {\n const { collectionId, evalEngineUrl } = params;\n const handlers = useBlocknoteHandlers();\n const handlersRef = useRef(handlers);\n useEffect(() => {\n handlersRef.current = handlers;\n }, [handlers]);\n\n const supported = typeof handlers.getEnginePricing === 'function';\n const [live, setLive] = useState<EnginePricing | null>(null);\n\n useEffect(() => {\n if (!supported || !collectionId) {\n setLive(null);\n return;\n }\n let cancelled = false;\n (async () => {\n try {\n const result = await handlersRef.current.getEnginePricing!({ collectionId, evalEngineUrl });\n if (!cancelled) setLive(result ?? null);\n } catch (err) {\n // Never surfaced: the fallback card is a correct-enough answer, and the\n // register flow has to stay usable when the engine is down.\n console.warn('[eval.register] getEnginePricing failed', err);\n if (!cancelled) setLive(null);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [supported, collectionId, evalEngineUrl]);\n\n return { card: isUsableCard(live?.rateCard) ? live!.rateCard : PRICING, live };\n}\n"],"mappings":";;;;;AAAA,SAAS,WAAW,QAAQ,gBAAgB;AAoBrC,IAAM,UAAU;AAAA;AAAA,EAErB,SAAS;AAAA;AAAA,EAET,WAAW;AAAA;AAAA,EAEX,UAAU;AACZ;AAMO,SAAS,SAAS,KAAqB;AAI5C,QAAM,QAAQ,MAAM;AACpB,QAAM,aAAa,KAAK,IAAI,QAAQ,KAAK,MAAM,KAAK,CAAC,IAAI;AACzD,SAAO,IAAI,IAAI,QAAQ,aAAa,IAAI,CAAC,CAAC;AAC5C;AAWO,SAAS,YAAY,MAAsB,MAAoC;AACpF,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,YAAY,CAAC,OAAO,SAAS,SAAS,OAAO,KAAK,CAAC,OAAO,SAAS,SAAS,YAAY,GAAG;AAC9F,WACE,kEAA6D,SAAS,KAAK,OAAO,CAAC;AAAA,EAGvF;AAIA,MAAI,SAAS,gBAAgB,KAAK,SAAS,iBAAiB,GAAG;AAC7D,WAAO;AAAA,EACT;AACA,MAAI,SAAS,iBAAiB,GAAG;AAC/B,WAAO,oDAAoD,SAAS,SAAS,cAAc,CAAC,iCAAiC,SAAS,SAAS,YAAY,CAAC;AAAA,EAC9J;AACA,SAAO;AACT;AAQO,SAAS,cAAc,MAA2C;AACvE,QAAM,WAAW,MAAM;AACvB,MAAI,CAAC,YAAY,CAAC,OAAO,SAAS,SAAS,OAAO,KAAK,CAAC,OAAO,SAAS,SAAS,YAAY,EAAG,QAAO;AACvG,QAAM,WAAW,SAAS,SAAS,SAAS,OAAO,CAAC;AACpD,MAAI,SAAS,gBAAgB,EAAG,QAAO,GAAG,QAAQ;AAClD,MAAI,SAAS,iBAAiB,GAAG;AAC/B,WAAO,GAAG,QAAQ,uDAAkD,SAAS,SAAS,cAAc,CAAC,sBAAsB,SAAS,SAAS,YAAY,CAAC;AAAA,EAC5J;AACA,SAAO,GAAG,QAAQ;AACpB;AAGA,SAAS,aAAa,MAA0D;AAC9E,SAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,SAAS,KAAK,WAAW,KAAK,QAAQ,EAAE,MAAM,CAAC,UAAU,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,CAAC;AACrI;AAgBO,SAAS,iBAAiB,QAA8E;AAC7G,QAAM,EAAE,cAAc,cAAc,IAAI;AACxC,QAAM,WAAW,qBAAqB;AACtC,QAAM,cAAc,OAAO,QAAQ;AACnC,YAAU,MAAM;AACd,gBAAY,UAAU;AAAA,EACxB,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,YAAY,OAAO,SAAS,qBAAqB;AACvD,QAAM,CAAC,MAAM,OAAO,IAAI,SAA+B,IAAI;AAE3D,YAAU,MAAM;AACd,QAAI,CAAC,aAAa,CAAC,cAAc;AAC/B,cAAQ,IAAI;AACZ;AAAA,IACF;AACA,QAAI,YAAY;AAChB,KAAC,YAAY;AACX,UAAI;AACF,cAAM,SAAS,MAAM,YAAY,QAAQ,iBAAkB,EAAE,cAAc,cAAc,CAAC;AAC1F,YAAI,CAAC,UAAW,SAAQ,UAAU,IAAI;AAAA,MACxC,SAAS,KAAK;AAGZ,gBAAQ,KAAK,2CAA2C,GAAG;AAC3D,YAAI,CAAC,UAAW,SAAQ,IAAI;AAAA,MAC9B;AAAA,IACF,GAAG;AACH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,WAAW,cAAc,aAAa,CAAC;AAE3C,SAAO,EAAE,MAAM,aAAa,MAAM,QAAQ,IAAI,KAAM,WAAW,SAAS,KAAK;AAC/E;","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/core/lib/actionRegistry/actions/xero/invoiceList.types.ts
|
|
2
|
+
var EMPTY = {
|
|
3
|
+
connection: null,
|
|
4
|
+
tenantId: "",
|
|
5
|
+
page: "",
|
|
6
|
+
order: "",
|
|
7
|
+
Statuses: "",
|
|
8
|
+
ContactIDs: "",
|
|
9
|
+
InvoiceIDs: "",
|
|
10
|
+
where: "",
|
|
11
|
+
createdByMyApp: false,
|
|
12
|
+
includeArchived: false
|
|
13
|
+
};
|
|
14
|
+
function parseXeroInvoiceListInputs(raw) {
|
|
15
|
+
try {
|
|
16
|
+
const parsed = typeof raw === "string" ? JSON.parse(raw || "{}") : raw || {};
|
|
17
|
+
const conn = parsed.connection;
|
|
18
|
+
const connection = conn && typeof conn === "object" && typeof conn.connectedAccountId === "string" && typeof conn.entityDid === "string" ? { connectedAccountId: conn.connectedAccountId, entityDid: conn.entityDid } : null;
|
|
19
|
+
return {
|
|
20
|
+
connection,
|
|
21
|
+
tenantId: typeof parsed.tenantId === "string" ? parsed.tenantId : "",
|
|
22
|
+
page: typeof parsed.page === "string" ? parsed.page : typeof parsed.page === "number" ? String(parsed.page) : "",
|
|
23
|
+
order: typeof parsed.order === "string" ? parsed.order : "",
|
|
24
|
+
Statuses: typeof parsed.Statuses === "string" ? parsed.Statuses : "",
|
|
25
|
+
ContactIDs: typeof parsed.ContactIDs === "string" ? parsed.ContactIDs : "",
|
|
26
|
+
InvoiceIDs: typeof parsed.InvoiceIDs === "string" ? parsed.InvoiceIDs : "",
|
|
27
|
+
where: typeof parsed.where === "string" ? parsed.where : "",
|
|
28
|
+
createdByMyApp: typeof parsed.createdByMyApp === "boolean" ? parsed.createdByMyApp : false,
|
|
29
|
+
includeArchived: typeof parsed.includeArchived === "boolean" ? parsed.includeArchived : false
|
|
30
|
+
};
|
|
31
|
+
} catch {
|
|
32
|
+
return { ...EMPTY };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function serializeXeroInvoiceListInputs(inputs) {
|
|
36
|
+
return JSON.stringify(inputs);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export {
|
|
40
|
+
parseXeroInvoiceListInputs,
|
|
41
|
+
serializeXeroInvoiceListInputs
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=chunk-IX3VBV3L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/lib/actionRegistry/actions/xero/invoiceList.types.ts"],"sourcesContent":["import type { PinnedConnection } from '@/mantine/blocks/action/actionTypes/_shared/ConnectionSelector';\n\n/**\n * Template storage shape for `qi/xero.invoice.list`.\n * Mirrors `XERO_LIST_INVOICES`. Note the list tool uses `tenantId` (camelCase)\n * while create/get use `tenant_id` (snake_case). This is Xero/Composio, not\n * us — see gotchas §0 and §17.\n */\nexport interface XeroInvoiceListInputs {\n connection: PinnedConnection | null;\n tenantId: string;\n page: string;\n order: string;\n Statuses: string;\n ContactIDs: string;\n InvoiceIDs: string;\n where: string;\n createdByMyApp: boolean;\n includeArchived: boolean;\n}\n\nconst EMPTY: XeroInvoiceListInputs = {\n connection: null,\n tenantId: '',\n page: '',\n order: '',\n Statuses: '',\n ContactIDs: '',\n InvoiceIDs: '',\n where: '',\n createdByMyApp: false,\n includeArchived: false,\n};\n\nexport function parseXeroInvoiceListInputs(raw: string | Record<string, any> | undefined): XeroInvoiceListInputs {\n try {\n const parsed: any = typeof raw === 'string' ? JSON.parse(raw || '{}') : raw || {};\n const conn = parsed.connection;\n const connection: PinnedConnection | null =\n conn && typeof conn === 'object' && typeof conn.connectedAccountId === 'string' && typeof conn.entityDid === 'string'\n ? { connectedAccountId: conn.connectedAccountId, entityDid: conn.entityDid }\n : null;\n\n return {\n connection,\n tenantId: typeof parsed.tenantId === 'string' ? parsed.tenantId : '',\n page: typeof parsed.page === 'string' ? parsed.page : typeof parsed.page === 'number' ? String(parsed.page) : '',\n order: typeof parsed.order === 'string' ? parsed.order : '',\n Statuses: typeof parsed.Statuses === 'string' ? parsed.Statuses : '',\n ContactIDs: typeof parsed.ContactIDs === 'string' ? parsed.ContactIDs : '',\n InvoiceIDs: typeof parsed.InvoiceIDs === 'string' ? parsed.InvoiceIDs : '',\n where: typeof parsed.where === 'string' ? parsed.where : '',\n createdByMyApp: typeof parsed.createdByMyApp === 'boolean' ? parsed.createdByMyApp : false,\n includeArchived: typeof parsed.includeArchived === 'boolean' ? parsed.includeArchived : false,\n };\n } catch {\n return { ...EMPTY };\n }\n}\n\nexport function serializeXeroInvoiceListInputs(inputs: XeroInvoiceListInputs): string {\n return JSON.stringify(inputs);\n}\n"],"mappings":";AAqBA,IAAM,QAA+B;AAAA,EACnC,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,gBAAgB;AAAA,EAChB,iBAAiB;AACnB;AAEO,SAAS,2BAA2B,KAAsE;AAC/G,MAAI;AACF,UAAM,SAAc,OAAO,QAAQ,WAAW,KAAK,MAAM,OAAO,IAAI,IAAI,OAAO,CAAC;AAChF,UAAM,OAAO,OAAO;AACpB,UAAM,aACJ,QAAQ,OAAO,SAAS,YAAY,OAAO,KAAK,uBAAuB,YAAY,OAAO,KAAK,cAAc,WACzG,EAAE,oBAAoB,KAAK,oBAAoB,WAAW,KAAK,UAAU,IACzE;AAEN,WAAO;AAAA,MACL;AAAA,MACA,UAAU,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AAAA,MAClE,MAAM,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO,IAAI,IAAI;AAAA,MAC9G,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,MACzD,UAAU,OAAO,OAAO,aAAa,WAAW,OAAO,WAAW;AAAA,MAClE,YAAY,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAAA,MACxE,YAAY,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAAA,MACxE,OAAO,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;AAAA,MACzD,gBAAgB,OAAO,OAAO,mBAAmB,YAAY,OAAO,iBAAiB;AAAA,MACrF,iBAAiB,OAAO,OAAO,oBAAoB,YAAY,OAAO,kBAAkB;AAAA,IAC1F;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,GAAG,MAAM;AAAA,EACpB;AACF;AAEO,SAAS,+BAA+B,QAAuC;AACpF,SAAO,KAAK,UAAU,MAAM;AAC9B;","names":[]}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ProposalMetadataFields,
|
|
3
|
+
proposalMetadataValid
|
|
4
|
+
} from "./chunk-TR4KO3AG.js";
|
|
5
|
+
import {
|
|
6
|
+
ProposalOverviewCard
|
|
7
|
+
} from "./chunk-BZ7UPUTY.js";
|
|
8
|
+
import {
|
|
9
|
+
BaseSelect
|
|
10
|
+
} from "./chunk-4NAFQF6V.js";
|
|
11
|
+
import {
|
|
12
|
+
useRunSessionId
|
|
13
|
+
} from "./chunk-FFYZXA75.js";
|
|
14
|
+
import {
|
|
15
|
+
reconcileActionReadBack
|
|
16
|
+
} from "./chunk-5E6Z6JJN.js";
|
|
17
|
+
import {
|
|
18
|
+
actionAlertStyles
|
|
19
|
+
} from "./chunk-6GKJR52N.js";
|
|
20
|
+
import {
|
|
21
|
+
useBlocknoteHandlers
|
|
22
|
+
} from "./chunk-4DGCCXD6.js";
|
|
23
|
+
|
|
24
|
+
// src/mantine/blocks/action/actionTypes/_shared/groupExecution/ActAsGroupSection.tsx
|
|
25
|
+
import React, { useEffect, useMemo, useRef, useState } from "react";
|
|
26
|
+
import { Alert, Group, Loader, SegmentedControl, Stack, Text, Tooltip } from "@mantine/core";
|
|
27
|
+
import { IconInfoCircle, IconUsersGroup } from "@tabler/icons-react";
|
|
28
|
+
function emptyActAsGroupState() {
|
|
29
|
+
return { actAsGroup: false, groupCoreAddress: "", proposalTitle: "", proposalDescription: "" };
|
|
30
|
+
}
|
|
31
|
+
function actAsGroupReady(state) {
|
|
32
|
+
if (!state.actAsGroup) return true;
|
|
33
|
+
return state.groupCoreAddress.trim().length > 0 && proposalMetadataValid(state.proposalTitle, state.proposalDescription);
|
|
34
|
+
}
|
|
35
|
+
function actAsGroupRuntimeInputs(state) {
|
|
36
|
+
if (!state.actAsGroup) return {};
|
|
37
|
+
return {
|
|
38
|
+
actAsGroup: true,
|
|
39
|
+
groupCoreAddress: state.groupCoreAddress.trim(),
|
|
40
|
+
proposalTitle: state.proposalTitle.trim(),
|
|
41
|
+
proposalDescription: state.proposalDescription.trim()
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
var shortPodAddress = (address) => address.length > 20 ? `${address.slice(0, 10)}\u2026${address.slice(-6)}` : address;
|
|
45
|
+
var podFilter = ({ options, search }) => {
|
|
46
|
+
const query = search.toLowerCase().trim();
|
|
47
|
+
if (!query) return options;
|
|
48
|
+
return options.filter((option) => option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query));
|
|
49
|
+
};
|
|
50
|
+
var buildPodOptions = (groups) => {
|
|
51
|
+
const labelled = [...groups].map((group) => ({ group, label: group.domainName ? `${group.name} \u2014 ${group.domainName}` : group.name })).sort((a, b) => a.label.localeCompare(b.label));
|
|
52
|
+
const labelCounts = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const { label } of labelled) labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);
|
|
54
|
+
return labelled.map(({ group, label }) => ({
|
|
55
|
+
value: group.coreAddress,
|
|
56
|
+
label: (labelCounts.get(label) ?? 0) > 1 ? `${label} (${shortPodAddress(group.coreAddress)})` : label
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
var ActAsGroupSection = ({ value, onChange, isDisabled, actionLabel, authzFilter }) => {
|
|
60
|
+
const handlers = useBlocknoteHandlers();
|
|
61
|
+
const handlersRef = useRef(handlers);
|
|
62
|
+
handlersRef.current = handlers;
|
|
63
|
+
const [groups, setGroups] = useState([]);
|
|
64
|
+
const [loading, setLoading] = useState(false);
|
|
65
|
+
const authzFilterKey = JSON.stringify(authzFilter ?? null);
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
let cancelled = false;
|
|
68
|
+
const load = async () => {
|
|
69
|
+
const h = handlersRef.current;
|
|
70
|
+
if (!h?.getDAOGroups) return;
|
|
71
|
+
setLoading(true);
|
|
72
|
+
try {
|
|
73
|
+
const filter = authzFilterKey === "null" ? void 0 : JSON.parse(authzFilterKey);
|
|
74
|
+
const res = await h.getDAOGroups(filter);
|
|
75
|
+
if (!cancelled) setGroups(res || []);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.warn("[act-as-group] getDAOGroups failed", error);
|
|
78
|
+
} finally {
|
|
79
|
+
if (!cancelled) setLoading(false);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
void load();
|
|
83
|
+
return () => {
|
|
84
|
+
cancelled = true;
|
|
85
|
+
};
|
|
86
|
+
}, [authzFilterKey]);
|
|
87
|
+
const podOptions = useMemo(() => buildPodOptions(groups), [groups]);
|
|
88
|
+
const available = groups.length > 0 && typeof handlers?.createGroupExecutionProposal === "function";
|
|
89
|
+
if (!available) return null;
|
|
90
|
+
const update = (patch) => onChange({ ...value, ...patch });
|
|
91
|
+
return /* @__PURE__ */ React.createElement(Stack, { gap: "sm" }, /* @__PURE__ */ React.createElement(Stack, { gap: 4 }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 500 }, "Acting as"), /* @__PURE__ */ React.createElement(
|
|
92
|
+
SegmentedControl,
|
|
93
|
+
{
|
|
94
|
+
value: value.actAsGroup ? "group" : "self",
|
|
95
|
+
onChange: (v) => {
|
|
96
|
+
const asGroup = v === "group";
|
|
97
|
+
update({
|
|
98
|
+
actAsGroup: asGroup,
|
|
99
|
+
// Auto-select when the user belongs to exactly one POD.
|
|
100
|
+
groupCoreAddress: asGroup && !value.groupCoreAddress && groups.length === 1 ? groups[0].coreAddress : value.groupCoreAddress
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
data: [
|
|
104
|
+
{ label: "Myself", value: "self" },
|
|
105
|
+
{ label: "My POD", value: "group" }
|
|
106
|
+
],
|
|
107
|
+
disabled: isDisabled || loading,
|
|
108
|
+
size: "sm"
|
|
109
|
+
}
|
|
110
|
+
)), value.actAsGroup && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
|
|
111
|
+
BaseSelect,
|
|
112
|
+
{
|
|
113
|
+
label: /* @__PURE__ */ React.createElement(Group, { gap: 4, display: "inline-flex" }, "POD", value.groupCoreAddress && /* @__PURE__ */ React.createElement(Tooltip, { label: value.groupCoreAddress, withArrow: true, multiline: true, maw: 440, events: { hover: true, focus: true, touch: true } }, /* @__PURE__ */ React.createElement(IconInfoCircle, { size: 13, style: { opacity: 0.6, cursor: "help", verticalAlign: "middle" } }))),
|
|
114
|
+
description: "One of your PODs \u2014 the action is performed on its behalf.",
|
|
115
|
+
placeholder: loading ? "Loading your PODs\u2026" : "Search or select a POD",
|
|
116
|
+
value: value.groupCoreAddress || null,
|
|
117
|
+
onChange: (v) => update({ groupCoreAddress: v || "" }),
|
|
118
|
+
data: podOptions,
|
|
119
|
+
filter: podFilter,
|
|
120
|
+
renderOption: ({ option }) => /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, option.label), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, shortPodAddress(option.value))),
|
|
121
|
+
nothingFoundMessage: "No POD matches your search",
|
|
122
|
+
maxDropdownHeight: 280,
|
|
123
|
+
allowDeselect: false,
|
|
124
|
+
disabled: isDisabled || loading,
|
|
125
|
+
rightSection: loading ? /* @__PURE__ */ React.createElement(Loader, { size: "xs" }) : void 0,
|
|
126
|
+
searchable: true,
|
|
127
|
+
size: "sm"
|
|
128
|
+
}
|
|
129
|
+
), /* @__PURE__ */ React.createElement(Alert, { icon: /* @__PURE__ */ React.createElement(IconUsersGroup, { size: 16 }), color: "blue", styles: actionAlertStyles }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, "Signing creates a proposal for the POD to vote on", actionLabel ? ` \u2014 \u201C${actionLabel}\u201D` : "", ". The action only happens once the proposal passes, and it happens as the group, not as you.")), /* @__PURE__ */ React.createElement(
|
|
130
|
+
ProposalMetadataFields,
|
|
131
|
+
{
|
|
132
|
+
title: value.proposalTitle,
|
|
133
|
+
description: value.proposalDescription,
|
|
134
|
+
onTitleChange: (proposalTitle) => update({ proposalTitle }),
|
|
135
|
+
onDescriptionChange: (proposalDescription) => update({ proposalDescription }),
|
|
136
|
+
isDisabled
|
|
137
|
+
}
|
|
138
|
+
)));
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
// src/mantine/blocks/action/actionTypes/_shared/groupExecution/GroupProposalStatus.tsx
|
|
142
|
+
import React2, { useCallback, useEffect as useEffect2, useRef as useRef2, useState as useState2 } from "react";
|
|
143
|
+
import { Alert as Alert2, Card, Group as Group2, Loader as Loader2, Stack as Stack2, Text as Text2 } from "@mantine/core";
|
|
144
|
+
import { IconUsersGroup as IconUsersGroup2 } from "@tabler/icons-react";
|
|
145
|
+
var GROUP_PROPOSAL_READBACK_KIND = "group-proposal";
|
|
146
|
+
var POLL_INTERVAL_MS = 15e3;
|
|
147
|
+
var KNOWN_PROPOSAL_STATUSES = /* @__PURE__ */ new Set(["open", "passed", "executed", "rejected", "closed", "execution_failed", "veto_timelock", "vetoed"]);
|
|
148
|
+
var MAX_UNRECOGNIZED_STATUS_POLLS = 8;
|
|
149
|
+
var MAX_COLLECTION_REFRESH_ATTEMPTS = 4;
|
|
150
|
+
async function resolveGroupProposal(handlers, runtime, counters) {
|
|
151
|
+
const readBack = runtime.readBack || {};
|
|
152
|
+
const proposalId = String(readBack.proposalId || "");
|
|
153
|
+
const proposalContractAddress = String(readBack.proposalContractAddress || "");
|
|
154
|
+
if (!proposalId || !proposalContractAddress) {
|
|
155
|
+
return { state: "failed", error: "Group proposal metadata is missing from this block\u2019s runtime." };
|
|
156
|
+
}
|
|
157
|
+
const res = await handlers.getProposal(proposalContractAddress, proposalId);
|
|
158
|
+
const status = String(res?.proposal?.status || "");
|
|
159
|
+
if (KNOWN_PROPOSAL_STATUSES.has(status)) {
|
|
160
|
+
counters.unrecognizedStatusPolls = 0;
|
|
161
|
+
} else {
|
|
162
|
+
counters.unrecognizedStatusPolls += 1;
|
|
163
|
+
if (counters.unrecognizedStatusPolls >= MAX_UNRECOGNIZED_STATUS_POLLS) {
|
|
164
|
+
const statusLabel = status ? `'${status}'` : "an empty status";
|
|
165
|
+
return {
|
|
166
|
+
state: "failed",
|
|
167
|
+
error: `Proposal ended in an unrecognized state ${statusLabel} \u2014 check the proposal in your POD's decisions page.`
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
return { state: "pending" };
|
|
171
|
+
}
|
|
172
|
+
if (status === "open") return { state: "pending" };
|
|
173
|
+
if (status === "passed") {
|
|
174
|
+
try {
|
|
175
|
+
await handlers.executeProposal({ proposalId: Number(proposalId), proposalContractAddress });
|
|
176
|
+
} catch {
|
|
177
|
+
}
|
|
178
|
+
return { state: "pending" };
|
|
179
|
+
}
|
|
180
|
+
if (status === "executed") {
|
|
181
|
+
const baseOutput = { ...runtime.output || {} };
|
|
182
|
+
delete baseOutput.groupExecution;
|
|
183
|
+
const finalize = String(readBack.finalize || "");
|
|
184
|
+
const finalizeParams = readBack.finalizeParams || {};
|
|
185
|
+
let extra = {};
|
|
186
|
+
let collectionRefreshFailed = false;
|
|
187
|
+
if (finalize === "bid.submit") {
|
|
188
|
+
const submission = await handlers.submitBid(finalizeParams);
|
|
189
|
+
const bidId = String(submission?.bidId || submission?.claimId || submission?.id || "");
|
|
190
|
+
if (!bidId) return { state: "failed", error: "The POD approved the bid, but submitting it returned no bid identifier." };
|
|
191
|
+
extra = { bidId };
|
|
192
|
+
} else if (finalize === "bid.approve") {
|
|
193
|
+
await handlers.approveBid(finalizeParams);
|
|
194
|
+
} else if (finalize === "bid.reject") {
|
|
195
|
+
await handlers.rejectBid(finalizeParams);
|
|
196
|
+
} else if (finalize === "collection.refresh") {
|
|
197
|
+
let refreshedState = null;
|
|
198
|
+
try {
|
|
199
|
+
const state = await handlers.collection?.get({ collectionId: finalizeParams.collectionId });
|
|
200
|
+
if (state && typeof state === "object") refreshedState = state;
|
|
201
|
+
} catch {
|
|
202
|
+
}
|
|
203
|
+
if (refreshedState) {
|
|
204
|
+
extra = refreshedState;
|
|
205
|
+
counters.collectionRefreshAttempts = 0;
|
|
206
|
+
} else {
|
|
207
|
+
counters.collectionRefreshAttempts += 1;
|
|
208
|
+
if (counters.collectionRefreshAttempts < MAX_COLLECTION_REFRESH_ATTEMPTS) {
|
|
209
|
+
return {
|
|
210
|
+
state: "pending",
|
|
211
|
+
// Persisted onto runtime.readBack so the component can surface
|
|
212
|
+
// "executed but refreshing" while the retries run.
|
|
213
|
+
readBack: { collectionRefreshAttempts: counters.collectionRefreshAttempts }
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
collectionRefreshFailed = true;
|
|
217
|
+
console.warn(
|
|
218
|
+
`[group-proposal] collection.refresh failed ${counters.collectionRefreshAttempts} times for collection "${String(finalizeParams.collectionId || "")}" \u2014 completing block "${String(readBack.blockId || "")}" with the pre-update collection snapshot.`
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
} else if (finalize === "collection.create-resolve") {
|
|
222
|
+
const resolveCreated = handlers.resolveGroupCreatedCollection;
|
|
223
|
+
if (typeof resolveCreated !== "function") {
|
|
224
|
+
return { state: "failed", error: "The proposal executed, but this host cannot resolve the created collection (resolveGroupCreatedCollection missing)." };
|
|
225
|
+
}
|
|
226
|
+
const resolved = await resolveCreated({
|
|
227
|
+
entityDid: finalizeParams.entityDid,
|
|
228
|
+
protocolDid: finalizeParams.protocolDid,
|
|
229
|
+
priorCollectionIds: Array.isArray(finalizeParams.priorCollectionIds) ? finalizeParams.priorCollectionIds : []
|
|
230
|
+
});
|
|
231
|
+
const newId = String(resolved?.collectionId || "");
|
|
232
|
+
if (!newId) return { state: "pending" };
|
|
233
|
+
extra = { collectionId: newId };
|
|
234
|
+
try {
|
|
235
|
+
const state = await handlers.collection?.get({ collectionId: newId });
|
|
236
|
+
if (state && typeof state === "object") extra = { ...state, collectionId: newId };
|
|
237
|
+
} catch {
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
const output = { ...baseOutput, ...extra };
|
|
241
|
+
const completionEvent = String(readBack.completionEvent || "");
|
|
242
|
+
return {
|
|
243
|
+
state: "completed",
|
|
244
|
+
output,
|
|
245
|
+
events: completionEvent ? [{ name: completionEvent, payload: output }] : [],
|
|
246
|
+
...finalize === "collection.refresh" ? {
|
|
247
|
+
readBack: collectionRefreshFailed ? (
|
|
248
|
+
// Recorded in the persisted read-back metadata so the stale
|
|
249
|
+
// snapshot is diagnosable after the fact.
|
|
250
|
+
{ collectionRefreshAttempts: counters.collectionRefreshAttempts, collectionRefreshFailed: true }
|
|
251
|
+
) : { collectionRefreshAttempts: 0 }
|
|
252
|
+
} : {}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (status === "rejected" || status === "closed" || status === "execution_failed" || status === "veto_timelock" || status === "vetoed") {
|
|
256
|
+
let error = `The POD's proposal was ${status.replace(/_/g, " ")} \u2014 the action did not happen.`;
|
|
257
|
+
if (String(readBack.actionType || "") === "qi/claim.submit") {
|
|
258
|
+
error += " The draft claim was already published to the POD's data room, but it was never submitted on-chain. Once the issue is resolved it is safe to run this block again \u2014 no duplicate on-chain claim will be created.";
|
|
259
|
+
}
|
|
260
|
+
return { state: "failed", error };
|
|
261
|
+
}
|
|
262
|
+
return { state: "pending" };
|
|
263
|
+
}
|
|
264
|
+
var GroupProposalStatus = ({ editor, block, runtime, actorDid }) => {
|
|
265
|
+
const handlers = useBlocknoteHandlers();
|
|
266
|
+
const handlersRef = useRef2(handlers);
|
|
267
|
+
handlersRef.current = handlers;
|
|
268
|
+
const sessionRunId = useRunSessionId();
|
|
269
|
+
const readBack = runtime.readBack || {};
|
|
270
|
+
const active = runtime.state === "awaiting_readback" && readBack.kind === GROUP_PROPOSAL_READBACK_KIND;
|
|
271
|
+
const proposalId = String(readBack.proposalId || "");
|
|
272
|
+
const proposalContractAddress = String(readBack.proposalContractAddress || "");
|
|
273
|
+
const [reconciling, setReconciling] = useState2(false);
|
|
274
|
+
const [lastError, setLastError] = useState2(null);
|
|
275
|
+
const inFlightRef = useRef2(false);
|
|
276
|
+
const countersRef = useRef2({ collectionRefreshAttempts: 0, unrecognizedStatusPolls: 0 });
|
|
277
|
+
const reconcile = useCallback(async () => {
|
|
278
|
+
if (inFlightRef.current) return;
|
|
279
|
+
inFlightRef.current = true;
|
|
280
|
+
setReconciling(true);
|
|
281
|
+
try {
|
|
282
|
+
await reconcileActionReadBack({
|
|
283
|
+
editorOrYDoc: editor,
|
|
284
|
+
blockId: block.id,
|
|
285
|
+
actorDid,
|
|
286
|
+
runId: sessionRunId,
|
|
287
|
+
resolver: async ({ runtime: currentRuntime }) => resolveGroupProposal(handlersRef.current, currentRuntime, countersRef.current)
|
|
288
|
+
});
|
|
289
|
+
setLastError(null);
|
|
290
|
+
} catch (err) {
|
|
291
|
+
setLastError(err instanceof Error ? err.message : "Failed to check the proposal status");
|
|
292
|
+
} finally {
|
|
293
|
+
inFlightRef.current = false;
|
|
294
|
+
setReconciling(false);
|
|
295
|
+
}
|
|
296
|
+
}, [editor, block?.id, actorDid, sessionRunId]);
|
|
297
|
+
useEffect2(() => {
|
|
298
|
+
if (!active) return void 0;
|
|
299
|
+
countersRef.current = { collectionRefreshAttempts: 0, unrecognizedStatusPolls: 0 };
|
|
300
|
+
void reconcile();
|
|
301
|
+
const interval = setInterval(() => void reconcile(), POLL_INTERVAL_MS);
|
|
302
|
+
return () => clearInterval(interval);
|
|
303
|
+
}, [active, reconcile]);
|
|
304
|
+
if (!active) return null;
|
|
305
|
+
return /* @__PURE__ */ React2.createElement(Stack2, { gap: "sm" }, /* @__PURE__ */ React2.createElement(Card, { padding: "md", radius: "md", withBorder: true, style: { borderColor: "var(--mantine-color-blue-6)" } }, /* @__PURE__ */ React2.createElement(Group2, { gap: "xs", align: "center" }, /* @__PURE__ */ React2.createElement(IconUsersGroup2, { size: 16, color: "var(--mantine-color-blue-6)" }), /* @__PURE__ */ React2.createElement(Text2, { size: "sm", fw: 600 }, "Waiting for the POD to vote"), reconciling && /* @__PURE__ */ React2.createElement(Loader2, { size: "xs" })), /* @__PURE__ */ React2.createElement(Text2, { size: "sm", c: "dimmed", mt: 4 }, "Proposal #", proposalId, " was created on the POD's behalf. This step completes automatically once the proposal passes and executes \u2014 no further signature from you is needed", readBack.finalize === "bid.submit" ? ", except the bid itself which is sent once the POD approves" : "", "."), Number(readBack.collectionRefreshAttempts || 0) > 0 && /* @__PURE__ */ React2.createElement(Text2, { size: "xs", c: "dimmed", mt: 4 }, "The proposal has executed, but the collection's live state could not be refreshed yet \u2014 retrying.")), proposalContractAddress && proposalId && /* @__PURE__ */ React2.createElement(ProposalOverviewCard, { proposalContractAddress, proposalId }), lastError && /* @__PURE__ */ React2.createElement(Alert2, { color: "orange", styles: actionAlertStyles }, /* @__PURE__ */ React2.createElement(Text2, { size: "xs" }, "Status check failed (will retry): ", lastError)));
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
export {
|
|
309
|
+
emptyActAsGroupState,
|
|
310
|
+
actAsGroupReady,
|
|
311
|
+
actAsGroupRuntimeInputs,
|
|
312
|
+
ActAsGroupSection,
|
|
313
|
+
GroupProposalStatus
|
|
314
|
+
};
|
|
315
|
+
//# sourceMappingURL=chunk-JB6ASLUJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mantine/blocks/action/actionTypes/_shared/groupExecution/ActAsGroupSection.tsx","../src/mantine/blocks/action/actionTypes/_shared/groupExecution/GroupProposalStatus.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { Alert, Group, Loader, SegmentedControl, Stack, Text, Tooltip } from '@mantine/core';\nimport type { ComboboxItem, SelectProps } from '@mantine/core';\nimport { IconInfoCircle, IconUsersGroup } from '@tabler/icons-react';\nimport BaseSelect from '@/mantine/components/Base/BaseSelect';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { DAOGroup, DAOGroupAuthzFilter } from '@/mantine/context/BlocknoteContext';\nimport { actionAlertStyles } from '../../../alertStyles';\nimport { ProposalMetadataFields, proposalMetadataValid } from '../../governance/_shared/ProposalMetadataFields';\n\n/**\n * \"Acting as\" selector for work blocks (claim / evaluate / bid / collection):\n * the user runs the action as themselves (default, unchanged behavior) or on\n * behalf of one of the PODs they are a member of — the host's getDAOGroups\n * is membership-scoped, so the list is the same on every domain. Group mode\n * collects the proposal name + description voters will see, and signing\n * creates a governance proposal instead of broadcasting — the block completes\n * when the proposal passes and executes.\n */\nexport interface ActAsGroupState {\n actAsGroup: boolean;\n groupCoreAddress: string;\n proposalTitle: string;\n proposalDescription: string;\n}\n\nexport function emptyActAsGroupState(): ActAsGroupState {\n return { actAsGroup: false, groupCoreAddress: '', proposalTitle: '', proposalDescription: '' };\n}\n\n/** Whether the selection is complete enough to sign. */\nexport function actAsGroupReady(state: ActAsGroupState): boolean {\n if (!state.actAsGroup) return true;\n return state.groupCoreAddress.trim().length > 0 && proposalMetadataValid(state.proposalTitle, state.proposalDescription);\n}\n\n/** The runtime inputs to merge into `executeAction` for the selection. */\nexport function actAsGroupRuntimeInputs(state: ActAsGroupState): Record<string, any> {\n if (!state.actAsGroup) return {};\n return {\n actAsGroup: true,\n groupCoreAddress: state.groupCoreAddress.trim(),\n proposalTitle: state.proposalTitle.trim(),\n proposalDescription: state.proposalDescription.trim(),\n };\n}\n\nconst shortPodAddress = (address: string): string => (address.length > 20 ? `${address.slice(0, 10)}…${address.slice(-6)}` : address);\n\n/** Match on the visible label or the core address, so pasting an address finds the POD. */\nexport const podFilter: SelectProps['filter'] = ({ options, search }) => {\n const query = search.toLowerCase().trim();\n if (!query) return options;\n return (options as ComboboxItem[]).filter((option) => option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query));\n};\n\n/**\n * Alphabetical select options labelled \"name — governing domain\" where the\n * host resolved the domain. Duplicate POD names are common (e.g. several\n * \"Custodians\"); any label still ambiguous after the domain suffix gets the\n * core address appended so every option stays tellable apart.\n */\nexport const buildPodOptions = (groups: DAOGroup[]): ComboboxItem[] => {\n const labelled = [...groups]\n .map((group) => ({ group, label: group.domainName ? `${group.name} — ${group.domainName}` : group.name }))\n .sort((a, b) => a.label.localeCompare(b.label));\n\n const labelCounts = new Map<string, number>();\n for (const { label } of labelled) labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);\n\n return labelled.map(({ group, label }) => ({\n value: group.coreAddress,\n label: (labelCounts.get(label) ?? 0) > 1 ? `${label} (${shortPodAddress(group.coreAddress)})` : label,\n }));\n};\n\nexport const ActAsGroupSection: React.FC<{\n value: ActAsGroupState;\n onChange: (state: ActAsGroupState) => void;\n isDisabled?: boolean;\n /** What the group is about to approve, e.g. \"submit this claim\". */\n actionLabel?: string;\n /**\n * When set, only PODs holding the required claim authorization for the\n * collection are offered — a group without it would pass the vote and then\n * fail at proposal execution with no visible error.\n */\n authzFilter?: DAOGroupAuthzFilter;\n}> = ({ value, onChange, isDisabled, actionLabel, authzFilter }) => {\n const handlers = useBlocknoteHandlers();\n const handlersRef = useRef(handlers);\n handlersRef.current = handlers;\n\n const [groups, setGroups] = useState<DAOGroup[]>([]);\n const [loading, setLoading] = useState(false);\n\n // Serialized so a parent re-render with an identical inline filter object\n // does not refetch; a genuinely different filter (e.g. collection resolved)\n // does.\n const authzFilterKey = JSON.stringify(authzFilter ?? null);\n\n useEffect(() => {\n let cancelled = false;\n const load = async () => {\n const h = handlersRef.current;\n if (!h?.getDAOGroups) return;\n setLoading(true);\n try {\n const filter = authzFilterKey === 'null' ? undefined : (JSON.parse(authzFilterKey) as DAOGroupAuthzFilter);\n const res = await h.getDAOGroups(filter);\n if (!cancelled) setGroups(res || []);\n } catch (error) {\n // No PODs — the selector stays on \"Myself\".\n console.warn('[act-as-group] getDAOGroups failed', error);\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n void load();\n return () => {\n cancelled = true;\n };\n }, [authzFilterKey]);\n\n const podOptions = useMemo<ComboboxItem[]>(() => buildPodOptions(groups), [groups]);\n\n // The host doesn't implement group execution, or the user is in no PODs —\n // nothing to offer; the block behaves exactly as before. Nothing renders\n // while the membership lookup is in flight either, so a POD-less user never\n // flashes a selector that is about to disappear.\n const available = groups.length > 0 && typeof (handlers as any)?.createGroupExecutionProposal === 'function';\n if (!available) return null;\n\n const update = (patch: Partial<ActAsGroupState>) => onChange({ ...value, ...patch });\n\n return (\n <Stack gap=\"sm\">\n <Stack gap={4}>\n <Text size=\"sm\" fw={500}>\n Acting as\n </Text>\n <SegmentedControl\n value={value.actAsGroup ? 'group' : 'self'}\n onChange={(v) => {\n const asGroup = v === 'group';\n update({\n actAsGroup: asGroup,\n // Auto-select when the user belongs to exactly one POD.\n groupCoreAddress: asGroup && !value.groupCoreAddress && groups.length === 1 ? groups[0].coreAddress : value.groupCoreAddress,\n });\n }}\n data={[\n { label: 'Myself', value: 'self' },\n { label: 'My POD', value: 'group' },\n ]}\n disabled={isDisabled || loading}\n size=\"sm\"\n />\n </Stack>\n\n {value.actAsGroup && (\n <>\n <BaseSelect\n label={\n <Group gap={4} display=\"inline-flex\">\n POD\n {value.groupCoreAddress && (\n <Tooltip label={value.groupCoreAddress} withArrow multiline maw={440} events={{ hover: true, focus: true, touch: true }}>\n <IconInfoCircle size={13} style={{ opacity: 0.6, cursor: 'help', verticalAlign: 'middle' }} />\n </Tooltip>\n )}\n </Group>\n }\n description=\"One of your PODs — the action is performed on its behalf.\"\n placeholder={loading ? 'Loading your PODs…' : 'Search or select a POD'}\n value={value.groupCoreAddress || null}\n onChange={(v) => update({ groupCoreAddress: v || '' })}\n data={podOptions}\n filter={podFilter}\n renderOption={({ option }) => (\n <Stack gap={0}>\n <Text size=\"sm\">{option.label}</Text>\n <Text size=\"xs\" c=\"dimmed\">\n {shortPodAddress(option.value)}\n </Text>\n </Stack>\n )}\n nothingFoundMessage=\"No POD matches your search\"\n maxDropdownHeight={280}\n allowDeselect={false}\n disabled={isDisabled || loading}\n rightSection={loading ? <Loader size=\"xs\" /> : undefined}\n searchable\n size=\"sm\"\n />\n\n <Alert icon={<IconUsersGroup size={16} />} color=\"blue\" styles={actionAlertStyles}>\n <Text size=\"sm\">\n Signing creates a proposal for the POD to vote on{actionLabel ? ` — “${actionLabel}”` : ''}. The action only happens once the proposal passes, and it happens as the\n group, not as you.\n </Text>\n </Alert>\n\n <ProposalMetadataFields\n title={value.proposalTitle}\n description={value.proposalDescription}\n onTitleChange={(proposalTitle) => update({ proposalTitle })}\n onDescriptionChange={(proposalDescription) => update({ proposalDescription })}\n isDisabled={isDisabled}\n />\n </>\n )}\n </Stack>\n );\n};\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Alert, Card, Group, Loader, Stack, Text } from '@mantine/core';\nimport { IconUsersGroup } from '@tabler/icons-react';\nimport { reconcileActionReadBack, type ActionReadBackResolution } from '@/core/lib/flowEngine';\nimport type { FlowNodeRuntimeState } from '@/core/types';\nimport { useBlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport type { BlocknoteHandlers } from '@/mantine/context/BlocknoteContext';\nimport { useRunSessionId } from '@/mantine/flow/runSessionContext';\nimport { actionAlertStyles } from '../../../alertStyles';\nimport { ProposalOverviewCard } from '../../governance/_shared/ProposalOverviewCard';\n\nconst GROUP_PROPOSAL_READBACK_KIND = 'group-proposal';\nconst POLL_INTERVAL_MS = 15000;\n\n/** Every proposal status this resolver knows how to react to. Anything else\n * is treated as a contract drift and bounded by\n * MAX_UNRECOGNIZED_STATUS_POLLS instead of pending forever. */\nconst KNOWN_PROPOSAL_STATUSES = new Set(['open', 'passed', 'executed', 'rejected', 'closed', 'execution_failed', 'veto_timelock', 'vetoed']);\n\n/** How many consecutive polls may observe an unrecognized proposal status\n * before the block fails with a readable error (~2 min at 15s polls). */\nconst MAX_UNRECOGNIZED_STATUS_POLLS = 8;\n\n/** How many polls may retry a failed `collection.refresh` finalize read\n * before completing with the pre-update snapshot (~1 min at 15s polls). */\nconst MAX_COLLECTION_REFRESH_ATTEMPTS = 4;\n\n/**\n * Per-mount poll counters, owned by the component via a ref (the poll loop\n * lives in the component). Not persisted: a reload restarts the bounds, which\n * only means a few extra polls before the same terminal decision is reached.\n */\ninterface GroupProposalPollCounters {\n collectionRefreshAttempts: number;\n unrecognizedStatusPolls: number;\n}\n\n/**\n * Resolve a group-proposal read-back against the current on-chain proposal\n * status:\n * open → pending (keep waiting)\n * passed → try to execute it, then keep waiting\n * executed → run the finalize step (Matrix side effects\n * a proposal can't execute), then complete\n * with the expected output\n * rejected / closed / failed → failed\n * anything else → pending, bounded — after\n * MAX_UNRECOGNIZED_STATUS_POLLS consecutive\n * sightings the block fails with the raw\n * status in the message\n */\nasync function resolveGroupProposal(handlers: BlocknoteHandlers, runtime: FlowNodeRuntimeState, counters: GroupProposalPollCounters): Promise<ActionReadBackResolution> {\n const readBack = (runtime.readBack || {}) as Record<string, any>;\n const proposalId = String(readBack.proposalId || '');\n const proposalContractAddress = String(readBack.proposalContractAddress || '');\n if (!proposalId || !proposalContractAddress) {\n return { state: 'failed', error: 'Group proposal metadata is missing from this block’s runtime.' };\n }\n\n const res = await handlers.getProposal(proposalContractAddress, proposalId);\n const status = String(res?.proposal?.status || '');\n\n if (KNOWN_PROPOSAL_STATUSES.has(status)) {\n counters.unrecognizedStatusPolls = 0;\n } else {\n // A status this resolver does not know (contract enum drift, or a query\n // that returned no status). Staying pending forever would leave the block\n // awaiting a state transition that will never be recognized — bound it.\n counters.unrecognizedStatusPolls += 1;\n if (counters.unrecognizedStatusPolls >= MAX_UNRECOGNIZED_STATUS_POLLS) {\n const statusLabel = status ? `'${status}'` : 'an empty status';\n return {\n state: 'failed',\n error: `Proposal ended in an unrecognized state ${statusLabel} — check the proposal in your POD's decisions page.`,\n };\n }\n return { state: 'pending' };\n }\n\n if (status === 'open') return { state: 'pending' };\n\n if (status === 'passed') {\n // Passed but not yet executed — execution is permissionless for members;\n // try it so the flow doesn't stall on a manual step.\n try {\n await handlers.executeProposal({ proposalId: Number(proposalId), proposalContractAddress });\n } catch {\n // Someone else may execute it; keep polling either way.\n }\n return { state: 'pending' };\n }\n\n if (status === 'executed') {\n const baseOutput = { ...(runtime.output || {}) } as Record<string, any>;\n delete baseOutput.groupExecution;\n\n // Finalize: off-chain side effects the proposal could not execute.\n const finalize = String(readBack.finalize || '');\n const finalizeParams = (readBack.finalizeParams || {}) as Record<string, any>;\n let extra: Record<string, any> = {};\n let collectionRefreshFailed = false;\n if (finalize === 'bid.submit') {\n const submission = await handlers.submitBid(finalizeParams as any);\n const bidId = String((submission as any)?.bidId || (submission as any)?.claimId || (submission as any)?.id || '');\n if (!bidId) return { state: 'failed', error: 'The POD approved the bid, but submitting it returned no bid identifier.' };\n extra = { bidId };\n } else if (finalize === 'bid.approve') {\n await handlers.approveBid(finalizeParams as any);\n } else if (finalize === 'bid.reject') {\n await handlers.rejectBid(finalizeParams as any);\n } else if (finalize === 'collection.refresh') {\n // The proposal's update already executed on-chain; this read only pulls\n // the post-update collection state so the block's output does not lock\n // in the pre-update snapshot (`expectedOutput` was built before the\n // proposal ran). A failed read must therefore NOT complete the block\n // silently — stay pending and retry on the next polls, bounded so a\n // permanently broken read still terminates.\n let refreshedState: Record<string, any> | null = null;\n try {\n const state = await (handlers as any).collection?.get({ collectionId: finalizeParams.collectionId });\n if (state && typeof state === 'object') refreshedState = state as Record<string, any>;\n } catch {\n // Counted as a failed attempt below, same as an empty read.\n }\n if (refreshedState) {\n extra = refreshedState;\n counters.collectionRefreshAttempts = 0;\n } else {\n counters.collectionRefreshAttempts += 1;\n if (counters.collectionRefreshAttempts < MAX_COLLECTION_REFRESH_ATTEMPTS) {\n return {\n state: 'pending',\n // Persisted onto runtime.readBack so the component can surface\n // \"executed but refreshing\" while the retries run.\n readBack: { collectionRefreshAttempts: counters.collectionRefreshAttempts },\n };\n }\n collectionRefreshFailed = true;\n console.warn(\n `[group-proposal] collection.refresh failed ${counters.collectionRefreshAttempts} times for collection ` +\n `\"${String(finalizeParams.collectionId || '')}\" — completing block \"${String(readBack.blockId || '')}\" with the pre-update collection snapshot.`\n );\n }\n } else if (finalize === 'collection.create-resolve') {\n // The MsgCreateCollection executed inside the proposal, so the new id\n // never passed through this client — resolve it by diffing the entity's\n // live collection list against the prepare-time snapshot.\n const resolveCreated = (handlers as any).resolveGroupCreatedCollection;\n if (typeof resolveCreated !== 'function') {\n return { state: 'failed', error: 'The proposal executed, but this host cannot resolve the created collection (resolveGroupCreatedCollection missing).' };\n }\n const resolved = await resolveCreated({\n entityDid: finalizeParams.entityDid,\n protocolDid: finalizeParams.protocolDid,\n priorCollectionIds: Array.isArray(finalizeParams.priorCollectionIds) ? finalizeParams.priorCollectionIds : [],\n });\n const newId = String(resolved?.collectionId || '');\n // Indexer lag: the collection exists on-chain but isn't queryable yet —\n // stay pending and let the next poll resolve it.\n if (!newId) return { state: 'pending' };\n extra = { collectionId: newId };\n try {\n const state = await (handlers as any).collection?.get({ collectionId: newId });\n if (state && typeof state === 'object') extra = { ...state, collectionId: newId };\n } catch {\n // The create executed and the id is known; full state is best-effort.\n }\n }\n\n const output = { ...baseOutput, ...extra };\n const completionEvent = String(readBack.completionEvent || '');\n return {\n state: 'completed',\n output,\n events: completionEvent ? [{ name: completionEvent, payload: output }] : [],\n ...(finalize === 'collection.refresh'\n ? {\n readBack: collectionRefreshFailed\n ? // Recorded in the persisted read-back metadata so the stale\n // snapshot is diagnosable after the fact.\n { collectionRefreshAttempts: counters.collectionRefreshAttempts, collectionRefreshFailed: true }\n : { collectionRefreshAttempts: 0 },\n }\n : {}),\n };\n }\n\n if (status === 'rejected' || status === 'closed' || status === 'execution_failed' || status === 'veto_timelock' || status === 'vetoed') {\n let error = `The POD's proposal was ${status.replace(/_/g, ' ')} — the action did not happen.`;\n // The claim block publishes the draft claim to the POD's data room at\n // prepare time (prepareGroupClaimSubmission); only the on-chain\n // MsgSubmitClaim rode on the proposal. Spell that split out so the user\n // knows what state they are in and that a re-run cannot double-submit.\n // `readBack.actionType` is stamped by normalizeActionReadBackMetadata\n // when the run enters awaiting_readback.\n if (String(readBack.actionType || '') === 'qi/claim.submit') {\n error +=\n \" The draft claim was already published to the POD's data room, but it was never submitted on-chain.\" +\n ' Once the issue is resolved it is safe to run this block again — no duplicate on-chain claim will be created.';\n }\n return { state: 'failed', error };\n }\n\n return { state: 'pending' };\n}\n\n/**\n * Waiting UI + reconciliation driver for a block whose run is awaiting a\n * group proposal. Render unconditionally from a FlowDetail — it renders\n * nothing unless the block's runtime is in the group-proposal read-back\n * state. While active it polls the proposal, auto-executes it when passed,\n * finalizes off-chain steps, and completes or fails the block via the flow\n * engine's read-back reconciler.\n */\nexport const GroupProposalStatus: React.FC<{\n editor: any;\n block: any;\n runtime: FlowNodeRuntimeState;\n actorDid?: string;\n}> = ({ editor, block, runtime, actorDid }) => {\n const handlers = useBlocknoteHandlers();\n const handlersRef = useRef(handlers);\n handlersRef.current = handlers;\n // Session-based (multi-run) docs refuse execution-side writes without an\n // explicit run id, so the read-back reconciler must be told which session\n // this surface is showing — the advisory active-run fallback only exists\n // for legacy documents.\n const sessionRunId = useRunSessionId();\n\n const readBack = (runtime.readBack || {}) as Record<string, any>;\n const active = runtime.state === 'awaiting_readback' && readBack.kind === GROUP_PROPOSAL_READBACK_KIND;\n const proposalId = String(readBack.proposalId || '');\n const proposalContractAddress = String(readBack.proposalContractAddress || '');\n\n const [reconciling, setReconciling] = useState(false);\n const [lastError, setLastError] = useState<string | null>(null);\n const inFlightRef = useRef(false);\n const countersRef = useRef<GroupProposalPollCounters>({ collectionRefreshAttempts: 0, unrecognizedStatusPolls: 0 });\n\n const reconcile = useCallback(async () => {\n if (inFlightRef.current) return;\n inFlightRef.current = true;\n setReconciling(true);\n try {\n await reconcileActionReadBack({\n editorOrYDoc: editor,\n blockId: block.id,\n actorDid,\n runId: sessionRunId,\n resolver: async ({ runtime: currentRuntime }) => resolveGroupProposal(handlersRef.current, currentRuntime, countersRef.current),\n });\n setLastError(null);\n } catch (err) {\n setLastError(err instanceof Error ? err.message : 'Failed to check the proposal status');\n } finally {\n inFlightRef.current = false;\n setReconciling(false);\n }\n }, [editor, block?.id, actorDid, sessionRunId]);\n\n useEffect(() => {\n if (!active) return undefined;\n // Fresh poll run (new activation, or a different block/actor) → fresh\n // bounds for the unrecognized-status and refresh-retry counters.\n countersRef.current = { collectionRefreshAttempts: 0, unrecognizedStatusPolls: 0 };\n void reconcile();\n const interval = setInterval(() => void reconcile(), POLL_INTERVAL_MS);\n return () => clearInterval(interval);\n }, [active, reconcile]);\n\n if (!active) return null;\n\n return (\n <Stack gap=\"sm\">\n <Card padding=\"md\" radius=\"md\" withBorder style={{ borderColor: 'var(--mantine-color-blue-6)' }}>\n <Group gap=\"xs\" align=\"center\">\n <IconUsersGroup size={16} color=\"var(--mantine-color-blue-6)\" />\n <Text size=\"sm\" fw={600}>\n Waiting for the POD to vote\n </Text>\n {reconciling && <Loader size=\"xs\" />}\n </Group>\n <Text size=\"sm\" c=\"dimmed\" mt={4}>\n Proposal #{proposalId} was created on the POD's behalf. This step completes automatically once the proposal passes and executes — no further signature from you is\n needed{readBack.finalize === 'bid.submit' ? ', except the bid itself which is sent once the POD approves' : ''}.\n </Text>\n {Number(readBack.collectionRefreshAttempts || 0) > 0 && (\n <Text size=\"xs\" c=\"dimmed\" mt={4}>\n The proposal has executed, but the collection's live state could not be refreshed yet — retrying.\n </Text>\n )}\n </Card>\n\n {proposalContractAddress && proposalId && <ProposalOverviewCard proposalContractAddress={proposalContractAddress} proposalId={proposalId} />}\n\n {lastError && (\n <Alert color=\"orange\" styles={actionAlertStyles}>\n <Text size=\"xs\">Status check failed (will retry): {lastError}</Text>\n </Alert>\n )}\n </Stack>\n );\n};\n"],"mappings":"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","names":["React","useEffect","useRef","useState","Alert","Group","Loader","Stack","Text","IconUsersGroup","useRef","useState","useEffect","React","Stack","Group","IconUsersGroup","Text","Loader","Alert"]}
|