@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.
Files changed (526) hide show
  1. package/dist/BidConfig-YLGSEIOS.js +154 -0
  2. package/dist/BidConfig-YLGSEIOS.js.map +1 -0
  3. package/dist/BidFlowDetail-TJCJBJZZ.js +365 -0
  4. package/dist/BidFlowDetail-TJCJBJZZ.js.map +1 -0
  5. package/dist/CalendarEventCreateConfig-J2LU6LJO.js +155 -0
  6. package/dist/CalendarEventCreateConfig-J2LU6LJO.js.map +1 -0
  7. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js +174 -0
  8. package/dist/CalendarEventCreateFlowDetail-ZWHZWDOK.js.map +1 -0
  9. package/dist/CalendarEventListConfig-GQNNF4ZB.js +116 -0
  10. package/dist/CalendarEventListConfig-GQNNF4ZB.js.map +1 -0
  11. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js +58 -0
  12. package/dist/CalendarEventListFlowDetail-SSRTOXIX.js.map +1 -0
  13. package/dist/CalendarEventUpdateConfig-KACZA6GH.js +133 -0
  14. package/dist/CalendarEventUpdateConfig-KACZA6GH.js.map +1 -0
  15. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js +155 -0
  16. package/dist/CalendarEventUpdateFlowDetail-CD6NHHOU.js.map +1 -0
  17. package/dist/ClaimConfig-3HKPGK55.js +200 -0
  18. package/dist/ClaimConfig-3HKPGK55.js.map +1 -0
  19. package/dist/ClaimFlowDetail-UVEQMEI5.js +641 -0
  20. package/dist/ClaimFlowDetail-UVEQMEI5.js.map +1 -0
  21. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js +149 -0
  22. package/dist/CollectionLifecycleConfig-LCCGZ3CJ.js.map +1 -0
  23. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js +647 -0
  24. package/dist/CollectionLifecycleFlowDetail-WFCSVIIG.js.map +1 -0
  25. package/dist/CollectionUsersConfig-RI2X3YY2.js +271 -0
  26. package/dist/CollectionUsersConfig-RI2X3YY2.js.map +1 -0
  27. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js +1276 -0
  28. package/dist/CollectionUsersFlowDetail-ZLCJBWHG.js.map +1 -0
  29. package/dist/CredentialStoreConfig-G66AQDGZ.js +75 -0
  30. package/dist/CredentialStoreConfig-G66AQDGZ.js.map +1 -0
  31. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js +99 -0
  32. package/dist/CredentialStoreFlowDetail-FL7QAM3S.js.map +1 -0
  33. package/dist/DesignPodConfig-LJ7H2CZ6.js +8 -0
  34. package/dist/DesignPodConfig-LJ7H2CZ6.js.map +1 -0
  35. package/dist/DesignPodFlowDetail-JHJWGNVY.js +309 -0
  36. package/dist/DesignPodFlowDetail-JHJWGNVY.js.map +1 -0
  37. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js +37 -0
  38. package/dist/DomainCardPreviewConfig-Q3X5M4WF.js.map +1 -0
  39. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js +131 -0
  40. package/dist/DomainCardPreviewFlowDetail-Y2FE7O5Z.js.map +1 -0
  41. package/dist/DomainIndexerLookupConfig-N4VONQUY.js +41 -0
  42. package/dist/DomainIndexerLookupConfig-N4VONQUY.js.map +1 -0
  43. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js +70 -0
  44. package/dist/DomainIndexerLookupFlowDetail-GJ7WWK7I.js.map +1 -0
  45. package/dist/DomainSignConfig-XFIXROVK.js +47 -0
  46. package/dist/DomainSignConfig-XFIXROVK.js.map +1 -0
  47. package/dist/DomainSignFlowDetail-BXZ6JBPR.js +206 -0
  48. package/dist/DomainSignFlowDetail-BXZ6JBPR.js.map +1 -0
  49. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js +101 -0
  50. package/dist/DomainSingleSelectionConfig-ZNKIXB4P.js.map +1 -0
  51. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js +147 -0
  52. package/dist/DomainSingleSelectionFlowDetail-HWTQXSLA.js.map +1 -0
  53. package/dist/EmailSendConfig-YEGZ5Q77.js +215 -0
  54. package/dist/EmailSendConfig-YEGZ5Q77.js.map +1 -0
  55. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js +150 -0
  56. package/dist/EntityCreateOracleConfig-UZ6ZIMP5.js.map +1 -0
  57. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js +120 -0
  58. package/dist/EntityCreateOracleFlowDetail-H2X7CPYU.js.map +1 -0
  59. package/dist/EntitySingleSelectionConfig-DL57KNKM.js +30 -0
  60. package/dist/EntitySingleSelectionConfig-DL57KNKM.js.map +1 -0
  61. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js +118 -0
  62. package/dist/EntitySingleSelectionFlowDetail-GFQGX3GA.js.map +1 -0
  63. package/dist/EntityTransferConfig-JVZ3H35B.js +62 -0
  64. package/dist/EntityTransferConfig-JVZ3H35B.js.map +1 -0
  65. package/dist/EntityTransferFlowDetail-XEXM34XB.js +132 -0
  66. package/dist/EntityTransferFlowDetail-XEXM34XB.js.map +1 -0
  67. package/dist/EvalEngineConfig-CHC4IRN3.js +464 -0
  68. package/dist/EvalEngineConfig-CHC4IRN3.js.map +1 -0
  69. package/dist/EvalEngineFlowDetail-PUFRNO4U.js +4291 -0
  70. package/dist/EvalEngineFlowDetail-PUFRNO4U.js.map +1 -0
  71. package/dist/EvaluateBidConfig-OE4CM43G.js +151 -0
  72. package/dist/EvaluateBidConfig-OE4CM43G.js.map +1 -0
  73. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js +564 -0
  74. package/dist/EvaluateBidFlowDetail-2S2N4YTW.js.map +1 -0
  75. package/dist/EvaluateClaimConfig-3D4F5LHU.js +297 -0
  76. package/dist/EvaluateClaimConfig-3D4F5LHU.js.map +1 -0
  77. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js +2237 -0
  78. package/dist/EvaluateClaimFlowDetail-QYR7PJRD.js.map +1 -0
  79. package/dist/FormSubmitConfig-UFZYMLUN.js +59 -0
  80. package/dist/FormSubmitConfig-UFZYMLUN.js.map +1 -0
  81. package/dist/FormSubmitFlowDetail-IAHDJS6P.js +169 -0
  82. package/dist/FormSubmitFlowDetail-IAHDJS6P.js.map +1 -0
  83. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js +166 -0
  84. package/dist/GovernanceAuthzExecFlowDetail-SQBGU5BX.js.map +1 -0
  85. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js +88 -0
  86. package/dist/GovernanceAuthzGrantFlowDetail-DZPNLANT.js.map +1 -0
  87. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js +88 -0
  88. package/dist/GovernanceAuthzRevokeFlowDetail-3JZ4IUJG.js.map +1 -0
  89. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js +83 -0
  90. package/dist/GovernanceChainVoteFlowDetail-475UDNG6.js.map +1 -0
  91. package/dist/GovernanceConfigConfig-V3WM4WBP.js +30 -0
  92. package/dist/GovernanceConfigConfig-V3WM4WBP.js.map +1 -0
  93. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js +267 -0
  94. package/dist/GovernanceConfigFlowDetail-SQ5PPDRX.js.map +1 -0
  95. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js +113 -0
  96. package/dist/GovernanceContractExecuteFlowDetail-H2ZV6W2E.js.map +1 -0
  97. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js +144 -0
  98. package/dist/GovernanceContractInstantiateFlowDetail-YJJMGM54.js.map +1 -0
  99. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js +72 -0
  100. package/dist/GovernanceContractManageCw20FlowDetail-OCBMW3YJ.js.map +1 -0
  101. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js +104 -0
  102. package/dist/GovernanceContractMigrateFlowDetail-JDNIKTT3.js.map +1 -0
  103. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js +68 -0
  104. package/dist/GovernanceContractUpdateAdminFlowDetail-SZBOAOCC.js.map +1 -0
  105. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js +78 -0
  106. package/dist/GovernanceCustomMessageFlowDetail-CXD4ZATO.js.map +1 -0
  107. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js +98 -0
  108. package/dist/GovernanceDaoAcceptToMarketplaceFlowDetail-Q6ZBNY7Z.js.map +1 -0
  109. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js +94 -0
  110. package/dist/GovernanceDaoAdminExecFlowDetail-JAEAY2US.js.map +1 -0
  111. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js +96 -0
  112. package/dist/GovernanceDaoCreateEntityFlowDetail-7RVNTVAB.js.map +1 -0
  113. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js +68 -0
  114. package/dist/GovernanceDaoJoinFlowDetail-XYCTCNHO.js.map +1 -0
  115. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js +93 -0
  116. package/dist/GovernanceDaoManageStorageFlowDetail-LMLYLYYC.js.map +1 -0
  117. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js +84 -0
  118. package/dist/GovernanceDaoManageSubDaosFlowDetail-YUFQ67JN.js.map +1 -0
  119. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js +104 -0
  120. package/dist/GovernanceDaoUpdateInfoFlowDetail-G5FIBY4L.js.map +1 -0
  121. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js +42 -0
  122. package/dist/GovernanceMemberProposalConfig-IGPXEFDB.js.map +1 -0
  123. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js +240 -0
  124. package/dist/GovernanceMemberProposalFlowDetail-T3VURONF.js.map +1 -0
  125. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js +69 -0
  126. package/dist/GovernanceNftBurnFlowDetail-AG4I2O7H.js.map +1 -0
  127. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js +71 -0
  128. package/dist/GovernanceNftManageCollectionsFlowDetail-UAAGO3Q6.js.map +1 -0
  129. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js +130 -0
  130. package/dist/GovernanceNftTransferFlowDetail-KXM7DTOV.js.map +1 -0
  131. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js +42 -0
  132. package/dist/GovernanceSettingsProposalConfig-4SLJTBLW.js.map +1 -0
  133. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js +165 -0
  134. package/dist/GovernanceSettingsProposalFlowDetail-VFZPSCLR.js.map +1 -0
  135. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js +123 -0
  136. package/dist/GovernanceStakingStakeFlowDetail-ULLJ7FLM.js.map +1 -0
  137. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js +84 -0
  138. package/dist/GovernanceStakingStakeToGroupFlowDetail-CSPKJA3H.js.map +1 -0
  139. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js +111 -0
  140. package/dist/GovernanceSubmissionConfigProposalFlowDetail-MZCPSZF2.js.map +1 -0
  141. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js +66 -0
  142. package/dist/GovernanceTransactionMintFlowDetail-Y2WRAODH.js.map +1 -0
  143. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js +133 -0
  144. package/dist/GovernanceTransactionPerformTokenSwapFlowDetail-GEK6PMMI.js.map +1 -0
  145. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js +42 -0
  146. package/dist/GovernanceTransactionSendFundsConfig-VBKMLSF3.js.map +1 -0
  147. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js +182 -0
  148. package/dist/GovernanceTransactionSendFundsFlowDetail-5TZB64VL.js.map +1 -0
  149. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js +155 -0
  150. package/dist/GovernanceTransactionSendGroupTokenFlowDetail-EGOWVZM2.js.map +1 -0
  151. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js +56 -0
  152. package/dist/GovernanceTransactionWithdrawTokenSwapFlowDetail-6XWVO5O6.js.map +1 -0
  153. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js +117 -0
  154. package/dist/GovernanceValidatorActionsFlowDetail-ZMLPAFUB.js.map +1 -0
  155. package/dist/HarvestConfig-AIGOGBFR.js +56 -0
  156. package/dist/HarvestConfig-AIGOGBFR.js.map +1 -0
  157. package/dist/HarvestFlowDetail-X3RUH3X3.js +131 -0
  158. package/dist/HarvestFlowDetail-X3RUH3X3.js.map +1 -0
  159. package/dist/HttpRequestConfig-OQEJIIJY.js +194 -0
  160. package/dist/HttpRequestConfig-OQEJIIJY.js.map +1 -0
  161. package/dist/HttpRequestFlowDetail-JVLV533Z.js +116 -0
  162. package/dist/HttpRequestFlowDetail-JVLV533Z.js.map +1 -0
  163. package/dist/IdentityCreateConfig-ZBUOJ6AL.js +94 -0
  164. package/dist/IdentityCreateConfig-ZBUOJ6AL.js.map +1 -0
  165. package/dist/IdentityCreateFlowDetail-WGKO43IH.js +83 -0
  166. package/dist/IdentityCreateFlowDetail-WGKO43IH.js.map +1 -0
  167. package/dist/IidCreateConfig-RRV2DYXI.js +75 -0
  168. package/dist/IidCreateConfig-RRV2DYXI.js.map +1 -0
  169. package/dist/IidCreateFlowDetail-6M32S6XS.js +57 -0
  170. package/dist/IidCreateFlowDetail-6M32S6XS.js.map +1 -0
  171. package/dist/KycVerifyConfig-VCG65K5K.js +65 -0
  172. package/dist/KycVerifyConfig-VCG65K5K.js.map +1 -0
  173. package/dist/KycVerifyFlowDetail-EWOMXSD3.js +421 -0
  174. package/dist/KycVerifyFlowDetail-EWOMXSD3.js.map +1 -0
  175. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js +37 -0
  176. package/dist/ListDomainFlowsConfig-3JZEPTOJ.js.map +1 -0
  177. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js +257 -0
  178. package/dist/ListDomainFlowsFlowDetail-XX5AXDZZ.js.map +1 -0
  179. package/dist/LoadBatchesConfig-IMODIWRT.js +38 -0
  180. package/dist/LoadBatchesConfig-IMODIWRT.js.map +1 -0
  181. package/dist/LoadBatchesFlowDetail-GB24T76O.js +101 -0
  182. package/dist/LoadBatchesFlowDetail-GB24T76O.js.map +1 -0
  183. package/dist/MatrixDmConfig-NBII27CS.js +120 -0
  184. package/dist/MatrixDmConfig-NBII27CS.js.map +1 -0
  185. package/dist/MatrixRegisterConfig-N2U4FBYF.js +62 -0
  186. package/dist/MatrixRegisterConfig-N2U4FBYF.js.map +1 -0
  187. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js +86 -0
  188. package/dist/MatrixRegisterFlowDetail-D5YNL5QX.js.map +1 -0
  189. package/dist/MemberMultiSelectConfig-E7WUB2WD.js +30 -0
  190. package/dist/MemberMultiSelectConfig-E7WUB2WD.js.map +1 -0
  191. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js +392 -0
  192. package/dist/MemberMultiSelectFlowDetail-6C4ZMSDR.js.map +1 -0
  193. package/dist/OracleConfig-R7TDTTKN.js +56 -0
  194. package/dist/OracleConfig-R7TDTTKN.js.map +1 -0
  195. package/dist/OracleConfigureOracleConfig-QFF74X3N.js +198 -0
  196. package/dist/OracleConfigureOracleConfig-QFF74X3N.js.map +1 -0
  197. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js +255 -0
  198. package/dist/OracleConfigureOracleFlowDetail-73BHAN76.js.map +1 -0
  199. package/dist/OracleContractConfig-PHY5L7W2.js +38 -0
  200. package/dist/OracleContractConfig-PHY5L7W2.js.map +1 -0
  201. package/dist/OracleContractFlowDetail-M3PM4AU4.js +78 -0
  202. package/dist/OracleContractFlowDetail-M3PM4AU4.js.map +1 -0
  203. package/dist/OracleDeployConfig-QBG76ATZ.js +10 -0
  204. package/dist/OracleDeployConfig-QBG76ATZ.js.map +1 -0
  205. package/dist/OracleDeployFlowDetail-WKTMD2AD.js +231 -0
  206. package/dist/OracleDeployFlowDetail-WKTMD2AD.js.map +1 -0
  207. package/dist/OracleDeploySetupConfig-75XPGFJQ.js +10 -0
  208. package/dist/OracleDeploySetupConfig-75XPGFJQ.js.map +1 -0
  209. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js +165 -0
  210. package/dist/OracleDeploySetupFlowDetail-R3BQ7EAU.js.map +1 -0
  211. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js +10 -0
  212. package/dist/OracleDeployStartConfig-NA6GZ4VQ.js.map +1 -0
  213. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js +89 -0
  214. package/dist/OracleDeployStartFlowDetail-EL3CMDMG.js.map +1 -0
  215. package/dist/OracleFlowDetail-5JCJK3GH.js +76 -0
  216. package/dist/OracleFlowDetail-5JCJK3GH.js.map +1 -0
  217. package/dist/OraclePromptConfig-YBRESISH.js +39 -0
  218. package/dist/OraclePromptConfig-YBRESISH.js.map +1 -0
  219. package/dist/OraclePromptFlowDetail-O3XNK7HY.js +112 -0
  220. package/dist/OraclePromptFlowDetail-O3XNK7HY.js.map +1 -0
  221. package/dist/OracleStoreConfigConfig-TUZWTJMA.js +134 -0
  222. package/dist/OracleStoreConfigConfig-TUZWTJMA.js.map +1 -0
  223. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js +99 -0
  224. package/dist/OracleStoreConfigFlowDetail-Q6AUUSUL.js.map +1 -0
  225. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js +198 -0
  226. package/dist/OracleStoreSecretsAndConfigConfig-SZPYEK7U.js.map +1 -0
  227. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js +220 -0
  228. package/dist/OracleStoreSecretsAndConfigFlowDetail-BFV2EHLT.js.map +1 -0
  229. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js +191 -0
  230. package/dist/OracleStoreSecretsConfig-PQMF7LFT.js.map +1 -0
  231. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js +197 -0
  232. package/dist/OracleStoreSecretsFlowDetail-DNNOPHVA.js.map +1 -0
  233. package/dist/ProposalCreateConfig-U5IHZNT7.js +161 -0
  234. package/dist/ProposalCreateConfig-U5IHZNT7.js.map +1 -0
  235. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js +235 -0
  236. package/dist/ProposalCreateFlowDetail-4VZZPAWH.js.map +1 -0
  237. package/dist/ProposalVoteConfig-MH4MU7SL.js +150 -0
  238. package/dist/ProposalVoteConfig-MH4MU7SL.js.map +1 -0
  239. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js +280 -0
  240. package/dist/ProposalVoteFlowDetail-IJJ3OHAB.js.map +1 -0
  241. package/dist/ProtocolSelectConfig-S5U3P6K7.js +48 -0
  242. package/dist/ProtocolSelectConfig-S5U3P6K7.js.map +1 -0
  243. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js +116 -0
  244. package/dist/ProtocolSelectFlowDetail-XBSJIEIH.js.map +1 -0
  245. package/dist/RetireConfig-MV37WWZ6.js +59 -0
  246. package/dist/RetireConfig-MV37WWZ6.js.map +1 -0
  247. package/dist/RetireFlowDetail-VZ5O4SXI.js +147 -0
  248. package/dist/RetireFlowDetail-VZ5O4SXI.js.map +1 -0
  249. package/dist/SandboxProvisionConfig-ZGG4IRHM.js +46 -0
  250. package/dist/SandboxProvisionConfig-ZGG4IRHM.js.map +1 -0
  251. package/dist/SandboxProvisionFlowDetail-RUY64INV.js +79 -0
  252. package/dist/SandboxProvisionFlowDetail-RUY64INV.js.map +1 -0
  253. package/dist/WalletFundConfig-CMM3EP3B.js +117 -0
  254. package/dist/WalletFundConfig-CMM3EP3B.js.map +1 -0
  255. package/dist/WalletFundFlowDetail-TXWCZA4K.js +279 -0
  256. package/dist/WalletFundFlowDetail-TXWCZA4K.js.map +1 -0
  257. package/dist/WalletGenerateAndFundConfig-364RSEND.js +10 -0
  258. package/dist/WalletGenerateAndFundConfig-364RSEND.js.map +1 -0
  259. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js +54 -0
  260. package/dist/WalletGenerateAndFundFlowDetail-C2LZW3NO.js.map +1 -0
  261. package/dist/WalletGenerateConfig-YYLCS65G.js +10 -0
  262. package/dist/WalletGenerateConfig-YYLCS65G.js.map +1 -0
  263. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js +53 -0
  264. package/dist/WalletGenerateFlowDetail-CQCNDGJA.js.map +1 -0
  265. package/dist/XeroContactCreateConfig-OWG5PA3B.js +102 -0
  266. package/dist/XeroContactCreateConfig-OWG5PA3B.js.map +1 -0
  267. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js +127 -0
  268. package/dist/XeroContactCreateFlowDetail-6MAINCF6.js.map +1 -0
  269. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js +403 -0
  270. package/dist/XeroInvoiceCreateConfig-O74RUSZM.js.map +1 -0
  271. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js +631 -0
  272. package/dist/XeroInvoiceCreateFlowDetail-UL7KS6CZ.js.map +1 -0
  273. package/dist/XeroInvoiceListConfig-UR3GONBJ.js +113 -0
  274. package/dist/XeroInvoiceListConfig-UR3GONBJ.js.map +1 -0
  275. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js +58 -0
  276. package/dist/XeroInvoiceListFlowDetail-LYHODWH6.js.map +1 -0
  277. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js +116 -0
  278. package/dist/XeroPaymentCreateConfig-RPMAIK6E.js.map +1 -0
  279. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js +573 -0
  280. package/dist/XeroPaymentCreateFlowDetail-CF35MVIM.js.map +1 -0
  281. package/dist/action-manifest.json +2091 -393
  282. package/dist/chunk-2GAYKKTL.js +9 -0
  283. package/dist/chunk-2GAYKKTL.js.map +1 -0
  284. package/dist/chunk-2WPEATI7.js +315 -0
  285. package/dist/chunk-2WPEATI7.js.map +1 -0
  286. package/dist/chunk-3O42FYT3.js +3333 -0
  287. package/dist/chunk-3O42FYT3.js.map +1 -0
  288. package/dist/chunk-3TUYY4HK.js +20 -0
  289. package/dist/chunk-3TUYY4HK.js.map +1 -0
  290. package/dist/chunk-3XSLBJYI.js +554 -0
  291. package/dist/chunk-3XSLBJYI.js.map +1 -0
  292. package/dist/chunk-4DGCCXD6.js +710 -0
  293. package/dist/chunk-4DGCCXD6.js.map +1 -0
  294. package/dist/chunk-4NAFQF6V.js +11 -0
  295. package/dist/chunk-4NAFQF6V.js.map +1 -0
  296. package/dist/chunk-4PONO4US.js +799 -0
  297. package/dist/chunk-4PONO4US.js.map +1 -0
  298. package/dist/chunk-4TMOIK5M.js +21 -0
  299. package/dist/chunk-4TMOIK5M.js.map +1 -0
  300. package/dist/chunk-5IH3VC5I.js +102 -0
  301. package/dist/chunk-5IH3VC5I.js.map +1 -0
  302. package/dist/chunk-5NTKDOP6.js +89 -0
  303. package/dist/chunk-5NTKDOP6.js.map +1 -0
  304. package/dist/chunk-5O2SFRGU.js +18 -0
  305. package/dist/chunk-5O2SFRGU.js.map +1 -0
  306. package/dist/chunk-632JLECF.js +55 -0
  307. package/dist/chunk-632JLECF.js.map +1 -0
  308. package/dist/chunk-676HDB7K.js +95 -0
  309. package/dist/chunk-676HDB7K.js.map +1 -0
  310. package/dist/chunk-6ESTNTSH.js +223 -0
  311. package/dist/chunk-6ESTNTSH.js.map +1 -0
  312. package/dist/chunk-6GKJR52N.js +15 -0
  313. package/dist/chunk-6GKJR52N.js.map +1 -0
  314. package/dist/chunk-6L4ZIKYU.js +23 -0
  315. package/dist/chunk-6L4ZIKYU.js.map +1 -0
  316. package/dist/chunk-76YX5R4L.js +11 -0
  317. package/dist/chunk-76YX5R4L.js.map +1 -0
  318. package/dist/chunk-7J3GFMN3.js +32 -0
  319. package/dist/chunk-7J3GFMN3.js.map +1 -0
  320. package/dist/chunk-7LSARC2G.js +102 -0
  321. package/dist/chunk-7LSARC2G.js.map +1 -0
  322. package/dist/chunk-7W7UUUIE.js +609 -0
  323. package/dist/chunk-7W7UUUIE.js.map +1 -0
  324. package/dist/chunk-7ZLW7H37.js +21 -0
  325. package/dist/chunk-7ZLW7H37.js.map +1 -0
  326. package/dist/chunk-AAZHI22G.js +18 -0
  327. package/dist/chunk-AAZHI22G.js.map +1 -0
  328. package/dist/chunk-ACNE455I.js +76 -0
  329. package/dist/chunk-ACNE455I.js.map +1 -0
  330. package/dist/chunk-BKLSSLPZ.js +27 -0
  331. package/dist/chunk-BKLSSLPZ.js.map +1 -0
  332. package/dist/chunk-BZ7UPUTY.js +417 -0
  333. package/dist/chunk-BZ7UPUTY.js.map +1 -0
  334. package/dist/chunk-CGFAICUE.js +28 -0
  335. package/dist/chunk-CGFAICUE.js.map +1 -0
  336. package/dist/chunk-CMCEWQ3C.js +19 -0
  337. package/dist/chunk-CMCEWQ3C.js.map +1 -0
  338. package/dist/chunk-CP4UV436.js +41 -0
  339. package/dist/chunk-CP4UV436.js.map +1 -0
  340. package/dist/chunk-D2CQPNQG.js +27508 -0
  341. package/dist/chunk-D2CQPNQG.js.map +1 -0
  342. package/dist/chunk-DIQRZP7Z.js +51 -0
  343. package/dist/chunk-DIQRZP7Z.js.map +1 -0
  344. package/dist/chunk-EBFFDDAS.js +13 -0
  345. package/dist/chunk-EBFFDDAS.js.map +1 -0
  346. package/dist/chunk-EGVS23DR.js +85 -0
  347. package/dist/chunk-EGVS23DR.js.map +1 -0
  348. package/dist/chunk-EKBQ7K4N.js +15 -0
  349. package/dist/chunk-EKBQ7K4N.js.map +1 -0
  350. package/dist/chunk-EKQCZRAN.js +24 -0
  351. package/dist/chunk-EKQCZRAN.js.map +1 -0
  352. package/dist/chunk-EYKZIZ5J.js +48 -0
  353. package/dist/chunk-EYKZIZ5J.js.map +1 -0
  354. package/dist/{chunk-NEOPTPDF.js → chunk-F4PTFXZH.js} +11554 -22046
  355. package/dist/chunk-F4PTFXZH.js.map +1 -0
  356. package/dist/chunk-FFYZXA75.js +58 -0
  357. package/dist/chunk-FFYZXA75.js.map +1 -0
  358. package/dist/chunk-GFGDHPZ2.js +22 -0
  359. package/dist/chunk-GFGDHPZ2.js.map +1 -0
  360. package/dist/chunk-GR3CDFID.js +18 -0
  361. package/dist/chunk-GR3CDFID.js.map +1 -0
  362. package/dist/chunk-GR4SIU32.js +104 -0
  363. package/dist/chunk-GR4SIU32.js.map +1 -0
  364. package/dist/chunk-H5E46IIS.js +18 -0
  365. package/dist/chunk-H5E46IIS.js.map +1 -0
  366. package/dist/chunk-HFHVAMZL.js +22 -0
  367. package/dist/chunk-HFHVAMZL.js.map +1 -0
  368. package/dist/chunk-HRRI4BLF.js +4456 -0
  369. package/dist/chunk-HRRI4BLF.js.map +1 -0
  370. package/dist/chunk-HT6L7A5M.js +12 -0
  371. package/dist/chunk-HT6L7A5M.js.map +1 -0
  372. package/dist/chunk-I2FPFISM.js +301 -0
  373. package/dist/chunk-I2FPFISM.js.map +1 -0
  374. package/dist/chunk-IADAQJDH.js +28 -0
  375. package/dist/chunk-IADAQJDH.js.map +1 -0
  376. package/dist/chunk-IBOBCMQQ.js +99 -0
  377. package/dist/chunk-IBOBCMQQ.js.map +1 -0
  378. package/dist/chunk-IFWKRCFF.js +56 -0
  379. package/dist/chunk-IFWKRCFF.js.map +1 -0
  380. package/dist/chunk-IH4T7V4C.js +40 -0
  381. package/dist/chunk-IH4T7V4C.js.map +1 -0
  382. package/dist/chunk-IIIZZ4E4.js +1679 -0
  383. package/dist/chunk-IIIZZ4E4.js.map +1 -0
  384. package/dist/chunk-ILSFU3WD.js +83 -0
  385. package/dist/chunk-ILSFU3WD.js.map +1 -0
  386. package/dist/chunk-IX3VBV3L.js +43 -0
  387. package/dist/chunk-IX3VBV3L.js.map +1 -0
  388. package/dist/chunk-JBBFSORW.js +846 -0
  389. package/dist/chunk-JBBFSORW.js.map +1 -0
  390. package/dist/chunk-JIDTNKKL.js +1183 -0
  391. package/dist/chunk-JIDTNKKL.js.map +1 -0
  392. package/dist/chunk-JSPE6NGZ.js +22 -0
  393. package/dist/chunk-JSPE6NGZ.js.map +1 -0
  394. package/dist/chunk-JVROGQ7Q.js +150 -0
  395. package/dist/chunk-JVROGQ7Q.js.map +1 -0
  396. package/dist/chunk-K4WUMWNJ.js +32 -0
  397. package/dist/chunk-K4WUMWNJ.js.map +1 -0
  398. package/dist/chunk-K74XQ4Q5.js +11 -0
  399. package/dist/chunk-K74XQ4Q5.js.map +1 -0
  400. package/dist/chunk-KLLMJ4U3.js +22 -0
  401. package/dist/chunk-KLLMJ4U3.js.map +1 -0
  402. package/dist/chunk-LTKVCJ2E.js +27 -0
  403. package/dist/chunk-LTKVCJ2E.js.map +1 -0
  404. package/dist/chunk-M36DJTFZ.js +34 -0
  405. package/dist/chunk-M36DJTFZ.js.map +1 -0
  406. package/dist/chunk-MHM52LCJ.js +154 -0
  407. package/dist/chunk-MHM52LCJ.js.map +1 -0
  408. package/dist/chunk-MQCDMHRZ.js +59 -0
  409. package/dist/chunk-MQCDMHRZ.js.map +1 -0
  410. package/dist/chunk-N3ORMGAI.js +348 -0
  411. package/dist/chunk-N3ORMGAI.js.map +1 -0
  412. package/dist/chunk-NCSGIRRQ.js +28 -0
  413. package/dist/chunk-NCSGIRRQ.js.map +1 -0
  414. package/dist/chunk-NIXT2SBH.js +1423 -0
  415. package/dist/chunk-NIXT2SBH.js.map +1 -0
  416. package/dist/chunk-NJAII6CO.js +148 -0
  417. package/dist/chunk-NJAII6CO.js.map +1 -0
  418. package/dist/chunk-NKE4TL43.js +92 -0
  419. package/dist/chunk-NKE4TL43.js.map +1 -0
  420. package/dist/chunk-NZ7AXA7B.js +1 -0
  421. package/dist/chunk-NZ7AXA7B.js.map +1 -0
  422. package/dist/chunk-OCAYEGI2.js +26 -0
  423. package/dist/chunk-OCAYEGI2.js.map +1 -0
  424. package/dist/chunk-OMLI45ER.js +90 -0
  425. package/dist/chunk-OMLI45ER.js.map +1 -0
  426. package/dist/chunk-P7OBLJAG.js +88 -0
  427. package/dist/chunk-P7OBLJAG.js.map +1 -0
  428. package/dist/chunk-PAY3CBWL.js +2321 -0
  429. package/dist/chunk-PAY3CBWL.js.map +1 -0
  430. package/dist/chunk-PFF6VY35.js +257 -0
  431. package/dist/chunk-PFF6VY35.js.map +1 -0
  432. package/dist/chunk-PYNDJDWZ.js +1758 -0
  433. package/dist/chunk-PYNDJDWZ.js.map +1 -0
  434. package/dist/chunk-QDQ6UMMN.js +53 -0
  435. package/dist/chunk-QDQ6UMMN.js.map +1 -0
  436. package/dist/chunk-QGT3G2XG.js +24 -0
  437. package/dist/chunk-QGT3G2XG.js.map +1 -0
  438. package/dist/chunk-QZYCJ2GZ.js +55 -0
  439. package/dist/chunk-QZYCJ2GZ.js.map +1 -0
  440. package/dist/chunk-REZ7RFSA.js +124 -0
  441. package/dist/chunk-REZ7RFSA.js.map +1 -0
  442. package/dist/chunk-RRYBAE6E.js +2449 -0
  443. package/dist/chunk-RRYBAE6E.js.map +1 -0
  444. package/dist/chunk-RWUZOB62.js +34 -0
  445. package/dist/chunk-RWUZOB62.js.map +1 -0
  446. package/dist/chunk-SB5UCPZH.js +116 -0
  447. package/dist/chunk-SB5UCPZH.js.map +1 -0
  448. package/dist/chunk-SEJJ7CRI.js +99 -0
  449. package/dist/chunk-SEJJ7CRI.js.map +1 -0
  450. package/dist/chunk-SHBFGRPV.js +45 -0
  451. package/dist/chunk-SHBFGRPV.js.map +1 -0
  452. package/dist/chunk-SOFJ4GC5.js +45 -0
  453. package/dist/chunk-SOFJ4GC5.js.map +1 -0
  454. package/dist/chunk-STH2HPZK.js +44 -0
  455. package/dist/chunk-STH2HPZK.js.map +1 -0
  456. package/dist/chunk-TK3JNKME.js +28 -0
  457. package/dist/chunk-TK3JNKME.js.map +1 -0
  458. package/dist/chunk-TMONHFE3.js +46 -0
  459. package/dist/chunk-TMONHFE3.js.map +1 -0
  460. package/dist/chunk-TR4KO3AG.js +44 -0
  461. package/dist/chunk-TR4KO3AG.js.map +1 -0
  462. package/dist/chunk-TS2LNBF2.js +68 -0
  463. package/dist/chunk-TS2LNBF2.js.map +1 -0
  464. package/dist/chunk-UZUMBFPP.js +26 -0
  465. package/dist/chunk-UZUMBFPP.js.map +1 -0
  466. package/dist/chunk-VRZ5LMOW.js +176 -0
  467. package/dist/chunk-VRZ5LMOW.js.map +1 -0
  468. package/dist/chunk-WLGGY6Z6.js +75 -0
  469. package/dist/chunk-WLGGY6Z6.js.map +1 -0
  470. package/dist/chunk-WO7V6ZNC.js +11 -0
  471. package/dist/chunk-WO7V6ZNC.js.map +1 -0
  472. package/dist/chunk-WXSENSRP.js +64 -0
  473. package/dist/chunk-WXSENSRP.js.map +1 -0
  474. package/dist/chunk-XEKBZ2SA.js +19 -0
  475. package/dist/chunk-XEKBZ2SA.js.map +1 -0
  476. package/dist/chunk-XPBKU3JX.js +61 -0
  477. package/dist/chunk-XPBKU3JX.js.map +1 -0
  478. package/dist/chunk-XRYXBXWH.js +24 -0
  479. package/dist/chunk-XRYXBXWH.js.map +1 -0
  480. package/dist/chunk-XVA7QRVH.js +22 -0
  481. package/dist/chunk-XVA7QRVH.js.map +1 -0
  482. package/dist/chunk-YCTHHBSS.js +37 -0
  483. package/dist/chunk-YCTHHBSS.js.map +1 -0
  484. package/dist/chunk-YHPWD5NE.js +70 -0
  485. package/dist/chunk-YHPWD5NE.js.map +1 -0
  486. package/dist/chunk-YLNEKJQ5.js +126 -0
  487. package/dist/chunk-YLNEKJQ5.js.map +1 -0
  488. package/dist/chunk-YN4CEKCF.js +73 -0
  489. package/dist/chunk-YN4CEKCF.js.map +1 -0
  490. package/dist/chunk-YYNMESIF.js +17 -0
  491. package/dist/chunk-YYNMESIF.js.map +1 -0
  492. package/dist/chunk-Z6PRMCV6.js +1 -0
  493. package/dist/chunk-Z6PRMCV6.js.map +1 -0
  494. package/dist/chunk-ZDNW6VQG.js +11 -0
  495. package/dist/chunk-ZDNW6VQG.js.map +1 -0
  496. package/dist/chunk-ZP4D73DO.js +36 -0
  497. package/dist/chunk-ZP4D73DO.js.map +1 -0
  498. package/dist/chunk-ZUATADUV.js +26 -0
  499. package/dist/chunk-ZUATADUV.js.map +1 -0
  500. package/dist/{connections-1NtNQrsY.d.ts → connections-CEcurtWI.d.ts} +74 -9
  501. package/dist/core/index.cjs +14041 -6973
  502. package/dist/core/index.cjs.map +1 -1
  503. package/dist/core/index.d.ts +422 -138
  504. package/dist/core/index.js +425 -183
  505. package/dist/core/index.js.map +1 -1
  506. package/dist/flow-vnext/index.cjs +2842 -0
  507. package/dist/flow-vnext/index.cjs.map +1 -0
  508. package/dist/flow-vnext/index.d.ts +3 -0
  509. package/dist/flow-vnext/index.js +119 -0
  510. package/dist/flow-vnext/index.js.map +1 -0
  511. package/dist/{graphql-client-Bn0tN049.d.ts → graphql-client-B2tREsx6.d.ts} +3 -1
  512. package/dist/index-b9xxXGFs.d.ts +1230 -0
  513. package/dist/index.d.ts +5 -3
  514. package/dist/index.js +202 -37
  515. package/dist/index.js.map +1 -1
  516. package/dist/legacy-BpgIqaQ5.d.ts +14 -0
  517. package/dist/mantine/index.d.ts +7 -4
  518. package/dist/mantine/index.js +84 -30
  519. package/dist/mantine/index.js.map +1 -1
  520. package/dist/{runtime-BFwvCQDF.d.ts → types-Dqk5MTfW.d.ts} +6096 -5386
  521. package/package.json +12 -2
  522. package/dist/chunk-A4CWC4AG.js +0 -374
  523. package/dist/chunk-A4CWC4AG.js.map +0 -1
  524. package/dist/chunk-NEOPTPDF.js.map +0 -1
  525. package/dist/chunk-VRCRDKN5.js +0 -59694
  526. package/dist/chunk-VRCRDKN5.js.map +0 -1
@@ -0,0 +1,1276 @@
1
+ import {
2
+ parseAccountList
3
+ } from "./chunk-7LSARC2G.js";
4
+ import {
5
+ parseCollectionUsersActionInputs
6
+ } from "./chunk-4TMOIK5M.js";
7
+ import {
8
+ ReadableKeyValues,
9
+ dedupeBids,
10
+ describeBidsPagingStop,
11
+ fetchAllBids,
12
+ partitionBidsByDecision
13
+ } from "./chunk-6ESTNTSH.js";
14
+ import {
15
+ DownloadCsvButton,
16
+ DownloadZipButton,
17
+ bidAnswers,
18
+ buildBidRows,
19
+ buildCollectionMembersSections,
20
+ buildExportBundle,
21
+ exportFileNames,
22
+ getBidStatusInfo
23
+ } from "./chunk-JBBFSORW.js";
24
+ import {
25
+ CollapsibleSection
26
+ } from "./chunk-CGFAICUE.js";
27
+ import "./chunk-OMLI45ER.js";
28
+ import {
29
+ ActAsGroupSection,
30
+ GroupProposalStatus,
31
+ actAsGroupReady,
32
+ actAsGroupRuntimeInputs,
33
+ emptyActAsGroupState
34
+ } from "./chunk-2WPEATI7.js";
35
+ import {
36
+ RecipientInput
37
+ } from "./chunk-YLNEKJQ5.js";
38
+ import "./chunk-TR4KO3AG.js";
39
+ import {
40
+ ActionDiffView
41
+ } from "./chunk-I2FPFISM.js";
42
+ import {
43
+ downloadArrayAsCsv,
44
+ downloadBlob,
45
+ downloadSectionedCsv,
46
+ rowsToCsv,
47
+ sectionsToCsv
48
+ } from "./chunk-5NTKDOP6.js";
49
+ import "./chunk-NKE4TL43.js";
50
+ import {
51
+ ListItemContainer
52
+ } from "./chunk-EYKZIZ5J.js";
53
+ import "./chunk-YN4CEKCF.js";
54
+ import {
55
+ BaseNumberInput
56
+ } from "./chunk-76YX5R4L.js";
57
+ import "./chunk-BZ7UPUTY.js";
58
+ import {
59
+ BaseSelect
60
+ } from "./chunk-4NAFQF6V.js";
61
+ import {
62
+ useRunRuntimeReader
63
+ } from "./chunk-FFYZXA75.js";
64
+ import "./chunk-NZ7AXA7B.js";
65
+ import "./chunk-XVA7QRVH.js";
66
+ import "./chunk-HRRI4BLF.js";
67
+ import {
68
+ COLLECTION_USERS_MAX_GRANTS_PER_TX,
69
+ collectionUsersBatchCount
70
+ } from "./chunk-F4PTFXZH.js";
71
+ import "./chunk-IH4T7V4C.js";
72
+ import "./chunk-PYNDJDWZ.js";
73
+ import "./chunk-NIXT2SBH.js";
74
+ import "./chunk-JIDTNKKL.js";
75
+ import {
76
+ resolveReferences
77
+ } from "./chunk-JVROGQ7Q.js";
78
+ import "./chunk-IIIZZ4E4.js";
79
+ import "./chunk-HT6L7A5M.js";
80
+ import "./chunk-RRYBAE6E.js";
81
+ import "./chunk-N3ORMGAI.js";
82
+ import "./chunk-NCSGIRRQ.js";
83
+ import {
84
+ BaseTextArea
85
+ } from "./chunk-ZDNW6VQG.js";
86
+ import {
87
+ DismissibleAlert
88
+ } from "./chunk-IFWKRCFF.js";
89
+ import {
90
+ actionAlertStyles
91
+ } from "./chunk-6GKJR52N.js";
92
+ import "./chunk-EBFFDDAS.js";
93
+ import {
94
+ BaseTextInput
95
+ } from "./chunk-WO7V6ZNC.js";
96
+ import {
97
+ useBlocknoteHandlers,
98
+ useTranslate
99
+ } from "./chunk-4DGCCXD6.js";
100
+ import "./chunk-7W7UUUIE.js";
101
+ import "./chunk-TS2LNBF2.js";
102
+
103
+ // src/mantine/blocks/action/actionTypes/collectionUsers/CollectionUsersFlowDetail.tsx
104
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
105
+ import { ActionIcon, Alert as MantineAlert, Badge, Box, Button, Divider, Group, Loader, Radio, SegmentedControl, Stack, Text } from "@mantine/core";
106
+ import { useDebouncedValue } from "@mantine/hooks";
107
+ import { IconAlertCircle, IconArrowLeft, IconCheck, IconRefresh, IconTrash } from "@tabler/icons-react";
108
+
109
+ // src/mantine/blocks/action/actionTypes/_shared/bids/decidedBids.ts
110
+ async function fetchDecidedBids(handlers, params) {
111
+ const queryDecided = handlers?.bids?.queryDecided;
112
+ if (typeof queryDecided !== "function") return { bids: [], supported: false };
113
+ try {
114
+ const result = await queryDecided(params);
115
+ const list = Array.isArray(result) ? result : result?.data ?? [];
116
+ return { bids: list.map((bid) => ({ ...bid, decided: true })), supported: true };
117
+ } catch {
118
+ return { bids: [], supported: false };
119
+ }
120
+ }
121
+
122
+ // src/mantine/blocks/action/actionTypes/collectionUsers/CollectionUsersFlowDetail.tsx
123
+ var LOG = "[collection.users]";
124
+ var MAX_LISTED_REJECTIONS = 8;
125
+ function roleLabel(role) {
126
+ return role === "submit" ? "Submit (Contributor)" : "Evaluate (Evaluator)";
127
+ }
128
+ var MIN_AGENT_QUOTA = 1;
129
+ var DEFAULT_CONTRIBUTOR_QUOTA = 100;
130
+ var DEFAULT_EVALUATOR_QUOTA = 100;
131
+ var IXO_DENOM = "uixo";
132
+ var USDC_DENOM = "ibc/6BBE9BD4246F8E04948D5A4EEE7164B2630263B9EBB5E7DC5F0A46C62A2FF97B";
133
+ var DENOM_DECIMALS = 6;
134
+ var EMPTY_MAX_AMOUNTS = { ixo: "", usdc: "" };
135
+ function formatQuota(value) {
136
+ if (value == null || value === "") return "\u2014";
137
+ return value;
138
+ }
139
+ function truncateAddress(address) {
140
+ if (!address) return "";
141
+ if (address.length <= 16) return address;
142
+ return `${address.slice(0, 10)}...${address.slice(-4)}`;
143
+ }
144
+ function toIxoDid(value) {
145
+ const trimmed = String(value || "").trim();
146
+ if (!trimmed) return "";
147
+ return trimmed.startsWith("did:") ? trimmed : `did:ixo:${trimmed}`;
148
+ }
149
+ function getGranteeDid(grantee) {
150
+ return toIxoDid(grantee.did || grantee.address);
151
+ }
152
+ function toBaseUnits(displayAmount) {
153
+ const trimmed = String(displayAmount ?? "").trim();
154
+ const n = Number(trimmed);
155
+ if (!Number.isFinite(n) || n <= 0) return "0";
156
+ const [intPart = "", fracRaw = ""] = trimmed.split(".");
157
+ const frac = fracRaw.slice(0, DENOM_DECIMALS).padEnd(DENOM_DECIMALS, "0");
158
+ return `${intPart}${frac}`.replace(/^0+/, "") || "0";
159
+ }
160
+ function fromBaseUnits(baseAmount) {
161
+ const n = Number(baseAmount);
162
+ if (!Number.isFinite(n)) return String(baseAmount ?? "");
163
+ return String(n / Math.pow(10, DENOM_DECIMALS));
164
+ }
165
+ function buildMaxAmounts(values) {
166
+ return [
167
+ { denom: IXO_DENOM, amount: values.ixo },
168
+ { denom: USDC_DENOM, amount: values.usdc }
169
+ ].filter((coin) => {
170
+ const amount = Number(coin.amount);
171
+ return Number.isFinite(amount) && amount > 0;
172
+ }).map((coin) => ({ denom: coin.denom, amount: toBaseUnits(coin.amount) }));
173
+ }
174
+ function formatCoin(coin) {
175
+ const denom = coin.denom === IXO_DENOM ? "IXO" : coin.denom === USDC_DENOM ? "USDC" : coin.denom;
176
+ return `${fromBaseUnits(coin.amount)} ${denom}`;
177
+ }
178
+ function MaxAmountsInput({ value, onChange, disabled }) {
179
+ return /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Evaluator max amounts"), /* @__PURE__ */ React.createElement(Group, { grow: true, align: "flex-start" }, /* @__PURE__ */ React.createElement(
180
+ BaseNumberInput,
181
+ {
182
+ label: "IXO",
183
+ min: 0,
184
+ value: value.ixo === "" ? "" : Number(value.ixo),
185
+ onChange: (amount) => onChange({ ...value, ixo: amount === "" || amount == null ? "" : String(amount) }),
186
+ disabled
187
+ }
188
+ ), /* @__PURE__ */ React.createElement(
189
+ BaseNumberInput,
190
+ {
191
+ label: "USDC",
192
+ min: 0,
193
+ value: value.usdc === "" ? "" : Number(value.usdc),
194
+ onChange: (amount) => onChange({ ...value, usdc: amount === "" || amount == null ? "" : String(amount) }),
195
+ disabled
196
+ }
197
+ )));
198
+ }
199
+ function broadcastTxCount(output) {
200
+ if (Array.isArray(output?.transactionHashes)) return output.transactionHashes.length;
201
+ return output?.batched === false ? Number(output?.grantedCount) || 1 : 1;
202
+ }
203
+ function grantBroadcastSummary(output) {
204
+ const count = Number(output?.grantedCount);
205
+ if (!Number.isFinite(count) || count <= 1) return "Grant broadcast";
206
+ const transactions = broadcastTxCount(output);
207
+ return transactions === 1 ? `${count} accounts granted in one transaction` : `${count} accounts granted in ${transactions} transactions`;
208
+ }
209
+ function rejectionReason(problem) {
210
+ if (problem === "invalid-address") return "not a valid ixo1\u2026 address";
211
+ if (problem === "extra-in-row") return "a second account on the same row \u2014 only the first one on a row is granted";
212
+ return "no account found in this row";
213
+ }
214
+ function signingPlan(count, canBatchGrants) {
215
+ if (count <= 1) return null;
216
+ if (!canBatchGrants) {
217
+ return { color: "yellow", message: `This host cannot bundle grants \u2014 it will ask you to sign ${count} separate transactions, one per account.` };
218
+ }
219
+ const batches = collectionUsersBatchCount(count);
220
+ if (batches === 1) return { color: "blue", message: `All ${count} grants go in one transaction \u2014 you sign once.` };
221
+ return {
222
+ color: "yellow",
223
+ message: `${count} grants exceed the ${COLLECTION_USERS_MAX_GRANTS_PER_TX} per transaction limit, so they are split into ${batches} batches \u2014 you will be asked to sign ${batches} times, one after the other.`
224
+ };
225
+ }
226
+ function BulkAccountsInput({
227
+ text,
228
+ onChange,
229
+ parsed,
230
+ isDisabled,
231
+ canBatchGrants,
232
+ actingAsGroup
233
+ }) {
234
+ const { addresses, rejected, duplicates } = parsed;
235
+ const listed = rejected.slice(0, MAX_LISTED_REJECTIONS);
236
+ const plan = signingPlan(addresses.length, canBatchGrants);
237
+ return /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(
238
+ BaseTextArea,
239
+ {
240
+ label: "Accounts",
241
+ description: "Paste (Ctrl+V) a column copied from Google Sheets or Excel \u2014 one account per row. Other columns, headers and blank rows are ignored.",
242
+ placeholder: "ixo1\u2026\nixo1\u2026\nixo1\u2026",
243
+ minRows: 4,
244
+ maxRows: 12,
245
+ value: text,
246
+ onChange: (event) => onChange(event.currentTarget.value),
247
+ disabled: isDisabled,
248
+ styles: { input: { fontFamily: "var(--mantine-font-family-monospace)" } }
249
+ }
250
+ ), /* @__PURE__ */ React.createElement(Group, { justify: "space-between", align: "center" }, /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Badge, { size: "sm", variant: "light", color: addresses.length > 0 ? "green" : "gray" }, addresses.length, " account", addresses.length === 1 ? "" : "s", " to grant"), duplicates > 0 && /* @__PURE__ */ React.createElement(Badge, { size: "sm", variant: "light", color: "gray" }, duplicates, " duplicate", duplicates === 1 ? "" : "s", " removed"), rejected.length > 0 && /* @__PURE__ */ React.createElement(Badge, { size: "sm", variant: "light", color: "yellow" }, rejected.length, " row", rejected.length === 1 ? "" : "s", " skipped")), !!text.trim() && /* @__PURE__ */ React.createElement(Button, { size: "compact-xs", variant: "subtle", color: "gray", onClick: () => onChange(""), disabled: isDisabled }, "Clear")), rejected.length > 0 && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, /* @__PURE__ */ React.createElement(Stack, { gap: 2 }, /* @__PURE__ */ React.createElement(Text, { size: "xs", fw: 600 }, "These rows will NOT be granted:"), listed.map((row) => /* @__PURE__ */ React.createElement(Text, { key: row.line, size: "xs" }, "Row ", row.line, ": \u201C", row.raw.length > 60 ? `${row.raw.slice(0, 60)}\u2026` : row.raw, "\u201D \u2014 ", rejectionReason(row.problem))), rejected.length > listed.length && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "\u2026and ", rejected.length - listed.length, " more."))), addresses.length > 0 && /* @__PURE__ */ React.createElement(
251
+ Box,
252
+ {
253
+ style: {
254
+ border: "1px solid var(--mantine-color-neutralColor-6)",
255
+ borderRadius: 8,
256
+ padding: 8,
257
+ maxHeight: 160,
258
+ overflowY: "auto",
259
+ background: "var(--mantine-color-neutralColor-5)"
260
+ }
261
+ },
262
+ /* @__PURE__ */ React.createElement(Stack, { gap: 2 }, addresses.map((address, index) => /* @__PURE__ */ React.createElement(Text, { key: address, size: "xs", ff: "monospace", truncate: true }, index + 1, ". ", address)))
263
+ ), actingAsGroup && addresses.length > COLLECTION_USERS_MAX_GRANTS_PER_TX && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, "Acting as a POD puts every grant in one proposal, which executes as a single transaction \u2014 so this list cannot be split. Reduce it to ", COLLECTION_USERS_MAX_GRANTS_PER_TX, " ", "accounts or fewer, or grant without acting as a POD."), !actingAsGroup && plan && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: plan.color, styles: actionAlertStyles }, plan.message));
264
+ }
265
+ function toQuotaString(value) {
266
+ const n = Number(value);
267
+ if (!Number.isFinite(n) || n < MIN_AGENT_QUOTA) return String(MIN_AGENT_QUOTA);
268
+ return String(Math.floor(n));
269
+ }
270
+ function getRoleColor(role) {
271
+ const r = String(role || "").toLowerCase();
272
+ if (r === "service_agent" || r === "sa") return "blue";
273
+ if (r === "evaluation_agent" || r === "ea") return "green";
274
+ return "gray";
275
+ }
276
+ function getBidRoleLabel(role) {
277
+ const r = String(role || "").toLowerCase();
278
+ if (r === "service_agent" || r === "sa") return "Contributor";
279
+ if (r === "evaluation_agent" || r === "ea") return "Evaluator";
280
+ return role || "Unknown";
281
+ }
282
+ function getTimeAgo(dateString) {
283
+ if (!dateString) return "";
284
+ try {
285
+ const date = new Date(dateString);
286
+ const diffMs = Date.now() - date.getTime();
287
+ const diffMins = Math.floor(diffMs / 6e4);
288
+ if (diffMins < 1) return "just now";
289
+ if (diffMins < 60) return `${diffMins}m ago`;
290
+ const diffHours = Math.floor(diffMins / 60);
291
+ if (diffHours < 24) return `${diffHours}h ago`;
292
+ const diffDays = Math.floor(diffHours / 24);
293
+ if (diffDays < 30) return `${diffDays} day${diffDays > 1 ? "s" : ""} ago`;
294
+ const diffMonths = Math.floor(diffDays / 30);
295
+ return `${diffMonths} month${diffMonths > 1 ? "s" : ""} ago`;
296
+ } catch {
297
+ return dateString;
298
+ }
299
+ }
300
+ var CollectionUsersFlowDetail = ({
301
+ inputs,
302
+ editor,
303
+ block,
304
+ runtime,
305
+ updateRuntime,
306
+ isDisabled,
307
+ provideSigningHandler,
308
+ unlockSigning,
309
+ registerRuntimeInputs,
310
+ executeAction,
311
+ activePendingInvocation
312
+ }) => {
313
+ const [actAs, setActAs] = useState(emptyActAsGroupState());
314
+ const t = useTranslate();
315
+ const handlers = useBlocknoteHandlers();
316
+ const handlersRef = useRef(handlers);
317
+ useEffect(() => {
318
+ handlersRef.current = handlers;
319
+ }, [handlers]);
320
+ const parsed = useMemo(() => parseCollectionUsersActionInputs(inputs), [inputs]);
321
+ const editorDocument = editor?.document || [];
322
+ const runtimeReader = useRunRuntimeReader(editor);
323
+ const resolveOpts = useMemo(() => ({ yRuntime: runtimeReader }), [runtimeReader]);
324
+ const templateDeedDid = useMemo(() => resolveReferences(parsed.deedDid || "", editorDocument, resolveOpts).trim(), [parsed.deedDid, editorDocument, resolveOpts]);
325
+ const templateCollectionId = useMemo(() => resolveReferences(parsed.collectionId || "", editorDocument, resolveOpts).trim(), [parsed.collectionId, editorDocument, resolveOpts]);
326
+ const isListener = !!activePendingInvocation;
327
+ const pendingPayload = useMemo(() => {
328
+ if (!activePendingInvocation) return void 0;
329
+ return {
330
+ ...activePendingInvocation.payload || {},
331
+ ...activePendingInvocation.refSnapshots || {}
332
+ };
333
+ }, [activePendingInvocation]);
334
+ const deedDid = useMemo(() => String(pendingPayload?.entity || "").trim() || templateDeedDid, [pendingPayload, templateDeedDid]);
335
+ const collectionId = useMemo(() => String(pendingPayload?.collectionId || "").trim() || templateCollectionId, [pendingPayload, templateCollectionId]);
336
+ const [adminAddress, setAdminAddress] = useState("");
337
+ const [adminError, setAdminError] = useState(null);
338
+ useEffect(() => {
339
+ let mounted = true;
340
+ if (!deedDid) {
341
+ setAdminAddress("");
342
+ return;
343
+ }
344
+ (async () => {
345
+ try {
346
+ const addr = await handlersRef.current.getAdminAccountAddress(deedDid);
347
+ if (mounted) {
348
+ setAdminAddress(String(addr || "").trim());
349
+ setAdminError(null);
350
+ }
351
+ } catch (err) {
352
+ if (mounted) {
353
+ setAdminAddress("");
354
+ setAdminError(err instanceof Error ? err.message : "Failed to resolve entity admin account");
355
+ }
356
+ }
357
+ })();
358
+ return () => {
359
+ mounted = false;
360
+ };
361
+ }, [deedDid]);
362
+ const output = runtime.output || void 0;
363
+ const lastOp = String(output?.operation || "");
364
+ const listGrantees = useMemo(() => {
365
+ const out = output;
366
+ return Array.isArray(out?.grantees) ? out.grantees : [];
367
+ }, [output]);
368
+ const [granteeProfilesByDid, setGranteeProfilesByDid] = useState({});
369
+ const isRunning = runtime.state === "running";
370
+ const isFailed = runtime.state === "failed";
371
+ const errorMessage = runtime.error?.message || null;
372
+ const hasTxProof = !!String(output?.transactionHash || "").trim();
373
+ const hasListProof = Array.isArray(output?.grantees);
374
+ const hasProof = hasTxProof || hasListProof;
375
+ const isCompletedWithProof = runtime.state === "completed" && hasProof;
376
+ const isStale = runtime.state === "completed" && !hasProof;
377
+ const [section, setSection] = useState("list");
378
+ const [activeOp, setActiveOp] = useState("add");
379
+ const [addAddress, setAddAddress] = useState("");
380
+ const [addRole, setAddRole] = useState("submit");
381
+ const [addQuota, setAddQuota] = useState(String(DEFAULT_CONTRIBUTOR_QUOTA));
382
+ const [addMaxAmounts, setAddMaxAmounts] = useState(EMPTY_MAX_AMOUNTS);
383
+ const [granteeKind, setGranteeKind] = useState("user");
384
+ const [members, setMembers] = useState([]);
385
+ const [addMode, setAddMode] = useState("single");
386
+ const [bulkText, setBulkText] = useState("");
387
+ const parsedAccounts = useMemo(() => parseAccountList(bulkText), [bulkText]);
388
+ const bulkAddresses = parsedAccounts.addresses;
389
+ const canBatchGrants = typeof handlers.collectionUsers?.grantMany === "function";
390
+ const [revokeTarget, setRevokeTarget] = useState(null);
391
+ const handleBulkPaste = useCallback(
392
+ (text) => {
393
+ const carried = addAddress.trim();
394
+ setActiveOp("add");
395
+ setRevokeTarget(null);
396
+ setAddAddress("");
397
+ setAddMode("list");
398
+ setBulkText((prev) => [prev.replace(/\s+$/, ""), carried, text].filter((part) => part.trim()).join("\n"));
399
+ },
400
+ [addAddress]
401
+ );
402
+ const handleAddModeChange = useCallback((mode) => {
403
+ setActiveOp("add");
404
+ setRevokeTarget(null);
405
+ setAddMode(mode);
406
+ }, []);
407
+ const classifyHandler = handlers.classifyAddress;
408
+ const enumerateHandler = handlers.enumerateMembers;
409
+ const canClassify = typeof classifyHandler === "function";
410
+ const canEnumerate = typeof enumerateHandler === "function";
411
+ const [classification, setClassification] = useState(null);
412
+ const [classifying, setClassifying] = useState(false);
413
+ const [classifyError, setClassifyError] = useState(null);
414
+ const [debouncedAddress] = useDebouncedValue(addAddress.trim(), 400);
415
+ useEffect(() => {
416
+ setClassification(null);
417
+ setClassifyError(null);
418
+ setGranteeKind("user");
419
+ setMembers([]);
420
+ }, [debouncedAddress]);
421
+ const runClassify = useCallback(async () => {
422
+ const address = addAddress.trim();
423
+ if (!address || !classifyHandler) return;
424
+ setClassifying(true);
425
+ setClassifyError(null);
426
+ try {
427
+ console.log(`${LOG} classifyAddress \u2192`, { address });
428
+ const result = await classifyHandler({ address });
429
+ setClassification(result);
430
+ if (result?.daodao && !result.daodao.canExerciseGrant) {
431
+ setGranteeKind("group-members");
432
+ } else {
433
+ setGranteeKind("user");
434
+ }
435
+ } catch (err) {
436
+ setClassification(null);
437
+ setClassifyError(err instanceof Error ? err.message : "Failed to classify address");
438
+ } finally {
439
+ setClassifying(false);
440
+ }
441
+ }, [addAddress, classifyHandler]);
442
+ const enumerateGroupMembers = useCallback(async () => {
443
+ const address = addAddress.trim();
444
+ if (!address || !enumerateHandler) return;
445
+ setClassifying(true);
446
+ try {
447
+ console.log(`${LOG} enumerateMembers \u2192`, { address });
448
+ const result = await enumerateHandler({ groupAddress: address });
449
+ setMembers(Array.isArray(result?.members) ? result.members : []);
450
+ } catch (err) {
451
+ setMembers([]);
452
+ setClassifyError(err instanceof Error ? err.message : "Failed to enumerate group members");
453
+ } finally {
454
+ setClassifying(false);
455
+ }
456
+ }, [addAddress, enumerateHandler]);
457
+ useEffect(() => {
458
+ if (granteeKind === "group-members" && classification?.daodao && canEnumerate) {
459
+ enumerateGroupMembers();
460
+ } else if (granteeKind !== "group-members") {
461
+ setMembers([]);
462
+ }
463
+ }, [granteeKind, classification, canEnumerate, enumerateGroupMembers]);
464
+ useEffect(() => {
465
+ setAddQuota(String(addRole === "evaluate" ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));
466
+ }, [addRole]);
467
+ const isGroup = !!classification?.daodao;
468
+ const canExerciseGrant = !!classification?.daodao?.canExerciseGrant;
469
+ const pendingGranteeCount = addMode === "list" ? bulkAddresses.length : granteeKind === "group-members" ? members.length : 1;
470
+ const memberSigningPlan = useMemo(() => signingPlan(members.length, canBatchGrants), [members.length, canBatchGrants]);
471
+ const listOnLoadRef = useRef(false);
472
+ const runList = useCallback(async () => {
473
+ if (!executeAction) {
474
+ updateRuntime({ state: "failed", error: { message: "Shared action executor is unavailable", at: Date.now() } });
475
+ return;
476
+ }
477
+ if (!collectionId || !adminAddress) return;
478
+ console.log(`${LOG} list \u2192`, { collectionId, adminAddress });
479
+ try {
480
+ const outcome = await executeAction({ runtimeInputs: { operation: "list", collectionId, adminAddress } });
481
+ if (!outcome.success) {
482
+ throw new Error(outcome.error || "Failed to list collection grantees");
483
+ }
484
+ const payload = outcome.output;
485
+ if (!Array.isArray(payload?.grantees)) {
486
+ throw new Error("List returned no grantees array. Check the [collection:list] handler logs.");
487
+ }
488
+ console.log(`${LOG} list success`, { count: payload.grantees.length });
489
+ } catch (err) {
490
+ const message = err instanceof Error ? err.message : "Failed to list collection grantees";
491
+ console.error(`${LOG} list failed`, { message });
492
+ updateRuntime({ state: "failed", error: { message, at: Date.now() } });
493
+ }
494
+ }, [executeAction, collectionId, adminAddress, updateRuntime]);
495
+ useEffect(() => {
496
+ if (listOnLoadRef.current) return;
497
+ if (!collectionId || !adminAddress) return;
498
+ if (isRunning || isFailed) return;
499
+ if (runtime.state === "needs_verification") return;
500
+ if (hasListProof) return;
501
+ listOnLoadRef.current = true;
502
+ console.log(`${LOG} list-on-load`, { collectionId });
503
+ runList();
504
+ }, [collectionId, adminAddress, isRunning, isFailed, runtime.state, hasListProof, runList]);
505
+ const handleManualRefreshList = useCallback(() => {
506
+ listOnLoadRef.current = false;
507
+ runList();
508
+ }, [runList]);
509
+ const [evaluatedBids, setEvaluatedBids] = useState({});
510
+ const handleBidEvaluated = useCallback((bidId, outcome) => {
511
+ setEvaluatedBids((prev) => ({ ...prev, [bidId]: outcome }));
512
+ }, []);
513
+ const granteeNamesByDid = useMemo(() => {
514
+ const namesByDid = {};
515
+ for (const [did, profile] of Object.entries(granteeProfilesByDid)) {
516
+ if (profile?.displayname) namesByDid[did] = profile.displayname;
517
+ }
518
+ return namesByDid;
519
+ }, [granteeProfilesByDid]);
520
+ const fetchCollectionBids = useCallback(async () => {
521
+ if (!deedDid || !collectionId) return { bids: [], truncated: false, decidedIncluded: false };
522
+ const handlers2 = handlersRef.current;
523
+ let open = [];
524
+ let truncated = false;
525
+ try {
526
+ const result = await fetchAllBids(handlers2.queryBids, { collectionId, entityDid: deedDid });
527
+ open = result.bids;
528
+ truncated = result.truncated;
529
+ } catch {
530
+ open = [];
531
+ }
532
+ const decided = await fetchDecidedBids(handlers2, { collectionId, entityDid: deedDid });
533
+ return { bids: dedupeBids([...open, ...decided.bids]), truncated, decidedIncluded: decided.supported };
534
+ }, [deedDid, collectionId]);
535
+ const [membersExportError, setMembersExportError] = useState(null);
536
+ const handleDownloadGranteesCsv = useCallback(async () => {
537
+ const { bids, truncated, decidedIncluded } = await fetchCollectionBids();
538
+ downloadSectionedCsv(
539
+ buildCollectionMembersSections({
540
+ grantees: listGrantees,
541
+ bids,
542
+ namesByDid: granteeNamesByDid,
543
+ bidOptions: { evaluatedByBidId: evaluatedBids },
544
+ collectionId,
545
+ bidsTruncated: truncated,
546
+ decidedBidsIncluded: decidedIncluded
547
+ }),
548
+ { filename: exportFileNames.collectionMembers(collectionId).csv }
549
+ );
550
+ setMembersExportError(truncated ? "Bid paging stopped early \u2014 part 2 of the export is incomplete." : null);
551
+ }, [fetchCollectionBids, listGrantees, granteeNamesByDid, evaluatedBids, collectionId]);
552
+ const handleDownloadGranteesZip = useCallback(async () => {
553
+ const { bids, truncated, decidedIncluded } = await fetchCollectionBids();
554
+ const names = exportFileNames.collectionMembers(collectionId);
555
+ const handlers2 = handlersRef.current;
556
+ const fetchMedia = handlers2.fetchClaimMedia ? (url) => handlers2.fetchClaimMedia(url, { entityDid: deedDid }) : void 0;
557
+ const { blob, mediaTotal, mediaFailed } = await buildExportBundle({
558
+ records: bids.map((bid) => ({
559
+ recordId: bid.id,
560
+ answers: bidAnswers(bid),
561
+ manifest: {
562
+ bidId: bid.id,
563
+ did: bid.did,
564
+ address: bid.address,
565
+ role: bid.role,
566
+ created: bid.created,
567
+ status: getBidStatusInfo(bid, { grantees: listGrantees, evaluatedByBidId: evaluatedBids }).key
568
+ }
569
+ })),
570
+ fetchMedia,
571
+ renderCsv: (answersByBidId) => sectionsToCsv(
572
+ buildCollectionMembersSections({
573
+ grantees: listGrantees,
574
+ bids,
575
+ namesByDid: granteeNamesByDid,
576
+ bidOptions: { evaluatedByBidId: evaluatedBids, answersByBidId },
577
+ collectionId,
578
+ bidsTruncated: truncated,
579
+ decidedBidsIncluded: decidedIncluded
580
+ })
581
+ ),
582
+ csvName: names.csv,
583
+ manifestName: names.manifest
584
+ });
585
+ downloadBlob(blob, names.zip);
586
+ const notes = [
587
+ truncated ? "Bid paging stopped early \u2014 part 2 of the export is incomplete." : "",
588
+ mediaFailed > 0 ? `${mediaFailed} of ${mediaTotal} bid media files could not be downloaded \u2014 see downloadStatus in ${names.manifest}.` : ""
589
+ ].filter(Boolean);
590
+ setMembersExportError(notes.length > 0 ? notes.join(" ") : null);
591
+ }, [fetchCollectionBids, listGrantees, granteeNamesByDid, evaluatedBids, collectionId, deedDid]);
592
+ useEffect(() => {
593
+ let mounted = true;
594
+ const dids = Array.from(new Set(listGrantees.map(getGranteeDid).filter(Boolean)));
595
+ const missing = dids.filter((did) => !granteeProfilesByDid[did]);
596
+ if (missing.length === 0)
597
+ return () => {
598
+ mounted = false;
599
+ };
600
+ const loadProfiles = async () => {
601
+ const results = await Promise.all(
602
+ missing.map(async (did) => {
603
+ try {
604
+ const profile = await handlersRef.current.getMatrixInfoPerDid(did);
605
+ return [did, profile];
606
+ } catch {
607
+ return [did, null];
608
+ }
609
+ })
610
+ );
611
+ if (!mounted) return;
612
+ setGranteeProfilesByDid((prev) => {
613
+ const next = { ...prev };
614
+ results.forEach(([did, profile]) => {
615
+ if (profile) {
616
+ next[did] = profile;
617
+ }
618
+ });
619
+ return next;
620
+ });
621
+ };
622
+ void loadProfiles();
623
+ return () => {
624
+ mounted = false;
625
+ };
626
+ }, [listGrantees, granteeProfilesByDid]);
627
+ const validation = useMemo(() => {
628
+ if (section === "bids") return { ok: false };
629
+ if (!collectionId) return { ok: false, error: "No collection configured. Set one in template mode." };
630
+ if (!adminAddress) return { ok: false, error: adminError || "Resolving entity admin account\u2026" };
631
+ if (activeOp === "revoke") {
632
+ if (!revokeTarget?.address) return { ok: false, error: "Pick a grantee to revoke from the list." };
633
+ return { ok: true };
634
+ }
635
+ if (addMode === "list") {
636
+ if (bulkAddresses.length === 0) {
637
+ return { ok: false, error: parsedAccounts.rows.length > 0 ? "No valid ixo1\u2026 accounts in the pasted list." : "Paste a list of accounts to grant." };
638
+ }
639
+ } else {
640
+ const address = addAddress.trim();
641
+ if (!address) return { ok: false, error: "Enter a grantee address." };
642
+ if (granteeKind === "group-account" && !canExerciseGrant) {
643
+ return { ok: false, error: "This group cannot hold the authorization. Grant its members individually instead." };
644
+ }
645
+ if (granteeKind === "group-members") {
646
+ if (members.length === 0) return { ok: false, error: "No group members resolved yet." };
647
+ }
648
+ }
649
+ if (actAs.actAsGroup && pendingGranteeCount > COLLECTION_USERS_MAX_GRANTS_PER_TX) {
650
+ return {
651
+ ok: false,
652
+ error: `Acting as a POD allows at most ${COLLECTION_USERS_MAX_GRANTS_PER_TX} accounts per proposal; this grants ${pendingGranteeCount}. Remove ${pendingGranteeCount - COLLECTION_USERS_MAX_GRANTS_PER_TX}, or grant without acting as a POD.`
653
+ };
654
+ }
655
+ const quotaNum = Number(addQuota);
656
+ if (!Number.isFinite(quotaNum) || quotaNum < MIN_AGENT_QUOTA) {
657
+ return { ok: false, error: `Agent quota must be at least ${MIN_AGENT_QUOTA}.` };
658
+ }
659
+ return { ok: true };
660
+ }, [
661
+ section,
662
+ collectionId,
663
+ adminAddress,
664
+ adminError,
665
+ activeOp,
666
+ revokeTarget,
667
+ addMode,
668
+ bulkAddresses.length,
669
+ parsedAccounts.rows.length,
670
+ actAs.actAsGroup,
671
+ pendingGranteeCount,
672
+ addAddress,
673
+ granteeKind,
674
+ canExerciseGrant,
675
+ members.length,
676
+ addQuota
677
+ ]);
678
+ const buildRuntimeInputs = useCallback(() => {
679
+ if (section === "bids") {
680
+ return { operation: "list", collectionId, adminAddress };
681
+ }
682
+ if (activeOp === "revoke") {
683
+ return {
684
+ operation: "revoke",
685
+ collectionId,
686
+ adminAddress,
687
+ deedDid: deedDid || void 0,
688
+ granteeAddress: revokeTarget?.address || "",
689
+ role: revokeTarget?.role || "submit"
690
+ };
691
+ }
692
+ const maxAmounts = buildMaxAmounts(addMaxAmounts);
693
+ const isBulk = addMode === "list";
694
+ return {
695
+ operation: "add",
696
+ collectionId,
697
+ adminAddress,
698
+ deedDid: deedDid || void 0,
699
+ granteeAddress: isBulk ? void 0 : addAddress.trim(),
700
+ role: addRole,
701
+ granteeKind: isBulk ? "address-list" : granteeKind,
702
+ agentQuota: toQuotaString(addQuota),
703
+ maxAmount: addRole === "evaluate" && maxAmounts.length > 0 ? maxAmounts : void 0,
704
+ members: !isBulk && granteeKind === "group-members" ? members : void 0,
705
+ granteeAddresses: isBulk ? bulkAddresses : void 0
706
+ };
707
+ }, [section, activeOp, collectionId, adminAddress, deedDid, revokeTarget, addMode, bulkAddresses, addAddress, addRole, granteeKind, addQuota, addMaxAmounts, members]);
708
+ useEffect(() => {
709
+ if (!registerRuntimeInputs) return;
710
+ registerRuntimeInputs(buildRuntimeInputs());
711
+ }, [registerRuntimeInputs, buildRuntimeInputs]);
712
+ useEffect(() => {
713
+ unlockSigning?.(!isDisabled && !isRunning && validation.ok && actAsGroupReady(actAs));
714
+ }, [unlockSigning, isDisabled, isRunning, validation.ok]);
715
+ const execute = useCallback(async () => {
716
+ if (isDisabled || isRunning) return;
717
+ if (!executeAction) {
718
+ updateRuntime({ state: "failed", error: { message: "Shared action executor is unavailable", at: Date.now() } });
719
+ return;
720
+ }
721
+ if (!validation.ok) {
722
+ console.warn(`${LOG} refusing to execute \u2014 invalid inputs`, { activeOp, error: validation.error });
723
+ return;
724
+ }
725
+ const runtimeInputs = buildRuntimeInputs();
726
+ console.log(`${LOG} execute \u2192`, {
727
+ operation: runtimeInputs.operation,
728
+ collectionId,
729
+ granteeAddress: runtimeInputs.granteeAddress,
730
+ granteeKind: runtimeInputs.granteeKind,
731
+ granteeCount: runtimeInputs.granteeAddresses?.length,
732
+ listener: isListener
733
+ });
734
+ try {
735
+ const outcome = await executeAction({ runtimeInputs: { ...runtimeInputs, ...actAsGroupRuntimeInputs(actAs) } });
736
+ if (!outcome.success) {
737
+ throw new Error(outcome.error || `Collection ${runtimeInputs.operation} failed`);
738
+ }
739
+ const payload = outcome.output;
740
+ if (!String(payload?.transactionHash || "").trim()) {
741
+ throw new Error("Action returned success without a transaction hash. Check the [collection.users] handler logs.");
742
+ }
743
+ console.log(`${LOG} execute success`, { operation: runtimeInputs.operation, transactionHash: payload.transactionHash });
744
+ if (runtimeInputs.operation === "add") {
745
+ setAddAddress("");
746
+ setBulkText("");
747
+ setAddQuota(String(runtimeInputs.role === "evaluate" ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));
748
+ setAddMaxAmounts(EMPTY_MAX_AMOUNTS);
749
+ setGranteeKind("user");
750
+ setMembers([]);
751
+ setClassification(null);
752
+ } else {
753
+ setRevokeTarget(null);
754
+ setActiveOp("add");
755
+ }
756
+ listOnLoadRef.current = false;
757
+ setTimeout(() => {
758
+ runList();
759
+ }, 0);
760
+ } catch (err) {
761
+ const message = err instanceof Error ? err.message : `Failed to ${runtimeInputs.operation} grantee`;
762
+ console.error(`${LOG} execute failed`, { operation: runtimeInputs.operation, message });
763
+ updateRuntime({ state: "failed", error: { message, at: Date.now() } });
764
+ }
765
+ }, [isDisabled, isRunning, executeAction, validation.ok, validation.error, activeOp, buildRuntimeInputs, collectionId, updateRuntime, runList, isListener]);
766
+ useEffect(() => {
767
+ if (!provideSigningHandler) return;
768
+ provideSigningHandler(execute);
769
+ }, [provideSigningHandler, execute]);
770
+ const handleReset = useCallback(() => {
771
+ console.log(`${LOG} reset \u2192 idle`);
772
+ listOnLoadRef.current = false;
773
+ updateRuntime({ state: "idle", error: void 0, output: {} });
774
+ }, [updateRuntime]);
775
+ const handleForceRun = useCallback(() => {
776
+ console.log(`${LOG} force run`);
777
+ updateRuntime({ state: "idle", error: void 0, output: {} });
778
+ setTimeout(() => {
779
+ execute();
780
+ }, 0);
781
+ }, [updateRuntime, execute]);
782
+ const handleSelectRevoke = useCallback((grantee) => {
783
+ setActiveOp("revoke");
784
+ setRevokeTarget({ address: grantee.address, role: grantee.role });
785
+ }, []);
786
+ const cancelRevoke = useCallback(() => {
787
+ setRevokeTarget(null);
788
+ setActiveOp("add");
789
+ }, []);
790
+ const title = block?.props?.title || "Collection Users";
791
+ const description = block?.props?.description || "";
792
+ const configMissing = !collectionId;
793
+ return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, /* @__PURE__ */ React.createElement(GroupProposalStatus, { editor, block, runtime }), runtime?.state !== "awaiting_readback" && /* @__PURE__ */ React.createElement(ActAsGroupSection, { value: actAs, onChange: setActAs, isDisabled, actionLabel: "change this collection's users" }), /* @__PURE__ */ React.createElement(Stack, { gap: 2 }, /* @__PURE__ */ React.createElement(Text, { fw: 600 }, title), description && /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed" }, description)), configMissing && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, t("actionTypes.collectionUsers.flow.errors.configRequired", {
794
+ defaultValue: "Configure the {{did}} and {{claimCollection}} in template mode before running this action.",
795
+ did: "DID",
796
+ claimCollection: "claim collection"
797
+ })), 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 result was recorded. This is stale state from a previous run \u2014 reset and re-run."), /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(Button, { variant: "outline", size: "xs", onClick: handleReset }, "Reset"), /* @__PURE__ */ React.createElement(Button, { variant: "filled", size: "xs", onClick: handleForceRun, disabled: !validation.ok }, "Force Run Now")))), isFailed && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }), color: "red", title: "Action Failed", styles: actionAlertStyles }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, errorMessage && /* @__PURE__ */ React.createElement(Text, { size: "sm" }, errorMessage), /* @__PURE__ */ React.createElement(Group, null, /* @__PURE__ */ React.createElement(Button, { variant: "outline", size: "xs", onClick: handleReset }, "Reset"), !!collectionId && !!adminAddress && /* @__PURE__ */ React.createElement(Button, { variant: "filled", size: "xs", leftSection: /* @__PURE__ */ React.createElement(IconRefresh, { size: 14 }), onClick: handleManualRefreshList }, "Refresh List")))), isCompletedWithProof && hasTxProof && (lastOp === "add" || lastOp === "revoke") && /* @__PURE__ */ React.createElement(DismissibleAlert, { icon: /* @__PURE__ */ React.createElement(IconCheck, { size: 16 }), color: "green", styles: actionAlertStyles }, lastOp === "add" ? grantBroadcastSummary(output) : "Revoke broadcast", " \u2014 ", broadcastTxCount(output) > 1 ? "last tx" : "tx", " ", truncateAddress(String(output?.transactionHash || "")), "."), !configMissing && /* @__PURE__ */ React.createElement(
798
+ SegmentedControl,
799
+ {
800
+ fullWidth: true,
801
+ value: section,
802
+ onChange: (value) => setSection(value),
803
+ disabled: isDisabled || isRunning,
804
+ data: [
805
+ { label: "Users", value: "list" },
806
+ { label: "Add", value: "add" },
807
+ { label: "Bids", value: "bids" }
808
+ ]
809
+ }
810
+ ), !configMissing && section === "list" && /* @__PURE__ */ React.createElement(Stack, { gap: "sm" }, /* @__PURE__ */ React.createElement(Group, { justify: "space-between", align: "center" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600 }, "Grantees"), /* @__PURE__ */ React.createElement(Group, { gap: 4 }, /* @__PURE__ */ React.createElement(DownloadCsvButton, { onDownload: handleDownloadGranteesCsv, disabled: isRunning, label: "Download members CSV (grants + bids)", onError: setMembersExportError }), /* @__PURE__ */ React.createElement(DownloadZipButton, { onDownload: handleDownloadGranteesZip, disabled: isRunning, label: "Download members + bid media (ZIP)", onError: setMembersExportError }), /* @__PURE__ */ React.createElement(ActionIcon, { variant: "subtle", color: "gray", size: "sm", onClick: handleManualRefreshList, disabled: isRunning || !adminAddress }, /* @__PURE__ */ React.createElement(IconRefresh, { size: 16 })))), membersExportError && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles, onClose: () => setMembersExportError(null) }, membersExportError), isRunning && lastOp !== "add" && lastOp !== "revoke" && /* @__PURE__ */ React.createElement(Group, { gap: "xs", justify: "center", py: "sm" }, /* @__PURE__ */ React.createElement(Loader, { size: "xs" }), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Loading grantees\u2026")), !isRunning && listGrantees.length === 0 && /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "No grantees hold a constraint for this collection yet."), listGrantees.map((grantee) => {
811
+ const isTarget = revokeTarget?.address === grantee.address && revokeTarget?.role === grantee.role;
812
+ const granteeDid = getGranteeDid(grantee);
813
+ const profile = granteeProfilesByDid[granteeDid];
814
+ const displayName = profile?.displayname || truncateAddress(grantee.address);
815
+ return /* @__PURE__ */ React.createElement(
816
+ Box,
817
+ {
818
+ key: `${grantee.address}-${grantee.role}`,
819
+ style: {
820
+ border: `1px solid ${isTarget ? "var(--mantine-color-red-5)" : "var(--mantine-color-neutralColor-6)"}`,
821
+ borderRadius: 8,
822
+ padding: 12,
823
+ background: "var(--mantine-color-neutralColor-5)"
824
+ }
825
+ },
826
+ /* @__PURE__ */ React.createElement(Group, { justify: "space-between", align: "center", wrap: "nowrap" }, /* @__PURE__ */ React.createElement(Stack, { gap: 2, style: { minWidth: 0 } }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600, truncate: true }, displayName), profile?.displayname && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed", truncate: true }, truncateAddress(grantee.address)), /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Badge, { size: "xs", variant: "light", color: grantee.role === "submit" ? "blue" : "green" }, roleLabel(grantee.role)), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Quota: ", formatQuota(grantee.agentQuota)))), isTarget ? /* @__PURE__ */ React.createElement(Button, { size: "compact-xs", variant: "subtle", color: "gray", onClick: cancelRevoke, disabled: isDisabled || isRunning }, "Cancel") : /* @__PURE__ */ React.createElement(
827
+ Button,
828
+ {
829
+ size: "compact-xs",
830
+ variant: "light",
831
+ color: "red",
832
+ leftSection: /* @__PURE__ */ React.createElement(IconTrash, { size: 12 }),
833
+ onClick: () => handleSelectRevoke(grantee),
834
+ disabled: isDisabled || isRunning
835
+ },
836
+ "Revoke"
837
+ ))
838
+ );
839
+ }), revokeTarget && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, "Slide to sign to revoke ", roleLabel(revokeTarget.role), " from ", truncateAddress(revokeTarget.address), ".")), !configMissing && section === "add" && /* @__PURE__ */ React.createElement(Stack, { gap: "sm" }, revokeTarget && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, "A revoke is currently armed. Switch to the Users tab to sign it, or change the grantee below to arm an add instead."), /* @__PURE__ */ React.createElement(
840
+ SegmentedControl,
841
+ {
842
+ fullWidth: true,
843
+ size: "xs",
844
+ value: addMode,
845
+ onChange: (value) => handleAddModeChange(value),
846
+ disabled: isDisabled || isRunning,
847
+ data: [
848
+ { label: "One account", value: "single" },
849
+ { label: "Paste a list", value: "list" }
850
+ ]
851
+ }
852
+ ), addMode === "list" && /* @__PURE__ */ React.createElement(
853
+ BulkAccountsInput,
854
+ {
855
+ text: bulkText,
856
+ onChange: setBulkText,
857
+ parsed: parsedAccounts,
858
+ isDisabled: isDisabled || isRunning,
859
+ canBatchGrants,
860
+ actingAsGroup: actAs.actAsGroup
861
+ }
862
+ ), addMode === "single" && /* @__PURE__ */ React.createElement(Stack, { gap: 4 }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 500 }, "Grantee address"), /* @__PURE__ */ React.createElement(
863
+ RecipientInput,
864
+ {
865
+ value: addAddress,
866
+ onChange: (address) => {
867
+ setActiveOp("add");
868
+ setRevokeTarget(null);
869
+ setAddAddress(address);
870
+ },
871
+ onBulkPaste: handleBulkPaste,
872
+ isDisabled: isDisabled || isRunning,
873
+ placeholder: "Search by name / @user:\u2026, or paste an ixo1\u2026 address"
874
+ }
875
+ )), addMode === "single" && (canClassify ? /* @__PURE__ */ React.createElement(Button, { size: "xs", variant: "light", onClick: runClassify, disabled: !addAddress.trim() || classifying || isRunning, loading: classifying }, "Check address") : /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Address classification is unavailable in this host \u2014 the grantee will be added as a plain account.")), addMode === "single" && classifyError && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, classifyError), addMode === "single" && isGroup && /* @__PURE__ */ React.createElement(Box, { style: { border: "1px solid var(--mantine-color-neutralColor-6)", borderRadius: 8, padding: 12 } }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600 }, "Add the group, or all the members of the POD?"), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Detected a DAO DAO group (", classification?.daodao?.type, "). Choose how to grant access."), /* @__PURE__ */ React.createElement(Radio.Group, { value: granteeKind, onChange: (value) => setGranteeKind(value) }, /* @__PURE__ */ React.createElement(Stack, { gap: "xs", mt: "xs" }, /* @__PURE__ */ React.createElement(
876
+ Radio,
877
+ {
878
+ value: "group-account",
879
+ disabled: !canExerciseGrant || isDisabled || isRunning,
880
+ label: /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, "Add the group"), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, canExerciseGrant ? "Grant the group account directly (it can exercise the grant)." : "Unavailable \u2014 this group cannot exercise the grant."))
881
+ }
882
+ ), /* @__PURE__ */ React.createElement(
883
+ Radio,
884
+ {
885
+ value: "group-members",
886
+ disabled: isDisabled || isRunning,
887
+ label: /* @__PURE__ */ React.createElement(Stack, { gap: 0 }, /* @__PURE__ */ React.createElement(Text, { size: "sm" }, "Add all members of the POD"), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, canEnumerate ? `Fan out: grant each member individually${members.length ? ` (${members.length} resolved)` : ""}.` : "Member enumeration is unavailable in this host."))
888
+ }
889
+ ))), granteeKind === "group-members" && !actAs.actAsGroup && memberSigningPlan && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: memberSigningPlan.color, styles: actionAlertStyles }, memberSigningPlan.message))), addMode === "list" && bulkAddresses.length > 0 && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "The role, quota and limits below apply to all ", bulkAddresses.length, " accounts."), /* @__PURE__ */ React.createElement(
890
+ BaseSelect,
891
+ {
892
+ label: "Role",
893
+ value: addRole,
894
+ onChange: (value) => setAddRole(value || "submit"),
895
+ allowDeselect: false,
896
+ data: [
897
+ { value: "submit", label: "Submit (Contributor)" },
898
+ { value: "evaluate", label: "Evaluate (Evaluator)" }
899
+ ],
900
+ disabled: isDisabled || isRunning
901
+ }
902
+ ), /* @__PURE__ */ React.createElement(
903
+ BaseNumberInput,
904
+ {
905
+ label: "Agent quota (max claims, at least 1)",
906
+ min: MIN_AGENT_QUOTA,
907
+ value: addQuota === "" ? "" : Number(addQuota),
908
+ onChange: (value) => setAddQuota(value === "" || value == null ? "" : String(value)),
909
+ disabled: isDisabled || isRunning
910
+ }
911
+ ), addRole === "evaluate" && /* @__PURE__ */ React.createElement(MaxAmountsInput, { value: addMaxAmounts, onChange: setAddMaxAmounts, disabled: isDisabled || isRunning }), !validation.ok && validation.error && activeOp === "add" && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "yellow", styles: actionAlertStyles }, validation.error)), !configMissing && section === "bids" && /* @__PURE__ */ React.createElement(
912
+ BidInboxSection,
913
+ {
914
+ deedDid,
915
+ collectionId,
916
+ adminAddress,
917
+ isDisabled,
918
+ handlersRef,
919
+ grantees: listGrantees,
920
+ actAs,
921
+ evaluatedByBidId: evaluatedBids,
922
+ onBidEvaluated: handleBidEvaluated,
923
+ onGrantsChanged: handleManualRefreshList
924
+ }
925
+ ), isDisabled && /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "This block is currently disabled."));
926
+ };
927
+ var BidInboxSection = ({
928
+ deedDid,
929
+ collectionId,
930
+ adminAddress,
931
+ isDisabled,
932
+ handlersRef,
933
+ grantees,
934
+ actAs,
935
+ evaluatedByBidId,
936
+ onBidEvaluated,
937
+ onGrantsChanged
938
+ }) => {
939
+ const [bids, setBids] = useState([]);
940
+ const [loading, setLoading] = useState(false);
941
+ const [error, setError] = useState(null);
942
+ const [selectedBidId, setSelectedBidId] = useState("");
943
+ const [decision, setDecision] = useState("");
944
+ const [rejectReason, setRejectReason] = useState("");
945
+ const [approveQuota, setApproveQuota] = useState(String(DEFAULT_CONTRIBUTOR_QUOTA));
946
+ const [approveMaxAmounts, setApproveMaxAmounts] = useState(EMPTY_MAX_AMOUNTS);
947
+ const [submitting, setSubmitting] = useState(false);
948
+ const [profilesByDid, setProfilesByDid] = useState({});
949
+ const [lastDecision, setLastDecision] = useState(null);
950
+ const selectedBid = useMemo(() => bids.find((b) => b.id === selectedBidId) || null, [bids, selectedBidId]);
951
+ const selectedBidIsEvaluator = useMemo(() => {
952
+ const role = String(selectedBid?.role || "").toLowerCase();
953
+ return role === "evaluation_agent" || role === "ea";
954
+ }, [selectedBid]);
955
+ const bidStatusContext = useMemo(() => ({ grantees, evaluatedByBidId }), [grantees, evaluatedByBidId]);
956
+ const bidEvaluatedStatus = useCallback(
957
+ (bid) => {
958
+ const info = getBidStatusInfo(bid, bidStatusContext);
959
+ return info.key === "pending" ? null : info.key;
960
+ },
961
+ [bidStatusContext]
962
+ );
963
+ const { open: openBids, decided: decidedBids } = useMemo(() => partitionBidsByDecision(bids, bidStatusContext), [bids, bidStatusContext]);
964
+ const bidRowOptions = useMemo(
965
+ () => ({
966
+ evaluatedByBidId,
967
+ namesByDid: Object.fromEntries(Object.entries(profilesByDid).map(([did, profile]) => [did, profile?.displayname || ""]))
968
+ }),
969
+ [evaluatedByBidId, profilesByDid]
970
+ );
971
+ const downloadBidsCsv = useCallback(
972
+ (subset, filename) => {
973
+ downloadArrayAsCsv(buildBidRows(subset, grantees, bidRowOptions), { filename });
974
+ },
975
+ [grantees, bidRowOptions]
976
+ );
977
+ const downloadBidsZip = useCallback(
978
+ async (subset, names) => {
979
+ const handlers = handlersRef.current;
980
+ const fetchMedia = handlers.fetchClaimMedia ? (url) => handlers.fetchClaimMedia(url, { entityDid: deedDid }) : void 0;
981
+ const { blob, mediaTotal, mediaFailed } = await buildExportBundle({
982
+ records: subset.map((bid) => ({
983
+ recordId: bid.id,
984
+ answers: bidAnswers(bid),
985
+ manifest: {
986
+ bidId: bid.id,
987
+ did: bid.did,
988
+ address: bid.address,
989
+ role: bid.role,
990
+ created: bid.created,
991
+ status: getBidStatusInfo(bid, bidStatusContext).key
992
+ }
993
+ })),
994
+ fetchMedia,
995
+ renderCsv: (answersByBidId) => rowsToCsv(buildBidRows(subset, grantees, { ...bidRowOptions, answersByBidId })),
996
+ csvName: names.csv,
997
+ manifestName: names.manifest
998
+ });
999
+ downloadBlob(blob, names.zip);
1000
+ setError(mediaFailed > 0 ? `${mediaFailed} of ${mediaTotal} media files could not be downloaded \u2014 see downloadStatus in ${names.manifest}.` : null);
1001
+ },
1002
+ [grantees, bidRowOptions, bidStatusContext, deedDid, handlersRef]
1003
+ );
1004
+ const handleDownloadBidsCsv = useCallback(() => downloadBidsCsv(bids, exportFileNames.bids(collectionId).csv), [downloadBidsCsv, bids, collectionId]);
1005
+ const handleDownloadBidsZip = useCallback(() => downloadBidsZip(bids, exportFileNames.bids(collectionId)), [downloadBidsZip, bids, collectionId]);
1006
+ const refreshBids = useCallback(async () => {
1007
+ if (!deedDid || !collectionId) return;
1008
+ setLoading(true);
1009
+ setError(null);
1010
+ try {
1011
+ const result = await fetchAllBids(handlersRef.current.queryBids, { collectionId, entityDid: deedDid });
1012
+ setBids(dedupeBids(result.bids));
1013
+ setError(describeBidsPagingStop(result));
1014
+ } catch {
1015
+ setBids([]);
1016
+ setError(null);
1017
+ } finally {
1018
+ setLoading(false);
1019
+ }
1020
+ }, [deedDid, collectionId, handlersRef]);
1021
+ useEffect(() => {
1022
+ setSelectedBidId("");
1023
+ setDecision("");
1024
+ setRejectReason("");
1025
+ setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));
1026
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
1027
+ if (deedDid && collectionId) refreshBids();
1028
+ }, [deedDid, collectionId, refreshBids]);
1029
+ useEffect(() => {
1030
+ setDecision("");
1031
+ setRejectReason("");
1032
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
1033
+ setApproveQuota(String(selectedBidIsEvaluator ? DEFAULT_EVALUATOR_QUOTA : DEFAULT_CONTRIBUTOR_QUOTA));
1034
+ }, [selectedBidId, selectedBidIsEvaluator]);
1035
+ useEffect(() => {
1036
+ let mounted = true;
1037
+ const dids = Array.from(new Set(bids.map((b) => b.did).filter(Boolean)));
1038
+ const missing = dids.filter((did) => !profilesByDid[did]);
1039
+ if (missing.length === 0) return;
1040
+ (async () => {
1041
+ const results = await Promise.all(
1042
+ missing.map(async (did) => {
1043
+ try {
1044
+ const profile = await handlersRef.current.getMatrixInfoPerDid(did);
1045
+ return [did, profile];
1046
+ } catch {
1047
+ return [did, null];
1048
+ }
1049
+ })
1050
+ );
1051
+ if (!mounted) return;
1052
+ setProfilesByDid((prev) => {
1053
+ const next = { ...prev };
1054
+ results.forEach(([did, profile]) => {
1055
+ if (profile) next[did] = profile;
1056
+ });
1057
+ return next;
1058
+ });
1059
+ })();
1060
+ return () => {
1061
+ mounted = false;
1062
+ };
1063
+ }, [bids, profilesByDid, handlersRef]);
1064
+ const submitDecision = useCallback(async () => {
1065
+ if (!selectedBid || !decision) return;
1066
+ const role = String(selectedBid.role || "").toLowerCase();
1067
+ const isEvaluator = role === "evaluation_agent" || role === "ea";
1068
+ setSubmitting(true);
1069
+ setError(null);
1070
+ try {
1071
+ const h = handlersRef.current;
1072
+ const granteeName = profilesByDid[selectedBid.did]?.displayname || selectedBid.did || selectedBid.address;
1073
+ const roleLabel2 = getBidRoleLabel(selectedBid.role);
1074
+ if (actAs.actAsGroup) {
1075
+ if (decision !== "approve") {
1076
+ throw new Error('Rejecting a bid on a POD\u2019s behalf is not supported from this panel yet \u2014 switch "Acting as" to Myself, or use the Evaluate Bid block.');
1077
+ }
1078
+ if (!adminAddress) throw new Error("Entity admin account is not resolved yet.");
1079
+ if (typeof h.prepareGroupAgentApplicationApproval !== "function" || typeof h.createGroupExecutionProposal !== "function") {
1080
+ throw new Error("Acting as a POD is not available: the host does not implement the POD proposal handlers.");
1081
+ }
1082
+ const coreAddress = actAs.groupCoreAddress.trim();
1083
+ const podMaxAmounts = isEvaluator ? buildMaxAmounts(approveMaxAmounts) : [];
1084
+ const prepared = await h.prepareGroupAgentApplicationApproval({
1085
+ groupAddress: coreAddress,
1086
+ deedDid,
1087
+ collectionId,
1088
+ adminAddress,
1089
+ role: isEvaluator ? "evaluation_agent" : "service_agent",
1090
+ applicantAddress: selectedBid.address,
1091
+ agentQuota: Number(toQuotaString(approveQuota)),
1092
+ maxAmounts: podMaxAmounts.length > 0 ? podMaxAmounts : void 0
1093
+ });
1094
+ const { proposalId } = await h.createGroupExecutionProposal({
1095
+ coreAddress,
1096
+ title: actAs.proposalTitle.trim(),
1097
+ description: actAs.proposalDescription.trim(),
1098
+ msgs: prepared.msgs || []
1099
+ });
1100
+ if (!String(proposalId ?? "").trim()) throw new Error("POD proposal creation returned no proposal id. Check the handler logs.");
1101
+ setLastDecision({ kind: "proposed", name: granteeName, roleLabel: roleLabel2, proposalId: String(proposalId) });
1102
+ setSelectedBidId("");
1103
+ setDecision("");
1104
+ setRejectReason("");
1105
+ setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));
1106
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
1107
+ await refreshBids();
1108
+ return;
1109
+ }
1110
+ if (decision === "approve") {
1111
+ if (!adminAddress) throw new Error("Entity admin account is not resolved yet.");
1112
+ const quotaNum = Number(toQuotaString(approveQuota));
1113
+ if (isEvaluator) {
1114
+ const maxAmounts = buildMaxAmounts(approveMaxAmounts);
1115
+ await h.approveEvaluatorApplication({
1116
+ adminAddress,
1117
+ collectionId,
1118
+ deedDid,
1119
+ evaluatorAddress: selectedBid.address,
1120
+ agentQuota: quotaNum,
1121
+ maxAmounts: maxAmounts.length > 0 ? maxAmounts : void 0
1122
+ });
1123
+ } else {
1124
+ await h.approveServiceAgentApplication({
1125
+ adminAddress,
1126
+ collectionId,
1127
+ agentQuota: quotaNum,
1128
+ deedDid,
1129
+ currentUserAddress: selectedBid.address
1130
+ });
1131
+ }
1132
+ } else {
1133
+ await h.rejectBid({ bidId: selectedBid.id, collectionId, did: selectedBid.did, reason: rejectReason.trim() || "Rejected", entityDid: deedDid });
1134
+ }
1135
+ onBidEvaluated(selectedBid.id, decision === "approve" ? "approved" : "rejected");
1136
+ if (decision === "approve") onGrantsChanged();
1137
+ setLastDecision({ kind: decision === "approve" ? "approved" : "rejected", name: granteeName, roleLabel: roleLabel2 });
1138
+ setSelectedBidId("");
1139
+ setDecision("");
1140
+ setRejectReason("");
1141
+ setApproveQuota(String(DEFAULT_CONTRIBUTOR_QUOTA));
1142
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
1143
+ await refreshBids();
1144
+ } catch (err) {
1145
+ setError(err instanceof Error ? err.message : "Failed to evaluate bid");
1146
+ } finally {
1147
+ setSubmitting(false);
1148
+ }
1149
+ }, [
1150
+ selectedBid,
1151
+ decision,
1152
+ adminAddress,
1153
+ collectionId,
1154
+ deedDid,
1155
+ rejectReason,
1156
+ approveQuota,
1157
+ approveMaxAmounts,
1158
+ handlersRef,
1159
+ refreshBids,
1160
+ profilesByDid,
1161
+ onBidEvaluated,
1162
+ onGrantsChanged,
1163
+ actAs
1164
+ ]);
1165
+ if (selectedBid) {
1166
+ const profile = profilesByDid[selectedBid.did];
1167
+ const displayName = profile?.displayname || selectedBid.did || selectedBid.address;
1168
+ const role = String(selectedBid.role || "").toLowerCase();
1169
+ const isEvaluator = role === "evaluation_agent" || role === "ea";
1170
+ const maxAmounts = isEvaluator ? buildMaxAmounts(approveMaxAmounts) : [];
1171
+ const evaluatedStatus = bidEvaluatedStatus(selectedBid);
1172
+ let bidData = null;
1173
+ try {
1174
+ bidData = typeof selectedBid.data === "string" ? JSON.parse(selectedBid.data) : selectedBid.data;
1175
+ } catch {
1176
+ }
1177
+ const approvalDiffs = [
1178
+ { key: "role", label: "Role", before: null, after: getBidRoleLabel(selectedBid.role), changeType: "add" },
1179
+ { key: "grantee", label: "Grantee", before: null, after: displayName, changeType: "add" },
1180
+ ...collectionId ? [{ key: "collectionId", label: "Collection", before: null, after: collectionId, changeType: "add" }] : [],
1181
+ {
1182
+ key: "agentQuota",
1183
+ label: "Agent Quota",
1184
+ before: null,
1185
+ after: toQuotaString(approveQuota),
1186
+ changeType: "add",
1187
+ unit: "claims"
1188
+ },
1189
+ ...isEvaluator ? [
1190
+ {
1191
+ key: "maxAmount",
1192
+ label: "Max Amounts",
1193
+ before: null,
1194
+ after: maxAmounts.length > 0 ? maxAmounts.map(formatCoin).join(", ") : "None",
1195
+ changeType: maxAmounts.length > 0 ? "add" : "unchanged"
1196
+ }
1197
+ ] : []
1198
+ ];
1199
+ return /* @__PURE__ */ React.createElement(Stack, { gap: "md" }, /* @__PURE__ */ React.createElement(Group, { gap: "xs", align: "center" }, /* @__PURE__ */ React.createElement(ActionIcon, { variant: "subtle", color: "gray", size: "sm", onClick: () => setSelectedBidId("") }, /* @__PURE__ */ React.createElement(IconArrowLeft, { size: 16 })), /* @__PURE__ */ React.createElement(Text, { fw: 500, size: "sm", truncate: true, style: { flex: 1, minWidth: 0 } }, "Bid #", selectedBid.id), /* @__PURE__ */ React.createElement(DownloadCsvButton, { onDownload: () => downloadBidsCsv([selectedBid], exportFileNames.bid(selectedBid.id).csv), label: "Download bid CSV", onError: setError }), /* @__PURE__ */ React.createElement(DownloadZipButton, { onDownload: () => downloadBidsZip([selectedBid], exportFileNames.bid(selectedBid.id)), label: "Download bid + media (ZIP)", onError: setError })), /* @__PURE__ */ React.createElement(Stack, { gap: 4 }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600, truncate: true }, displayName), /* @__PURE__ */ React.createElement(Group, { gap: "xs" }, /* @__PURE__ */ React.createElement(Badge, { size: "xs", variant: "light", color: getRoleColor(selectedBid.role) }, getBidRoleLabel(selectedBid.role)), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, truncateAddress(selectedBid.address)))), /* @__PURE__ */ React.createElement(CollapsibleSection, { title: "Inputs" }, bidData && typeof bidData === "object" && Object.keys(bidData).length > 0 ? /* @__PURE__ */ React.createElement(ReadableKeyValues, { data: bidData }) : /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "No input data available.")), evaluatedStatus ? /* @__PURE__ */ React.createElement(
1200
+ MantineAlert,
1201
+ {
1202
+ color: evaluatedStatus === "approved" ? "green" : "red",
1203
+ icon: evaluatedStatus === "approved" ? /* @__PURE__ */ React.createElement(IconCheck, { size: 16 }) : /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }),
1204
+ title: evaluatedStatus === "approved" ? "Bid approved" : "Bid rejected",
1205
+ styles: actionAlertStyles
1206
+ },
1207
+ evaluatedStatus === "approved" ? `${getBidRoleLabel(selectedBid.role)} access is already granted for this collection.` : "This application was declined."
1208
+ ) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
1209
+ BaseSelect,
1210
+ {
1211
+ label: "Decision",
1212
+ placeholder: "Select decision",
1213
+ value: decision || null,
1214
+ onChange: (value) => setDecision(value || ""),
1215
+ data: [
1216
+ { value: "approve", label: "Approve" },
1217
+ { value: "reject", label: "Reject" }
1218
+ ],
1219
+ disabled: isDisabled || submitting
1220
+ }
1221
+ ), decision === "approve" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
1222
+ BaseNumberInput,
1223
+ {
1224
+ label: "Agent quota (max claims, at least 1)",
1225
+ min: MIN_AGENT_QUOTA,
1226
+ value: approveQuota === "" ? "" : Number(approveQuota),
1227
+ onChange: (value) => setApproveQuota(value === "" || value == null ? "" : String(value)),
1228
+ disabled: isDisabled || submitting
1229
+ }
1230
+ ), isEvaluator && /* @__PURE__ */ React.createElement(MaxAmountsInput, { value: approveMaxAmounts, onChange: setApproveMaxAmounts, disabled: isDisabled || submitting }), /* @__PURE__ */ React.createElement(ActionDiffView, { diffs: approvalDiffs })), decision === "reject" && /* @__PURE__ */ React.createElement(
1231
+ BaseTextInput,
1232
+ {
1233
+ label: `Reason${isEvaluator ? " *" : ""}`,
1234
+ placeholder: "Reason for rejection",
1235
+ value: rejectReason,
1236
+ onChange: (e) => setRejectReason(e.currentTarget.value),
1237
+ disabled: isDisabled || submitting
1238
+ }
1239
+ ), error && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, error), /* @__PURE__ */ React.createElement(
1240
+ Button,
1241
+ {
1242
+ onClick: submitDecision,
1243
+ loading: submitting,
1244
+ disabled: isDisabled || !decision || decision === "reject" && isEvaluator && !rejectReason.trim() || decision === "approve" && Number(approveQuota) < MIN_AGENT_QUOTA || // Acting as a POD needs a core + proposal title/description
1245
+ // before there is anything voters could read.
1246
+ !actAsGroupReady(actAs),
1247
+ color: decision === "reject" ? "red" : void 0
1248
+ },
1249
+ decision === "reject" ? "Reject bid" : actAs.actAsGroup ? "Propose approval" : "Approve bid"
1250
+ )));
1251
+ }
1252
+ const renderBidRow = (bid) => {
1253
+ const profile = profilesByDid[bid.did];
1254
+ const displayName = profile?.displayname || bid.did || bid.address;
1255
+ const status = bidEvaluatedStatus(bid) || "pending";
1256
+ return /* @__PURE__ */ React.createElement(ListItemContainer, { key: bid.id, isChecked: false, onClick: () => setSelectedBidId(bid.id) }, /* @__PURE__ */ React.createElement(Stack, { gap: 0, style: { flex: 1, minWidth: 0 } }, /* @__PURE__ */ React.createElement(Text, { fw: 500, size: "sm", truncate: true }, displayName), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed", truncate: true }, truncateAddress(bid.address))), /* @__PURE__ */ React.createElement(Stack, { gap: 2, align: "flex-end", style: { flexShrink: 0 } }, /* @__PURE__ */ React.createElement(Group, { gap: 4 }, /* @__PURE__ */ React.createElement(Badge, { size: "xs", variant: "light", color: getRoleColor(bid.role) }, getBidRoleLabel(bid.role)), /* @__PURE__ */ React.createElement(Badge, { size: "xs", variant: "light", color: status === "approved" ? "green" : status === "rejected" ? "red" : "gray" }, status === "approved" ? "Approved" : status === "rejected" ? "Rejected" : "Pending")), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, getTimeAgo(bid.created || ""))));
1257
+ };
1258
+ return /* @__PURE__ */ React.createElement(Stack, { gap: "sm" }, lastDecision && /* @__PURE__ */ React.createElement(
1259
+ MantineAlert,
1260
+ {
1261
+ color: lastDecision.kind === "rejected" ? "red" : "green",
1262
+ icon: lastDecision.kind === "rejected" ? /* @__PURE__ */ React.createElement(IconAlertCircle, { size: 16 }) : /* @__PURE__ */ React.createElement(IconCheck, { size: 16 }),
1263
+ title: lastDecision.kind === "proposed" ? "Proposal created" : lastDecision.kind === "approved" ? "Bid approved" : "Bid rejected",
1264
+ withCloseButton: true,
1265
+ onClose: () => setLastDecision(null),
1266
+ styles: actionAlertStyles
1267
+ },
1268
+ lastDecision.kind === "proposed" ? `Proposal #${lastDecision.proposalId} asks the POD to grant ${lastDecision.roleLabel} access to ${lastDecision.name}. Nothing is granted until the vote passes \u2014 the bid stays pending until then.` : lastDecision.kind === "approved" ? `${lastDecision.roleLabel} access granted to ${lastDecision.name}. They can now ${lastDecision.roleLabel === "Evaluator" ? "evaluate" : "submit"} claims in this collection.` : `${lastDecision.name}'s application was declined.`
1269
+ ), /* @__PURE__ */ React.createElement(Group, { justify: "space-between", align: "center" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600 }, "Incoming bids"), /* @__PURE__ */ React.createElement(Group, { gap: 4 }, /* @__PURE__ */ React.createElement(DownloadCsvButton, { onDownload: handleDownloadBidsCsv, disabled: loading || bids.length === 0, label: "Download bids CSV", onError: setError }), /* @__PURE__ */ React.createElement(DownloadZipButton, { onDownload: handleDownloadBidsZip, disabled: loading || bids.length === 0, label: "Download bids + media (ZIP)", onError: setError }), /* @__PURE__ */ React.createElement(ActionIcon, { variant: "subtle", color: "gray", size: "sm", onClick: refreshBids, disabled: loading }, /* @__PURE__ */ React.createElement(IconRefresh, { size: 16 })))), /* @__PURE__ */ React.createElement(Divider, { color: "color-mix(in srgb, var(--mantine-color-text) 6%, transparent)" }), loading && /* @__PURE__ */ React.createElement(Group, { gap: "xs", justify: "center", py: "sm" }, /* @__PURE__ */ React.createElement(Loader, { size: "xs" }), /* @__PURE__ */ React.createElement(Text, { size: "xs", c: "dimmed" }, "Loading bids\u2026")), !loading && bids.length === 0 && /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "No bids available for this collection."), !loading && bids.length > 0 && openBids.length === 0 && /* @__PURE__ */ React.createElement(Text, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "No bids are awaiting a decision."), openBids.map(renderBidRow), decidedBids.length > 0 && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Group, { justify: "space-between", align: "center", mt: "xs" }, /* @__PURE__ */ React.createElement(Text, { size: "sm", fw: 600, c: "dimmed" }, "Already decided"), /* @__PURE__ */ React.createElement(Badge, { size: "xs", variant: "light", color: "gray" }, decidedBids.length)), /* @__PURE__ */ React.createElement(Divider, { color: "color-mix(in srgb, var(--mantine-color-text) 6%, transparent)" }), decidedBids.map(renderBidRow)), error && /* @__PURE__ */ React.createElement(DismissibleAlert, { color: "red", styles: actionAlertStyles }, error));
1270
+ };
1271
+ var CollectionUsersFlowDetail_default = CollectionUsersFlowDetail;
1272
+ export {
1273
+ CollectionUsersFlowDetail,
1274
+ CollectionUsersFlowDetail_default as default
1275
+ };
1276
+ //# sourceMappingURL=CollectionUsersFlowDetail-ZLCJBWHG.js.map