@mindbill/react 0.9.1 → 0.9.2

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.d.ts CHANGED
@@ -62,6 +62,15 @@ type BillReviewAttachment = {
62
62
  addedAt?: string;
63
63
  contentUrl?: string;
64
64
  };
65
+ type BillReviewPayer = {
66
+ id: string;
67
+ name: string;
68
+ hasElectronic?: boolean;
69
+ states?: string[];
70
+ };
71
+ type BillReviewFeatures = {
72
+ authorizationNumber?: boolean;
73
+ };
65
74
  type BillReviewData = {
66
75
  bill: {
67
76
  id: string;
@@ -94,6 +103,7 @@ type BillReviewData = {
94
103
  employer?: string;
95
104
  doi?: string;
96
105
  claimsAdminId?: string;
106
+ claimsAdminName?: string;
97
107
  };
98
108
  options?: {
99
109
  billingProviders?: BillReviewBillingProvider[];
@@ -102,6 +112,7 @@ type BillReviewData = {
102
112
  };
103
113
  };
104
114
  type BillReviewSaveInput = {
115
+ claimsAdminId: string;
105
116
  dos: string;
106
117
  dosEnd?: string | null;
107
118
  authorizationNumber?: string | null;
@@ -126,12 +137,16 @@ type BillReviewFormProps = {
126
137
  onAddAttachment: (file: File, documentType: BillReviewDocumentType, description?: string) => Promise<void>;
127
138
  onRemoveAttachment: (attachmentId: string) => Promise<void>;
128
139
  onOpenAttachment?: (attachment: BillReviewAttachment) => void;
140
+ onSearchClaimsAdministrators?: (query: string) => Promise<BillReviewPayer[]>;
129
141
  className?: string;
130
142
  style?: CSSProperties;
131
143
  appearance?: MindBillAppearance;
144
+ features?: BillReviewFeatures;
132
145
  disabled?: boolean;
133
146
  };
134
147
  type BillReviewDraft = {
148
+ claimsAdminId: string;
149
+ claimsAdminName: string;
135
150
  dos: string;
136
151
  dosEnd: string;
137
152
  authorizationNumber: string;
@@ -141,7 +156,7 @@ type BillReviewDraft = {
141
156
  lineItems: BillReviewLineItem[];
142
157
  };
143
158
  declare function buildBillReviewSaveInput(draft: BillReviewDraft): BillReviewSaveInput;
144
- declare function BillReviewForm({ data, onSave, onSubmit, onAddAttachment, onRemoveAttachment, onOpenAttachment, className, style, appearance, disabled, }: BillReviewFormProps): ReactElement;
159
+ declare function BillReviewForm({ data, onSave, onSubmit, onAddAttachment, onRemoveAttachment, onOpenAttachment, onSearchClaimsAdministrators, className, style, appearance, features, disabled, }: BillReviewFormProps): ReactElement;
145
160
  type BillStatusSummaryProps = {
146
161
  status: string;
147
162
  submittedAt?: string | null;
@@ -292,6 +307,7 @@ type BillLifecycleClientOptions = {
292
307
  };
293
308
  type BillLifecycleClient = {
294
309
  getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;
310
+ searchClaimsAdministrators: (query: string) => Promise<BillReviewPayer[]>;
295
311
  saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;
296
312
  submitBill: (input: BillReviewSaveInput, route: BillSubmissionRoute) => Promise<BillLifecycleData>;
297
313
  addAttachment: (file: File, documentType: BillReviewDocumentType, description?: string) => Promise<BillLifecycleData>;
@@ -321,6 +337,7 @@ type UseBillLifecycleResult = {
321
337
  isRefreshing: boolean;
322
338
  isMutating: boolean;
323
339
  refresh: () => Promise<void>;
340
+ searchClaimsAdministrators: BillLifecycleClient["searchClaimsAdministrators"];
324
341
  saveReview: BillLifecycleClient["saveReview"];
325
342
  submitBill: BillLifecycleClient["submitBill"];
326
343
  addAttachment: BillLifecycleClient["addAttachment"];
@@ -341,13 +358,14 @@ declare function createBillLifecycleClient({ billId, sessionEndpoint, getSession
341
358
  declare function useBillLifecycle({ billId: providedBillId, sessionEndpoint, getSession, apiBaseUrl, refreshInterval, enabled, initialData, onBillIdChange, fetch: fetchOverride, }: UseBillLifecycleOptions): UseBillLifecycleResult;
342
359
  type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {
343
360
  appearance?: MindBillAppearance;
361
+ features?: BillReviewFeatures;
344
362
  className?: string;
345
363
  style?: CSSProperties;
346
364
  loadingFallback?: ReactNode;
347
365
  errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;
348
366
  onChanged?: (data: BillLifecycleData) => void;
349
367
  };
350
- declare function ConnectedBillLifecycle({ appearance, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement;
368
+ declare function ConnectedBillLifecycle({ appearance, features, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement;
351
369
 
352
370
  type MindBillWidgetProps = {
353
371
  sessionToken: string;
@@ -369,4 +387,4 @@ declare const HostedBillFromReport: typeof MindBillBillFromReport;
369
387
  declare const HostedCollections: typeof MindBillCollections;
370
388
  declare const HostedOnboarding: typeof MindBillOnboarding;
371
389
 
372
- export { type BillEorDocument, type BillLifecycleAction, type BillLifecycleActionId, type BillLifecycleClient, type BillLifecycleClientOptions, type BillLifecycleData, type BillLifecycleSession, type BillLifecycleSessionProvider, type BillLifecycleSessionRequest, type BillReviewAttachment, type BillReviewBillingProvider, type BillReviewClinician, type BillReviewData, type BillReviewDocumentType, type BillReviewDraft, BillReviewForm, type BillReviewFormProps, type BillReviewLineItem, type BillReviewLocation, type BillReviewSaveInput, type BillStatusAction, type BillStatusClient, type BillStatusClientOptions, type BillStatusData, type BillStatusSession, type BillStatusSessionProvider, type BillStatusSessionRequest, BillStatusSummary, type BillStatusSummaryProps, type BillSubmissionRoute, type CloseBillInput, ConnectedBillLifecycle, type ConnectedBillLifecycleProps, ConnectedBillStatus, type ConnectedBillStatusProps, HostedBillFromReport, HostedBillReview, HostedBillTimeline, HostedCollections, HostedOnboarding, MindBillBillFromReport, MindBillBillReview, MindBillBillTimeline, MindBillCollections, MindBillOnboarding, type MindBillWidgetProps, type PostBillPaymentInput, type SubmitSecondReviewInput, type UseBillLifecycleOptions, type UseBillLifecycleResult, type UseBillStatusOptions, type UseBillStatusResult, buildBillReviewSaveInput, createBillLifecycleClient, createBillStatusClient, useBillLifecycle, useBillStatus };
390
+ export { type BillEorDocument, type BillLifecycleAction, type BillLifecycleActionId, type BillLifecycleClient, type BillLifecycleClientOptions, type BillLifecycleData, type BillLifecycleSession, type BillLifecycleSessionProvider, type BillLifecycleSessionRequest, type BillReviewAttachment, type BillReviewBillingProvider, type BillReviewClinician, type BillReviewData, type BillReviewDocumentType, type BillReviewDraft, type BillReviewFeatures, BillReviewForm, type BillReviewFormProps, type BillReviewLineItem, type BillReviewLocation, type BillReviewPayer, type BillReviewSaveInput, type BillStatusAction, type BillStatusClient, type BillStatusClientOptions, type BillStatusData, type BillStatusSession, type BillStatusSessionProvider, type BillStatusSessionRequest, BillStatusSummary, type BillStatusSummaryProps, type BillSubmissionRoute, type CloseBillInput, ConnectedBillLifecycle, type ConnectedBillLifecycleProps, ConnectedBillStatus, type ConnectedBillStatusProps, HostedBillFromReport, HostedBillReview, HostedBillTimeline, HostedCollections, HostedOnboarding, MindBillBillFromReport, MindBillBillReview, MindBillBillTimeline, MindBillCollections, MindBillOnboarding, type MindBillWidgetProps, type PostBillPaymentInput, type SubmitSecondReviewInput, type UseBillLifecycleOptions, type UseBillLifecycleResult, type UseBillStatusOptions, type UseBillStatusResult, buildBillReviewSaveInput, createBillLifecycleClient, createBillStatusClient, useBillLifecycle, useBillStatus };
package/dist/index.js CHANGED
@@ -45,6 +45,8 @@ function withoutId(value) {
45
45
  function toDraft(data) {
46
46
  const snapshot = data.bill.billingSnapshot;
47
47
  return {
48
+ claimsAdminId: data.injury.claimsAdminId || "",
49
+ claimsAdminName: data.injury.claimsAdminName || "",
48
50
  dos: data.bill.dos || "",
49
51
  dosEnd: data.bill.dosEnd || "",
50
52
  authorizationNumber: data.bill.authorizationNumber || "",
@@ -59,6 +61,7 @@ function toDraft(data) {
59
61
  }
60
62
  function buildBillReviewSaveInput(draft) {
61
63
  return {
64
+ claimsAdminId: draft.claimsAdminId,
62
65
  dos: draft.dos,
63
66
  dosEnd: draft.dosEnd || null,
64
67
  authorizationNumber: draft.authorizationNumber.trim() || null,
@@ -126,12 +129,19 @@ function BillReviewForm({
126
129
  onAddAttachment,
127
130
  onRemoveAttachment,
128
131
  onOpenAttachment,
132
+ onSearchClaimsAdministrators,
129
133
  className,
130
134
  style,
131
135
  appearance,
136
+ features,
132
137
  disabled = false
133
138
  }) {
134
139
  const [draft, setDraft] = useState(() => toDraft(data));
140
+ const [payerQuery, setPayerQuery] = useState(
141
+ () => data.injury.claimsAdminName || ""
142
+ );
143
+ const [payerResults, setPayerResults] = useState([]);
144
+ const [payerBusy, setPayerBusy] = useState(false);
135
145
  const [route, setRoute] = useState("ebill");
136
146
  const [file, setFile] = useState(null);
137
147
  const [documentType, setDocumentType] = useState("other");
@@ -139,11 +149,42 @@ function BillReviewForm({
139
149
  const [error, setError] = useState("");
140
150
  const [notice, setNotice] = useState("");
141
151
  const routeName = useId();
152
+ const payerListId = useId();
142
153
  const editable = data.bill.status === "incomplete" && !disabled;
143
- useEffect(() => setDraft(toDraft(data)), [data]);
154
+ useEffect(() => {
155
+ setDraft(toDraft(data));
156
+ setPayerQuery(data.injury.claimsAdminName || "");
157
+ }, [data]);
158
+ useEffect(() => {
159
+ if (!onSearchClaimsAdministrators || payerQuery.trim().length < 2) {
160
+ setPayerResults([]);
161
+ setPayerBusy(false);
162
+ return;
163
+ }
164
+ let current = true;
165
+ const timer = window.setTimeout(() => {
166
+ setPayerBusy(true);
167
+ void onSearchClaimsAdministrators(payerQuery.trim()).then((results) => {
168
+ if (current) setPayerResults(results);
169
+ }).catch((cause) => {
170
+ if (current) {
171
+ setPayerResults([]);
172
+ setError(
173
+ cause instanceof Error ? cause.message : "Claims administrator search is unavailable."
174
+ );
175
+ }
176
+ }).finally(() => {
177
+ if (current) setPayerBusy(false);
178
+ });
179
+ }, 200);
180
+ return () => {
181
+ current = false;
182
+ window.clearTimeout(timer);
183
+ };
184
+ }, [onSearchClaimsAdministrators, payerQuery]);
144
185
  const canSubmit = useMemo(
145
186
  () => Boolean(
146
- draft.dos && draft.billingProvider.name.trim() && draft.billingProvider.taxId.trim() && draft.billingProvider.npi.trim() && draft.clinician.name.trim() && draft.clinician.npi.trim() && draft.location.name.trim() && draft.location.street.trim() && draft.location.city.trim() && draft.location.state.trim() && draft.location.zip.trim() && draft.lineItems.length && draft.lineItems.every((line) => line.code.trim() && line.units > 0)
187
+ draft.dos && draft.claimsAdminId && draft.billingProvider.name.trim() && draft.billingProvider.taxId.trim() && draft.billingProvider.npi.trim() && draft.clinician.name.trim() && draft.clinician.npi.trim() && draft.location.name.trim() && draft.location.street.trim() && draft.location.city.trim() && draft.location.state.trim() && draft.location.zip.trim() && draft.lineItems.length && draft.lineItems.every((line) => line.code.trim() && line.units > 0)
147
188
  ),
148
189
  [draft]
149
190
  );
@@ -168,7 +209,7 @@ function BillReviewForm({
168
209
  setNotice(action === "save" ? "Changes saved." : "Bill submitted.");
169
210
  } catch (cause) {
170
211
  setError(
171
- cause instanceof Error ? cause.message : "MindBill could not complete this request."
212
+ cause instanceof Error ? cause.message : "The billing request could not be completed."
172
213
  );
173
214
  } finally {
174
215
  setBusy("");
@@ -238,15 +279,70 @@ function BillReviewForm({
238
279
  /* @__PURE__ */ jsx("dd", { children: data.injury.doi || "\u2014" })
239
280
  ] })
240
281
  ] }),
282
+ /* @__PURE__ */ jsxs("section", { className: sectionClass, children: [
283
+ /* @__PURE__ */ jsxs("div", { className: "mb-native-section-head", children: [
284
+ /* @__PURE__ */ jsxs("div", { children: [
285
+ /* @__PURE__ */ jsx("h3", { children: "Claims administrator" }),
286
+ /* @__PURE__ */ jsx("p", { children: "Select the carrier or administrator that should receive this bill." })
287
+ ] }),
288
+ draft.claimsAdminId ? /* @__PURE__ */ jsx("span", { children: "Selected" }) : /* @__PURE__ */ jsx("span", { children: "Required" })
289
+ ] }),
290
+ /* @__PURE__ */ jsxs("div", { className: "mb-native-payer-picker", children: [
291
+ /* @__PURE__ */ jsxs("label", { className: "mb-native-field", children: [
292
+ /* @__PURE__ */ jsx("span", { children: "Insurance company or claims administrator" }),
293
+ /* @__PURE__ */ jsx(
294
+ "input",
295
+ {
296
+ role: "combobox",
297
+ "aria-autocomplete": "list",
298
+ "aria-controls": payerListId,
299
+ "aria-expanded": payerResults.length > 0,
300
+ value: payerQuery,
301
+ disabled: !editable,
302
+ placeholder: "Search by payer or administrator name",
303
+ onChange: (event) => {
304
+ const value = event.target.value;
305
+ setPayerQuery(value);
306
+ setDraft((current) => ({
307
+ ...current,
308
+ ...value === current.claimsAdminName ? {} : { claimsAdminId: "", claimsAdminName: "" }
309
+ }));
310
+ }
311
+ }
312
+ )
313
+ ] }),
314
+ payerBusy ? /* @__PURE__ */ jsx("span", { className: "mb-native-payer-help", children: "Searching\u2026" }) : null,
315
+ !payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? /* @__PURE__ */ jsx("span", { className: "mb-native-payer-help", children: "No matching administrator selected yet." }) : null,
316
+ payerResults.length > 0 ? /* @__PURE__ */ jsx("ul", { id: payerListId, className: "mb-native-payer-results", role: "listbox", children: payerResults.map((payer) => /* @__PURE__ */ jsx("li", { role: "option", "aria-selected": payer.id === draft.claimsAdminId, children: /* @__PURE__ */ jsxs(
317
+ "button",
318
+ {
319
+ type: "button",
320
+ onClick: () => {
321
+ setDraft((current) => ({
322
+ ...current,
323
+ claimsAdminId: payer.id,
324
+ claimsAdminName: payer.name
325
+ }));
326
+ setPayerQuery(payer.name);
327
+ setPayerResults([]);
328
+ },
329
+ children: [
330
+ /* @__PURE__ */ jsx("strong", { children: payer.name }),
331
+ /* @__PURE__ */ jsx("span", { children: payer.hasElectronic ? "Electronic billing available" : "Billing route confirmed after review" })
332
+ ]
333
+ }
334
+ ) }, payer.id)) }) : null
335
+ ] })
336
+ ] }),
241
337
  /* @__PURE__ */ jsxs("section", { className: sectionClass, children: [
242
338
  /* @__PURE__ */ jsx("div", { className: "mb-native-section-head", children: /* @__PURE__ */ jsxs("div", { children: [
243
339
  /* @__PURE__ */ jsx("h3", { children: "Claim and service" }),
244
340
  /* @__PURE__ */ jsx("p", { children: "These values print on the bill." })
245
341
  ] }) }),
246
- /* @__PURE__ */ jsxs("div", { className: "mb-native-grid three", children: [
342
+ /* @__PURE__ */ jsxs("div", { className: `mb-native-grid ${features?.authorizationNumber === false ? "two" : "three"}`, children: [
247
343
  /* @__PURE__ */ jsx(Field, { label: "Date of service", type: "date", required: true, value: draft.dos, onChange: (dos) => setDraft((current) => ({ ...current, dos })) }),
248
344
  /* @__PURE__ */ jsx(Field, { label: "End date", type: "date", optional: true, value: draft.dosEnd, onChange: (dosEnd) => setDraft((current) => ({ ...current, dosEnd })) }),
249
- /* @__PURE__ */ jsx(Field, { label: "Authorization number", optional: true, value: draft.authorizationNumber, onChange: (authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber })) })
345
+ features?.authorizationNumber === false ? null : /* @__PURE__ */ jsx(Field, { label: "Authorization number", optional: true, value: draft.authorizationNumber, onChange: (authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber })) })
250
346
  ] })
251
347
  ] }),
252
348
  /* @__PURE__ */ jsxs("section", { className: sectionClass, children: [
@@ -260,7 +356,7 @@ function BillReviewForm({
260
356
  /* @__PURE__ */ jsxs("div", { className: "mb-native-grid three", children: [
261
357
  /* @__PURE__ */ jsx(Field, { label: "Practice name", required: true, value: draft.billingProvider.name, onChange: (value) => updateBillingProvider("name", value) }),
262
358
  /* @__PURE__ */ jsx(Field, { label: "Tax ID", required: true, value: draft.billingProvider.taxId, onChange: (value) => updateBillingProvider("taxId", value) }),
263
- /* @__PURE__ */ jsx(Field, { label: "Group NPI", required: true, value: draft.billingProvider.npi, onChange: (value) => updateBillingProvider("npi", value) }),
359
+ /* @__PURE__ */ jsx(Field, { label: "Billing NPI", required: true, value: draft.billingProvider.npi, onChange: (value) => updateBillingProvider("npi", value) }),
264
360
  /* @__PURE__ */ jsx(Field, { label: "Phone", optional: true, value: draft.billingProvider.phone || "", onChange: (value) => updateBillingProvider("phone", value) }),
265
361
  /* @__PURE__ */ jsx(Field, { label: "Billing street", required: true, value: draft.billingProvider.billingStreet || "", onChange: (value) => updateBillingProvider("billingStreet", value) }),
266
362
  /* @__PURE__ */ jsx(Field, { label: "City", required: true, value: draft.billingProvider.billingCity || "", onChange: (value) => updateBillingProvider("billingCity", value) }),
@@ -306,7 +402,7 @@ function BillReviewForm({
306
402
  /* @__PURE__ */ jsxs("div", { className: "mb-native-section-head", children: [
307
403
  /* @__PURE__ */ jsxs("div", { children: [
308
404
  /* @__PURE__ */ jsx("h3", { children: "Procedure lines" }),
309
- /* @__PURE__ */ jsx("p", { children: "MindBill recalculates the allowed amount when changes are saved." })
405
+ /* @__PURE__ */ jsx("p", { children: "The allowed amount is recalculated when changes are saved." })
310
406
  ] }),
311
407
  /* @__PURE__ */ jsx("button", { type: "button", className: "mb-native-button quiet", disabled: !editable, onClick: () => setDraft((current) => ({ ...current, lineItems: [...current.lineItems, { code: "", modifiers: [], units: 1, charge: 0 }] })), children: "+ Add line" })
312
408
  ] }),
@@ -362,7 +458,7 @@ function BillReviewForm({
362
458
  /* @__PURE__ */ jsxs("div", { children: [
363
459
  /* @__PURE__ */ jsx("span", { className: "mb-native-eyebrow", children: "Delivery" }),
364
460
  /* @__PURE__ */ jsx("h3", { children: "Submit this bill" }),
365
- /* @__PURE__ */ jsx("p", { children: "MindBill will send the claim and own status, payment, denial, and resubmission." })
461
+ /* @__PURE__ */ jsx("p", { children: "After submission, status, payments, denials, and resubmissions stay available here." })
366
462
  ] }),
367
463
  /* @__PURE__ */ jsxs("fieldset", { children: [
368
464
  /* @__PURE__ */ jsx("legend", { children: "Send via" }),
@@ -415,6 +511,16 @@ var NATIVE_BILL_REVIEW_STYLES = `
415
511
  .mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}
416
512
  .mb-native-review,.mb-native-status{--mb-accent:#238dbd;--mb-accent-dark:#176f98;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;color:var(--mb-text);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}.mb-native-review *,.mb-native-status *{box-sizing:border-box}.mb-native-review{display:grid;gap:16px}.mb-native-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:6px 2px}.mb-native-heading h2,.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{margin:3px 0 2px;line-height:1.2}.mb-native-heading h2{font-size:25px}.mb-native-heading p,.mb-native-section p,.mb-native-submit p,.mb-native-status p{margin:0;color:var(--mb-muted)}.mb-native-eyebrow{color:#59727d;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.mb-native-total{display:flex;align-items:center;gap:18px}.mb-native-total span,.mb-native-section-head>span{border-radius:999px;background:var(--mb-soft);color:#58717c;font-size:11px;font-weight:800;padding:6px 10px;text-transform:capitalize}.mb-native-total strong{font-size:24px}.mb-native-summary{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);overflow:hidden}.mb-native-summary div{padding:17px 20px;border-right:1px solid var(--mb-border)}.mb-native-summary div:last-child{border:0}.mb-native-summary dt,.mb-native-allowed span{color:#647982;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mb-native-summary dd{margin:5px 0 0;font-weight:750}.mb-native-section{padding:20px;border:1px solid var(--mb-border);border-radius:14px;background:var(--mb-surface);box-shadow:0 8px 24px rgba(28,58,72,.04)}.mb-native-section-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:17px}.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{font-size:19px}.mb-native-grid{display:grid;gap:14px}.mb-native-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.mb-native-field{display:grid;gap:6px;min-width:0;color:var(--mb-text);font-size:12px;font-weight:750}.mb-native-field small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-native-field input,.mb-native-attach select,.mb-native-attach input{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}.mb-native-field input:focus,.mb-native-attach select:focus,.mb-native-attach input:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}.mb-native-lines{display:grid;gap:10px}.mb-native-line{display:grid;grid-template-columns:1.1fr 1.1fr 110px 120px 28px;align-items:end;gap:12px;padding:13px;background:var(--mb-soft);border:1px solid #e3edf0;border-radius:10px}.mb-native-allowed{display:grid;gap:5px;padding:0 8px 11px;text-align:right}.mb-native-allowed strong{font-size:16px}.mb-native-remove{border:0;background:transparent;color:#667d86;cursor:pointer;font-size:20px;padding:7px}.mb-native-note{padding:13px 15px;border:1px solid #bdd9e4;border-radius:9px;background:#f2f9fc;color:#526d78}.mb-native-note strong{color:var(--mb-text);margin-right:12px}.mb-native-documents{list-style:none;margin:14px 0;padding:0}.mb-native-documents li{display:grid;grid-template-columns:42px 1fr auto 28px;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--mb-border)}.mb-native-documents li>div{display:grid}.mb-native-documents li span{color:var(--mb-muted);font-size:12px}.mb-native-file{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#eaf5f9;color:var(--mb-accent)!important;font-size:11px!important;font-weight:850}.mb-native-attach{display:grid;grid-template-columns:1fr 230px minmax(220px,1fr) auto;align-items:end;gap:12px;padding:15px;border-radius:10px;background:var(--mb-soft)}.mb-native-attach>div{display:grid;gap:3px}.mb-native-attach span{color:var(--mb-muted);font-size:12px}.mb-native-button{min-height:40px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-native-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-button.primary:hover{background:var(--mb-accent-dark)}.mb-native-button.secondary{background:#fff}.mb-native-button.quiet{min-height:auto;background:var(--mb-soft);padding:7px 11px}.mb-native-button:disabled,.mb-native-remove:disabled{cursor:not-allowed;opacity:.5}.mb-native-submit{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;padding:22px;border:1px solid #bcd8e2;border-radius:14px;background:linear-gradient(135deg,#f3fafc,#eaf6fa)}.mb-native-submit fieldset{display:flex;gap:6px;margin:0;padding:0;border:0}.mb-native-submit legend{position:absolute;width:1px;height:1px;overflow:hidden}.mb-native-submit fieldset label{display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #c9dce3;border-radius:8px;background:#fff;font-weight:700}.mb-native-actions{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1}.mb-native-message{grid-column:1/-1;padding:10px 12px;border-radius:8px}.mb-native-message.error{background:#fff0ef;color:#9d3029}.mb-native-message.success{background:#edf9f2;color:#217449}.mb-native-status{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px;border:1px solid var(--mb-border);border-radius:12px;background:#fff}.mb-native-status h3{text-transform:capitalize}.mb-native-status dl{display:flex;margin:0}.mb-native-status dl div{min-width:110px;padding:0 18px;border-left:1px solid var(--mb-border)}.mb-native-status dt{color:var(--mb-muted);font-size:11px}.mb-native-status dd{margin:4px 0 0;font-size:17px;font-weight:800}@media(max-width:900px){.mb-native-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-summary{grid-template-columns:repeat(2,1fr)}.mb-native-summary div:nth-child(2){border-right:0}.mb-native-summary div:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mb-native-line{grid-template-columns:1fr 1fr 90px}.mb-native-allowed{align-self:center}.mb-native-attach{grid-template-columns:1fr 1fr}.mb-native-submit{grid-template-columns:1fr}.mb-native-submit fieldset,.mb-native-actions{grid-column:1}.mb-native-actions{justify-content:start}}@media(max-width:620px){.mb-native-heading,.mb-native-total,.mb-native-status{align-items:start;flex-direction:column}.mb-native-grid.three,.mb-native-summary,.mb-native-line,.mb-native-attach{grid-template-columns:1fr}.mb-native-summary div,.mb-native-summary div:nth-child(2){border-right:0;border-bottom:1px solid var(--mb-border)}.mb-native-line{align-items:stretch}.mb-native-allowed{text-align:left}.mb-native-submit fieldset{display:grid;grid-template-columns:1fr 1fr}.mb-native-status dl{width:100%}.mb-native-status dl div{min-width:0;flex:1;padding:0 10px}.mb-native-status dl div:first-child{padding-left:0;border-left:0}}
417
513
  .mb-native-status-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.mb-native-status-copy{min-width:150px}.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}
514
+ .mb-native-review{padding:clamp(16px,2vw,24px)}
515
+ .mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}
516
+ .mb-native-payer-picker{position:relative;max-width:760px}
517
+ .mb-native-payer-help{display:block;margin-top:7px;color:var(--mb-muted);font-size:12px}
518
+ .mb-native-payer-results{position:absolute;z-index:5;top:calc(100% + 6px);right:0;left:0;max-height:280px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 16px 40px rgba(28,58,72,.16)}
519
+ .mb-native-payer-results li{margin:0;padding:0}
520
+ .mb-native-payer-results button{display:grid;width:100%;gap:2px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}
521
+ .mb-native-payer-results button:hover,.mb-native-payer-results button:focus{background:var(--mb-soft);outline:0}
522
+ .mb-native-payer-results span{color:var(--mb-muted);font-size:12px}
523
+ @media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}
418
524
  `;
419
525
 
420
526
  // src/connected-bill-status.tsx
@@ -701,14 +807,14 @@ function isSessionFresh2(session) {
701
807
  }
702
808
  function normalizeSession2(value) {
703
809
  if (!value || typeof value !== "object") {
704
- throw new Error("The MindBill session endpoint returned an invalid response.");
810
+ throw new Error("The billing session endpoint returned an invalid response.");
705
811
  }
706
812
  const candidate = value;
707
813
  const nested = candidate.session ?? candidate.data;
708
814
  const session = nested && typeof nested === "object" ? nested : candidate;
709
815
  if (typeof session.token !== "string" || session.token.length < 8) {
710
816
  throw new Error(
711
- "The MindBill session endpoint did not return a browser session token."
817
+ "The billing session endpoint did not return a browser session token."
712
818
  );
713
819
  }
714
820
  return {
@@ -719,11 +825,11 @@ function normalizeSession2(value) {
719
825
  }
720
826
  function normalizeLifecycle(value) {
721
827
  if (!value || typeof value !== "object") {
722
- throw new Error("MindBill returned an invalid bill lifecycle.");
828
+ throw new Error("The billing service returned an invalid bill lifecycle.");
723
829
  }
724
830
  const data = value;
725
831
  if (!data.bill || !data.patient || !data.injury || !data.lifecycle || !Array.isArray(data.lifecycle.actions) || !Array.isArray(data.eors)) {
726
- throw new Error("MindBill returned an invalid bill lifecycle.");
832
+ throw new Error("The billing service returned an invalid bill lifecycle.");
727
833
  }
728
834
  return data;
729
835
  }
@@ -759,7 +865,7 @@ function createBillLifecycleClient({
759
865
  if (!response.ok) {
760
866
  throw await responseError2(
761
867
  response,
762
- "MindBill browser session could not be created."
868
+ "The billing session could not be created."
763
869
  );
764
870
  }
765
871
  return response.json();
@@ -800,6 +906,34 @@ function createBillLifecycleClient({
800
906
  const body = await response.json();
801
907
  return normalizeLifecycle(body.data);
802
908
  };
909
+ const searchClaimsAdministrators = async (query) => {
910
+ const response = await request(
911
+ `/embed/api/bill-review/payers?q=${encodeURIComponent(query)}`
912
+ );
913
+ if (!response.ok) {
914
+ throw await responseError2(
915
+ response,
916
+ "Claims administrator search is unavailable."
917
+ );
918
+ }
919
+ const body = await response.json();
920
+ if (!Array.isArray(body.results)) {
921
+ throw new Error("Claims administrator search returned an invalid response.");
922
+ }
923
+ return body.results.flatMap((value) => {
924
+ if (!value || typeof value !== "object") return [];
925
+ const payer = value;
926
+ if (typeof payer.id !== "string" || typeof payer.name !== "string") {
927
+ return [];
928
+ }
929
+ return [{
930
+ id: payer.id,
931
+ name: payer.name,
932
+ ...typeof payer.hasElectronic === "boolean" ? { hasElectronic: payer.hasElectronic } : {},
933
+ ...Array.isArray(payer.states) ? { states: payer.states.filter((state) => typeof state === "string") } : {}
934
+ }];
935
+ });
936
+ };
803
937
  const mutation = async (path, init, fallback) => {
804
938
  const headers = new Headers(init.headers);
805
939
  headers.set("idempotency-key", idempotencyKey());
@@ -838,6 +972,7 @@ function createBillLifecycleClient({
838
972
  sessionRequest = null;
839
973
  },
840
974
  getLifecycle: loadLifecycle,
975
+ searchClaimsAdministrators,
841
976
  saveReview,
842
977
  async submitBill(input, route) {
843
978
  await saveReview(input);
@@ -915,7 +1050,7 @@ function createBillLifecycleClient({
915
1050
  );
916
1051
  const body = await response.json();
917
1052
  if (typeof body.replacementBillId !== "string") {
918
- throw new Error("MindBill did not return the correction bill ID.");
1053
+ throw new Error("The billing service did not return the correction bill ID.");
919
1054
  }
920
1055
  return {
921
1056
  replacementBillId: body.replacementBillId,
@@ -1008,7 +1143,7 @@ function useBillLifecycle({
1008
1143
  if (mounted.current) setData(next);
1009
1144
  return next;
1010
1145
  } catch (cause) {
1011
- const nextError = cause instanceof Error ? cause : new Error("MindBill could not complete this request.");
1146
+ const nextError = cause instanceof Error ? cause : new Error("The billing service could not complete this request.");
1012
1147
  if (mounted.current) setError(nextError);
1013
1148
  throw nextError;
1014
1149
  } finally {
@@ -1019,6 +1154,10 @@ function useBillLifecycle({
1019
1154
  (input) => mutate(() => client.saveReview(input)),
1020
1155
  [client, mutate]
1021
1156
  );
1157
+ const searchClaimsAdministrators = useCallback2(
1158
+ (query) => client.searchClaimsAdministrators(query),
1159
+ [client]
1160
+ );
1022
1161
  const submitBill = useCallback2(
1023
1162
  (input, route) => mutate(() => client.submitBill(input, route)),
1024
1163
  [client, mutate]
@@ -1075,6 +1214,7 @@ function useBillLifecycle({
1075
1214
  isRefreshing,
1076
1215
  isMutating,
1077
1216
  refresh,
1217
+ searchClaimsAdministrators,
1078
1218
  saveReview,
1079
1219
  submitBill,
1080
1220
  addAttachment,
@@ -1131,6 +1271,7 @@ function SupportingDocumentControl({
1131
1271
  }
1132
1272
  function ConnectedBillLifecycle({
1133
1273
  appearance,
1274
+ features,
1134
1275
  className,
1135
1276
  style,
1136
1277
  loadingFallback,
@@ -1217,7 +1358,9 @@ function ConnectedBillLifecycle({
1217
1358
  {
1218
1359
  data,
1219
1360
  ...appearance ? { appearance } : {},
1361
+ ...features ? { features } : {},
1220
1362
  disabled: lifecycle.isMutating,
1363
+ onSearchClaimsAdministrators: lifecycle.searchClaimsAdministrators,
1221
1364
  onSave: lifecycle.saveReview,
1222
1365
  onSubmit: async (input, route) => {
1223
1366
  await complete("Bill submitted.", () => lifecycle.submitBill(input, route));
@@ -1250,7 +1393,7 @@ function ConnectedBillLifecycle({
1250
1393
  "Bill #",
1251
1394
  data.bill.billNumber
1252
1395
  ] }),
1253
- /* @__PURE__ */ jsx3("span", { children: lifecycle.isRefreshing ? "Refreshing\u2026" : "MindBill manages this lifecycle." })
1396
+ /* @__PURE__ */ jsx3("span", { children: lifecycle.isRefreshing ? "Refreshing\u2026" : "Status and actions update automatically." })
1254
1397
  ] }),
1255
1398
  /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-toolbar-actions", children: [
1256
1399
  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,
@@ -1284,7 +1427,7 @@ function ConnectedBillLifecycle({
1284
1427
  panel === "correction" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel", children: [
1285
1428
  /* @__PURE__ */ jsxs3("div", { children: [
1286
1429
  /* @__PURE__ */ jsx3("h3", { children: "Correct and resubmit" }),
1287
- /* @__PURE__ */ jsx3("p", { children: "MindBill will create a new correction draft and preserve this rejected bill in history. Review the copied values before submitting." })
1430
+ /* @__PURE__ */ jsx3("p", { children: "A new correction draft will preserve this rejected bill in history. Review the copied values before submitting." })
1288
1431
  ] }),
1289
1432
  /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-panel-actions", children: [
1290
1433
  /* @__PURE__ */ jsx3("button", { type: "button", className: "mb-lifecycle-button secondary", onClick: () => setPanel(""), children: "Cancel" }),
@@ -1294,7 +1437,7 @@ function ConnectedBillLifecycle({
1294
1437
  panel === "second_review" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel wide", children: [
1295
1438
  /* @__PURE__ */ jsxs3("div", { children: [
1296
1439
  /* @__PURE__ */ jsx3("h3", { children: "Submit Second Review" }),
1297
- /* @__PURE__ */ jsx3("p", { children: "State why payment is disputed, confirm the payer control number, and choose the supporting documents MindBill should send." })
1440
+ /* @__PURE__ */ jsx3("p", { children: "State why payment is disputed, confirm the payer control number, and choose the supporting documents to send." })
1298
1441
  ] }),
1299
1442
  /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-fields two", children: [
1300
1443
  /* @__PURE__ */ jsxs3("label", { children: [
@@ -1351,7 +1494,7 @@ function ConnectedBillLifecycle({
1351
1494
  panel === "payment" ? /* @__PURE__ */ jsxs3("section", { className: "mb-lifecycle-panel", children: [
1352
1495
  /* @__PURE__ */ jsxs3("div", { children: [
1353
1496
  /* @__PURE__ */ jsx3("h3", { children: "Post payment" }),
1354
- /* @__PURE__ */ jsx3("p", { children: "Record funds shown on the EOR. MindBill updates the balance and closes the bill automatically when configured." })
1497
+ /* @__PURE__ */ jsx3("p", { children: "Record funds shown on the EOR. The balance updates and the bill closes automatically when configured." })
1355
1498
  ] }),
1356
1499
  /* @__PURE__ */ jsxs3("div", { className: "mb-lifecycle-fields two", children: [
1357
1500
  /* @__PURE__ */ jsxs3("label", { children: [
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/native-bill-review.tsx","../src/connected-bill-status.tsx","../src/connected-bill-lifecycle.tsx"],"sourcesContent":["\"use client\";\n\nimport \"@mindbill/embed\";\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { createElement, useEffect, useRef } from \"react\";\nimport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport type MindBillWidgetProps = {\n sessionToken: string;\n embedUrl: string;\n appearance?: MindBillAppearance;\n className?: string;\n style?: CSSProperties;\n onMindBill?: (event: CustomEvent<MindBillEventDetail>) => void;\n onMindBillError?: (event: CustomEvent<MindBillErrorDetail>) => void;\n};\n\nfunction widget(tagName: string, props: MindBillWidgetProps): ReactElement {\n const ref = useRef<HTMLElement | null>(null);\n const { onMindBill, onMindBillError } = props;\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const handleEvent = (event: Event) =>\n onMindBill?.(event as CustomEvent<MindBillEventDetail>);\n const handleError = (event: Event) =>\n onMindBillError?.(event as CustomEvent<MindBillErrorDetail>);\n element.addEventListener(\"mindbill\", handleEvent);\n element.addEventListener(\"mindbill-error\", handleError);\n return () => {\n element.removeEventListener(\"mindbill\", handleEvent);\n element.removeEventListener(\"mindbill-error\", handleError);\n };\n }, [onMindBill, onMindBillError]);\n\n return createElement(tagName, {\n ref,\n \"session-token\": props.sessionToken,\n \"embed-url\": props.embedUrl,\n theme: props.appearance?.theme,\n \"accent-color\": props.appearance?.accentColor,\n \"background-color\": props.appearance?.backgroundColor,\n \"surface-color\": props.appearance?.surfaceColor,\n \"text-color\": props.appearance?.textColor,\n \"muted-color\": props.appearance?.mutedColor,\n \"border-color\": props.appearance?.borderColor,\n \"font-family\": props.appearance?.fontFamily,\n \"border-radius\": props.appearance?.borderRadius,\n locale: props.appearance?.locale,\n class: props.className,\n style: props.style,\n });\n}\n\nexport function MindBillBillTimeline(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-timeline\", props);\n}\nexport function MindBillBillReview(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-review\", props);\n}\nexport function MindBillBillFromReport(\n props: MindBillWidgetProps,\n): ReactElement {\n return widget(\"mindbill-bill-from-report\", props);\n}\nexport function MindBillCollections(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-collections\", props);\n}\nexport function MindBillOnboarding(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-onboarding\", props);\n}\n\nexport const HostedBillTimeline = MindBillBillTimeline;\nexport const HostedBillReview = MindBillBillReview;\nexport const HostedBillFromReport = MindBillBillFromReport;\nexport const HostedCollections = MindBillCollections;\nexport const HostedOnboarding = MindBillOnboarding;\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n} from \"./native-bill-review\";\nexport type {\n BillReviewAttachment,\n BillReviewBillingProvider,\n BillReviewClinician,\n BillReviewData,\n BillReviewDocumentType,\n BillReviewDraft,\n BillReviewFormProps,\n BillReviewLineItem,\n BillReviewLocation,\n BillReviewSaveInput,\n BillStatusSummaryProps,\n BillStatusAction,\n BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillEorDocument,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n SubmitSecondReviewInput,\n UseBillLifecycleOptions,\n UseBillLifecycleResult,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillStatusClient,\n BillStatusClientOptions,\n BillStatusData,\n BillStatusSession,\n BillStatusSessionProvider,\n BillStatusSessionRequest,\n ConnectedBillStatusProps,\n UseBillStatusOptions,\n UseBillStatusResult,\n} from \"./connected-bill-status\";\n","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\nimport type { CSSProperties, FormEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useState } from \"react\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n id?: string;\n name: string;\n taxId: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n id?: string;\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n id?: string;\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n};\n\nexport type BillReviewAttachment = {\n id: string;\n filename: string;\n description?: string | null;\n documentType: string;\n reportType?: string | null;\n source?: string;\n addedAt?: string;\n contentUrl?: string;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n placeOfServiceId?: string;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n renderingProviderId?: string;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: { name: string; dob?: string };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n claimsAdminId?: string;\n };\n options?: {\n billingProviders?: BillReviewBillingProvider[];\n renderingProviders?: BillReviewClinician[];\n locations?: BillReviewLocation[];\n };\n};\n\nexport type BillReviewSaveInput = {\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n billingProvider?: Omit<BillReviewBillingProvider, \"id\">;\n renderingProviderId?: string;\n renderingProvider?: Omit<BillReviewClinician, \"id\">;\n placeOfServiceId?: string;\n placeOfService?: Omit<BillReviewLocation, \"id\">;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n onSave: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<void>;\n onAddAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<void>;\n onRemoveAttachment: (attachmentId: string) => Promise<void>;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillAppearance;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n dos: string;\n dosEnd: string;\n authorizationNumber: string;\n billingProvider: BillReviewBillingProvider;\n clinician: BillReviewClinician;\n location: BillReviewLocation;\n lineItems: BillReviewLineItem[];\n};\n\nconst EMPTY_BILLING_PROVIDER: BillReviewBillingProvider = {\n name: \"\",\n taxId: \"\",\n npi: \"\",\n billType: \"Professional\",\n};\nconst EMPTY_CLINICIAN: BillReviewClinician = {\n name: \"\",\n specialty: \"\",\n npi: \"\",\n};\nconst EMPTY_LOCATION: BillReviewLocation = {\n name: \"\",\n street: \"\",\n city: \"\",\n state: \"\",\n zip: \"\",\n posCode: \"11\",\n};\n\nconst DOCUMENT_LABELS: Record<BillReviewDocumentType, string> = {\n final_report: \"Final medical-legal report\",\n letter_of_attestation: \"Letter of attestation\",\n proof_of_service: \"Proof of service\",\n form_122: \"DWC Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\",\n w9: \"W-9\",\n medical_records: \"Medical records\",\n appeal: \"Appeal or review support\",\n other: \"Other supporting document\",\n};\n\nfunction withoutId<T extends { id?: string }>(value: T): Omit<T, \"id\"> {\n const result = { ...value };\n delete result.id;\n return result;\n}\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n return {\n dos: data.bill.dos || \"\",\n dosEnd: data.bill.dosEnd || \"\",\n authorizationNumber: data.bill.authorizationNumber || \"\",\n billingProvider: {\n ...EMPTY_BILLING_PROVIDER,\n ...(snapshot?.billingProvider ?? {}),\n },\n clinician: { ...EMPTY_CLINICIAN, ...(snapshot?.renderingProvider ?? {}) },\n location: { ...EMPTY_LOCATION, ...(snapshot?.placeOfService ?? {}) },\n lineItems: data.bill.lineItems.map((line) => ({ ...line })),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return {\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n ...(draft.billingProvider.id\n ? { billingProviderId: draft.billingProvider.id }\n : {}),\n billingProvider: withoutId(draft.billingProvider),\n ...(draft.clinician.id\n ? { renderingProviderId: draft.clinician.id }\n : {}),\n renderingProvider: withoutId(draft.clinician),\n ...(draft.location.id ? { placeOfServiceId: draft.location.id } : {}),\n placeOfService: withoutId(draft.location),\n lineItems: draft.lineItems.map(({ id, code, modifiers, units }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n })),\n };\n}\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor\n ? { \"--mb-accent\": appearance.accentColor }\n : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor\n ? { \"--mb-muted\": appearance.mutedColor }\n : {}),\n ...(appearance?.borderColor\n ? { \"--mb-border\": appearance.borderColor }\n : {}),\n ...(appearance?.backgroundColor\n ? { \"--mb-soft\": appearance.backgroundColor }\n : {}),\n ...(appearance?.surfaceColor\n ? { \"--mb-surface\": appearance.surfaceColor }\n : {}),\n ...(appearance?.fontFamily\n ? { \"--mb-font\": appearance.fontFamily }\n : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n}): ReactElement {\n return (\n <label className=\"mb-native-field\">\n <span>\n {label} {optional ? <small>Optional</small> : null}\n </span>\n <input\n type={type}\n value={value}\n required={required}\n onChange={(event) => onChange(event.target.value)}\n />\n </label>\n );\n}\n\nexport function BillReviewForm({\n data,\n onSave,\n onSubmit,\n onAddAttachment,\n onRemoveAttachment,\n onOpenAttachment,\n className,\n style,\n appearance,\n disabled = false,\n}: BillReviewFormProps): ReactElement {\n const [draft, setDraft] = useState(() => toDraft(data));\n const [route, setRoute] = useState<BillSubmissionRoute>(\"ebill\");\n const [file, setFile] = useState<File | null>(null);\n const [documentType, setDocumentType] =\n useState<BillReviewDocumentType>(\"other\");\n const [busy, setBusy] = useState<\"save\" | \"submit\" | \"attachment\" | \"\">(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const routeName = useId();\n const editable = data.bill.status === \"incomplete\" && !disabled;\n\n useEffect(() => setDraft(toDraft(data)), [data]);\n\n const canSubmit = useMemo(\n () =>\n Boolean(\n draft.dos &&\n draft.billingProvider.name.trim() &&\n draft.billingProvider.taxId.trim() &&\n draft.billingProvider.npi.trim() &&\n draft.clinician.name.trim() &&\n draft.clinician.npi.trim() &&\n draft.location.name.trim() &&\n draft.location.street.trim() &&\n draft.location.city.trim() &&\n draft.location.state.trim() &&\n draft.location.zip.trim() &&\n draft.lineItems.length &&\n draft.lineItems.every((line) => line.code.trim() && line.units > 0),\n ),\n [draft],\n );\n\n const updateBillingProvider = <K extends keyof BillReviewBillingProvider>(\n key: K,\n value: BillReviewBillingProvider[K],\n ) =>\n setDraft((current) => ({\n ...current,\n billingProvider: { ...current.billingProvider, [key]: value },\n }));\n const updateClinician = <K extends keyof BillReviewClinician>(\n key: K,\n value: BillReviewClinician[K],\n ) =>\n setDraft((current) => ({\n ...current,\n clinician: { ...current.clinician, [key]: value },\n }));\n const updateLocation = <K extends keyof BillReviewLocation>(\n key: K,\n value: BillReviewLocation[K],\n ) =>\n setDraft((current) => ({\n ...current,\n location: { ...current.location, [key]: value },\n }));\n\n async function run(action: \"save\" | \"submit\", task: () => Promise<void>) {\n setBusy(action);\n setError(\"\");\n setNotice(\"\");\n try {\n await task();\n setNotice(action === \"save\" ? \"Changes saved.\" : \"Bill submitted.\");\n } catch (cause) {\n setError(\n cause instanceof Error ? cause.message : \"MindBill could not complete this request.\",\n );\n } finally {\n setBusy(\"\");\n }\n }\n\n const handleSave = (event: FormEvent) => {\n event.preventDefault();\n void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const handleSubmit = () =>\n run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), route));\n\n const attach = async () => {\n if (!file) return;\n setBusy(\"attachment\");\n setError(\"\");\n try {\n await onAddAttachment(file, documentType, DOCUMENT_LABELS[documentType]);\n setFile(null);\n setDocumentType(\"other\");\n setNotice(\"Document added to the payer packet.\");\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Document could not be attached.\");\n } finally {\n setBusy(\"\");\n }\n };\n\n const sectionClass = \"mb-native-section\";\n return (\n <form\n className={[\"mb-native-review\", className].filter(Boolean).join(\" \")}\n style={appearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <header className=\"mb-native-heading\">\n <div>\n <span className=\"mb-native-eyebrow\">Billing review</span>\n <h2>Bill #{data.bill.billNumber}</h2>\n <p>Review the prefilled claim and payer packet, then submit.</p>\n </div>\n <div className=\"mb-native-total\">\n <span>{data.bill.status}</span>\n <strong>{money(data.bill.totalCharge)}</strong>\n </div>\n </header>\n\n <dl className=\"mb-native-summary\">\n <div><dt>Patient</dt><dd>{data.patient.name || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{data.injury.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{data.injury.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{data.injury.doi || \"—\"}</dd></div>\n </dl>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Claim and service</h3><p>These values print on the bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Date of service\" type=\"date\" required value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n <Field label=\"End date\" type=\"date\" optional value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} />\n <Field label=\"Authorization number\" optional value={draft.authorizationNumber} onChange={(authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber }))} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Billing practice</h3><p>Payee identity and billing address for this claim.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <Field label=\"Tax ID\" required value={draft.billingProvider.taxId} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Group NPI\" required value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required value={draft.billingProvider.billingCity || \"\"} onChange={(value) => updateBillingProvider(\"billingCity\", value)} />\n <Field label=\"State\" required value={draft.billingProvider.billingState || \"\"} onChange={(value) => updateBillingProvider(\"billingState\", value)} />\n <Field label=\"ZIP\" required value={draft.billingProvider.billingZip || \"\"} onChange={(value) => updateBillingProvider(\"billingZip\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Clinician</h3><p>Provider identity printed on the claim.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional value={draft.clinician.licenseNumber || \"\"} onChange={(value) => updateClinician(\"licenseNumber\", value)} />\n <Field label=\"License state\" optional value={draft.clinician.licenseState || \"\"} onChange={(value) => updateClinician(\"licenseState\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service location</h3><p>The exact place of service for this bill.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required value={draft.location.city} onChange={(value) => updateLocation(\"city\", value)} />\n <Field label=\"State\" required value={draft.location.state} onChange={(value) => updateLocation(\"state\", value)} />\n <Field label=\"ZIP\" required value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required value={draft.location.posCode || \"11\"} onChange={(value) => updateLocation(\"posCode\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Procedure lines</h3><p>MindBill recalculates the allowed amount when changes are saved.</p></div><button type=\"button\" className=\"mb-native-button quiet\" disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: [...current.lineItems, { code: \"\", modifiers: [], units: 1, charge: 0 }] }))}>+ Add line</button></div>\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className=\"mb-native-line\" key={line.id || index}>\n <Field label=\"Procedure\" required value={line.code} onChange={(value) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code: value } : item) }))} />\n <Field label=\"Modifiers\" value={line.modifiers.join(\", \")} onChange={(value) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: value.split(\",\").map((part) => part.trim()).filter(Boolean) } : item) }))} />\n <label className=\"mb-native-field\"><span>Units</span><input type=\"number\" min=\"1\" required value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item) }))} /></label>\n <div className=\"mb-native-allowed\"><span>Allowed</span><strong>{money(line.charge)}</strong></div>\n <button type=\"button\" className=\"mb-native-remove\" aria-label={`Remove ${line.code || \"procedure\"}`} disabled={!editable || draft.lineItems.length === 1} onClick={() => setDraft((current) => ({ ...current, lineItems: current.lineItems.filter((_, itemIndex) => itemIndex !== index) }))}>×</button>\n </div>\n ))}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Payer billing packet</h3><p>Review exactly what will be sent with this bill.</p></div><span>{data.bill.attachments.length} files</span></div>\n <div className=\"mb-native-note\"><strong>Separate from attorney report service.</strong> Final reports, proof of service, and required billing forms may be preselected. Medical records are never silently attached.</div>\n <ul className=\"mb-native-documents\">\n {data.bill.attachments.map((attachment) => (\n <li key={attachment.id}>\n <span className=\"mb-native-file\">PDF</span>\n <div><strong>{attachment.filename}</strong><span>{DOCUMENT_LABELS[attachment.documentType as BillReviewDocumentType] || attachment.description || \"Supporting document\"}</span></div>\n {onOpenAttachment ? <button type=\"button\" className=\"mb-native-button quiet\" onClick={() => onOpenAttachment(attachment)}>View</button> : null}\n <button type=\"button\" className=\"mb-native-remove\" disabled={!editable || busy === \"attachment\"} aria-label={`Remove ${attachment.filename}`} onClick={() => void onRemoveAttachment(attachment.id).catch((cause) => setError(cause instanceof Error ? cause.message : \"Document could not be removed.\"))}>×</button>\n </li>\n ))}\n </ul>\n <div className=\"mb-native-attach\">\n <div><strong>Add supporting PDF</strong><span>Choose any additional document intentionally. Up to 25 MB.</span></div>\n <select aria-label=\"Document type\" value={documentType} disabled={!editable} onChange={(event) => setDocumentType(event.target.value as BillReviewDocumentType)}>{Object.entries(DOCUMENT_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={!editable} onChange={(event) => setFile(event.target.files?.[0] || null)} />\n <button className=\"mb-native-button secondary\" type=\"button\" disabled={!editable || !file || busy === \"attachment\"} onClick={() => void attach()}>{busy === \"attachment\" ? \"Attaching…\" : \"Attach document\"}</button>\n </div>\n </section>\n\n <section className=\"mb-native-submit\">\n <div><span className=\"mb-native-eyebrow\">Delivery</span><h3>Submit this bill</h3><p>MindBill will send the claim and own status, payment, denial, and resubmission.</p></div>\n <fieldset><legend>Send via</legend>{([\"ebill\", \"fax\", \"mail\", \"email\"] as const).map((value) => <label key={value}><input type=\"radio\" name={routeName} value={value} checked={route === value} onChange={() => setRoute(value)} />{value === \"ebill\" ? \"E-bill\" : value.charAt(0).toUpperCase() + value.slice(1)}</label>)}</fieldset>\n {error ? <div className=\"mb-native-message error\" role=\"alert\">{error}</div> : null}\n {notice ? <div className=\"mb-native-message success\" role=\"status\">{notice}</div> : null}\n <div className=\"mb-native-actions\">\n <button className=\"mb-native-button secondary\" type=\"submit\" disabled={!editable || busy !== \"\"}>{busy === \"save\" ? \"Saving…\" : \"Save changes\"}</button>\n <button className=\"mb-native-button primary\" type=\"button\" disabled={!editable || !canSubmit || busy !== \"\"} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button>\n </div>\n </section>\n </form>\n );\n}\n\nexport type BillStatusSummaryProps = {\n status: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n actions?: BillStatusAction[];\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillAppearance;\n};\n\nexport type BillStatusAction = {\n id: string;\n label: string;\n onClick: () => void;\n primary?: boolean;\n disabled?: boolean;\n};\n\nexport function BillStatusSummary({ status, submittedAt, agingDays, updatedAt, totalCharge, totalPaid, balanceDue, actions = [], className, style, appearance }: BillStatusSummaryProps): ReactElement {\n return <section className={[\"mb-native-status\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <div className=\"mb-native-status-copy\"><span className=\"mb-native-eyebrow\">Bill status</span><h3>{status.replaceAll(\"_\", \" \")}</h3><p>{submittedAt ? `Submitted ${new Date(submittedAt).toLocaleDateString()}` : \"Not submitted\"}{agingDays == null ? \"\" : ` · ${agingDays} day${agingDays === 1 ? \"\" : \"s\"} old`}{updatedAt ? ` · Updated ${new Date(updatedAt).toLocaleDateString()}` : \"\"}</p></div>\n <dl><div><dt>Charged</dt><dd>{money(totalCharge)}</dd></div><div><dt>Paid</dt><dd>{money(totalPaid)}</dd></div><div><dt>Balance</dt><dd>{money(balanceDue)}</dd></div></dl>\n {actions.length ? <div className=\"mb-native-status-actions\">{actions.map((action) => <button key={action.id} type=\"button\" className={`mb-native-button ${action.primary ? \"primary\" : \"secondary\"}`} disabled={action.disabled} onClick={action.onClick}>{action.label}</button>)}</div> : null}\n </section>;\n}\n\nconst NATIVE_BILL_REVIEW_STYLES = `\n.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review,.mb-native-status{--mb-accent:#238dbd;--mb-accent-dark:#176f98;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;color:var(--mb-text);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}.mb-native-review *,.mb-native-status *{box-sizing:border-box}.mb-native-review{display:grid;gap:16px}.mb-native-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:6px 2px}.mb-native-heading h2,.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{margin:3px 0 2px;line-height:1.2}.mb-native-heading h2{font-size:25px}.mb-native-heading p,.mb-native-section p,.mb-native-submit p,.mb-native-status p{margin:0;color:var(--mb-muted)}.mb-native-eyebrow{color:#59727d;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.mb-native-total{display:flex;align-items:center;gap:18px}.mb-native-total span,.mb-native-section-head>span{border-radius:999px;background:var(--mb-soft);color:#58717c;font-size:11px;font-weight:800;padding:6px 10px;text-transform:capitalize}.mb-native-total strong{font-size:24px}.mb-native-summary{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);overflow:hidden}.mb-native-summary div{padding:17px 20px;border-right:1px solid var(--mb-border)}.mb-native-summary div:last-child{border:0}.mb-native-summary dt,.mb-native-allowed span{color:#647982;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mb-native-summary dd{margin:5px 0 0;font-weight:750}.mb-native-section{padding:20px;border:1px solid var(--mb-border);border-radius:14px;background:var(--mb-surface);box-shadow:0 8px 24px rgba(28,58,72,.04)}.mb-native-section-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:17px}.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{font-size:19px}.mb-native-grid{display:grid;gap:14px}.mb-native-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.mb-native-field{display:grid;gap:6px;min-width:0;color:var(--mb-text);font-size:12px;font-weight:750}.mb-native-field small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-native-field input,.mb-native-attach select,.mb-native-attach input{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}.mb-native-field input:focus,.mb-native-attach select:focus,.mb-native-attach input:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}.mb-native-lines{display:grid;gap:10px}.mb-native-line{display:grid;grid-template-columns:1.1fr 1.1fr 110px 120px 28px;align-items:end;gap:12px;padding:13px;background:var(--mb-soft);border:1px solid #e3edf0;border-radius:10px}.mb-native-allowed{display:grid;gap:5px;padding:0 8px 11px;text-align:right}.mb-native-allowed strong{font-size:16px}.mb-native-remove{border:0;background:transparent;color:#667d86;cursor:pointer;font-size:20px;padding:7px}.mb-native-note{padding:13px 15px;border:1px solid #bdd9e4;border-radius:9px;background:#f2f9fc;color:#526d78}.mb-native-note strong{color:var(--mb-text);margin-right:12px}.mb-native-documents{list-style:none;margin:14px 0;padding:0}.mb-native-documents li{display:grid;grid-template-columns:42px 1fr auto 28px;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--mb-border)}.mb-native-documents li>div{display:grid}.mb-native-documents li span{color:var(--mb-muted);font-size:12px}.mb-native-file{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#eaf5f9;color:var(--mb-accent)!important;font-size:11px!important;font-weight:850}.mb-native-attach{display:grid;grid-template-columns:1fr 230px minmax(220px,1fr) auto;align-items:end;gap:12px;padding:15px;border-radius:10px;background:var(--mb-soft)}.mb-native-attach>div{display:grid;gap:3px}.mb-native-attach span{color:var(--mb-muted);font-size:12px}.mb-native-button{min-height:40px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-native-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-button.primary:hover{background:var(--mb-accent-dark)}.mb-native-button.secondary{background:#fff}.mb-native-button.quiet{min-height:auto;background:var(--mb-soft);padding:7px 11px}.mb-native-button:disabled,.mb-native-remove:disabled{cursor:not-allowed;opacity:.5}.mb-native-submit{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;padding:22px;border:1px solid #bcd8e2;border-radius:14px;background:linear-gradient(135deg,#f3fafc,#eaf6fa)}.mb-native-submit fieldset{display:flex;gap:6px;margin:0;padding:0;border:0}.mb-native-submit legend{position:absolute;width:1px;height:1px;overflow:hidden}.mb-native-submit fieldset label{display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #c9dce3;border-radius:8px;background:#fff;font-weight:700}.mb-native-actions{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1}.mb-native-message{grid-column:1/-1;padding:10px 12px;border-radius:8px}.mb-native-message.error{background:#fff0ef;color:#9d3029}.mb-native-message.success{background:#edf9f2;color:#217449}.mb-native-status{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px;border:1px solid var(--mb-border);border-radius:12px;background:#fff}.mb-native-status h3{text-transform:capitalize}.mb-native-status dl{display:flex;margin:0}.mb-native-status dl div{min-width:110px;padding:0 18px;border-left:1px solid var(--mb-border)}.mb-native-status dt{color:var(--mb-muted);font-size:11px}.mb-native-status dd{margin:4px 0 0;font-size:17px;font-weight:800}@media(max-width:900px){.mb-native-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-summary{grid-template-columns:repeat(2,1fr)}.mb-native-summary div:nth-child(2){border-right:0}.mb-native-summary div:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mb-native-line{grid-template-columns:1fr 1fr 90px}.mb-native-allowed{align-self:center}.mb-native-attach{grid-template-columns:1fr 1fr}.mb-native-submit{grid-template-columns:1fr}.mb-native-submit fieldset,.mb-native-actions{grid-column:1}.mb-native-actions{justify-content:start}}@media(max-width:620px){.mb-native-heading,.mb-native-total,.mb-native-status{align-items:start;flex-direction:column}.mb-native-grid.three,.mb-native-summary,.mb-native-line,.mb-native-attach{grid-template-columns:1fr}.mb-native-summary div,.mb-native-summary div:nth-child(2){border-right:0;border-bottom:1px solid var(--mb-border)}.mb-native-line{align-items:stretch}.mb-native-allowed{text-align:left}.mb-native-submit fieldset{display:grid;grid-template-columns:1fr 1fr}.mb-native-status dl{width:100%}.mb-native-status dl div{min-width:0;flex:1;padding:0 10px}.mb-native-status dl div:first-child{padding-left:0;border-left:0}}\n.mb-native-status-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.mb-native-status-copy{min-width:150px}.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n`;\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillStatusSummary,\n type BillStatusSummaryProps,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/status-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillStatusData = {\n billId: string;\n state: string;\n nativeStatus: string;\n submittedAt: string | null;\n agingDays: number | null;\n updatedAt: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillStatusSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillStatusSessionRequest = {\n billId: string;\n signal: AbortSignal;\n};\n\nexport type BillStatusSessionProvider = (\n request: BillStatusSessionRequest,\n) => Promise<BillStatusSession>;\n\nexport type BillStatusClientOptions = {\n billId: string;\n /** Same-origin route that mints a short-lived, bill-scoped browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for non-HTTP session exchange. */\n getSession?: BillStatusSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillStatusClient = {\n getStatus: (signal?: AbortSignal) => Promise<BillStatusData>;\n clearSession: () => void;\n};\n\nexport type UseBillStatusOptions = BillStatusClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillStatusData | null;\n};\n\nexport type UseBillStatusResult = {\n data: BillStatusData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n refresh: () => Promise<void>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillStatusSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillStatusSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeStatus(value: unknown, billId: string): BillStatusData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n const status = value as Partial<BillStatusData>;\n const amounts = [status.totalCharge, status.totalPaid, status.balanceDue];\n if (\n typeof status.state !== \"string\"\n || amounts.some(\n (amount) => typeof amount !== \"number\" || !Number.isFinite(amount),\n )\n ) {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n return {\n billId: typeof status.billId === \"string\" ? status.billId : billId,\n state: status.state,\n nativeStatus: typeof status.nativeStatus === \"string\"\n ? status.nativeStatus\n : status.state,\n submittedAt: typeof status.submittedAt === \"string\"\n ? status.submittedAt\n : null,\n agingDays: typeof status.agingDays === \"number\" ? status.agingDays : null,\n updatedAt: typeof status.updatedAt === \"string\" ? status.updatedAt : null,\n totalCharge: status.totalCharge as number,\n totalPaid: status.totalPaid as number,\n balanceDue: status.balanceDue as number,\n };\n}\n\n/**\n * Browser-safe status client used by useBillStatus. It exchanges the user's\n * authenticated same-origin session for a short-lived MindBill token, then\n * reads status directly from MindBill. It never accepts a Partner API key.\n */\nexport function createBillStatusClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillStatusClientOptions): BillStatusClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillStatusSession | null = null;\n let sessionRequest: Promise<BillStatusSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillStatusSession> => {\n if (!force && isSessionFresh(session)) return session as BillStatusSession;\n if (!force && sessionRequest) return sessionRequest;\n\n const pending = getSession\n ? getSession({ billId, signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"MindBill browser session could not be created.\",\n );\n }\n return response.json();\n });\n\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const requestStatus = async (\n browserSession: BillStatusSession,\n signal: AbortSignal,\n ): Promise<Response> => {\n const baseUrl = (browserSession.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${baseUrl}/embed/api/bill-timeline`, {\n headers: { authorization: `Bearer ${browserSession.token}` },\n signal,\n });\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n async getStatus(providedSignal) {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n let response = await requestStatus(browserSession, signal);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await requestStatus(browserSession, signal);\n }\n if (!response.ok) {\n throw await responseError(response, \"Bill status could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeStatus(body.data, billId);\n },\n };\n}\n\nexport function useBillStatus({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n fetch: fetchOverride,\n}: UseBillStatusOptions): UseBillStatusResult {\n const client = useMemo(() => createBillStatusClient({\n billId,\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n apiBaseUrl,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n const [data, setData] = useState<BillStatusData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const dataRef = useRef<BillStatusData | null>(initialData);\n const initialDataRef = useRef<BillStatusData | null>(initialData);\n initialDataRef.current = initialData;\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestSequence = useRef(0);\n\n useEffect(() => {\n const seed = initialDataRef.current;\n dataRef.current = seed;\n setData(seed);\n setError(null);\n setIsLoading(enabled && !seed);\n activeControllerRef.current?.abort();\n return () => activeControllerRef.current?.abort();\n }, [client, enabled]);\n\n const load = useCallback(async () => {\n if (!enabled || !billId) return;\n const sequence = ++requestSequence.current;\n activeControllerRef.current?.abort();\n const controller = new AbortController();\n activeControllerRef.current = controller;\n if (dataRef.current) setIsRefreshing(true);\n else setIsLoading(true);\n setError(null);\n\n try {\n const nextData = await client.getStatus(controller.signal);\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n dataRef.current = nextData;\n setData(nextData);\n }\n } catch (cause) {\n if (controller.signal.aborted) return;\n if (sequence === requestSequence.current) {\n setError(\n cause instanceof Error\n ? cause\n : new Error(\"Bill status could not be loaded.\"),\n );\n }\n } finally {\n if (activeControllerRef.current === controller) {\n activeControllerRef.current = null;\n }\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [billId, client, enabled]);\n\n useEffect(() => {\n if (enabled) void load();\n }, [enabled, load]);\n\n useEffect(() => {\n if (!enabled || refreshInterval <= 0) return;\n const timer = window.setInterval(() => void load(), refreshInterval);\n const onFocus = () => void load();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") void load();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.clearInterval(timer);\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, [enabled, load, refreshInterval]);\n\n return { data, error, isLoading, isRefreshing, refresh: load };\n}\n\nexport type ConnectedBillStatusProps = UseBillStatusOptions & {\n actions?: BillStatusSummaryProps[\"actions\"];\n appearance?: BillStatusSummaryProps[\"appearance\"];\n className?: string;\n style?: BillStatusSummaryProps[\"style\"];\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n};\n\nexport function ConnectedBillStatus({\n actions,\n appearance,\n className,\n style,\n loadingFallback,\n errorFallback,\n ...options\n}: ConnectedBillStatusProps): ReactElement | null {\n const status = useBillStatus(options);\n if (status.isLoading && !status.data) {\n return <>{loadingFallback ?? <div role=\"status\">Loading bill status…</div>}</>;\n }\n if (status.error && !status.data) {\n return <>{errorFallback?.(status.error, status.refresh) ?? (\n <div role=\"alert\">\n {status.error.message}{\" \"}\n <button type=\"button\" onClick={() => void status.refresh()}>Retry</button>\n </div>\n )}</>;\n }\n if (!status.data) return null;\n return <BillStatusSummary\n status={status.data.state}\n submittedAt={status.data.submittedAt}\n agingDays={status.data.agingDays}\n updatedAt={status.data.updatedAt}\n totalCharge={status.data.totalCharge}\n totalPaid={status.data.totalPaid}\n balanceDue={status.data.balanceDue}\n {...(actions ? { actions } : {})}\n {...(appearance ? { appearance } : {})}\n {...(className ? { className } : {})}\n {...(style ? { style } : {})}\n />;\n}\n","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillReviewForm,\n BillStatusSummary,\n type BillReviewAttachment,\n type BillReviewData,\n type BillReviewDocumentType,\n type BillReviewSaveInput,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/bill-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillLifecycleActionId =\n | \"edit_and_submit\"\n | \"correct_and_resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\";\n\nexport type BillLifecycleAction = {\n id: BillLifecycleActionId;\n label: string;\n enabled: boolean;\n primary?: boolean;\n reason?: string;\n};\n\nexport type BillEorDocument = {\n id: string;\n filename: string;\n description: string | null;\n addedAt: string;\n contentUrl: string;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n lifecycle: {\n state: string;\n nativeStatus: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n actions: BillLifecycleAction[];\n };\n eors: BillEorDocument[];\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n billId: string;\n component: \"bill-review\";\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n method: \"check\" | \"eft\";\n checkNumber?: string;\n depositDate: string;\n note?: string;\n};\nexport type SubmitSecondReviewInput = {\n reason: string;\n payerClaimControlNumber: string;\n disputedAmount: number | undefined;\n attachmentIds: string[];\n route: BillSubmissionRoute;\n};\n\nexport type BillLifecycleClientOptions = {\n billId: string;\n /** Same-origin server route that mints a short-lived, bill-scoped session. */\n sessionEndpoint?: string | undefined;\n /** Advanced escape hatch for a custom session exchange. */\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\nexport type BillLifecycleClient = {\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;\n submitBill: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<BillLifecycleData>;\n addAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<BillLifecycleData>;\n removeAttachment: (attachmentId: string) => Promise<BillLifecycleData>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (\n input: SubmitSecondReviewInput,\n ) => Promise<BillLifecycleData>;\n startCorrection: () => Promise<{\n replacementBillId: string;\n data: BillLifecycleData;\n }>;\n clearSession: () => void;\n};\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\n onBillIdChange?: (\n billId: string,\n previousBillId: string,\n ) => void | Promise<void>;\n};\n\nexport type UseBillLifecycleResult = {\n billId: string;\n data: BillLifecycleData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n isMutating: boolean;\n refresh: () => Promise<void>;\n saveReview: BillLifecycleClient[\"saveReview\"];\n submitBill: BillLifecycleClient[\"submitBill\"];\n addAttachment: BillLifecycleClient[\"addAttachment\"];\n removeAttachment: BillLifecycleClient[\"removeAttachment\"];\n openAttachment: (attachment: BillReviewAttachment) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n startCorrection: () => Promise<BillLifecycleData>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; message?: unknown; error?: unknown }).detail\n ?? (body as { message?: unknown }).message\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillLifecycleSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillLifecycleSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\n \"The MindBill session endpoint did not return a browser session token.\",\n );\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeLifecycle(value: unknown): BillLifecycleData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"MindBill returned an invalid bill lifecycle.\");\n }\n const data = value as Partial<BillLifecycleData>;\n if (\n !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n ) {\n throw new Error(\"MindBill returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for the complete bill lifecycle. The only long-lived\n * secret remains on the partner server; this client uses a short-lived,\n * origin-bound session scoped to one bill.\n */\nexport function createBillLifecycleClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillLifecycleClientOptions): BillLifecycleClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ billId, component: \"bill-review\", signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId, component: \"bill-review\" }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"MindBill browser session could not be created.\",\n );\n }\n return response.json();\n });\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const request = async (\n path: string,\n init: RequestInit = {},\n providedSignal?: AbortSignal,\n ): Promise<Response> => {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${current.token}`);\n return fetcher(`${base}${path}`, { ...init, headers, signal });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await perform(browserSession);\n }\n return response;\n };\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(\"/embed/api/bill-lifecycle\", {}, signal);\n if (!response.ok) {\n throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const mutation = async (\n path: string,\n init: RequestInit,\n fallback: string,\n ) => {\n const headers = new Headers(init.headers);\n headers.set(\"idempotency-key\", idempotencyKey());\n const response = await request(path, { ...init, headers });\n if (!response.ok) throw await responseError(response, fallback);\n return response;\n };\n\n const action = async (\n input: Record<string, unknown>,\n fallback: string,\n ): Promise<BillLifecycleData> => {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n fallback,\n );\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const saveReview = async (\n input: BillReviewSaveInput,\n ): Promise<BillLifecycleData> => {\n await mutation(\n \"/embed/api/bill-review\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n \"Bill changes could not be saved.\",\n );\n return loadLifecycle();\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n getLifecycle: loadLifecycle,\n saveReview,\n async submitBill(input, route) {\n await saveReview(input);\n await mutation(\n \"/embed/api/bill-review/submit\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ route }),\n },\n \"Bill could not be submitted.\",\n );\n return loadLifecycle();\n },\n async addAttachment(file, documentType, description) {\n const body = new FormData();\n body.set(\"file\", file);\n body.set(\"documentType\", documentType);\n if (description) body.set(\"description\", description);\n await mutation(\n \"/embed/api/bill-review/attachments\",\n { method: \"POST\", body },\n \"Document could not be attached.\",\n );\n return loadLifecycle();\n },\n async removeAttachment(attachmentId) {\n await mutation(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n { method: \"DELETE\" },\n \"Document could not be removed.\",\n );\n return loadLifecycle();\n },\n async getAttachment(attachmentId) {\n const response = await request(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n );\n if (!response.ok) {\n throw await responseError(response, \"Document could not be opened.\");\n }\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(\n `/embed/api/bill-lifecycle/eor/${encodeURIComponent(documentId)}`,\n );\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n closeBill(input) {\n return action({ action: \"close\", ...input }, \"Bill could not be closed.\");\n },\n postPayment(input) {\n return action(\n { action: \"post_payment\", ...input, checkNumber: input.checkNumber ?? \"\" },\n \"Payment could not be posted.\",\n );\n },\n submitSecondReview(input) {\n return action(\n { action: \"second_review\", ...input },\n \"Second Review could not be submitted.\",\n );\n },\n async startCorrection() {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ action: \"start_correction\" }),\n },\n \"Correction draft could not be created.\",\n );\n const body = await response.json() as {\n replacementBillId?: unknown;\n data?: unknown;\n };\n if (typeof body.replacementBillId !== \"string\") {\n throw new Error(\"MindBill did not return the correction bill ID.\");\n }\n return {\n replacementBillId: body.replacementBillId,\n data: normalizeLifecycle(body.data),\n };\n },\n };\n}\n\nfunction openPdf(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.download = filename;\n link.click();\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nexport function useBillLifecycle({\n billId: providedBillId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n onBillIdChange,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [billId, setBillId] = useState(providedBillId);\n const [data, setData] = useState<BillLifecycleData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n\n useEffect(() => {\n setBillId(providedBillId);\n setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n billId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n client.clearSession();\n };\n }, [client]);\n\n const refresh = useCallback(async () => {\n if (!enabled) return;\n setIsRefreshing(true);\n try {\n const next = await client.getLifecycle();\n if (!mounted.current) return;\n setData(next);\n setError(null);\n } catch (cause) {\n if (!mounted.current) return;\n setError(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n } finally {\n if (mounted.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [client, enabled]);\n\n useEffect(() => {\n if (!enabled) return;\n void refresh();\n const interval = refreshInterval > 0\n ? window.setInterval(() => void refresh(), refreshInterval)\n : null;\n const onFocus = () => void refresh();\n window.addEventListener(\"focus\", onFocus);\n return () => {\n if (interval) window.clearInterval(interval);\n window.removeEventListener(\"focus\", onFocus);\n };\n }, [enabled, refresh, refreshInterval]);\n\n const mutate = useCallback(async <T extends BillLifecycleData,>(\n task: () => Promise<T>,\n ): Promise<T> => {\n setIsMutating(true);\n setError(null);\n try {\n const next = await task();\n if (mounted.current) setData(next);\n return next;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"MindBill could not complete this request.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally {\n if (mounted.current) setIsMutating(false);\n }\n }, []);\n\n const saveReview = useCallback(\n (input: BillReviewSaveInput) => mutate(() => client.saveReview(input)),\n [client, mutate],\n );\n const submitBill = useCallback(\n (input: BillReviewSaveInput, route: BillSubmissionRoute) =>\n mutate(() => client.submitBill(input, route)),\n [client, mutate],\n );\n const addAttachment = useCallback(\n (file: File, type: BillReviewDocumentType, description?: string) =>\n mutate(() => client.addAttachment(file, type, description)),\n [client, mutate],\n );\n const removeAttachment = useCallback(\n (attachmentId: string) => mutate(() => client.removeAttachment(attachmentId)),\n [client, mutate],\n );\n const closeBill = useCallback(\n (input: CloseBillInput) => mutate(() => client.closeBill(input)),\n [client, mutate],\n );\n const postPayment = useCallback(\n (input: PostBillPaymentInput) => mutate(() => client.postPayment(input)),\n [client, mutate],\n );\n const submitSecondReview = useCallback(\n (input: SubmitSecondReviewInput) =>\n mutate(() => client.submitSecondReview(input)),\n [client, mutate],\n );\n const startCorrection = useCallback(async () => {\n setIsMutating(true);\n setError(null);\n try {\n const result = await client.startCorrection();\n const previousBillId = billId;\n await onBillIdChange?.(result.replacementBillId, previousBillId);\n setBillId(result.replacementBillId);\n setData(result.data);\n return result.data;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"Correction draft could not be created.\");\n setError(nextError);\n throw nextError;\n } finally {\n setIsMutating(false);\n }\n }, [billId, client, onBillIdChange]);\n const openAttachment = useCallback(async (attachment: BillReviewAttachment) => {\n openPdf(await client.getAttachment(attachment.id), attachment.filename);\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n openPdf(await client.getEor(document.id), document.filename);\n }, [client]);\n\n return {\n billId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n saveReview,\n submitBill,\n addAttachment,\n removeAttachment,\n openAttachment,\n openEor,\n closeBill,\n postPayment,\n submitSecondReview,\n startCorrection,\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillAppearance;\n className?: string;\n style?: CSSProperties;\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n onChanged?: (data: BillLifecycleData) => void;\n};\n\ntype Panel = \"\" | \"correction\" | \"second_review\" | \"payment\" | \"close\";\n\nfunction dateInputValue(): string {\n const now = new Date();\n const offset = now.getTimezoneOffset() * 60_000;\n return new Date(now.getTime() - offset).toISOString().slice(0, 10);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor ? { \"--mb-accent\": appearance.accentColor } : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor ? { \"--mb-muted\": appearance.mutedColor } : {}),\n ...(appearance?.borderColor ? { \"--mb-border\": appearance.borderColor } : {}),\n ...(appearance?.backgroundColor ? { \"--mb-soft\": appearance.backgroundColor } : {}),\n ...(appearance?.surfaceColor ? { \"--mb-surface\": appearance.surfaceColor } : {}),\n ...(appearance?.fontFamily ? { \"--mb-font\": appearance.fontFamily } : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction SupportingDocumentControl({\n disabled,\n onAdd,\n}: {\n disabled: boolean;\n onAdd: (\n file: File,\n type: BillReviewDocumentType,\n description?: string,\n ) => Promise<unknown>;\n}): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [type, setType] = useState<BillReviewDocumentType>(\"appeal\");\n const [busy, setBusy] = useState(false);\n return <div className=\"mb-lifecycle-upload\">\n <select aria-label=\"Supporting document type\" value={type} disabled={disabled || busy} onChange={(event) => setType(event.target.value as BillReviewDocumentType)}>\n <option value=\"appeal\">Second Review support</option>\n <option value=\"final_report\">Final report</option>\n <option value=\"proof_of_service\">Proof of service</option>\n <option value=\"letter_of_attestation\">Letter of attestation</option>\n <option value=\"form_122\">DWC Form 122</option>\n <option value=\"w9\">W-9</option>\n <option value=\"other\">Other supporting document</option>\n </select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={disabled || busy} onChange={(event) => setFile(event.target.files?.[0] ?? null)} />\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={disabled || busy || !file} onClick={() => {\n if (!file) return;\n setBusy(true);\n void onAdd(file, type)\n .then(() => setFile(null))\n .catch(() => undefined)\n .finally(() => setBusy(false));\n }}>{busy ? \"Attaching…\" : \"Attach PDF\"}</button>\n </div>;\n}\n\nexport function ConnectedBillLifecycle({\n appearance,\n className,\n style,\n loadingFallback,\n errorFallback,\n onChanged,\n ...options\n}: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [closeReason, setCloseReason] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({\n amount: 0,\n method: \"check\",\n checkNumber: \"\",\n depositDate: dateInputValue(),\n note: \"\",\n });\n const [review, setReview] = useState<SubmitSecondReviewInput>({\n reason: \"\",\n payerClaimControlNumber: \"\",\n disputedAmount: undefined,\n attachmentIds: [],\n route: \"ebill\",\n });\n const lastData = useRef<BillLifecycleData | null>(null);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 ? current.amount : data.bill.balanceDue,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length\n ? current.attachmentIds.filter((id) => data.bill.attachments.some((doc) => doc.id === id))\n : data.bill.attachments.map((doc) => doc.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) {\n return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading billing…</div>}</>;\n }\n if (!data) {\n const error = lifecycle.error ?? new Error(\"Bill could not be loaded.\");\n return <>{errorFallback?.(error, lifecycle.refresh) ?? <div className=\"mb-lifecycle-error\" role=\"alert\"><strong>Billing is unavailable.</strong><span>{error.message}</span><button type=\"button\" onClick={() => void lifecycle.refresh()}>Try again</button></div>}</>;\n }\n\n const actionMap = new Map(data.lifecycle.actions.map((action) => [action.id, action]));\n const has = (id: BillLifecycleActionId) => actionMap.get(id);\n const selectPanel = (next: Panel) => {\n setNotice(\"\");\n setPanel((current) => current === next ? \"\" : next);\n };\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setNotice(message);\n } catch {\n // The hook keeps the actionable error visible in this component.\n }\n };\n const actionButtons = data.lifecycle.actions\n .filter((action) => action.id !== \"edit_and_submit\" && action.id !== \"view_eor\" && action.id !== \"independent_bill_review\")\n .map((action) => ({\n ...action,\n onClick: () => {\n if (!action.enabled) return;\n if (action.id === \"correct_and_resubmit\") selectPanel(\"correction\");\n if (action.id === \"second_review\") selectPanel(\"second_review\");\n if (action.id === \"post_payment\") selectPanel(\"payment\");\n if (action.id === \"close\") selectPanel(\"close\");\n },\n disabled: !action.enabled || lifecycle.isMutating,\n }));\n\n const canEditAndSubmit = Boolean(has(\"edit_and_submit\"));\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {canEditAndSubmit\n ? <BillReviewForm\n data={data}\n {...(appearance ? { appearance } : {})}\n disabled={lifecycle.isMutating}\n onSave={lifecycle.saveReview}\n onSubmit={async (input, route) => { await complete(\"Bill submitted.\", () => lifecycle.submitBill(input, route)); }}\n onAddAttachment={async (file, type, description) => { await lifecycle.addAttachment(file, type, description); }}\n onRemoveAttachment={async (attachmentId) => { await lifecycle.removeAttachment(attachmentId); }}\n onOpenAttachment={(attachment) => void lifecycle.openAttachment(attachment).catch(() => undefined)}\n />\n : <BillStatusSummary\n status={data.lifecycle.state}\n submittedAt={data.lifecycle.submittedAt ?? null}\n agingDays={data.lifecycle.agingDays ?? null}\n updatedAt={data.lifecycle.updatedAt ?? null}\n totalCharge={data.bill.totalCharge}\n totalPaid={data.bill.totalPaid}\n balanceDue={data.bill.balanceDue}\n actions={actionButtons}\n {...(appearance ? { appearance } : {})}\n />}\n\n <div className=\"mb-lifecycle-toolbar\">\n <div>\n <strong>Bill #{data.bill.billNumber}</strong>\n <span>{lifecycle.isRefreshing ? \"Refreshing…\" : \"MindBill manages this lifecycle.\"}</span>\n </div>\n <div className=\"mb-lifecycle-toolbar-actions\">\n {has(\"view_eor\") ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: \"smooth\", block: \"center\" })}>View EOR</button> : null}\n {canEditAndSubmit && has(\"close\") ? <button type=\"button\" className=\"mb-lifecycle-button quiet\" onClick={() => selectPanel(\"close\")}>Close bill</button> : null}\n </div>\n </div>\n\n {data.eors.length ? <section className=\"mb-lifecycle-card\" id={`mb-eors-${data.bill.id}`}>\n <header><div><h3>Explanation of Review</h3><p>Review the payer response and original PDF before posting payment.</p></div><span>{data.eors.length} PDF{data.eors.length === 1 ? \"\" : \"s\"}</span></header>\n <ul className=\"mb-lifecycle-documents\">{data.eors.map((eor) => <li key={eor.id}><div><strong>{eor.filename}</strong><span>{eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}`}</span></div><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(eor).catch(() => undefined)}>View PDF</button></li>)}</ul>\n </section> : null}\n\n {has(\"independent_bill_review\") ? <div className=\"mb-lifecycle-info\"><strong>{has(\"independent_bill_review\")?.label}</strong><span>{has(\"independent_bill_review\")?.reason}</span></div> : null}\n\n {panel === \"correction\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Correct and resubmit</h3><p>MindBill will create a new correction draft and preserve this rejected bill in history. Review the copied values before submitting.</p></div>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void complete(\"Correction draft created.\", lifecycle.startCorrection)}>{lifecycle.isMutating ? \"Creating…\" : \"Create correction draft\"}</button></div>\n </section> : null}\n\n {panel === \"second_review\" ? <section className=\"mb-lifecycle-panel wide\">\n <div><h3>Submit Second Review</h3><p>State why payment is disputed, confirm the payer control number, and choose the supporting documents MindBill should send.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Reason for Second Review</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label>\n <div className=\"mb-lifecycle-fields\">\n <label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label>\n <label><span>Disputed amount</span><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) : undefined }))} /></label>\n <label><span>Send via</span><select value={review.route} onChange={(event) => setReview((current) => ({ ...current, route: event.target.value as BillSubmissionRoute }))}><option value=\"ebill\">E-bill</option><option value=\"fax\">Fax</option><option value=\"mail\">Mail</option><option value=\"email\">Email</option></select></label>\n </div>\n </div>\n <fieldset className=\"mb-lifecycle-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label key={attachment.id}><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) }))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button type=\"button\" onClick={() => void lifecycle.openAttachment(attachment).catch(() => undefined)}>View</button><button type=\"button\" aria-label={`Remove ${attachment.filename}`} onClick={() => void lifecycle.removeAttachment(attachment.id).catch(() => undefined)}>×</button></label>)}</fieldset>\n <SupportingDocumentControl disabled={lifecycle.isMutating} onAdd={async (file, type, description) => {\n const next = await lifecycle.addAttachment(file, type, description);\n setReview((current) => ({\n ...current,\n attachmentIds: Array.from(new Set([\n ...current.attachmentIds,\n ...next.bill.attachments.map((attachment) => attachment.id),\n ])),\n }));\n }} />\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><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))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div>\n </section> : null}\n\n {panel === \"payment\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Post payment</h3><p>Record funds shown on the EOR. MindBill updates the balance and closes the bill automatically when configured.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Amount</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" required value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label>\n <label><span>Method</span><select value={payment.method} onChange={(event) => setPayment((current) => ({ ...current, method: event.target.value as \"check\" | \"eft\" }))}><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label>\n <label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label>\n <label><span>Deposit date</span><input type=\"date\" required value={payment.depositDate} onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label>\n <label className=\"full\"><span>Note <small>Optional</small></span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label>\n </div>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><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))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div>\n </section> : null}\n\n {panel === \"close\" ? <section className=\"mb-lifecycle-panel danger\">\n <div><h3>Close bill</h3><p>Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved.</p></div>\n <label><span>Reason for closing</span><textarea required value={closeReason} onChange={(event) => setCloseReason(event.target.value)} /></label>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button danger\" disabled={lifecycle.isMutating || !closeReason.trim()} onClick={() => void complete(\"Bill closed.\", () => lifecycle.closeBill({ reason: closeReason }))}>{lifecycle.isMutating ? \"Closing…\" : \"Close bill\"}</button></div>\n </section> : null}\n\n {notice ? <div className=\"mb-lifecycle-message success\" role=\"status\">{notice}</div> : null}\n {lifecycle.error ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{lifecycle.error.message}</div> : null}\n </section>;\n}\n\nconst CONNECTED_LIFECYCLE_STYLES = `\n.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}}\n`;\n"],"mappings":";;;AAEA,OAAO;AAEP,SAAS,eAAe,aAAAA,YAAW,UAAAC,eAAc;;;ACAjD,SAAS,WAAW,OAAO,SAAS,gBAAgB;AAwS9C,SACsB,KADtB;AApIN,IAAM,yBAAoD;AAAA,EACxD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,UAAU;AACZ;AACA,IAAM,kBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,WAAW;AAAA,EACX,KAAK;AACP;AACA,IAAM,iBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AACX;AAEA,IAAM,kBAA0D;AAAA,EAC9D,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,wBAAwB;AAAA,EACxB,IAAI;AAAA,EACJ,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,SAAS,UAAqC,OAAyB;AACrE,QAAM,SAAS,EAAE,GAAG,MAAM;AAC1B,SAAO,OAAO;AACd,SAAO;AACT;AAEA,SAAS,QAAQ,MAAuC;AACtD,QAAM,WAAW,KAAK,KAAK;AAC3B,SAAO;AAAA,IACL,KAAK,KAAK,KAAK,OAAO;AAAA,IACtB,QAAQ,KAAK,KAAK,UAAU;AAAA,IAC5B,qBAAqB,KAAK,KAAK,uBAAuB;AAAA,IACtD,iBAAiB;AAAA,MACf,GAAG;AAAA,MACH,GAAI,UAAU,mBAAmB,CAAC;AAAA,IACpC;AAAA,IACA,WAAW,EAAE,GAAG,iBAAiB,GAAI,UAAU,qBAAqB,CAAC,EAAG;AAAA,IACxE,UAAU,EAAE,GAAG,gBAAgB,GAAI,UAAU,kBAAkB,CAAC,EAAG;AAAA,IACnE,WAAW,KAAK,KAAK,UAAU,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,EAAE;AAAA,EAC5D;AACF;AAEO,SAAS,yBACd,OACqB;AACrB,SAAO;AAAA,IACL,KAAK,MAAM;AAAA,IACX,QAAQ,MAAM,UAAU;AAAA,IACxB,qBAAqB,MAAM,oBAAoB,KAAK,KAAK;AAAA,IACzD,GAAI,MAAM,gBAAgB,KACtB,EAAE,mBAAmB,MAAM,gBAAgB,GAAG,IAC9C,CAAC;AAAA,IACL,iBAAiB,UAAU,MAAM,eAAe;AAAA,IAChD,GAAI,MAAM,UAAU,KAChB,EAAE,qBAAqB,MAAM,UAAU,GAAG,IAC1C,CAAC;AAAA,IACL,mBAAmB,UAAU,MAAM,SAAS;AAAA,IAC5C,GAAI,MAAM,SAAS,KAAK,EAAE,kBAAkB,MAAM,SAAS,GAAG,IAAI,CAAC;AAAA,IACnE,gBAAgB,UAAU,MAAM,QAAQ;AAAA,IACxC,WAAW,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,MAAM,WAAW,MAAM,OAAO;AAAA,MAClE,GAAI,KAAK,EAAE,GAAG,IAAI,CAAC;AAAA,MACnB,MAAM,KAAK,KAAK,EAAE,YAAY;AAAA,MAC9B;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,MAAM,OAAuB;AACpC,SAAO,IAAI,KAAK,aAAa,SAAS;AAAA,IACpC,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC,EAAE,OAAO,KAAK;AACjB;AAEA,SAAS,gBACP,YACA,OACe;AACf,SAAO;AAAA,IACL,GAAI,YAAY,cACZ,EAAE,eAAe,WAAW,YAAY,IACxC,CAAC;AAAA,IACL,GAAI,YAAY,YAAY,EAAE,aAAa,WAAW,UAAU,IAAI,CAAC;AAAA,IACrE,GAAI,YAAY,aACZ,EAAE,cAAc,WAAW,WAAW,IACtC,CAAC;AAAA,IACL,GAAI,YAAY,cACZ,EAAE,eAAe,WAAW,YAAY,IACxC,CAAC;AAAA,IACL,GAAI,YAAY,kBACZ,EAAE,aAAa,WAAW,gBAAgB,IAC1C,CAAC;AAAA,IACL,GAAI,YAAY,eACZ,EAAE,gBAAgB,WAAW,aAAa,IAC1C,CAAC;AAAA,IACL,GAAI,YAAY,aACZ,EAAE,aAAa,WAAW,WAAW,IACrC,CAAC;AAAA,IACL,GAAG;AAAA,EACL;AACF;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAOiB;AACf,SACE,qBAAC,WAAM,WAAU,mBACf;AAAA,yBAAC,UACE;AAAA;AAAA,MAAM;AAAA,MAAE,WAAW,oBAAC,WAAM,sBAAQ,IAAW;AAAA,OAChD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA;AAAA,IAClD;AAAA,KACF;AAEJ;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAsC;AACpC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,MAAM,QAAQ,IAAI,CAAC;AACtD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA8B,OAAO;AAC/D,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAClD,QAAM,CAAC,cAAc,eAAe,IAClC,SAAiC,OAAO;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgD,EAAE;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,YAAY,MAAM;AACxB,QAAM,WAAW,KAAK,KAAK,WAAW,gBAAgB,CAAC;AAEvD,YAAU,MAAM,SAAS,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAE/C,QAAM,YAAY;AAAA,IAChB,MACE;AAAA,MACE,MAAM,OACJ,MAAM,gBAAgB,KAAK,KAAK,KAChC,MAAM,gBAAgB,MAAM,KAAK,KACjC,MAAM,gBAAgB,IAAI,KAAK,KAC/B,MAAM,UAAU,KAAK,KAAK,KAC1B,MAAM,UAAU,IAAI,KAAK,KACzB,MAAM,SAAS,KAAK,KAAK,KACzB,MAAM,SAAS,OAAO,KAAK,KAC3B,MAAM,SAAS,KAAK,KAAK,KACzB,MAAM,SAAS,MAAM,KAAK,KAC1B,MAAM,SAAS,IAAI,KAAK,KACxB,MAAM,UAAU,UAChB,MAAM,UAAU,MAAM,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,QAAQ,CAAC;AAAA,IACtE;AAAA,IACF,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,wBAAwB,CAC5B,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,iBAAiB,EAAE,GAAG,QAAQ,iBAAiB,CAAC,GAAG,GAAG,MAAM;AAAA,EAC9D,EAAE;AACJ,QAAM,kBAAkB,CACtB,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,WAAW,EAAE,GAAG,QAAQ,WAAW,CAAC,GAAG,GAAG,MAAM;AAAA,EAClD,EAAE;AACJ,QAAM,iBAAiB,CACrB,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,UAAU,EAAE,GAAG,QAAQ,UAAU,CAAC,GAAG,GAAG,MAAM;AAAA,EAChD,EAAE;AAEJ,iBAAe,IAAI,QAA2B,MAA2B;AACvE,YAAQ,MAAM;AACd,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,KAAK;AACX,gBAAU,WAAW,SAAS,mBAAmB,iBAAiB;AAAA,IACpE,SAAS,OAAO;AACd;AAAA,QACE,iBAAiB,QAAQ,MAAM,UAAU;AAAA,MAC3C;AAAA,IACF,UAAE;AACA,cAAQ,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,UAAqB;AACvC,UAAM,eAAe;AACrB,SAAK,IAAI,QAAQ,YAAY;AAC3B,YAAM,UAAU,MAAM,OAAO,yBAAyB,KAAK,CAAC;AAC5D,UAAI,QAAS,UAAS,QAAQ,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,MACnB,IAAI,UAAU,MAAM,SAAS,yBAAyB,KAAK,GAAG,KAAK,CAAC;AAEtE,QAAM,SAAS,YAAY;AACzB,QAAI,CAAC,KAAM;AACX,YAAQ,YAAY;AACpB,aAAS,EAAE;AACX,QAAI;AACF,YAAM,gBAAgB,MAAM,cAAc,gBAAgB,YAAY,CAAC;AACvE,cAAQ,IAAI;AACZ,sBAAgB,OAAO;AACvB,gBAAU,qCAAqC;AAAA,IACjD,SAAS,OAAO;AACd,eAAS,iBAAiB,QAAQ,MAAM,UAAU,iCAAiC;AAAA,IACrF,UAAE;AACA,cAAQ,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,eAAe;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACnE,OAAO,gBAAgB,YAAY,KAAK;AAAA,MACxC,UAAU;AAAA,MAEV;AAAA,4BAAC,WAAO,qCAA0B;AAAA,QAClC,qBAAC,YAAO,WAAU,qBAChB;AAAA,+BAAC,SACC;AAAA,gCAAC,UAAK,WAAU,qBAAoB,4BAAc;AAAA,YAClD,qBAAC,QAAG;AAAA;AAAA,cAAO,KAAK,KAAK;AAAA,eAAW;AAAA,YAChC,oBAAC,OAAE,uEAAyD;AAAA,aAC9D;AAAA,UACA,qBAAC,SAAI,WAAU,mBACb;AAAA,gCAAC,UAAM,eAAK,KAAK,QAAO;AAAA,YACxB,oBAAC,YAAQ,gBAAM,KAAK,KAAK,WAAW,GAAE;AAAA,aACxC;AAAA,WACF;AAAA,QAEA,qBAAC,QAAG,WAAU,qBACZ;AAAA,+BAAC,SAAI;AAAA,gCAAC,QAAG,qBAAO;AAAA,YAAK,oBAAC,QAAI,eAAK,QAAQ,QAAQ,UAAI;AAAA,aAAK;AAAA,UACxD,qBAAC,SAAI;AAAA,gCAAC,QAAG,mBAAK;AAAA,YAAK,oBAAC,QAAI,eAAK,OAAO,eAAe,UAAI;AAAA,aAAK;AAAA,UAC5D,qBAAC,SAAI;AAAA,gCAAC,QAAG,sBAAQ;AAAA,YAAK,oBAAC,QAAI,eAAK,OAAO,YAAY,UAAI;AAAA,aAAK;AAAA,UAC5D,qBAAC,SAAI;AAAA,gCAAC,QAAG,4BAAc;AAAA,YAAK,oBAAC,QAAI,eAAK,OAAO,OAAO,UAAI;AAAA,aAAK;AAAA,WAC/D;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,+BAAiB;AAAA,YAAK,oBAAC,OAAE,6CAA+B;AAAA,aAAI,GAAM;AAAA,UACnH,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,mBAAkB,MAAK,QAAO,UAAQ,MAAC,OAAO,MAAM,KAAK,UAAU,CAAC,QAAQ,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,GAAG;AAAA,YACvI,oBAAC,SAAM,OAAM,YAAW,MAAK,QAAO,UAAQ,MAAC,OAAO,MAAM,QAAQ,UAAU,CAAC,WAAW,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG;AAAA,YACzI,oBAAC,SAAM,OAAM,wBAAuB,UAAQ,MAAC,OAAO,MAAM,qBAAqB,UAAU,CAAC,wBAAwB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,oBAAoB,EAAE,GAAG;AAAA,aAClL;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,+BAAC,SAAI,WAAU,0BAAyB;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,8BAAgB;AAAA,cAAK,oBAAC,OAAE,gEAAkD;AAAA,eAAI;AAAA,YAAM,oBAAC,UAAK,uBAAS;AAAA,aAAO;AAAA,UAC3J,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,OAAO,MAAM,gBAAgB,MAAM,UAAU,CAAC,UAAU,sBAAsB,QAAQ,KAAK,GAAG;AAAA,YACpI,oBAAC,SAAM,OAAM,UAAS,UAAQ,MAAC,OAAO,MAAM,gBAAgB,OAAO,UAAU,CAAC,UAAU,sBAAsB,SAAS,KAAK,GAAG;AAAA,YAC/H,oBAAC,SAAM,OAAM,aAAY,UAAQ,MAAC,OAAO,MAAM,gBAAgB,KAAK,UAAU,CAAC,UAAU,sBAAsB,OAAO,KAAK,GAAG;AAAA,YAC9H,oBAAC,SAAM,OAAM,SAAQ,UAAQ,MAAC,OAAO,MAAM,gBAAgB,SAAS,IAAI,UAAU,CAAC,UAAU,sBAAsB,SAAS,KAAK,GAAG;AAAA,YACpI,oBAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,OAAO,MAAM,gBAAgB,iBAAiB,IAAI,UAAU,CAAC,UAAU,sBAAsB,iBAAiB,KAAK,GAAG;AAAA,YAC7J,oBAAC,SAAM,OAAM,QAAO,UAAQ,MAAC,OAAO,MAAM,gBAAgB,eAAe,IAAI,UAAU,CAAC,UAAU,sBAAsB,eAAe,KAAK,GAAG;AAAA,YAC/I,oBAAC,SAAM,OAAM,SAAQ,UAAQ,MAAC,OAAO,MAAM,gBAAgB,gBAAgB,IAAI,UAAU,CAAC,UAAU,sBAAsB,gBAAgB,KAAK,GAAG;AAAA,YAClJ,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,OAAO,MAAM,gBAAgB,cAAc,IAAI,UAAU,CAAC,UAAU,sBAAsB,cAAc,KAAK,GAAG;AAAA,aAC9I;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,+BAAC,SAAI,WAAU,0BAAyB;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,uBAAS;AAAA,cAAK,oBAAC,OAAE,qDAAuC;AAAA,eAAI;AAAA,YAAM,oBAAC,UAAK,uBAAS;AAAA,aAAO;AAAA,UACzI,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,OAAO,MAAM,UAAU,MAAM,UAAU,CAAC,UAAU,gBAAgB,QAAQ,KAAK,GAAG;AAAA,YACzH,oBAAC,SAAM,OAAM,aAAY,OAAO,MAAM,UAAU,WAAW,UAAU,CAAC,UAAU,gBAAgB,aAAa,KAAK,GAAG;AAAA,YACrH,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,OAAO,MAAM,UAAU,KAAK,UAAU,CAAC,UAAU,gBAAgB,OAAO,KAAK,GAAG;AAAA,YAC5G,oBAAC,SAAM,OAAM,YAAW,UAAQ,MAAC,OAAO,MAAM,UAAU,YAAY,IAAI,UAAU,CAAC,UAAU,gBAAgB,YAAY,KAAK,GAAG;AAAA,YACjI,oBAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,OAAO,MAAM,UAAU,iBAAiB,IAAI,UAAU,CAAC,UAAU,gBAAgB,iBAAiB,KAAK,GAAG;AAAA,YACjJ,oBAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,OAAO,MAAM,UAAU,gBAAgB,IAAI,UAAU,CAAC,UAAU,gBAAgB,gBAAgB,KAAK,GAAG;AAAA,aAChJ;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,+BAAC,SAAI,WAAU,0BAAyB;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,8BAAgB;AAAA,cAAK,oBAAC,OAAE,uDAAyC;AAAA,eAAI;AAAA,YAAM,oBAAC,UAAK,uBAAS;AAAA,aAAO;AAAA,UAClJ,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,OAAO,MAAM,SAAS,MAAM,UAAU,CAAC,UAAU,eAAe,QAAQ,KAAK,GAAG;AAAA,YACtH,oBAAC,SAAM,OAAM,UAAS,UAAQ,MAAC,OAAO,MAAM,SAAS,QAAQ,UAAU,CAAC,UAAU,eAAe,UAAU,KAAK,GAAG;AAAA,YACnH,oBAAC,SAAM,OAAM,QAAO,UAAQ,MAAC,OAAO,MAAM,SAAS,MAAM,UAAU,CAAC,UAAU,eAAe,QAAQ,KAAK,GAAG;AAAA,YAC7G,oBAAC,SAAM,OAAM,SAAQ,UAAQ,MAAC,OAAO,MAAM,SAAS,OAAO,UAAU,CAAC,UAAU,eAAe,SAAS,KAAK,GAAG;AAAA,YAChH,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,OAAO,MAAM,SAAS,KAAK,UAAU,CAAC,UAAU,eAAe,OAAO,KAAK,GAAG;AAAA,YAC1G,oBAAC,SAAM,OAAM,yBAAwB,UAAQ,MAAC,OAAO,MAAM,SAAS,WAAW,MAAM,UAAU,CAAC,UAAU,eAAe,WAAW,KAAK,GAAG;AAAA,aAC9I;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,+BAAC,SAAI,WAAU,0BAAyB;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,6BAAe;AAAA,cAAK,oBAAC,OAAE,8EAAgE;AAAA,eAAI;AAAA,YAAM,oBAAC,YAAO,MAAK,UAAS,WAAU,0BAAyB,UAAU,CAAC,UAAU,SAAS,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,CAAC,GAAG,QAAQ,WAAW,EAAE,MAAM,IAAI,WAAW,CAAC,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,wBAAU;AAAA,aAAS;AAAA,UAChY,oBAAC,SAAI,WAAU,mBACZ,gBAAM,UAAU,IAAI,CAAC,MAAM,UAC1B,qBAAC,SAAI,WAAU,kBACb;AAAA,gCAAC,SAAM,OAAM,aAAY,UAAQ,MAAC,OAAO,KAAK,MAAM,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,MAAM,MAAM,IAAI,IAAI,EAAE,EAAE,GAAG;AAAA,YAChO,oBAAC,SAAM,OAAM,aAAY,OAAO,KAAK,UAAU,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,WAAW,MAAM,MAAM,GAAG,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG;AAAA,YAClS,qBAAC,WAAM,WAAU,mBAAkB;AAAA,kCAAC,UAAK,mBAAK;AAAA,cAAO,oBAAC,WAAM,MAAK,UAAS,KAAI,KAAI,UAAQ,MAAC,OAAO,KAAK,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,GAAG;AAAA,eAAE;AAAA,YAClT,qBAAC,SAAI,WAAU,qBAAoB;AAAA,kCAAC,UAAK,qBAAO;AAAA,cAAO,oBAAC,YAAQ,gBAAM,KAAK,MAAM,GAAE;AAAA,eAAS;AAAA,YAC5F,oBAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,cAAY,UAAU,KAAK,QAAQ,WAAW,IAAI,UAAU,CAAC,YAAY,MAAM,UAAU,WAAW,GAAG,SAAS,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,QAAQ,UAAU,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,EAAE,EAAE,GAAG,kBAAC;AAAA,eAL5P,KAAK,MAAM,KAMhD,CACD,GACH;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,+BAAC,SAAI,WAAU,0BAAyB;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,kCAAoB;AAAA,cAAK,oBAAC,OAAE,8DAAgD;AAAA,eAAI;AAAA,YAAM,qBAAC,UAAM;AAAA,mBAAK,KAAK,YAAY;AAAA,cAAO;AAAA,eAAM;AAAA,aAAO;AAAA,UACxL,qBAAC,SAAI,WAAU,kBAAiB;AAAA,gCAAC,YAAO,oDAAsC;AAAA,YAAS;AAAA,aAA6H;AAAA,UACpN,oBAAC,QAAG,WAAU,uBACX,eAAK,KAAK,YAAY,IAAI,CAAC,eAC1B,qBAAC,QACC;AAAA,gCAAC,UAAK,WAAU,kBAAiB,iBAAG;AAAA,YACpC,qBAAC,SAAI;AAAA,kCAAC,YAAQ,qBAAW,UAAS;AAAA,cAAS,oBAAC,UAAM,0BAAgB,WAAW,YAAsC,KAAK,WAAW,eAAe,uBAAsB;AAAA,eAAO;AAAA,YAC9K,mBAAmB,oBAAC,YAAO,MAAK,UAAS,WAAU,0BAAyB,SAAS,MAAM,iBAAiB,UAAU,GAAG,kBAAI,IAAY;AAAA,YAC1I,oBAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,UAAU,CAAC,YAAY,SAAS,cAAc,cAAY,UAAU,WAAW,QAAQ,IAAI,SAAS,MAAM,KAAK,mBAAmB,WAAW,EAAE,EAAE,MAAM,CAAC,UAAU,SAAS,iBAAiB,QAAQ,MAAM,UAAU,gCAAgC,CAAC,GAAG,kBAAC;AAAA,eAJrS,WAAW,EAKpB,CACD,GACH;AAAA,UACA,qBAAC,SAAI,WAAU,oBACb;AAAA,iCAAC,SAAI;AAAA,kCAAC,YAAO,gCAAkB;AAAA,cAAS,oBAAC,UAAK,wEAA0D;AAAA,eAAO;AAAA,YAC/G,oBAAC,YAAO,cAAW,iBAAgB,OAAO,cAAc,UAAU,CAAC,UAAU,UAAU,CAAC,UAAU,gBAAgB,MAAM,OAAO,KAA+B,GAAI,iBAAO,QAAQ,eAAe,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,oBAAC,YAAmB,OAAe,mBAAtB,KAA4B,CAAS,GAAE;AAAA,YAC9Q,oBAAC,WAAM,cAAW,yBAAwB,MAAK,QAAO,QAAO,wBAAuB,UAAU,CAAC,UAAU,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAAA,YACxK,oBAAC,YAAO,WAAU,8BAA6B,MAAK,UAAS,UAAU,CAAC,YAAY,CAAC,QAAQ,SAAS,cAAc,SAAS,MAAM,KAAK,OAAO,GAAI,mBAAS,eAAe,oBAAe,mBAAkB;AAAA,aAC9M;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAU,oBACjB;AAAA,+BAAC,SAAI;AAAA,gCAAC,UAAK,WAAU,qBAAoB,sBAAQ;AAAA,YAAO,oBAAC,QAAG,8BAAgB;AAAA,YAAK,oBAAC,OAAE,6FAA+E;AAAA,aAAI;AAAA,UACvK,qBAAC,cAAS;AAAA,gCAAC,YAAO,sBAAQ;AAAA,YAAW,CAAC,SAAS,OAAO,QAAQ,OAAO,EAAY,IAAI,CAAC,UAAU,qBAAC,WAAkB;AAAA,kCAAC,WAAM,MAAK,SAAQ,MAAM,WAAW,OAAc,SAAS,UAAU,OAAO,UAAU,MAAM,SAAS,KAAK,GAAG;AAAA,cAAG,UAAU,UAAU,WAAW,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,MAAM,CAAC;AAAA,iBAApM,KAAsM,CAAQ;AAAA,aAAE;AAAA,UAC3T,QAAQ,oBAAC,SAAI,WAAU,2BAA0B,MAAK,SAAS,iBAAM,IAAS;AAAA,UAC9E,SAAS,oBAAC,SAAI,WAAU,6BAA4B,MAAK,UAAU,kBAAO,IAAS;AAAA,UACpF,qBAAC,SAAI,WAAU,qBACb;AAAA,gCAAC,YAAO,WAAU,8BAA6B,MAAK,UAAS,UAAU,CAAC,YAAY,SAAS,IAAK,mBAAS,SAAS,iBAAY,gBAAe;AAAA,YAC/I,oBAAC,YAAO,WAAU,4BAA2B,MAAK,UAAS,UAAU,CAAC,YAAY,CAAC,aAAa,SAAS,IAAI,SAAS,MAAM,KAAK,aAAa,GAAI,mBAAS,WAAW,qBAAgB,eAAc;AAAA,aACtM;AAAA,WACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAwBO,SAAS,kBAAkB,EAAE,QAAQ,aAAa,WAAW,WAAW,aAAa,WAAW,YAAY,UAAU,CAAC,GAAG,WAAW,OAAO,WAAW,GAAyC;AACrM,SAAO,qBAAC,aAAQ,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,gBAAgB,YAAY,KAAK,GAC5H;AAAA,wBAAC,WAAO,qCAA0B;AAAA,IAClC,qBAAC,SAAI,WAAU,yBAAwB;AAAA,0BAAC,UAAK,WAAU,qBAAoB,yBAAW;AAAA,MAAO,oBAAC,QAAI,iBAAO,WAAW,KAAK,GAAG,GAAE;AAAA,MAAK,qBAAC,OAAG;AAAA,sBAAc,aAAa,IAAI,KAAK,WAAW,EAAE,mBAAmB,CAAC,KAAK;AAAA,QAAiB,aAAa,OAAO,KAAK,SAAM,SAAS,OAAO,cAAc,IAAI,KAAK,GAAG;AAAA,QAAQ,YAAY,iBAAc,IAAI,KAAK,SAAS,EAAE,mBAAmB,CAAC,KAAK;AAAA,SAAG;AAAA,OAAI;AAAA,IACjY,qBAAC,QAAG;AAAA,2BAAC,SAAI;AAAA,4BAAC,QAAG,qBAAO;AAAA,QAAK,oBAAC,QAAI,gBAAM,WAAW,GAAE;AAAA,SAAK;AAAA,MAAM,qBAAC,SAAI;AAAA,4BAAC,QAAG,kBAAI;AAAA,QAAK,oBAAC,QAAI,gBAAM,SAAS,GAAE;AAAA,SAAK;AAAA,MAAM,qBAAC,SAAI;AAAA,4BAAC,QAAG,qBAAO;AAAA,QAAK,oBAAC,QAAI,gBAAM,UAAU,GAAE;AAAA,SAAK;AAAA,OAAM;AAAA,IACrK,QAAQ,SAAS,oBAAC,SAAI,WAAU,4BAA4B,kBAAQ,IAAI,CAAC,WAAW,oBAAC,YAAuB,MAAK,UAAS,WAAW,oBAAoB,OAAO,UAAU,YAAY,WAAW,IAAI,UAAU,OAAO,UAAU,SAAS,OAAO,SAAU,iBAAO,SAAhK,OAAO,EAA+J,CAAS,GAAE,IAAS;AAAA,KAC9R;AACF;AAEA,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;;;ACnkBlC;AAAA,EACE;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA;AAAA,EACA,YAAAC;AAAA,OAGK;AAkWI,mBAAsB,OAAAC,MAI3B,QAAAC,aAJK;AA5VX,IAAM,uBAAuB;AAC7B,IAAM,2BAA2B;AACjC,IAAM,2BAA2B;AA0DjC,eAAe,cACb,UACA,UACgB;AAChB,QAAM,OAAgB,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAC5D,QAAM,SAAS,QAAQ,OAAO,SAAS,WAClC,KAA+C,UAC5C,KAA6B,QACjC;AACJ,SAAO,IAAI,MAAM,OAAO,WAAW,WAAW,SAAS,QAAQ;AACjE;AAEA,SAAS,eAAe,SAA4C;AAClE,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,CAAC,QAAQ,UAAW,QAAO;AAC/B,QAAM,YAAY,IAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ;AACtD,SAAO,OAAO,SAAS,SAAS,KAAK,YAAY,KAAK,IAAI,IAAI;AAChE;AAEA,SAAS,iBAAiB,OAAmC;AAC3D,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,QAAM,YAAY;AAOlB,QAAM,SAAS,UAAU,WAAW,UAAU;AAC9C,QAAM,UAAU,UAAU,OAAO,WAAW,WACxC,SACA;AACJ,MAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,MAAM,SAAS,GAAG;AACjE,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,GAAI,OAAO,QAAQ,cAAc,WAC7B,EAAE,WAAW,QAAQ,UAAU,IAC/B,CAAC;AAAA,IACL,GAAI,OAAO,QAAQ,eAAe,WAC9B,EAAE,YAAY,QAAQ,WAAW,IACjC,CAAC;AAAA,EACP;AACF;AAEA,SAAS,gBAAgB,OAAgB,QAAgC;AACvE,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,SAAS;AACf,QAAM,UAAU,CAAC,OAAO,aAAa,OAAO,WAAW,OAAO,UAAU;AACxE,MACE,OAAO,OAAO,UAAU,YACrB,QAAQ;AAAA,IACT,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM;AAAA,EACnE,GACA;AACA,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO;AAAA,IACL,QAAQ,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,IAC5D,OAAO,OAAO;AAAA,IACd,cAAc,OAAO,OAAO,iBAAiB,WACzC,OAAO,eACP,OAAO;AAAA,IACX,aAAa,OAAO,OAAO,gBAAgB,WACvC,OAAO,cACP;AAAA,IACJ,WAAW,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAAA,IACrE,WAAW,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAAA,IACrE,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,EACrB;AACF;AAOO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,EACb,OAAO;AACT,GAA8C;AAC5C,QAAM,UAAU,iBAAiB,WAAW;AAC5C,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,MAAI,UAAoC;AACxC,MAAI,iBAAoD;AAExD,QAAM,cAAc,OAClB,QACA,QAAQ,UACuB;AAC/B,QAAI,CAAC,SAAS,eAAe,OAAO,EAAG,QAAO;AAC9C,QAAI,CAAC,SAAS,eAAgB,QAAO;AAErC,UAAM,UAAU,aACZ,WAAW,EAAE,QAAQ,OAAO,CAAC,IAC7B,QAAQ,iBAAiB;AAAA,MACzB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC;AAAA,MAC/B;AAAA,IACF,CAAC,EAAE,KAAK,OAAO,aAAa;AAC1B,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO,SAAS,KAAK;AAAA,IACvB,CAAC;AAEH,UAAM,UAAU,QAAQ,QAAQ,OAAO,EACpC,KAAK,gBAAgB,EACrB,KAAK,CAAC,gBAAgB;AACrB,gBAAU;AACV,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,mBAAmB,QAAS,kBAAiB;AAAA,IACnD,CAAC;AACH,qBAAiB;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,OACpB,gBACA,WACsB;AACtB,UAAM,WAAW,eAAe,cAAc,YAAY,QAAQ,OAAO,EAAE;AAC3E,WAAO,QAAQ,GAAG,OAAO,4BAA4B;AAAA,MACnD,SAAS,EAAE,eAAe,UAAU,eAAe,KAAK,GAAG;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,eAAe;AACb,gBAAU;AACV,uBAAiB;AAAA,IACnB;AAAA,IACA,MAAM,UAAU,gBAAgB;AAC9B,YAAM,aAAa,iBAAiB,OAAO,IAAI,gBAAgB;AAC/D,YAAM,SAAS,kBAAkB,YAAY;AAC7C,UAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,sCAAsC;AACnE,UAAI,iBAAiB,MAAM,YAAY,MAAM;AAC7C,UAAI,WAAW,MAAM,cAAc,gBAAgB,MAAM;AACzD,UAAI,SAAS,WAAW,KAAK;AAC3B,kBAAU;AACV,yBAAiB,MAAM,YAAY,QAAQ,IAAI;AAC/C,mBAAW,MAAM,cAAc,gBAAgB,MAAM;AAAA,MACvD;AACA,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAM,cAAc,UAAU,kCAAkC;AAAA,MACxE;AACA,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,gBAAgB,KAAK,MAAM,MAAM;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,cAAc;AAAA,EACd,OAAO;AACT,GAA8C;AAC5C,QAAM,SAASC,SAAQ,MAAM,uBAAuB;AAAA,IAClD;AAAA,IACA;AAAA,IACA,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,IACnC;AAAA,IACA,GAAI,gBAAgB,EAAE,OAAO,cAAc,IAAI,CAAC;AAAA,EAClD,CAAC,GAAG,CAAC,YAAY,QAAQ,eAAe,YAAY,eAAe,CAAC;AACpE,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAgC,WAAW;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,WAAW,CAAC,WAAW;AAClE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,UAAU,OAA8B,WAAW;AACzD,QAAM,iBAAiB,OAA8B,WAAW;AAChE,iBAAe,UAAU;AACzB,QAAM,sBAAsB,OAA+B,IAAI;AAC/D,QAAM,kBAAkB,OAAO,CAAC;AAEhC,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,eAAe;AAC5B,YAAQ,UAAU;AAClB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,iBAAa,WAAW,CAAC,IAAI;AAC7B,wBAAoB,SAAS,MAAM;AACnC,WAAO,MAAM,oBAAoB,SAAS,MAAM;AAAA,EAClD,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,OAAO,YAAY,YAAY;AACnC,QAAI,CAAC,WAAW,CAAC,OAAQ;AACzB,UAAM,WAAW,EAAE,gBAAgB;AACnC,wBAAoB,SAAS,MAAM;AACnC,UAAM,aAAa,IAAI,gBAAgB;AACvC,wBAAoB,UAAU;AAC9B,QAAI,QAAQ,QAAS,iBAAgB,IAAI;AAAA,QACpC,cAAa,IAAI;AACtB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,UAAU,WAAW,MAAM;AACzD,UAAI,CAAC,WAAW,OAAO,WAAW,aAAa,gBAAgB,SAAS;AACtE,gBAAQ,UAAU;AAClB,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,SAAS,OAAO;AACd,UAAI,WAAW,OAAO,QAAS;AAC/B,UAAI,aAAa,gBAAgB,SAAS;AACxC;AAAA,UACE,iBAAiB,QACb,QACA,IAAI,MAAM,kCAAkC;AAAA,QAClD;AAAA,MACF;AAAA,IACF,UAAE;AACA,UAAI,oBAAoB,YAAY,YAAY;AAC9C,4BAAoB,UAAU;AAAA,MAChC;AACA,UAAI,CAAC,WAAW,OAAO,WAAW,aAAa,gBAAgB,SAAS;AACtE,qBAAa,KAAK;AAClB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,OAAO,CAAC;AAE5B,EAAAA,WAAU,MAAM;AACd,QAAI,QAAS,MAAK,KAAK;AAAA,EACzB,GAAG,CAAC,SAAS,IAAI,CAAC;AAElB,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,WAAW,mBAAmB,EAAG;AACtC,UAAM,QAAQ,OAAO,YAAY,MAAM,KAAK,KAAK,GAAG,eAAe;AACnE,UAAM,UAAU,MAAM,KAAK,KAAK;AAChC,UAAM,eAAe,MAAM;AACzB,UAAI,SAAS,oBAAoB,UAAW,MAAK,KAAK;AAAA,IACxD;AACA,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,iBAAiB,oBAAoB,YAAY;AAC1D,WAAO,MAAM;AACX,aAAO,cAAc,KAAK;AAC1B,aAAO,oBAAoB,SAAS,OAAO;AAC3C,eAAS,oBAAoB,oBAAoB,YAAY;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,eAAe,CAAC;AAEnC,SAAO,EAAE,MAAM,OAAO,WAAW,cAAc,SAAS,KAAK;AAC/D;AAWO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkD;AAChD,QAAM,SAAS,cAAc,OAAO;AACpC,MAAI,OAAO,aAAa,CAAC,OAAO,MAAM;AACpC,WAAO,gBAAAJ,KAAA,YAAG,6BAAmB,gBAAAA,KAAC,SAAI,MAAK,UAAS,uCAAoB,GAAO;AAAA,EAC7E;AACA,MAAI,OAAO,SAAS,CAAC,OAAO,MAAM;AAChC,WAAO,gBAAAA,KAAA,YAAG,0BAAgB,OAAO,OAAO,OAAO,OAAO,KACpD,gBAAAC,MAAC,SAAI,MAAK,SACP;AAAA,aAAO,MAAM;AAAA,MAAS;AAAA,MACvB,gBAAAD,KAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,OAAO,QAAQ,GAAG,mBAAK;AAAA,OACnE,GACA;AAAA,EACJ;AACA,MAAI,CAAC,OAAO,KAAM,QAAO;AACzB,SAAO,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACN,QAAQ,OAAO,KAAK;AAAA,MACpB,aAAa,OAAO,KAAK;AAAA,MACzB,WAAW,OAAO,KAAK;AAAA,MACvB,WAAW,OAAO,KAAK;AAAA,MACvB,aAAa,OAAO,KAAK;AAAA,MACzB,WAAW,OAAO,KAAK;AAAA,MACvB,YAAY,OAAO,KAAK;AAAA,MACvB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC7B,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,MACnC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MACjC,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA;AAAA,EAC5B;AACF;;;ACjYA;AAAA,EACE,eAAAK;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OAIK;AA+qBH,SAqEO,YAAAC,WApEL,OAAAC,MADF,QAAAC,aAAA;AApqBJ,IAAMC,wBAAuB;AAC7B,IAAMC,4BAA2B;AACjC,IAAMC,4BAA2B;AA0IjC,eAAeC,eACb,UACA,UACgB;AAChB,QAAM,OAAgB,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAC5D,QAAM,SAAS,QAAQ,OAAO,SAAS,WAClC,KAAkE,UAC/D,KAA+B,WAC/B,KAA6B,QACjC;AACJ,SAAO,IAAI,MAAM,OAAO,WAAW,WAAW,SAAS,QAAQ;AACjE;AAEA,SAASC,gBAAe,SAA+C;AACrE,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,CAAC,QAAQ,UAAW,QAAO;AAC/B,QAAM,YAAY,IAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ;AACtD,SAAO,OAAO,SAAS,SAAS,KAAK,YAAY,KAAK,IAAI,IAAI;AAChE;AAEA,SAASC,kBAAiB,OAAsC;AAC9D,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,QAAM,YAAY;AAOlB,QAAM,SAAS,UAAU,WAAW,UAAU;AAC9C,QAAM,UAAU,UAAU,OAAO,WAAW,WACxC,SACA;AACJ,MAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,MAAM,SAAS,GAAG;AACjE,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,GAAI,OAAO,QAAQ,cAAc,WAC7B,EAAE,WAAW,QAAQ,UAAU,IAC/B,CAAC;AAAA,IACL,GAAI,OAAO,QAAQ,eAAe,WAC9B,EAAE,YAAY,QAAQ,WAAW,IACjC,CAAC;AAAA,EACP;AACF;AAEA,SAAS,mBAAmB,OAAmC;AAC7D,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,QAAM,OAAO;AACb,MACE,CAAC,KAAK,QACH,CAAC,KAAK,WACN,CAAC,KAAK,UACN,CAAC,KAAK,aACN,CAAC,MAAM,QAAQ,KAAK,UAAU,OAAO,KACrC,CAAC,MAAM,QAAQ,KAAK,IAAI,GAC3B;AACA,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;AAEA,SAAS,iBAAyB;AAChC,MAAI,OAAO,WAAW,QAAQ,eAAe,YAAY;AACvD,WAAO,WAAW,OAAO,WAAW;AAAA,EACtC;AACA,SAAO,MAAM,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAChE;AAOO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA,kBAAkBJ;AAAA,EAClB;AAAA,EACA,aAAaD;AAAA,EACb,OAAO;AACT,GAAoD;AAClD,QAAM,UAAU,iBAAiB,WAAW;AAC5C,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,MAAI,UAAuC;AAC3C,MAAI,iBAAuD;AAE3D,QAAM,cAAc,OAClB,QACA,QAAQ,UAC0B;AAClC,QAAI,CAAC,SAASI,gBAAe,OAAO,EAAG,QAAO;AAC9C,QAAI,CAAC,SAAS,eAAgB,QAAO;AACrC,UAAM,UAAU,aACZ,WAAW,EAAE,QAAQ,WAAW,eAAe,OAAO,CAAC,IACvD,QAAQ,iBAAiB;AAAA,MACzB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,WAAW,cAAc,CAAC;AAAA,MACzD;AAAA,IACF,CAAC,EAAE,KAAK,OAAO,aAAa;AAC1B,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAMD;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO,SAAS,KAAK;AAAA,IACvB,CAAC;AACH,UAAMG,WAAU,QAAQ,QAAQ,OAAO,EACpC,KAAKD,iBAAgB,EACrB,KAAK,CAAC,gBAAgB;AACrB,gBAAU;AACV,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,mBAAmBC,SAAS,kBAAiB;AAAA,IACnD,CAAC;AACH,qBAAiBA;AACjB,WAAOA;AAAA,EACT;AAEA,QAAM,UAAU,OACd,MACA,OAAoB,CAAC,GACrB,mBACsB;AACtB,UAAM,aAAa,iBAAiB,OAAO,IAAI,gBAAgB;AAC/D,UAAM,SAAS,kBAAkB,YAAY;AAC7C,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,sCAAsC;AACnE,QAAI,iBAAiB,MAAM,YAAY,MAAM;AAC7C,UAAM,UAAU,CAAC,YAAkC;AACjD,YAAM,QAAQ,QAAQ,cAAc,YAAY,QAAQ,OAAO,EAAE;AACjE,YAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AACxC,cAAQ,IAAI,iBAAiB,UAAU,QAAQ,KAAK,EAAE;AACtD,aAAO,QAAQ,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG,MAAM,SAAS,OAAO,CAAC;AAAA,IAC/D;AACA,QAAI,WAAW,MAAM,QAAQ,cAAc;AAC3C,QAAI,SAAS,WAAW,KAAK;AAC3B,gBAAU;AACV,uBAAiB,MAAM,YAAY,QAAQ,IAAI;AAC/C,iBAAW,MAAM,QAAQ,cAAc;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,OAAO,WAAyB;AACpD,UAAM,WAAW,MAAM,QAAQ,6BAA6B,CAAC,GAAG,MAAM;AACtE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAMH,eAAc,UAAU,qCAAqC;AAAA,IAC3E;AACA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,mBAAmB,KAAK,IAAI;AAAA,EACrC;AAEA,QAAM,WAAW,OACf,MACA,MACA,aACG;AACH,UAAM,UAAU,IAAI,QAAQ,KAAK,OAAO;AACxC,YAAQ,IAAI,mBAAmB,eAAe,CAAC;AAC/C,UAAM,WAAW,MAAM,QAAQ,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC;AACzD,QAAI,CAAC,SAAS,GAAI,OAAM,MAAMA,eAAc,UAAU,QAAQ;AAC9D,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,OACb,OACA,aAC+B;AAC/B,UAAM,WAAW,MAAM;AAAA,MACrB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,WAAO,mBAAmB,KAAK,IAAI;AAAA,EACrC;AAEA,QAAM,aAAa,OACjB,UAC+B;AAC/B,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,MAC5B;AAAA,MACA;AAAA,IACF;AACA,WAAO,cAAc;AAAA,EACvB;AAEA,SAAO;AAAA,IACL,eAAe;AACb,gBAAU;AACV,uBAAiB;AAAA,IACnB;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA,MAAM,WAAW,OAAO,OAAO;AAC7B,YAAM,WAAW,KAAK;AACtB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC9C,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AACA,aAAO,cAAc;AAAA,IACvB;AAAA,IACA,MAAM,cAAc,MAAM,cAAc,aAAa;AACnD,YAAM,OAAO,IAAI,SAAS;AAC1B,WAAK,IAAI,QAAQ,IAAI;AACrB,WAAK,IAAI,gBAAgB,YAAY;AACrC,UAAI,YAAa,MAAK,IAAI,eAAe,WAAW;AACpD,YAAM;AAAA,QACJ;AAAA,QACA,EAAE,QAAQ,QAAQ,KAAK;AAAA,QACvB;AAAA,MACF;AACA,aAAO,cAAc;AAAA,IACvB;AAAA,IACA,MAAM,iBAAiB,cAAc;AACnC,YAAM;AAAA,QACJ,sCAAsC,mBAAmB,YAAY,CAAC;AAAA,QACtE,EAAE,QAAQ,SAAS;AAAA,QACnB;AAAA,MACF;AACA,aAAO,cAAc;AAAA,IACvB;AAAA,IACA,MAAM,cAAc,cAAc;AAChC,YAAM,WAAW,MAAM;AAAA,QACrB,sCAAsC,mBAAmB,YAAY,CAAC;AAAA,MACxE;AACA,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAMA,eAAc,UAAU,+BAA+B;AAAA,MACrE;AACA,aAAO,SAAS,KAAK;AAAA,IACvB;AAAA,IACA,MAAM,OAAO,YAAY;AACvB,YAAM,WAAW,MAAM;AAAA,QACrB,iCAAiC,mBAAmB,UAAU,CAAC;AAAA,MACjE;AACA,UAAI,CAAC,SAAS,GAAI,OAAM,MAAMA,eAAc,UAAU,0BAA0B;AAChF,aAAO,SAAS,KAAK;AAAA,IACvB;AAAA,IACA,UAAU,OAAO;AACf,aAAO,OAAO,EAAE,QAAQ,SAAS,GAAG,MAAM,GAAG,2BAA2B;AAAA,IAC1E;AAAA,IACA,YAAY,OAAO;AACjB,aAAO;AAAA,QACL,EAAE,QAAQ,gBAAgB,GAAG,OAAO,aAAa,MAAM,eAAe,GAAG;AAAA,QACzE;AAAA,MACF;AAAA,IACF;AAAA,IACA,mBAAmB,OAAO;AACxB,aAAO;AAAA,QACL,EAAE,QAAQ,iBAAiB,GAAG,MAAM;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,kBAAkB;AACtB,YAAM,WAAW,MAAM;AAAA,QACrB;AAAA,QACA;AAAA,UACE,QAAQ;AAAA,UACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,UAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,mBAAmB,CAAC;AAAA,QACrD;AAAA,QACA;AAAA,MACF;AACA,YAAM,OAAO,MAAM,SAAS,KAAK;AAIjC,UAAI,OAAO,KAAK,sBAAsB,UAAU;AAC9C,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AACA,aAAO;AAAA,QACL,mBAAmB,KAAK;AAAA,QACxB,MAAM,mBAAmB,KAAK,IAAI;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,QAAQ,MAAY,UAAwB;AACnD,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,OAAK,OAAO;AACZ,OAAK,SAAS;AACd,OAAK,MAAM;AACX,OAAK,WAAW;AAChB,OAAK,MAAM;AACX,SAAO,WAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,GAAM;AAC1D;AAEO,SAAS,iBAAiB;AAAA,EAC/B,QAAQ;AAAA,EACR,kBAAkBF;AAAA,EAClB;AAAA,EACA,aAAaD;AAAA,EACb,kBAAkBE;AAAA,EAClB,UAAU;AAAA,EACV,cAAc;AAAA,EACd;AAAA,EACA,OAAO;AACT,GAAoD;AAClD,QAAM,CAAC,QAAQ,SAAS,IAAIK,UAAS,cAAc;AACnD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAmC,WAAW;AACtE,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,WAAW,CAAC,WAAW;AAClE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAClD,QAAM,UAAUC,QAAO,IAAI;AAE3B,EAAAC,WAAU,MAAM;AACd,cAAU,cAAc;AACxB,YAAQ,WAAW;AACnB,aAAS,IAAI;AAAA,EACf,GAAG,CAAC,aAAa,cAAc,CAAC;AAEhC,QAAM,SAASC,SAAQ,MAAM,0BAA0B;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC,GAAG,CAAC,YAAY,QAAQ,eAAe,YAAY,eAAe,CAAC;AAEpE,EAAAD,WAAU,MAAM;AACd,YAAQ,UAAU;AAClB,WAAO,MAAM;AACX,cAAQ,UAAU;AAClB,aAAO,aAAa;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,UAAUE,aAAY,YAAY;AACtC,QAAI,CAAC,QAAS;AACd,oBAAgB,IAAI;AACpB,QAAI;AACF,YAAM,OAAO,MAAM,OAAO,aAAa;AACvC,UAAI,CAAC,QAAQ,QAAS;AACtB,cAAQ,IAAI;AACZ,eAAS,IAAI;AAAA,IACf,SAAS,OAAO;AACd,UAAI,CAAC,QAAQ,QAAS;AACtB,eAAS,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAClF,UAAE;AACA,UAAI,QAAQ,SAAS;AACnB,qBAAa,KAAK;AAClB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,EAAAF,WAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,SAAK,QAAQ;AACb,UAAM,WAAW,kBAAkB,IAC/B,OAAO,YAAY,MAAM,KAAK,QAAQ,GAAG,eAAe,IACxD;AACJ,UAAM,UAAU,MAAM,KAAK,QAAQ;AACnC,WAAO,iBAAiB,SAAS,OAAO;AACxC,WAAO,MAAM;AACX,UAAI,SAAU,QAAO,cAAc,QAAQ;AAC3C,aAAO,oBAAoB,SAAS,OAAO;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,eAAe,CAAC;AAEtC,QAAM,SAASE,aAAY,OACzB,SACe;AACf,kBAAc,IAAI;AAClB,aAAS,IAAI;AACb,QAAI;AACF,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,QAAQ,QAAS,SAAQ,IAAI;AACjC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,YAAY,iBAAiB,QAC/B,QACA,IAAI,MAAM,2CAA2C;AACzD,UAAI,QAAQ,QAAS,UAAS,SAAS;AACvC,YAAM;AAAA,IACR,UAAE;AACA,UAAI,QAAQ,QAAS,eAAc,KAAK;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,aAAaA;AAAA,IACjB,CAAC,UAA+B,OAAO,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA,IACrE,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,aAAaA;AAAA,IACjB,CAAC,OAA4B,UAC3B,OAAO,MAAM,OAAO,WAAW,OAAO,KAAK,CAAC;AAAA,IAC9C,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,gBAAgBA;AAAA,IACpB,CAAC,MAAY,MAA8B,gBACzC,OAAO,MAAM,OAAO,cAAc,MAAM,MAAM,WAAW,CAAC;AAAA,IAC5D,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,mBAAmBA;AAAA,IACvB,CAAC,iBAAyB,OAAO,MAAM,OAAO,iBAAiB,YAAY,CAAC;AAAA,IAC5E,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,YAAYA;AAAA,IAChB,CAAC,UAA0B,OAAO,MAAM,OAAO,UAAU,KAAK,CAAC;AAAA,IAC/D,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,cAAcA;AAAA,IAClB,CAAC,UAAgC,OAAO,MAAM,OAAO,YAAY,KAAK,CAAC;AAAA,IACvE,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,qBAAqBA;AAAA,IACzB,CAAC,UACC,OAAO,MAAM,OAAO,mBAAmB,KAAK,CAAC;AAAA,IAC/C,CAAC,QAAQ,MAAM;AAAA,EACjB;AACA,QAAM,kBAAkBA,aAAY,YAAY;AAC9C,kBAAc,IAAI;AAClB,aAAS,IAAI;AACb,QAAI;AACF,YAAM,SAAS,MAAM,OAAO,gBAAgB;AAC5C,YAAM,iBAAiB;AACvB,YAAM,iBAAiB,OAAO,mBAAmB,cAAc;AAC/D,gBAAU,OAAO,iBAAiB;AAClC,cAAQ,OAAO,IAAI;AACnB,aAAO,OAAO;AAAA,IAChB,SAAS,OAAO;AACd,YAAM,YAAY,iBAAiB,QAC/B,QACA,IAAI,MAAM,wCAAwC;AACtD,eAAS,SAAS;AAClB,YAAM;AAAA,IACR,UAAE;AACA,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,cAAc,CAAC;AACnC,QAAM,iBAAiBA,aAAY,OAAO,eAAqC;AAC7E,YAAQ,MAAM,OAAO,cAAc,WAAW,EAAE,GAAG,WAAW,QAAQ;AAAA,EACxE,GAAG,CAAC,MAAM,CAAC;AACX,QAAM,UAAUA,aAAY,OAAOC,cAA8B;AAC/D,YAAQ,MAAM,OAAO,OAAOA,UAAS,EAAE,GAAGA,UAAS,QAAQ;AAAA,EAC7D,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAaA,SAAS,iBAAyB;AAChC,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,SAAS,IAAI,kBAAkB,IAAI;AACzC,SAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AACnE;AAEA,SAASC,iBACP,YACA,OACe;AACf,SAAO;AAAA,IACL,GAAI,YAAY,cAAc,EAAE,eAAe,WAAW,YAAY,IAAI,CAAC;AAAA,IAC3E,GAAI,YAAY,YAAY,EAAE,aAAa,WAAW,UAAU,IAAI,CAAC;AAAA,IACrE,GAAI,YAAY,aAAa,EAAE,cAAc,WAAW,WAAW,IAAI,CAAC;AAAA,IACxE,GAAI,YAAY,cAAc,EAAE,eAAe,WAAW,YAAY,IAAI,CAAC;AAAA,IAC3E,GAAI,YAAY,kBAAkB,EAAE,aAAa,WAAW,gBAAgB,IAAI,CAAC;AAAA,IACjF,GAAI,YAAY,eAAe,EAAE,gBAAgB,WAAW,aAAa,IAAI,CAAC;AAAA,IAC9E,GAAI,YAAY,aAAa,EAAE,aAAa,WAAW,WAAW,IAAI,CAAC;AAAA,IACvE,GAAG;AAAA,EACL;AACF;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AACF,GAOiB;AACf,QAAM,CAAC,MAAM,OAAO,IAAIN,UAAsB,IAAI;AAClD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAiC,QAAQ;AACjE,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,KAAK;AACtC,SAAO,gBAAAR,MAAC,SAAI,WAAU,uBACpB;AAAA,oBAAAA,MAAC,YAAO,cAAW,4BAA2B,OAAO,MAAM,UAAU,YAAY,MAAM,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,KAA+B,GAC9J;AAAA,sBAAAD,KAAC,YAAO,OAAM,UAAS,mCAAqB;AAAA,MAC5C,gBAAAA,KAAC,YAAO,OAAM,gBAAe,0BAAY;AAAA,MACzC,gBAAAA,KAAC,YAAO,OAAM,oBAAmB,8BAAgB;AAAA,MACjD,gBAAAA,KAAC,YAAO,OAAM,yBAAwB,mCAAqB;AAAA,MAC3D,gBAAAA,KAAC,YAAO,OAAM,YAAW,0BAAY;AAAA,MACrC,gBAAAA,KAAC,YAAO,OAAM,MAAK,iBAAG;AAAA,MACtB,gBAAAA,KAAC,YAAO,OAAM,SAAQ,uCAAyB;AAAA,OACjD;AAAA,IACA,gBAAAA,KAAC,WAAM,cAAW,yBAAwB,MAAK,QAAO,QAAO,wBAAuB,UAAU,YAAY,MAAM,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAAA,IAC/K,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,UAAU,YAAY,QAAQ,CAAC,MAAM,SAAS,MAAM;AAClH,UAAI,CAAC,KAAM;AACX,cAAQ,IAAI;AACZ,WAAK,MAAM,MAAM,IAAI,EAClB,KAAK,MAAM,QAAQ,IAAI,CAAC,EACxB,MAAM,MAAM,MAAS,EACrB,QAAQ,MAAM,QAAQ,KAAK,CAAC;AAAA,IACjC,GAAI,iBAAO,oBAAe,cAAa;AAAA,KACzC;AACF;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA8C;AAC5C,QAAM,YAAY,iBAAiB,OAAO;AAC1C,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,CAAC,OAAO,QAAQ,IAAIS,UAAgB,EAAE;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAS,EAAE;AACvC,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,EAAE;AACjD,QAAM,CAAC,SAAS,UAAU,IAAIA,UAA+B;AAAA,IAC3D,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa,eAAe;AAAA,IAC5B,MAAM;AAAA,EACR,CAAC;AACD,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAkC;AAAA,IAC5D,QAAQ;AAAA,IACR,yBAAyB;AAAA,IACzB,gBAAgB;AAAA,IAChB,eAAe,CAAC;AAAA,IAChB,OAAO;AAAA,EACT,CAAC;AACD,QAAM,WAAWC,QAAiC,IAAI;AAEtD,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,SAAS,SAAS,QAAS;AACxC,aAAS,UAAU;AACnB,gBAAY,IAAI;AAChB,eAAW,CAAC,aAAa;AAAA,MACvB,GAAG;AAAA,MACH,QAAQ,QAAQ,SAAS,IAAI,QAAQ,SAAS,KAAK,KAAK;AAAA,IAC1D,EAAE;AACF,cAAU,CAAC,aAAa;AAAA,MACtB,GAAG;AAAA,MACH,gBAAgB,QAAQ,kBAAkB,KAAK,KAAK;AAAA,MACpD,eAAe,QAAQ,cAAc,SACjC,QAAQ,cAAc,OAAO,CAAC,OAAO,KAAK,KAAK,YAAY,KAAK,CAAC,QAAQ,IAAI,OAAO,EAAE,CAAC,IACvF,KAAK,KAAK,YAAY,IAAI,CAAC,QAAQ,IAAI,EAAE;AAAA,IAC/C,EAAE;AAAA,EACJ,GAAG,CAAC,MAAM,SAAS,CAAC;AAEpB,MAAI,UAAU,aAAa,CAAC,MAAM;AAChC,WAAO,gBAAAX,KAAAD,WAAA,EAAG,6BAAmB,gBAAAC,KAAC,SAAI,WAAU,wBAAuB,mCAAgB,GAAO;AAAA,EAC5F;AACA,MAAI,CAAC,MAAM;AACT,UAAM,QAAQ,UAAU,SAAS,IAAI,MAAM,2BAA2B;AACtE,WAAO,gBAAAA,KAAAD,WAAA,EAAG,0BAAgB,OAAO,UAAU,OAAO,KAAK,gBAAAE,MAAC,SAAI,WAAU,sBAAqB,MAAK,SAAQ;AAAA,sBAAAD,KAAC,YAAO,qCAAuB;AAAA,MAAS,gBAAAA,KAAC,UAAM,gBAAM,SAAQ;AAAA,MAAO,gBAAAA,KAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,uBAAS;AAAA,OAAS,GAAO;AAAA,EACtQ;AAEA,QAAM,YAAY,IAAI,IAAI,KAAK,UAAU,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;AACrF,QAAM,MAAM,CAAC,OAA8B,UAAU,IAAI,EAAE;AAC3D,QAAM,cAAc,CAAC,SAAgB;AACnC,cAAU,EAAE;AACZ,aAAS,CAAC,YAAY,YAAY,OAAO,KAAK,IAAI;AAAA,EACpD;AACA,QAAM,WAAW,OAAO,SAAiB,SAAiC;AACxE,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,KAAK;AACX,eAAS,EAAE;AACX,gBAAU,OAAO;AAAA,IACnB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,QAAM,gBAAgB,KAAK,UAAU,QAClC,OAAO,CAAC,WAAW,OAAO,OAAO,qBAAqB,OAAO,OAAO,cAAc,OAAO,OAAO,yBAAyB,EACzH,IAAI,CAAC,YAAY;AAAA,IAChB,GAAG;AAAA,IACH,SAAS,MAAM;AACb,UAAI,CAAC,OAAO,QAAS;AACrB,UAAI,OAAO,OAAO,uBAAwB,aAAY,YAAY;AAClE,UAAI,OAAO,OAAO,gBAAiB,aAAY,eAAe;AAC9D,UAAI,OAAO,OAAO,eAAgB,aAAY,SAAS;AACvD,UAAI,OAAO,OAAO,QAAS,aAAY,OAAO;AAAA,IAChD;AAAA,IACA,UAAU,CAAC,OAAO,WAAW,UAAU;AAAA,EACzC,EAAE;AAEJ,QAAM,mBAAmB,QAAQ,IAAI,iBAAiB,CAAC;AAEvD,SAAO,gBAAAC,MAAC,aAAQ,WAAW,CAAC,0BAA0B,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAOc,iBAAgB,YAAY,KAAK,GAClI;AAAA,oBAAAf,KAAC,WAAO,sCAA2B;AAAA,IAClC,mBACG,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,QACpC,UAAU,UAAU;AAAA,QACpB,QAAQ,UAAU;AAAA,QAClB,UAAU,OAAO,OAAO,UAAU;AAAE,gBAAM,SAAS,mBAAmB,MAAM,UAAU,WAAW,OAAO,KAAK,CAAC;AAAA,QAAG;AAAA,QACjH,iBAAiB,OAAO,MAAM,MAAM,gBAAgB;AAAE,gBAAM,UAAU,cAAc,MAAM,MAAM,WAAW;AAAA,QAAG;AAAA,QAC9G,oBAAoB,OAAO,iBAAiB;AAAE,gBAAM,UAAU,iBAAiB,YAAY;AAAA,QAAG;AAAA,QAC9F,kBAAkB,CAAC,eAAe,KAAK,UAAU,eAAe,UAAU,EAAE,MAAM,MAAM,MAAS;AAAA;AAAA,IACnG,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,KAAK,UAAU;AAAA,QACvB,aAAa,KAAK,UAAU,eAAe;AAAA,QAC3C,WAAW,KAAK,UAAU,aAAa;AAAA,QACvC,WAAW,KAAK,UAAU,aAAa;AAAA,QACvC,aAAa,KAAK,KAAK;AAAA,QACvB,WAAW,KAAK,KAAK;AAAA,QACrB,YAAY,KAAK,KAAK;AAAA,QACtB,SAAS;AAAA,QACR,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA;AAAA,IACtC;AAAA,IAEJ,gBAAAC,MAAC,SAAI,WAAU,wBACb;AAAA,sBAAAA,MAAC,SACC;AAAA,wBAAAA,MAAC,YAAO;AAAA;AAAA,UAAO,KAAK,KAAK;AAAA,WAAW;AAAA,QACpC,gBAAAD,KAAC,UAAM,oBAAU,eAAe,qBAAgB,oCAAmC;AAAA,SACrF;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,gCACZ;AAAA,YAAI,UAAU,IAAI,gBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,eAAe,WAAW,KAAK,KAAK,EAAE,EAAE,GAAG,eAAe,EAAE,UAAU,UAAU,OAAO,SAAS,CAAC,GAAG,sBAAQ,IAAY;AAAA,QAClO,oBAAoB,IAAI,OAAO,IAAI,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,6BAA4B,SAAS,MAAM,YAAY,OAAO,GAAG,wBAAU,IAAY;AAAA,SAC7J;AAAA,OACF;AAAA,IAEC,KAAK,KAAK,SAAS,gBAAAC,MAAC,aAAQ,WAAU,qBAAoB,IAAI,WAAW,KAAK,KAAK,EAAE,IACpF;AAAA,sBAAAA,MAAC,YAAO;AAAA,wBAAAA,MAAC,SAAI;AAAA,0BAAAD,KAAC,QAAG,mCAAqB;AAAA,UAAK,gBAAAA,KAAC,OAAE,gFAAkE;AAAA,WAAI;AAAA,QAAM,gBAAAC,MAAC,UAAM;AAAA,eAAK,KAAK;AAAA,UAAO;AAAA,UAAK,KAAK,KAAK,WAAW,IAAI,KAAK;AAAA,WAAI;AAAA,SAAO;AAAA,MAChM,gBAAAD,KAAC,QAAG,WAAU,0BAA0B,eAAK,KAAK,IAAI,CAAC,QAAQ,gBAAAC,MAAC,QAAgB;AAAA,wBAAAA,MAAC,SAAI;AAAA,0BAAAD,KAAC,YAAQ,cAAI,UAAS;AAAA,UAAS,gBAAAA,KAAC,UAAM,cAAI,eAAe,SAAS,IAAI,KAAK,IAAI,OAAO,EAAE,mBAAmB,CAAC,IAAG;AAAA,WAAO;AAAA,QAAM,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,EAAE,MAAM,MAAM,MAAS,GAAG,sBAAQ;AAAA,WAApR,IAAI,EAAyR,CAAK,GAAE;AAAA,OAC9W,IAAa;AAAA,IAEZ,IAAI,yBAAyB,IAAI,gBAAAC,MAAC,SAAI,WAAU,qBAAoB;AAAA,sBAAAD,KAAC,YAAQ,cAAI,yBAAyB,GAAG,OAAM;AAAA,MAAS,gBAAAA,KAAC,UAAM,cAAI,yBAAyB,GAAG,QAAO;AAAA,OAAO,IAAS;AAAA,IAE1L,UAAU,eAAe,gBAAAC,MAAC,aAAQ,WAAU,sBAC3C;AAAA,sBAAAA,MAAC,SAAI;AAAA,wBAAAD,KAAC,QAAG,kCAAoB;AAAA,QAAK,gBAAAA,KAAC,OAAE,iJAAmI;AAAA,SAAI;AAAA,MAC5K,gBAAAC,MAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,YAAY,SAAS,MAAM,KAAK,SAAS,6BAA6B,UAAU,eAAe,GAAI,oBAAU,aAAa,mBAAc,2BAA0B;AAAA,SAAS;AAAA,OACvZ,IAAa;AAAA,IAEZ,UAAU,kBAAkB,gBAAAC,MAAC,aAAQ,WAAU,2BAC9C;AAAA,sBAAAA,MAAC,SAAI;AAAA,wBAAAD,KAAC,QAAG,kCAAoB;AAAA,QAAK,gBAAAA,KAAC,OAAE,wIAA0H;AAAA,SAAI;AAAA,MACnK,gBAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,wBAAAA,MAAC,WAAM;AAAA,0BAAAD,KAAC,UAAK,sCAAwB;AAAA,UAAO,gBAAAA,KAAC,cAAS,UAAQ,MAAC,OAAO,OAAO,QAAQ,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAClL,gBAAAC,MAAC,SAAI,WAAU,uBACb;AAAA,0BAAAA,MAAC,WAAM;AAAA,4BAAAD,KAAC,UAAK,wCAA0B;AAAA,YAAO,gBAAAA,KAAC,WAAM,UAAQ,MAAC,OAAO,OAAO,yBAAyB,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,yBAAyB,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,aAAE;AAAA,UACnN,gBAAAC,MAAC,WAAM;AAAA,4BAAAD,KAAC,UAAK,6BAAe;AAAA,YAAO,gBAAAA,KAAC,WAAM,MAAK,UAAS,KAAI,QAAO,MAAK,QAAO,OAAO,OAAO,kBAAkB,IAAI,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,gBAAgB,MAAM,OAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,IAAI,OAAU,EAAE,GAAG;AAAA,aAAE;AAAA,UACjQ,gBAAAC,MAAC,WAAM;AAAA,4BAAAD,KAAC,UAAK,sBAAQ;AAAA,YAAO,gBAAAC,MAAC,YAAO,OAAO,OAAO,OAAO,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,MAA6B,EAAE,GAAG;AAAA,8BAAAD,KAAC,YAAO,OAAM,SAAQ,oBAAM;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,cAAS,gBAAAA,KAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,eAAS;AAAA,aAAS;AAAA,WAChU;AAAA,SACF;AAAA,MACA,gBAAAC,MAAC,cAAS,WAAU,uBAAsB;AAAA,wBAAAD,KAAC,YAAO,+BAAiB;AAAA,QAAU,KAAK,KAAK,YAAY,IAAI,CAAC,eAAe,gBAAAC,MAAC,WAA0B;AAAA,0BAAAD,KAAC,WAAM,MAAK,YAAW,SAAS,OAAO,cAAc,SAAS,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,eAAe,MAAM,OAAO,UAAU,CAAC,GAAG,QAAQ,eAAe,WAAW,EAAE,IAAI,QAAQ,cAAc,OAAO,CAAC,OAAO,OAAO,WAAW,EAAE,EAAE,EAAE,GAAG;AAAA,UAAE,gBAAAC,MAAC,UAAK;AAAA,4BAAAD,KAAC,YAAQ,qBAAW,UAAS;AAAA,YAAS,gBAAAA,KAAC,WAAO,qBAAW,eAAe,WAAW,cAAa;AAAA,aAAQ;AAAA,UAAO,gBAAAA,KAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,UAAU,eAAe,UAAU,EAAE,MAAM,MAAM,MAAS,GAAG,kBAAI;AAAA,UAAS,gBAAAA,KAAC,YAAO,MAAK,UAAS,cAAY,UAAU,WAAW,QAAQ,IAAI,SAAS,MAAM,KAAK,UAAU,iBAAiB,WAAW,EAAE,EAAE,MAAM,MAAM,MAAS,GAAG,kBAAC;AAAA,aAA/qB,WAAW,EAA6qB,CAAQ;AAAA,SAAE;AAAA,MACr0B,gBAAAA,KAAC,6BAA0B,UAAU,UAAU,YAAY,OAAO,OAAO,MAAM,MAAM,gBAAgB;AACnG,cAAM,OAAO,MAAM,UAAU,cAAc,MAAM,MAAM,WAAW;AAClE,kBAAU,CAAC,aAAa;AAAA,UACtB,GAAG;AAAA,UACH,eAAe,MAAM,KAAK,oBAAI,IAAI;AAAA,YAChC,GAAG,QAAQ;AAAA,YACX,GAAG,KAAK,KAAK,YAAY,IAAI,CAAC,eAAe,WAAW,EAAE;AAAA,UAC5D,CAAC,CAAC;AAAA,QACJ,EAAE;AAAA,MACJ,GAAG;AAAA,MACH,gBAAAC,MAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,cAAc,CAAC,OAAO,OAAO,KAAK,KAAK,CAAC,OAAO,wBAAwB,KAAK,GAAG,SAAS,MAAM,KAAK,SAAS,4BAA4B,MAAM,UAAU,mBAAmB,MAAM,CAAC,GAAI,oBAAU,aAAa,qBAAgB,wBAAuB;AAAA,SAAS;AAAA,OACze,IAAa;AAAA,IAEZ,UAAU,YAAY,gBAAAC,MAAC,aAAQ,WAAU,sBACxC;AAAA,sBAAAA,MAAC,SAAI;AAAA,wBAAAD,KAAC,QAAG,0BAAY;AAAA,QAAK,gBAAAA,KAAC,OAAE,4HAA8G;AAAA,SAAI;AAAA,MAC/I,gBAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,wBAAAA,MAAC,WAAM;AAAA,0BAAAD,KAAC,UAAK,oBAAM;AAAA,UAAO,gBAAAA,KAAC,WAAM,MAAK,UAAS,KAAI,QAAO,KAAK,KAAK,KAAK,YAAY,MAAK,QAAO,UAAQ,MAAC,OAAO,QAAQ,UAAU,IAAI,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,OAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG;AAAA,WAAE;AAAA,QAC7O,gBAAAC,MAAC,WAAM;AAAA,0BAAAD,KAAC,UAAK,oBAAM;AAAA,UAAO,gBAAAC,MAAC,YAAO,OAAO,QAAQ,QAAQ,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,MAAM,OAAO,MAAyB,EAAE,GAAG;AAAA,4BAAAD,KAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,YAAS,gBAAAA,KAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,aAAS;AAAA,WAAS;AAAA,QACrP,gBAAAC,MAAC,WAAM;AAAA,0BAAAD,KAAC,UAAM,kBAAQ,WAAW,UAAU,iBAAiB,iBAAgB;AAAA,UAAO,gBAAAA,KAAC,WAAM,OAAO,QAAQ,aAAa,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QACzN,gBAAAC,MAAC,WAAM;AAAA,0BAAAD,KAAC,UAAK,0BAAY;AAAA,UAAO,gBAAAA,KAAC,WAAM,MAAK,QAAO,UAAQ,MAAC,OAAO,QAAQ,aAAa,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAC3L,gBAAAC,MAAC,WAAM,WAAU,QAAO;AAAA,0BAAAA,MAAC,UAAK;AAAA;AAAA,YAAK,gBAAAD,KAAC,WAAM,sBAAQ;AAAA,aAAQ;AAAA,UAAO,gBAAAA,KAAC,WAAM,OAAO,QAAQ,MAAM,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,MAAM,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,SAC3L;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,cAAc,QAAQ,UAAU,KAAK,QAAQ,SAAS,KAAK,KAAK,cAAc,CAAC,QAAQ,aAAa,SAAS,MAAM,KAAK,SAAS,mBAAmB,MAAM,UAAU,YAAY,OAAO,CAAC,GAAI,oBAAU,aAAa,kBAAa,gBAAe;AAAA,SAAS;AAAA,OACpe,IAAa;AAAA,IAEZ,UAAU,UAAU,gBAAAC,MAAC,aAAQ,WAAU,6BACtC;AAAA,sBAAAA,MAAC,SAAI;AAAA,wBAAAD,KAAC,QAAG,wBAAU;AAAA,QAAK,gBAAAA,KAAC,OAAE,2IAA6H;AAAA,SAAI;AAAA,MAC5J,gBAAAC,MAAC,WAAM;AAAA,wBAAAD,KAAC,UAAK,gCAAkB;AAAA,QAAO,gBAAAA,KAAC,cAAS,UAAQ,MAAC,OAAO,aAAa,UAAU,CAAC,UAAU,eAAe,MAAM,OAAO,KAAK,GAAG;AAAA,SAAE;AAAA,MACxI,gBAAAC,MAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,KAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,8BAA6B,UAAU,UAAU,cAAc,CAAC,YAAY,KAAK,GAAG,SAAS,MAAM,KAAK,SAAS,gBAAgB,MAAM,UAAU,UAAU,EAAE,QAAQ,YAAY,CAAC,CAAC,GAAI,oBAAU,aAAa,kBAAa,cAAa;AAAA,SAAS;AAAA,OAC3a,IAAa;AAAA,IAEZ,SAAS,gBAAAA,KAAC,SAAI,WAAU,gCAA+B,MAAK,UAAU,kBAAO,IAAS;AAAA,IACtF,UAAU,QAAQ,gBAAAA,KAAC,SAAI,WAAU,8BAA6B,MAAK,SAAS,oBAAU,MAAM,SAAQ,IAAS;AAAA,KAChH;AACF;AAEA,IAAM,6BAA6B;AAAA;AAAA;;;AHj3BnC,SAAS,OAAO,SAAiB,OAA0C;AACzE,QAAM,MAAMgB,QAA2B,IAAI;AAC3C,QAAM,EAAE,YAAY,gBAAgB,IAAI;AACxC,EAAAC,WAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AACd,UAAM,cAAc,CAAC,UACnB,aAAa,KAAyC;AACxD,UAAM,cAAc,CAAC,UACnB,kBAAkB,KAAyC;AAC7D,YAAQ,iBAAiB,YAAY,WAAW;AAChD,YAAQ,iBAAiB,kBAAkB,WAAW;AACtD,WAAO,MAAM;AACX,cAAQ,oBAAoB,YAAY,WAAW;AACnD,cAAQ,oBAAoB,kBAAkB,WAAW;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,SAAO,cAAc,SAAS;AAAA,IAC5B;AAAA,IACA,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM,YAAY;AAAA,IACzB,gBAAgB,MAAM,YAAY;AAAA,IAClC,oBAAoB,MAAM,YAAY;AAAA,IACtC,iBAAiB,MAAM,YAAY;AAAA,IACnC,cAAc,MAAM,YAAY;AAAA,IAChC,eAAe,MAAM,YAAY;AAAA,IACjC,gBAAgB,MAAM,YAAY;AAAA,IAClC,eAAe,MAAM,YAAY;AAAA,IACjC,iBAAiB,MAAM,YAAY;AAAA,IACnC,QAAQ,MAAM,YAAY;AAAA,IAC1B,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf,CAAC;AACH;AAEO,SAAS,qBAAqB,OAA0C;AAC7E,SAAO,OAAO,0BAA0B,KAAK;AAC/C;AACO,SAAS,mBAAmB,OAA0C;AAC3E,SAAO,OAAO,wBAAwB,KAAK;AAC7C;AACO,SAAS,uBACd,OACc;AACd,SAAO,OAAO,6BAA6B,KAAK;AAClD;AACO,SAAS,oBAAoB,OAA0C;AAC5E,SAAO,OAAO,wBAAwB,KAAK;AAC7C;AACO,SAAS,mBAAmB,OAA0C;AAC3E,SAAO,OAAO,uBAAuB,KAAK;AAC5C;AAEO,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,uBAAuB;AAC7B,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;","names":["useEffect","useRef","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","DEFAULT_REFRESH_INTERVAL","responseError","isSessionFresh","normalizeSession","request","useState","useRef","useEffect","useMemo","useCallback","document","appearanceStyle","useRef","useEffect"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/native-bill-review.tsx","../src/connected-bill-status.tsx","../src/connected-bill-lifecycle.tsx"],"sourcesContent":["\"use client\";\n\nimport \"@mindbill/embed\";\nimport type { CSSProperties, ReactElement } from \"react\";\nimport { createElement, useEffect, useRef } from \"react\";\nimport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport type MindBillWidgetProps = {\n sessionToken: string;\n embedUrl: string;\n appearance?: MindBillAppearance;\n className?: string;\n style?: CSSProperties;\n onMindBill?: (event: CustomEvent<MindBillEventDetail>) => void;\n onMindBillError?: (event: CustomEvent<MindBillErrorDetail>) => void;\n};\n\nfunction widget(tagName: string, props: MindBillWidgetProps): ReactElement {\n const ref = useRef<HTMLElement | null>(null);\n const { onMindBill, onMindBillError } = props;\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n const handleEvent = (event: Event) =>\n onMindBill?.(event as CustomEvent<MindBillEventDetail>);\n const handleError = (event: Event) =>\n onMindBillError?.(event as CustomEvent<MindBillErrorDetail>);\n element.addEventListener(\"mindbill\", handleEvent);\n element.addEventListener(\"mindbill-error\", handleError);\n return () => {\n element.removeEventListener(\"mindbill\", handleEvent);\n element.removeEventListener(\"mindbill-error\", handleError);\n };\n }, [onMindBill, onMindBillError]);\n\n return createElement(tagName, {\n ref,\n \"session-token\": props.sessionToken,\n \"embed-url\": props.embedUrl,\n theme: props.appearance?.theme,\n \"accent-color\": props.appearance?.accentColor,\n \"background-color\": props.appearance?.backgroundColor,\n \"surface-color\": props.appearance?.surfaceColor,\n \"text-color\": props.appearance?.textColor,\n \"muted-color\": props.appearance?.mutedColor,\n \"border-color\": props.appearance?.borderColor,\n \"font-family\": props.appearance?.fontFamily,\n \"border-radius\": props.appearance?.borderRadius,\n locale: props.appearance?.locale,\n class: props.className,\n style: props.style,\n });\n}\n\nexport function MindBillBillTimeline(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-timeline\", props);\n}\nexport function MindBillBillReview(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-bill-review\", props);\n}\nexport function MindBillBillFromReport(\n props: MindBillWidgetProps,\n): ReactElement {\n return widget(\"mindbill-bill-from-report\", props);\n}\nexport function MindBillCollections(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-collections\", props);\n}\nexport function MindBillOnboarding(props: MindBillWidgetProps): ReactElement {\n return widget(\"mindbill-onboarding\", props);\n}\n\nexport const HostedBillTimeline = MindBillBillTimeline;\nexport const HostedBillReview = MindBillBillReview;\nexport const HostedBillFromReport = MindBillBillFromReport;\nexport const HostedCollections = MindBillCollections;\nexport const HostedOnboarding = MindBillOnboarding;\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n} from \"./native-bill-review\";\nexport type {\n BillReviewAttachment,\n BillReviewBillingProvider,\n BillReviewClinician,\n BillReviewData,\n BillReviewDocumentType,\n BillReviewDraft,\n BillReviewFormProps,\n BillReviewFeatures,\n BillReviewLineItem,\n BillReviewLocation,\n BillReviewPayer,\n BillReviewSaveInput,\n BillStatusSummaryProps,\n BillStatusAction,\n BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillEorDocument,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n SubmitSecondReviewInput,\n UseBillLifecycleOptions,\n UseBillLifecycleResult,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillStatusClient,\n BillStatusClientOptions,\n BillStatusData,\n BillStatusSession,\n BillStatusSessionProvider,\n BillStatusSessionRequest,\n ConnectedBillStatusProps,\n UseBillStatusOptions,\n UseBillStatusResult,\n} from \"./connected-bill-status\";\n","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\nimport type { CSSProperties, FormEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useState } from \"react\";\n\nexport type BillReviewDocumentType =\n | \"final_report\"\n | \"letter_of_attestation\"\n | \"proof_of_service\"\n | \"form_122\"\n | \"return_to_work_voucher\"\n | \"w9\"\n | \"medical_records\"\n | \"appeal\"\n | \"other\";\n\nexport type BillReviewBillingProvider = {\n id?: string;\n name: string;\n taxId: string;\n npi: string;\n billType: \"Professional\" | \"Institutional\";\n phone?: string;\n billingStreet?: string;\n billingCity?: string;\n billingState?: string;\n billingZip?: string;\n};\n\nexport type BillReviewClinician = {\n id?: string;\n name: string;\n specialty: string;\n npi: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n signaturePng?: string;\n signatureKey?: string;\n isQME?: boolean;\n isAME?: boolean;\n email?: string;\n active?: boolean;\n};\n\nexport type BillReviewLocation = {\n id?: string;\n billingProviderId?: string;\n name: string;\n nickname?: string;\n street: string;\n city: string;\n state: string;\n zip: string;\n county?: string;\n posCode?: string;\n isPrimary?: boolean;\n active?: boolean;\n};\n\nexport type BillReviewLineItem = {\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge: number;\n feeSchedule?: number;\n};\n\nexport type BillReviewAttachment = {\n id: string;\n filename: string;\n description?: string | null;\n documentType: string;\n reportType?: string | null;\n source?: string;\n addedAt?: string;\n contentUrl?: string;\n};\n\nexport type BillReviewPayer = {\n id: string;\n name: string;\n hasElectronic?: boolean;\n states?: string[];\n};\n\nexport type BillReviewFeatures = {\n authorizationNumber?: boolean;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n placeOfServiceId?: string;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n renderingProviderId?: string;\n billingSnapshot?: {\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n } | null;\n lineItems: BillReviewLineItem[];\n attachments: BillReviewAttachment[];\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n };\n patient: { name: string; dob?: string };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n claimsAdminId?: string;\n claimsAdminName?: string;\n };\n options?: {\n billingProviders?: BillReviewBillingProvider[];\n renderingProviders?: BillReviewClinician[];\n locations?: BillReviewLocation[];\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: string;\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProviderId?: string;\n billingProvider?: Omit<BillReviewBillingProvider, \"id\">;\n renderingProviderId?: string;\n renderingProvider?: Omit<BillReviewClinician, \"id\">;\n placeOfServiceId?: string;\n placeOfService?: Omit<BillReviewLocation, \"id\">;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n onSave: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<void>;\n onAddAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<void>;\n onRemoveAttachment: (attachmentId: string) => Promise<void>;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void;\n onSearchClaimsAdministrators?: (\n query: string,\n ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillAppearance;\n features?: BillReviewFeatures;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n claimsAdminId: string;\n claimsAdminName: string;\n dos: string;\n dosEnd: string;\n authorizationNumber: string;\n billingProvider: BillReviewBillingProvider;\n clinician: BillReviewClinician;\n location: BillReviewLocation;\n lineItems: BillReviewLineItem[];\n};\n\nconst EMPTY_BILLING_PROVIDER: BillReviewBillingProvider = {\n name: \"\",\n taxId: \"\",\n npi: \"\",\n billType: \"Professional\",\n};\nconst EMPTY_CLINICIAN: BillReviewClinician = {\n name: \"\",\n specialty: \"\",\n npi: \"\",\n};\nconst EMPTY_LOCATION: BillReviewLocation = {\n name: \"\",\n street: \"\",\n city: \"\",\n state: \"\",\n zip: \"\",\n posCode: \"11\",\n};\n\nconst DOCUMENT_LABELS: Record<BillReviewDocumentType, string> = {\n final_report: \"Final medical-legal report\",\n letter_of_attestation: \"Letter of attestation\",\n proof_of_service: \"Proof of service\",\n form_122: \"DWC Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\",\n w9: \"W-9\",\n medical_records: \"Medical records\",\n appeal: \"Appeal or review support\",\n other: \"Other supporting document\",\n};\n\nfunction withoutId<T extends { id?: string }>(value: T): Omit<T, \"id\"> {\n const result = { ...value };\n delete result.id;\n return result;\n}\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n return {\n claimsAdminId: data.injury.claimsAdminId || \"\",\n claimsAdminName: data.injury.claimsAdminName || \"\",\n dos: data.bill.dos || \"\",\n dosEnd: data.bill.dosEnd || \"\",\n authorizationNumber: data.bill.authorizationNumber || \"\",\n billingProvider: {\n ...EMPTY_BILLING_PROVIDER,\n ...(snapshot?.billingProvider ?? {}),\n },\n clinician: { ...EMPTY_CLINICIAN, ...(snapshot?.renderingProvider ?? {}) },\n location: { ...EMPTY_LOCATION, ...(snapshot?.placeOfService ?? {}) },\n lineItems: data.bill.lineItems.map((line) => ({ ...line })),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return {\n claimsAdminId: draft.claimsAdminId,\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n ...(draft.billingProvider.id\n ? { billingProviderId: draft.billingProvider.id }\n : {}),\n billingProvider: withoutId(draft.billingProvider),\n ...(draft.clinician.id\n ? { renderingProviderId: draft.clinician.id }\n : {}),\n renderingProvider: withoutId(draft.clinician),\n ...(draft.location.id ? { placeOfServiceId: draft.location.id } : {}),\n placeOfService: withoutId(draft.location),\n lineItems: draft.lineItems.map(({ id, code, modifiers, units }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n })),\n };\n}\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n }).format(value);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor\n ? { \"--mb-accent\": appearance.accentColor }\n : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor\n ? { \"--mb-muted\": appearance.mutedColor }\n : {}),\n ...(appearance?.borderColor\n ? { \"--mb-border\": appearance.borderColor }\n : {}),\n ...(appearance?.backgroundColor\n ? { \"--mb-soft\": appearance.backgroundColor }\n : {}),\n ...(appearance?.surfaceColor\n ? { \"--mb-surface\": appearance.surfaceColor }\n : {}),\n ...(appearance?.fontFamily\n ? { \"--mb-font\": appearance.fontFamily }\n : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n}): ReactElement {\n return (\n <label className=\"mb-native-field\">\n <span>\n {label} {optional ? <small>Optional</small> : null}\n </span>\n <input\n type={type}\n value={value}\n required={required}\n onChange={(event) => onChange(event.target.value)}\n />\n </label>\n );\n}\n\nexport function BillReviewForm({\n data,\n onSave,\n onSubmit,\n onAddAttachment,\n onRemoveAttachment,\n onOpenAttachment,\n onSearchClaimsAdministrators,\n className,\n style,\n appearance,\n features,\n disabled = false,\n}: BillReviewFormProps): ReactElement {\n const [draft, setDraft] = useState(() => toDraft(data));\n const [payerQuery, setPayerQuery] = useState(\n () => data.injury.claimsAdminName || \"\",\n );\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]);\n const [payerBusy, setPayerBusy] = useState(false);\n const [route, setRoute] = useState<BillSubmissionRoute>(\"ebill\");\n const [file, setFile] = useState<File | null>(null);\n const [documentType, setDocumentType] =\n useState<BillReviewDocumentType>(\"other\");\n const [busy, setBusy] = useState<\"save\" | \"submit\" | \"attachment\" | \"\">(\"\");\n const [error, setError] = useState(\"\");\n const [notice, setNotice] = useState(\"\");\n const routeName = useId();\n const payerListId = useId();\n const editable = data.bill.status === \"incomplete\" && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n if (!onSearchClaimsAdministrators || payerQuery.trim().length < 2) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(payerQuery.trim())\n .then((results) => {\n if (current) setPayerResults(results);\n })\n .catch((cause) => {\n if (current) {\n setPayerResults([]);\n setError(\n cause instanceof Error\n ? cause.message\n : \"Claims administrator search is unavailable.\",\n );\n }\n })\n .finally(() => {\n if (current) setPayerBusy(false);\n });\n }, 200);\n return () => {\n current = false;\n window.clearTimeout(timer);\n };\n }, [onSearchClaimsAdministrators, payerQuery]);\n\n const canSubmit = useMemo(\n () =>\n Boolean(\n draft.dos &&\n draft.claimsAdminId &&\n draft.billingProvider.name.trim() &&\n draft.billingProvider.taxId.trim() &&\n draft.billingProvider.npi.trim() &&\n draft.clinician.name.trim() &&\n draft.clinician.npi.trim() &&\n draft.location.name.trim() &&\n draft.location.street.trim() &&\n draft.location.city.trim() &&\n draft.location.state.trim() &&\n draft.location.zip.trim() &&\n draft.lineItems.length &&\n draft.lineItems.every((line) => line.code.trim() && line.units > 0),\n ),\n [draft],\n );\n\n const updateBillingProvider = <K extends keyof BillReviewBillingProvider>(\n key: K,\n value: BillReviewBillingProvider[K],\n ) =>\n setDraft((current) => ({\n ...current,\n billingProvider: { ...current.billingProvider, [key]: value },\n }));\n const updateClinician = <K extends keyof BillReviewClinician>(\n key: K,\n value: BillReviewClinician[K],\n ) =>\n setDraft((current) => ({\n ...current,\n clinician: { ...current.clinician, [key]: value },\n }));\n const updateLocation = <K extends keyof BillReviewLocation>(\n key: K,\n value: BillReviewLocation[K],\n ) =>\n setDraft((current) => ({\n ...current,\n location: { ...current.location, [key]: value },\n }));\n\n async function run(action: \"save\" | \"submit\", task: () => Promise<void>) {\n setBusy(action);\n setError(\"\");\n setNotice(\"\");\n try {\n await task();\n setNotice(action === \"save\" ? \"Changes saved.\" : \"Bill submitted.\");\n } catch (cause) {\n setError(\n cause instanceof Error\n ? cause.message\n : \"The billing request could not be completed.\",\n );\n } finally {\n setBusy(\"\");\n }\n }\n\n const handleSave = (event: FormEvent) => {\n event.preventDefault();\n void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const handleSubmit = () =>\n run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), route));\n\n const attach = async () => {\n if (!file) return;\n setBusy(\"attachment\");\n setError(\"\");\n try {\n await onAddAttachment(file, documentType, DOCUMENT_LABELS[documentType]);\n setFile(null);\n setDocumentType(\"other\");\n setNotice(\"Document added to the payer packet.\");\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Document could not be attached.\");\n } finally {\n setBusy(\"\");\n }\n };\n\n const sectionClass = \"mb-native-section\";\n return (\n <form\n className={[\"mb-native-review\", className].filter(Boolean).join(\" \")}\n style={appearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <header className=\"mb-native-heading\">\n <div>\n <span className=\"mb-native-eyebrow\">Billing review</span>\n <h2>Bill #{data.bill.billNumber}</h2>\n <p>Review the prefilled claim and payer packet, then submit.</p>\n </div>\n <div className=\"mb-native-total\">\n <span>{data.bill.status}</span>\n <strong>{money(data.bill.totalCharge)}</strong>\n </div>\n </header>\n\n <dl className=\"mb-native-summary\">\n <div><dt>Patient</dt><dd>{data.patient.name || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{data.injury.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{data.injury.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{data.injury.doi || \"—\"}</dd></div>\n </dl>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\">\n <div>\n <h3>Claims administrator</h3>\n <p>Select the carrier or administrator that should receive this bill.</p>\n </div>\n {draft.claimsAdminId ? <span>Selected</span> : <span>Required</span>}\n </div>\n <div className=\"mb-native-payer-picker\">\n <label className=\"mb-native-field\">\n <span>Insurance company or claims administrator</span>\n <input\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={payerListId}\n aria-expanded={payerResults.length > 0}\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n onChange={(event) => {\n const value = event.target.value;\n setPayerQuery(value);\n setDraft((current) => ({\n ...current,\n ...(value === current.claimsAdminName\n ? {}\n : { claimsAdminId: \"\", claimsAdminName: \"\" }),\n }));\n }}\n />\n </label>\n {payerBusy ? <span className=\"mb-native-payer-help\">Searching…</span> : null}\n {!payerBusy && payerQuery.trim().length > 1 && payerResults.length === 0 && !draft.claimsAdminId ? (\n <span className=\"mb-native-payer-help\">No matching administrator selected yet.</span>\n ) : null}\n {payerResults.length > 0 ? (\n <ul id={payerListId} className=\"mb-native-payer-results\" role=\"listbox\">\n {payerResults.map((payer) => (\n <li key={payer.id} role=\"option\" aria-selected={payer.id === draft.claimsAdminId}>\n <button\n type=\"button\"\n onClick={() => {\n setDraft((current) => ({\n ...current,\n claimsAdminId: payer.id,\n claimsAdminName: payer.name,\n }));\n setPayerQuery(payer.name);\n setPayerResults([]);\n }}\n >\n <strong>{payer.name}</strong>\n <span>{payer.hasElectronic ? \"Electronic billing available\" : \"Billing route confirmed after review\"}</span>\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Claim and service</h3><p>These values print on the bill.</p></div></div>\n <div className={`mb-native-grid ${features?.authorizationNumber === false ? \"two\" : \"three\"}`}>\n <Field label=\"Date of service\" type=\"date\" required value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n <Field label=\"End date\" type=\"date\" optional value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} />\n {features?.authorizationNumber === false ? null : <Field label=\"Authorization number\" optional value={draft.authorizationNumber} onChange={(authorizationNumber) => setDraft((current) => ({ ...current, authorizationNumber }))} />}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Billing practice</h3><p>Payee identity and billing address for this claim.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <Field label=\"Tax ID\" required value={draft.billingProvider.taxId} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required value={draft.billingProvider.billingCity || \"\"} onChange={(value) => updateBillingProvider(\"billingCity\", value)} />\n <Field label=\"State\" required value={draft.billingProvider.billingState || \"\"} onChange={(value) => updateBillingProvider(\"billingState\", value)} />\n <Field label=\"ZIP\" required value={draft.billingProvider.billingZip || \"\"} onChange={(value) => updateBillingProvider(\"billingZip\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Clinician</h3><p>Provider identity printed on the claim.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional value={draft.clinician.licenseNumber || \"\"} onChange={(value) => updateClinician(\"licenseNumber\", value)} />\n <Field label=\"License state\" optional value={draft.clinician.licenseState || \"\"} onChange={(value) => updateClinician(\"licenseState\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service location</h3><p>The exact place of service for this bill.</p></div><span>Prefilled</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required value={draft.location.city} onChange={(value) => updateLocation(\"city\", value)} />\n <Field label=\"State\" required value={draft.location.state} onChange={(value) => updateLocation(\"state\", value)} />\n <Field label=\"ZIP\" required value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required value={draft.location.posCode || \"11\"} onChange={(value) => updateLocation(\"posCode\", value)} />\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Procedure lines</h3><p>The allowed amount is recalculated when changes are saved.</p></div><button type=\"button\" className=\"mb-native-button quiet\" disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: [...current.lineItems, { code: \"\", modifiers: [], units: 1, charge: 0 }] }))}>+ Add line</button></div>\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className=\"mb-native-line\" key={line.id || index}>\n <Field label=\"Procedure\" required value={line.code} onChange={(value) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code: value } : item) }))} />\n <Field label=\"Modifiers\" value={line.modifiers.join(\", \")} onChange={(value) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: value.split(\",\").map((part) => part.trim()).filter(Boolean) } : item) }))} />\n <label className=\"mb-native-field\"><span>Units</span><input type=\"number\" min=\"1\" required value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item) }))} /></label>\n <div className=\"mb-native-allowed\"><span>Allowed</span><strong>{money(line.charge)}</strong></div>\n <button type=\"button\" className=\"mb-native-remove\" aria-label={`Remove ${line.code || \"procedure\"}`} disabled={!editable || draft.lineItems.length === 1} onClick={() => setDraft((current) => ({ ...current, lineItems: current.lineItems.filter((_, itemIndex) => itemIndex !== index) }))}>×</button>\n </div>\n ))}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Payer billing packet</h3><p>Review exactly what will be sent with this bill.</p></div><span>{data.bill.attachments.length} files</span></div>\n <div className=\"mb-native-note\"><strong>Separate from attorney report service.</strong> Final reports, proof of service, and required billing forms may be preselected. Medical records are never silently attached.</div>\n <ul className=\"mb-native-documents\">\n {data.bill.attachments.map((attachment) => (\n <li key={attachment.id}>\n <span className=\"mb-native-file\">PDF</span>\n <div><strong>{attachment.filename}</strong><span>{DOCUMENT_LABELS[attachment.documentType as BillReviewDocumentType] || attachment.description || \"Supporting document\"}</span></div>\n {onOpenAttachment ? <button type=\"button\" className=\"mb-native-button quiet\" onClick={() => onOpenAttachment(attachment)}>View</button> : null}\n <button type=\"button\" className=\"mb-native-remove\" disabled={!editable || busy === \"attachment\"} aria-label={`Remove ${attachment.filename}`} onClick={() => void onRemoveAttachment(attachment.id).catch((cause) => setError(cause instanceof Error ? cause.message : \"Document could not be removed.\"))}>×</button>\n </li>\n ))}\n </ul>\n <div className=\"mb-native-attach\">\n <div><strong>Add supporting PDF</strong><span>Choose any additional document intentionally. Up to 25 MB.</span></div>\n <select aria-label=\"Document type\" value={documentType} disabled={!editable} onChange={(event) => setDocumentType(event.target.value as BillReviewDocumentType)}>{Object.entries(DOCUMENT_LABELS).map(([value, label]) => <option key={value} value={value}>{label}</option>)}</select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={!editable} onChange={(event) => setFile(event.target.files?.[0] || null)} />\n <button className=\"mb-native-button secondary\" type=\"button\" disabled={!editable || !file || busy === \"attachment\"} onClick={() => void attach()}>{busy === \"attachment\" ? \"Attaching…\" : \"Attach document\"}</button>\n </div>\n </section>\n\n <section className=\"mb-native-submit\">\n <div><span className=\"mb-native-eyebrow\">Delivery</span><h3>Submit this bill</h3><p>After submission, status, payments, denials, and resubmissions stay available here.</p></div>\n <fieldset><legend>Send via</legend>{([\"ebill\", \"fax\", \"mail\", \"email\"] as const).map((value) => <label key={value}><input type=\"radio\" name={routeName} value={value} checked={route === value} onChange={() => setRoute(value)} />{value === \"ebill\" ? \"E-bill\" : value.charAt(0).toUpperCase() + value.slice(1)}</label>)}</fieldset>\n {error ? <div className=\"mb-native-message error\" role=\"alert\">{error}</div> : null}\n {notice ? <div className=\"mb-native-message success\" role=\"status\">{notice}</div> : null}\n <div className=\"mb-native-actions\">\n <button className=\"mb-native-button secondary\" type=\"submit\" disabled={!editable || busy !== \"\"}>{busy === \"save\" ? \"Saving…\" : \"Save changes\"}</button>\n <button className=\"mb-native-button primary\" type=\"button\" disabled={!editable || !canSubmit || busy !== \"\"} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button>\n </div>\n </section>\n </form>\n );\n}\n\nexport type BillStatusSummaryProps = {\n status: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n actions?: BillStatusAction[];\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillAppearance;\n};\n\nexport type BillStatusAction = {\n id: string;\n label: string;\n onClick: () => void;\n primary?: boolean;\n disabled?: boolean;\n};\n\nexport function BillStatusSummary({ status, submittedAt, agingDays, updatedAt, totalCharge, totalPaid, balanceDue, actions = [], className, style, appearance }: BillStatusSummaryProps): ReactElement {\n return <section className={[\"mb-native-status\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <div className=\"mb-native-status-copy\"><span className=\"mb-native-eyebrow\">Bill status</span><h3>{status.replaceAll(\"_\", \" \")}</h3><p>{submittedAt ? `Submitted ${new Date(submittedAt).toLocaleDateString()}` : \"Not submitted\"}{agingDays == null ? \"\" : ` · ${agingDays} day${agingDays === 1 ? \"\" : \"s\"} old`}{updatedAt ? ` · Updated ${new Date(updatedAt).toLocaleDateString()}` : \"\"}</p></div>\n <dl><div><dt>Charged</dt><dd>{money(totalCharge)}</dd></div><div><dt>Paid</dt><dd>{money(totalPaid)}</dd></div><div><dt>Balance</dt><dd>{money(balanceDue)}</dd></div></dl>\n {actions.length ? <div className=\"mb-native-status-actions\">{actions.map((action) => <button key={action.id} type=\"button\" className={`mb-native-button ${action.primary ? \"primary\" : \"secondary\"}`} disabled={action.disabled} onClick={action.onClick}>{action.label}</button>)}</div> : null}\n </section>;\n}\n\nconst NATIVE_BILL_REVIEW_STYLES = `\n.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review,.mb-native-status{--mb-accent:#238dbd;--mb-accent-dark:#176f98;--mb-text:#203743;--mb-muted:#657982;--mb-border:#dbe6ea;--mb-soft:#f3f8fa;--mb-surface:#fff;color:var(--mb-text);font:14px/1.45 Inter,ui-sans-serif,system-ui,sans-serif}.mb-native-review *,.mb-native-status *{box-sizing:border-box}.mb-native-review{display:grid;gap:16px}.mb-native-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:6px 2px}.mb-native-heading h2,.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{margin:3px 0 2px;line-height:1.2}.mb-native-heading h2{font-size:25px}.mb-native-heading p,.mb-native-section p,.mb-native-submit p,.mb-native-status p{margin:0;color:var(--mb-muted)}.mb-native-eyebrow{color:#59727d;font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.mb-native-total{display:flex;align-items:center;gap:18px}.mb-native-total span,.mb-native-section-head>span{border-radius:999px;background:var(--mb-soft);color:#58717c;font-size:11px;font-weight:800;padding:6px 10px;text-transform:capitalize}.mb-native-total strong{font-size:24px}.mb-native-summary{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);overflow:hidden}.mb-native-summary div{padding:17px 20px;border-right:1px solid var(--mb-border)}.mb-native-summary div:last-child{border:0}.mb-native-summary dt,.mb-native-allowed span{color:#647982;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mb-native-summary dd{margin:5px 0 0;font-weight:750}.mb-native-section{padding:20px;border:1px solid var(--mb-border);border-radius:14px;background:var(--mb-surface);box-shadow:0 8px 24px rgba(28,58,72,.04)}.mb-native-section-head{display:flex;align-items:start;justify-content:space-between;gap:16px;margin-bottom:17px}.mb-native-section h3,.mb-native-submit h3,.mb-native-status h3{font-size:19px}.mb-native-grid{display:grid;gap:14px}.mb-native-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}.mb-native-field{display:grid;gap:6px;min-width:0;color:var(--mb-text);font-size:12px;font-weight:750}.mb-native-field small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-native-field input,.mb-native-attach select,.mb-native-attach input{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 12px}.mb-native-field input:focus,.mb-native-attach select:focus,.mb-native-attach input:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}.mb-native-lines{display:grid;gap:10px}.mb-native-line{display:grid;grid-template-columns:1.1fr 1.1fr 110px 120px 28px;align-items:end;gap:12px;padding:13px;background:var(--mb-soft);border:1px solid #e3edf0;border-radius:10px}.mb-native-allowed{display:grid;gap:5px;padding:0 8px 11px;text-align:right}.mb-native-allowed strong{font-size:16px}.mb-native-remove{border:0;background:transparent;color:#667d86;cursor:pointer;font-size:20px;padding:7px}.mb-native-note{padding:13px 15px;border:1px solid #bdd9e4;border-radius:9px;background:#f2f9fc;color:#526d78}.mb-native-note strong{color:var(--mb-text);margin-right:12px}.mb-native-documents{list-style:none;margin:14px 0;padding:0}.mb-native-documents li{display:grid;grid-template-columns:42px 1fr auto 28px;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--mb-border)}.mb-native-documents li>div{display:grid}.mb-native-documents li span{color:var(--mb-muted);font-size:12px}.mb-native-file{display:grid;place-items:center;width:40px;height:40px;border-radius:8px;background:#eaf5f9;color:var(--mb-accent)!important;font-size:11px!important;font-weight:850}.mb-native-attach{display:grid;grid-template-columns:1fr 230px minmax(220px,1fr) auto;align-items:end;gap:12px;padding:15px;border-radius:10px;background:var(--mb-soft)}.mb-native-attach>div{display:grid;gap:3px}.mb-native-attach span{color:var(--mb-muted);font-size:12px}.mb-native-button{min-height:40px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-native-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-button.primary:hover{background:var(--mb-accent-dark)}.mb-native-button.secondary{background:#fff}.mb-native-button.quiet{min-height:auto;background:var(--mb-soft);padding:7px 11px}.mb-native-button:disabled,.mb-native-remove:disabled{cursor:not-allowed;opacity:.5}.mb-native-submit{display:grid;grid-template-columns:1fr auto;align-items:end;gap:18px;padding:22px;border:1px solid #bcd8e2;border-radius:14px;background:linear-gradient(135deg,#f3fafc,#eaf6fa)}.mb-native-submit fieldset{display:flex;gap:6px;margin:0;padding:0;border:0}.mb-native-submit legend{position:absolute;width:1px;height:1px;overflow:hidden}.mb-native-submit fieldset label{display:flex;align-items:center;gap:6px;padding:9px 11px;border:1px solid #c9dce3;border-radius:8px;background:#fff;font-weight:700}.mb-native-actions{display:flex;justify-content:flex-end;gap:10px;grid-column:1/-1}.mb-native-message{grid-column:1/-1;padding:10px 12px;border-radius:8px}.mb-native-message.error{background:#fff0ef;color:#9d3029}.mb-native-message.success{background:#edf9f2;color:#217449}.mb-native-status{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:20px;border:1px solid var(--mb-border);border-radius:12px;background:#fff}.mb-native-status h3{text-transform:capitalize}.mb-native-status dl{display:flex;margin:0}.mb-native-status dl div{min-width:110px;padding:0 18px;border-left:1px solid var(--mb-border)}.mb-native-status dt{color:var(--mb-muted);font-size:11px}.mb-native-status dd{margin:4px 0 0;font-size:17px;font-weight:800}@media(max-width:900px){.mb-native-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-summary{grid-template-columns:repeat(2,1fr)}.mb-native-summary div:nth-child(2){border-right:0}.mb-native-summary div:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mb-native-line{grid-template-columns:1fr 1fr 90px}.mb-native-allowed{align-self:center}.mb-native-attach{grid-template-columns:1fr 1fr}.mb-native-submit{grid-template-columns:1fr}.mb-native-submit fieldset,.mb-native-actions{grid-column:1}.mb-native-actions{justify-content:start}}@media(max-width:620px){.mb-native-heading,.mb-native-total,.mb-native-status{align-items:start;flex-direction:column}.mb-native-grid.three,.mb-native-summary,.mb-native-line,.mb-native-attach{grid-template-columns:1fr}.mb-native-summary div,.mb-native-summary div:nth-child(2){border-right:0;border-bottom:1px solid var(--mb-border)}.mb-native-line{align-items:stretch}.mb-native-allowed{text-align:left}.mb-native-submit fieldset{display:grid;grid-template-columns:1fr 1fr}.mb-native-status dl{width:100%}.mb-native-status dl div{min-width:0;flex:1;padding:0 10px}.mb-native-status dl div:first-child{padding-left:0;border-left:0}}\n.mb-native-status-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}.mb-native-status-copy{min-width:150px}.mb-native-review,.mb-native-status{font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{padding:clamp(16px,2vw,24px)}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-payer-picker{position:relative;max-width:760px}\n.mb-native-payer-help{display:block;margin-top:7px;color:var(--mb-muted);font-size:12px}\n.mb-native-payer-results{position:absolute;z-index:5;top:calc(100% + 6px);right:0;left:0;max-height:280px;overflow:auto;list-style:none;margin:0;padding:6px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);box-shadow:0 16px 40px rgba(28,58,72,.16)}\n.mb-native-payer-results li{margin:0;padding:0}\n.mb-native-payer-results button{display:grid;width:100%;gap:2px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}\n.mb-native-payer-results button:hover,.mb-native-payer-results button:focus{background:var(--mb-soft);outline:0}\n.mb-native-payer-results span{color:var(--mb-muted);font-size:12px}\n@media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}\n`;\n","\"use client\";\n\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillStatusSummary,\n type BillStatusSummaryProps,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/status-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillStatusData = {\n billId: string;\n state: string;\n nativeStatus: string;\n submittedAt: string | null;\n agingDays: number | null;\n updatedAt: string | null;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n};\n\nexport type BillStatusSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillStatusSessionRequest = {\n billId: string;\n signal: AbortSignal;\n};\n\nexport type BillStatusSessionProvider = (\n request: BillStatusSessionRequest,\n) => Promise<BillStatusSession>;\n\nexport type BillStatusClientOptions = {\n billId: string;\n /** Same-origin route that mints a short-lived, bill-scoped browser session. */\n sessionEndpoint?: string;\n /** Advanced escape hatch for non-HTTP session exchange. */\n getSession?: BillStatusSessionProvider;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n};\n\nexport type BillStatusClient = {\n getStatus: (signal?: AbortSignal) => Promise<BillStatusData>;\n clearSession: () => void;\n};\n\nexport type UseBillStatusOptions = BillStatusClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillStatusData | null;\n};\n\nexport type UseBillStatusResult = {\n data: BillStatusData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n refresh: () => Promise<void>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; error?: unknown }).detail\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillStatusSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillStatusSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The MindBill session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\"The MindBill session endpoint did not return a browser session token.\");\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeStatus(value: unknown, billId: string): BillStatusData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n const status = value as Partial<BillStatusData>;\n const amounts = [status.totalCharge, status.totalPaid, status.balanceDue];\n if (\n typeof status.state !== \"string\"\n || amounts.some(\n (amount) => typeof amount !== \"number\" || !Number.isFinite(amount),\n )\n ) {\n throw new Error(\"MindBill returned an invalid bill status.\");\n }\n return {\n billId: typeof status.billId === \"string\" ? status.billId : billId,\n state: status.state,\n nativeStatus: typeof status.nativeStatus === \"string\"\n ? status.nativeStatus\n : status.state,\n submittedAt: typeof status.submittedAt === \"string\"\n ? status.submittedAt\n : null,\n agingDays: typeof status.agingDays === \"number\" ? status.agingDays : null,\n updatedAt: typeof status.updatedAt === \"string\" ? status.updatedAt : null,\n totalCharge: status.totalCharge as number,\n totalPaid: status.totalPaid as number,\n balanceDue: status.balanceDue as number,\n };\n}\n\n/**\n * Browser-safe status client used by useBillStatus. It exchanges the user's\n * authenticated same-origin session for a short-lived MindBill token, then\n * reads status directly from MindBill. It never accepts a Partner API key.\n */\nexport function createBillStatusClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillStatusClientOptions): BillStatusClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillStatusSession | null = null;\n let sessionRequest: Promise<BillStatusSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillStatusSession> => {\n if (!force && isSessionFresh(session)) return session as BillStatusSession;\n if (!force && sessionRequest) return sessionRequest;\n\n const pending = getSession\n ? getSession({ billId, signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"MindBill browser session could not be created.\",\n );\n }\n return response.json();\n });\n\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const requestStatus = async (\n browserSession: BillStatusSession,\n signal: AbortSignal,\n ): Promise<Response> => {\n const baseUrl = (browserSession.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n return fetcher(`${baseUrl}/embed/api/bill-timeline`, {\n headers: { authorization: `Bearer ${browserSession.token}` },\n signal,\n });\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n async getStatus(providedSignal) {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n let response = await requestStatus(browserSession, signal);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await requestStatus(browserSession, signal);\n }\n if (!response.ok) {\n throw await responseError(response, \"Bill status could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeStatus(body.data, billId);\n },\n };\n}\n\nexport function useBillStatus({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n fetch: fetchOverride,\n}: UseBillStatusOptions): UseBillStatusResult {\n const client = useMemo(() => createBillStatusClient({\n billId,\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n apiBaseUrl,\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n const [data, setData] = useState<BillStatusData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const dataRef = useRef<BillStatusData | null>(initialData);\n const initialDataRef = useRef<BillStatusData | null>(initialData);\n initialDataRef.current = initialData;\n const activeControllerRef = useRef<AbortController | null>(null);\n const requestSequence = useRef(0);\n\n useEffect(() => {\n const seed = initialDataRef.current;\n dataRef.current = seed;\n setData(seed);\n setError(null);\n setIsLoading(enabled && !seed);\n activeControllerRef.current?.abort();\n return () => activeControllerRef.current?.abort();\n }, [client, enabled]);\n\n const load = useCallback(async () => {\n if (!enabled || !billId) return;\n const sequence = ++requestSequence.current;\n activeControllerRef.current?.abort();\n const controller = new AbortController();\n activeControllerRef.current = controller;\n if (dataRef.current) setIsRefreshing(true);\n else setIsLoading(true);\n setError(null);\n\n try {\n const nextData = await client.getStatus(controller.signal);\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n dataRef.current = nextData;\n setData(nextData);\n }\n } catch (cause) {\n if (controller.signal.aborted) return;\n if (sequence === requestSequence.current) {\n setError(\n cause instanceof Error\n ? cause\n : new Error(\"Bill status could not be loaded.\"),\n );\n }\n } finally {\n if (activeControllerRef.current === controller) {\n activeControllerRef.current = null;\n }\n if (!controller.signal.aborted && sequence === requestSequence.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [billId, client, enabled]);\n\n useEffect(() => {\n if (enabled) void load();\n }, [enabled, load]);\n\n useEffect(() => {\n if (!enabled || refreshInterval <= 0) return;\n const timer = window.setInterval(() => void load(), refreshInterval);\n const onFocus = () => void load();\n const onVisibility = () => {\n if (document.visibilityState === \"visible\") void load();\n };\n window.addEventListener(\"focus\", onFocus);\n document.addEventListener(\"visibilitychange\", onVisibility);\n return () => {\n window.clearInterval(timer);\n window.removeEventListener(\"focus\", onFocus);\n document.removeEventListener(\"visibilitychange\", onVisibility);\n };\n }, [enabled, load, refreshInterval]);\n\n return { data, error, isLoading, isRefreshing, refresh: load };\n}\n\nexport type ConnectedBillStatusProps = UseBillStatusOptions & {\n actions?: BillStatusSummaryProps[\"actions\"];\n appearance?: BillStatusSummaryProps[\"appearance\"];\n className?: string;\n style?: BillStatusSummaryProps[\"style\"];\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n};\n\nexport function ConnectedBillStatus({\n actions,\n appearance,\n className,\n style,\n loadingFallback,\n errorFallback,\n ...options\n}: ConnectedBillStatusProps): ReactElement | null {\n const status = useBillStatus(options);\n if (status.isLoading && !status.data) {\n return <>{loadingFallback ?? <div role=\"status\">Loading bill status…</div>}</>;\n }\n if (status.error && !status.data) {\n return <>{errorFallback?.(status.error, status.refresh) ?? (\n <div role=\"alert\">\n {status.error.message}{\" \"}\n <button type=\"button\" onClick={() => void status.refresh()}>Retry</button>\n </div>\n )}</>;\n }\n if (!status.data) return null;\n return <BillStatusSummary\n status={status.data.state}\n submittedAt={status.data.submittedAt}\n agingDays={status.data.agingDays}\n updatedAt={status.data.updatedAt}\n totalCharge={status.data.totalCharge}\n totalPaid={status.data.totalPaid}\n balanceDue={status.data.balanceDue}\n {...(actions ? { actions } : {})}\n {...(appearance ? { appearance } : {})}\n {...(className ? { className } : {})}\n {...(style ? { style } : {})}\n />;\n}\n","\"use client\";\n\nimport type { MindBillAppearance } from \"@mindbill/embed\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n BillReviewForm,\n BillStatusSummary,\n type BillReviewAttachment,\n type BillReviewData,\n type BillReviewDocumentType,\n type BillReviewFeatures,\n type BillReviewPayer,\n type BillReviewSaveInput,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\n\nconst DEFAULT_API_BASE_URL = \"https://app.mindbill.org\";\nconst DEFAULT_SESSION_ENDPOINT = \"/api/mindbill/bill-session\";\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type BillLifecycleActionId =\n | \"edit_and_submit\"\n | \"correct_and_resubmit\"\n | \"second_review\"\n | \"independent_bill_review\"\n | \"view_eor\"\n | \"post_payment\"\n | \"close\";\n\nexport type BillLifecycleAction = {\n id: BillLifecycleActionId;\n label: string;\n enabled: boolean;\n primary?: boolean;\n reason?: string;\n};\n\nexport type BillEorDocument = {\n id: string;\n filename: string;\n description: string | null;\n addedAt: string;\n contentUrl: string;\n};\n\nexport type BillLifecycleData = BillReviewData & {\n lifecycle: {\n state: string;\n nativeStatus: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n updatedAt?: string | null;\n actions: BillLifecycleAction[];\n };\n eors: BillEorDocument[];\n};\n\nexport type BillLifecycleSession = {\n token: string;\n expiresAt?: string;\n apiBaseUrl?: string;\n};\n\nexport type BillLifecycleSessionRequest = {\n billId: string;\n component: \"bill-review\";\n signal: AbortSignal;\n};\n\nexport type BillLifecycleSessionProvider = (\n request: BillLifecycleSessionRequest,\n) => Promise<BillLifecycleSession>;\n\nexport type CloseBillInput = { reason: string };\nexport type PostBillPaymentInput = {\n amount: number;\n method: \"check\" | \"eft\";\n checkNumber?: string;\n depositDate: string;\n note?: string;\n};\nexport type SubmitSecondReviewInput = {\n reason: string;\n payerClaimControlNumber: string;\n disputedAmount: number | undefined;\n attachmentIds: string[];\n route: BillSubmissionRoute;\n};\n\nexport type BillLifecycleClientOptions = {\n billId: string;\n /** Same-origin server route that mints a short-lived, bill-scoped session. */\n sessionEndpoint?: string | undefined;\n /** Advanced escape hatch for a custom session exchange. */\n getSession?: BillLifecycleSessionProvider | undefined;\n apiBaseUrl?: string | undefined;\n fetch?: typeof globalThis.fetch | undefined;\n};\n\nexport type BillLifecycleClient = {\n getLifecycle: (signal?: AbortSignal) => Promise<BillLifecycleData>;\n searchClaimsAdministrators: (query: string) => Promise<BillReviewPayer[]>;\n saveReview: (input: BillReviewSaveInput) => Promise<BillLifecycleData>;\n submitBill: (\n input: BillReviewSaveInput,\n route: BillSubmissionRoute,\n ) => Promise<BillLifecycleData>;\n addAttachment: (\n file: File,\n documentType: BillReviewDocumentType,\n description?: string,\n ) => Promise<BillLifecycleData>;\n removeAttachment: (attachmentId: string) => Promise<BillLifecycleData>;\n getAttachment: (attachmentId: string) => Promise<Blob>;\n getEor: (documentId: string) => Promise<Blob>;\n closeBill: (input: CloseBillInput) => Promise<BillLifecycleData>;\n postPayment: (input: PostBillPaymentInput) => Promise<BillLifecycleData>;\n submitSecondReview: (\n input: SubmitSecondReviewInput,\n ) => Promise<BillLifecycleData>;\n startCorrection: () => Promise<{\n replacementBillId: string;\n data: BillLifecycleData;\n }>;\n clearSession: () => void;\n};\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\n onBillIdChange?: (\n billId: string,\n previousBillId: string,\n ) => void | Promise<void>;\n};\n\nexport type UseBillLifecycleResult = {\n billId: string;\n data: BillLifecycleData | null;\n error: Error | null;\n isLoading: boolean;\n isRefreshing: boolean;\n isMutating: boolean;\n refresh: () => Promise<void>;\n searchClaimsAdministrators: BillLifecycleClient[\"searchClaimsAdministrators\"];\n saveReview: BillLifecycleClient[\"saveReview\"];\n submitBill: BillLifecycleClient[\"submitBill\"];\n addAttachment: BillLifecycleClient[\"addAttachment\"];\n removeAttachment: BillLifecycleClient[\"removeAttachment\"];\n openAttachment: (attachment: BillReviewAttachment) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n startCorrection: () => Promise<BillLifecycleData>;\n};\n\nasync function responseError(\n response: Response,\n fallback: string,\n): Promise<Error> {\n const body: unknown = await response.json().catch(() => null);\n const detail = body && typeof body === \"object\"\n ? (body as { detail?: unknown; message?: unknown; error?: unknown }).detail\n ?? (body as { message?: unknown }).message\n ?? (body as { error?: unknown }).error\n : null;\n return new Error(typeof detail === \"string\" ? detail : fallback);\n}\n\nfunction isSessionFresh(session: BillLifecycleSession | null): boolean {\n if (!session) return false;\n if (!session.expiresAt) return true;\n const expiresAt = new Date(session.expiresAt).getTime();\n return Number.isFinite(expiresAt) && expiresAt > Date.now() + 30_000;\n}\n\nfunction normalizeSession(value: unknown): BillLifecycleSession {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing session endpoint returned an invalid response.\");\n }\n const candidate = value as {\n token?: unknown;\n expiresAt?: unknown;\n apiBaseUrl?: unknown;\n session?: unknown;\n data?: unknown;\n };\n const nested = candidate.session ?? candidate.data;\n const session = nested && typeof nested === \"object\"\n ? nested as typeof candidate\n : candidate;\n if (typeof session.token !== \"string\" || session.token.length < 8) {\n throw new Error(\n \"The billing session endpoint did not return a browser session token.\",\n );\n }\n return {\n token: session.token,\n ...(typeof session.expiresAt === \"string\"\n ? { expiresAt: session.expiresAt }\n : {}),\n ...(typeof session.apiBaseUrl === \"string\"\n ? { apiBaseUrl: session.apiBaseUrl }\n : {}),\n };\n}\n\nfunction normalizeLifecycle(value: unknown): BillLifecycleData {\n if (!value || typeof value !== \"object\") {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n const data = value as Partial<BillLifecycleData>;\n if (\n !data.bill\n || !data.patient\n || !data.injury\n || !data.lifecycle\n || !Array.isArray(data.lifecycle.actions)\n || !Array.isArray(data.eors)\n ) {\n throw new Error(\"The billing service returned an invalid bill lifecycle.\");\n }\n return data as BillLifecycleData;\n}\n\nfunction idempotencyKey(): string {\n if (typeof globalThis.crypto?.randomUUID === \"function\") {\n return globalThis.crypto.randomUUID();\n }\n return `mb-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n}\n\n/**\n * Browser-safe client for the complete bill lifecycle. The only long-lived\n * secret remains on the partner server; this client uses a short-lived,\n * origin-bound session scoped to one bill.\n */\nexport function createBillLifecycleClient({\n billId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n fetch: fetchOverride,\n}: BillLifecycleClientOptions): BillLifecycleClient {\n const fetcher = fetchOverride ?? globalThis.fetch;\n if (typeof fetcher !== \"function\") {\n throw new Error(\"A Fetch API implementation is required.\");\n }\n let session: BillLifecycleSession | null = null;\n let sessionRequest: Promise<BillLifecycleSession> | null = null;\n\n const mintSession = async (\n signal: AbortSignal,\n force = false,\n ): Promise<BillLifecycleSession> => {\n if (!force && isSessionFresh(session)) return session as BillLifecycleSession;\n if (!force && sessionRequest) return sessionRequest;\n const pending = getSession\n ? getSession({ billId, component: \"bill-review\", signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ billId, component: \"bill-review\" }),\n signal,\n }).then(async (response) => {\n if (!response.ok) {\n throw await responseError(\n response,\n \"The billing session could not be created.\",\n );\n }\n return response.json();\n });\n const request = Promise.resolve(pending)\n .then(normalizeSession)\n .then((nextSession) => {\n session = nextSession;\n return nextSession;\n })\n .finally(() => {\n if (sessionRequest === request) sessionRequest = null;\n });\n sessionRequest = request;\n return request;\n };\n\n const request = async (\n path: string,\n init: RequestInit = {},\n providedSignal?: AbortSignal,\n ): Promise<Response> => {\n const controller = providedSignal ? null : new AbortController();\n const signal = providedSignal ?? controller?.signal;\n if (!signal) throw new Error(\"An AbortSignal could not be created.\");\n let browserSession = await mintSession(signal);\n const perform = (current: BillLifecycleSession) => {\n const base = (current.apiBaseUrl ?? apiBaseUrl).replace(/\\/$/, \"\");\n const headers = new Headers(init.headers);\n headers.set(\"authorization\", `Bearer ${current.token}`);\n return fetcher(`${base}${path}`, { ...init, headers, signal });\n };\n let response = await perform(browserSession);\n if (response.status === 401) {\n session = null;\n browserSession = await mintSession(signal, true);\n response = await perform(browserSession);\n }\n return response;\n };\n\n const loadLifecycle = async (signal?: AbortSignal) => {\n const response = await request(\"/embed/api/bill-lifecycle\", {}, signal);\n if (!response.ok) {\n throw await responseError(response, \"Bill lifecycle could not be loaded.\");\n }\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const searchClaimsAdministrators = async (\n query: string,\n ): Promise<BillReviewPayer[]> => {\n const response = await request(\n `/embed/api/bill-review/payers?q=${encodeURIComponent(query)}`,\n );\n if (!response.ok) {\n throw await responseError(\n response,\n \"Claims administrator search is unavailable.\",\n );\n }\n const body = await response.json() as { results?: unknown };\n if (!Array.isArray(body.results)) {\n throw new Error(\"Claims administrator search returned an invalid response.\");\n }\n return body.results.flatMap((value): BillReviewPayer[] => {\n if (!value || typeof value !== \"object\") return [];\n const payer = value as Partial<BillReviewPayer>;\n if (typeof payer.id !== \"string\" || typeof payer.name !== \"string\") {\n return [];\n }\n return [{\n id: payer.id,\n name: payer.name,\n ...(typeof payer.hasElectronic === \"boolean\"\n ? { hasElectronic: payer.hasElectronic }\n : {}),\n ...(Array.isArray(payer.states)\n ? { states: payer.states.filter((state): state is string => typeof state === \"string\") }\n : {}),\n }];\n });\n };\n\n const mutation = async (\n path: string,\n init: RequestInit,\n fallback: string,\n ) => {\n const headers = new Headers(init.headers);\n headers.set(\"idempotency-key\", idempotencyKey());\n const response = await request(path, { ...init, headers });\n if (!response.ok) throw await responseError(response, fallback);\n return response;\n };\n\n const action = async (\n input: Record<string, unknown>,\n fallback: string,\n ): Promise<BillLifecycleData> => {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n fallback,\n );\n const body = await response.json() as { data?: unknown };\n return normalizeLifecycle(body.data);\n };\n\n const saveReview = async (\n input: BillReviewSaveInput,\n ): Promise<BillLifecycleData> => {\n await mutation(\n \"/embed/api/bill-review\",\n {\n method: \"PATCH\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n },\n \"Bill changes could not be saved.\",\n );\n return loadLifecycle();\n };\n\n return {\n clearSession() {\n session = null;\n sessionRequest = null;\n },\n getLifecycle: loadLifecycle,\n searchClaimsAdministrators,\n saveReview,\n async submitBill(input, route) {\n await saveReview(input);\n await mutation(\n \"/embed/api/bill-review/submit\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ route }),\n },\n \"Bill could not be submitted.\",\n );\n return loadLifecycle();\n },\n async addAttachment(file, documentType, description) {\n const body = new FormData();\n body.set(\"file\", file);\n body.set(\"documentType\", documentType);\n if (description) body.set(\"description\", description);\n await mutation(\n \"/embed/api/bill-review/attachments\",\n { method: \"POST\", body },\n \"Document could not be attached.\",\n );\n return loadLifecycle();\n },\n async removeAttachment(attachmentId) {\n await mutation(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n { method: \"DELETE\" },\n \"Document could not be removed.\",\n );\n return loadLifecycle();\n },\n async getAttachment(attachmentId) {\n const response = await request(\n `/embed/api/bill-review/attachments/${encodeURIComponent(attachmentId)}`,\n );\n if (!response.ok) {\n throw await responseError(response, \"Document could not be opened.\");\n }\n return response.blob();\n },\n async getEor(documentId) {\n const response = await request(\n `/embed/api/bill-lifecycle/eor/${encodeURIComponent(documentId)}`,\n );\n if (!response.ok) throw await responseError(response, \"EOR could not be opened.\");\n return response.blob();\n },\n closeBill(input) {\n return action({ action: \"close\", ...input }, \"Bill could not be closed.\");\n },\n postPayment(input) {\n return action(\n { action: \"post_payment\", ...input, checkNumber: input.checkNumber ?? \"\" },\n \"Payment could not be posted.\",\n );\n },\n submitSecondReview(input) {\n return action(\n { action: \"second_review\", ...input },\n \"Second Review could not be submitted.\",\n );\n },\n async startCorrection() {\n const response = await mutation(\n \"/embed/api/bill-lifecycle/actions\",\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ action: \"start_correction\" }),\n },\n \"Correction draft could not be created.\",\n );\n const body = await response.json() as {\n replacementBillId?: unknown;\n data?: unknown;\n };\n if (typeof body.replacementBillId !== \"string\") {\n throw new Error(\"The billing service did not return the correction bill ID.\");\n }\n return {\n replacementBillId: body.replacementBillId,\n data: normalizeLifecycle(body.data),\n };\n },\n };\n}\n\nfunction openPdf(blob: Blob, filename: string): void {\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.download = filename;\n link.click();\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nexport function useBillLifecycle({\n billId: providedBillId,\n sessionEndpoint = DEFAULT_SESSION_ENDPOINT,\n getSession,\n apiBaseUrl = DEFAULT_API_BASE_URL,\n refreshInterval = DEFAULT_REFRESH_INTERVAL,\n enabled = true,\n initialData = null,\n onBillIdChange,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [billId, setBillId] = useState(providedBillId);\n const [data, setData] = useState<BillLifecycleData | null>(initialData);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled && !initialData);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\n\n useEffect(() => {\n setBillId(providedBillId);\n setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n billId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, billId, fetchOverride, getSession, sessionEndpoint]);\n\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n client.clearSession();\n };\n }, [client]);\n\n const refresh = useCallback(async () => {\n if (!enabled) return;\n setIsRefreshing(true);\n try {\n const next = await client.getLifecycle();\n if (!mounted.current) return;\n setData(next);\n setError(null);\n } catch (cause) {\n if (!mounted.current) return;\n setError(cause instanceof Error ? cause : new Error(\"Bill could not be loaded.\"));\n } finally {\n if (mounted.current) {\n setIsLoading(false);\n setIsRefreshing(false);\n }\n }\n }, [client, enabled]);\n\n useEffect(() => {\n if (!enabled) return;\n void refresh();\n const interval = refreshInterval > 0\n ? window.setInterval(() => void refresh(), refreshInterval)\n : null;\n const onFocus = () => void refresh();\n window.addEventListener(\"focus\", onFocus);\n return () => {\n if (interval) window.clearInterval(interval);\n window.removeEventListener(\"focus\", onFocus);\n };\n }, [enabled, refresh, refreshInterval]);\n\n const mutate = useCallback(async <T extends BillLifecycleData,>(\n task: () => Promise<T>,\n ): Promise<T> => {\n setIsMutating(true);\n setError(null);\n try {\n const next = await task();\n if (mounted.current) setData(next);\n return next;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"The billing service could not complete this request.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n } finally {\n if (mounted.current) setIsMutating(false);\n }\n }, []);\n\n const saveReview = useCallback(\n (input: BillReviewSaveInput) => mutate(() => client.saveReview(input)),\n [client, mutate],\n );\n const searchClaimsAdministrators = useCallback(\n (query: string) => client.searchClaimsAdministrators(query),\n [client],\n );\n const submitBill = useCallback(\n (input: BillReviewSaveInput, route: BillSubmissionRoute) =>\n mutate(() => client.submitBill(input, route)),\n [client, mutate],\n );\n const addAttachment = useCallback(\n (file: File, type: BillReviewDocumentType, description?: string) =>\n mutate(() => client.addAttachment(file, type, description)),\n [client, mutate],\n );\n const removeAttachment = useCallback(\n (attachmentId: string) => mutate(() => client.removeAttachment(attachmentId)),\n [client, mutate],\n );\n const closeBill = useCallback(\n (input: CloseBillInput) => mutate(() => client.closeBill(input)),\n [client, mutate],\n );\n const postPayment = useCallback(\n (input: PostBillPaymentInput) => mutate(() => client.postPayment(input)),\n [client, mutate],\n );\n const submitSecondReview = useCallback(\n (input: SubmitSecondReviewInput) =>\n mutate(() => client.submitSecondReview(input)),\n [client, mutate],\n );\n const startCorrection = useCallback(async () => {\n setIsMutating(true);\n setError(null);\n try {\n const result = await client.startCorrection();\n const previousBillId = billId;\n await onBillIdChange?.(result.replacementBillId, previousBillId);\n setBillId(result.replacementBillId);\n setData(result.data);\n return result.data;\n } catch (cause) {\n const nextError = cause instanceof Error\n ? cause\n : new Error(\"Correction draft could not be created.\");\n setError(nextError);\n throw nextError;\n } finally {\n setIsMutating(false);\n }\n }, [billId, client, onBillIdChange]);\n const openAttachment = useCallback(async (attachment: BillReviewAttachment) => {\n openPdf(await client.getAttachment(attachment.id), attachment.filename);\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n openPdf(await client.getEor(document.id), document.filename);\n }, [client]);\n\n return {\n billId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators,\n saveReview,\n submitBill,\n addAttachment,\n removeAttachment,\n openAttachment,\n openEor,\n closeBill,\n postPayment,\n submitSecondReview,\n startCorrection,\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillAppearance;\n features?: BillReviewFeatures;\n className?: string;\n style?: CSSProperties;\n loadingFallback?: ReactNode;\n errorFallback?: (error: Error, retry: () => Promise<void>) => ReactNode;\n onChanged?: (data: BillLifecycleData) => void;\n};\n\ntype Panel = \"\" | \"correction\" | \"second_review\" | \"payment\" | \"close\";\n\nfunction dateInputValue(): string {\n const now = new Date();\n const offset = now.getTimezoneOffset() * 60_000;\n return new Date(now.getTime() - offset).toISOString().slice(0, 10);\n}\n\nfunction appearanceStyle(\n appearance: MindBillAppearance | undefined,\n style: CSSProperties | undefined,\n): CSSProperties {\n return {\n ...(appearance?.accentColor ? { \"--mb-accent\": appearance.accentColor } : {}),\n ...(appearance?.textColor ? { \"--mb-text\": appearance.textColor } : {}),\n ...(appearance?.mutedColor ? { \"--mb-muted\": appearance.mutedColor } : {}),\n ...(appearance?.borderColor ? { \"--mb-border\": appearance.borderColor } : {}),\n ...(appearance?.backgroundColor ? { \"--mb-soft\": appearance.backgroundColor } : {}),\n ...(appearance?.surfaceColor ? { \"--mb-surface\": appearance.surfaceColor } : {}),\n ...(appearance?.fontFamily ? { \"--mb-font\": appearance.fontFamily } : {}),\n ...style,\n } as CSSProperties;\n}\n\nfunction SupportingDocumentControl({\n disabled,\n onAdd,\n}: {\n disabled: boolean;\n onAdd: (\n file: File,\n type: BillReviewDocumentType,\n description?: string,\n ) => Promise<unknown>;\n}): ReactElement {\n const [file, setFile] = useState<File | null>(null);\n const [type, setType] = useState<BillReviewDocumentType>(\"appeal\");\n const [busy, setBusy] = useState(false);\n return <div className=\"mb-lifecycle-upload\">\n <select aria-label=\"Supporting document type\" value={type} disabled={disabled || busy} onChange={(event) => setType(event.target.value as BillReviewDocumentType)}>\n <option value=\"appeal\">Second Review support</option>\n <option value=\"final_report\">Final report</option>\n <option value=\"proof_of_service\">Proof of service</option>\n <option value=\"letter_of_attestation\">Letter of attestation</option>\n <option value=\"form_122\">DWC Form 122</option>\n <option value=\"w9\">W-9</option>\n <option value=\"other\">Other supporting document</option>\n </select>\n <input aria-label=\"Choose supporting PDF\" type=\"file\" accept=\"application/pdf,.pdf\" disabled={disabled || busy} onChange={(event) => setFile(event.target.files?.[0] ?? null)} />\n <button type=\"button\" className=\"mb-lifecycle-button secondary\" disabled={disabled || busy || !file} onClick={() => {\n if (!file) return;\n setBusy(true);\n void onAdd(file, type)\n .then(() => setFile(null))\n .catch(() => undefined)\n .finally(() => setBusy(false));\n }}>{busy ? \"Attaching…\" : \"Attach PDF\"}</button>\n </div>;\n}\n\nexport function ConnectedBillLifecycle({\n appearance,\n features,\n className,\n style,\n loadingFallback,\n errorFallback,\n onChanged,\n ...options\n}: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [closeReason, setCloseReason] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({\n amount: 0,\n method: \"check\",\n checkNumber: \"\",\n depositDate: dateInputValue(),\n note: \"\",\n });\n const [review, setReview] = useState<SubmitSecondReviewInput>({\n reason: \"\",\n payerClaimControlNumber: \"\",\n disputedAmount: undefined,\n attachmentIds: [],\n route: \"ebill\",\n });\n const lastData = useRef<BillLifecycleData | null>(null);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 ? current.amount : data.bill.balanceDue,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length\n ? current.attachmentIds.filter((id) => data.bill.attachments.some((doc) => doc.id === id))\n : data.bill.attachments.map((doc) => doc.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) {\n return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading billing…</div>}</>;\n }\n if (!data) {\n const error = lifecycle.error ?? new Error(\"Bill could not be loaded.\");\n return <>{errorFallback?.(error, lifecycle.refresh) ?? <div className=\"mb-lifecycle-error\" role=\"alert\"><strong>Billing is unavailable.</strong><span>{error.message}</span><button type=\"button\" onClick={() => void lifecycle.refresh()}>Try again</button></div>}</>;\n }\n\n const actionMap = new Map(data.lifecycle.actions.map((action) => [action.id, action]));\n const has = (id: BillLifecycleActionId) => actionMap.get(id);\n const selectPanel = (next: Panel) => {\n setNotice(\"\");\n setPanel((current) => current === next ? \"\" : next);\n };\n const complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setNotice(message);\n } catch {\n // The hook keeps the actionable error visible in this component.\n }\n };\n const actionButtons = data.lifecycle.actions\n .filter((action) => action.id !== \"edit_and_submit\" && action.id !== \"view_eor\" && action.id !== \"independent_bill_review\")\n .map((action) => ({\n ...action,\n onClick: () => {\n if (!action.enabled) return;\n if (action.id === \"correct_and_resubmit\") selectPanel(\"correction\");\n if (action.id === \"second_review\") selectPanel(\"second_review\");\n if (action.id === \"post_payment\") selectPanel(\"payment\");\n if (action.id === \"close\") selectPanel(\"close\");\n },\n disabled: !action.enabled || lifecycle.isMutating,\n }));\n\n const canEditAndSubmit = Boolean(has(\"edit_and_submit\"));\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={appearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {canEditAndSubmit\n ? <BillReviewForm\n data={data}\n {...(appearance ? { appearance } : {})}\n {...(features ? { features } : {})}\n disabled={lifecycle.isMutating}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onSave={lifecycle.saveReview}\n onSubmit={async (input, route) => { await complete(\"Bill submitted.\", () => lifecycle.submitBill(input, route)); }}\n onAddAttachment={async (file, type, description) => { await lifecycle.addAttachment(file, type, description); }}\n onRemoveAttachment={async (attachmentId) => { await lifecycle.removeAttachment(attachmentId); }}\n onOpenAttachment={(attachment) => void lifecycle.openAttachment(attachment).catch(() => undefined)}\n />\n : <BillStatusSummary\n status={data.lifecycle.state}\n submittedAt={data.lifecycle.submittedAt ?? null}\n agingDays={data.lifecycle.agingDays ?? null}\n updatedAt={data.lifecycle.updatedAt ?? null}\n totalCharge={data.bill.totalCharge}\n totalPaid={data.bill.totalPaid}\n balanceDue={data.bill.balanceDue}\n actions={actionButtons}\n {...(appearance ? { appearance } : {})}\n />}\n\n <div className=\"mb-lifecycle-toolbar\">\n <div>\n <strong>Bill #{data.bill.billNumber}</strong>\n <span>{lifecycle.isRefreshing ? \"Refreshing…\" : \"Status and actions update automatically.\"}</span>\n </div>\n <div className=\"mb-lifecycle-toolbar-actions\">\n {has(\"view_eor\") ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => document.getElementById(`mb-eors-${data.bill.id}`)?.scrollIntoView({ behavior: \"smooth\", block: \"center\" })}>View EOR</button> : null}\n {canEditAndSubmit && has(\"close\") ? <button type=\"button\" className=\"mb-lifecycle-button quiet\" onClick={() => selectPanel(\"close\")}>Close bill</button> : null}\n </div>\n </div>\n\n {data.eors.length ? <section className=\"mb-lifecycle-card\" id={`mb-eors-${data.bill.id}`}>\n <header><div><h3>Explanation of Review</h3><p>Review the payer response and original PDF before posting payment.</p></div><span>{data.eors.length} PDF{data.eors.length === 1 ? \"\" : \"s\"}</span></header>\n <ul className=\"mb-lifecycle-documents\">{data.eors.map((eor) => <li key={eor.id}><div><strong>{eor.filename}</strong><span>{eor.description || `Added ${new Date(eor.addedAt).toLocaleDateString()}`}</span></div><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(eor).catch(() => undefined)}>View PDF</button></li>)}</ul>\n </section> : null}\n\n {has(\"independent_bill_review\") ? <div className=\"mb-lifecycle-info\"><strong>{has(\"independent_bill_review\")?.label}</strong><span>{has(\"independent_bill_review\")?.reason}</span></div> : null}\n\n {panel === \"correction\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Correct and resubmit</h3><p>A new correction draft will preserve this rejected bill in history. Review the copied values before submitting.</p></div>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void complete(\"Correction draft created.\", lifecycle.startCorrection)}>{lifecycle.isMutating ? \"Creating…\" : \"Create correction draft\"}</button></div>\n </section> : null}\n\n {panel === \"second_review\" ? <section className=\"mb-lifecycle-panel wide\">\n <div><h3>Submit Second Review</h3><p>State why payment is disputed, confirm the payer control number, and choose the supporting documents to send.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Reason for Second Review</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label>\n <div className=\"mb-lifecycle-fields\">\n <label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label>\n <label><span>Disputed amount</span><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) : undefined }))} /></label>\n <label><span>Send via</span><select value={review.route} onChange={(event) => setReview((current) => ({ ...current, route: event.target.value as BillSubmissionRoute }))}><option value=\"ebill\">E-bill</option><option value=\"fax\">Fax</option><option value=\"mail\">Mail</option><option value=\"email\">Email</option></select></label>\n </div>\n </div>\n <fieldset className=\"mb-lifecycle-packet\"><legend>Supporting packet</legend>{data.bill.attachments.map((attachment) => <label key={attachment.id}><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) }))} /><span><strong>{attachment.filename}</strong><small>{attachment.description || attachment.documentType}</small></span><button type=\"button\" onClick={() => void lifecycle.openAttachment(attachment).catch(() => undefined)}>View</button><button type=\"button\" aria-label={`Remove ${attachment.filename}`} onClick={() => void lifecycle.removeAttachment(attachment.id).catch(() => undefined)}>×</button></label>)}</fieldset>\n <SupportingDocumentControl disabled={lifecycle.isMutating} onAdd={async (file, type, description) => {\n const next = await lifecycle.addAttachment(file, type, description);\n setReview((current) => ({\n ...current,\n attachmentIds: Array.from(new Set([\n ...current.attachmentIds,\n ...next.bill.attachments.map((attachment) => attachment.id),\n ])),\n }));\n }} />\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><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))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div>\n </section> : null}\n\n {panel === \"payment\" ? <section className=\"mb-lifecycle-panel\">\n <div><h3>Post payment</h3><p>Record funds shown on the EOR. The balance updates and the bill closes automatically when configured.</p></div>\n <div className=\"mb-lifecycle-fields two\">\n <label><span>Amount</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" required value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label>\n <label><span>Method</span><select value={payment.method} onChange={(event) => setPayment((current) => ({ ...current, method: event.target.value as \"check\" | \"eft\" }))}><option value=\"check\">Check</option><option value=\"eft\">EFT</option></select></label>\n <label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label>\n <label><span>Deposit date</span><input type=\"date\" required value={payment.depositDate} onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label>\n <label className=\"full\"><span>Note <small>Optional</small></span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label>\n </div>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><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))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div>\n </section> : null}\n\n {panel === \"close\" ? <section className=\"mb-lifecycle-panel danger\">\n <div><h3>Close bill</h3><p>Closing removes this bill from active A/R. Any remaining balance will be written off and the original lifecycle is preserved.</p></div>\n <label><span>Reason for closing</span><textarea required value={closeReason} onChange={(event) => setCloseReason(event.target.value)} /></label>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button><button type=\"button\" className=\"mb-lifecycle-button danger\" disabled={lifecycle.isMutating || !closeReason.trim()} onClick={() => void complete(\"Bill closed.\", () => lifecycle.closeBill({ reason: closeReason }))}>{lifecycle.isMutating ? \"Closing…\" : \"Close bill\"}</button></div>\n </section> : null}\n\n {notice ? <div className=\"mb-lifecycle-message success\" role=\"status\">{notice}</div> : null}\n {lifecycle.error ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{lifecycle.error.message}</div> : null}\n </section>;\n}\n\nconst CONNECTED_LIFECYCLE_STYLES = `\n.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}}\n`;\n"],"mappings":"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","names":["useEffect","useRef","useEffect","useMemo","useState","jsx","jsxs","useMemo","useState","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","DEFAULT_REFRESH_INTERVAL","responseError","isSessionFresh","normalizeSession","request","useState","useRef","useEffect","useMemo","useCallback","document","appearanceStyle","useRef","useEffect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mindbill/react",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "Native React components and hosted workflows for MindBill billing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",