@mindbill/react 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -24
- package/dist/index.d.ts +158 -31
- package/dist/index.js +981 -454
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/appearance.ts","../src/native-bill-review.tsx","../src/connected-bill-status.tsx","../src/bill-lifecycle-surfaces.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}\n\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n mindBillAppearanceStyle,\n mindBillThemePresets,\n resolveMindBillAppearance,\n} from \"./appearance\";\nexport type {\n MindBillReactAppearance,\n MindBillThemePreset,\n} from \"./appearance\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n ensureTrailingProcedureLine,\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 BillActivityTimeline,\n BillLifecycleActions,\n billActivityEventLabel,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillLifecycleActionsProps,\n} from \"./bill-lifecycle-surfaces\";\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 BrowserBillAddress,\n BrowserBillCreateInput,\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","import type { CSSProperties } from \"react\";\nimport type { MindBillAppearance } from \"@mindbill/embed\";\n\nexport type MindBillThemePreset =\n | \"mindbill\"\n | \"qme-companion\"\n | \"orange-bright\"\n | \"clinical-blue\";\n\nexport type MindBillReactAppearance = MindBillAppearance & {\n /** A complete starting point. Individual tokens below always win. */\n preset?: MindBillThemePreset;\n accentTextColor?: string;\n inputBackgroundColor?: string;\n controlRadius?: string;\n shadow?: string;\n dangerColor?: string;\n successColor?: string;\n warningColor?: string;\n};\n\nexport const mindBillThemePresets = {\n mindbill: {\n accentColor: \"#238dbd\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f3f8fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#203743\",\n mutedColor: \"#657982\",\n borderColor: \"#dbe6ea\",\n borderRadius: \"14px\",\n controlRadius: \"8px\",\n shadow: \"0 8px 24px rgba(28,58,72,.04)\",\n dangerColor: \"#b63d35\",\n successColor: \"#217449\",\n warningColor: \"#8a5c17\",\n },\n \"qme-companion\": {\n accentColor: \"#53b5dc\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1d3440\",\n mutedColor: \"#617783\",\n borderColor: \"#d7e5eb\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(29,52,64,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"orange-bright\": {\n accentColor: \"#ff4f0a\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#111827\",\n mutedColor: \"#626a73\",\n borderColor: \"#e5e1dc\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 4px 18px rgba(17,24,39,.06)\",\n dangerColor: \"#b42318\",\n successColor: \"#16794f\",\n warningColor: \"#9a5b13\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"clinical-blue\": {\n accentColor: \"#1677ff\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f5f7fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1f2d3d\",\n mutedColor: \"#66788a\",\n borderColor: \"#d9e2ec\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 2px 8px rgba(31,45,61,.06)\",\n dangerColor: \"#d4380d\",\n successColor: \"#389e0d\",\n warningColor: \"#d48806\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif\",\n },\n} as const satisfies Record<MindBillThemePreset, MindBillReactAppearance>;\n\nexport function resolveMindBillAppearance(\n appearance: MindBillReactAppearance | undefined,\n): MindBillReactAppearance {\n const preset = appearance?.preset ?? \"mindbill\";\n return { ...mindBillThemePresets[preset], ...appearance, preset };\n}\n\nexport function mindBillAppearanceStyle(\n appearance: MindBillReactAppearance | undefined,\n style?: CSSProperties,\n): CSSProperties {\n const resolved = resolveMindBillAppearance(appearance);\n return {\n \"--mb-accent\": resolved.accentColor,\n \"--mb-accent-contrast\": resolved.accentTextColor,\n \"--mb-text\": resolved.textColor,\n \"--mb-muted\": resolved.mutedColor,\n \"--mb-border\": resolved.borderColor,\n \"--mb-soft\": resolved.backgroundColor,\n \"--mb-surface\": resolved.surfaceColor,\n \"--mb-input\": resolved.inputBackgroundColor,\n \"--mb-font\": resolved.fontFamily,\n \"--mb-radius\": resolved.borderRadius,\n \"--mb-control-radius\": resolved.controlRadius,\n \"--mb-shadow\": resolved.shadow,\n \"--mb-danger\": resolved.dangerColor,\n \"--mb-success\": resolved.successColor,\n \"--mb-warning\": resolved.warningColor,\n ...style,\n } as CSSProperties;\n}\n","\"use client\";\n\nimport { sanitizeBillReviewSaveInput } from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport type { CSSProperties, FormEvent, KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useRef, 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 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 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 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 serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: BillReviewLineItem = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nfunction isEmptyProcedureLine(line: BillReviewLineItem): boolean {\n return !line.code.trim() && line.modifiers.length === 0 && line.units === 1 && !line.serviceDate && !line.serviceDateEnd && !line.charge && !(line.diagnosisPointers?.length);\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly BillReviewLineItem[],\n): BillReviewLineItem[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\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 confidence?: \"high\" | \"medium\" | \"directory\";\n recommended?: boolean;\n signals?: Array<{\n kind: \"name\" | \"claim_number\";\n state: \"match\" | \"warning\";\n label: string;\n }>;\n};\n\nexport type BillReviewFeatures = {\n authorizationNumber?: boolean;\n serviceDateRange?: boolean;\n wcabNumber?: boolean;\n codingPresets?: boolean;\n};\n\nexport type BillReviewClaimPatternStatus = {\n state: \"match\" | \"warning\" | \"unknown\";\n label: string;\n detail?: string;\n suggestion?: string;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billingMode: \"med_legal\" | \"professional\";\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\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: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n claimsAdminId?: string;\n claimsAdminName?: string;\n claimPatternStatus?: BillReviewClaimPatternStatus;\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: string;\n patientOverrides?: {\n firstName: string;\n middleName?: string;\n lastName: string;\n dob?: string;\n };\n injuryOverrides?: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n };\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\n\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n };\n};\n\nexport type BillSubmissionInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n};\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n onSave: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n submission: BillSubmissionInput,\n ) => Promise<void>;\n onGetDeliveryOptions: () => Promise<BillDeliveryOptions>;\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 claimNumber?: string,\n ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n features?: BillReviewFeatures;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n claimsAdminId: string;\n claimsAdminName: string;\n patientFirstName: string;\n patientMiddleName: string;\n patientLastName: string;\n patientDob: string;\n claimNumber: string;\n employer: string;\n doi: string;\n injuryEndDate: string;\n cumulativeTrauma: boolean;\n adjNumber: 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\nconst US_STATES = [\"AL\",\"AK\",\"AZ\",\"AR\",\"CA\",\"CO\",\"CT\",\"DE\",\"FL\",\"GA\",\"HI\",\"ID\",\"IL\",\"IN\",\"IA\",\"KS\",\"KY\",\"LA\",\"ME\",\"MD\",\"MA\",\"MI\",\"MN\",\"MS\",\"MO\",\"MT\",\"NE\",\"NV\",\"NH\",\"NJ\",\"NM\",\"NY\",\"NC\",\"ND\",\"OH\",\"OK\",\"OR\",\"PA\",\"RI\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"VT\",\"VA\",\"WA\",\"WV\",\"WI\",\"WY\",\"DC\"];\nconst PROCEDURES = [\n [\"ML200\", \"Missed med-legal appointment\"],\n [\"ML201\", \"Comprehensive med-legal evaluation\"],\n [\"ML202\", \"Follow-up med-legal evaluation\"],\n [\"ML203\", \"Supplemental med-legal evaluation\"],\n [\"ML204\", \"Medical-legal testimony\"],\n [\"ML205\", \"Sub rosa recording review\"],\n [\"MLPRR\", \"Medical record review\"],\n] as const;\nconst MODIFIERS = [\n [\"92\", \"Primary treating physician\"], [\"93\", \"Interpreter required\"],\n [\"94\", \"Agreed medical evaluator (AME)\"], [\"95\", \"Qualified medical evaluator (QME)\"],\n [\"96\", \"Psychiatric or psychological evaluation\"], [\"97\", \"Toxicology evaluation\"],\n [\"98\", \"Oncology evaluation\"],\n] as const;\ntype CodingPreset = \"qme\" | \"ame\" | \"psych_qme\";\nconst MANAGED_EVALUATOR_MODIFIERS = new Set([\"94\", \"95\", \"96\"]);\nconst MODIFIER_CODES: Record<string, readonly string[]> = {\n \"92\": [\"ML201\", \"ML202\", \"ML203\"],\n \"93\": [\"ML201\", \"ML202\"],\n \"94\": [\"ML201\", \"ML202\", \"ML203\"],\n \"95\": [\"ML200\", \"ML201\", \"ML202\", \"ML203\", \"MLPRR\"],\n \"96\": [\"ML201\", \"ML202\", \"ML203\"],\n \"97\": [\"ML201\", \"ML202\", \"ML203\"],\n \"98\": [\"ML201\", \"ML202\", \"ML203\"],\n};\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n claimsAdminId: data.injury.claimsAdminId || \"\",\n claimsAdminName: data.injury.claimsAdminName || \"\",\n patientFirstName: data.patient.firstName || nameParts[0] || \"\",\n patientMiddleName: data.patient.middleName || (nameParts.length > 2 ? nameParts.slice(1, -1).join(\" \") : \"\"),\n patientLastName: data.patient.lastName || (nameParts.length > 1 ? (nameParts.at(-1) || \"\") : \"\"),\n patientDob: data.patient.dob || \"\",\n claimNumber: data.injury.claimNumber || \"\",\n employer: data.injury.employer || \"\",\n doi: data.injury.doi || \"\",\n injuryEndDate: data.injury.injuryEndDate || \"\",\n cumulativeTrauma: Boolean(data.injury.cumulativeTrauma),\n adjNumber: data.injury.adjNumber || \"\",\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: ensureTrailingProcedureLine(data.bill.lineItems),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return sanitizeBillReviewSaveInput({\n claimsAdminId: draft.claimsAdminId,\n patientOverrides: {\n firstName: draft.patientFirstName.trim(),\n ...(draft.patientMiddleName.trim() ? { middleName: draft.patientMiddleName.trim() } : {}),\n lastName: draft.patientLastName.trim(),\n ...(draft.patientDob ? { dob: draft.patientDob } : {}),\n },\n injuryOverrides: {\n ...(draft.claimNumber.trim() ? { claimNumber: draft.claimNumber.trim() } : {}),\n ...(draft.employer.trim() ? { employer: draft.employer.trim() } : {}),\n ...(draft.doi ? { doi: draft.doi } : {}),\n ...(draft.injuryEndDate ? { injuryEndDate: draft.injuryEndDate } : {}),\n cumulativeTrauma: draft.cumulativeTrauma,\n ...(draft.adjNumber.trim() ? { adjNumber: draft.adjNumber.trim().toUpperCase().replace(/\\s+/g, \"\") } : {}),\n },\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n billingProvider: { ...draft.billingProvider },\n renderingProvider: { ...draft.clinician },\n placeOfService: { ...draft.location },\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units, charge, serviceDate, serviceDateEnd, diagnosisPointers }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n ...(charge ? { charge } : {}),\n ...(serviceDate ? { serviceDate } : {}),\n ...(serviceDateEnd ? { serviceDateEnd } : {}),\n ...(diagnosisPointers?.length ? { diagnosisPointers } : {}),\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 Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n disabled,\n hint,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n disabled?: boolean;\n hint?: string;\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 disabled={disabled}\n autoComplete=\"off\"\n onChange={(event) => onChange(event.target.value)}\n />\n {hint ? <small className=\"mb-native-hint\">{hint}</small> : null}\n </label>\n );\n}\n\ntype ComboOption = {\n value: string;\n label: string;\n detail?: string;\n badge?: string;\n};\n\nfunction Combobox({ label, value, options, onChange, placeholder, required, disabled, name }: {\n label: string;\n value: string;\n options: ComboOption[];\n onChange: (value: string, option?: ComboOption) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n}): ReactElement {\n const listId = useId();\n const root = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const filtered = useMemo(() => {\n const query = value.trim().toLowerCase();\n return options.filter((option) => !query || option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)).slice(0, 40);\n }, [options, value]);\n useEffect(() => {\n const close = (event: MouseEvent) => {\n if (!root.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", close);\n return () => document.removeEventListener(\"mousedown\", close);\n }, []);\n const select = (option: ComboOption) => {\n onChange(option.value, option);\n setOpen(false);\n setActive(0);\n };\n const keyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") { event.preventDefault(); setOpen(true); setActive((value) => Math.min(value + 1, filtered.length - 1)); }\n if (event.key === \"ArrowUp\") { event.preventDefault(); setActive((value) => Math.max(value - 1, 0)); }\n if (event.key === \"Enter\" && open && filtered[active]) { event.preventDefault(); select(filtered[active]); }\n if (event.key === \"Escape\") setOpen(false);\n };\n return <div className=\"mb-native-combo\" ref={root}>\n <label className=\"mb-native-field\">\n <span>{label}</span>\n <input\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-expanded={open && filtered.length > 0}\n aria-activedescendant={open && filtered[active] ? `${listId}-${active}` : undefined}\n name={name || \"mindbill-search-value\"}\n autoComplete=\"new-password\"\n data-1p-ignore=\"true\"\n data-lpignore=\"true\"\n value={value}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n onFocus={() => setOpen(true)}\n onKeyDown={keyDown}\n onChange={(event) => { onChange(event.target.value); setOpen(true); setActive(0); }}\n />\n </label>\n {open && filtered.length ? <ul id={listId} role=\"listbox\" className=\"mb-native-combo-list\">\n {filtered.map((option, index) => <li id={`${listId}-${index}`} role=\"option\" aria-selected={index === active} key={`${option.value}-${index}`}>\n <button type=\"button\" className={index === active ? \"active\" : \"\"} onMouseDown={(event) => event.preventDefault()} onClick={() => select(option)}>\n <span className=\"mb-native-combo-title\"><strong>{option.label}</strong>{option.badge ? <em>{option.badge}</em> : null}</span>{option.detail ? <span>{option.detail}</span> : null}\n </button>\n </li>)}\n </ul> : null}\n </div>;\n}\n\nfunction StateCombobox({ label, value, onChange, required, disabled }: { label: string; value: string; onChange: (value: string) => void; required?: boolean; disabled?: boolean }): ReactElement {\n return <Combobox\n label={label}\n value={value}\n onChange={(next) => onChange(next.toUpperCase().slice(0, 2))}\n options={US_STATES.map((state) => ({ value: state, label: state }))}\n {...(required === undefined ? {} : { required })}\n {...(disabled === undefined ? {} : { disabled })}\n name=\"mindbill-state-value\"\n />;\n}\n\nfunction inferPreset(lines: BillReviewLineItem[]): CodingPreset {\n const modifiers = new Set(lines.flatMap((line) => line.modifiers));\n return modifiers.has(\"94\") ? \"ame\" : modifiers.has(\"96\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction presetModifiersForCode(preset: CodingPreset, code: string): string[] {\n if (code === \"MLPRR\") return [\"95\"];\n if (preset === \"qme\" && [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"95\"];\n if (preset === \"ame\" && [\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"94\"];\n if (preset === \"psych_qme\") {\n if (code === \"ML200\") return [\"95\"];\n if ([\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"96\"];\n }\n return [];\n}\n\nfunction modifierAppliesToCode(modifier: string, code: string): boolean {\n return !code || (MODIFIER_CODES[modifier]?.includes(code) ?? true);\n}\n\nfunction applyPreset(lines: BillReviewLineItem[], preset: CodingPreset): BillReviewLineItem[] {\n return lines.map((line) => {\n const preserved = line.modifiers.filter(\n (value) => !MANAGED_EVALUATOR_MODIFIERS.has(value) && modifierAppliesToCode(value, line.code),\n );\n return {\n ...line,\n modifiers: [...new Set([...presetModifiersForCode(preset, line.code), ...preserved])],\n };\n });\n}\n\nexport function BillReviewForm({\n data,\n onSave,\n onSubmit,\n onGetDeliveryOptions,\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 [deliveryOptions, setDeliveryOptions] = useState<BillDeliveryOptions | null>(null);\n const [submission, setSubmission] = useState<BillSubmissionInput>({ route: \"ebill\" });\n const [showSubmit, setShowSubmit] = useState(false);\n const [deliveryBusy, setDeliveryBusy] = useState(false);\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 editable = data.bill.status === \"incomplete\" && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n const query = payerQuery.trim();\n const claimNumber = draft.claimNumber.trim();\n if (\n !onSearchClaimsAdministrators ||\n (query.length < 2 && claimNumber.length < 4)\n ) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(query, claimNumber)\n .then((results) => {\n if (!current) return;\n setPayerResults(results);\n const recommendation = results.find(\n (payer) => payer.recommended && payer.confidence === \"high\",\n );\n if (!draft.claimsAdminId && recommendation) {\n setDraft((currentDraft) => ({\n ...currentDraft,\n claimsAdminId: recommendation.id,\n claimsAdminName: recommendation.name,\n }));\n setPayerQuery(recommendation.name);\n setNotice(\n \"Claims administrator matched from the case data. Review and save to keep it on this bill.\",\n );\n }\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 }, [\n draft.claimNumber,\n draft.claimsAdminId,\n onSearchClaimsAdministrators,\n payerQuery,\n ]);\n\n const selectedPayer = payerResults.find(\n (payer) => payer.id === draft.claimsAdminId,\n );\n\n const adjFormatValid =\n !draft.adjNumber ||\n /^ADJ\\d{7,}$/i.test(draft.adjNumber.replace(/[\\s-]/g, \"\"));\n const blockers = useMemo(() => {\n const result: string[] = [];\n if (!draft.patientFirstName.trim() || !draft.patientLastName.trim()) result.push(\"Patient name\");\n if (!draft.claimsAdminId) result.push(\"Claims administrator\");\n if (!draft.claimNumber.trim()) result.push(\"Claim number\");\n if (!draft.doi) result.push(\"Date of injury\");\n if (!adjFormatValid) result.push(\"Valid WCAB / ADJ number\");\n if (data.bill.billingMode === \"med_legal\" && !draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim()) result.push(\"Tax ID\");\n if (!draft.billingProvider.npi.trim()) result.push(\"Billing NPI\");\n if (!draft.clinician.name.trim() || !draft.clinician.npi.trim()) result.push(\"Clinician and NPI\");\n if (![draft.location.name, draft.location.street, draft.location.city, draft.location.state, draft.location.zip].every((value) => value.trim())) result.push(\"Service location\");\n const completedLines = draft.lineItems.filter((line) => line.code.trim());\n if (!completedLines.length || completedLines.some((line) => line.units <= 0)) result.push(\"Valid procedure line\");\n if (data.bill.billingMode === \"professional\" && completedLines.some((line) => !line.serviceDate || line.charge <= 0)) {\n result.push(\"Service date and charge on every procedure line\");\n }\n return result;\n }, [adjFormatValid, data.bill.billingMode, draft]);\n const canSubmit = blockers.length === 0;\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 openSubmit = async () => {\n setDeliveryBusy(true);\n setError(\"\");\n try {\n const next = await onGetDeliveryOptions();\n setDeliveryOptions(next);\n const recommended = next.recommended ?? next.options[0];\n if (!recommended) throw new Error(\"No delivery route is available for this payer.\");\n setSubmission({ route: recommended.route });\n setShowSubmit(true);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Delivery routes could not be loaded.\");\n } finally {\n setDeliveryBusy(false);\n }\n };\n\n const selectedDelivery = deliveryOptions?.options.find((option) => option.route === submission.route);\n const destinationLabel = submission.route === \"fax\"\n ? \"Fax number\"\n : submission.route === \"email\"\n ? \"Email address\"\n : submission.route === \"mail\"\n ? \"Mailing address\"\n : \"\";\n const destinationValue = submission.route === \"fax\"\n ? submission.destination?.faxNumber ?? selectedDelivery?.target ?? deliveryOptions?.contacts.faxNumber ?? \"\"\n : submission.route === \"email\"\n ? submission.destination?.email ?? selectedDelivery?.target ?? deliveryOptions?.contacts.claimsEmail ?? \"\"\n : submission.route === \"mail\"\n ? submission.destination?.mailingAddress ?? selectedDelivery?.target ?? deliveryOptions?.contacts.mailingAddress ?? \"\"\n : \"\";\n const setDestination = (value: string) => setSubmission((current) => {\n const destination = current.route === \"fax\"\n ? { faxNumber: value }\n : current.route === \"email\"\n ? { email: value }\n : { mailingAddress: value };\n return { ...current, destination };\n });\n const handleSubmit = () => run(\"submit\", async () => {\n await onSubmit(buildBillReviewSaveInput(draft), submission);\n setShowSubmit(false);\n });\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={mindBillAppearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <style>{NATIVE_SUBMISSION_DIALOG_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>{[draft.patientFirstName, draft.patientMiddleName, draft.patientLastName].filter(Boolean).join(\" \") || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{draft.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{draft.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{draft.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 <Combobox\n label=\"Insurance company or claims administrator\"\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n name=\"mindbill-payer-query\"\n options={payerResults.map((payer) => ({\n value: payer.id,\n label: payer.name,\n ...(payer.recommended\n ? { badge: \"Recommended\" }\n : payer.confidence === \"medium\"\n ? { badge: \"Claim match\" }\n : {}),\n detail: [\n ...(payer.signals ?? []).map((signal) => signal.label),\n payer.hasElectronic\n ? \"Electronic billing available.\"\n : \"Billing route confirmed after review.\",\n ].join(\" \"),\n }))}\n onChange={(value, option) => {\n if (option) {\n setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));\n setPayerQuery(option.label);\n setNotice(\"Claims administrator selected. Save changes to keep it on this bill.\");\n } else {\n setPayerQuery(value);\n setDraft((current) => value === current.claimsAdminName ? current : { ...current, claimsAdminId: \"\", claimsAdminName: \"\" });\n }\n }}\n />\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 {selectedPayer?.signals?.length ? (\n <div className=\"mb-native-payer-insight\" role=\"status\">\n {selectedPayer.signals.map((signal) => (\n <span className={signal.state} key={`${signal.kind}-${signal.label}`}>\n {signal.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Patient and claim</h3><p>Prefilled from the case. Correct anything that should print differently on this bill.</p></div><span>Editable</span></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Patient first name\" required disabled={!editable} value={draft.patientFirstName} onChange={(patientFirstName) => setDraft((current) => ({ ...current, patientFirstName }))} />\n <Field label=\"Middle name\" optional disabled={!editable} value={draft.patientMiddleName} onChange={(patientMiddleName) => setDraft((current) => ({ ...current, patientMiddleName }))} />\n <Field label=\"Patient last name\" required disabled={!editable} value={draft.patientLastName} onChange={(patientLastName) => setDraft((current) => ({ ...current, patientLastName }))} />\n <Field label=\"Date of birth\" type=\"date\" required disabled={!editable} value={draft.patientDob} onChange={(patientDob) => setDraft((current) => ({ ...current, patientDob }))} />\n <Field label=\"Claim number\" required disabled={!editable} value={draft.claimNumber} onChange={(claimNumber) => setDraft((current) => ({ ...current, claimNumber }))} {...((data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label) ? { hint: data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label || \"\" } : {})} />\n <Field label=\"Employer\" disabled={!editable} value={draft.employer} onChange={(employer) => setDraft((current) => ({ ...current, employer }))} />\n <Field label=\"Date of injury\" type=\"date\" required disabled={!editable} value={draft.doi} onChange={(doi) => setDraft((current) => ({ ...current, doi }))} />\n {draft.cumulativeTrauma ? <Field label=\"Cumulative trauma end date\" type=\"date\" required disabled={!editable} value={draft.injuryEndDate} onChange={(injuryEndDate) => setDraft((current) => ({ ...current, injuryEndDate }))} /> : null}\n {features?.wcabNumber === false ? null : <Field label=\"WCAB / ADJ number\" optional disabled={!editable} value={draft.adjNumber} onChange={(adjNumber) => setDraft((current) => ({ ...current, adjNumber }))} hint={adjFormatValid ? \"Use the EAMS case number shown as ADJ followed by digits.\" : \"Expected format: ADJ followed by at least 7 digits.\"} />}\n </div>\n {features?.wcabNumber === false ? null : <p className=\"mb-native-eams\">EAMS lookup requires California DWC verification. <a href=\"https://eams.dwc.ca.gov/WebEnhancement/\" target=\"_blank\" rel=\"noreferrer\">Verify in EAMS</a>.</p>}\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service</h3><p>The service date and optional payer authorization printed on this bill.</p></div></div>\n <div className={`mb-native-grid ${features?.serviceDateRange || features?.authorizationNumber !== false ? \"three\" : \"one\"}`}>\n <Field label=\"Date of service\" type=\"date\" required disabled={!editable} value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n {features?.serviceDateRange ? <Field label=\"Service end date\" type=\"date\" optional disabled={!editable} value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} /> : null}\n {features?.authorizationNumber === false ? null : <Field label=\"Authorization number\" optional disabled={!editable} 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 <StateCombobox label=\"State\" required disabled={!editable} 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 <StateCombobox label=\"License state (optional)\" disabled={!editable} 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 <StateCombobox label=\"State\" required disabled={!editable} 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>{data.bill.billingMode === \"professional\" ? \"Enter the professional services billed. Each line may carry its own date, charge, and diagnosis pointers.\" : \"Choose a billing profile, then review the codes and modifiers.\"} A new row appears as you type.</p></div></div>\n {data.bill.billingMode === \"professional\" || features?.codingPresets === false ? null : <div className=\"mb-native-presets\" role=\"group\" aria-label=\"Evaluation billing profile\">\n {([['qme','QME'],['ame','AME'],['psych_qme','Psych QME']] as const).map(([value,label]) => <button type=\"button\" key={value} className={inferPreset(draft.lineItems) === value ? \"active\" : \"\"} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(applyPreset(current.lineItems, value)) }))}>{label}</button>)}\n <span>Sets evaluator modifiers across med-legal lines. You can still edit each line.</span>\n </div>}\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className={`mb-native-line ${data.bill.billingMode === \"professional\" ? \"professional\" : \"\"}`} key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure</span>{data.bill.billingMode === \"professional\" ? <input disabled={!editable} placeholder=\"CPT / HCPCS code\" value={line.code} onChange={(event) => {\n const code = event.target.value.toUpperCase();\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code } : item)) }));\n }} /> : <select disabled={!editable} value={line.code} onChange={(event) => {\n const code = event.target.value;\n setDraft((current) => {\n const lineItems = current.lineItems.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n const presetLine = applyPreset([{ ...item, code }], inferPreset(current.lineItems))[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n return { ...current, lineItems: ensureTrailingProcedureLine(lineItems) };\n });\n }}><option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>}{data.bill.billingMode === \"med_legal\" && line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\">{data.bill.billingMode === \"professional\" ? <label className=\"mb-native-field\"><span>Modifiers</span><input disabled={!editable} placeholder=\"e.g. 25, 59\" value={line.modifiers.join(\", \")} onChange={(event) => {\n const modifiers = event.target.value.toUpperCase().split(/[ ,]+/).map((value) => value.replace(/^-/, \"\")).filter(Boolean);\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers } : item)) }));\n }} /></label> : <label className=\"mb-native-field\"><span>Modifiers</span><select disabled={!editable} value=\"\" onChange={(event) => {\n const modifier = event.target.value;\n if (!modifier) return;\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: [...new Set([...item.modifiers, modifier])] } : item)) }));\n }}><option value=\"\">Add modifier…</option>{MODIFIERS.filter(([value]) => !line.modifiers.includes(value) && modifierAppliesToCode(value, line.code)).map(([value,label]) => <option value={value} key={value}>-{value} — {label}</option>)}</select></label>}<div className=\"mb-native-chips\">{data.bill.billingMode === \"med_legal\" ? line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item)) }))}>-{modifier} ×</button>) : null}</div></div>\n <label className=\"mb-native-field\"><span>Units</span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item)) }))} /></label>\n {data.bill.billingMode === \"professional\" ? <>\n <label className=\"mb-native-field\"><span>Service date</span><input type=\"date\" required={Boolean(line.code)} disabled={!editable} value={line.serviceDate || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDate: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>End date <small>Optional</small></span><input type=\"date\" disabled={!editable} value={line.serviceDateEnd || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDateEnd: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Charge</span><input type=\"number\" min=\"0.01\" step=\"0.01\" required={Boolean(line.code)} disabled={!editable} value={line.charge || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, charge: Number(event.target.value) } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Diagnosis pointers <small>1–12</small></span><input inputMode=\"numeric\" disabled={!editable} value={(line.diagnosisPointers || []).join(\", \")} onChange={(event) => { const diagnosisPointers = event.target.value.split(/[ ,]+/).map(Number).filter((value) => Number.isInteger(value) && value >= 1 && value <= 12); setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, diagnosisPointers } : item)) })); }} /></label>\n </> : null}\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} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(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 {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 {!canSubmit ? <div className=\"mb-native-blockers\" role=\"status\"><strong>Before you can submit:</strong><span>{blockers.join(\" · \")}</span></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 !== \"\" || deliveryBusy} onClick={() => void openSubmit()}>{deliveryBusy ? \"Loading delivery…\" : \"Review delivery\"}</button>\n </div>\n </section>\n {showSubmit && deliveryOptions ? <div className=\"mb-native-modal-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && busy !== \"submit\") setShowSubmit(false); }}>\n <section className=\"mb-native-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-native-submit-title\">\n <header><div><span className=\"mb-native-eyebrow\">Send bill</span><h3 id=\"mb-native-submit-title\">Choose a delivery route</h3><p>{deliveryOptions.payerName || \"Claims administrator\"}</p></div><button type=\"button\" className=\"mb-native-close\" aria-label=\"Close\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>×</button></header>\n <fieldset className=\"mb-native-delivery-options\"><legend>Available delivery routes</legend>{deliveryOptions.options.map((option) => <label className={submission.route === option.route ? \"selected\" : \"\"} key={`${option.route}-${option.target || \"default\"}`}><input type=\"radio\" name=\"mindbill-delivery-route\" checked={submission.route === option.route} onChange={() => setSubmission({ route: option.route })} /><span><strong>{option.label}</strong><small>{option.detail}</small>{option.target ? <code>{option.target}</code> : null}</span>{deliveryOptions.recommended?.route === option.route ? <em>Recommended</em> : null}</label>)}</fieldset>\n {submission.route !== \"ebill\" ? <div className=\"mb-native-grid two\"><Field label={destinationLabel} required value={destinationValue} onChange={setDestination} hint=\"You can override the payer directory value for this submission.\" /><Field label=\"Attention\" optional value={submission.attention || \"\"} onChange={(attention) => setSubmission((current) => ({ ...current, attention }))} />{submission.route === \"email\" ? <Field label=\"Subject\" optional value={submission.subject || \"\"} onChange={(subject) => setSubmission((current) => ({ ...current, subject }))} /> : null}</div> : null}\n <Field label=\"Delivery note\" optional value={submission.note || \"\"} onChange={(note) => setSubmission((current) => ({ ...current, note }))} />\n <footer><button className=\"mb-native-button secondary\" type=\"button\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>Cancel</button><button className=\"mb-native-button primary\" type=\"button\" disabled={busy === \"submit\" || (submission.route !== \"ebill\" && !destinationValue.trim())} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : `Send via ${selectedDelivery?.label || submission.route}`}</button></footer>\n </section>\n </div> : null}\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?: MindBillReactAppearance;\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={mindBillAppearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_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_SUBMISSION_DIALOG_STYLES = `\n.mb-native-field select{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}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-line.professional{grid-template-columns:minmax(140px,1fr) minmax(140px,1fr) 86px 150px 150px 120px minmax(130px,1fr) 120px 28px;overflow-x:auto}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-modal-backdrop{position:fixed;z-index:9999;inset:0;display:grid;place-items:center;padding:20px;background:rgba(20,38,46,.55);backdrop-filter:blur(3px)}\n.mb-native-modal{display:grid;gap:18px;width:min(720px,100%);max-height:min(820px,calc(100vh - 40px));overflow:auto;padding:22px;border:1px solid var(--mb-border);border-radius:16px;background:#fff;box-shadow:0 28px 80px rgba(14,35,44,.3)}\n.mb-native-modal>header,.mb-native-modal>footer{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-native-modal>footer{justify-content:flex-end}.mb-native-modal h3{margin:3px 0;font-size:22px}.mb-native-modal p{margin:0;color:var(--mb-muted)}\n.mb-native-close{border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font-size:23px;line-height:1;padding:8px 12px}\n.mb-native-delivery-options{display:grid;gap:9px;margin:0;padding:0;border:0}.mb-native-delivery-options legend{margin-bottom:8px;font-weight:800}.mb-native-delivery-options label{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:10px;cursor:pointer}.mb-native-delivery-options label.selected{border-color:var(--mb-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--mb-accent) 14%,transparent)}.mb-native-delivery-options label>span{display:grid;gap:2px}.mb-native-delivery-options small{color:var(--mb-muted)}.mb-native-delivery-options code{margin-top:4px;color:var(--mb-text);font:12px/1.4 ui-monospace,SFMono-Regular,monospace}.mb-native-delivery-options em{border-radius:999px;background:var(--mb-soft);color:var(--mb-accent-dark);font-size:10px;font-style:normal;font-weight:800;padding:5px 8px;text-transform:uppercase}\n@media(max-width:1100px){.mb-native-line.professional{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-line.professional .mb-native-allowed{text-align:left}}\n@media(max-width:620px){.mb-native-grid.two,.mb-native-line.professional{grid-template-columns:1fr}.mb-native-modal-backdrop{padding:0}.mb-native-modal{width:100%;max-height:100vh;border-radius:0;padding:18px}.mb-native-delivery-options label{grid-template-columns:auto 1fr}.mb-native-delivery-options em{grid-column:2}}\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.mb-native-grid.one{grid-template-columns:minmax(0,1fr)}\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 36px 10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-field input:disabled,.mb-native-field select:disabled{cursor:not-allowed;background:#f6f8f9;color:#667982}\n.mb-native-hint{color:var(--mb-muted);font-size:12px;font-weight:500}\n.mb-native-combo{position:relative;min-width:0}\n.mb-native-combo-list{position:absolute;z-index:20;top:calc(100% + 6px);right:0;left:0;max-height:300px;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 18px 42px rgba(28,58,72,.18)}\n.mb-native-combo-list li{margin:0;padding:0}.mb-native-combo-list button{display:grid;width:100%;gap:4px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mb-native-combo-list button:hover,.mb-native-combo-list button.active{background:var(--mb-soft);outline:0}.mb-native-combo-list button>span{color:var(--mb-muted);font-size:12px;font-weight:500}.mb-native-combo-list .mb-native-combo-title{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--mb-text);font-size:14px}.mb-native-combo-title em{border-radius:999px;background:#e9f6f3;color:#24725f;font-size:10px;font-style:normal;font-weight:800;letter-spacing:.03em;padding:3px 7px;text-transform:uppercase}\n.mb-native-payer-insight{display:grid;gap:5px;margin-top:10px;padding:11px 13px;border:1px solid #c9dfe7;border-radius:9px;background:#f4fafc}.mb-native-payer-insight span{color:#426570;font-size:12px}.mb-native-payer-insight span.warning{color:#8a5c17}\n.mb-native-presets{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:-2px 0 14px}.mb-native-presets button{min-height:36px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:7px 13px}.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-presets span{margin-left:5px;color:var(--mb-muted);font-size:12px}\n.mb-native-modifiers{display:grid;gap:7px}.mb-native-chips{display:flex;flex-wrap:wrap;gap:5px}.mb-native-chips button{border:1px solid #c9dce3;border-radius:999px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-size:11px;font-weight:750;padding:4px 8px}\n.mb-native-blockers{grid-column:1/-1;display:grid;gap:2px;padding:11px 13px;border:1px solid #e8cf9a;border-radius:8px;background:#fff9ea;color:#74531b}.mb-native-blockers span{font-size:12px}\n.mb-native-eams{margin-top:13px!important;font-size:12px}.mb-native-eams a{color:var(--mb-accent);font-weight:750}\n@media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}\n`;\n\nconst NATIVE_THEME_OVERRIDE_STYLES = `\n.mb-native-review,.mb-native-status{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{background:var(--mb-soft)}\n.mb-native-heading>div:first-child>p,.mb-native-section>header p,.mb-native-total span,.mb-native-status-copy p,.mb-native-status dt{color:var(--mb-muted)}\n.mb-native-summary,.mb-native-section,.mb-native-status{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mb-native-field input,.mb-native-field select,.mb-native-field textarea,.mb-native-attachment-form input,.mb-native-attachment-form select{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-line,.mb-native-note,.mb-native-file,.mb-native-attachment-form,.mb-native-payer-insight,.mb-native-blockers,.mb-native-message{border-radius:var(--mb-control-radius)}\n.mb-native-line,.mb-native-note,.mb-native-attachment-form,.mb-native-payer-insight{border-color:var(--mb-border);background:var(--mb-soft)}\n.mb-native-file{border-color:var(--mb-border);background:var(--mb-surface)}\n.mb-native-button.primary,.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-native-button.primary:hover,.mb-native-presets button.active:hover{filter:brightness(.96)}\n.mb-native-button.secondary,.mb-native-presets button,.mb-native-chips button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-message.error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n.mb-native-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-native-blockers{border-color:color-mix(in srgb,var(--mb-warning) 35%,white);background:color-mix(in srgb,var(--mb-warning) 8%,white);color:var(--mb-warning)}\n.mb-native-combo-list{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\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\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n} from \"@mindbill/browser\";\n\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 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 organization/user 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({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\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}/partner/v2/browser/bills/${encodeURIComponent(billId)}/status`, {\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 { CSSProperties, ReactElement } from \"react\";\nimport type { BillLifecycleAction } from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\nexport type BillLifecycleActionsProps = {\n actions: readonly BillLifecycleAction[];\n onAction: (action: BillLifecycleAction) => void;\n /** Show disabled actions and the server-provided reason. Defaults to false. */\n showUnavailable?: boolean;\n disabled?: boolean;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\n/** Returns the server-authoritative actions that should be rendered. */\nexport function visibleBillLifecycleActions(\n actions: readonly BillLifecycleAction[],\n showUnavailable = false,\n): BillLifecycleAction[] {\n return actions.filter((action) => action.enabled || showUnavailable);\n}\n\nexport function BillLifecycleActions({\n actions,\n onAction,\n showUnavailable = false,\n disabled = false,\n appearance,\n className,\n style,\n}: BillLifecycleActionsProps): ReactElement | null {\n const visible = visibleBillLifecycleActions(actions, showUnavailable);\n if (!visible.length) return null;\n\n return (\n <div\n className={[\"mb-lifecycle-actions\", className].filter(Boolean).join(\" \")}\n style={mindBillAppearanceStyle(appearance, style)}\n aria-label=\"Bill actions\"\n >\n <style>{lifecycleSurfaceStyles}</style>\n {visible.map((action) => (\n <div className=\"mb-lifecycle-action\" key={action.id}>\n <button\n type=\"button\"\n className={action.primary ? \"mb-action-button is-primary\" : \"mb-action-button\"}\n disabled={disabled || !action.enabled}\n onClick={() => onAction(action)}\n >\n {action.label}\n </button>\n {!action.enabled && action.reason ? (\n <span className=\"mb-action-reason\">{action.reason}</span>\n ) : null}\n </div>\n ))}\n </div>\n );\n}\n\nexport type BillActivityEvent = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description?: string;\n actor?: string;\n};\n\nexport type BillActivityTimelineProps = {\n events: readonly BillActivityEvent[];\n emptyLabel?: string;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n formatDate?: (createdAt: string) => string;\n};\n\nconst activityLabels: Record<string, string> = {\n \"bill.created\": \"Bill created\",\n \"bill.draft\": \"Bill saved\",\n \"bill.scrub_failed\": \"Submission needs attention\",\n \"bill.submitted\": \"Bill submitted\",\n \"bill.accepted\": \"Bill accepted\",\n \"bill.rejected\": \"Bill rejected\",\n \"bill.denied\": \"Bill denied\",\n \"bill.partially_paid\": \"Partial payment received\",\n \"bill.paid\": \"Bill paid\",\n \"bill.second_review\": \"Second Bill Review submitted\",\n \"bill.lien\": \"Bill moved to lien\",\n \"bill.ibr\": \"Independent Bill Review submitted\",\n \"bill.closed\": \"Bill closed\",\n \"bill.written_off\": \"Balance written off\",\n \"payment.posted\": \"Payment posted\",\n \"eor.received\": \"EOR received\",\n \"bill.autofill_completed\": \"Bill data extracted\",\n};\n\n/** Human-readable fallback for a signed partner event type. */\nexport function billActivityEventLabel(type: string): string {\n return activityLabels[type] ?? type\n .replace(/[._-]+/g, \" \")\n .replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction defaultFormatDate(createdAt: string): string {\n const parsed = new Date(createdAt);\n if (Number.isNaN(parsed.getTime())) return createdAt;\n return new Intl.DateTimeFormat(undefined, {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n }).format(parsed);\n}\n\nexport function BillActivityTimeline({\n events,\n emptyLabel = \"No bill activity yet.\",\n appearance,\n className,\n style,\n formatDate = defaultFormatDate,\n}: BillActivityTimelineProps): ReactElement {\n return (\n <section\n className={[\"mb-activity\", className].filter(Boolean).join(\" \")}\n style={mindBillAppearanceStyle(appearance, style)}\n aria-label=\"Bill activity\"\n >\n <style>{lifecycleSurfaceStyles}</style>\n {!events.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <ol className=\"mb-activity-list\">\n {events.map((event) => (\n <li className=\"mb-activity-item\" key={event.id}>\n <span className=\"mb-activity-marker\" aria-hidden=\"true\" />\n <div className=\"mb-activity-content\">\n <strong>{event.title ?? billActivityEventLabel(event.type)}</strong>\n {event.description ? <p>{event.description}</p> : null}\n <span>\n {formatDate(event.createdAt)}\n {event.actor ? ` · ${event.actor}` : \"\"}\n </span>\n </div>\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\nconst lifecycleSurfaceStyles = `\n.mb-lifecycle-actions,.mb-activity{box-sizing:border-box;color:var(--mb-text);font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}\n.mb-lifecycle-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}\n.mb-lifecycle-action{display:grid;gap:5px;max-width:260px}\n.mb-action-button{appearance:none;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:700;line-height:1.2;padding:11px 15px;cursor:pointer}\n.mb-action-button:hover:not(:disabled){border-color:var(--mb-accent);color:var(--mb-accent)}\n.mb-action-button:focus-visible{outline:3px solid color-mix(in srgb,var(--mb-accent) 28%,transparent);outline-offset:2px}\n.mb-action-button.is-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-action-button:disabled{cursor:not-allowed;opacity:.55}\n.mb-action-reason{color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mb-activity{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,12px);box-shadow:var(--mb-shadow);padding:20px}\n.mb-activity-list{list-style:none;margin:0;padding:0}\n.mb-activity-item{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;position:relative;padding:0 0 22px}\n.mb-activity-item:last-child{padding-bottom:0}\n.mb-activity-item:not(:last-child)::before{background:var(--mb-border);content:\"\";left:8px;position:absolute;top:10px;bottom:0;width:1px}\n.mb-activity-marker{background:var(--mb-surface);border:3px solid var(--mb-accent);border-radius:999px;height:11px;margin-top:4px;position:relative;width:11px;z-index:1}\n.mb-activity-content{display:grid;gap:4px;min-width:0}\n.mb-activity-content strong{font-size:15px;line-height:1.35}\n.mb-activity-content p{color:var(--mb-text);font-size:14px;line-height:1.5;margin:0}\n.mb-activity-content span,.mb-activity-empty{color:var(--mb-muted);font-size:13px;line-height:1.45}\n.mb-activity-empty{margin:0}\n`;\n","\"use client\";\n\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\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 BillReviewDocumentType,\n type BillReviewFeatures,\n type BillReviewSaveInput,\n type BillSubmissionInput,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n createBillLifecycleClient,\n type BillEorDocument,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type BillLifecycleActionId,\n type BrowserBillCreateInput,\n type CloseBillInput,\n type PostBillPaymentInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nexport { createBillLifecycleClient } from \"@mindbill/browser\";\nexport type {\n BillEorDocument,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BrowserBillAddress,\n BrowserBillCreateInput,\n CloseBillInput,\n PostBillPaymentInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n /** Initial bill snapshot used when no existing `billId` is supplied. */\n create?: BrowserBillCreateInput;\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\n onBillCreated?: (billId: string, data: BillLifecycleData) => void | Promise<void>;\n onBillIdChange?: (\n billId: string,\n previousBillId: string | null,\n ) => void | Promise<void>;\n};\n\nexport type UseBillLifecycleResult = {\n billId: string | null;\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 getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\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\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 create,\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 onBillCreated,\n onBillIdChange,\n fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [billId, setBillId] = useState<string | null>(providedBillId ?? null);\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 ?? null);\n setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n ...(providedBillId ? { billId: providedBillId } : {}),\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, fetchOverride, getSession, providedBillId, 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 let next: BillLifecycleData;\n if (!client.getBillId()) {\n if (!create) throw new Error(\"Pass billId to open a bill or create to start a new one.\");\n const created = await client.createBill(create);\n await onBillCreated?.(created.billId, created.data);\n await onBillIdChange?.(created.billId, null);\n if (mounted.current) setBillId(created.billId);\n next = created.data;\n } else {\n next = await client.getLifecycle();\n }\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, create, enabled, onBillCreated, onBillIdChange]);\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, claimNumber?: string) =>\n client.searchClaimsAdministrators(query, claimNumber),\n [client],\n );\n const getDeliveryOptions = useCallback(\n () => client.getDeliveryOptions(),\n [client],\n );\n const submitBill = useCallback(\n (input: BillReviewSaveInput, submission: BillSubmissionInput) =>\n mutate(() => client.submitBill(input, submission)),\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 getDeliveryOptions,\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?: MindBillReactAppearance;\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 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={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n <style>{CONNECTED_THEME_OVERRIDE_STYLES}</style>\n {canEditAndSubmit\n ? <BillReviewForm\n data={data}\n {...(appearance ? { appearance } : {})}\n {...(features ? { features } : {})}\n disabled={lifecycle.isMutating}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetDeliveryOptions={lifecycle.getDeliveryOptions}\n onSave={lifecycle.saveReview}\n onSubmit={async (input, submission) => { await complete(\"Bill submitted.\", () => lifecycle.submitBill(input, submission)); }}\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\nconst CONNECTED_THEME_OVERRIDE_STYLES = `\n.mb-connected-lifecycle{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-lifecycle-toolbar,.mb-lifecycle-card,.mb-lifecycle-panel{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface)}\n.mb-lifecycle-panel{box-shadow:var(--mb-shadow)}\n.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}\n.mb-lifecycle-button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-lifecycle-button.primary:hover{filter:brightness(.96)}\n.mb-lifecycle-button.danger{border-color:var(--mb-danger);background:var(--mb-danger);color:white}\n.mb-lifecycle-card header>span,.mb-lifecycle-info,.mb-lifecycle-upload{background:var(--mb-soft)}\n.mb-lifecycle-info,.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{border-color:var(--mb-border);border-radius:var(--mb-control-radius)}\n.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{background:var(--mb-input);color:var(--mb-text)}\n.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading,.mb-lifecycle-upload{border-radius:var(--mb-control-radius)}\n.mb-lifecycle-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-lifecycle-message.error,.mb-lifecycle-error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n`;\n"],"mappings":"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","names":["useEffect","useRef","value","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useMemo","useState","useRef","useEffect","jsx","jsxs","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","createBillLifecycleClient","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","useState","useRef","useEffect","useMemo","useCallback","document","useRef","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/appearance.ts","../src/native-bill-review.tsx","../src/bill-submission-form.tsx","../src/connected-bill-status.tsx","../src/bill-lifecycle-surfaces.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}\n\n\nexport type {\n MindBillAppearance,\n MindBillErrorDetail,\n MindBillEventDetail,\n} from \"@mindbill/embed\";\n\nexport {\n mindBillAppearanceStyle,\n mindBillThemePresets,\n resolveMindBillAppearance,\n} from \"./appearance\";\nexport type {\n MindBillReactAppearance,\n MindBillThemePreset,\n} from \"./appearance\";\n\nexport {\n BillReviewForm,\n BillStatusSummary,\n buildBillReviewSaveInput,\n ensureTrailingProcedureLine,\n} from \"./native-bill-review\";\n\nexport {\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BILL_SUBMISSION_REQUIRED_FIELDS,\n BillSubmissionForm,\n validateBillSubmission,\n} from \"./bill-submission-form\";\nexport type {\n BillSubmissionAddress,\n BillSubmissionDocumentType,\n BillSubmissionFormProps,\n BillSubmissionFormValue,\n BillSubmissionInput,\n BillSubmissionSourceAttachment,\n BillSubmissionUpload,\n BillSubmissionValidation,\n} from \"./bill-submission-form\";\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 BillActivityTimeline,\n BillLifecycleActions,\n BillLifecycleProgress,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n billActivityEventLabel,\n billLifecycleStage,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillLifecycleActionsProps,\n BillLifecycleProgressProps,\n BillLifecycleStage,\n BillPaymentLedgerProps,\n BillPayerContactCardProps,\n BillRemittanceCardProps,\n BillSnapshotSummaryProps,\n} from \"./bill-lifecycle-surfaces\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport type {\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BillPaymentRecord,\n BillRemittanceSummary,\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","import type { CSSProperties } from \"react\";\nimport type { MindBillAppearance } from \"@mindbill/embed\";\n\nexport type MindBillThemePreset =\n | \"mindbill\"\n | \"qme-companion\"\n | \"orange-bright\"\n | \"clinical-blue\";\n\nexport type MindBillReactAppearance = MindBillAppearance & {\n /** A complete starting point. Individual tokens below always win. */\n preset?: MindBillThemePreset;\n accentTextColor?: string;\n inputBackgroundColor?: string;\n controlRadius?: string;\n shadow?: string;\n dangerColor?: string;\n successColor?: string;\n warningColor?: string;\n};\n\nexport const mindBillThemePresets = {\n mindbill: {\n accentColor: \"#238dbd\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f3f8fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#203743\",\n mutedColor: \"#657982\",\n borderColor: \"#dbe6ea\",\n borderRadius: \"14px\",\n controlRadius: \"8px\",\n shadow: \"0 8px 24px rgba(28,58,72,.04)\",\n dangerColor: \"#b63d35\",\n successColor: \"#217449\",\n warningColor: \"#8a5c17\",\n },\n \"qme-companion\": {\n accentColor: \"#53b5dc\",\n accentTextColor: \"#173542\",\n backgroundColor: \"#f2f8fb\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1d3440\",\n mutedColor: \"#617783\",\n borderColor: \"#d7e5eb\",\n borderRadius: \"12px\",\n controlRadius: \"8px\",\n shadow: \"0 1px 2px rgba(29,52,64,.05)\",\n dangerColor: \"#b83f3a\",\n successColor: \"#21835d\",\n warningColor: \"#9a6418\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"orange-bright\": {\n accentColor: \"#ff4f0a\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#111827\",\n mutedColor: \"#626a73\",\n borderColor: \"#e5e1dc\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 4px 18px rgba(17,24,39,.06)\",\n dangerColor: \"#b42318\",\n successColor: \"#16794f\",\n warningColor: \"#9a5b13\",\n fontFamily: \"Inter, ui-sans-serif, system-ui, sans-serif\",\n },\n \"clinical-blue\": {\n accentColor: \"#1677ff\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#f5f7fa\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#1f2d3d\",\n mutedColor: \"#66788a\",\n borderColor: \"#d9e2ec\",\n borderRadius: \"8px\",\n controlRadius: \"6px\",\n shadow: \"0 2px 8px rgba(31,45,61,.06)\",\n dangerColor: \"#d4380d\",\n successColor: \"#389e0d\",\n warningColor: \"#d48806\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif\",\n },\n} as const satisfies Record<MindBillThemePreset, MindBillReactAppearance>;\n\nexport function resolveMindBillAppearance(\n appearance: MindBillReactAppearance | undefined,\n): MindBillReactAppearance {\n const preset = appearance?.preset ?? \"mindbill\";\n return { ...mindBillThemePresets[preset], ...appearance, preset };\n}\n\nexport function mindBillAppearanceStyle(\n appearance: MindBillReactAppearance | undefined,\n style?: CSSProperties,\n): CSSProperties {\n const resolved = resolveMindBillAppearance(appearance);\n return {\n \"--mb-accent\": resolved.accentColor,\n \"--mb-accent-contrast\": resolved.accentTextColor,\n \"--mb-text\": resolved.textColor,\n \"--mb-muted\": resolved.mutedColor,\n \"--mb-border\": resolved.borderColor,\n \"--mb-soft\": resolved.backgroundColor,\n \"--mb-surface\": resolved.surfaceColor,\n \"--mb-input\": resolved.inputBackgroundColor,\n \"--mb-font\": resolved.fontFamily,\n \"--mb-radius\": resolved.borderRadius,\n \"--mb-control-radius\": resolved.controlRadius,\n \"--mb-shadow\": resolved.shadow,\n \"--mb-danger\": resolved.dangerColor,\n \"--mb-success\": resolved.successColor,\n \"--mb-warning\": resolved.warningColor,\n ...style,\n } as CSSProperties;\n}\n","\"use client\";\n\nimport { sanitizeBillReviewSaveInput } from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport type { CSSProperties, FormEvent, KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useId, useMemo, useRef, 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 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 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 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 serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n};\n\nconst EMPTY_PROCEDURE_LINE: BillReviewLineItem = {\n code: \"\",\n modifiers: [],\n units: 1,\n charge: 0,\n};\n\nfunction isEmptyProcedureLine(line: BillReviewLineItem): boolean {\n return !line.code.trim() && line.modifiers.length === 0 && line.units === 1 && !line.serviceDate && !line.serviceDateEnd && !line.charge && !(line.diagnosisPointers?.length);\n}\n\n/** Keeps completed/partial lines plus one keyboard-ready empty row. */\nexport function ensureTrailingProcedureLine(\n lines: readonly BillReviewLineItem[],\n): BillReviewLineItem[] {\n const entered = lines\n .filter((line) => !isEmptyProcedureLine(line))\n .map((line) => ({ ...line, modifiers: [...line.modifiers] }));\n\n return entered.length < 50\n ? [...entered, { ...EMPTY_PROCEDURE_LINE, modifiers: [] }]\n : entered;\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 confidence?: \"high\" | \"medium\" | \"directory\";\n recommended?: boolean;\n signals?: Array<{\n kind: \"name\" | \"claim_number\";\n state: \"match\" | \"warning\";\n label: string;\n }>;\n};\n\nexport type BillReviewFeatures = {\n authorizationNumber?: boolean;\n serviceDateRange?: boolean;\n wcabNumber?: boolean;\n codingPresets?: boolean;\n};\n\nexport type BillReviewClaimPatternStatus = {\n state: \"match\" | \"warning\" | \"unknown\";\n label: string;\n detail?: string;\n suggestion?: string;\n};\n\nexport type BillReviewData = {\n bill: {\n id: string;\n billingMode: \"med_legal\" | \"professional\";\n billNumber: string | number;\n status: string;\n transmissionState?: string;\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\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: {\n name: string;\n firstName?: string;\n middleName?: string;\n lastName?: string;\n dob?: string;\n };\n injury: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n claimsAdminId?: string;\n claimsAdminName?: string;\n claimPatternStatus?: BillReviewClaimPatternStatus;\n };\n};\n\nexport type BillReviewSaveInput = {\n claimsAdminId: string;\n patientOverrides?: {\n firstName: string;\n middleName?: string;\n lastName: string;\n dob?: string;\n };\n injuryOverrides?: {\n claimNumber?: string;\n employer?: string;\n doi?: string;\n injuryEndDate?: string;\n cumulativeTrauma?: boolean;\n adjNumber?: string;\n };\n dos: string;\n dosEnd?: string | null;\n authorizationNumber?: string | null;\n billingProvider?: BillReviewBillingProvider;\n renderingProvider?: BillReviewClinician;\n placeOfService?: BillReviewLocation;\n lineItems: Array<{\n id?: string;\n code: string;\n modifiers: string[];\n units: number;\n charge?: number;\n serviceDate?: string | null;\n serviceDateEnd?: string | null;\n diagnosisPointers?: number[];\n }>;\n};\n\nexport type BillSubmissionRoute = \"ebill\" | \"fax\" | \"mail\" | \"email\";\n\nexport type BillDeliveryOption = {\n route: BillSubmissionRoute;\n label: string;\n detail: string;\n fallback: boolean;\n confidence: string;\n payerName: string;\n target?: string;\n chKey?: string;\n payerId?: string;\n printAndMail?: boolean;\n costUsd?: number;\n};\n\nexport type BillDeliveryOptions = {\n payerName: string;\n recommended: BillDeliveryOption;\n options: BillDeliveryOption[];\n contacts: {\n faxNumber?: string | null;\n claimsEmail?: string | null;\n portalUrl?: string | null;\n mailingAddress?: string | null;\n };\n};\n\nexport type BillSubmissionInput = {\n route: BillSubmissionRoute;\n destination?: {\n faxNumber?: string;\n email?: string;\n mailingAddress?: string;\n };\n attention?: string;\n subject?: string;\n note?: string;\n};\n\nexport type BillReviewFormProps = {\n data: BillReviewData;\n mode?: \"review\" | \"submission\";\n initialSubmission?: BillSubmissionInput;\n onSave?: (input: BillReviewSaveInput) => Promise<BillReviewData | void>;\n onSubmit: (\n input: BillReviewSaveInput,\n submission: BillSubmissionInput,\n ) => Promise<void>;\n onGetDeliveryOptions?: () => Promise<BillDeliveryOptions>;\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 claimNumber?: string,\n ) => Promise<BillReviewPayer[]>;\n className?: string;\n style?: CSSProperties;\n appearance?: MindBillReactAppearance;\n features?: BillReviewFeatures;\n disabled?: boolean;\n};\n\nexport type BillReviewDraft = {\n claimsAdminId: string;\n claimsAdminName: string;\n patientFirstName: string;\n patientMiddleName: string;\n patientLastName: string;\n patientDob: string;\n claimNumber: string;\n employer: string;\n doi: string;\n injuryEndDate: string;\n cumulativeTrauma: boolean;\n adjNumber: 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\nconst US_STATES = [\"AL\",\"AK\",\"AZ\",\"AR\",\"CA\",\"CO\",\"CT\",\"DE\",\"FL\",\"GA\",\"HI\",\"ID\",\"IL\",\"IN\",\"IA\",\"KS\",\"KY\",\"LA\",\"ME\",\"MD\",\"MA\",\"MI\",\"MN\",\"MS\",\"MO\",\"MT\",\"NE\",\"NV\",\"NH\",\"NJ\",\"NM\",\"NY\",\"NC\",\"ND\",\"OH\",\"OK\",\"OR\",\"PA\",\"RI\",\"SC\",\"SD\",\"TN\",\"TX\",\"UT\",\"VT\",\"VA\",\"WA\",\"WV\",\"WI\",\"WY\",\"DC\"];\nconst PROCEDURES = [\n [\"ML200\", \"Missed med-legal appointment\"],\n [\"ML201\", \"Comprehensive med-legal evaluation\"],\n [\"ML202\", \"Follow-up med-legal evaluation\"],\n [\"ML203\", \"Supplemental med-legal evaluation\"],\n [\"ML204\", \"Medical-legal testimony\"],\n [\"ML205\", \"Sub rosa recording review\"],\n [\"MLPRR\", \"Medical record review\"],\n] as const;\nconst MODIFIERS = [\n [\"92\", \"Primary treating physician\"], [\"93\", \"Interpreter required\"],\n [\"94\", \"Agreed medical evaluator (AME)\"], [\"95\", \"Qualified medical evaluator (QME)\"],\n [\"96\", \"Psychiatric or psychological evaluation\"], [\"97\", \"Toxicology evaluation\"],\n [\"98\", \"Oncology evaluation\"],\n] as const;\ntype CodingPreset = \"qme\" | \"ame\" | \"psych_qme\";\nconst MANAGED_EVALUATOR_MODIFIERS = new Set([\"94\", \"95\", \"96\"]);\nconst MODIFIER_CODES: Record<string, readonly string[]> = {\n \"92\": [\"ML201\", \"ML202\", \"ML203\"],\n \"93\": [\"ML201\", \"ML202\"],\n \"94\": [\"ML201\", \"ML202\", \"ML203\"],\n \"95\": [\"ML200\", \"ML201\", \"ML202\", \"ML203\", \"MLPRR\"],\n \"96\": [\"ML201\", \"ML202\", \"ML203\"],\n \"97\": [\"ML201\", \"ML202\", \"ML203\"],\n \"98\": [\"ML201\", \"ML202\", \"ML203\"],\n};\n\nfunction toDraft(data: BillReviewData): BillReviewDraft {\n const snapshot = data.bill.billingSnapshot;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n return {\n claimsAdminId: data.injury.claimsAdminId || \"\",\n claimsAdminName: data.injury.claimsAdminName || \"\",\n patientFirstName: data.patient.firstName || nameParts[0] || \"\",\n patientMiddleName: data.patient.middleName || (nameParts.length > 2 ? nameParts.slice(1, -1).join(\" \") : \"\"),\n patientLastName: data.patient.lastName || (nameParts.length > 1 ? (nameParts.at(-1) || \"\") : \"\"),\n patientDob: data.patient.dob || \"\",\n claimNumber: data.injury.claimNumber || \"\",\n employer: data.injury.employer || \"\",\n doi: data.injury.doi || \"\",\n injuryEndDate: data.injury.injuryEndDate || \"\",\n cumulativeTrauma: Boolean(data.injury.cumulativeTrauma),\n adjNumber: data.injury.adjNumber || \"\",\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: ensureTrailingProcedureLine(data.bill.lineItems),\n };\n}\n\nexport function buildBillReviewSaveInput(\n draft: BillReviewDraft,\n): BillReviewSaveInput {\n return sanitizeBillReviewSaveInput({\n claimsAdminId: draft.claimsAdminId,\n patientOverrides: {\n firstName: draft.patientFirstName.trim(),\n ...(draft.patientMiddleName.trim() ? { middleName: draft.patientMiddleName.trim() } : {}),\n lastName: draft.patientLastName.trim(),\n ...(draft.patientDob ? { dob: draft.patientDob } : {}),\n },\n injuryOverrides: {\n ...(draft.claimNumber.trim() ? { claimNumber: draft.claimNumber.trim() } : {}),\n ...(draft.employer.trim() ? { employer: draft.employer.trim() } : {}),\n ...(draft.doi ? { doi: draft.doi } : {}),\n ...(draft.injuryEndDate ? { injuryEndDate: draft.injuryEndDate } : {}),\n cumulativeTrauma: draft.cumulativeTrauma,\n ...(draft.adjNumber.trim() ? { adjNumber: draft.adjNumber.trim().toUpperCase().replace(/\\s+/g, \"\") } : {}),\n },\n dos: draft.dos,\n dosEnd: draft.dosEnd || null,\n authorizationNumber: draft.authorizationNumber.trim() || null,\n billingProvider: { ...draft.billingProvider },\n renderingProvider: { ...draft.clinician },\n placeOfService: { ...draft.location },\n lineItems: draft.lineItems.filter((line) => line.code.trim()).map(({ id, code, modifiers, units, charge, serviceDate, serviceDateEnd, diagnosisPointers }) => ({\n ...(id ? { id } : {}),\n code: code.trim().toUpperCase(),\n modifiers,\n units,\n ...(charge ? { charge } : {}),\n ...(serviceDate ? { serviceDate } : {}),\n ...(serviceDateEnd ? { serviceDateEnd } : {}),\n ...(diagnosisPointers?.length ? { diagnosisPointers } : {}),\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 Field({\n label,\n value,\n onChange,\n type = \"text\",\n optional,\n required,\n disabled,\n hint,\n}: {\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n optional?: boolean;\n required?: boolean;\n disabled?: boolean;\n hint?: string;\n}): ReactElement {\n return (\n <label className=\"mb-native-field\">\n <span>\n {label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}{optional ? <> <small>Optional</small></> : null}\n </span>\n <input\n type={type}\n value={value}\n required={required}\n disabled={disabled}\n autoComplete=\"off\"\n onChange={(event) => onChange(event.target.value)}\n />\n {hint ? <small className=\"mb-native-hint\">{hint}</small> : null}\n </label>\n );\n}\n\ntype ComboOption = {\n value: string;\n label: string;\n detail?: string;\n badge?: string;\n};\n\nfunction Combobox({ label, value, options, onChange, placeholder, required, disabled, name }: {\n label: string;\n value: string;\n options: ComboOption[];\n onChange: (value: string, option?: ComboOption) => void;\n placeholder?: string;\n required?: boolean;\n disabled?: boolean;\n name?: string;\n}): ReactElement {\n const listId = useId();\n const root = useRef<HTMLDivElement>(null);\n const [open, setOpen] = useState(false);\n const [active, setActive] = useState(0);\n const filtered = useMemo(() => {\n const query = value.trim().toLowerCase();\n return options.filter((option) => !query || option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query)).slice(0, 40);\n }, [options, value]);\n useEffect(() => {\n const close = (event: MouseEvent) => {\n if (!root.current?.contains(event.target as Node)) setOpen(false);\n };\n document.addEventListener(\"mousedown\", close);\n return () => document.removeEventListener(\"mousedown\", close);\n }, []);\n const select = (option: ComboOption) => {\n onChange(option.value, option);\n setOpen(false);\n setActive(0);\n };\n const keyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"ArrowDown\") { event.preventDefault(); setOpen(true); setActive((value) => Math.min(value + 1, filtered.length - 1)); }\n if (event.key === \"ArrowUp\") { event.preventDefault(); setActive((value) => Math.max(value - 1, 0)); }\n if (event.key === \"Enter\" && open && filtered[active]) { event.preventDefault(); select(filtered[active]); }\n if (event.key === \"Escape\") setOpen(false);\n };\n return <div className=\"mb-native-combo\" ref={root}>\n <label className=\"mb-native-field\">\n <span>{label}{required ? <span className=\"mb-native-required\" aria-hidden=\"true\"> *</span> : null}</span>\n <input\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={listId}\n aria-expanded={open && filtered.length > 0}\n aria-activedescendant={open && filtered[active] ? `${listId}-${active}` : undefined}\n name={name || \"mindbill-search-value\"}\n autoComplete=\"new-password\"\n data-1p-ignore=\"true\"\n data-lpignore=\"true\"\n value={value}\n placeholder={placeholder}\n required={required}\n disabled={disabled}\n onFocus={() => setOpen(true)}\n onKeyDown={keyDown}\n onChange={(event) => { onChange(event.target.value); setOpen(true); setActive(0); }}\n />\n </label>\n {open && filtered.length ? <ul id={listId} role=\"listbox\" className=\"mb-native-combo-list\">\n {filtered.map((option, index) => <li id={`${listId}-${index}`} role=\"option\" aria-selected={index === active} key={`${option.value}-${index}`}>\n <button type=\"button\" className={index === active ? \"active\" : \"\"} onMouseDown={(event) => event.preventDefault()} onClick={() => select(option)}>\n <span className=\"mb-native-combo-title\"><strong>{option.label}</strong>{option.badge ? <em>{option.badge}</em> : null}</span>{option.detail ? <span>{option.detail}</span> : null}\n </button>\n </li>)}\n </ul> : null}\n </div>;\n}\n\nfunction StateCombobox({ label, value, onChange, required, disabled }: { label: string; value: string; onChange: (value: string) => void; required?: boolean; disabled?: boolean }): ReactElement {\n return <Combobox\n label={label}\n value={value}\n onChange={(next) => onChange(next.toUpperCase().slice(0, 2))}\n options={US_STATES.map((state) => ({ value: state, label: state }))}\n {...(required === undefined ? {} : { required })}\n {...(disabled === undefined ? {} : { disabled })}\n name=\"mindbill-state-value\"\n />;\n}\n\nfunction inferPreset(lines: BillReviewLineItem[]): CodingPreset {\n const modifiers = new Set(lines.flatMap((line) => line.modifiers));\n return modifiers.has(\"94\") ? \"ame\" : modifiers.has(\"96\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction presetModifiersForCode(preset: CodingPreset, code: string): string[] {\n if (code === \"MLPRR\") return [\"95\"];\n if (preset === \"qme\" && [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"95\"];\n if (preset === \"ame\" && [\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"94\"];\n if (preset === \"psych_qme\") {\n if (code === \"ML200\") return [\"95\"];\n if ([\"ML201\", \"ML202\", \"ML203\"].includes(code)) return [\"96\"];\n }\n return [];\n}\n\nfunction modifierAppliesToCode(modifier: string, code: string): boolean {\n return !code || (MODIFIER_CODES[modifier]?.includes(code) ?? true);\n}\n\nfunction applyPreset(lines: BillReviewLineItem[], preset: CodingPreset): BillReviewLineItem[] {\n return lines.map((line) => {\n const preserved = line.modifiers.filter(\n (value) => !MANAGED_EVALUATOR_MODIFIERS.has(value) && modifierAppliesToCode(value, line.code),\n );\n return {\n ...line,\n modifiers: [...new Set([...presetModifiersForCode(preset, line.code), ...preserved])],\n };\n });\n}\n\nexport function BillReviewForm({\n data,\n mode = \"review\",\n initialSubmission = { route: \"ebill\" },\n onSave,\n onSubmit,\n onGetDeliveryOptions,\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 [deliveryOptions, setDeliveryOptions] = useState<BillDeliveryOptions | null>(null);\n const [submission, setSubmission] = useState<BillSubmissionInput>(initialSubmission);\n const [showSubmit, setShowSubmit] = useState(false);\n const [deliveryBusy, setDeliveryBusy] = useState(false);\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 editable = (mode === \"submission\" || data.bill.status === \"incomplete\") && !disabled;\n\n useEffect(() => {\n setDraft(toDraft(data));\n setPayerQuery(data.injury.claimsAdminName || \"\");\n }, [data]);\n\n useEffect(() => {\n const query = payerQuery.trim();\n const claimNumber = draft.claimNumber.trim();\n if (\n !onSearchClaimsAdministrators ||\n (query.length < 2 && claimNumber.length < 4)\n ) {\n setPayerResults([]);\n setPayerBusy(false);\n return;\n }\n let current = true;\n const timer = window.setTimeout(() => {\n setPayerBusy(true);\n void onSearchClaimsAdministrators(query, claimNumber)\n .then((results) => {\n if (!current) return;\n setPayerResults(results);\n const recommendation = results.find(\n (payer) => payer.recommended && payer.confidence === \"high\",\n );\n if (!draft.claimsAdminId && recommendation) {\n setDraft((currentDraft) => ({\n ...currentDraft,\n claimsAdminId: recommendation.id,\n claimsAdminName: recommendation.name,\n }));\n setPayerQuery(recommendation.name);\n setNotice(\n \"Claims administrator matched from the case data. Review and save to keep it on this bill.\",\n );\n }\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 }, [\n draft.claimNumber,\n draft.claimsAdminId,\n onSearchClaimsAdministrators,\n payerQuery,\n ]);\n\n const selectedPayer = payerResults.find(\n (payer) => payer.id === draft.claimsAdminId,\n );\n\n const adjFormatValid =\n !draft.adjNumber ||\n /^ADJ\\d{7,}$/i.test(draft.adjNumber.replace(/[\\s-]/g, \"\"));\n const blockers = useMemo(() => {\n const result: string[] = [];\n if (!draft.patientFirstName.trim() || !draft.patientLastName.trim()) result.push(\"Patient name\");\n if (!draft.claimsAdminId) result.push(\"Claims administrator\");\n if (!draft.claimNumber.trim()) result.push(\"Claim number\");\n if (!draft.doi) result.push(\"Date of injury\");\n if (!adjFormatValid) result.push(\"Valid WCAB / ADJ number\");\n if (data.bill.billingMode === \"med_legal\" && !draft.dos) result.push(\"Date of service\");\n if (!draft.billingProvider.name.trim()) result.push(\"Practice name\");\n if (!draft.billingProvider.taxId.trim()) result.push(\"Tax ID\");\n if (!draft.billingProvider.npi.trim()) result.push(\"Billing NPI\");\n if (!draft.clinician.name.trim() || !draft.clinician.npi.trim()) result.push(\"Clinician and NPI\");\n if (![draft.location.name, draft.location.street, draft.location.city, draft.location.state, draft.location.zip].every((value) => value.trim())) result.push(\"Service location\");\n const completedLines = draft.lineItems.filter((line) => line.code.trim());\n if (!completedLines.length || completedLines.some((line) => line.units <= 0)) result.push(\"Valid procedure line\");\n if (data.bill.billingMode === \"professional\" && completedLines.some((line) => !line.serviceDate || line.charge <= 0)) {\n result.push(\"Service date and charge on every procedure line\");\n }\n return result;\n }, [adjFormatValid, data.bill.billingMode, draft]);\n const canSubmit = blockers.length === 0;\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 if (mode === \"submission\") {\n if (!canSubmit) return;\n void run(\"submit\", () => onSubmit(buildBillReviewSaveInput(draft), initialSubmission));\n return;\n }\n if (!onSave) return;\n void run(\"save\", async () => {\n const updated = await onSave(buildBillReviewSaveInput(draft));\n if (updated) setDraft(toDraft(updated));\n });\n };\n\n const openSubmit = async () => {\n if (!onGetDeliveryOptions) return;\n setDeliveryBusy(true);\n setError(\"\");\n try {\n const next = await onGetDeliveryOptions();\n setDeliveryOptions(next);\n const recommended = next.recommended ?? next.options[0];\n if (!recommended) throw new Error(\"No delivery route is available for this payer.\");\n setSubmission({ route: recommended.route });\n setShowSubmit(true);\n } catch (cause) {\n setError(cause instanceof Error ? cause.message : \"Delivery routes could not be loaded.\");\n } finally {\n setDeliveryBusy(false);\n }\n };\n\n const selectedDelivery = deliveryOptions?.options.find((option) => option.route === submission.route);\n const destinationLabel = submission.route === \"fax\"\n ? \"Fax number\"\n : submission.route === \"email\"\n ? \"Email address\"\n : submission.route === \"mail\"\n ? \"Mailing address\"\n : \"\";\n const destinationValue = submission.route === \"fax\"\n ? submission.destination?.faxNumber ?? selectedDelivery?.target ?? deliveryOptions?.contacts.faxNumber ?? \"\"\n : submission.route === \"email\"\n ? submission.destination?.email ?? selectedDelivery?.target ?? deliveryOptions?.contacts.claimsEmail ?? \"\"\n : submission.route === \"mail\"\n ? submission.destination?.mailingAddress ?? selectedDelivery?.target ?? deliveryOptions?.contacts.mailingAddress ?? \"\"\n : \"\";\n const setDestination = (value: string) => setSubmission((current) => {\n const destination = current.route === \"fax\"\n ? { faxNumber: value }\n : current.route === \"email\"\n ? { email: value }\n : { mailingAddress: value };\n return { ...current, destination };\n });\n const handleSubmit = () => run(\"submit\", async () => {\n await onSubmit(buildBillReviewSaveInput(draft), submission);\n setShowSubmit(false);\n });\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={mindBillAppearanceStyle(appearance, style)}\n onSubmit={handleSave}\n >\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_STYLES}</style>\n <style>{NATIVE_SUBMISSION_DIALOG_STYLES}</style>\n {mode === \"review\" ? <><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>{[draft.patientFirstName, draft.patientMiddleName, draft.patientLastName].filter(Boolean).join(\" \") || \"—\"}</dd></div>\n <div><dt>Claim</dt><dd>{draft.claimNumber || \"—\"}</dd></div>\n <div><dt>Employer</dt><dd>{draft.employer || \"—\"}</dd></div>\n <div><dt>Date of injury</dt><dd>{draft.doi || \"—\"}</dd></div>\n </dl></> : null}\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 </div>\n <div className=\"mb-native-payer-picker\">\n <Combobox\n label=\"Insurance company or claims administrator\"\n required\n value={payerQuery}\n disabled={!editable}\n placeholder=\"Search by payer or administrator name\"\n name=\"mindbill-payer-query\"\n options={payerResults.map((payer) => ({\n value: payer.id,\n label: payer.name,\n ...(payer.recommended\n ? { badge: \"Recommended\" }\n : payer.confidence === \"medium\"\n ? { badge: \"Claim match\" }\n : {}),\n detail: [\n ...(payer.signals ?? []).map((signal) => signal.label),\n payer.hasElectronic\n ? \"Electronic billing available.\"\n : \"Billing route confirmed after review.\",\n ].join(\" \"),\n }))}\n onChange={(value, option) => {\n if (option) {\n setDraft((current) => ({ ...current, claimsAdminId: option.value, claimsAdminName: option.label }));\n setPayerQuery(option.label);\n setNotice(\"Claims administrator selected. Save changes to keep it on this bill.\");\n } else {\n setPayerQuery(value);\n setDraft((current) => value === current.claimsAdminName ? current : { ...current, claimsAdminId: \"\", claimsAdminName: \"\" });\n }\n }}\n />\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 {selectedPayer?.signals?.length ? (\n <div className=\"mb-native-payer-insight\" role=\"status\">\n {selectedPayer.signals.map((signal) => (\n <span className={signal.state} key={`${signal.kind}-${signal.label}`}>\n {signal.label}\n </span>\n ))}\n </div>\n ) : null}\n </div>\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Patient and claim</h3><p>Review the case details that will print on this bill.</p></div></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Patient first name\" required disabled={!editable} value={draft.patientFirstName} onChange={(patientFirstName) => setDraft((current) => ({ ...current, patientFirstName }))} />\n <Field label=\"Middle name\" optional disabled={!editable} value={draft.patientMiddleName} onChange={(patientMiddleName) => setDraft((current) => ({ ...current, patientMiddleName }))} />\n <Field label=\"Patient last name\" required disabled={!editable} value={draft.patientLastName} onChange={(patientLastName) => setDraft((current) => ({ ...current, patientLastName }))} />\n <Field label=\"Date of birth\" type=\"date\" required disabled={!editable} value={draft.patientDob} onChange={(patientDob) => setDraft((current) => ({ ...current, patientDob }))} />\n <Field label=\"Claim number\" required disabled={!editable} value={draft.claimNumber} onChange={(claimNumber) => setDraft((current) => ({ ...current, claimNumber }))} {...((data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label) ? { hint: data.injury.claimPatternStatus?.detail || data.injury.claimPatternStatus?.label || \"\" } : {})} />\n <Field label=\"Employer\" disabled={!editable} value={draft.employer} onChange={(employer) => setDraft((current) => ({ ...current, employer }))} />\n <Field label=\"Date of injury\" type=\"date\" required disabled={!editable} value={draft.doi} onChange={(doi) => setDraft((current) => ({ ...current, doi }))} />\n {draft.cumulativeTrauma ? <Field label=\"Cumulative trauma end date\" type=\"date\" required disabled={!editable} value={draft.injuryEndDate} onChange={(injuryEndDate) => setDraft((current) => ({ ...current, injuryEndDate }))} /> : null}\n {features?.wcabNumber === false ? null : <Field label=\"WCAB / ADJ number\" optional disabled={!editable} value={draft.adjNumber} onChange={(adjNumber) => setDraft((current) => ({ ...current, adjNumber }))} hint={adjFormatValid ? \"Use the EAMS case number shown as ADJ followed by digits.\" : \"Expected format: ADJ followed by at least 7 digits.\"} />}\n </div>\n {features?.wcabNumber === false ? null : <p className=\"mb-native-eams\">EAMS lookup requires California DWC verification. <a href=\"https://eams.dwc.ca.gov/WebEnhancement/\" target=\"_blank\" rel=\"noreferrer\">Verify in EAMS</a>.</p>}\n </section>\n\n <section className={sectionClass}>\n <div className=\"mb-native-section-head\"><div><h3>Service</h3><p>The service date and optional payer authorization printed on this bill.</p></div></div>\n <div className={`mb-native-grid ${features?.serviceDateRange || features?.authorizationNumber !== false ? \"three\" : \"one\"}`}>\n <Field label=\"Date of service\" type=\"date\" required disabled={!editable} value={draft.dos} onChange={(dos) => setDraft((current) => ({ ...current, dos }))} />\n {features?.serviceDateRange ? <Field label=\"Service end date\" type=\"date\" optional disabled={!editable} value={draft.dosEnd} onChange={(dosEnd) => setDraft((current) => ({ ...current, dosEnd }))} /> : null}\n {features?.authorizationNumber === false ? null : <Field label=\"Authorization number\" optional disabled={!editable} 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></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Practice name\" required disabled={!editable} value={draft.billingProvider.name} onChange={(value) => updateBillingProvider(\"name\", value)} />\n <Field label=\"Tax ID\" required disabled={!editable} value={draft.billingProvider.taxId} onChange={(value) => updateBillingProvider(\"taxId\", value)} />\n <Field label=\"Billing NPI\" required disabled={!editable} value={draft.billingProvider.npi} onChange={(value) => updateBillingProvider(\"npi\", value)} />\n <Field label=\"Phone\" optional disabled={!editable} value={draft.billingProvider.phone || \"\"} onChange={(value) => updateBillingProvider(\"phone\", value)} />\n <Field label=\"Billing street\" required disabled={!editable} value={draft.billingProvider.billingStreet || \"\"} onChange={(value) => updateBillingProvider(\"billingStreet\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.billingProvider.billingCity || \"\"} onChange={(value) => updateBillingProvider(\"billingCity\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.billingProvider.billingState || \"\"} onChange={(value) => updateBillingProvider(\"billingState\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} 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></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Clinician name\" required disabled={!editable} value={draft.clinician.name} onChange={(value) => updateClinician(\"name\", value)} />\n <Field label=\"Specialty\" disabled={!editable} value={draft.clinician.specialty} onChange={(value) => updateClinician(\"specialty\", value)} />\n <Field label=\"NPI\" required disabled={!editable} value={draft.clinician.npi} onChange={(value) => updateClinician(\"npi\", value)} />\n <Field label=\"Taxonomy\" optional disabled={!editable} value={draft.clinician.taxonomy || \"\"} onChange={(value) => updateClinician(\"taxonomy\", value)} />\n <Field label=\"License number\" optional disabled={!editable} value={draft.clinician.licenseNumber || \"\"} onChange={(value) => updateClinician(\"licenseNumber\", value)} />\n <StateCombobox label=\"License state (optional)\" disabled={!editable} 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></div>\n <div className=\"mb-native-grid three\">\n <Field label=\"Location name\" required disabled={!editable} value={draft.location.name} onChange={(value) => updateLocation(\"name\", value)} />\n <Field label=\"Street\" required disabled={!editable} value={draft.location.street} onChange={(value) => updateLocation(\"street\", value)} />\n <Field label=\"City\" required disabled={!editable} value={draft.location.city} onChange={(value) => updateLocation(\"city\", value)} />\n <StateCombobox label=\"State\" required disabled={!editable} value={draft.location.state} onChange={(value) => updateLocation(\"state\", value)} />\n <Field label=\"ZIP\" required disabled={!editable} value={draft.location.zip} onChange={(value) => updateLocation(\"zip\", value)} />\n <Field label=\"Place of service code\" required disabled={!editable} 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>{data.bill.billingMode === \"professional\" ? \"Enter the professional services billed. Each line may carry its own date, charge, and diagnosis pointers.\" : \"Choose a billing profile, then review the codes and modifiers.\"} A new row appears as you type.</p></div></div>\n {data.bill.billingMode === \"professional\" || features?.codingPresets === false ? null : <div className=\"mb-native-presets\" role=\"group\" aria-label=\"Evaluation billing profile\">\n {([['qme','QME'],['ame','AME'],['psych_qme','Psych QME']] as const).map(([value,label]) => <button type=\"button\" key={value} className={inferPreset(draft.lineItems) === value ? \"active\" : \"\"} disabled={!editable} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(applyPreset(current.lineItems, value)) }))}>{label}</button>)}\n <span>Sets evaluator modifiers across med-legal lines. You can still edit each line.</span>\n </div>}\n <div className=\"mb-native-lines\">\n {draft.lineItems.map((line, index) => (\n <div className={`mb-native-line ${data.bill.billingMode === \"professional\" ? \"professional\" : \"\"}`} key={line.id || index}>\n <label className=\"mb-native-field\"><span>Procedure<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span>{data.bill.billingMode === \"professional\" ? <input disabled={!editable} placeholder=\"CPT / HCPCS code\" value={line.code} onChange={(event) => {\n const code = event.target.value.toUpperCase();\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, code } : item)) }));\n }} /> : <select disabled={!editable} value={line.code} onChange={(event) => {\n const code = event.target.value;\n setDraft((current) => {\n const lineItems = current.lineItems.map((item, itemIndex) => {\n if (itemIndex !== index) return item;\n const presetLine = applyPreset([{ ...item, code }], inferPreset(current.lineItems))[0];\n return { ...item, code, modifiers: presetLine?.modifiers || [] };\n });\n return { ...current, lineItems: ensureTrailingProcedureLine(lineItems) };\n });\n }}><option value=\"\">Select code…</option>{PROCEDURES.map(([code,label]) => <option value={code} key={code}>{code} — {label}</option>)}</select>}{data.bill.billingMode === \"med_legal\" && line.code ? <small>{PROCEDURES.find(([code]) => code === line.code)?.[1]}</small> : null}</label>\n <div className=\"mb-native-modifiers\">{data.bill.billingMode === \"professional\" ? <label className=\"mb-native-field\"><span>Modifiers</span><input disabled={!editable} placeholder=\"e.g. 25, 59\" value={line.modifiers.join(\", \")} onChange={(event) => {\n const modifiers = event.target.value.toUpperCase().split(/[ ,]+/).map((value) => value.replace(/^-/, \"\")).filter(Boolean);\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers } : item)) }));\n }} /></label> : <label className=\"mb-native-field\"><span>Modifiers</span><select disabled={!editable} value=\"\" onChange={(event) => {\n const modifier = event.target.value;\n if (!modifier) return;\n setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: [...new Set([...item.modifiers, modifier])] } : item)) }));\n }}><option value=\"\">Add modifier…</option>{MODIFIERS.filter(([value]) => !line.modifiers.includes(value) && modifierAppliesToCode(value, line.code)).map(([value,label]) => <option value={value} key={value}>-{value} — {label}</option>)}</select></label>}<div className=\"mb-native-chips\">{data.bill.billingMode === \"med_legal\" ? line.modifiers.map((modifier) => <button type=\"button\" disabled={!editable} key={modifier} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, modifiers: item.modifiers.filter((value) => value !== modifier) } : item)) }))}>-{modifier} ×</button>) : null}</div></div>\n <label className=\"mb-native-field\"><span>Units<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"1\" required disabled={!editable} value={line.units} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, units: Number(event.target.value) } : item)) }))} /></label>\n {data.bill.billingMode === \"professional\" ? <>\n <label className=\"mb-native-field\"><span>Service date<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"date\" required={Boolean(line.code)} disabled={!editable} value={line.serviceDate || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDate: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>End date <small>Optional</small></span><input type=\"date\" disabled={!editable} value={line.serviceDateEnd || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, serviceDateEnd: event.target.value } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Charge<span className=\"mb-native-required\" aria-hidden=\"true\"> *</span></span><input type=\"number\" min=\"0.01\" step=\"0.01\" required={Boolean(line.code)} disabled={!editable} value={line.charge || \"\"} onChange={(event) => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, charge: Number(event.target.value) } : item)) }))} /></label>\n <label className=\"mb-native-field\"><span>Diagnosis pointers <small>1–12</small></span><input inputMode=\"numeric\" disabled={!editable} value={(line.diagnosisPointers || []).join(\", \")} onChange={(event) => { const diagnosisPointers = event.target.value.split(/[ ,]+/).map(Number).filter((value) => Number.isInteger(value) && value >= 1 && value <= 12); setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(current.lineItems.map((item, itemIndex) => itemIndex === index ? { ...item, diagnosisPointers } : item)) })); }} /></label>\n </> : null}\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} onClick={() => setDraft((current) => ({ ...current, lineItems: ensureTrailingProcedureLine(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></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><h3>Submit bill</h3><p>Submitting creates the bill as an immutable snapshot of the information and documents above.</p></div>\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 {!canSubmit ? <div className=\"mb-native-blockers\" role=\"status\"><strong>Before you can submit:</strong><span>{blockers.join(\" · \")}</span></div> : null}\n <div className=\"mb-native-actions\">\n {mode === \"submission\" ? <button className=\"mb-native-button primary\" type=\"submit\" disabled={!editable || !canSubmit || busy !== \"\"}>{busy === \"submit\" ? \"Submitting…\" : \"Submit bill\"}</button> : <>\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 !== \"\" || deliveryBusy} onClick={() => void openSubmit()}>{deliveryBusy ? \"Loading delivery…\" : \"Review delivery\"}</button>\n </>}\n </div>\n </section>\n {showSubmit && deliveryOptions ? <div className=\"mb-native-modal-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && busy !== \"submit\") setShowSubmit(false); }}>\n <section className=\"mb-native-modal\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-native-submit-title\">\n <header><div><span className=\"mb-native-eyebrow\">Send bill</span><h3 id=\"mb-native-submit-title\">Choose a delivery route</h3><p>{deliveryOptions.payerName || \"Claims administrator\"}</p></div><button type=\"button\" className=\"mb-native-close\" aria-label=\"Close\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>×</button></header>\n <fieldset className=\"mb-native-delivery-options\"><legend>Available delivery routes</legend>{deliveryOptions.options.map((option) => <label className={submission.route === option.route ? \"selected\" : \"\"} key={`${option.route}-${option.target || \"default\"}`}><input type=\"radio\" name=\"mindbill-delivery-route\" checked={submission.route === option.route} onChange={() => setSubmission({ route: option.route })} /><span><strong>{option.label}</strong><small>{option.detail}</small>{option.target ? <code>{option.target}</code> : null}</span>{deliveryOptions.recommended?.route === option.route ? <em>Recommended</em> : null}</label>)}</fieldset>\n {submission.route !== \"ebill\" ? <div className=\"mb-native-grid two\"><Field label={destinationLabel} required value={destinationValue} onChange={setDestination} hint=\"You can override the payer directory value for this submission.\" /><Field label=\"Attention\" optional value={submission.attention || \"\"} onChange={(attention) => setSubmission((current) => ({ ...current, attention }))} />{submission.route === \"email\" ? <Field label=\"Subject\" optional value={submission.subject || \"\"} onChange={(subject) => setSubmission((current) => ({ ...current, subject }))} /> : null}</div> : null}\n <Field label=\"Delivery note\" optional value={submission.note || \"\"} onChange={(note) => setSubmission((current) => ({ ...current, note }))} />\n <footer><button className=\"mb-native-button secondary\" type=\"button\" disabled={busy === \"submit\"} onClick={() => setShowSubmit(false)}>Cancel</button><button className=\"mb-native-button primary\" type=\"button\" disabled={busy === \"submit\" || (submission.route !== \"ebill\" && !destinationValue.trim())} onClick={() => void handleSubmit()}>{busy === \"submit\" ? \"Submitting…\" : `Send via ${selectedDelivery?.label || submission.route}`}</button></footer>\n </section>\n </div> : null}\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?: MindBillReactAppearance;\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={mindBillAppearanceStyle(appearance, style)}>\n <style>{NATIVE_BILL_REVIEW_STYLES}</style>\n <style>{NATIVE_THEME_OVERRIDE_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_SUBMISSION_DIALOG_STYLES = `\n.mb-native-field select{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}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-line.professional{grid-template-columns:minmax(140px,1fr) minmax(140px,1fr) 86px 150px 150px 120px minmax(130px,1fr) 120px 28px;overflow-x:auto}\n.mb-native-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}\n.mb-native-modal-backdrop{position:fixed;z-index:9999;inset:0;display:grid;place-items:center;padding:20px;background:rgba(20,38,46,.55);backdrop-filter:blur(3px)}\n.mb-native-modal{display:grid;gap:18px;width:min(720px,100%);max-height:min(820px,calc(100vh - 40px));overflow:auto;padding:22px;border:1px solid var(--mb-border);border-radius:16px;background:#fff;box-shadow:0 28px 80px rgba(14,35,44,.3)}\n.mb-native-modal>header,.mb-native-modal>footer{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-native-modal>footer{justify-content:flex-end}.mb-native-modal h3{margin:3px 0;font-size:22px}.mb-native-modal p{margin:0;color:var(--mb-muted)}\n.mb-native-close{border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font-size:23px;line-height:1;padding:8px 12px}\n.mb-native-delivery-options{display:grid;gap:9px;margin:0;padding:0;border:0}.mb-native-delivery-options legend{margin-bottom:8px;font-weight:800}.mb-native-delivery-options label{display:grid;grid-template-columns:auto 1fr auto;align-items:start;gap:12px;padding:14px;border:1px solid var(--mb-border);border-radius:10px;cursor:pointer}.mb-native-delivery-options label.selected{border-color:var(--mb-accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--mb-accent) 14%,transparent)}.mb-native-delivery-options label>span{display:grid;gap:2px}.mb-native-delivery-options small{color:var(--mb-muted)}.mb-native-delivery-options code{margin-top:4px;color:var(--mb-text);font:12px/1.4 ui-monospace,SFMono-Regular,monospace}.mb-native-delivery-options em{border-radius:999px;background:var(--mb-soft);color:var(--mb-accent-dark);font-size:10px;font-style:normal;font-weight:800;padding:5px 8px;text-transform:uppercase}\n@media(max-width:1100px){.mb-native-line.professional{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-native-line.professional .mb-native-allowed{text-align:left}}\n@media(max-width:620px){.mb-native-grid.two,.mb-native-line.professional{grid-template-columns:1fr}.mb-native-modal-backdrop{padding:0}.mb-native-modal{width:100%;max-height:100vh;border-radius:0;padding:18px}.mb-native-delivery-options label{grid-template-columns:auto 1fr}.mb-native-delivery-options em{grid-column:2}}\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-required{color:#c5352e}.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.mb-native-grid.one{grid-template-columns:minmax(0,1fr)}\n.mb-native-field select{width:100%;min-height:43px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:10px 36px 10px 12px}\n.mb-native-field select:focus{border-color:var(--mb-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--mb-accent) 14%,transparent);outline:0}\n.mb-native-field input:disabled,.mb-native-field select:disabled{cursor:not-allowed;background:#f6f8f9;color:#667982}\n.mb-native-hint{color:var(--mb-muted);font-size:12px;font-weight:500}\n.mb-native-combo{position:relative;min-width:0}\n.mb-native-combo-list{position:absolute;z-index:20;top:calc(100% + 6px);right:0;left:0;max-height:300px;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 18px 42px rgba(28,58,72,.18)}\n.mb-native-combo-list li{margin:0;padding:0}.mb-native-combo-list button{display:grid;width:100%;gap:4px;padding:11px 12px;border:0;border-radius:7px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mb-native-combo-list button:hover,.mb-native-combo-list button.active{background:var(--mb-soft);outline:0}.mb-native-combo-list button>span{color:var(--mb-muted);font-size:12px;font-weight:500}.mb-native-combo-list .mb-native-combo-title{display:flex;align-items:center;justify-content:space-between;gap:12px;color:var(--mb-text);font-size:14px}.mb-native-combo-title em{border-radius:999px;background:#e9f6f3;color:#24725f;font-size:10px;font-style:normal;font-weight:800;letter-spacing:.03em;padding:3px 7px;text-transform:uppercase}\n.mb-native-payer-insight{display:grid;gap:5px;margin-top:10px;padding:11px 13px;border:1px solid #c9dfe7;border-radius:9px;background:#f4fafc}.mb-native-payer-insight span{color:#426570;font-size:12px}.mb-native-payer-insight span.warning{color:#8a5c17}\n.mb-native-presets{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:-2px 0 14px}.mb-native-presets button{min-height:36px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:7px 13px}.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-native-presets span{margin-left:5px;color:var(--mb-muted);font-size:12px}\n.mb-native-modifiers{display:grid;gap:7px}.mb-native-chips{display:flex;flex-wrap:wrap;gap:5px}.mb-native-chips button{border:1px solid #c9dce3;border-radius:999px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-size:11px;font-weight:750;padding:4px 8px}\n.mb-native-blockers{grid-column:1/-1;display:grid;gap:2px;padding:11px 13px;border:1px solid #e8cf9a;border-radius:8px;background:#fff9ea;color:#74531b}.mb-native-blockers span{font-size:12px}\n.mb-native-eams{margin-top:13px!important;font-size:12px}.mb-native-eams a{color:var(--mb-accent);font-weight:750}\n@media(max-width:620px){.mb-native-review{padding:12px}.mb-native-grid.two{grid-template-columns:1fr}}\n`;\n\nconst NATIVE_THEME_OVERRIDE_STYLES = `\n.mb-native-review,.mb-native-status{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-native-review{background:var(--mb-soft)}\n.mb-native-heading>div:first-child>p,.mb-native-section>header p,.mb-native-total span,.mb-native-status-copy p,.mb-native-status dt{color:var(--mb-muted)}\n.mb-native-summary,.mb-native-section,.mb-native-status{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mb-native-field input,.mb-native-field select,.mb-native-field textarea,.mb-native-attachment-form input,.mb-native-attachment-form select{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-line,.mb-native-note,.mb-native-file,.mb-native-attachment-form,.mb-native-payer-insight,.mb-native-blockers,.mb-native-message{border-radius:var(--mb-control-radius)}\n.mb-native-line,.mb-native-note,.mb-native-attachment-form,.mb-native-payer-insight{border-color:var(--mb-border);background:var(--mb-soft)}\n.mb-native-file{border-color:var(--mb-border);background:var(--mb-surface)}\n.mb-native-button.primary,.mb-native-presets button.active{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-native-button.primary:hover,.mb-native-presets button.active:hover{filter:brightness(.96)}\n.mb-native-button.secondary,.mb-native-presets button,.mb-native-chips button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-native-message.error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n.mb-native-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-native-blockers{border-color:color-mix(in srgb,var(--mb-warning) 35%,white);background:color-mix(in srgb,var(--mb-warning) 8%,white);color:var(--mb-warning)}\n.mb-native-combo-list{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n`;\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\n\nimport {\n mindBillAppearanceStyle,\n type MindBillReactAppearance,\n} from \"./appearance\";\n\nexport const BILL_SUBMISSION_DOCUMENT_TYPES = [\n \"final_report\",\n \"proof_of_service\",\n \"letter_of_attestation\",\n \"form_122\",\n \"return_to_work_voucher\",\n \"w9\",\n \"medical_records\",\n \"appeal\",\n \"other\",\n] as const;\n\nexport type BillSubmissionDocumentType =\n (typeof BILL_SUBMISSION_DOCUMENT_TYPES)[number];\n\nexport type BillSubmissionAddress = {\n line1: string;\n city: string;\n state: string;\n postalCode: string;\n};\n\nexport type BillSubmissionInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string;\n externalId?: string;\n firstName: string;\n middleName?: string;\n lastName: string;\n dateOfBirth?: string;\n ssn?: string;\n gender?: \"M\" | \"F\" | \"X\";\n phone?: string;\n address: BillSubmissionAddress;\n };\n claim: {\n id?: string;\n externalId?: string;\n claimNumber: string;\n adjNumber?: string;\n employer?: string;\n dateOfInjury?: string;\n injuryState?: string;\n description?: string;\n claimsAdministrator?: { id?: string; name: string };\n };\n service: {\n date: string;\n endDate?: string | null;\n authorizationNumber?: string | null;\n };\n billingProvider?: {\n name?: string;\n taxId?: string;\n npi?: string;\n phone?: string;\n address?: BillSubmissionAddress;\n };\n renderingProvider?: {\n name?: string;\n specialty?: string;\n npi?: string;\n taxonomy?: string;\n licenseNumber?: string;\n licenseState?: string;\n isQme?: boolean;\n isAme?: boolean;\n };\n serviceLocation?: {\n name?: string;\n address?: BillSubmissionAddress;\n placeOfServiceCode?: string;\n };\n diagnoses?: string[];\n serviceLines: Array<{\n code: string;\n modifiers?: string[];\n units?: number;\n serviceDate?: string;\n serviceDateEnd?: string | null;\n charge?: number;\n diagnosisPointers?: number[];\n }>;\n};\n\nexport type BillSubmissionSourceAttachment = {\n id: string;\n fileName: string;\n documentType: BillSubmissionDocumentType;\n description?: string;\n selected?: boolean;\n};\n\nexport type BillSubmissionUpload = {\n file: File;\n documentType: BillSubmissionDocumentType;\n description?: string;\n};\n\nexport type BillSubmissionFormValue = {\n bill: BillSubmissionInput;\n sourceAttachmentIds: string[];\n uploads: BillSubmissionUpload[];\n};\n\nexport type BillSubmissionFormProps = {\n initialBill: BillSubmissionInput;\n attachments?: BillSubmissionSourceAttachment[];\n onSubmit: (value: BillSubmissionFormValue) => void | Promise<void>;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n submitLabel?: string;\n heading?: ReactNode;\n description?: ReactNode;\n};\n\nexport const BILL_SUBMISSION_REQUIRED_FIELDS = [\n \"patient.firstName\",\n \"patient.lastName\",\n \"patient.address.line1\",\n \"patient.address.city\",\n \"patient.address.state\",\n \"patient.address.postalCode\",\n \"claim.claimNumber\",\n \"service.date\",\n \"serviceLines[].code\",\n \"serviceLines[].units\",\n] as const;\n\nexport type BillSubmissionValidation = {\n valid: boolean;\n fieldErrors: Record<string, string>;\n};\n\nexport function validateBillSubmission(\n bill: BillSubmissionInput,\n): BillSubmissionValidation {\n const errors: Record<string, string> = {};\n const required = (path: string, value: unknown) => {\n if (typeof value !== \"string\" || !value.trim()) errors[path] = \"Required\";\n };\n required(\"patient.firstName\", bill.patient.firstName);\n required(\"patient.lastName\", bill.patient.lastName);\n required(\"patient.address.line1\", bill.patient.address.line1);\n required(\"patient.address.city\", bill.patient.address.city);\n required(\"patient.address.state\", bill.patient.address.state);\n required(\"patient.address.postalCode\", bill.patient.address.postalCode);\n required(\"claim.claimNumber\", bill.claim.claimNumber);\n required(\"service.date\", bill.service.date);\n if (bill.patient.address.state.trim().length !== 2)\n errors[\"patient.address.state\"] = \"Use a 2-letter state code\";\n if (!bill.serviceLines.length) errors.serviceLines = \"Add at least one service line\";\n bill.serviceLines.forEach((line, index) => {\n required(`serviceLines.${index}.code`, line.code);\n if (!Number.isInteger(line.units) || (line.units ?? 0) < 1)\n errors[`serviceLines.${index}.units`] = \"Enter at least 1 unit\";\n if (\n bill.billingMode === \"professional\" &&\n (!Number.isFinite(line.charge) || (line.charge ?? 0) < 0)\n )\n errors[`serviceLines.${index}.charge`] = \"Enter the billed charge\";\n });\n return { valid: Object.keys(errors).length === 0, fieldErrors: errors };\n}\n\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 25;\nconst EMPTY_ATTACHMENTS: BillSubmissionSourceAttachment[] = [];\n\nconst documentLabels: Record<BillSubmissionDocumentType, string> = {\n final_report: \"Final report\",\n proof_of_service: \"Proof of service\",\n letter_of_attestation: \"Letter of attestation\",\n form_122: \"Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\",\n w9: \"W-9\",\n medical_records: \"Medical records\",\n appeal: \"Appeal\",\n other: \"Other\",\n};\n\nfunction cloneBill(bill: BillSubmissionInput): BillSubmissionInput {\n return {\n ...bill,\n patient: { ...bill.patient, address: { ...bill.patient.address } },\n claim: {\n ...bill.claim,\n ...(bill.claim.claimsAdministrator\n ? { claimsAdministrator: { ...bill.claim.claimsAdministrator } }\n : {}),\n },\n service: { ...bill.service },\n ...(bill.billingProvider\n ? {\n billingProvider: {\n ...bill.billingProvider,\n ...(bill.billingProvider.address\n ? { address: { ...bill.billingProvider.address } }\n : {}),\n },\n }\n : {}),\n ...(bill.renderingProvider\n ? { renderingProvider: { ...bill.renderingProvider } }\n : {}),\n ...(bill.serviceLocation\n ? {\n serviceLocation: {\n ...bill.serviceLocation,\n ...(bill.serviceLocation.address\n ? { address: { ...bill.serviceLocation.address } }\n : {}),\n },\n }\n : {}),\n diagnoses: [...(bill.diagnoses ?? [])],\n serviceLines: bill.serviceLines.length\n ? bill.serviceLines.map((line) => ({\n ...line,\n modifiers: [...(line.modifiers ?? [])],\n diagnosisPointers: [...(line.diagnosisPointers ?? [])],\n units: line.units ?? 1,\n }))\n : [{ code: \"\", modifiers: [], units: 1 }],\n };\n}\n\nconst styles: Record<string, CSSProperties> = {\n root: {\n display: \"grid\",\n gap: 18,\n color: \"var(--mb-text)\",\n fontFamily: \"var(--mb-font)\",\n },\n heading: {\n display: \"flex\",\n alignItems: \"start\",\n justifyContent: \"space-between\",\n gap: 20,\n },\n title: { margin: 0, fontSize: 22, lineHeight: 1.2 },\n copy: { margin: \"5px 0 0\", color: \"var(--mb-muted)\", fontSize: 14 },\n requiredNote: { color: \"var(--mb-muted)\", fontSize: 13, whiteSpace: \"nowrap\" },\n section: {\n minWidth: 0,\n margin: 0,\n padding: 20,\n border: \"1px solid var(--mb-border)\",\n borderRadius: \"var(--mb-radius)\",\n background: \"var(--mb-surface)\",\n boxShadow: \"var(--mb-shadow)\",\n },\n legend: { padding: \"0 8px\", fontWeight: 700, fontSize: 15 },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(auto-fit, minmax(min(100%, 210px), 1fr))\",\n gap: 14,\n },\n field: { display: \"grid\", alignContent: \"start\", gap: 6, minWidth: 0 },\n label: { color: \"var(--mb-muted)\", fontSize: 12, fontWeight: 700 },\n input: {\n boxSizing: \"border-box\",\n width: \"100%\",\n minHeight: 40,\n padding: \"9px 11px\",\n border: \"1px solid var(--mb-border)\",\n borderRadius: \"var(--mb-control-radius)\",\n background: \"var(--mb-input)\",\n color: \"var(--mb-text)\",\n font: \"inherit\",\n },\n tableWrap: { overflowX: \"auto\" },\n table: { width: \"100%\", minWidth: 610, borderCollapse: \"collapse\" },\n th: {\n padding: \"0 8px 8px\",\n color: \"var(--mb-muted)\",\n fontSize: 12,\n textAlign: \"left\",\n },\n td: { padding: \"7px 8px\", borderTop: \"1px solid var(--mb-border)\" },\n secondaryButton: {\n minHeight: 36,\n padding: \"7px 11px\",\n border: \"1px solid var(--mb-border)\",\n borderRadius: \"var(--mb-control-radius)\",\n background: \"var(--mb-surface)\",\n color: \"var(--mb-text)\",\n font: \"inherit\",\n fontWeight: 650,\n cursor: \"pointer\",\n },\n attachment: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 12,\n padding: \"11px 0\",\n borderBottom: \"1px solid var(--mb-border)\",\n },\n attachmentName: { display: \"grid\", gap: 2, minWidth: 0, flex: 1 },\n attachmentMeta: { color: \"var(--mb-muted)\", fontSize: 12 },\n error: {\n padding: \"11px 13px\",\n borderRadius: \"var(--mb-control-radius)\",\n background: \"color-mix(in srgb, var(--mb-danger) 10%, transparent)\",\n color: \"var(--mb-danger)\",\n fontSize: 13,\n },\n actions: { display: \"flex\", justifyContent: \"flex-end\" },\n submit: {\n minWidth: 150,\n minHeight: 42,\n padding: \"10px 20px\",\n border: 0,\n borderRadius: \"var(--mb-control-radius)\",\n background: \"var(--mb-accent)\",\n color: \"var(--mb-accent-contrast)\",\n font: \"inherit\",\n fontWeight: 750,\n cursor: \"pointer\",\n },\n};\n\nfunction RequiredMark(): ReactElement {\n return <span className=\"required-mark\" style={{ color: \"var(--mb-danger)\" }}> *</span>;\n}\n\nfunction Field({\n label,\n required,\n error,\n children,\n}: {\n label: string;\n required?: boolean;\n error?: string | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n <label style={styles.field}>\n <span style={styles.label}>\n {label}\n {required ? <RequiredMark /> : null}\n </span>\n {children}\n {error ? <span style={{ color: \"var(--mb-danger)\", fontSize: 12 }}>{error}</span> : null}\n </label>\n );\n}\n\nfunction inputValue(value: string | null | undefined): string {\n return value ?? \"\";\n}\n\nexport function BillSubmissionForm({\n initialBill,\n attachments = EMPTY_ATTACHMENTS,\n onSubmit,\n appearance,\n className = \"bill-submission-form\",\n style,\n disabled = false,\n submitLabel = \"Submit bill\",\n heading = \"Bill information\",\n description = \"Review the bill details, add attachments, and submit.\",\n}: BillSubmissionFormProps): ReactElement {\n const [bill, setBill] = useState(() => cloneBill(initialBill));\n const [selectedIds, setSelectedIds] = useState(() =>\n attachments.filter((item) => item.selected !== false).map((item) => item.id),\n );\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [formError, setFormError] = useState<string | null>(null);\n const [submitting, setSubmitting] = useState(false);\n\n useEffect(() => {\n setBill(cloneBill(initialBill));\n setSelectedIds(\n attachments.filter((item) => item.selected !== false).map((item) => item.id),\n );\n setUploads([]);\n setErrors({});\n setFormError(null);\n }, [initialBill, attachments]);\n\n const diagnoses = useMemo(() => (bill.diagnoses ?? []).join(\", \"), [bill.diagnoses]);\n const locked = disabled || submitting;\n const setPatient = (patch: Partial<BillSubmissionInput[\"patient\"]>) =>\n setBill((current) => ({ ...current, patient: { ...current.patient, ...patch } }));\n const setOptionalPatient = (\n key: \"dateOfBirth\",\n value: string,\n ) =>\n setBill((current) => {\n const patient = { ...current.patient };\n if (value) patient[key] = value;\n else delete patient[key];\n return { ...current, patient };\n });\n const setAddress = (patch: Partial<BillSubmissionAddress>) =>\n setBill((current) => ({\n ...current,\n patient: {\n ...current.patient,\n address: { ...current.patient.address, ...patch },\n },\n }));\n const setClaim = (patch: Partial<BillSubmissionInput[\"claim\"]>) =>\n setBill((current) => ({ ...current, claim: { ...current.claim, ...patch } }));\n const setOptionalClaim = (\n key: \"dateOfInjury\",\n value: string,\n ) =>\n setBill((current) => {\n const claim = { ...current.claim };\n if (value) claim[key] = value;\n else delete claim[key];\n return { ...current, claim };\n });\n const setService = (patch: Partial<BillSubmissionInput[\"service\"]>) =>\n setBill((current) => ({ ...current, service: { ...current.service, ...patch } }));\n const setLine = (\n index: number,\n patch: Partial<BillSubmissionInput[\"serviceLines\"][number]>,\n ) =>\n setBill((current) => ({\n ...current,\n serviceLines: current.serviceLines.map((line, lineIndex) =>\n lineIndex === index ? { ...line, ...patch } : line,\n ),\n }));\n const setOptionalLineNumber = (\n index: number,\n key: \"charge\",\n value: string,\n ) =>\n setBill((current) => ({\n ...current,\n serviceLines: current.serviceLines.map((line, lineIndex) => {\n if (lineIndex !== index) return line;\n const next = { ...line };\n if (value === \"\") delete next[key];\n else next[key] = Number(value);\n return next;\n }),\n }));\n const textInput = (\n value: string | null | undefined,\n onChange: (value: string) => void,\n options?: { type?: string; required?: boolean; maxLength?: number; placeholder?: string },\n ) => (\n <input\n style={styles.input}\n value={inputValue(value)}\n disabled={locked}\n onChange={(event) => onChange(event.target.value)}\n {...options}\n />\n );\n\n async function submit(): Promise<void> {\n const validation = validateBillSubmission(bill);\n setErrors(validation.fieldErrors);\n setFormError(null);\n if (!validation.valid) {\n setFormError(\"Complete the required fields before submitting.\");\n return;\n }\n if (selectedIds.length + uploads.length > MAX_DOCUMENTS) {\n setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n return;\n }\n setSubmitting(true);\n try {\n await onSubmit({ bill: cloneBill(bill), sourceAttachmentIds: selectedIds, uploads });\n } catch (caught) {\n setFormError(caught instanceof Error ? caught.message : \"Unable to submit the bill.\");\n } finally {\n setSubmitting(false);\n }\n }\n\n return (\n <form\n className={className}\n style={{ ...mindBillAppearanceStyle(appearance), ...styles.root, ...style }}\n onSubmit={(event) => {\n event.preventDefault();\n void submit();\n }}\n noValidate\n >\n <div style={styles.heading}>\n <div>\n <h3 style={styles.title}>{heading}</h3>\n <p style={styles.copy}>{description}</p>\n </div>\n <span style={styles.requiredNote}><RequiredMark /> Required</span>\n </div>\n\n <fieldset style={styles.section} disabled={locked}>\n <legend style={styles.legend}>Patient</legend>\n <div style={styles.grid}>\n <Field label=\"First name\" required error={errors[\"patient.firstName\"]}>\n {textInput(bill.patient.firstName, (firstName) => setPatient({ firstName }), { required: true })}\n </Field>\n <Field label=\"Middle name\">\n {textInput(bill.patient.middleName, (middleName) => setPatient({ middleName }))}\n </Field>\n <Field label=\"Last name\" required error={errors[\"patient.lastName\"]}>\n {textInput(bill.patient.lastName, (lastName) => setPatient({ lastName }), { required: true })}\n </Field>\n <Field label=\"Date of birth\">\n {textInput(bill.patient.dateOfBirth, (dateOfBirth) => setOptionalPatient(\"dateOfBirth\", dateOfBirth), { type: \"date\" })}\n </Field>\n <Field label=\"Phone\">\n {textInput(bill.patient.phone, (phone) => setPatient({ phone }), { type: \"tel\" })}\n </Field>\n <Field label=\"Address\" required error={errors[\"patient.address.line1\"]}>\n {textInput(bill.patient.address.line1, (line1) => setAddress({ line1 }), { required: true })}\n </Field>\n <Field label=\"City\" required error={errors[\"patient.address.city\"]}>\n {textInput(bill.patient.address.city, (city) => setAddress({ city }), { required: true })}\n </Field>\n <Field label=\"State\" required error={errors[\"patient.address.state\"]}>\n {textInput(bill.patient.address.state, (state) => setAddress({ state }), { required: true, maxLength: 2 })}\n </Field>\n <Field label=\"ZIP\" required error={errors[\"patient.address.postalCode\"]}>\n {textInput(bill.patient.address.postalCode, (postalCode) => setAddress({ postalCode }), { required: true })}\n </Field>\n </div>\n </fieldset>\n\n <fieldset style={styles.section} disabled={locked}>\n <legend style={styles.legend}>Claim & service</legend>\n <div style={styles.grid}>\n <Field label=\"Claim number\" required error={errors[\"claim.claimNumber\"]}>\n {textInput(bill.claim.claimNumber, (claimNumber) => setClaim({ claimNumber }), { required: true })}\n </Field>\n <Field label=\"ADJ number\">{textInput(bill.claim.adjNumber, (adjNumber) => setClaim({ adjNumber }))}</Field>\n <Field label=\"Employer\">{textInput(bill.claim.employer, (employer) => setClaim({ employer }))}</Field>\n <Field label=\"Date of injury\">\n {textInput(bill.claim.dateOfInjury, (dateOfInjury) => setOptionalClaim(\"dateOfInjury\", dateOfInjury), { type: \"date\" })}\n </Field>\n <Field label=\"Claims administrator\">\n {textInput(bill.claim.claimsAdministrator?.name, (name) => setBill((current) => {\n const claim = { ...current.claim };\n if (name) claim.claimsAdministrator = { ...claim.claimsAdministrator, name };\n else delete claim.claimsAdministrator;\n return { ...current, claim };\n }))}\n </Field>\n <Field label=\"Service date\" required error={errors[\"service.date\"]}>\n {textInput(bill.service.date, (date) => setService({ date }), { type: \"date\", required: true })}\n </Field>\n <Field label=\"Diagnoses\">\n {textInput(diagnoses, (value) => setBill((current) => ({ ...current, diagnoses: value.split(\",\").map((item) => item.trim()).filter(Boolean) })), { placeholder: \"Comma-separated codes\" })}\n </Field>\n </div>\n </fieldset>\n\n <fieldset style={styles.section} disabled={locked}>\n <legend style={styles.legend}>Providers & location</legend>\n <div style={styles.grid}>\n <Field label=\"Billing provider\">{textInput(bill.billingProvider?.name, (name) => setBill((current) => ({ ...current, billingProvider: { ...current.billingProvider, name } })))}</Field>\n <Field label=\"Billing tax ID\">{textInput(bill.billingProvider?.taxId, (taxId) => setBill((current) => ({ ...current, billingProvider: { ...current.billingProvider, taxId } })))}</Field>\n <Field label=\"Billing NPI\">{textInput(bill.billingProvider?.npi, (npi) => setBill((current) => ({ ...current, billingProvider: { ...current.billingProvider, npi } })))}</Field>\n <Field label=\"Billing phone\">{textInput(bill.billingProvider?.phone, (phone) => setBill((current) => ({ ...current, billingProvider: { ...current.billingProvider, phone } })))}</Field>\n <Field label=\"Rendering provider\">{textInput(bill.renderingProvider?.name, (name) => setBill((current) => ({ ...current, renderingProvider: { ...current.renderingProvider, name } })))}</Field>\n <Field label=\"Specialty\">{textInput(bill.renderingProvider?.specialty, (specialty) => setBill((current) => ({ ...current, renderingProvider: { ...current.renderingProvider, specialty } })))}</Field>\n <Field label=\"Rendering NPI\">{textInput(bill.renderingProvider?.npi, (npi) => setBill((current) => ({ ...current, renderingProvider: { ...current.renderingProvider, npi } })))}</Field>\n <Field label=\"License number\">{textInput(bill.renderingProvider?.licenseNumber, (licenseNumber) => setBill((current) => ({ ...current, renderingProvider: { ...current.renderingProvider, licenseNumber } })))}</Field>\n <Field label=\"License state\">{textInput(bill.renderingProvider?.licenseState, (licenseState) => setBill((current) => ({ ...current, renderingProvider: { ...current.renderingProvider, licenseState } })), { maxLength: 2 })}</Field>\n <Field label=\"Service location\">{textInput(bill.serviceLocation?.name, (name) => setBill((current) => ({ ...current, serviceLocation: { ...current.serviceLocation, name } })))}</Field>\n <Field label=\"Place of service\">{textInput(bill.serviceLocation?.placeOfServiceCode, (placeOfServiceCode) => setBill((current) => ({ ...current, serviceLocation: { ...current.serviceLocation, placeOfServiceCode } })), { maxLength: 2 })}</Field>\n </div>\n </fieldset>\n\n <fieldset style={styles.section} disabled={locked}>\n <legend style={styles.legend}>Service lines</legend>\n <div style={styles.tableWrap}>\n <table aria-label=\"Service lines\" style={styles.table}>\n <thead><tr>\n <th style={styles.th}>Code<RequiredMark /></th>\n <th style={styles.th}>Modifiers</th>\n <th style={styles.th}>Units<RequiredMark /></th>\n {bill.billingMode === \"professional\" ? <th style={styles.th}>Charge<RequiredMark /></th> : null}\n <th style={styles.th} aria-label=\"Actions\" />\n </tr></thead>\n <tbody>\n {bill.serviceLines.map((line, index) => (\n <tr key={index}>\n <td style={styles.td}>\n {textInput(line.code, (code) => setLine(index, { code }), { required: true })}\n {errors[`serviceLines.${index}.code`] ? <span style={{ color: \"var(--mb-danger)\", fontSize: 12 }}>{errors[`serviceLines.${index}.code`]}</span> : null}\n </td>\n <td style={styles.td}>{textInput((line.modifiers ?? []).join(\", \"), (value) => setLine(index, { modifiers: value.split(\",\").map((item) => item.trim()).filter(Boolean) }))}</td>\n <td style={styles.td}>\n <input style={styles.input} type=\"number\" min={1} required value={line.units ?? 1} onChange={(event) => setLine(index, { units: Number(event.target.value) })} />\n {errors[`serviceLines.${index}.units`] ? <span style={{ color: \"var(--mb-danger)\", fontSize: 12 }}>{errors[`serviceLines.${index}.units`]}</span> : null}\n </td>\n {bill.billingMode === \"professional\" ? <td style={styles.td}>\n <input style={styles.input} type=\"number\" min={0} step=\"0.01\" required value={line.charge ?? \"\"} onChange={(event) => setOptionalLineNumber(index, \"charge\", event.target.value)} />\n {errors[`serviceLines.${index}.charge`] ? <span style={{ color: \"var(--mb-danger)\", fontSize: 12 }}>{errors[`serviceLines.${index}.charge`]}</span> : null}\n </td> : null}\n <td style={styles.td}><button style={styles.secondaryButton} type=\"button\" disabled={locked || bill.serviceLines.length === 1} onClick={() => setBill((current) => ({ ...current, serviceLines: current.serviceLines.filter((_, lineIndex) => lineIndex !== index) }))}>Remove</button></td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {errors.serviceLines ? <p style={{ color: \"var(--mb-danger)\", fontSize: 12 }}>{errors.serviceLines}</p> : null}\n <button style={{ ...styles.secondaryButton, marginTop: 12 }} type=\"button\" disabled={locked} onClick={() => setBill((current) => ({ ...current, serviceLines: [...current.serviceLines, { code: \"\", modifiers: [], units: 1 }] }))}>+ Add service line</button>\n </fieldset>\n\n <fieldset style={styles.section} disabled={locked}>\n <legend style={styles.legend}>Attachments</legend>\n {attachments.map((attachment) => (\n <label style={styles.attachment} key={attachment.id}>\n <input type=\"checkbox\" checked={selectedIds.includes(attachment.id)} onChange={(event) => {\n if (event.target.checked && selectedIds.length + uploads.length >= MAX_DOCUMENTS) {\n setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n return;\n }\n setSelectedIds((current) => event.target.checked ? [...new Set([...current, attachment.id])] : current.filter((id) => id !== attachment.id));\n }} />\n <span style={styles.attachmentName}><strong>{attachment.fileName}</strong><span style={styles.attachmentMeta}>{attachment.description || documentLabels[attachment.documentType]}</span></span>\n </label>\n ))}\n {uploads.map((upload, index) => (\n <div style={styles.attachment} key={`${upload.file.name}-${index}`}>\n <span style={styles.attachmentName}><strong>{upload.file.name}</strong><span style={styles.attachmentMeta}>{(upload.file.size / 1024 / 1024).toFixed(1)} MB</span></span>\n <select style={{ ...styles.input, width: 180 }} value={upload.documentType} onChange={(event) => setUploads((current) => current.map((item, itemIndex) => itemIndex === index ? { ...item, documentType: event.target.value as BillSubmissionDocumentType } : item))}>\n {BILL_SUBMISSION_DOCUMENT_TYPES.map((type) => <option value={type} key={type}>{documentLabels[type]}</option>)}\n </select>\n <button style={styles.secondaryButton} type=\"button\" onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>Remove</button>\n </div>\n ))}\n {!attachments.length && !uploads.length ? <p style={styles.copy}>No attachments added.</p> : null}\n <label style={{ ...styles.secondaryButton, display: \"inline-flex\", alignItems: \"center\", marginTop: 14 }}>\n Add PDF attachments\n <input hidden type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={(event) => {\n const files = Array.from(event.target.files ?? []);\n event.target.value = \"\";\n setFormError(null);\n const invalid = files.find((file) => file.type !== \"application/pdf\" && !file.name.toLowerCase().endsWith(\".pdf\"));\n if (invalid) return setFormError(`${invalid.name} is not a PDF.`);\n const oversized = files.find((file) => file.size > MAX_PDF_BYTES);\n if (oversized) return setFormError(`${oversized.name} is larger than 25 MB.`);\n const nextBytes = [...uploads.map((item) => item.file), ...files].reduce((sum, file) => sum + file.size, 0);\n if (nextBytes > MAX_UPLOAD_BYTES) return setFormError(\"Attachments exceed the 100 MB upload limit.\");\n if (selectedIds.length + uploads.length + files.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n setUploads((current) => [...current, ...files.map((file) => ({ file, documentType: \"other\" as const }))]);\n }} />\n </label>\n </fieldset>\n\n {formError ? <div style={styles.error} role=\"alert\">{formError}</div> : null}\n <div style={styles.actions}>\n <button style={{ ...styles.submit, opacity: locked ? 0.65 : 1 }} type=\"submit\" disabled={locked}>{submitting ? \"Submitting…\" : submitLabel}</button>\n </div>\n </form>\n );\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\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n} from \"@mindbill/browser\";\n\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 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 organization/user 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({ signal })\n : fetcher(sessionEndpoint, {\n method: \"POST\",\n credentials: \"same-origin\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({}),\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}/partner/v2/browser/bills/${encodeURIComponent(billId)}/status`, {\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 { CSSProperties, ReactElement } from \"react\";\nimport type {\n BillLifecycleAction,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillPaymentRecord,\n BillRemittanceSummary,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillLifecycleActionsProps = SurfaceProps & {\n actions: readonly BillLifecycleAction[];\n onAction: (action: BillLifecycleAction) => void;\n /** Show disabled actions and the server-provided reason. Defaults to false. */\n showUnavailable?: boolean;\n disabled?: boolean;\n};\n\n/** Returns the server-authoritative actions that should be rendered. */\nexport function visibleBillLifecycleActions(\n actions: readonly BillLifecycleAction[],\n showUnavailable = false,\n): BillLifecycleAction[] {\n return actions.filter((action) => action.enabled || showUnavailable);\n}\n\nexport function BillLifecycleActions({\n actions,\n onAction,\n showUnavailable = false,\n disabled = false,\n appearance,\n className,\n style,\n}: BillLifecycleActionsProps): ReactElement | null {\n const visible = visibleBillLifecycleActions(actions, showUnavailable);\n if (!visible.length) return null;\n\n return (\n <div className={classes(\"mb-lifecycle-actions\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill actions\">\n <style>{lifecycleSurfaceStyles}</style>\n {visible.map((action) => (\n <div className=\"mb-lifecycle-action\" key={action.id}>\n <button type=\"button\" className={action.primary ? \"mb-action-button is-primary\" : \"mb-action-button\"} disabled={disabled || !action.enabled} onClick={() => onAction(action)}>\n {action.label}\n </button>\n {!action.enabled && action.reason ? <span className=\"mb-action-reason\">{action.reason}</span> : null}\n </div>\n ))}\n </div>\n );\n}\n\nexport type BillActivityEvent = {\n id: string;\n type: string;\n createdAt: string;\n title?: string;\n description?: string;\n actor?: string | null;\n};\n\nexport type BillActivityTimelineProps = SurfaceProps & {\n events: readonly BillActivityEvent[];\n emptyLabel?: string;\n formatDate?: (createdAt: string) => string;\n};\n\nconst activityLabels: Record<string, string> = {\n \"bill.created\": \"Bill created\",\n \"bill.draft\": \"Bill saved\",\n \"bill.scrub_failed\": \"Submission needs attention\",\n \"bill.submitted\": \"Bill submitted\",\n \"bill.accepted\": \"Bill accepted\",\n \"bill.rejected\": \"Bill rejected\",\n \"bill.denied\": \"Bill denied\",\n \"bill.partially_paid\": \"Partial payment received\",\n \"bill.paid\": \"Bill paid\",\n \"bill.second_review\": \"Second Bill Review submitted\",\n \"bill.lien\": \"Bill moved to lien\",\n \"bill.ibr\": \"Independent Bill Review submitted\",\n \"bill.closed\": \"Bill closed\",\n \"bill.written_off\": \"Balance written off\",\n \"payment.posted\": \"Payment posted\",\n \"eor.received\": \"EOR received\",\n \"bill.autofill_completed\": \"Bill data extracted\",\n};\n\n/** Human-readable fallback for a signed partner event type. */\nexport function billActivityEventLabel(type: string): string {\n return activityLabels[type] ?? type.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction defaultFormatDate(createdAt: string): string {\n const parsed = new Date(createdAt);\n if (Number.isNaN(parsed.getTime())) return createdAt;\n return new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\", timeStyle: \"short\" }).format(parsed);\n}\n\nexport function BillActivityTimeline({ events, emptyLabel = \"No bill activity yet.\", appearance, className, style, formatDate = defaultFormatDate }: BillActivityTimelineProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-activity\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill activity\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submission, payer responses, follow-up, and payments.</span></div><span>{events.length}</span></header>\n {!events.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <ol className=\"mb-activity-list\">\n {events.map((event) => (\n <li className=\"mb-activity-item\" key={event.id}>\n <span className=\"mb-activity-marker\" aria-hidden=\"true\" />\n <div className=\"mb-activity-content\">\n <strong>{event.title ?? billActivityEventLabel(event.type)}</strong>\n {event.description ? <p>{event.description}</p> : null}\n <span>{formatDate(event.createdAt)}{event.actor ? ` · ${event.actor}` : \"\"}</span>\n </div>\n </li>\n ))}\n </ol>\n )}\n </section>\n );\n}\n\nexport type BillLifecycleStage = \"created\" | \"submitted\" | \"accepted\" | \"response\" | \"follow_up\" | \"closed\";\n\nconst lifecycleStages: Array<{ id: BillLifecycleStage; label: string }> = [\n { id: \"created\", label: \"Created\" },\n { id: \"submitted\", label: \"Submitted\" },\n { id: \"accepted\", label: \"Accepted\" },\n { id: \"response\", label: \"Payer response\" },\n { id: \"follow_up\", label: \"Follow-up\" },\n { id: \"closed\", label: \"Closed\" },\n];\n\n/** Maps MindBill's detailed lifecycle state into a compact progress stage. */\nexport function billLifecycleStage(state: string): BillLifecycleStage {\n const value = state.toLowerCase();\n if (value.includes(\"closed\") || value.includes(\"written_off\")) return \"closed\";\n if (value.includes(\"second_review\") || value.includes(\"ibr\") || value.includes(\"lien\") || value.includes(\"appeal\")) return \"follow_up\";\n if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"rejected\") || value.includes(\"response\")) return \"response\";\n if (value.includes(\"accepted\")) return \"accepted\";\n if (value.includes(\"submitted\") || value.includes(\"queued\") || value.includes(\"sent\")) return \"submitted\";\n return \"created\";\n}\n\nexport type BillLifecycleProgressProps = SurfaceProps & {\n state: string;\n nativeStatus?: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n};\n\nexport function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, appearance, className, style }: BillLifecycleProgressProps): ReactElement {\n const current = billLifecycleStage(state);\n const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);\n return (\n <section className={classes(\"mb-surface mb-progress\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill lifecycle\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{humanize(nativeStatus || state)}</strong><span>{submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : \"Not submitted\"}{typeof agingDays === \"number\" ? ` · ${agingDays} days old` : \"\"}</span></div></header>\n <ol className=\"mb-progress-list\">\n {lifecycleStages.map((stage, index) => {\n const status = index < currentIndex ? \"complete\" : index === currentIndex ? \"current\" : \"upcoming\";\n return <li key={stage.id} className={`is-${status}`} aria-current={status === \"current\" ? \"step\" : undefined}><span aria-hidden=\"true\">{status === \"complete\" ? \"✓\" : index + 1}</span><b>{stage.label}</b></li>;\n })}\n </ol>\n </section>\n );\n}\n\nexport type BillSnapshotSummaryProps = SurfaceProps & Pick<BillLifecycleData, \"bill\" | \"patient\" | \"injury\" | \"delivery\">;\n\nexport function BillSnapshotSummary({ bill, patient, injury, delivery, appearance, className, style }: BillSnapshotSummaryProps): ReactElement {\n const values = [\n [\"Patient\", patient.name || [patient.firstName, patient.lastName].filter(Boolean).join(\" \")],\n [\"Claim\", injury.claimNumber || \"—\"],\n [\"Payer\", delivery.payerName || injury.claimsAdminName || \"—\"],\n [\"Date of service\", bill.dos || \"—\"],\n [\"Charged\", currency(bill.totalCharge)],\n [\"Balance\", currency(bill.balanceDue)],\n ];\n return (\n <section className={classes(\"mb-surface mb-snapshot\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill snapshot\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill snapshot</strong><span>Bill #{bill.billNumber}</span></div></header>\n <dl>{values.map(([label, value]) => <div key={label}><dt>{label}</dt><dd>{value}</dd></div>)}</dl>\n </section>\n );\n}\n\nexport type BillRemittanceCardProps = SurfaceProps & { remittance: BillRemittanceSummary };\n\nexport function BillRemittanceCard({ remittance, appearance, className, style }: BillRemittanceCardProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-remittance\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Remittance summary\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Remittance</strong><span>Amounts reported by the payer and posted to the bill.</span></div></header>\n <dl>\n <div><dt>Payer reported</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div><dt>Posted</dt><dd>{currency(remittance.totalPaid)}</dd></div>\n <div><dt>Balance</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n </section>\n );\n}\n\nexport type BillPayerContactCardProps = SurfaceProps & { delivery: BillLifecycleDelivery };\n\nexport function BillPayerContactCard({ delivery, appearance, className, style }: BillPayerContactCardProps): ReactElement | null {\n const contacts = [\n delivery.contacts.adjusterName ? [\"Adjuster\", delivery.contacts.adjusterName, null] : null,\n delivery.contacts.adjusterPhone ? [\"Adjuster phone\", delivery.contacts.adjusterPhone, `tel:${delivery.contacts.adjusterPhone}`] : null,\n delivery.contacts.adjusterEmail ? [\"Adjuster email\", delivery.contacts.adjusterEmail, `mailto:${delivery.contacts.adjusterEmail}`] : null,\n delivery.contacts.faxNumber ? [\"Fax\", delivery.contacts.faxNumber, `tel:${delivery.contacts.faxNumber}`] : null,\n delivery.contacts.claimsEmail ? [\"Email\", delivery.contacts.claimsEmail, `mailto:${delivery.contacts.claimsEmail}`] : null,\n delivery.contacts.mailingAddress ? [\"Mail\", delivery.contacts.mailingAddress, null] : null,\n delivery.contacts.portalUrl ? [\"Portal\", \"Open payer portal\", delivery.contacts.portalUrl] : null,\n ].filter(Boolean) as Array<[string, string, string | null]>;\n if (!delivery.payerName && !contacts.length) return null;\n return (\n <section className={classes(\"mb-surface mb-contacts\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payer contact information\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{delivery.payerName || \"Claims administrator\"}</strong><span>Billing and follow-up contacts.</span></div></header>\n {!contacts.length ? <p className=\"mb-empty\">No payer contact details are available.</p> : <dl>{contacts.map(([label, value, href]) => <div key={label}><dt>{label}</dt><dd>{href ? <a href={href} target={label === \"Portal\" ? \"_blank\" : undefined} rel={label === \"Portal\" ? \"noreferrer noopener\" : undefined}>{value}</a> : value}</dd></div>)}</dl>}\n </section>\n );\n}\n\nexport type BillPaymentLedgerProps = SurfaceProps & { payments: readonly BillPaymentRecord[] };\n\nexport function BillPaymentLedger({ payments, appearance, className, style }: BillPaymentLedgerProps): ReactElement {\n return (\n <section className={classes(\"mb-surface mb-payments\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Payment ledger\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Payments</strong><span>Payments posted to this bill.</span></div><span>{payments.length}</span></header>\n {!payments.length ? <p className=\"mb-empty\">No payments posted.</p> : <div className=\"mb-payment-list\">{payments.map((payment) => <article key={payment.id}><div><strong>{currency(payment.amount)}</strong><span>{humanize(payment.status || \"posted\")} · {payment.method.toUpperCase()}</span></div><div><span>{payment.checkNumber ? `#${payment.checkNumber}` : payment.source.toUpperCase()}</span><span>{payment.depositDate || defaultFormatDate(payment.postedAt)}</span></div>{payment.note ? <p>{payment.note}</p> : null}</article>)}</div>}\n </section>\n );\n}\n\nfunction classes(base: string, className?: string): string {\n return [base, className].filter(Boolean).join(\" \");\n}\n\nfunction humanize(value: string): string {\n return value.replace(/[._-]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction currency(value: number): string {\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nconst lifecycleSurfaceStyles = `\n.mb-lifecycle-actions,.mb-surface{box-sizing:border-box;color:var(--mb-text);font-family:var(--mb-font,ui-sans-serif,system-ui,sans-serif)}\n.mb-surface *{box-sizing:border-box}.mb-surface{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,12px);box-shadow:var(--mb-shadow);padding:20px}\n.mb-surface-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:16px}.mb-surface-heading>div{display:grid;gap:2px}.mb-surface-heading strong{font-size:16px}.mb-surface-heading span,.mb-empty{color:var(--mb-muted);font-size:13px}.mb-surface-heading>span{border-radius:999px;background:var(--mb-soft);font-weight:750;padding:4px 8px}\n.mb-lifecycle-actions{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start}.mb-lifecycle-action{display:grid;gap:5px;max-width:260px}.mb-action-button{appearance:none;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:700;line-height:1.2;padding:11px 15px;cursor:pointer}.mb-action-button:hover:not(:disabled){border-color:var(--mb-accent);color:var(--mb-accent)}.mb-action-button:focus-visible{outline:3px solid color-mix(in srgb,var(--mb-accent) 28%,transparent);outline-offset:2px}.mb-action-button.is-primary{background:var(--mb-accent);border-color:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-action-button:disabled{cursor:not-allowed;opacity:.55}.mb-action-reason{color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mb-activity-list{list-style:none;margin:0;padding:0}.mb-activity-item{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;position:relative;padding:0 0 22px}.mb-activity-item:last-child{padding-bottom:0}.mb-activity-item:not(:last-child)::before{background:var(--mb-border);content:\"\";left:8px;position:absolute;top:10px;bottom:0;width:1px}.mb-activity-marker{background:var(--mb-surface);border:3px solid var(--mb-accent);border-radius:999px;height:11px;margin-top:4px;position:relative;width:11px;z-index:1}.mb-activity-content{display:grid;gap:4px;min-width:0}.mb-activity-content strong{font-size:15px;line-height:1.35}.mb-activity-content p{color:var(--mb-text);font-size:14px;line-height:1.5;margin:0}.mb-activity-content span,.mb-activity-empty{color:var(--mb-muted);font-size:13px;line-height:1.45}.mb-activity-empty,.mb-empty{margin:0}\n.mb-progress-list{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));list-style:none;margin:0;padding:0}.mb-progress-list li{display:grid;gap:7px;position:relative;text-align:center;color:var(--mb-muted);font-size:12px}.mb-progress-list li:not(:last-child)::after{content:\"\";position:absolute;left:calc(50% + 14px);right:calc(-50% + 14px);top:13px;height:2px;background:var(--mb-border)}.mb-progress-list li.is-complete:not(:last-child)::after{background:var(--mb-accent)}.mb-progress-list li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:28px;height:28px;border:2px solid var(--mb-border);border-radius:50%;background:var(--mb-surface);font-weight:800}.mb-progress-list li.is-complete>span,.mb-progress-list li.is-current>span{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}.mb-progress-list li.is-current{color:var(--mb-text)}\n.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin:0}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{display:grid;gap:3px;padding:10px 14px;border-left:1px solid var(--mb-border)}.mb-snapshot dl>div:nth-child(3n+1),.mb-remittance dl>div:first-child,.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-snapshot dd,.mb-remittance dd,.mb-contacts dd{font-size:14px;font-weight:750;margin:0;overflow-wrap:anywhere}.mb-contacts a{color:var(--mb-accent)}.mb-denial{margin-top:16px;border-left:4px solid var(--mb-danger);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 8%,var(--mb-surface));padding:12px 14px}.mb-denial p{margin:4px 0 0}\n.mb-payment-list{display:grid}.mb-payment-list article{display:grid;grid-template-columns:1fr auto;gap:5px 18px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-list article>div{display:grid;gap:2px}.mb-payment-list article>div:nth-child(2){text-align:right}.mb-payment-list article span{color:var(--mb-muted);font-size:12px}.mb-payment-list article p{grid-column:1/-1;margin:0;color:var(--mb-muted);font-size:13px}\n@media(max-width:700px){.mb-progress-list{grid-template-columns:1fr;text-align:left}.mb-progress-list li{grid-template-columns:28px 1fr;align-items:center;text-align:left}.mb-progress-list li:not(:last-child)::after{left:13px;right:auto;top:28px;bottom:-7px;width:2px;height:auto}.mb-progress-list li>span{grid-row:1}.mb-snapshot dl,.mb-remittance dl,.mb-contacts dl{grid-template-columns:1fr 1fr}.mb-snapshot dl>div,.mb-remittance dl>div,.mb-contacts dl>div{border:0;border-top:1px solid var(--mb-border);padding:10px 0}.mb-snapshot dl>div:nth-child(-n+2),.mb-remittance dl>div:nth-child(-n+2),.mb-contacts dl>div:nth-child(-n+2){border-top:0}.mb-payment-list article{grid-template-columns:1fr}.mb-payment-list article>div:nth-child(2){text-align:left}}\n`;\n","\"use client\";\n\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\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 BillStatusSummary,\n type BillReviewAttachment,\n type BillSubmissionRoute,\n} from \"./native-bill-review\";\nimport {\n BillActivityTimeline,\n BillLifecycleProgress,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n} from \"./bill-lifecycle-surfaces\";\nimport {\n DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n createBillLifecycleClient,\n type BillEorDocument,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type BillLifecycleActionId,\n type CloseBillInput,\n type PostBillPaymentInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nexport { createBillLifecycleClient } from \"@mindbill/browser\";\nexport type {\n BillEorDocument,\n BillActivityRecord,\n BillLifecycleAction,\n BillLifecycleActionId,\n BillLifecycleClient,\n BillLifecycleClientOptions,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillLifecycleSession,\n BillLifecycleSessionProvider,\n BillLifecycleSessionRequest,\n BrowserBillAddress,\n BillPaymentRecord,\n BillRemittanceSummary,\n CloseBillInput,\n PostBillPaymentInput,\n SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\n\nconst DEFAULT_REFRESH_INTERVAL = 60_000;\n\nexport type UseBillLifecycleOptions = BillLifecycleClientOptions & {\n refreshInterval?: number;\n enabled?: boolean;\n initialData?: BillLifecycleData | null;\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 getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\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};\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 fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const billId = 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 setData(initialData);\n setError(null);\n }, [initialData, providedBillId]);\n\n const client = useMemo(() => createBillLifecycleClient({\n billId: providedBillId,\n sessionEndpoint,\n getSession,\n apiBaseUrl,\n fetch: fetchOverride,\n }), [apiBaseUrl, fetchOverride, getSession, providedBillId, 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 searchClaimsAdministrators = useCallback(\n (query: string, claimNumber?: string) =>\n client.searchClaimsAdministrators(query, claimNumber),\n [client],\n );\n const getDeliveryOptions = useCallback(\n () => client.getDeliveryOptions(),\n [client],\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 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 getDeliveryOptions,\n openAttachment,\n openEor,\n closeBill,\n postPayment,\n submitSecondReview,\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillReactAppearance;\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 = \"\" | \"second_review\" | \"payment\" | \"close\";\n\nfunction LifecycleDialog({\n children,\n title,\n onClose,\n}: {\n children: ReactNode;\n title: string;\n onClose: () => void;\n}): ReactElement {\n const dialog = useRef<HTMLDivElement | null>(null);\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n dialog.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n previous?.focus();\n };\n }, [onClose]);\n return <div className=\"mb-lifecycle-dialog-backdrop\" onMouseDown={(event) => {\n if (event.currentTarget === event.target) onClose();\n }}>\n <div ref={dialog} className=\"mb-lifecycle-dialog\" role=\"dialog\" aria-modal=\"true\" aria-label={title} tabIndex={-1}>\n <button type=\"button\" className=\"mb-lifecycle-dialog-close\" aria-label=\"Close\" onClick={onClose}>×</button>\n {children}\n </div>\n </div>;\n}\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\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 const closePanel = useCallback(() => setPanel(\"\"), []);\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 !== \"view_eor\" && action.id !== \"independent_bill_review\")\n .map((action) => ({\n ...action,\n onClick: () => {\n if (!action.enabled) return;\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 return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n <style>{CONNECTED_THEME_OVERRIDE_STYLES}</style>\n <BillLifecycleProgress\n state={data.lifecycle.state}\n nativeStatus={data.lifecycle.nativeStatus}\n submittedAt={data.lifecycle.submittedAt ?? null}\n agingDays={data.lifecycle.agingDays ?? null}\n {...(appearance ? { appearance } : {})}\n />\n <BillSnapshotSummary\n bill={data.bill}\n patient={data.patient}\n injury={data.injury}\n delivery={data.delivery}\n {...(appearance ? { appearance } : {})}\n />\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 {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 <div className=\"mb-lifecycle-detail-grid\">\n <BillRemittanceCard remittance={data.remittance} {...(appearance ? { appearance } : {})} />\n <BillPayerContactCard delivery={data.delivery} {...(appearance ? { appearance } : {})} />\n <BillPaymentLedger payments={data.payments} {...(appearance ? { appearance } : {})} />\n </div>\n\n <BillActivityTimeline events={data.activity} {...(appearance ? { appearance } : {})} />\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 === \"second_review\" ? <LifecycleDialog title=\"Submit Second Review\" onClose={closePanel}><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></label>)}</fieldset>\n <div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={closePanel}>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></LifecycleDialog> : null}\n\n {panel === \"payment\" ? <LifecycleDialog title=\"Post payment\" onClose={closePanel}><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={closePanel}>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></LifecycleDialog> : null}\n\n {panel === \"close\" ? <LifecycleDialog title=\"Close bill\" onClose={closePanel}><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={closePanel}>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></LifecycleDialog> : 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-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.mb-lifecycle-detail-grid>*:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface)}.mb-lifecycle-toolbar>div:first-child{display:grid;gap:2px}.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-button{min-height:38px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:8px 13px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:#fff}.mb-lifecycle-button.quiet{border-color:transparent;background:transparent;color:var(--mb-muted)}.mb-lifecycle-button.danger{border-color:#b63d35;background:#b63d35;color:#fff}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-card,.mb-lifecycle-panel{padding:18px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:start;justify-content:space-between;gap:16px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:18px}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0}.mb-lifecycle-card header>span{padding:5px 8px;border-radius:999px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;text-transform:uppercase}.mb-lifecycle-documents{list-style:none;margin:12px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid}.mb-lifecycle-documents span{color:var(--mb-muted);font-size:12px}.mb-lifecycle-info{display:grid;gap:3px;padding:13px 15px;border:1px solid #cddfe5;border-radius:10px;background:var(--mb-soft)}.mb-lifecycle-dialog-backdrop{position:fixed;z-index:2147483000;inset:0;display:grid;place-items:center;padding:20px;background:rgba(18,35,43,.56);backdrop-filter:blur(3px)}.mb-lifecycle-dialog{position:relative;width:min(760px,100%);max-height:calc(100vh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:34px;height:34px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:22px/1 inherit}.mb-lifecycle-panel{display:grid;gap:16px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel.danger{border-color:#ecc5c2}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:12px;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-size:inherit;font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{width:100%;min-height:42px;border:1px solid var(--mb-border);border-radius:8px;background:#fff;color:var(--mb-text);font:inherit;padding:9px 11px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:12px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:12px;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:10px;padding:10px 2px;border-top:1px solid var(--mb-border)}.mb-lifecycle-packet>label>input{width:16px;min-height:16px}.mb-lifecycle-packet>label>span{display:grid}.mb-lifecycle-packet button{border:0;background:transparent;color:var(--mb-accent);cursor:pointer;font:inherit}.mb-lifecycle-upload{display:grid;grid-template-columns:220px 1fr auto;align-items:end;gap:10px;padding:12px;border-radius:9px;background:var(--mb-soft)}.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading{padding:12px 14px;border-radius:9px}.mb-lifecycle-message.success{background:#edf9f2;color:#217449}.mb-lifecycle-message.error,.mb-lifecycle-error{background:#fff0ef;color:#9d3029}.mb-lifecycle-error{display:flex;align-items:center;gap:12px}.mb-lifecycle-error span{flex:1}.mb-lifecycle-error button{border:1px solid currentColor;border-radius:7px;background:transparent;color:inherit;padding:7px 10px}@media(max-width:760px){.mb-lifecycle-detail-grid{grid-template-columns:1fr}.mb-lifecycle-detail-grid>*:last-child:nth-child(odd){grid-column:auto}.mb-lifecycle-toolbar,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-toolbar-actions,.mb-lifecycle-panel-actions{justify-content:start}.mb-lifecycle-fields.two,.mb-lifecycle-upload{grid-template-columns:1fr}.mb-lifecycle-documents li{align-items:start}.mb-lifecycle-packet>label{grid-template-columns:auto 1fr auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:92vh}.mb-lifecycle-dialog .mb-lifecycle-panel{border-radius:18px 18px 0 0}.mb-lifecycle-packet>label>button:last-child{grid-column:3}}\n`;\n\nconst CONNECTED_THEME_OVERRIDE_STYLES = `\n.mb-connected-lifecycle{color:var(--mb-text);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mb-lifecycle-toolbar,.mb-lifecycle-card,.mb-lifecycle-panel{border-color:var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface)}\n.mb-lifecycle-panel{box-shadow:var(--mb-shadow)}\n.mb-lifecycle-toolbar span,.mb-lifecycle-card p,.mb-lifecycle-panel p,.mb-lifecycle-info span{color:var(--mb-muted)}\n.mb-lifecycle-button{border-color:var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text)}\n.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mb-lifecycle-button.primary:hover{filter:brightness(.96)}\n.mb-lifecycle-button.danger{border-color:var(--mb-danger);background:var(--mb-danger);color:white}\n.mb-lifecycle-card header>span,.mb-lifecycle-info,.mb-lifecycle-upload{background:var(--mb-soft)}\n.mb-lifecycle-info,.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{border-color:var(--mb-border);border-radius:var(--mb-control-radius)}\n.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea,.mb-lifecycle-upload input,.mb-lifecycle-upload select{background:var(--mb-input);color:var(--mb-text)}\n.mb-lifecycle-message,.mb-lifecycle-error,.mb-lifecycle-loading,.mb-lifecycle-upload{border-radius:var(--mb-control-radius)}\n.mb-lifecycle-message.success{background:color-mix(in srgb,var(--mb-success) 10%,white);color:var(--mb-success)}\n.mb-lifecycle-message.error,.mb-lifecycle-error{background:color-mix(in srgb,var(--mb-danger) 10%,white);color:var(--mb-danger)}\n`;\n"],"mappings":"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","names":["useEffect","useRef","value","useEffect","useMemo","useState","jsx","jsxs","Field","useState","useEffect","useMemo","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useMemo","useState","useRef","useEffect","jsx","jsxs","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","createBillLifecycleClient","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","useState","useRef","useEffect","useMemo","useCallback","document","useRef","useEffect"]}
|