@ixo/editor 5.28.0 → 5.28.1

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.
@@ -65,7 +65,7 @@ import {
65
65
  transformSurveyToCredentialSubject,
66
66
  updateXeroWorkReviewPayloadForEditor,
67
67
  upsertXeroWorkItemForEditor
68
- } from "./chunk-KWN34HVF.mjs";
68
+ } from "./chunk-47XOPWSV.mjs";
69
69
 
70
70
  // src/mantine/hooks/useCreateIxoEditor.ts
71
71
  import { useCreateBlockNote } from "@blocknote/react";
@@ -7394,7 +7394,7 @@ var BidViewPanel = ({ editor, block, bid, deedId, adminAddress, onRefresh, execu
7394
7394
  const [maxUsdcAmount, setMaxUsdcAmount] = useState26("");
7395
7395
  const [maxIxoAmount, setMaxIxoAmount] = useState26("");
7396
7396
  const isEvaluator = isEvaluatorRole(bid.role);
7397
- const buildMaxAmounts = () => {
7397
+ const buildMaxAmounts2 = () => {
7398
7398
  if (!isEvaluator) return void 0;
7399
7399
  const coins = [];
7400
7400
  if (maxUsdcAmount !== "" && Number(maxUsdcAmount) > 0) {
@@ -7412,7 +7412,7 @@ var BidViewPanel = ({ editor, block, bid, deedId, adminAddress, onRefresh, execu
7412
7412
  return coins.length > 0 ? coins : void 0;
7413
7413
  };
7414
7414
  const handleApprove = () => {
7415
- const maxAmounts = buildMaxAmounts();
7415
+ const maxAmounts = buildMaxAmounts2();
7416
7416
  approveBid(maxAmounts);
7417
7417
  };
7418
7418
  const surveyContainerStyle = useMemo29(
@@ -26162,7 +26162,7 @@ var EvaluateBidFlowDetail = ({
26162
26162
  const updatePaymentRow = useCallback91((id, patch) => {
26163
26163
  setPaymentRows((prev) => prev.map((row) => row.id === id ? { ...row, ...patch } : row));
26164
26164
  }, []);
26165
- const buildMaxAmounts = useCallback91(() => {
26165
+ const buildMaxAmounts2 = useCallback91(() => {
26166
26166
  return paymentRows.map((row) => {
26167
26167
  const denom = row.denom === CUSTOM_DENOM ? row.customDenom.trim() : row.denom || "";
26168
26168
  const amount = Number(row.amount);
@@ -26186,9 +26186,9 @@ var EvaluateBidFlowDetail = ({
26186
26186
  applicantAddress: selectedBid.address,
26187
26187
  adminAddress,
26188
26188
  rejectReason: decision === "reject" ? selectedBidIsEvaluator ? rejectReason : rejectReason.trim() || "Rejected" : void 0,
26189
- maxAmounts: selectedBidIsEvaluator ? JSON.stringify(buildMaxAmounts()) : void 0
26189
+ maxAmounts: selectedBidIsEvaluator ? JSON.stringify(buildMaxAmounts2()) : void 0
26190
26190
  });
26191
- }, [registerRuntimeInputs, selectedBid, decision, adminAddress, rejectReason, buildMaxAmounts]);
26191
+ }, [registerRuntimeInputs, selectedBid, decision, adminAddress, rejectReason, buildMaxAmounts2]);
26192
26192
  useEffect90(() => {
26193
26193
  if (!unlockSigning) return;
26194
26194
  if (!selectedBid || !decision) {
@@ -26227,7 +26227,7 @@ var EvaluateBidFlowDetail = ({
26227
26227
  applicantDid: selectedBid.did,
26228
26228
  applicantAddress: selectedBid.address,
26229
26229
  adminAddress,
26230
- maxAmounts: selectedBidIsEvaluator ? JSON.stringify(buildMaxAmounts()) : "[]",
26230
+ maxAmounts: selectedBidIsEvaluator ? JSON.stringify(buildMaxAmounts2()) : "[]",
26231
26231
  reason: decision === "reject" ? selectedBidIsEvaluator ? rejectReason : rejectReason.trim() || "Rejected" : ""
26232
26232
  }
26233
26233
  });
@@ -26243,7 +26243,7 @@ var EvaluateBidFlowDetail = ({
26243
26243
  setSubmitting(false);
26244
26244
  }
26245
26245
  });
26246
- }, [provideSigningHandler, selectedBid, decision, adminAddress, rejectReason, collectionId, deedDid, buildMaxAmounts, refreshBids, executeAction]);
26246
+ }, [provideSigningHandler, selectedBid, decision, adminAddress, rejectReason, collectionId, deedDid, buildMaxAmounts2, refreshBids, executeAction]);
26247
26247
  if (selectedBid) {
26248
26248
  const bidStatus = getBidStatus(selectedBid, t);
26249
26249
  const bidRole = String(selectedBid.role || "").toLowerCase();
@@ -28035,6 +28035,10 @@ function roleLabel(role) {
28035
28035
  return role === "submit" ? "Submit (Contributor)" : "Evaluate (Evaluator)";
28036
28036
  }
28037
28037
  var MIN_AGENT_QUOTA = 1;
28038
+ var DEFAULT_EVALUATOR_QUOTA = 50;
28039
+ var IXO_DENOM5 = "uixo";
28040
+ var USDC_DENOM5 = "ibc/6BBE9BD4246F8E04948D5A4EEE7164B2630263B9EBB5E7DC5F0A46C62A2FF97B";
28041
+ var EMPTY_MAX_AMOUNTS = { ixo: "", usdc: "" };
28038
28042
  function formatQuota2(value) {
28039
28043
  if (value == null || value === "") return "\u2014";
28040
28044
  return value;
@@ -28044,6 +28048,48 @@ function truncateAddress4(address) {
28044
28048
  if (address.length <= 16) return address;
28045
28049
  return `${address.slice(0, 10)}...${address.slice(-4)}`;
28046
28050
  }
28051
+ function toIxoDid(value) {
28052
+ const trimmed = String(value || "").trim();
28053
+ if (!trimmed) return "";
28054
+ return trimmed.startsWith("did:") ? trimmed : `did:ixo:${trimmed}`;
28055
+ }
28056
+ function getGranteeDid(grantee) {
28057
+ return toIxoDid(grantee.did || grantee.address);
28058
+ }
28059
+ function buildMaxAmounts(values) {
28060
+ return [
28061
+ { denom: IXO_DENOM5, amount: values.ixo },
28062
+ { denom: USDC_DENOM5, amount: values.usdc }
28063
+ ].filter((coin) => {
28064
+ const amount = Number(coin.amount);
28065
+ return Number.isFinite(amount) && amount > 0;
28066
+ });
28067
+ }
28068
+ function formatCoin2(coin) {
28069
+ const denom = coin.denom === IXO_DENOM5 ? "IXO" : coin.denom === USDC_DENOM5 ? "USDC" : coin.denom;
28070
+ return `${coin.amount} ${denom}`;
28071
+ }
28072
+ function MaxAmountsInput({ value, onChange, disabled }) {
28073
+ return /* @__PURE__ */ React266.createElement(Stack182, { gap: "xs" }, /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "Evaluator max amounts"), /* @__PURE__ */ React266.createElement(Group102, { grow: true, align: "flex-start" }, /* @__PURE__ */ React266.createElement(
28074
+ BaseNumberInput,
28075
+ {
28076
+ label: "IXO",
28077
+ min: 0,
28078
+ value: value.ixo === "" ? "" : Number(value.ixo),
28079
+ onChange: (amount) => onChange({ ...value, ixo: amount === "" || amount == null ? "" : String(amount) }),
28080
+ disabled
28081
+ }
28082
+ ), /* @__PURE__ */ React266.createElement(
28083
+ BaseNumberInput,
28084
+ {
28085
+ label: "USDC",
28086
+ min: 0,
28087
+ value: value.usdc === "" ? "" : Number(value.usdc),
28088
+ onChange: (amount) => onChange({ ...value, usdc: amount === "" || amount == null ? "" : String(amount) }),
28089
+ disabled
28090
+ }
28091
+ )));
28092
+ }
28047
28093
  function toQuotaString(value) {
28048
28094
  const n = Number(value);
28049
28095
  if (!Number.isFinite(n) || n < MIN_AGENT_QUOTA) return String(MIN_AGENT_QUOTA);
@@ -28145,6 +28191,7 @@ var CollectionUsersFlowDetail = ({
28145
28191
  const out = output;
28146
28192
  return Array.isArray(out?.grantees) ? out.grantees : [];
28147
28193
  }, [output]);
28194
+ const [granteeProfilesByDid, setGranteeProfilesByDid] = useState120({});
28148
28195
  const isRunning = runtime.state === "running";
28149
28196
  const isFailed = runtime.state === "failed";
28150
28197
  const errorMessage = runtime.error?.message || null;
@@ -28158,6 +28205,7 @@ var CollectionUsersFlowDetail = ({
28158
28205
  const [addAddress, setAddAddress] = useState120("");
28159
28206
  const [addRole, setAddRole] = useState120("submit");
28160
28207
  const [addQuota, setAddQuota] = useState120(String(MIN_AGENT_QUOTA));
28208
+ const [addMaxAmounts, setAddMaxAmounts] = useState120(EMPTY_MAX_AMOUNTS);
28161
28209
  const [granteeKind, setGranteeKind] = useState120("user");
28162
28210
  const [members, setMembers] = useState120([]);
28163
28211
  const [revokeTarget, setRevokeTarget] = useState120(null);
@@ -28218,6 +28266,9 @@ var CollectionUsersFlowDetail = ({
28218
28266
  setMembers([]);
28219
28267
  }
28220
28268
  }, [granteeKind, classification, canEnumerate, enumerateGroupMembers]);
28269
+ useEffect96(() => {
28270
+ setAddQuota(String(addRole === "evaluate" ? DEFAULT_EVALUATOR_QUOTA : MIN_AGENT_QUOTA));
28271
+ }, [addRole]);
28221
28272
  const isGroup = !!classification?.daodao;
28222
28273
  const canExerciseGrant = !!classification?.daodao?.canExerciseGrant;
28223
28274
  const listOnLoadRef = useRef31(false);
@@ -28257,6 +28308,41 @@ var CollectionUsersFlowDetail = ({
28257
28308
  listOnLoadRef.current = false;
28258
28309
  runList();
28259
28310
  }, [runList]);
28311
+ useEffect96(() => {
28312
+ let mounted = true;
28313
+ const dids = Array.from(new Set(listGrantees.map(getGranteeDid).filter(Boolean)));
28314
+ const missing = dids.filter((did) => !granteeProfilesByDid[did]);
28315
+ if (missing.length === 0)
28316
+ return () => {
28317
+ mounted = false;
28318
+ };
28319
+ const loadProfiles = async () => {
28320
+ const results = await Promise.all(
28321
+ missing.map(async (did) => {
28322
+ try {
28323
+ const profile = await handlersRef.current.getMatrixInfoPerDid(did);
28324
+ return [did, profile];
28325
+ } catch {
28326
+ return [did, null];
28327
+ }
28328
+ })
28329
+ );
28330
+ if (!mounted) return;
28331
+ setGranteeProfilesByDid((prev) => {
28332
+ const next = { ...prev };
28333
+ results.forEach(([did, profile]) => {
28334
+ if (profile) {
28335
+ next[did] = profile;
28336
+ }
28337
+ });
28338
+ return next;
28339
+ });
28340
+ };
28341
+ void loadProfiles();
28342
+ return () => {
28343
+ mounted = false;
28344
+ };
28345
+ }, [listGrantees, granteeProfilesByDid]);
28260
28346
  const validation = useMemo106(() => {
28261
28347
  if (section === "bids") return { ok: false };
28262
28348
  if (!collectionId) return { ok: false, error: "No collection configured. Set one in template mode." };
@@ -28293,6 +28379,7 @@ var CollectionUsersFlowDetail = ({
28293
28379
  role: revokeTarget?.role || "submit"
28294
28380
  };
28295
28381
  }
28382
+ const maxAmounts = buildMaxAmounts(addMaxAmounts);
28296
28383
  return {
28297
28384
  operation: "add",
28298
28385
  collectionId,
@@ -28302,9 +28389,10 @@ var CollectionUsersFlowDetail = ({
28302
28389
  role: addRole,
28303
28390
  granteeKind,
28304
28391
  agentQuota: toQuotaString(addQuota),
28392
+ maxAmount: addRole === "evaluate" && maxAmounts.length > 0 ? maxAmounts : void 0,
28305
28393
  members: granteeKind === "group-members" ? members : void 0
28306
28394
  };
28307
- }, [section, activeOp, collectionId, adminAddress, deedDid, revokeTarget, addAddress, addRole, granteeKind, addQuota, members]);
28395
+ }, [section, activeOp, collectionId, adminAddress, deedDid, revokeTarget, addAddress, addRole, granteeKind, addQuota, addMaxAmounts, members]);
28308
28396
  useEffect96(() => {
28309
28397
  if (!registerRuntimeInputs) return;
28310
28398
  registerRuntimeInputs(buildRuntimeInputs());
@@ -28342,7 +28430,8 @@ var CollectionUsersFlowDetail = ({
28342
28430
  console.log(`${LOG2} execute success`, { operation: runtimeInputs.operation, transactionHash: payload.transactionHash });
28343
28431
  if (runtimeInputs.operation === "add") {
28344
28432
  setAddAddress("");
28345
- setAddQuota(String(MIN_AGENT_QUOTA));
28433
+ setAddQuota(String(runtimeInputs.role === "evaluate" ? DEFAULT_EVALUATOR_QUOTA : MIN_AGENT_QUOTA));
28434
+ setAddMaxAmounts(EMPTY_MAX_AMOUNTS);
28346
28435
  setGranteeKind("user");
28347
28436
  setMembers([]);
28348
28437
  setClassification(null);
@@ -28406,6 +28495,9 @@ var CollectionUsersFlowDetail = ({
28406
28495
  }
28407
28496
  ), !configMissing && section === "list" && /* @__PURE__ */ React266.createElement(Stack182, { gap: "sm" }, /* @__PURE__ */ React266.createElement(Group102, { justify: "space-between", align: "center" }, /* @__PURE__ */ React266.createElement(Text160, { size: "sm", fw: 600 }, "Grantees"), /* @__PURE__ */ React266.createElement(ActionIcon42, { variant: "subtle", color: "gray", size: "sm", onClick: handleManualRefreshList, disabled: isRunning || !adminAddress }, /* @__PURE__ */ React266.createElement(IconRefresh9, { size: 16 }))), isRunning && lastOp !== "add" && lastOp !== "revoke" && /* @__PURE__ */ React266.createElement(Group102, { gap: "xs", justify: "center", py: "sm" }, /* @__PURE__ */ React266.createElement(Loader49, { size: "xs" }), /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "Loading grantees\u2026")), !isRunning && listGrantees.length === 0 && /* @__PURE__ */ React266.createElement(Text160, { size: "sm", c: "dimmed", ta: "center", py: "sm" }, "No grantees hold a constraint for this collection yet."), listGrantees.map((grantee) => {
28408
28497
  const isTarget = revokeTarget?.address === grantee.address && revokeTarget?.role === grantee.role;
28498
+ const granteeDid = getGranteeDid(grantee);
28499
+ const profile = granteeProfilesByDid[granteeDid];
28500
+ const displayName = profile?.displayname || truncateAddress4(grantee.address);
28409
28501
  return /* @__PURE__ */ React266.createElement(
28410
28502
  Box56,
28411
28503
  {
@@ -28417,7 +28509,7 @@ var CollectionUsersFlowDetail = ({
28417
28509
  background: "var(--mantine-color-neutralColor-5)"
28418
28510
  }
28419
28511
  },
28420
- /* @__PURE__ */ React266.createElement(Group102, { justify: "space-between", align: "center", wrap: "nowrap" }, /* @__PURE__ */ React266.createElement(Stack182, { gap: 2, style: { minWidth: 0 } }, /* @__PURE__ */ React266.createElement(Text160, { size: "sm", fw: 600, style: { wordBreak: "break-all", fontFamily: "var(--mantine-font-family-monospace)" } }, truncateAddress4(grantee.address)), /* @__PURE__ */ React266.createElement(Group102, { gap: "xs" }, /* @__PURE__ */ React266.createElement(Badge50, { size: "xs", variant: "light", color: grantee.role === "submit" ? "blue" : "green" }, roleLabel(grantee.role)), /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "Quota: ", formatQuota2(grantee.agentQuota)))), isTarget ? /* @__PURE__ */ React266.createElement(Button55, { size: "compact-xs", variant: "subtle", color: "gray", onClick: cancelRevoke, disabled: isDisabled || isRunning }, "Cancel") : /* @__PURE__ */ React266.createElement(
28512
+ /* @__PURE__ */ React266.createElement(Group102, { justify: "space-between", align: "center", wrap: "nowrap" }, /* @__PURE__ */ React266.createElement(Stack182, { gap: 2, style: { minWidth: 0 } }, /* @__PURE__ */ React266.createElement(Text160, { size: "sm", fw: 600, truncate: true }, displayName), profile?.displayname && /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed", truncate: true }, truncateAddress4(grantee.address)), /* @__PURE__ */ React266.createElement(Group102, { gap: "xs" }, /* @__PURE__ */ React266.createElement(Badge50, { size: "xs", variant: "light", color: grantee.role === "submit" ? "blue" : "green" }, roleLabel(grantee.role)), /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "Quota: ", formatQuota2(grantee.agentQuota)))), isTarget ? /* @__PURE__ */ React266.createElement(Button55, { size: "compact-xs", variant: "subtle", color: "gray", onClick: cancelRevoke, disabled: isDisabled || isRunning }, "Cancel") : /* @__PURE__ */ React266.createElement(
28421
28513
  Button55,
28422
28514
  {
28423
28515
  size: "compact-xs",
@@ -28479,7 +28571,7 @@ var CollectionUsersFlowDetail = ({
28479
28571
  onChange: (value) => setAddQuota(value === "" || value == null ? "" : String(value)),
28480
28572
  disabled: isDisabled || isRunning
28481
28573
  }
28482
- ), !validation.ok && validation.error && activeOp === "add" && /* @__PURE__ */ React266.createElement(Alert52, { color: "yellow", styles: actionAlertStyles }, validation.error)), !configMissing && section === "bids" && /* @__PURE__ */ React266.createElement(BidInboxSection, { deedDid, collectionId, adminAddress, isDisabled, handlersRef }), isDisabled && /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "This block is currently disabled."));
28574
+ ), addRole === "evaluate" && /* @__PURE__ */ React266.createElement(MaxAmountsInput, { value: addMaxAmounts, onChange: setAddMaxAmounts, disabled: isDisabled || isRunning }), !validation.ok && validation.error && activeOp === "add" && /* @__PURE__ */ React266.createElement(Alert52, { color: "yellow", styles: actionAlertStyles }, validation.error)), !configMissing && section === "bids" && /* @__PURE__ */ React266.createElement(BidInboxSection, { deedDid, collectionId, adminAddress, isDisabled, handlersRef }), isDisabled && /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, "This block is currently disabled."));
28483
28575
  };
28484
28576
  var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handlersRef }) => {
28485
28577
  const [bids, setBids] = useState120([]);
@@ -28489,9 +28581,14 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28489
28581
  const [decision, setDecision] = useState120("");
28490
28582
  const [rejectReason, setRejectReason] = useState120("");
28491
28583
  const [approveQuota, setApproveQuota] = useState120(String(MIN_AGENT_QUOTA));
28584
+ const [approveMaxAmounts, setApproveMaxAmounts] = useState120(EMPTY_MAX_AMOUNTS);
28492
28585
  const [submitting, setSubmitting] = useState120(false);
28493
28586
  const [profilesByDid, setProfilesByDid] = useState120({});
28494
28587
  const selectedBid = useMemo106(() => bids.find((b) => b.id === selectedBidId) || null, [bids, selectedBidId]);
28588
+ const selectedBidIsEvaluator = useMemo106(() => {
28589
+ const role = String(selectedBid?.role || "").toLowerCase();
28590
+ return role === "evaluation_agent" || role === "ea";
28591
+ }, [selectedBid]);
28495
28592
  const refreshBids = useCallback97(async () => {
28496
28593
  if (!deedDid || !collectionId) return;
28497
28594
  setLoading(true);
@@ -28500,9 +28597,9 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28500
28597
  const response = await handlersRef.current.queryBids({ collectionId, entityDid: deedDid });
28501
28598
  const fetched = Array.isArray(response?.data) ? response.data : [];
28502
28599
  setBids(fetched);
28503
- } catch (err) {
28600
+ } catch {
28504
28601
  setBids([]);
28505
- setError(err instanceof Error ? err.message : "Failed to load bids");
28602
+ setError(null);
28506
28603
  } finally {
28507
28604
  setLoading(false);
28508
28605
  }
@@ -28512,8 +28609,15 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28512
28609
  setDecision("");
28513
28610
  setRejectReason("");
28514
28611
  setApproveQuota(String(MIN_AGENT_QUOTA));
28612
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
28515
28613
  if (deedDid && collectionId) refreshBids();
28516
28614
  }, [deedDid, collectionId, refreshBids]);
28615
+ useEffect96(() => {
28616
+ setDecision("");
28617
+ setRejectReason("");
28618
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
28619
+ setApproveQuota(String(selectedBidIsEvaluator ? DEFAULT_EVALUATOR_QUOTA : MIN_AGENT_QUOTA));
28620
+ }, [selectedBidId, selectedBidIsEvaluator]);
28517
28621
  useEffect96(() => {
28518
28622
  let mounted = true;
28519
28623
  const dids = Array.from(new Set(bids.map((b) => b.did).filter(Boolean)));
@@ -28555,7 +28659,15 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28555
28659
  if (!adminAddress) throw new Error("Entity admin account is not resolved yet.");
28556
28660
  const quotaNum = Number(toQuotaString(approveQuota));
28557
28661
  if (isEvaluator) {
28558
- await h.approveEvaluatorApplication({ adminAddress, collectionId, deedDid, evaluatorAddress: selectedBid.address, agentQuota: quotaNum });
28662
+ const maxAmounts = buildMaxAmounts(approveMaxAmounts);
28663
+ await h.approveEvaluatorApplication({
28664
+ adminAddress,
28665
+ collectionId,
28666
+ deedDid,
28667
+ evaluatorAddress: selectedBid.address,
28668
+ agentQuota: quotaNum,
28669
+ maxAmounts: maxAmounts.length > 0 ? maxAmounts : void 0
28670
+ });
28559
28671
  } else {
28560
28672
  const currentUser = h.getCurrentUser?.();
28561
28673
  await h.approveServiceAgentApplication({
@@ -28572,19 +28684,21 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28572
28684
  setSelectedBidId("");
28573
28685
  setDecision("");
28574
28686
  setRejectReason("");
28575
- setApproveQuota("0");
28687
+ setApproveQuota(String(MIN_AGENT_QUOTA));
28688
+ setApproveMaxAmounts(EMPTY_MAX_AMOUNTS);
28576
28689
  await refreshBids();
28577
28690
  } catch (err) {
28578
28691
  setError(err instanceof Error ? err.message : "Failed to evaluate bid");
28579
28692
  } finally {
28580
28693
  setSubmitting(false);
28581
28694
  }
28582
- }, [selectedBid, decision, adminAddress, collectionId, deedDid, rejectReason, approveQuota, handlersRef, refreshBids]);
28695
+ }, [selectedBid, decision, adminAddress, collectionId, deedDid, rejectReason, approveQuota, approveMaxAmounts, handlersRef, refreshBids]);
28583
28696
  if (selectedBid) {
28584
28697
  const profile = profilesByDid[selectedBid.did];
28585
28698
  const displayName = profile?.displayname || selectedBid.did || selectedBid.address;
28586
28699
  const role = String(selectedBid.role || "").toLowerCase();
28587
28700
  const isEvaluator = role === "evaluation_agent" || role === "ea";
28701
+ const maxAmounts = isEvaluator ? buildMaxAmounts(approveMaxAmounts) : [];
28588
28702
  const approvalDiffs = [
28589
28703
  { key: "role", label: "Role", before: null, after: getBidRoleLabel(selectedBid.role), changeType: "add" },
28590
28704
  { key: "grantee", label: "Grantee", before: null, after: displayName, changeType: "add" },
@@ -28596,7 +28710,16 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28596
28710
  after: toQuotaString(approveQuota),
28597
28711
  changeType: "add",
28598
28712
  unit: "claims"
28599
- }
28713
+ },
28714
+ ...isEvaluator ? [
28715
+ {
28716
+ key: "maxAmount",
28717
+ label: "Max Amounts",
28718
+ before: null,
28719
+ after: maxAmounts.length > 0 ? maxAmounts.map(formatCoin2).join(", ") : "None",
28720
+ changeType: maxAmounts.length > 0 ? "add" : "unchanged"
28721
+ }
28722
+ ] : []
28600
28723
  ];
28601
28724
  return /* @__PURE__ */ React266.createElement(Stack182, { gap: "md" }, /* @__PURE__ */ React266.createElement(Group102, { gap: "xs", align: "center" }, /* @__PURE__ */ React266.createElement(ActionIcon42, { variant: "subtle", color: "gray", size: "sm", onClick: () => setSelectedBidId("") }, /* @__PURE__ */ React266.createElement(IconArrowLeft10, { size: 16 })), /* @__PURE__ */ React266.createElement(Text160, { fw: 500, size: "sm", truncate: true, style: { flex: 1, minWidth: 0 } }, "Bid #", selectedBid.id)), /* @__PURE__ */ React266.createElement(Stack182, { gap: 4 }, /* @__PURE__ */ React266.createElement(Text160, { size: "sm", fw: 600, truncate: true }, displayName), /* @__PURE__ */ React266.createElement(Group102, { gap: "xs" }, /* @__PURE__ */ React266.createElement(Badge50, { size: "xs", variant: "light", color: getRoleColor3(selectedBid.role) }, getBidRoleLabel(selectedBid.role)), /* @__PURE__ */ React266.createElement(Text160, { size: "xs", c: "dimmed" }, truncateAddress4(selectedBid.address)))), /* @__PURE__ */ React266.createElement(
28602
28725
  BaseSelect,
@@ -28620,7 +28743,7 @@ var BidInboxSection = ({ deedDid, collectionId, adminAddress, isDisabled, handle
28620
28743
  onChange: (value) => setApproveQuota(value === "" || value == null ? "" : String(value)),
28621
28744
  disabled: isDisabled || submitting
28622
28745
  }
28623
- ), /* @__PURE__ */ React266.createElement(ActionDiffView, { diffs: approvalDiffs })), decision === "reject" && /* @__PURE__ */ React266.createElement(
28746
+ ), isEvaluator && /* @__PURE__ */ React266.createElement(MaxAmountsInput, { value: approveMaxAmounts, onChange: setApproveMaxAmounts, disabled: isDisabled || submitting }), /* @__PURE__ */ React266.createElement(ActionDiffView, { diffs: approvalDiffs })), decision === "reject" && /* @__PURE__ */ React266.createElement(
28624
28747
  BaseTextInput,
28625
28748
  {
28626
28749
  label: `Reason${isEvaluator ? " *" : ""}`,
@@ -29236,13 +29359,13 @@ var ClaimAttachments = ({ surveyModel, credentialSubject, entityDid }) => {
29236
29359
  };
29237
29360
 
29238
29361
  // src/mantine/blocks/action/actionTypes/evaluateClaim/EvaluateClaimFlowDetail.tsx
29239
- var USDC_DENOM5 = "ibc/6BBE9BD4246F8E04948D5A4EEE7164B2630263B9EBB5E7DC5F0A46C62A2FF97B";
29240
- var IXO_DENOM5 = "uixo";
29362
+ var USDC_DENOM6 = "ibc/6BBE9BD4246F8E04948D5A4EEE7164B2630263B9EBB5E7DC5F0A46C62A2FF97B";
29363
+ var IXO_DENOM6 = "uixo";
29241
29364
  var CUSTOM_DENOM2 = "__custom__";
29242
29365
  var DECIMALS4 = 6;
29243
29366
  var createPaymentRow2 = () => ({
29244
29367
  id: `payment-${Math.random().toString(36).slice(2, 9)}`,
29245
- denom: USDC_DENOM5,
29368
+ denom: USDC_DENOM6,
29246
29369
  customDenom: "",
29247
29370
  amount: ""
29248
29371
  });
@@ -29841,8 +29964,8 @@ var EvaluateClaimFlowDetail = ({
29841
29964
  value: row.denom,
29842
29965
  onChange: (value) => updatePaymentRow(row.id, { denom: value }),
29843
29966
  data: [
29844
- { value: USDC_DENOM5, label: "USDC" },
29845
- { value: IXO_DENOM5, label: "IXO" },
29967
+ { value: USDC_DENOM6, label: "USDC" },
29968
+ { value: IXO_DENOM6, label: "IXO" },
29846
29969
  { value: CUSTOM_DENOM2, label: t("actionTypes.evaluateClaim.flow.payment.custom", { defaultValue: "Custom" }) }
29847
29970
  ],
29848
29971
  clearable: false,
@@ -46583,4 +46706,4 @@ export {
46583
46706
  getExtraSlashMenuItems,
46584
46707
  useCreateIxoEditor
46585
46708
  };
46586
- //# sourceMappingURL=chunk-AXKLTSPX.mjs.map
46709
+ //# sourceMappingURL=chunk-I2OZHN6S.mjs.map