@mindbill/react 0.15.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1296,6 +1296,240 @@ function ConnectedBillStatus({
1296
1296
  );
1297
1297
  }
1298
1298
 
1299
+ // src/bill-lifecycle-surfaces.tsx
1300
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1301
+ function visibleBillLifecycleActions(actions, showUnavailable = false) {
1302
+ return actions.filter((action) => action.enabled || showUnavailable);
1303
+ }
1304
+ function BillLifecycleActions({
1305
+ actions,
1306
+ onAction,
1307
+ showUnavailable = false,
1308
+ disabled = false,
1309
+ appearance,
1310
+ className,
1311
+ style
1312
+ }) {
1313
+ const visible = visibleBillLifecycleActions(actions, showUnavailable);
1314
+ if (!visible.length) return null;
1315
+ return /* @__PURE__ */ jsxs3("div", { className: classes("mb-lifecycle-actions", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Bill actions", children: [
1316
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1317
+ visible.map((action) => /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-action", children: [
1318
+ /* @__PURE__ */ jsx3("button", { type: "button", className: action.primary ? "mb-action-button is-primary" : "mb-action-button", disabled: disabled || !action.enabled, onClick: () => onAction(action), children: action.label }),
1319
+ !action.enabled && action.reason ? /* @__PURE__ */ jsx3("span", { className: "mb-action-reason", children: action.reason }) : null
1320
+ ] }, action.id))
1321
+ ] });
1322
+ }
1323
+ var activityLabels = {
1324
+ "bill.created": "Bill created",
1325
+ "bill.draft": "Bill saved",
1326
+ "bill.scrub_failed": "Submission needs attention",
1327
+ "bill.submitted": "Bill submitted",
1328
+ "bill.accepted": "Bill accepted",
1329
+ "bill.rejected": "Bill rejected",
1330
+ "bill.denied": "Bill denied",
1331
+ "bill.partially_paid": "Partial payment received",
1332
+ "bill.paid": "Bill paid",
1333
+ "bill.second_review": "Second Bill Review submitted",
1334
+ "bill.lien": "Bill moved to lien",
1335
+ "bill.ibr": "Independent Bill Review submitted",
1336
+ "bill.closed": "Bill closed",
1337
+ "bill.written_off": "Balance written off",
1338
+ "payment.posted": "Payment posted",
1339
+ "eor.received": "EOR received",
1340
+ "bill.autofill_completed": "Bill data extracted"
1341
+ };
1342
+ function billActivityEventLabel(type) {
1343
+ return activityLabels[type] ?? type.replace(/[._-]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
1344
+ }
1345
+ function defaultFormatDate(createdAt) {
1346
+ const parsed = new Date(createdAt);
1347
+ if (Number.isNaN(parsed.getTime())) return createdAt;
1348
+ return new Intl.DateTimeFormat(void 0, { dateStyle: "medium", timeStyle: "short" }).format(parsed);
1349
+ }
1350
+ function BillActivityTimeline({ events, emptyLabel = "No bill activity yet.", appearance, className, style, formatDate = defaultFormatDate }) {
1351
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-activity", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Bill activity", children: [
1352
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1353
+ /* @__PURE__ */ jsxs3("header", { className: "mb-surface-heading", children: [
1354
+ /* @__PURE__ */ jsxs3("div", { children: [
1355
+ /* @__PURE__ */ jsx3("strong", { children: "Bill history" }),
1356
+ /* @__PURE__ */ jsx3("span", { children: "Submission, payer responses, follow-up, and payments." })
1357
+ ] }),
1358
+ /* @__PURE__ */ jsx3("span", { children: events.length })
1359
+ ] }),
1360
+ !events.length ? /* @__PURE__ */ jsx3("p", { className: "mb-activity-empty", children: emptyLabel }) : /* @__PURE__ */ jsx3("ol", { className: "mb-activity-list", children: events.map((event) => /* @__PURE__ */ jsxs3("li", { className: "mb-activity-item", children: [
1361
+ /* @__PURE__ */ jsx3("span", { className: "mb-activity-marker", "aria-hidden": "true" }),
1362
+ /* @__PURE__ */ jsxs3("div", { className: "mb-activity-content", children: [
1363
+ /* @__PURE__ */ jsx3("strong", { children: event.title ?? billActivityEventLabel(event.type) }),
1364
+ event.description ? /* @__PURE__ */ jsx3("p", { children: event.description }) : null,
1365
+ /* @__PURE__ */ jsxs3("span", { children: [
1366
+ formatDate(event.createdAt),
1367
+ event.actor ? ` \xB7 ${event.actor}` : ""
1368
+ ] })
1369
+ ] })
1370
+ ] }, event.id)) })
1371
+ ] });
1372
+ }
1373
+ var lifecycleStages = [
1374
+ { id: "created", label: "Created" },
1375
+ { id: "submitted", label: "Submitted" },
1376
+ { id: "accepted", label: "Accepted" },
1377
+ { id: "response", label: "Payer response" },
1378
+ { id: "follow_up", label: "Follow-up" },
1379
+ { id: "closed", label: "Closed" }
1380
+ ];
1381
+ function billLifecycleStage(state) {
1382
+ const value = state.toLowerCase();
1383
+ if (value.includes("closed") || value.includes("written_off")) return "closed";
1384
+ if (value.includes("second_review") || value.includes("ibr") || value.includes("lien") || value.includes("appeal")) return "follow_up";
1385
+ if (value.includes("processed") || value.includes("paid") || value.includes("denied") || value.includes("rejected") || value.includes("response")) return "response";
1386
+ if (value.includes("accepted")) return "accepted";
1387
+ if (value.includes("submitted") || value.includes("queued") || value.includes("sent")) return "submitted";
1388
+ return "created";
1389
+ }
1390
+ function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, appearance, className, style }) {
1391
+ const current = billLifecycleStage(state);
1392
+ const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);
1393
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-progress", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Bill lifecycle", children: [
1394
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1395
+ /* @__PURE__ */ jsx3("header", { className: "mb-surface-heading", children: /* @__PURE__ */ jsxs3("div", { children: [
1396
+ /* @__PURE__ */ jsx3("strong", { children: humanize(nativeStatus || state) }),
1397
+ /* @__PURE__ */ jsxs3("span", { children: [
1398
+ submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : "Not submitted",
1399
+ typeof agingDays === "number" ? ` \xB7 ${agingDays} days old` : ""
1400
+ ] })
1401
+ ] }) }),
1402
+ /* @__PURE__ */ jsx3("ol", { className: "mb-progress-list", children: lifecycleStages.map((stage, index) => {
1403
+ const status = index < currentIndex ? "complete" : index === currentIndex ? "current" : "upcoming";
1404
+ return /* @__PURE__ */ jsxs3("li", { className: `is-${status}`, "aria-current": status === "current" ? "step" : void 0, children: [
1405
+ /* @__PURE__ */ jsx3("span", { "aria-hidden": "true", children: status === "complete" ? "\u2713" : index + 1 }),
1406
+ /* @__PURE__ */ jsx3("b", { children: stage.label })
1407
+ ] }, stage.id);
1408
+ }) })
1409
+ ] });
1410
+ }
1411
+ function BillSnapshotSummary({ bill, patient, injury, delivery, appearance, className, style }) {
1412
+ const values = [
1413
+ ["Patient", patient.name || [patient.firstName, patient.lastName].filter(Boolean).join(" ")],
1414
+ ["Claim", injury.claimNumber || "\u2014"],
1415
+ ["Payer", delivery.payerName || injury.claimsAdminName || "\u2014"],
1416
+ ["Date of service", bill.dos || "\u2014"],
1417
+ ["Charged", currency(bill.totalCharge)],
1418
+ ["Balance", currency(bill.balanceDue)]
1419
+ ];
1420
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-snapshot", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Bill snapshot", children: [
1421
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1422
+ /* @__PURE__ */ jsx3("header", { className: "mb-surface-heading", children: /* @__PURE__ */ jsxs3("div", { children: [
1423
+ /* @__PURE__ */ jsx3("strong", { children: "Bill snapshot" }),
1424
+ /* @__PURE__ */ jsxs3("span", { children: [
1425
+ "Bill #",
1426
+ bill.billNumber
1427
+ ] })
1428
+ ] }) }),
1429
+ /* @__PURE__ */ jsx3("dl", { children: values.map(([label, value]) => /* @__PURE__ */ jsxs3("div", { children: [
1430
+ /* @__PURE__ */ jsx3("dt", { children: label }),
1431
+ /* @__PURE__ */ jsx3("dd", { children: value })
1432
+ ] }, label)) })
1433
+ ] });
1434
+ }
1435
+ function BillRemittanceCard({ remittance, appearance, className, style }) {
1436
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-remittance", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Remittance summary", children: [
1437
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1438
+ /* @__PURE__ */ jsx3("header", { className: "mb-surface-heading", children: /* @__PURE__ */ jsxs3("div", { children: [
1439
+ /* @__PURE__ */ jsx3("strong", { children: "Remittance" }),
1440
+ /* @__PURE__ */ jsx3("span", { children: "Amounts reported by the payer and posted to the bill." })
1441
+ ] }) }),
1442
+ /* @__PURE__ */ jsxs3("dl", { children: [
1443
+ /* @__PURE__ */ jsxs3("div", { children: [
1444
+ /* @__PURE__ */ jsx3("dt", { children: "Payer reported" }),
1445
+ /* @__PURE__ */ jsx3("dd", { children: remittance.payerReportedPaid === null ? "\u2014" : currency(remittance.payerReportedPaid) })
1446
+ ] }),
1447
+ /* @__PURE__ */ jsxs3("div", { children: [
1448
+ /* @__PURE__ */ jsx3("dt", { children: "Posted" }),
1449
+ /* @__PURE__ */ jsx3("dd", { children: currency(remittance.totalPaid) })
1450
+ ] }),
1451
+ /* @__PURE__ */ jsxs3("div", { children: [
1452
+ /* @__PURE__ */ jsx3("dt", { children: "Balance" }),
1453
+ /* @__PURE__ */ jsx3("dd", { children: currency(remittance.balanceDue) })
1454
+ ] })
1455
+ ] }),
1456
+ remittance.denialReason ? /* @__PURE__ */ jsxs3("div", { className: "mb-denial", children: [
1457
+ /* @__PURE__ */ jsx3("strong", { children: "Denial reason" }),
1458
+ /* @__PURE__ */ jsx3("p", { children: remittance.denialReason })
1459
+ ] }) : null
1460
+ ] });
1461
+ }
1462
+ function BillPayerContactCard({ delivery, appearance, className, style }) {
1463
+ const contacts = [
1464
+ delivery.contacts.adjusterName ? ["Adjuster", delivery.contacts.adjusterName, null] : null,
1465
+ delivery.contacts.adjusterPhone ? ["Adjuster phone", delivery.contacts.adjusterPhone, `tel:${delivery.contacts.adjusterPhone}`] : null,
1466
+ delivery.contacts.adjusterEmail ? ["Adjuster email", delivery.contacts.adjusterEmail, `mailto:${delivery.contacts.adjusterEmail}`] : null,
1467
+ delivery.contacts.faxNumber ? ["Fax", delivery.contacts.faxNumber, `tel:${delivery.contacts.faxNumber}`] : null,
1468
+ delivery.contacts.claimsEmail ? ["Email", delivery.contacts.claimsEmail, `mailto:${delivery.contacts.claimsEmail}`] : null,
1469
+ delivery.contacts.mailingAddress ? ["Mail", delivery.contacts.mailingAddress, null] : null,
1470
+ delivery.contacts.portalUrl ? ["Portal", "Open payer portal", delivery.contacts.portalUrl] : null
1471
+ ].filter(Boolean);
1472
+ if (!delivery.payerName && !contacts.length) return null;
1473
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-contacts", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Payer contact information", children: [
1474
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1475
+ /* @__PURE__ */ jsx3("header", { className: "mb-surface-heading", children: /* @__PURE__ */ jsxs3("div", { children: [
1476
+ /* @__PURE__ */ jsx3("strong", { children: delivery.payerName || "Claims administrator" }),
1477
+ /* @__PURE__ */ jsx3("span", { children: "Billing and follow-up contacts." })
1478
+ ] }) }),
1479
+ !contacts.length ? /* @__PURE__ */ jsx3("p", { className: "mb-empty", children: "No payer contact details are available." }) : /* @__PURE__ */ jsx3("dl", { children: contacts.map(([label, value, href]) => /* @__PURE__ */ jsxs3("div", { children: [
1480
+ /* @__PURE__ */ jsx3("dt", { children: label }),
1481
+ /* @__PURE__ */ jsx3("dd", { children: href ? /* @__PURE__ */ jsx3("a", { href, target: label === "Portal" ? "_blank" : void 0, rel: label === "Portal" ? "noreferrer noopener" : void 0, children: value }) : value })
1482
+ ] }, label)) })
1483
+ ] });
1484
+ }
1485
+ function BillPaymentLedger({ payments, appearance, className, style }) {
1486
+ return /* @__PURE__ */ jsxs3("section", { className: classes("mb-surface mb-payments", className), style: mindBillAppearanceStyle(appearance, style), "aria-label": "Payment ledger", children: [
1487
+ /* @__PURE__ */ jsx3("style", { children: lifecycleSurfaceStyles }),
1488
+ /* @__PURE__ */ jsxs3("header", { className: "mb-surface-heading", children: [
1489
+ /* @__PURE__ */ jsxs3("div", { children: [
1490
+ /* @__PURE__ */ jsx3("strong", { children: "Payments" }),
1491
+ /* @__PURE__ */ jsx3("span", { children: "Payments posted to this bill." })
1492
+ ] }),
1493
+ /* @__PURE__ */ jsx3("span", { children: payments.length })
1494
+ ] }),
1495
+ !payments.length ? /* @__PURE__ */ jsx3("p", { className: "mb-empty", children: "No payments posted." }) : /* @__PURE__ */ jsx3("div", { className: "mb-payment-list", children: payments.map((payment) => /* @__PURE__ */ jsxs3("article", { children: [
1496
+ /* @__PURE__ */ jsxs3("div", { children: [
1497
+ /* @__PURE__ */ jsx3("strong", { children: currency(payment.amount) }),
1498
+ /* @__PURE__ */ jsxs3("span", { children: [
1499
+ humanize(payment.status || "posted"),
1500
+ " \xB7 ",
1501
+ payment.method.toUpperCase()
1502
+ ] })
1503
+ ] }),
1504
+ /* @__PURE__ */ jsxs3("div", { children: [
1505
+ /* @__PURE__ */ jsx3("span", { children: payment.checkNumber ? `#${payment.checkNumber}` : payment.source.toUpperCase() }),
1506
+ /* @__PURE__ */ jsx3("span", { children: payment.depositDate || defaultFormatDate(payment.postedAt) })
1507
+ ] }),
1508
+ payment.note ? /* @__PURE__ */ jsx3("p", { children: payment.note }) : null
1509
+ ] }, payment.id)) })
1510
+ ] });
1511
+ }
1512
+ function classes(base, className) {
1513
+ return [base, className].filter(Boolean).join(" ");
1514
+ }
1515
+ function humanize(value) {
1516
+ return value.replace(/[._-]+/g, " ").replace(/\b\w/g, (character) => character.toUpperCase());
1517
+ }
1518
+ function currency(value) {
1519
+ return new Intl.NumberFormat(void 0, { style: "currency", currency: "USD" }).format(value);
1520
+ }
1521
+ var lifecycleSurfaceStyles = `
1522
+ .mb-lifecycle-actions,.mb-surface{box-sizing:border-box;color:var(--mb-text);font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}
1523
+ .mb-surface *{box-sizing:border-box}.mb-surface{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,12px);box-shadow:var(--mb-shadow);padding:20px}
1524
+ .mb-surface-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.mb-surface-heading>div{display:grid;gap:2px}.mb-surface-heading strong{font-size:16px}.mb-surface-heading span,.mb-empty{color:var(--mb-muted);font-size:13px}.mb-surface-heading>span{border-radius:999px;background:var(--mb-soft);font-weight:750;padding:4px 8px}
1525
+ .mb-lifecycle-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}.mb-lifecycle-action{display:grid;gap:5px;max-width:260px}.mb-action-button{appearance:none;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:700;line-height:1.2;padding:11px 15px;cursor:pointer}.mb-action-button:hover:not(:disabled){border-color:var(--mb-accent);color:var(--mb-accent)}.mb-action-button:focus-visible{outline:3px solid color-mix(in srgb,var(--mb-accent) 28%,transparent);outline-offset:2px}.mb-action-button.is-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-action-button:disabled{cursor:not-allowed;opacity:.55}.mb-action-reason{color:var(--mb-muted);font-size:12px;line-height:1.35}
1526
+ .mb-activity-list{list-style:none;margin:0;padding:0}.mb-activity-item{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;position:relative;padding:0 0 22px}.mb-activity-item:last-child{padding-bottom:0}.mb-activity-item:not(:last-child)::before{background:var(--mb-border);content:"";left:8px;position:absolute;top:10px;bottom:0;width:1px}.mb-activity-marker{background:var(--mb-surface);border:3px solid var(--mb-accent);border-radius:999px;height:11px;margin-top:4px;position:relative;width:11px;z-index:1}.mb-activity-content{display:grid;gap:4px;min-width:0}.mb-activity-content strong{font-size:15px;line-height:1.35}.mb-activity-content p{color:var(--mb-text);font-size:14px;line-height:1.5;margin:0}.mb-activity-content span,.mb-activity-empty{color:var(--mb-muted);font-size:13px;line-height:1.45}.mb-activity-empty,.mb-empty{margin:0}
1527
+ .mb-progress-list{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));list-style:none;margin:0;padding:0}.mb-progress-list li{display:grid;gap:7px;position:relative;text-align:center;color:var(--mb-muted);font-size:12px}.mb-progress-list li:not(:last-child)::after{content:"";position:absolute;left:calc(50% + 14px);right:calc(-50% + 14px);top:13px;height:2px;background:var(--mb-border)}.mb-progress-list li.is-complete:not(:last-child)::after{background:var(--mb-accent)}.mb-progress-list li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:28px;height:28px;border:2px solid var(--mb-border);border-radius:50%;background:var(--mb-surface);font-weight:800}.mb-progress-list li.is-complete>span,.mb-progress-list li.is-current>span{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-progress-list li.is-current{color:var(--mb-text)}
1528
+ .mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{display:grid;gap:3px;padding:10px 14px;border-left:1px solid var(--mb-border)}.mb-snapshot dl>div:nth-child(3n+1),.mb-remittance dl>div:first-child,.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-snapshot dd,.mb-remittance dd,.mb-contacts dd{font-size:14px;font-weight:750;margin:0;overflow-wrap:anywhere}.mb-contacts a{color:var(--mb-accent)}.mb-denial{margin-top:16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px}.mb-denial p{margin:4px 0 0}
1529
+ .mb-payment-list{display:grid}.mb-payment-list article{display:grid;grid-template-columns:1fr auto;gap:5px 18px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-list article>div{display:grid;gap:2px}.mb-payment-list article>div:nth-child(2){text-align:right}.mb-payment-list article span{color:var(--mb-muted);font-size:12px}.mb-payment-list article p{grid-column:1/-1;margin:0;color:var(--mb-muted);font-size:13px}
1530
+ @media(max-width:700px){.mb-progress-list{grid-template-columns:1fr;text-align:left}.mb-progress-list li{grid-template-columns:28px 1fr;align-items:center;text-align:left}.mb-progress-list li:not(:last-child)::after{left:13px;right:auto;top:28px;bottom:-7px;width:2px;height:auto}.mb-progress-list li>span{grid-row:1}.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{grid-template-columns:1fr 1fr}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{border:0;border-top:1px solid var(--mb-border);padding:10px 0}.mb-snapshot dl>div:nth-child(-n+2),.mb-remittance dl>div:nth-child(-n+2),.mb-contacts dl>div:nth-child(-n+2){border-top:0}.mb-payment-list article{grid-template-columns:1fr}.mb-payment-list article>div:nth-child(2){text-align:left}}
1531
+ `;
1532
+
1299
1533
  // src/connected-bill-lifecycle.tsx
1300
1534
  import {
1301
1535
  useCallback as useCallback2,
@@ -1310,7 +1544,7 @@ import {
1310
1544
  createBillLifecycleClient
1311
1545
  } from "@mindbill/browser";
1312
1546
  import { createBillLifecycleClient as createBillLifecycleClient2 } from "@mindbill/browser";
1313
- import { Fragment as Fragment3, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1547
+ import { Fragment as Fragment3, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1314
1548
  var DEFAULT_REFRESH_INTERVAL2 = 6e4;
1315
1549
  function openPdf(blob, filename) {
1316
1550
  const url = URL.createObjectURL(blob);
@@ -1462,7 +1696,7 @@ function useBillLifecycle({
1462
1696
  setData(result.data);
1463
1697
  return result.data;
1464
1698
  } catch (cause) {
1465
- const nextError = cause instanceof Error ? cause : new Error("Correction draft could not be created.");
1699
+ const nextError = cause instanceof Error ? cause : new Error("The correction could not be created.");
1466
1700
  setError(nextError);
1467
1701
  throw nextError;
1468
1702
  } finally {
@@ -1497,6 +1731,31 @@ function useBillLifecycle({
1497
1731
  startCorrection
1498
1732
  };
1499
1733
  }
1734
+ function LifecycleDialog({
1735
+ children,
1736
+ title,
1737
+ onClose
1738
+ }) {
1739
+ const dialog = useRef3(null);
1740
+ useEffect3(() => {
1741
+ const previous = document.activeElement;
1742
+ dialog.current?.focus();
1743
+ const onKeyDown = (event) => {
1744
+ if (event.key === "Escape") onClose();
1745
+ };
1746
+ document.addEventListener("keydown", onKeyDown);
1747
+ return () => {
1748
+ document.removeEventListener("keydown", onKeyDown);
1749
+ previous?.focus();
1750
+ };
1751
+ }, [onClose]);
1752
+ return /* @__PURE__ */ jsx4("div", { className: "mb-lifecycle-dialog-backdrop", onMouseDown: (event) => {
1753
+ if (event.currentTarget === event.target) onClose();
1754
+ }, children: /* @__PURE__ */ jsxs4("div", { ref: dialog, className: "mb-lifecycle-dialog", role: "dialog", "aria-modal": "true", "aria-label": title, tabIndex: -1, children: [
1755
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-dialog-close", "aria-label": "Close", onClick: onClose, children: "\xD7" }),
1756
+ children
1757
+ ] }) });
1758
+ }
1500
1759
  function dateInputValue() {
1501
1760
  const now = /* @__PURE__ */ new Date();
1502
1761
  const offset = now.getTimezoneOffset() * 6e4;
@@ -1509,18 +1768,18 @@ function SupportingDocumentControl({
1509
1768
  const [file, setFile] = useState3(null);
1510
1769
  const [type, setType] = useState3("appeal");
1511
1770
  const [busy, setBusy] = useState3(false);
1512
- return /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-upload", children: [
1513
- /* @__PURE__ */ jsxs3("select", { "aria-label": "Supporting document type", value: type, disabled: disabled || busy, onChange: (event) => setType(event.target.value), children: [
1514
- /* @__PURE__ */ jsx3("option", { value: "appeal", children: "Second Review support" }),
1515
- /* @__PURE__ */ jsx3("option", { value: "final_report", children: "Final report" }),
1516
- /* @__PURE__ */ jsx3("option", { value: "proof_of_service", children: "Proof of service" }),
1517
- /* @__PURE__ */ jsx3("option", { value: "letter_of_attestation", children: "Letter of attestation" }),
1518
- /* @__PURE__ */ jsx3("option", { value: "form_122", children: "DWC Form 122" }),
1519
- /* @__PURE__ */ jsx3("option", { value: "w9", children: "W-9" }),
1520
- /* @__PURE__ */ jsx3("option", { value: "other", children: "Other supporting document" })
1771
+ return /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-upload", children: [
1772
+ /* @__PURE__ */ jsxs4("select", { "aria-label": "Supporting document type", value: type, disabled: disabled || busy, onChange: (event) => setType(event.target.value), children: [
1773
+ /* @__PURE__ */ jsx4("option", { value: "appeal", children: "Second Review support" }),
1774
+ /* @__PURE__ */ jsx4("option", { value: "final_report", children: "Final report" }),
1775
+ /* @__PURE__ */ jsx4("option", { value: "proof_of_service", children: "Proof of service" }),
1776
+ /* @__PURE__ */ jsx4("option", { value: "letter_of_attestation", children: "Letter of attestation" }),
1777
+ /* @__PURE__ */ jsx4("option", { value: "form_122", children: "DWC Form 122" }),
1778
+ /* @__PURE__ */ jsx4("option", { value: "w9", children: "W-9" }),
1779
+ /* @__PURE__ */ jsx4("option", { value: "other", children: "Other supporting document" })
1521
1780
  ] }),
1522
- /* @__PURE__ */ jsx3("input", { "aria-label": "Choose supporting PDF", type: "file", accept: "application/pdf,.pdf", disabled: disabled || busy, onChange: (event) => setFile(event.target.files?.[0] ?? null) }),
1523
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", disabled: disabled || busy || !file, onClick: () => {
1781
+ /* @__PURE__ */ jsx4("input", { "aria-label": "Choose supporting PDF", type: "file", accept: "application/pdf,.pdf", disabled: disabled || busy, onChange: (event) => setFile(event.target.files?.[0] ?? null) }),
1782
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", disabled: disabled || busy || !file, onClick: () => {
1524
1783
  if (!file) return;
1525
1784
  setBusy(true);
1526
1785
  void onAdd(file, type).then(() => setFile(null)).catch(() => void 0).finally(() => setBusy(false));
@@ -1557,6 +1816,7 @@ function ConnectedBillLifecycle({
1557
1816
  route: "ebill"
1558
1817
  });
1559
1818
  const lastData = useRef3(null);
1819
+ const closePanel = useCallback2(() => setPanel(""), []);
1560
1820
  useEffect3(() => {
1561
1821
  if (!data || data === lastData.current) return;
1562
1822
  lastData.current = data;
@@ -1572,14 +1832,14 @@ function ConnectedBillLifecycle({
1572
1832
  }));
1573
1833
  }, [data, onChanged]);
1574
1834
  if (lifecycle.isLoading && !data) {
1575
- return /* @__PURE__ */ jsx3(Fragment3, { children: loadingFallback ?? /* @__PURE__ */ jsx3("div", { className: "mb-lifecycle-loading", children: "Loading billing\u2026" }) });
1835
+ return /* @__PURE__ */ jsx4(Fragment3, { children: loadingFallback ?? /* @__PURE__ */ jsx4("div", { className: "mb-lifecycle-loading", children: "Loading billing\u2026" }) });
1576
1836
  }
1577
1837
  if (!data) {
1578
1838
  const error = lifecycle.error ?? new Error("Bill could not be loaded.");
1579
- return /* @__PURE__ */ jsx3(Fragment3, { children: errorFallback?.(error, lifecycle.refresh) ?? /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-error", role: "alert", children: [
1580
- /* @__PURE__ */ jsx3("strong", { children: "Billing is unavailable." }),
1581
- /* @__PURE__ */ jsx3("span", { children: error.message }),
1582
- /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => void lifecycle.refresh(), children: "Try again" })
1839
+ return /* @__PURE__ */ jsx4(Fragment3, { children: errorFallback?.(error, lifecycle.refresh) ?? /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-error", role: "alert", children: [
1840
+ /* @__PURE__ */ jsx4("strong", { children: "Billing is unavailable." }),
1841
+ /* @__PURE__ */ jsx4("span", { children: error.message }),
1842
+ /* @__PURE__ */ jsx4("button", { type: "button", onClick: () => void lifecycle.refresh(), children: "Try again" })
1583
1843
  ] }) });
1584
1844
  }
1585
1845
  const actionMap = new Map(data.lifecycle.actions.map((action) => [action.id, action]));
@@ -1609,10 +1869,30 @@ function ConnectedBillLifecycle({
1609
1869
  disabled: !action.enabled || lifecycle.isMutating
1610
1870
  }));
1611
1871
  const canEditAndSubmit = Boolean(has("edit_and_submit"));
1612
- return /* @__PURE__ */ jsxs3("section", { className: ["mb-connected-lifecycle", className].filter(Boolean).join(" "), style: mindBillAppearanceStyle(appearance, style), children: [
1613
- /* @__PURE__ */ jsx3("style", { children: CONNECTED_LIFECYCLE_STYLES }),
1614
- /* @__PURE__ */ jsx3("style", { children: CONNECTED_THEME_OVERRIDE_STYLES }),
1615
- canEditAndSubmit ? /* @__PURE__ */ jsx3(
1872
+ return /* @__PURE__ */ jsxs4("section", { className: ["mb-connected-lifecycle", className].filter(Boolean).join(" "), style: mindBillAppearanceStyle(appearance, style), children: [
1873
+ /* @__PURE__ */ jsx4("style", { children: CONNECTED_LIFECYCLE_STYLES }),
1874
+ /* @__PURE__ */ jsx4("style", { children: CONNECTED_THEME_OVERRIDE_STYLES }),
1875
+ /* @__PURE__ */ jsx4(
1876
+ BillLifecycleProgress,
1877
+ {
1878
+ state: data.lifecycle.state,
1879
+ nativeStatus: data.lifecycle.nativeStatus,
1880
+ submittedAt: data.lifecycle.submittedAt ?? null,
1881
+ agingDays: data.lifecycle.agingDays ?? null,
1882
+ ...appearance ? { appearance } : {}
1883
+ }
1884
+ ),
1885
+ /* @__PURE__ */ jsx4(
1886
+ BillSnapshotSummary,
1887
+ {
1888
+ bill: data.bill,
1889
+ patient: data.patient,
1890
+ injury: data.injury,
1891
+ delivery: data.delivery,
1892
+ ...appearance ? { appearance } : {}
1893
+ }
1894
+ ),
1895
+ canEditAndSubmit ? /* @__PURE__ */ jsx4(
1616
1896
  BillReviewForm,
1617
1897
  {
1618
1898
  data,
@@ -1633,7 +1913,7 @@ function ConnectedBillLifecycle({
1633
1913
  },
1634
1914
  onOpenAttachment: (attachment) => void lifecycle.openAttachment(attachment).catch(() => void 0)
1635
1915
  }
1636
- ) : /* @__PURE__ */ jsx3(
1916
+ ) : /* @__PURE__ */ jsx4(
1637
1917
  BillStatusSummary,
1638
1918
  {
1639
1919
  status: data.lifecycle.state,
@@ -1647,96 +1927,102 @@ function ConnectedBillLifecycle({
1647
1927
  ...appearance ? { appearance } : {}
1648
1928
  }
1649
1929
  ),
1650
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-toolbar", children: [
1651
- /* @__PURE__ */ jsxs3("div", { children: [
1652
- /* @__PURE__ */ jsxs3("strong", { children: [
1930
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-toolbar", children: [
1931
+ /* @__PURE__ */ jsxs4("div", { children: [
1932
+ /* @__PURE__ */ jsxs4("strong", { children: [
1653
1933
  "Bill #",
1654
1934
  data.bill.billNumber
1655
1935
  ] }),
1656
- /* @__PURE__ */ jsx3("span", { children: lifecycle.isRefreshing ? "Refreshing\u2026" : "Status and actions update automatically." })
1936
+ /* @__PURE__ */ jsx4("span", { children: lifecycle.isRefreshing ? "Refreshing\u2026" : "Status and actions update automatically." })
1657
1937
  ] }),
1658
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-toolbar-actions", children: [
1659
- has("view_eor") ? /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: "smooth", block: "center" }), children: "View EOR" }) : null,
1660
- canEditAndSubmit && has("close") ? /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button quiet", onClick: () => selectPanel("close"), children: "Close bill" }) : null
1938
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-toolbar-actions", children: [
1939
+ has("view_eor") ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: "smooth", block: "center" }), children: "View EOR" }) : null,
1940
+ canEditAndSubmit && has("close") ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button quiet", onClick: () => selectPanel("close"), children: "Close bill" }) : null
1661
1941
  ] })
1662
1942
  ] }),
1663
- data.eors.length ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-card", id: `mb-eors-${data.bill.id}`, children: [
1664
- /* @__PURE__ */ jsxs3("header", { children: [
1665
- /* @__PURE__ */ jsxs3("div", { children: [
1666
- /* @__PURE__ */ jsx3("h3", { children: "Explanation of Review" }),
1667
- /* @__PURE__ */ jsx3("p", { children: "Review the payer response and original PDF before posting payment." })
1943
+ data.eors.length ? /* @__PURE__ */ jsxs4("section", { className: "mb-lifecycle-card", id: `mb-eors-${data.bill.id}`, children: [
1944
+ /* @__PURE__ */ jsxs4("header", { children: [
1945
+ /* @__PURE__ */ jsxs4("div", { children: [
1946
+ /* @__PURE__ */ jsx4("h3", { children: "Explanation of Review" }),
1947
+ /* @__PURE__ */ jsx4("p", { children: "Review the payer response and original PDF before posting payment." })
1668
1948
  ] }),
1669
- /* @__PURE__ */ jsxs3("span", { children: [
1949
+ /* @__PURE__ */ jsxs4("span", { children: [
1670
1950
  data.eors.length,
1671
1951
  " PDF",
1672
1952
  data.eors.length === 1 ? "" : "s"
1673
1953
  ] })
1674
1954
  ] }),
1675
- /* @__PURE__ */ jsx3("ul", { className: "mb-lifecycle-documents", children: data.eors.map((eor) => /* @__PURE__ */ jsxs3("li", { children: [
1676
- /* @__PURE__ */ jsxs3("div", { children: [
1677
- /* @__PURE__ */ jsx3("strong", { children: eor.filename }),
1678
- /* @__PURE__ */ jsx3("span", { children: eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}` })
1955
+ /* @__PURE__ */ jsx4("ul", { className: "mb-lifecycle-documents", children: data.eors.map((eor) => /* @__PURE__ */ jsxs4("li", { children: [
1956
+ /* @__PURE__ */ jsxs4("div", { children: [
1957
+ /* @__PURE__ */ jsx4("strong", { children: eor.filename }),
1958
+ /* @__PURE__ */ jsx4("span", { children: eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}` })
1679
1959
  ] }),
1680
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => void lifecycle.openEor(eor).catch(() => void 0), children: "View PDF" })
1960
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => void lifecycle.openEor(eor).catch(() => void 0), children: "View PDF" })
1681
1961
  ] }, eor.id)) })
1682
1962
  ] }) : null,
1683
- has("independent_bill_review") ? /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-info", children: [
1684
- /* @__PURE__ */ jsx3("strong", { children: has("independent_bill_review")?.label }),
1685
- /* @__PURE__ */ jsx3("span", { children: has("independent_bill_review")?.reason })
1963
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-detail-grid", children: [
1964
+ /* @__PURE__ */ jsx4(BillRemittanceCard, { remittance: data.remittance, ...appearance ? { appearance } : {} }),
1965
+ /* @__PURE__ */ jsx4(BillPayerContactCard, { delivery: data.delivery, ...appearance ? { appearance } : {} }),
1966
+ /* @__PURE__ */ jsx4(BillPaymentLedger, { payments: data.payments, ...appearance ? { appearance } : {} })
1967
+ ] }),
1968
+ /* @__PURE__ */ jsx4(BillActivityTimeline, { events: data.activity, ...appearance ? { appearance } : {} }),
1969
+ has("independent_bill_review") ? /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-info", children: [
1970
+ /* @__PURE__ */ jsx4("strong", { children: has("independent_bill_review")?.label }),
1971
+ /* @__PURE__ */ jsx4("span", { children: has("independent_bill_review")?.reason })
1686
1972
  ] }) : null,
1687
- panel === "correction" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel", children: [
1688
- /* @__PURE__ */ jsxs3("div", { children: [
1689
- /* @__PURE__ */ jsx3("h3", { children: "Correct and resubmit" }),
1690
- /* @__PURE__ */ jsx3("p", { children: "A new correction draft will preserve this rejected bill in history. Review the copied values before submitting." })
1973
+ panel === "correction" ? /* @__PURE__ */ jsx4(LifecycleDialog, { title: "Correct and resubmit", onClose: closePanel, children: /* @__PURE__ */ jsxs4("section", { className: "mb-lifecycle-panel", children: [
1974
+ /* @__PURE__ */ jsxs4("div", { children: [
1975
+ /* @__PURE__ */ jsx4("h3", { children: "Correct and resubmit" }),
1976
+ /* @__PURE__ */ jsx4("p", { children: "The rejected bill stays in history. A copied correction opens here so you can fix the rejected values and resubmit." })
1691
1977
  ] }),
1692
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-panel-actions", children: [
1693
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => setPanel(""), children: "Cancel" }),
1694
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating, onClick: () => void complete("Correction draft created.", lifecycle.startCorrection), children: lifecycle.isMutating ? "Creating\u2026" : "Create correction draft" })
1978
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-panel-actions", children: [
1979
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: closePanel, children: "Cancel" }),
1980
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating, onClick: () => void complete("Correction created.", lifecycle.startCorrection), children: lifecycle.isMutating ? "Creating\u2026" : "Create correction" })
1695
1981
  ] })
1696
- ] }) : null,
1697
- panel === "second_review" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel wide", children: [
1698
- /* @__PURE__ */ jsxs3("div", { children: [
1699
- /* @__PURE__ */ jsx3("h3", { children: "Submit Second Review" }),
1700
- /* @__PURE__ */ jsx3("p", { children: "State why payment is disputed, confirm the payer control number, and choose the supporting documents to send." })
1982
+ ] }) }) : null,
1983
+ panel === "second_review" ? /* @__PURE__ */ jsx4(LifecycleDialog, { title: "Submit Second Review", onClose: closePanel, children: /* @__PURE__ */ jsxs4("section", { className: "mb-lifecycle-panel wide", children: [
1984
+ /* @__PURE__ */ jsxs4("div", { children: [
1985
+ /* @__PURE__ */ jsx4("h3", { children: "Submit Second Review" }),
1986
+ /* @__PURE__ */ jsx4("p", { children: "State why payment is disputed, confirm the payer control number, and choose the supporting documents to send." })
1701
1987
  ] }),
1702
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-fields two", children: [
1703
- /* @__PURE__ */ jsxs3("label", { children: [
1704
- /* @__PURE__ */ jsx3("span", { children: "Reason for Second Review" }),
1705
- /* @__PURE__ */ jsx3("textarea", { required: true, value: review.reason, onChange: (event) => setReview((current) => ({ ...current, reason: event.target.value })) })
1988
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-fields two", children: [
1989
+ /* @__PURE__ */ jsxs4("label", { children: [
1990
+ /* @__PURE__ */ jsx4("span", { children: "Reason for Second Review" }),
1991
+ /* @__PURE__ */ jsx4("textarea", { required: true, value: review.reason, onChange: (event) => setReview((current) => ({ ...current, reason: event.target.value })) })
1706
1992
  ] }),
1707
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-fields", children: [
1708
- /* @__PURE__ */ jsxs3("label", { children: [
1709
- /* @__PURE__ */ jsx3("span", { children: "Payer claim control number" }),
1710
- /* @__PURE__ */ jsx3("input", { required: true, value: review.payerClaimControlNumber, onChange: (event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value })) })
1993
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-fields", children: [
1994
+ /* @__PURE__ */ jsxs4("label", { children: [
1995
+ /* @__PURE__ */ jsx4("span", { children: "Payer claim control number" }),
1996
+ /* @__PURE__ */ jsx4("input", { required: true, value: review.payerClaimControlNumber, onChange: (event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value })) })
1711
1997
  ] }),
1712
- /* @__PURE__ */ jsxs3("label", { children: [
1713
- /* @__PURE__ */ jsx3("span", { children: "Disputed amount" }),
1714
- /* @__PURE__ */ jsx3("input", { type: "number", min: "0.01", step: "0.01", value: review.disputedAmount ?? "", onChange: (event) => setReview((current) => ({ ...current, disputedAmount: event.target.value ? Number(event.target.value) : void 0 })) })
1998
+ /* @__PURE__ */ jsxs4("label", { children: [
1999
+ /* @__PURE__ */ jsx4("span", { children: "Disputed amount" }),
2000
+ /* @__PURE__ */ jsx4("input", { type: "number", min: "0.01", step: "0.01", value: review.disputedAmount ?? "", onChange: (event) => setReview((current) => ({ ...current, disputedAmount: event.target.value ? Number(event.target.value) : void 0 })) })
1715
2001
  ] }),
1716
- /* @__PURE__ */ jsxs3("label", { children: [
1717
- /* @__PURE__ */ jsx3("span", { children: "Send via" }),
1718
- /* @__PURE__ */ jsxs3("select", { value: review.route, onChange: (event) => setReview((current) => ({ ...current, route: event.target.value })), children: [
1719
- /* @__PURE__ */ jsx3("option", { value: "ebill", children: "E-bill" }),
1720
- /* @__PURE__ */ jsx3("option", { value: "fax", children: "Fax" }),
1721
- /* @__PURE__ */ jsx3("option", { value: "mail", children: "Mail" }),
1722
- /* @__PURE__ */ jsx3("option", { value: "email", children: "Email" })
2002
+ /* @__PURE__ */ jsxs4("label", { children: [
2003
+ /* @__PURE__ */ jsx4("span", { children: "Send via" }),
2004
+ /* @__PURE__ */ jsxs4("select", { value: review.route, onChange: (event) => setReview((current) => ({ ...current, route: event.target.value })), children: [
2005
+ /* @__PURE__ */ jsx4("option", { value: "ebill", children: "E-bill" }),
2006
+ /* @__PURE__ */ jsx4("option", { value: "fax", children: "Fax" }),
2007
+ /* @__PURE__ */ jsx4("option", { value: "mail", children: "Mail" }),
2008
+ /* @__PURE__ */ jsx4("option", { value: "email", children: "Email" })
1723
2009
  ] })
1724
2010
  ] })
1725
2011
  ] })
1726
2012
  ] }),
1727
- /* @__PURE__ */ jsxs3("fieldset", { className: "mb-lifecycle-packet", children: [
1728
- /* @__PURE__ */ jsx3("legend", { children: "Supporting packet" }),
1729
- data.bill.attachments.map((attachment) => /* @__PURE__ */ jsxs3("label", { children: [
1730
- /* @__PURE__ */ jsx3("input", { type: "checkbox", checked: review.attachmentIds.includes(attachment.id), onChange: (event) => setReview((current) => ({ ...current, attachmentIds: event.target.checked ? [...current.attachmentIds, attachment.id] : current.attachmentIds.filter((id) => id !== attachment.id) })) }),
1731
- /* @__PURE__ */ jsxs3("span", { children: [
1732
- /* @__PURE__ */ jsx3("strong", { children: attachment.filename }),
1733
- /* @__PURE__ */ jsx3("small", { children: attachment.description || attachment.documentType })
2013
+ /* @__PURE__ */ jsxs4("fieldset", { className: "mb-lifecycle-packet", children: [
2014
+ /* @__PURE__ */ jsx4("legend", { children: "Supporting packet" }),
2015
+ data.bill.attachments.map((attachment) => /* @__PURE__ */ jsxs4("label", { children: [
2016
+ /* @__PURE__ */ jsx4("input", { type: "checkbox", checked: review.attachmentIds.includes(attachment.id), onChange: (event) => setReview((current) => ({ ...current, attachmentIds: event.target.checked ? [...current.attachmentIds, attachment.id] : current.attachmentIds.filter((id) => id !== attachment.id) })) }),
2017
+ /* @__PURE__ */ jsxs4("span", { children: [
2018
+ /* @__PURE__ */ jsx4("strong", { children: attachment.filename }),
2019
+ /* @__PURE__ */ jsx4("small", { children: attachment.description || attachment.documentType })
1734
2020
  ] }),
1735
- /* @__PURE__ */ jsx3("button", { type: "button", onClick: () => void lifecycle.openAttachment(attachment).catch(() => void 0), children: "View" }),
1736
- /* @__PURE__ */ jsx3("button", { type: "button", "aria-label": `Remove ${attachment.filename}`, onClick: () => void lifecycle.removeAttachment(attachment.id).catch(() => void 0), children: "\xD7" })
2021
+ /* @__PURE__ */ jsx4("button", { type: "button", onClick: () => void lifecycle.openAttachment(attachment).catch(() => void 0), children: "View" }),
2022
+ /* @__PURE__ */ jsx4("button", { type: "button", "aria-label": `Remove ${attachment.filename}`, onClick: () => void lifecycle.removeAttachment(attachment.id).catch(() => void 0), children: "\xD7" })
1737
2023
  ] }, attachment.id))
1738
2024
  ] }),
1739
- /* @__PURE__ */ jsx3(SupportingDocumentControl, { disabled: lifecycle.isMutating, onAdd: async (file, type, description) => {
2025
+ /* @__PURE__ */ jsx4(SupportingDocumentControl, { disabled: lifecycle.isMutating, onAdd: async (file, type, description) => {
1740
2026
  const next = await lifecycle.addAttachment(file, type, description);
1741
2027
  setReview((current) => ({
1742
2028
  ...current,
@@ -1746,69 +2032,69 @@ function ConnectedBillLifecycle({
1746
2032
  ]))
1747
2033
  }));
1748
2034
  } }),
1749
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-panel-actions", children: [
1750
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => setPanel(""), children: "Cancel" }),
1751
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating || !review.reason.trim() || !review.payerClaimControlNumber.trim(), onClick: () => void complete("Second Review submitted.", () => lifecycle.submitSecondReview(review)), children: lifecycle.isMutating ? "Submitting\u2026" : "Submit Second Review" })
2035
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-panel-actions", children: [
2036
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: closePanel, children: "Cancel" }),
2037
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating || !review.reason.trim() || !review.payerClaimControlNumber.trim(), onClick: () => void complete("Second Review submitted.", () => lifecycle.submitSecondReview(review)), children: lifecycle.isMutating ? "Submitting\u2026" : "Submit Second Review" })
1752
2038
  ] })
1753
- ] }) : null,
1754
- panel === "payment" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel", children: [
1755
- /* @__PURE__ */ jsxs3("div", { children: [
1756
- /* @__PURE__ */ jsx3("h3", { children: "Post payment" }),
1757
- /* @__PURE__ */ jsx3("p", { children: "Record funds shown on the EOR. The balance updates and the bill closes automatically when configured." })
2039
+ ] }) }) : null,
2040
+ panel === "payment" ? /* @__PURE__ */ jsx4(LifecycleDialog, { title: "Post payment", onClose: closePanel, children: /* @__PURE__ */ jsxs4("section", { className: "mb-lifecycle-panel", children: [
2041
+ /* @__PURE__ */ jsxs4("div", { children: [
2042
+ /* @__PURE__ */ jsx4("h3", { children: "Post payment" }),
2043
+ /* @__PURE__ */ jsx4("p", { children: "Record funds shown on the EOR. The balance updates and the bill closes automatically when configured." })
1758
2044
  ] }),
1759
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-fields two", children: [
1760
- /* @__PURE__ */ jsxs3("label", { children: [
1761
- /* @__PURE__ */ jsx3("span", { children: "Amount" }),
1762
- /* @__PURE__ */ jsx3("input", { type: "number", min: "0.01", max: data.bill.balanceDue, step: "0.01", required: true, value: payment.amount || "", onChange: (event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) })) })
2045
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-fields two", children: [
2046
+ /* @__PURE__ */ jsxs4("label", { children: [
2047
+ /* @__PURE__ */ jsx4("span", { children: "Amount" }),
2048
+ /* @__PURE__ */ jsx4("input", { type: "number", min: "0.01", max: data.bill.balanceDue, step: "0.01", required: true, value: payment.amount || "", onChange: (event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) })) })
1763
2049
  ] }),
1764
- /* @__PURE__ */ jsxs3("label", { children: [
1765
- /* @__PURE__ */ jsx3("span", { children: "Method" }),
1766
- /* @__PURE__ */ jsxs3("select", { value: payment.method, onChange: (event) => setPayment((current) => ({ ...current, method: event.target.value })), children: [
1767
- /* @__PURE__ */ jsx3("option", { value: "check", children: "Check" }),
1768
- /* @__PURE__ */ jsx3("option", { value: "eft", children: "EFT" })
2050
+ /* @__PURE__ */ jsxs4("label", { children: [
2051
+ /* @__PURE__ */ jsx4("span", { children: "Method" }),
2052
+ /* @__PURE__ */ jsxs4("select", { value: payment.method, onChange: (event) => setPayment((current) => ({ ...current, method: event.target.value })), children: [
2053
+ /* @__PURE__ */ jsx4("option", { value: "check", children: "Check" }),
2054
+ /* @__PURE__ */ jsx4("option", { value: "eft", children: "EFT" })
1769
2055
  ] })
1770
2056
  ] }),
1771
- /* @__PURE__ */ jsxs3("label", { children: [
1772
- /* @__PURE__ */ jsx3("span", { children: payment.method === "check" ? "Check number" : "EFT reference" }),
1773
- /* @__PURE__ */ jsx3("input", { value: payment.checkNumber, onChange: (event) => setPayment((current) => ({ ...current, checkNumber: event.target.value })) })
2057
+ /* @__PURE__ */ jsxs4("label", { children: [
2058
+ /* @__PURE__ */ jsx4("span", { children: payment.method === "check" ? "Check number" : "EFT reference" }),
2059
+ /* @__PURE__ */ jsx4("input", { value: payment.checkNumber, onChange: (event) => setPayment((current) => ({ ...current, checkNumber: event.target.value })) })
1774
2060
  ] }),
1775
- /* @__PURE__ */ jsxs3("label", { children: [
1776
- /* @__PURE__ */ jsx3("span", { children: "Deposit date" }),
1777
- /* @__PURE__ */ jsx3("input", { type: "date", required: true, value: payment.depositDate, onChange: (event) => setPayment((current) => ({ ...current, depositDate: event.target.value })) })
2061
+ /* @__PURE__ */ jsxs4("label", { children: [
2062
+ /* @__PURE__ */ jsx4("span", { children: "Deposit date" }),
2063
+ /* @__PURE__ */ jsx4("input", { type: "date", required: true, value: payment.depositDate, onChange: (event) => setPayment((current) => ({ ...current, depositDate: event.target.value })) })
1778
2064
  ] }),
1779
- /* @__PURE__ */ jsxs3("label", { className: "full", children: [
1780
- /* @__PURE__ */ jsxs3("span", { children: [
2065
+ /* @__PURE__ */ jsxs4("label", { className: "full", children: [
2066
+ /* @__PURE__ */ jsxs4("span", { children: [
1781
2067
  "Note ",
1782
- /* @__PURE__ */ jsx3("small", { children: "Optional" })
2068
+ /* @__PURE__ */ jsx4("small", { children: "Optional" })
1783
2069
  ] }),
1784
- /* @__PURE__ */ jsx3("input", { value: payment.note, onChange: (event) => setPayment((current) => ({ ...current, note: event.target.value })) })
2070
+ /* @__PURE__ */ jsx4("input", { value: payment.note, onChange: (event) => setPayment((current) => ({ ...current, note: event.target.value })) })
1785
2071
  ] })
1786
2072
  ] }),
1787
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-panel-actions", children: [
1788
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => setPanel(""), children: "Cancel" }),
1789
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating || payment.amount <= 0 || payment.amount > data.bill.balanceDue || !payment.depositDate, onClick: () => void complete("Payment posted.", () => lifecycle.postPayment(payment)), children: lifecycle.isMutating ? "Posting\u2026" : "Post payment" })
2073
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-panel-actions", children: [
2074
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: closePanel, children: "Cancel" }),
2075
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button primary", disabled: lifecycle.isMutating || payment.amount <= 0 || payment.amount > data.bill.balanceDue || !payment.depositDate, onClick: () => void complete("Payment posted.", () => lifecycle.postPayment(payment)), children: lifecycle.isMutating ? "Posting\u2026" : "Post payment" })
1790
2076
  ] })
1791
- ] }) : null,
1792
- panel === "close" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel danger", children: [
1793
- /* @__PURE__ */ jsxs3("div", { children: [
1794
- /* @__PURE__ */ jsx3("h3", { children: "Close bill" }),
1795
- /* @__PURE__ */ jsx3("p", { children: "Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved." })
2077
+ ] }) }) : null,
2078
+ panel === "close" ? /* @__PURE__ */ jsx4(LifecycleDialog, { title: "Close bill", onClose: closePanel, children: /* @__PURE__ */ jsxs4("section", { className: "mb-lifecycle-panel danger", children: [
2079
+ /* @__PURE__ */ jsxs4("div", { children: [
2080
+ /* @__PURE__ */ jsx4("h3", { children: "Close bill" }),
2081
+ /* @__PURE__ */ jsx4("p", { children: "Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved." })
1796
2082
  ] }),
1797
- /* @__PURE__ */ jsxs3("label", { children: [
1798
- /* @__PURE__ */ jsx3("span", { children: "Reason for closing" }),
1799
- /* @__PURE__ */ jsx3("textarea", { required: true, value: closeReason, onChange: (event) => setCloseReason(event.target.value) })
2083
+ /* @__PURE__ */ jsxs4("label", { children: [
2084
+ /* @__PURE__ */ jsx4("span", { children: "Reason for closing" }),
2085
+ /* @__PURE__ */ jsx4("textarea", { required: true, value: closeReason, onChange: (event) => setCloseReason(event.target.value) })
1800
2086
  ] }),
1801
- /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-panel-actions", children: [
1802
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => setPanel(""), children: "Cancel" }),
1803
- /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button danger", disabled: lifecycle.isMutating || !closeReason.trim(), onClick: () => void complete("Bill closed.", () => lifecycle.closeBill({ reason: closeReason })), children: lifecycle.isMutating ? "Closing\u2026" : "Close bill" })
2087
+ /* @__PURE__ */ jsxs4("div", { className: "mb-lifecycle-panel-actions", children: [
2088
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: closePanel, children: "Cancel" }),
2089
+ /* @__PURE__ */ jsx4("button", { type: "button", className: "mb-lifecycle-button danger", disabled: lifecycle.isMutating || !closeReason.trim(), onClick: () => void complete("Bill closed.", () => lifecycle.closeBill({ reason: closeReason })), children: lifecycle.isMutating ? "Closing\u2026" : "Close bill" })
1804
2090
  ] })
1805
- ] }) : null,
1806
- notice ? /* @__PURE__ */ jsx3("div", { className: "mb-lifecycle-message success", role: "status", children: notice }) : null,
1807
- lifecycle.error ? /* @__PURE__ */ jsx3("div", { className: "mb-lifecycle-message error", role: "alert", children: lifecycle.error.message }) : null
2091
+ ] }) }) : null,
2092
+ notice ? /* @__PURE__ */ jsx4("div", { className: "mb-lifecycle-message success", role: "status", children: notice }) : null,
2093
+ lifecycle.error ? /* @__PURE__ */ jsx4("div", { className: "mb-lifecycle-message error", role: "alert", children: lifecycle.error.message }) : null
1808
2094
  ] });
1809
2095
  }
1810
2096
  var CONNECTED_LIFECYCLE_STYLES = `
1811
- .mb-connected-lifecycle{--mb-accent:#238dbd;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;display:grid;gap:14px;color:var(--mb-text);font:14px/1.45 var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}.mb-connected-lifecycle *{box-sizing:border-box}.mb-lifecycle-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface)}.mb-lifecycle-toolbar>div:first-child{display:grid;gap:2px}.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-button{min-height:38px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:8px 13px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-lifecycle-button.quiet{border-color:transparent;background:transparent;color:var(--mb-muted)}.mb-lifecycle-button.danger{border-color:#b63d35;background:#b63d35;color:#fff}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-card,.mb-lifecycle-panel{padding:18px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:18px}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0}.mb-lifecycle-card header>span{padding:5px 8px;border-radius:999px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;text-transform:uppercase}.mb-lifecycle-documents{list-style:none;margin:12px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid}.mb-lifecycle-documents span{color:var(--mb-muted);font-size:12px}.mb-lifecycle-info{display:grid;gap:3px;padding:13px 15px;border:1px solid #cddfe5;border-radius:10px;background:var(--mb-soft)}.mb-lifecycle-panel{display:grid;gap:16px;box-shadow:0 14px 38px rgba(30,56,68,.08)}.mb-lifecycle-panel.danger{border-color:#ecc5c2}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:12px;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{width:100%;min-height:42px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:9px 11px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:12px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:12px;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:10px;padding:10px 2px;border-top:1px solid var(--mb-border)}.mb-lifecycle-packet>label>input{width:16px;min-height:16px}.mb-lifecycle-packet>label>span{display:grid}.mb-lifecycle-packet button{border:0;background:transparent;color:var(--mb-accent);cursor:pointer;font:inherit}.mb-lifecycle-upload{display:grid;grid-template-columns:220px 1fr auto;align-items:end;gap:10px;padding:12px;border-radius:9px;background:var(--mb-soft)}.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading{padding:12px 14px;border-radius:9px}.mb-lifecycle-message.success{background:#edf9f2;color:#217449}.mb-lifecycle-message.error,.mb-lifecycle-error{background:#fff0ef;color:#9d3029}.mb-lifecycle-error{display:flex;align-items:center;gap:12px}.mb-lifecycle-error span{flex:1}.mb-lifecycle-error button{border:1px solid currentColor;border-radius:7px;background:transparent;color:inherit;padding:7px 10px}@media(max-width:760px){.mb-lifecycle-toolbar,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{justify-content:start}.mb-lifecycle-fields.two,.mb-lifecycle-upload{grid-template-columns:1fr}.mb-lifecycle-documents li{align-items:start}.mb-lifecycle-packet>label{grid-template-columns:auto 1fr auto}}
2097
+ .mb-connected-lifecycle{--mb-accent:#238dbd;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;display:grid;gap:14px;color:var(--mb-text);font:14px/1.45 var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}.mb-connected-lifecycle *{box-sizing:border-box}.mb-lifecycle-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.mb-lifecycle-detail-grid>*:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface)}.mb-lifecycle-toolbar>div:first-child{display:grid;gap:2px}.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-button{min-height:38px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:8px 13px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-lifecycle-button.quiet{border-color:transparent;background:transparent;color:var(--mb-muted)}.mb-lifecycle-button.danger{border-color:#b63d35;background:#b63d35;color:#fff}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-card,.mb-lifecycle-panel{padding:18px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:18px}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0}.mb-lifecycle-card header>span{padding:5px 8px;border-radius:999px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;text-transform:uppercase}.mb-lifecycle-documents{list-style:none;margin:12px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid}.mb-lifecycle-documents span{color:var(--mb-muted);font-size:12px}.mb-lifecycle-info{display:grid;gap:3px;padding:13px 15px;border:1px solid #cddfe5;border-radius:10px;background:var(--mb-soft)}.mb-lifecycle-dialog-backdrop{position:fixed;z-index:2147483000;inset:0;display:grid;place-items:center;padding:20px;background:rgba(18,35,43,.56);backdrop-filter:blur(3px)}.mb-lifecycle-dialog{position:relative;width:min(760px,100%);max-height:calc(100vh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:34px;height:34px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:22px/1 inherit}.mb-lifecycle-panel{display:grid;gap:16px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel.danger{border-color:#ecc5c2}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:12px;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{width:100%;min-height:42px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:9px 11px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:12px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:12px;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:10px;padding:10px 2px;border-top:1px solid var(--mb-border)}.mb-lifecycle-packet>label>input{width:16px;min-height:16px}.mb-lifecycle-packet>label>span{display:grid}.mb-lifecycle-packet button{border:0;background:transparent;color:var(--mb-accent);cursor:pointer;font:inherit}.mb-lifecycle-upload{display:grid;grid-template-columns:220px 1fr auto;align-items:end;gap:10px;padding:12px;border-radius:9px;background:var(--mb-soft)}.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading{padding:12px 14px;border-radius:9px}.mb-lifecycle-message.success{background:#edf9f2;color:#217449}.mb-lifecycle-message.error,.mb-lifecycle-error{background:#fff0ef;color:#9d3029}.mb-lifecycle-error{display:flex;align-items:center;gap:12px}.mb-lifecycle-error span{flex:1}.mb-lifecycle-error button{border:1px solid currentColor;border-radius:7px;background:transparent;color:inherit;padding:7px 10px}@media(max-width:760px){.mb-lifecycle-detail-grid{grid-template-columns:1fr}.mb-lifecycle-detail-grid>*:last-child:nth-child(odd){grid-column:auto}.mb-lifecycle-toolbar,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{justify-content:start}.mb-lifecycle-fields.two,.mb-lifecycle-upload{grid-template-columns:1fr}.mb-lifecycle-documents li{align-items:start}.mb-lifecycle-packet>label{grid-template-columns:auto 1fr auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:92vh}.mb-lifecycle-dialog .mb-lifecycle-panel{border-radius:18px 18px 0 0}.mb-lifecycle-packet>label>button:last-child{grid-column:3}}
1812
2098
  `;
1813
2099
  var CONNECTED_THEME_OVERRIDE_STYLES = `
1814
2100
  .mb-connected-lifecycle{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}
@@ -1868,12 +2154,21 @@ function MindBillBillReview(props) {
1868
2154
  return widget("mindbill-bill-review", props);
1869
2155
  }
1870
2156
  export {
2157
+ BillActivityTimeline,
2158
+ BillLifecycleActions,
2159
+ BillLifecycleProgress,
2160
+ BillPayerContactCard,
2161
+ BillPaymentLedger,
2162
+ BillRemittanceCard,
1871
2163
  BillReviewForm,
2164
+ BillSnapshotSummary,
1872
2165
  BillStatusSummary,
1873
2166
  ConnectedBillLifecycle,
1874
2167
  ConnectedBillStatus,
1875
2168
  MindBillBillReview,
1876
2169
  MindBillBillTimeline,
2170
+ billActivityEventLabel,
2171
+ billLifecycleStage,
1877
2172
  buildBillReviewSaveInput,
1878
2173
  createBillLifecycleClient2 as createBillLifecycleClient,
1879
2174
  createBillStatusClient,
@@ -1882,6 +2177,7 @@ export {
1882
2177
  mindBillThemePresets,
1883
2178
  resolveMindBillAppearance,
1884
2179
  useBillLifecycle,
1885
- useBillStatus
2180
+ useBillStatus,
2181
+ visibleBillLifecycleActions
1886
2182
  };
1887
2183
  //# sourceMappingURL=index.js.map