@mindbill/react 0.42.1 → 0.42.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","../src/appearance.ts","../src/native-bill-review.tsx","../src/bill-read-only-form.tsx","../src/bill-submission-form.tsx","../src/send-route-dialog.tsx","../src/claims-administrator-directory-dialog.tsx","../src/billing-catalog.ts","../src/billing-dashboard.tsx","../src/status-aging-matrix.tsx","../src/bill-tasks-dashboard.tsx","../src/bill-submissions-ribbon.tsx","../src/report-bill-status-dialog.tsx","../src/organization-onboarding.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 { BillReadOnlyForm } from \"./bill-read-only-form\";\nexport type { BillReadOnlyFormProps } from \"./bill-read-only-form\";\n\nexport {\n applyBillSubmissionEvaluationDiagnoses,\n applyBillSubmissionEvaluationModifiers,\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BILL_SUBMISSION_REPORT_TYPES,\n BILL_SUBMISSION_REQUIRED_FIELDS,\n BillSubmissionActions,\n BillSubmissionAttachmentsSection,\n BillSubmissionClaimSection,\n BillSubmissionForm,\n BillSubmissionHeader,\n BillSubmissionPatientSection,\n BillSubmissionProvidersSection,\n BillSubmissionServiceLinesSection,\n chooseClaimsAdministrator,\n ensureTrailingBillSubmissionLine,\n exactClaimsAdministratorMatch,\n formatBillSubmissionDate,\n claimsAdministratorRecommendations,\n MED_LEGAL_REPORT_TYPE_CODE,\n normalizeClaimsAdministratorName,\n parseBillSubmissionDate,\n prepareBillSubmissionDocuments,\n PSYCH_QME_DEFAULT_DIAGNOSIS,\n submittedClaimsAdministrator,\n validateBillSubmission,\n} from \"./bill-submission-form\";\nexport type {\n BillSubmissionAddress,\n BillSubmissionAttachmentReportTypeMode,\n BillSubmissionDiagnosisOption,\n BillSubmissionDocumentType,\n BillSubmissionEvaluationType,\n BillSubmissionFormProps,\n BillSubmissionFormValue,\n BillSubmissionInput,\n BillSubmissionModifierOption,\n BillSubmissionPostalPlace,\n BillSubmissionProcedureOption,\n BillSubmissionReportTypeOption,\n BillSubmissionSectionId,\n BillSubmissionSourceAttachment,\n BillSubmissionTaxonomyOption,\n BillSubmissionUpload,\n BillSubmissionValidation,\n} from \"./bill-submission-form\";\nexport { extractSendRouteEmail, formatSendRouteFax, SendRouteDialog } from \"./send-route-dialog\";\nexport type { SendRouteDialogProps, SendRouteSubmission } from \"./send-route-dialog\";\n\nexport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\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 BillAgingSummary,\n BillingDashboard,\n BillingReport,\n BillList,\n billAgingBucket,\n billAgingDays,\n buildBillingReportCsv,\n buildBillingReportRows,\n summarizeBillingDashboard,\n} from \"./billing-dashboard\";\nexport type {\n BillAgingBucket,\n BillAgingBucketId,\n BillAgingSummaryProps,\n BillingComponentProps,\n BillingDashboardBill,\n BillingDashboardProps,\n BillingDashboardSummary,\n BillingReportDimension,\n BillingReportProps,\n BillingReportRow,\n BillListProps,\n} from \"./billing-dashboard\";\n\nexport {\n BILL_STATUS_AGING_BUCKETS,\n BillStatusAgingMatrix,\n buildBillStatusAgingCsv,\n buildBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\nexport type {\n BillStatusAgingCell,\n BillStatusAgingMatrixData,\n BillStatusAgingMatrixProps,\n BillStatusAgingRow,\n} from \"./status-aging-matrix\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n BillTasksDashboard,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"./bill-tasks-dashboard\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardCell,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardProps,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"./bill-tasks-dashboard\";\n\nexport {\n BillSubmissionsRibbon,\n billSubmissionsRibbonDeliveryLabel,\n billSubmissionsRibbonFromHistory,\n} from \"./bill-submissions-ribbon\";\nexport type {\n BillSubmissionRibbonItem,\n BillSubmissionsRibbonProps,\n} from \"./bill-submissions-ribbon\";\n\nexport {\n REPORT_BILL_STATUS_OPTIONS,\n ReportBillStatusDialog,\n} from \"./report-bill-status-dialog\";\nexport type {\n ReportBillStatusDialogProps,\n ReportBillStatusId,\n ReportBillStatusInput,\n} from \"./report-bill-status-dialog\";\n\nexport { BillingSettings, OrganizationOnboarding } from \"./organization-onboarding\";\nexport type { OrganizationOnboardingProps } from \"./organization-onboarding\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\nexport type {\n BillClaimsAdministratorSource,\n BillReviewPayerOption,\n BillReviewPayerSuggestion,\n BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\n\nexport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleActions,\n BillLifecycleProgress,\n BillRejectionNotice,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n billActivityEventLabel,\n billLifecycleDisplayLabel,\n billLifecycleStage,\n isBillLifecycleDraft,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillHistoryTableProps,\n BillExplanationOfReviewProps,\n BillLifecycleActionsProps,\n BillLifecycleProgressProps,\n BillLifecycleProgressStepsOptions,\n BillRejectionNoticeProps,\n BillLifecycleStage,\n BillPaymentLedgerProps,\n BillPayerContactCardProps,\n BillRemittanceCardProps,\n BillSnapshotSummaryProps,\n} from \"./bill-lifecycle-surfaces\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n reportBillStatusContacts,\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n secondReviewDeadline,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nexport type { ClaimsAdministratorDirectoryDialogProps } from \"./claims-administrator-directory-dialog\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\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 BillRejection,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n SecondReviewDeadline,\n SendDuplicateBillInput,\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 | \"midnight-cyan\";\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: \"#f4510b\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#fffefd\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#090f1f\",\n mutedColor: \"#626a73\",\n borderColor: \"#e7e1da\",\n borderRadius: \"16px\",\n controlRadius: \"10px\",\n shadow: \"0 12px 36px rgba(244,81,11,.08), 0 1px 2px rgba(9,15,31,.05)\",\n dangerColor: \"#c4322b\",\n successColor: \"#16835b\",\n warningColor: \"#a65f00\",\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 \"midnight-cyan\": {\n accentColor: \"#05092e\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#edf6ff\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#05092e\",\n mutedColor: \"#596078\",\n borderColor: \"#d9dae1\",\n borderRadius: \"0px\",\n controlRadius: \"999px\",\n shadow: \"0 1px 2px rgba(5,9,46,.04)\",\n dangerColor: \"#b42318\",\n successColor: \"#167a58\",\n warningColor: \"#9a6418\",\n fontFamily: \"Geist, Inter, ui-sans-serif, system-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 /** True when a bill for this claims administrator must name one of `payers`. */\n payerSelectionRequired?: boolean;\n /** Selectable payers (subpayors) under this claims administrator. */\n payers?: Array<{ id: string; label: string; default?: boolean }>;\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 /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: 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 { useEffect, useState, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPattern,\n BillLifecycleDelivery,\n BillReviewAttachment,\n BillReviewData,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\nexport type BillReadOnlyFormProps = {\n data: BillReviewData & { delivery?: BillLifecycleDelivery };\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void | Promise<void>;\n};\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction date(value?: string | null): string {\n if (!value) return \"—\";\n const parsed = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" }).format(parsed);\n}\n\nfunction Value({ label, children, wide = false }: { label: string; children?: ReactNode; wide?: boolean }): ReactElement {\n return <div className={wide ? \"mb-read-value is-wide\" : \"mb-read-value\"}><dt>{label}</dt><dd>{children || \"—\"}</dd></div>;\n}\n\ntype PayerTab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst PAYER_TABS: ReadonlyArray<readonly [PayerTab, string]> = [\n [\"main\", \"Main\"],\n [\"bill-review\", \"Bill Review\"],\n [\"authorization\", \"Authorization Info\"],\n [\"mailing\", \"Mailing Address\"],\n [\"patterns\", \"Claim Number Pattern\"],\n];\n\nfunction DirectoryEmpty({ children }: { children: ReactNode }): ReactElement {\n return <p className=\"mb-read-directory-empty\">{children}</p>;\n}\n\nfunction ContactTable({ contacts, empty }: { contacts: readonly BillClaimsAdministratorContact[]; empty: string }): ReactElement {\n if (!contacts.length) return <DirectoryEmpty>{empty}</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Portal / email</th><th>Fax</th><th>Address</th></tr></thead><tbody>{contacts.map((contact, index) => <tr key={`${contact.name || \"contact\"}-${index}`}><td>{contact.name || \"—\"}{contact.note ? <small>{contact.note}</small> : null}</td><td>{contact.phone || \"—\"}</td><td>{contact.portalUrl ? <a href={contact.portalUrl} target=\"_blank\" rel=\"noopener noreferrer\">Open portal</a> : contact.email || \"—\"}</td><td>{contact.fax || \"—\"}</td><td>{contact.address || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction MailingTable({ addresses }: { addresses: readonly BillClaimsAdministratorMailingAddress[] }): ReactElement {\n if (!addresses.length) return <DirectoryEmpty>No mailing addresses are available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Submission types</th></tr></thead><tbody>{addresses.map((entry, index) => <tr key={`${entry.address}-${index}`}><td>{entry.company || \"—\"}</td><td>{entry.address}</td><td>{entry.notes || \"—\"}</td><td>{entry.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction PatternTable({ patterns }: { patterns: readonly BillClaimsAdministratorPattern[] }): ReactElement {\n if (!patterns.length) return <DirectoryEmpty>No claim-number pattern is available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Status</th><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{patterns.map((entry, index) => <tr key={`${entry.pattern}-${index}`}><td>{entry.matches === true ? <span className=\"mb-read-match is-match\">✓ Matches this claim</span> : entry.matches === false ? <span className=\"mb-read-match is-warning\">Review format</span> : \"Advisory\"}</td><td>{entry.length ?? \"—\"}</td><td>{entry.pattern}</td><td>{entry.example || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nexport function BillReadOnlyForm({ data, appearance, className, style, onOpenAttachment }: BillReadOnlyFormProps): ReactElement {\n const [payerOpen, setPayerOpen] = useState(false);\n const [payerTab, setPayerTab] = useState<PayerTab>(\"main\");\n const { bill, patient, injury } = data;\n const diagnoses = injury.diagnoses?.length\n ? injury.diagnoses\n : (injury.diagnosisCodes ?? []).map((code) => ({ code, description: \"\" }));\n const provider = bill.billingSnapshot?.billingProvider;\n const clinician = bill.billingSnapshot?.renderingProvider;\n const location = bill.billingSnapshot?.placeOfService;\n const address = patient.address;\n const patientAddress = [address?.line1, address?.city, address?.state, address?.postalCode].filter(Boolean).join(\", \");\n const billingAddress = provider ? [provider.billingStreet, provider.billingCity, provider.billingState, provider.billingZip].filter(Boolean).join(\", \") : \"\";\n const locationAddress = location ? [location.street, location.city, location.state, location.zip].filter(Boolean).join(\", \") : \"\";\n const payerName = data.delivery?.payerName || injury.claimsAdminName || \"—\";\n const contacts = data.delivery?.contacts;\n const directory = data.delivery?.directory;\n const fallbackContacts: readonly BillClaimsAdministratorContact[] = contacts && Object.values(contacts).some(Boolean) ? [{\n name: contacts.adjusterName || \"Claims contact\",\n ...(contacts.adjusterPhone ? { phone: contacts.adjusterPhone } : {}),\n ...(contacts.adjusterEmail || contacts.claimsEmail ? { email: contacts.adjusterEmail || contacts.claimsEmail } : {}),\n ...(contacts.faxNumber ? { fax: contacts.faxNumber } : {}),\n ...(contacts.portalUrl ? { portalUrl: contacts.portalUrl } : {}),\n ...(contacts.mailingAddress ? { address: contacts.mailingAddress } : {}),\n }] : [];\n const billReview = directory?.billReview?.length ? directory.billReview : fallbackContacts;\n const mailingAddresses: readonly BillClaimsAdministratorMailingAddress[] = directory?.mailingAddresses?.length\n ? directory.mailingAddresses\n : contacts?.mailingAddress ? [{ company: payerName, address: contacts.mailingAddress }] : [];\n useEffect(() => {\n if (!payerOpen) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") setPayerOpen(false); };\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [payerOpen]);\n\n return <section className={[\"mb-readonly-bill\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill details\">\n <style>{READ_ONLY_STYLES}</style>\n <header className=\"mb-readonly-heading\"><h2>Bill details</h2><strong>{money(bill.totalCharge)}</strong></header>\n\n <section className=\"mb-read-card\"><h3>Patient</h3><dl className=\"mb-read-grid\">\n <Value label=\"Name\">{patient.name || [patient.firstName, patient.middleName, patient.lastName].filter(Boolean).join(\" \")}</Value>\n <Value label=\"Date of birth\">{date(patient.dob)}</Value>\n <Value label=\"Phone\">{patient.phone}</Value>\n <Value label=\"Address\" wide>{patientAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Claim & injury</h3><dl className=\"mb-read-grid\">\n <Value label=\"Claim number\">{injury.claimNumber}</Value>\n <Value label=\"WCAB / ADJ number\">{injury.adjNumber}</Value>\n <Value label=\"Claims administrator\"><button type=\"button\" className=\"mb-read-payer\" onClick={() => { setPayerTab(\"main\"); setPayerOpen(true); }}>{payerName}</button></Value>\n <Value label=\"Employer\">{injury.employer}</Value>\n <Value label=\"Date of injury\">{date(injury.doi)}</Value>\n <Value label=\"Date of service\">{bill.dosEnd ? `${date(bill.dos)} – ${date(bill.dosEnd)}` : date(bill.dos)}</Value>\n <Value label=\"Injury description\" wide>{injury.injuryDescription}</Value>\n </dl>{diagnoses.length ? <div className=\"mb-read-diagnoses\" aria-label=\"Diagnoses\">{diagnoses.map((diagnosis) => <div key={diagnosis.code}><strong>{diagnosis.code}</strong>{diagnosis.description ? <span>{diagnosis.description}</span> : null}</div>)}</div> : null}</section>\n\n <section className=\"mb-read-card\"><h3>Providers & location</h3><dl className=\"mb-read-grid\">\n <Value label=\"Billing provider\">{provider?.name}</Value>\n <Value label=\"Billing NPI\">{provider?.npi}</Value>\n <Value label=\"Billing tax ID\">{provider?.taxId}</Value>\n <Value label=\"Billing phone\">{provider?.phone}</Value>\n <Value label=\"Billing address\" wide>{billingAddress}</Value>\n <Value label=\"Rendering provider\">{clinician?.name}</Value>\n <Value label=\"Rendering NPI\">{clinician?.npi}</Value>\n <Value label=\"Rendering taxonomy\">{clinician?.taxonomy}</Value>\n <Value label=\"Place of service code\">{location?.posCode}</Value>\n <Value label=\"Service address\" wide>{locationAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Service lines</h3><div className=\"mb-read-lines\" role=\"table\" aria-label=\"Service lines\">\n <div className=\"mb-read-line-header\" role=\"row\"><span>Procedure</span><span>Modifiers</span><span>Units</span><span>Charge</span></div>\n {bill.lineItems.map((line, index) => <div className=\"mb-read-line\" role=\"row\" key={line.id ?? `${line.code}-${index}`}>\n <strong>{line.code}</strong><div className=\"mb-read-chips\">{line.modifiers.length ? line.modifiers.map((modifier) => <span key={modifier}>{modifier}</span>) : \"—\"}</div><span>{line.units}</span><strong>{money(line.charge)}</strong>\n </div>)}\n <div className=\"mb-read-total\"><span>Paid {money(bill.totalPaid)}</span><strong>Balance {money(bill.balanceDue)}</strong></div>\n </div></section>\n\n <section className=\"mb-read-card\"><h3>Attachments</h3>{bill.attachments.length ? <ul className=\"mb-read-documents\">{bill.attachments.map((attachment) => <li key={attachment.id}><div><strong>{attachment.filename}</strong><span>{attachment.description || attachment.documentType.replace(/_/g, \" \")}</span></div>{onOpenAttachment ? <button type=\"button\" onClick={() => void onOpenAttachment(attachment)}>Preview</button> : null}</li>)}</ul> : <p className=\"mb-read-empty\">No attachments.</p>}</section>\n {payerOpen ? <div className=\"mb-read-dialog-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget) setPayerOpen(false); }}><section className=\"mb-read-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-read-payer-title\"><header><div><h3 id=\"mb-read-payer-title\">{payerName}</h3><span>Claims administrator</span></div><button type=\"button\" aria-label=\"Close claims administrator details\" onClick={() => setPayerOpen(false)}>×</button></header>\n <label className=\"mb-read-dialog-mobile-nav\"><span>Information section</span><select aria-label=\"Claims administrator information section\" value={payerTab} onChange={(event) => setPayerTab(event.target.value as PayerTab)}>{PAYER_TABS.map(([id, label]) => <option value={id} key={id}>{label}</option>)}</select></label>\n <div className=\"mb-read-dialog-tabs\" role=\"tablist\" aria-label=\"Claims administrator information\">\n {PAYER_TABS.map(([id, label]) => <button type=\"button\" role=\"tab\" aria-selected={payerTab === id} key={id} onClick={() => setPayerTab(id)}>{label}</button>)}\n </div>\n <div className=\"mb-read-dialog-panel\" role=\"tabpanel\">\n {payerTab === \"main\" ? <dl className=\"mb-read-directory-main\"><Value label=\"Name\">{payerName}</Value><Value label=\"Type\">{directory?.type}</Value><Value label=\"Description\" wide>{directory?.description}</Value><Value label=\"Website\">{directory?.website ? <a href={directory.website} target=\"_blank\" rel=\"noopener noreferrer\">{directory.website}</a> : \"—\"}</Value><Value label=\"Hours of operation\">{directory?.hours}</Value><Value label=\"Also known as\" wide>{directory?.aliases?.join(\", \")}</Value><Value label=\"Affiliated entities\" wide>{directory?.affiliatedEntities?.join(\", \")}</Value></dl> : null}\n {payerTab === \"bill-review\" ? <ContactTable contacts={billReview} empty=\"No bill-review contacts are available for this directory entry.\" /> : null}\n {payerTab === \"authorization\" ? <ContactTable contacts={directory?.authorization ?? []} empty=\"No authorization contacts are available for this directory entry.\" /> : null}\n {payerTab === \"mailing\" ? <MailingTable addresses={mailingAddresses} /> : null}\n {payerTab === \"patterns\" ? <PatternTable patterns={directory?.claimNumberPatterns ?? []} /> : null}\n </div>\n </section></div> : null}\n </section>;\n}\n\nconst READ_ONLY_STYLES = `\n.mb-read-diagnoses{display:grid;gap:8px;margin-top:16px}.mb-read-diagnoses>div{display:grid;grid-template-columns:minmax(64px,max-content) 1fr;gap:12px;align-items:baseline;border:1px solid var(--mb-border);border-radius:9px;background:#f7f9f8;padding:9px 12px}.mb-read-diagnoses span{color:var(--mb-muted)}\n.mb-readonly-bill{--mb-accent:#176c70;--mb-border:#d7e0df;--mb-surface:#fff;--mb-muted:#607176;color:var(--mb-text,#17282d);font:inherit;display:grid;gap:16px}.mb-readonly-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.mb-readonly-heading h2,.mb-read-card h3{margin:0}.mb-readonly-heading>strong{font-size:1.35rem}.mb-read-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);padding:20px;box-shadow:0 1px 2px rgba(15,40,45,.04)}.mb-read-card h3{font-size:1.05rem;margin-bottom:16px}.mb-read-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px 28px;margin:0}.mb-read-value{min-width:0}.mb-read-value.is-wide{grid-column:1/-1}.mb-read-value dt{color:var(--mb-muted);font-size:.75rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.mb-read-value dd{font-weight:600;margin:5px 0 0;overflow-wrap:anywhere}.mb-read-payer{border:0;border-bottom:1px dotted currentColor;background:transparent;color:inherit;padding:0;font:inherit;font-weight:inherit;text-align:left;cursor:pointer}.mb-read-payer:hover{color:var(--mb-accent)}.mb-read-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.mb-read-chips span{border:1px solid var(--mb-border);border-radius:999px;padding:3px 9px;font-size:.82rem;background:#f7f9f8}.mb-read-lines{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-read-line-header,.mb-read-line{display:grid;grid-template-columns:1.2fr 1.5fr .45fr .7fr;gap:16px;align-items:center;padding:12px 14px}.mb-read-line-header{background:#f6f8f7;color:var(--mb-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.mb-read-line{border-top:1px solid var(--mb-border)}.mb-read-line .mb-read-chips{margin:0}.mb-read-line>span:last-child,.mb-read-line>strong:last-child{text-align:right}.mb-read-total{display:flex;justify-content:flex-end;gap:24px;border-top:1px solid var(--mb-border);padding:13px 14px}.mb-read-documents{list-style:none;padding:0;margin:0;display:grid}.mb-read-documents li{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 0;border-top:1px solid var(--mb-border)}.mb-read-documents li:first-child{border-top:0;padding-top:0}.mb-read-documents li:last-child{padding-bottom:0}.mb-read-documents div{display:grid;gap:3px;min-width:0}.mb-read-documents strong{overflow-wrap:anywhere}.mb-read-documents span,.mb-read-empty{color:var(--mb-muted)}.mb-read-documents button{border:1px solid var(--mb-border);border-radius:8px;background:transparent;color:inherit;padding:8px 13px;font:inherit;font-weight:650;cursor:pointer}.mb-read-documents button:hover{border-color:var(--mb-accent);color:var(--mb-accent)}.mb-read-dialog-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:rgba(11,28,32,.46);padding:20px}.mb-read-dialog{width:min(1040px,100%);min-height:min(620px,calc(100dvh - 40px));max-height:calc(100dvh - 40px);overflow:auto;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface);padding:22px;box-shadow:0 22px 70px rgba(8,25,29,.24)}.mb-read-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.mb-read-dialog header span{display:block;margin-top:4px;color:var(--mb-muted);font-size:.78rem}.mb-read-dialog h3{margin:0;font-size:1.35rem}.mb-read-dialog header button{display:grid;place-items:center;width:44px;height:44px;border:0;background:transparent;color:inherit;font:inherit;font-size:1.7rem;line-height:1;cursor:pointer}.mb-read-dialog-mobile-nav{display:none}.mb-read-dialog-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-radius:10px;background:var(--mb-soft,#f4f7f6);padding:0 10px}.mb-read-dialog-tabs button{min-height:68px;border:0;border-top:4px solid transparent;background:transparent;color:var(--mb-muted);font:inherit;font-weight:750;cursor:pointer;padding:8px}.mb-read-dialog-tabs button[aria-selected=true]{border-color:var(--mb-accent);background:var(--mb-surface);color:var(--mb-text)}.mb-read-dialog-panel{padding-top:22px}.mb-read-directory-main{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 28px;margin:0}.mb-read-directory-main a,.mb-read-directory-table a{color:var(--mb-accent)}.mb-read-directory-table-wrap{border:1px solid var(--mb-border);border-radius:10px;overflow:auto}.mb-read-directory-table{width:100%;border-collapse:collapse;text-align:left}.mb-read-directory-table th,.mb-read-directory-table td{padding:13px 14px;vertical-align:top;border-top:1px solid var(--mb-border)}.mb-read-directory-table th{border-top:0;background:var(--mb-soft,#f4f7f6);color:var(--mb-muted);font-size:.78rem}.mb-read-directory-table td small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-read-directory-empty{margin:0;padding:26px;border:1px dashed var(--mb-border);border-radius:10px;color:var(--mb-muted);text-align:center}.mb-read-match{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:.78rem;font-weight:750}.mb-read-match.is-match{background:#eaf7ef;color:#237448}.mb-read-match.is-warning{background:#fff5df;color:#8a5b00}\n@media(max-width:700px){.mb-readonly-heading{align-items:flex-start}.mb-read-grid,.mb-read-directory-main{grid-template-columns:1fr}.mb-read-value.is-wide{grid-column:auto}.mb-read-card{padding:16px}.mb-read-line-header{display:none}.mb-read-line{grid-template-columns:1fr auto;gap:8px}.mb-read-line>*:nth-child(2){grid-column:1/-1}.mb-read-total{justify-content:space-between}.mb-readonly-heading>strong{font-size:1.05rem}.mb-read-dialog-backdrop{place-items:end center;padding:0}.mb-read-dialog{width:100%;min-height:0;max-height:calc(100dvh - 12px);border-radius:18px 18px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}.mb-read-dialog header{margin-bottom:14px}.mb-read-dialog-mobile-nav{display:grid;gap:6px;color:var(--mb-muted);font-size:.75rem;font-weight:750;letter-spacing:.05em;text-transform:uppercase}.mb-read-dialog-mobile-nav select{width:100%;min-height:48px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);font:inherit;font-size:1rem;font-weight:700;padding:10px 12px;text-transform:none}.mb-read-dialog-tabs{display:none}.mb-read-dialog-panel{padding-top:16px}.mb-read-directory-table-wrap{border:0;overflow:visible}.mb-read-directory-table,.mb-read-directory-table thead,.mb-read-directory-table tbody,.mb-read-directory-table tr,.mb-read-directory-table th,.mb-read-directory-table td{display:block}.mb-read-directory-table thead{display:none}.mb-read-directory-table tr{border:1px solid var(--mb-border);border-radius:10px;margin-bottom:10px;overflow:hidden}.mb-read-directory-table td{border-top:1px solid var(--mb-border)}.mb-read-directory-table td:first-child{border-top:0}}\n`;\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillClaimsAdministratorDirectory,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionResult,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerListInput,\n type BillReviewPayerOption,\n type BillReviewPayerPage,\n type BillReviewPayerSuggestion,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nimport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\n\nexport const BILL_SUBMISSION_DOCUMENT_TYPES = [\n \"final_report\", \"proof_of_service\", \"letter_of_attestation\", \"form_122\",\n \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\",\n] as const;\n\nexport type BillSubmissionDocumentType = (typeof BILL_SUBMISSION_DOCUMENT_TYPES)[number];\nexport type BillSubmissionAttachmentReportTypeMode = \"auto\" | \"hidden\" | \"visible\";\nexport type BillSubmissionReportTypeOption = { code: string; label: string };\nexport const MED_LEGAL_REPORT_TYPE_CODE = \"OZ:J4\";\nexport const BILL_SUBMISSION_REPORT_TYPES: readonly BillSubmissionReportTypeOption[] = [\n { code: \"OZ:J1\", label: \"Doctor's First Report (DLSR 5021)\" },\n { code: \"OZ:J2\", label: \"Supplemental Medical Report (BRs)\" },\n { code: \"OZ:J3\", label: \"Medical Permanent Impairment Report\" },\n { code: MED_LEGAL_REPORT_TYPE_CODE, label: \"Med-Legal Report\" },\n { code: \"OZ:J5\", label: \"Vocational Report\" },\n { code: \"OZ:J6\", label: \"Work Status Report\" },\n { code: \"OZ:J7\", label: \"Consultation Report\" },\n { code: \"OZ:J8\", label: \"Permanent Disability Report\" },\n { code: \"OZ:J9\", label: \"Itemized Statement\" },\n { code: \"03\", label: \"Justifying Treatment Beyond Utilization Guidelines\" },\n { code: \"04\", label: \"Drugs Administered\" }, { code: \"05\", label: \"Treatment Diagnosis\" },\n { code: \"06\", label: \"Initial Assessment\" }, { code: \"07\", label: \"Plan of Treatment\" },\n { code: \"08\", label: \"Plan of Treatment\" }, { code: \"09\", label: \"PR2 (Progress Report)\" },\n { code: \"10\", label: \"Continued Treatment\" }, { code: \"11\", label: \"Chemical Analysis\" },\n { code: \"13\", label: \"Certified Test Report\" }, { code: \"15\", label: \"Justification for Admission\" },\n { code: \"21\", label: \"Recovery Plan\" }, { code: \"A3\", label: \"Allergies/Sensitivities Document\" },\n { code: \"A4\", label: \"Autopsy Report\" }, { code: \"AM\", label: \"Ambulance Certification\" },\n { code: \"AS\", label: \"Admission Summary\" }, { code: \"B2\", label: \"Prescription\" },\n { code: \"B3\", label: \"Physician Order\" }, { code: \"B4\", label: \"Referral Form\" },\n { code: \"BR\", label: \"Benchmark Testing Results\" }, { code: \"BS\", label: \"Baseline\" },\n { code: \"BT\", label: \"Blanket Test Results\" }, { code: \"CB\", label: \"Chiropractic Justification\" },\n { code: \"CK\", label: \"Canceled Check\" }, { code: \"CT\", label: \"Certification\" },\n { code: \"D2\", label: \"Drug Profile Document\" }, { code: \"DA\", label: \"Dental Models\" },\n { code: \"DB\", label: \"Durable Medical Equipment RX\" }, { code: \"DG\", label: \"Diagnostic Report\" },\n { code: \"DJ\", label: \"Discharge Monitoring Report\" }, { code: \"DS\", label: \"Discharge Summary\" },\n { code: \"EB\", label: \"Explanation of Benefits\" }, { code: \"HC\", label: \"Health Clinic Records (HC)\" },\n { code: \"HR\", label: \"Health Clinic Records (HR)\" }, { code: \"I5\", label: \"Immunization Record\" },\n { code: \"IR\", label: \"State School Immunization Records\" }, { code: \"LA\", label: \"Laboratory Results\" },\n { code: \"M1\", label: \"Medical Record Attachment\" }, { code: \"MT\", label: \"Nursing Notes\" },\n { code: \"NN\", label: \"Minor Deviation Request\" }, { code: \"OB\", label: \"Operative Note\" },\n { code: \"OC\", label: \"Oxygen Content Averaging Report\" }, { code: \"OD\", label: \"Orders and Treatments Document\" },\n { code: \"OE\", label: \"Objective Physical Examination Doc\" }, { code: \"OX\", label: \"Oxygen Therapy Certification\" },\n { code: \"OZ\", label: \"Support Data for Bill\" }, { code: \"P4\", label: \"Pathology Report\" },\n { code: \"P5\", label: \"Patient Medical History Document\" }, { code: \"PE\", label: \"Periodontal Charts\" },\n { code: \"PN\", label: \"Physical Therapy Notes\" }, { code: \"PO\", label: \"Prosthetics or Orthotic Certification\" },\n { code: \"PQ\", label: \"Paramedical Results\" }, { code: \"PY\", label: \"Physician's Report\" },\n { code: \"PZ\", label: \"Physical Therapy Certification\" }, { code: \"RB\", label: \"Radiology Films\" },\n { code: \"RR\", label: \"Radiology Reports\" }, { code: \"RT\", label: \"Report of tests and Analysis Report\" },\n { code: \"RX\", label: \"Renewable Oxygen Content Averaging Report\" }, { code: \"SG\", label: \"Symptoms Document\" },\n { code: \"V5\", label: \"Death Notification\" }, { code: \"XP\", label: \"Photographs\" },\n] as const;\nexport type BillSubmissionEvaluationType = \"qme\" | \"ame\" | \"psych_qme\";\nexport type BillSubmissionAddress = { line1: string; line2?: string; city: string; state: string; postalCode: string };\nexport type BillSubmissionDiagnosisOption = { code: string; description: string };\nexport type BillSubmissionProcedureOption = { code: string; description: string; allowedAmount?: number };\nexport type BillSubmissionModifierOption = { code: string; description: string };\nexport type BillSubmissionTaxonomyOption = { code: string; description: string };\nexport type BillSubmissionPostalPlace = { city: string; state: string };\n\nexport type BillSubmissionInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string; externalId?: string; firstName: string; middleName?: string; lastName: string;\n dateOfBirth: string; ssn?: string; gender?: \"M\" | \"F\" | \"X\"; phone?: string;\n address: BillSubmissionAddress;\n };\n claim: {\n id?: string; externalId?: string; claimNumber: string; adjNumber?: string; employer?: string;\n dateOfInjury?: string; injuryState?: string; description?: string;\n claimsAdministrator?: {\n id?: string;\n name: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n /** Directory metadata carried while editing; stripped from the submitted bill. */\n payerSelectionRequired?: boolean;\n payers?: BillReviewPayerOption[];\n };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider?: {\n name?: string; taxId?: string; npi?: string; phone?: string; address?: BillSubmissionAddress;\n };\n renderingProvider?: {\n name?: string; specialty?: string; npi?: string; taxonomy?: string; licenseNumber?: string;\n licenseState?: string; isQme?: boolean; isAme?: boolean;\n };\n serviceLocation?: { name?: string; address?: BillSubmissionAddress; placeOfServiceCode?: string };\n diagnoses?: string[];\n serviceLines: Array<{\n code: string; modifiers?: string[]; units?: number; serviceDate?: string;\n serviceDateEnd?: string | null; charge?: number; diagnosisPointers?: number[];\n }>;\n};\n\n/** A validated, submission-ready bill. The form accepts partial provider data while editing,\n * but only emits this complete contract after every required field has passed validation. */\nexport type CompleteBillSubmissionInput = Omit<\n BillSubmissionInput,\n \"claim\" | \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\" | \"diagnoses\" | \"serviceLines\"\n> & {\n claim: BillSubmissionInput[\"claim\"] & {\n employer: string;\n dateOfInjury: string;\n claimsAdministrator: { id: string; name: string; payerId?: string };\n };\n billingProvider: {\n name: string; taxId: string; npi: string; phone: string; address: BillSubmissionAddress;\n };\n renderingProvider: NonNullable<BillSubmissionInput[\"renderingProvider\"]> & {\n name: string; npi: string; taxonomy: string;\n };\n serviceLocation: NonNullable<BillSubmissionInput[\"serviceLocation\"]> & {\n address: BillSubmissionAddress; placeOfServiceCode: string;\n };\n diagnoses: string[];\n serviceLines: BillSubmissionInput[\"serviceLines\"];\n};\n\nexport type BillSubmissionSourceAttachment = {\n id: string;\n fileName: string;\n documentType: BillSubmissionDocumentType;\n description?: string;\n /** @deprecated Source attachments shown in the form are included until removed. */\n selected?: boolean;\n /** Marks a document that the host selected by default. This does not imply that it is locked. */\n autoAttached?: boolean;\n /** Controls whether the user can remove the document from this submission packet. Defaults to false for auto-attached documents and true otherwise. */\n removable?: boolean;\n previewUrl?: string;\n /** Authenticated source loader used when the document is not available at a public URL. */\n loadBlob?: () => Promise<Blob>;\n reportTypeCode?: string;\n};\nexport type BillSubmissionUpload = { file: File; documentType: BillSubmissionDocumentType; description?: string; reportTypeCode?: string };\nexport type BillSubmissionFormValue = {\n bill: CompleteBillSubmissionInput;\n sourceAttachmentIds: string[];\n sourceAttachmentReportTypes: Record<string, string>;\n uploads: BillSubmissionUpload[];\n};\n\nexport type BillSubmissionFormProps = {\n initialBill: BillSubmissionInput;\n attachments?: BillSubmissionSourceAttachment[];\n /**\n * Legacy custom submission escape hatch. Connected forms should omit this so\n * the component owns PDF encoding and the Partner API wire contract.\n */\n onSubmit?: (value: BillSubmissionFormValue) => void | Promise<void>;\n /** Called after the connected component atomically creates and submits the bill. */\n onSubmitted?: (result: BrowserBillSubmissionResult) => void | Promise<void>;\n /** Short-lived partner browser session. Enables reference data and direct submission. */\n getSession?: BillLifecycleSessionProvider;\n sessionEndpoint?: string;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** Paginated claims-administrator directory. Empty queries return the alphabetical first page. */\n onListClaimsAdministrators?: (input?: BillReviewPayerListInput) => Promise<BillReviewPayerPage>;\n /** @deprecated Prefer onListClaimsAdministrators for browse and pagination support. */\n onSearchClaimsAdministrators?: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n onGetClaimsAdministratorDirectory?: (id: string, injuryState?: string) => Promise<BillClaimsAdministratorDirectory>;\n /** Host-system evidence shown without preselecting a canonical directory entry. EAMS evidence takes precedence. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /** @deprecated Prefer claimsAdministratorSources so the source label and optional URL remain explicit. */\n claimsAdministratorHint?: ReactNode;\n diagnosisOptions?: BillSubmissionDiagnosisOption[];\n onSearchDiagnoses?: (query: string, limit?: number, offset?: number) => Promise<BillSubmissionDiagnosisOption[]>;\n onLookupPostalCode?: (postalCode: string) => Promise<BillSubmissionPostalPlace | null>;\n procedureOptions?: BillSubmissionProcedureOption[];\n modifierOptions?: BillSubmissionModifierOption[];\n /** Common NUCC provider taxonomies are bundled; supplied values extend or replace matching codes. */\n taxonomyOptions?: BillSubmissionTaxonomyOption[];\n /**\n * The delivery-method dialog shown when the biller submits.\n * \"auto\" (default) shows it in connected mode whenever the delivery preview\n * is available; \"off\" submits directly on MindBill's recommended route.\n */\n deliveryRoutePicker?: \"auto\" | \"off\";\n /** Auto hides and forces J4 for med-legal bills; treatment bills show the full report-type directory. */\n attachmentReportTypeMode?: BillSubmissionAttachmentReportTypeMode;\n attachmentReportTypes?: readonly BillSubmissionReportTypeOption[];\n defaultAttachmentReportType?: string;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n submitLabel?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** Rejected-field paths to visually call out while the user corrects the next submission. */\n attentionFields?: string[];\n attentionMessage?: ReactNode;\n /**\n * Optional composable layout. Use the exported section components as children;\n * the parent form continues to own validation, directory lookups, uploads, and submission.\n */\n children?: ReactNode;\n};\n\nexport const BILL_SUBMISSION_REQUIRED_FIELDS = [\n \"patient.firstName\", \"patient.lastName\", \"patient.dateOfBirth\", \"patient.address.line1\",\n \"patient.address.city\", \"patient.address.state\", \"patient.address.postalCode\",\n \"claim.claimNumber\", \"claim.employer\", \"claim.dateOfInjury\", \"claim.claimsAdministrator\", \"service.date\",\n \"billingProvider.name\", \"billingProvider.taxId\", \"billingProvider.npi\", \"billingProvider.phone\",\n \"billingProvider.address.line1\", \"billingProvider.address.city\", \"billingProvider.address.state\", \"billingProvider.address.postalCode\",\n \"renderingProvider.name\", \"renderingProvider.npi\", \"renderingProvider.taxonomy\",\n \"serviceLocation.placeOfServiceCode\", \"serviceLocation.address.line1\", \"serviceLocation.address.city\",\n \"serviceLocation.address.state\", \"serviceLocation.address.postalCode\",\n \"diagnoses[]\",\n \"serviceLines[].code\", \"serviceLines[].units\",\n] as const;\n\nexport type BillSubmissionValidation = { valid: boolean; fieldErrors: Record<string, string> };\n\nconst documentLabels: Record<BillSubmissionDocumentType, string> = {\n final_report: \"Final report\", proof_of_service: \"Proof of service\",\n letter_of_attestation: \"Letter of attestation\", form_122: \"Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\", w9: \"W-9\",\n medical_records: \"Medical records\", appeal: \"Appeal\", other: \"Other\",\n};\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 25;\nconst DIAGNOSIS_PAGE_SIZE = 100;\nconst PAYER_PAGE_SIZE = 50;\nconst EMPTY_ATTACHMENTS: BillSubmissionSourceAttachment[] = [];\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let offset = 0; offset < bytes.length; offset += 32_768) {\n binary += String.fromCharCode(...bytes.subarray(offset, offset + 32_768));\n }\n return globalThis.btoa(binary);\n}\n\nasync function pdfDocument(\n blob: Blob,\n input: Omit<BrowserBillSubmissionDocument, \"contentBase64\">,\n): Promise<BrowserBillSubmissionDocument> {\n if (blob.size > MAX_PDF_BYTES) throw new Error(`${input.filename} is larger than 25 MB.`);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (\n bytes.length < 5\n || bytes[0] !== 0x25\n || bytes[1] !== 0x50\n || bytes[2] !== 0x44\n || bytes[3] !== 0x46\n || bytes[4] !== 0x2d\n ) {\n throw new Error(`${input.filename} is not a valid PDF.`);\n }\n return { ...input, contentBase64: bytesToBase64(bytes) };\n}\n\nexport async function prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId = {},\n defaultReportTypeCode,\n fetch: fetchOverride,\n}: {\n attachments: BillSubmissionSourceAttachment[];\n selectedIds: string[];\n uploads: BillSubmissionUpload[];\n reportTypeCodeByAttachmentId?: Record<string, string>;\n defaultReportTypeCode?: string;\n fetch?: typeof globalThis.fetch;\n}): Promise<BrowserBillSubmissionDocument[]> {\n const fetcher = fetchOverride ?? globalThis.fetch;\n const selected = selectedIds.map((id) => attachments.find((item) => item.id === id)).filter((item): item is BillSubmissionSourceAttachment => Boolean(item));\n const sourceDocuments = await Promise.all(selected.map(async (attachment) => {\n let blob: Blob;\n if (attachment.loadBlob) blob = await attachment.loadBlob();\n else {\n if (!attachment.previewUrl) throw new Error(`${attachment.fileName} cannot be submitted because its document URL is missing.`);\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n const response = await fetcher(attachment.previewUrl, { credentials: \"same-origin\" });\n if (!response.ok) throw new Error(`${attachment.fileName} could not be loaded for submission.`);\n blob = await response.blob();\n }\n return pdfDocument(blob, {\n externalId: attachment.id,\n filename: attachment.fileName,\n documentType: attachment.documentType,\n ...((reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n });\n }));\n const uploadedDocuments = await Promise.all(uploads.map(({ file, documentType, description, reportTypeCode }) => pdfDocument(file, {\n filename: file.name,\n documentType,\n ...((reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCode || defaultReportTypeCode } : {}),\n ...(description ? { description } : {}),\n })));\n return [...sourceDocuments, ...uploadedDocuments];\n}\n\nfunction previewUploadedPdf(file: File): void {\n const url = URL.createObjectURL(file);\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nfunction blankLine(): BillSubmissionInput[\"serviceLines\"][number] {\n return { code: \"\", modifiers: [], units: 1 };\n}\nfunction lineHasContent(line: BillSubmissionInput[\"serviceLines\"][number]): boolean {\n return Boolean(line.code.trim() || line.modifiers?.length || line.charge != null);\n}\nexport function ensureTrailingBillSubmissionLine(\n lines: BillSubmissionInput[\"serviceLines\"],\n): BillSubmissionInput[\"serviceLines\"] {\n const normalized: BillSubmissionInput[\"serviceLines\"] = lines.length ? lines.map((line) => ({ ...line, modifiers: [...(line.modifiers ?? [])], units: line.units ?? 1 })) : [];\n while (normalized.length > 1 && !lineHasContent(normalized.at(-1)!) && !lineHasContent(normalized.at(-2)!)) normalized.pop();\n if (!normalized.length || lineHasContent(normalized.at(-1)!)) normalized.push(blankLine());\n return normalized;\n}\n\nexport function parseBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]); const day = Number(match[1]); const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\nexport function formatBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nfunction evaluationModifier(type: BillSubmissionEvaluationType, code: string): string | undefined {\n if (!/^ML(?:200|201|202|203|PRR)$/.test(code.toUpperCase())) return undefined;\n if (type === \"ame\") return code.toUpperCase() === \"ML200\" || code.toUpperCase() === \"MLPRR\" ? undefined : \"94\";\n if (type === \"psych_qme\") return code.toUpperCase() === \"ML200\" ? \"95\" : code.toUpperCase() === \"MLPRR\" ? undefined : \"96\";\n return \"95\";\n}\nexport function applyBillSubmissionEvaluationModifiers(\n lines: BillSubmissionInput[\"serviceLines\"], type: BillSubmissionEvaluationType,\n): BillSubmissionInput[\"serviceLines\"] {\n return lines.map((line) => {\n const auto = evaluationModifier(type, line.code);\n const modifiers = (line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")));\n return { ...line, modifiers: auto ? [auto, ...modifiers] : modifiers };\n });\n}\n\nexport const PSYCH_QME_DEFAULT_DIAGNOSIS = \"Z04.6\";\n\n/** Seed Psych QME's general examination code only when no diagnosis was supplied. */\nexport function applyBillSubmissionEvaluationDiagnoses(\n diagnoses: string[] | undefined,\n type: BillSubmissionEvaluationType,\n): string[] {\n const current = [...(diagnoses ?? [])];\n return type === \"psych_qme\" && !current.some((code) => code.trim())\n ? [PSYCH_QME_DEFAULT_DIAGNOSIS]\n : current;\n}\n\nfunction initialEvaluationType(bill: BillSubmissionInput): BillSubmissionEvaluationType {\n if (bill.renderingProvider?.isAme) return \"ame\";\n return bill.renderingProvider?.specialty?.toLowerCase().includes(\"psych\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction cloneInitialBill(bill: BillSubmissionInput): BillSubmissionInput {\n const cloned = cloneBill(bill);\n cloned.diagnoses = applyBillSubmissionEvaluationDiagnoses(cloned.diagnoses, initialEvaluationType(bill));\n return cloned;\n}\n\nfunction submittedLines(lines: BillSubmissionInput[\"serviceLines\"]): BillSubmissionInput[\"serviceLines\"] {\n return lines.filter(lineHasContent).map((line) => ({ ...line, code: line.code.trim(), modifiers: [...(line.modifiers ?? [])] }));\n}\nfunction cloneBill(bill: BillSubmissionInput): BillSubmissionInput {\n return {\n ...bill,\n patient: { ...bill.patient, address: { ...bill.patient.address } },\n claim: { ...bill.claim, ...(bill.claim.claimsAdministrator ? { claimsAdministrator: { ...bill.claim.claimsAdministrator } } : {}) },\n service: { ...bill.service },\n ...(bill.billingProvider ? { billingProvider: { ...bill.billingProvider, ...(bill.billingProvider.address ? { address: { ...bill.billingProvider.address } } : {}) } } : {}),\n ...(bill.renderingProvider ? { renderingProvider: { ...bill.renderingProvider } } : {}),\n ...(bill.serviceLocation ? { serviceLocation: { ...bill.serviceLocation, ...(bill.serviceLocation.address ? { address: { ...bill.serviceLocation.address } } : {}) } } : {}),\n diagnoses: [...(bill.diagnoses ?? [])],\n serviceLines: ensureTrailingBillSubmissionLine(bill.serviceLines),\n };\n}\nexport function validateBillSubmission(bill: BillSubmissionInput): BillSubmissionValidation {\n const errors: Record<string, string> = {};\n const required = (path: string, value: unknown, message: string) => { if (typeof value !== \"string\" || !value.trim()) errors[path] = message; };\n required(\"patient.firstName\", bill.patient.firstName, \"Enter the patient's first name.\");\n required(\"patient.lastName\", bill.patient.lastName, \"Enter the patient's last name.\");\n required(\"patient.dateOfBirth\", bill.patient.dateOfBirth, \"Enter the patient's date of birth.\");\n required(\"patient.address.line1\", bill.patient.address.line1, \"Enter the patient's street address.\");\n required(\"patient.address.city\", bill.patient.address.city, \"Enter the patient's city.\");\n required(\"patient.address.state\", bill.patient.address.state, \"Enter the patient's 2-letter state code.\");\n required(\"patient.address.postalCode\", bill.patient.address.postalCode, \"Enter the patient's ZIP code.\");\n required(\"claim.claimNumber\", bill.claim.claimNumber, \"Enter the claim number.\");\n required(\"claim.employer\", bill.claim.employer, \"Enter the employer name.\");\n required(\"claim.dateOfInjury\", bill.claim.dateOfInjury, \"Enter the date of injury.\");\n required(\"claim.claimsAdministrator\", bill.claim.claimsAdministrator?.name, \"Select a claims administrator so MindBill can route this bill.\");\n required(\"service.date\", bill.service.date, \"Enter the date of service.\");\n required(\"billingProvider.name\", bill.billingProvider?.name, \"Enter the billing provider name.\");\n required(\"billingProvider.taxId\", bill.billingProvider?.taxId, \"Enter the billing provider Tax ID (EIN or SSN).\");\n required(\"billingProvider.npi\", bill.billingProvider?.npi, \"Enter the billing provider NPI.\");\n required(\"billingProvider.phone\", bill.billingProvider?.phone, \"Enter the billing provider phone number.\");\n required(\"billingProvider.address.line1\", bill.billingProvider?.address?.line1, \"Enter the billing provider street address.\");\n required(\"billingProvider.address.city\", bill.billingProvider?.address?.city, \"Enter the billing provider city.\");\n required(\"billingProvider.address.state\", bill.billingProvider?.address?.state, \"Enter the billing provider 2-letter state code.\");\n required(\"billingProvider.address.postalCode\", bill.billingProvider?.address?.postalCode, \"Enter the billing provider ZIP code.\");\n required(\"renderingProvider.name\", bill.renderingProvider?.name, \"Enter the rendering provider name.\");\n required(\"renderingProvider.npi\", bill.renderingProvider?.npi, \"Enter the rendering provider NPI.\");\n required(\"renderingProvider.taxonomy\", bill.renderingProvider?.taxonomy, \"Enter the rendering provider taxonomy code.\");\n required(\"serviceLocation.placeOfServiceCode\", bill.serviceLocation?.placeOfServiceCode, \"Enter the 2-digit place of service code.\");\n required(\"serviceLocation.address.line1\", bill.serviceLocation?.address?.line1, \"Enter the service facility street address.\");\n required(\"serviceLocation.address.city\", bill.serviceLocation?.address?.city, \"Enter the service facility city.\");\n required(\"serviceLocation.address.state\", bill.serviceLocation?.address?.state, \"Enter the service facility 2-letter state code.\");\n required(\"serviceLocation.address.postalCode\", bill.serviceLocation?.address?.postalCode, \"Enter the service facility ZIP code.\");\n if (!(bill.diagnoses ?? []).some((code) => code.trim())) {\n errors.diagnoses = \"Select at least one ICD-10 diagnosis code.\";\n }\n if (bill.claim.claimsAdministrator?.name && !bill.claim.claimsAdministrator.id) {\n errors[\"claim.claimsAdministrator\"] = \"Select a claims administrator from the payer directory.\";\n }\n if (bill.claim.claimsAdministrator?.payerSelectionRequired && !bill.claim.claimsAdministrator.payerId?.trim()) {\n errors[\"claim.claimsAdministrator.payerId\"] = \"Select the payer for this claims administrator.\";\n }\n if (bill.patient.dateOfBirth && !parseBillSubmissionDate(bill.patient.dateOfBirth)) errors[\"patient.dateOfBirth\"] = \"Use MM/DD/YYYY\";\n if (bill.claim.dateOfInjury && !parseBillSubmissionDate(bill.claim.dateOfInjury)) errors[\"claim.dateOfInjury\"] = \"Use MM/DD/YYYY\";\n if (bill.patient.address.state.trim().length !== 2) errors[\"patient.address.state\"] = \"Use a 2-letter state code\";\n if (bill.billingProvider?.address?.state && bill.billingProvider.address.state.trim().length !== 2) errors[\"billingProvider.address.state\"] = \"Use a 2-letter state code.\";\n if (bill.serviceLocation?.address?.state && bill.serviceLocation.address.state.trim().length !== 2) errors[\"serviceLocation.address.state\"] = \"Use a 2-letter state code.\";\n const digits = (value?: string) => value?.replace(/\\D/g, \"\") ?? \"\";\n if (bill.billingProvider?.taxId && digits(bill.billingProvider.taxId).length !== 9) errors[\"billingProvider.taxId\"] = \"Enter a valid 9-digit EIN or SSN.\";\n if (bill.billingProvider?.npi && !/^\\d{10}$/.test(digits(bill.billingProvider.npi))) errors[\"billingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.npi && !/^\\d{10}$/.test(digits(bill.renderingProvider.npi))) errors[\"renderingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.taxonomy && !/^[A-Za-z0-9]{10}$/.test(bill.renderingProvider.taxonomy.trim())) errors[\"renderingProvider.taxonomy\"] = \"Enter a valid 10-character taxonomy code.\";\n if (bill.serviceLocation?.placeOfServiceCode && !/^\\d{2}$/.test(bill.serviceLocation.placeOfServiceCode.trim())) errors[\"serviceLocation.placeOfServiceCode\"] = \"Enter a valid 2-digit place of service code.\";\n const lines = submittedLines(bill.serviceLines);\n if (!lines.length) errors.serviceLines = \"Add at least one service line\";\n lines.forEach((line, index) => {\n required(`serviceLines.${index}.code`, line.code, \"Select a procedure code.\");\n if (!Number.isInteger(line.units) || (line.units ?? 0) < 1) errors[`serviceLines.${index}.units`] = \"Enter at least 1 unit\";\n if (bill.billingMode === \"professional\" && (!Number.isFinite(line.charge) || (line.charge ?? 0) < 0)) errors[`serviceLines.${index}.charge`] = \"Enter the billed charge\";\n });\n return { valid: Object.keys(errors).length === 0, fieldErrors: errors };\n}\n\nconst css = `\n.mbsf{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbsf *{box-sizing:border-box}\n.mbsf-attention{padding:14px 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));color:var(--mb-text)}.mbsf [data-attention=true] .mbsf-input,.mbsf [data-attention=true] .mbsf-select,.mbsf [data-attention=true].mbsf-lines{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf [data-attention=true]>.mbsf-label{color:var(--mb-danger)}\n.mbsf-head,.mbsf-section-head,.mbsf-attach-row,.mbsf-actions{display:flex;align-items:center;justify-content:space-between;gap:16px}.mbsf-title{margin:0;font-size:24px}.mbsf-copy,.mbsf-help{color:var(--mb-muted);margin:5px 0 0}.mbsf-required{font-size:13px;color:var(--mb-muted);white-space:nowrap}.mbsf-star,.mbsf-error{color:var(--mb-danger)}\n.mbsf-card{min-width:0;margin:0;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}.mbsf-card[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-legend{padding:0 10px;font-size:18px;font-weight:760}.mbsf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.mbsf-subhead{grid-column:1/-1;margin:6px 0 -2px;padding-top:14px;border-top:1px solid var(--mb-border);font-size:15px;font-weight:780;letter-spacing:.01em}.mbsf-subhead:first-child{margin-top:0;padding-top:0;border-top:0}.mbsf-span{grid-column:1/-1}.mbsf-field{display:grid;align-content:start;gap:7px;min-width:0}.mbsf-label{font-weight:680}.mbsf-input,.mbsf-select{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbsf-input:focus,.mbsf-select:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}.mbsf-field[data-invalid=true] .mbsf-input,.mbsf-field[data-invalid=true] .mbsf-select,.mbsf-invalid-control .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-field[data-invalid=true] .mbsf-input:focus,.mbsf-field[data-invalid=true] .mbsf-select:focus{outline-color:color-mix(in srgb,var(--mb-danger) 24%,transparent)}\n.mbsf-combo{position:relative}.mbsf-menu{position:absolute;z-index:20;top:calc(100% + 5px);left:0;right:0;max-height:min(420px,52vh);overflow:auto;overscroll-behavior:contain;padding:7px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);box-shadow:0 14px 35px rgba(17,38,49,.16)}.mbsf-option{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px;width:100%;padding:11px 12px;border:0;border-radius:8px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mbsf-option+.mbsf-option{border-top:1px solid color-mix(in srgb,var(--mb-border) 65%,transparent)}.mbsf-option:hover,.mbsf-option:focus{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface));outline:0}.mbsf-option-main{display:grid;gap:5px;min-width:0}.mbsf-option small{color:var(--mb-muted);overflow-wrap:anywhere;line-height:1.35}.mbsf-option-route{align-self:start;margin-top:2px;color:var(--mb-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbsf-option-badges{display:flex;flex-wrap:wrap;gap:5px}.mbsf-option-badge{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:11px;line-height:1.35}.mbsf-option-affiliates{display:block}.mbsf-option-affiliates strong{color:var(--mb-text);font-size:12px}.mbsf-menu-status{padding:12px;text-align:center;color:var(--mb-muted);font-size:13px}.mbsf-directory-link{justify-self:start;border:0;padding:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer}\n.mbsf-payer-status{display:flex;align-items:center;gap:7px;color:#087f5b;font-size:13px;font-weight:650}.mbsf-payer-intro{margin:4px 0 0;color:var(--mb-muted)}.mbsf-payer-list{display:grid;gap:8px}.mbsf-payer-option{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}.mbsf-payer-option-main{display:grid;gap:5px;min-width:0}.mbsf-payer-option-main strong{overflow-wrap:anywhere}.mbsf-payer-signals{display:flex;flex-wrap:wrap;gap:6px}.mbsf-payer-signal{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:12px}.mbsf-payer-signal[data-state=match]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));color:#087f5b}.mbsf-payer-signal[data-state=warning]{border-color:color-mix(in srgb,#c56a00 55%,var(--mb-border));color:#9a5200}\n.mbsf-source-evidence{display:grid;gap:4px;color:var(--mb-muted);font-size:13px}.mbsf-source-evidence a{color:var(--mb-accent);font-weight:700}.mbsf-source-evidence q{color:var(--mb-text)}.mbsf-suggestions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;color:var(--mb-muted);font-size:13px}.mbsf-suggestion{padding:5px 10px;border:1px solid color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}.mbsf-suggestion:hover,.mbsf-suggestion:focus{outline:2px solid color-mix(in srgb,var(--mb-accent) 25%,transparent)}.mbsf-claim-patterns{display:grid;gap:4px;margin-top:2px;font-size:13px}.mbsf-claim-patterns[data-state=match]{color:#087f5b}.mbsf-claim-patterns[data-state=warning]{color:#9a5200}.mbsf-claim-pattern-list{color:var(--mb-muted)}\n.mbsf-chips,.mbsf-quick-picks{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}.mbsf-chip,.mbsf-quick-pick{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-input)}.mbsf-chip button{border:0;background:transparent;color:var(--mb-muted);cursor:pointer;font:inherit}.mbsf-quick-pick{color:var(--mb-text);font:inherit;cursor:pointer}.mbsf-quick-pick[data-selected=true]{border-color:var(--mb-accent);color:var(--mb-accent)}\n.mbsf-segments{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:hidden}.mbsf-segment{min-height:44px;border:0;border-right:1px solid var(--mb-border);background:var(--mb-input);color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}.mbsf-segment:last-child{border-right:0}.mbsf-segment[aria-pressed=true]{background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mbsf-lines{margin-top:18px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:visible}.mbsf-lines[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-line-head,.mbsf-line{display:grid;grid-template-columns:minmax(190px,1.05fr) minmax(190px,1.3fr) minmax(112px,.7fr) 100px 120px 42px;gap:12px;align-items:start;padding:12px}.mbsf-line-head{color:var(--mb-muted);font-size:13px;font-weight:700;border-bottom:1px solid var(--mb-border)}.mbsf-line{border-bottom:1px solid var(--mb-border)}.mbsf-line:last-child{border-bottom:0}.mbsf-line [data-invalid=true] .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-money{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.mbsf-dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.mbsf-dx-chip{width:30px;height:30px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-muted);font:inherit;font-size:13px;font-weight:750;cursor:pointer}.mbsf-dx-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}.mbsf-total{display:flex;justify-content:flex-end;gap:45px;padding:16px 56px 16px 16px;font-size:17px;font-weight:760}\n.mbsf-icon-btn{width:40px;height:42px;border:0;background:transparent;color:var(--mb-text);font-size:22px;cursor:pointer}.mbsf-secondary{min-height:40px;padding:8px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}.mbsf-attach-list{display:grid;gap:10px;margin-bottom:18px}.mbsf-attach-row{padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}.mbsf-attach-row[data-auto=true]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 5%,var(--mb-surface))}.mbsf-attach-main{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.mbsf-attach-type{width:min(360px,32vw);flex:0 1 360px}.mbsf-attach-type .mbsf-label{display:block;margin-bottom:6px;font-size:12px}.mbsf-attach-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.mbsf-file{min-width:0}.mbsf-file strong{overflow-wrap:anywhere}.mbsf-badge{display:inline-block;margin-left:8px;padding:2px 7px;border:1px solid var(--mb-border);border-radius:7px;color:var(--mb-muted);font-size:12px;font-weight:600}.mbsf-drop{display:grid;width:100%;place-items:center;min-height:210px;padding:30px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));color:var(--mb-text);font:inherit;text-align:center;cursor:pointer}.mbsf-drop[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface))}.mbsf-alert{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger)}.mbsf-actions{justify-content:flex-end}.mbsf-submit{min-width:180px;min-height:48px;padding:11px 24px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:780;cursor:pointer}\n@media(max-width:820px){.mbsf{gap:16px}.mbsf-grid{grid-template-columns:1fr}.mbsf-span{grid-column:auto}.mbsf-card{padding:18px 16px}.mbsf-line-head{display:none}.mbsf-line{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:14px;padding:18px 16px}.mbsf-line>div:before{display:block;margin-bottom:6px;color:var(--mb-muted);font-size:12px;font-weight:700;content:attr(data-label)}.mbsf-line>div:nth-child(1),.mbsf-line>div:nth-child(2),.mbsf-line>div:nth-child(3){grid-column:1/-1}.mbsf-money{align-self:end;padding:0 0 12px;text-align:right}.mbsf-line .mbsf-icon-btn{position:absolute;right:8px;bottom:3px}.mbsf-total{padding:16px 18px;gap:24px}.mbsf-head{align-items:flex-start}.mbsf-segments{grid-template-columns:repeat(3,minmax(0,1fr))}.mbsf-segment{min-width:0;padding:8px 4px;border-right:1px solid var(--mb-border);border-bottom:0;font-size:13px}.mbsf-segment:last-child{border-right:0}.mbsf-payer-option{align-items:flex-start}.mbsf-attach-row{align-items:flex-start;flex-wrap:wrap}.mbsf-attach-main{align-items:flex-start;flex-basis:calc(100% - 150px)}.mbsf-attach-type{width:100%;flex-basis:100%;order:3}.mbsf-attach-actions{margin-left:auto}.mbsf-drop{min-height:190px;padding:24px 18px}.mbsf-actions{position:sticky;bottom:86px;z-index:10}.mbsf.mbsf-lifecycle-correction .mbsf-actions{position:static;bottom:auto}.mbsf-submit{width:100%}}\n`;\n\nfunction RequiredMark(): ReactElement { return <span className=\"mbsf-star\"> *</span>; }\nfunction Field({ label, required, error, invalid, path, span, children }: { label: string; required?: boolean; error?: string | undefined; invalid?: boolean; path?: string; span?: boolean; children: ReactNode }): ReactElement {\n return <label className={`mbsf-field${span ? \" mbsf-span\" : \"\"}`} data-field-path={path} data-invalid={Boolean(error) || invalid}><span className=\"mbsf-label\">{label}{required ? <RequiredMark /> : null}</span>{children}{error ? <small className=\"mbsf-error\" role=\"alert\">{error}</small> : null}</label>;\n}\nfunction TextDateInput({ value, onChange, disabled, required, ariaLabel }: { value?: string | null | undefined; onChange: (value: string) => void; disabled: boolean; required?: boolean; ariaLabel: string }): ReactElement {\n const [display, setDisplay] = useState(() => formatBillSubmissionDate(value));\n const [invalid, setInvalid] = useState(false);\n useEffect(() => { setDisplay(formatBillSubmissionDate(value)); setInvalid(false); }, [value]);\n return <><input className=\"mbsf-input\" type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" placeholder=\"MM/DD/YYYY\" aria-label={ariaLabel} aria-invalid={invalid} required={required} disabled={disabled} value={display} onChange={(event) => {\n const next = event.target.value; const parsed = parseBillSubmissionDate(next); setDisplay(next); setInvalid(Boolean(next && !parsed));\n if (!next.trim()) onChange(\"\"); else if (parsed) onChange(parsed);\n }} onBlur={() => setInvalid(Boolean(display && !parseBillSubmissionDate(display)))} />{invalid ? <small className=\"mbsf-error\">Use MM/DD/YYYY</small> : null}</>;\n}\n\ntype ComboOption = { id: string; label: string; detail?: string; badges?: string[]; affiliatedEntities?: string[]; trailing?: string };\nfunction ComboBox({ value, placeholder, options, disabled, loading, loadingMore, invalid, preserveValueOnOpen = false, filterOptions = true, onOpen, onQuery, onEndReached, onSelect, createOption, ariaLabel }: { value: string; placeholder: string; options: ComboOption[]; disabled: boolean; loading?: boolean; loadingMore?: boolean; invalid?: boolean; preserveValueOnOpen?: boolean; filterOptions?: boolean; onOpen?: () => void; onQuery?: (query: string) => void; onEndReached?: () => void; onSelect: (option: ComboOption) => void; createOption?: (query: string) => ComboOption | null; ariaLabel: string }): ReactElement {\n const [open, setOpen] = useState(false); const [query, setQuery] = useState(\"\");\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matches = q && filterOptions ? options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"} ${(option.badges ?? []).join(\" \")} ${(option.affiliatedEntities ?? []).join(\" \")} ${option.trailing ?? \"\"}`.toLowerCase().includes(q)) : options;\n const custom = createOption?.(query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase()) ? [...matches, custom] : matches;\n }, [createOption, filterOptions, options, query]);\n const showMenu = open;\n return <div className=\"mbsf-combo\"><input className=\"mbsf-input\" role=\"combobox\" aria-label={ariaLabel} aria-invalid={invalid} aria-expanded={showMenu} autoComplete=\"off\" disabled={disabled} placeholder={placeholder} value={open ? query : value} onFocus={() => { const next = preserveValueOnOpen ? value : \"\"; setOpen(true); setQuery(next); onOpen?.(); if (next) onQuery?.(next); }} onChange={(event) => { setOpen(true); setQuery(event.target.value); onQuery?.(event.target.value); }} onBlur={() => setTimeout(() => setOpen(false), 120)} />{showMenu ? <div className=\"mbsf-menu\" role=\"listbox\" onScroll={(event) => { const menu = event.currentTarget; if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) onEndReached?.(); }}>{loading && !visible.length ? <div className=\"mbsf-menu-status\">Loading…</div> : visible.length ? visible.map((option) => <button className=\"mbsf-option\" type=\"button\" role=\"option\" key={option.id} onMouseDown={(event) => event.preventDefault()} onClick={() => { onSelect(option); setOpen(false); setQuery(\"\"); }}><span className=\"mbsf-option-main\"><strong>{option.label}</strong>{option.detail ? <small>{option.detail}</small> : null}{option.badges?.length ? <span className=\"mbsf-option-badges\">{option.badges.map((badge) => <span className=\"mbsf-option-badge\" key={badge}>{badge}</span>)}</span> : null}{option.affiliatedEntities?.length ? <small className=\"mbsf-option-affiliates\"><strong>Affiliated entities:</strong> {option.affiliatedEntities.join(\", \")}</small> : null}</span>{option.trailing ? <span className=\"mbsf-option-route\">{option.trailing}</span> : null}</button>) : <div className=\"mbsf-option\">No matches</div>}{loadingMore ? <div className=\"mbsf-menu-status\">Loading more…</div> : null}</div> : null}</div>;\n}\n\nfunction focusFirstInvalid(form: HTMLFormElement): void {\n const field = form.querySelector<HTMLElement>('[data-invalid=\"true\"]');\n if (!field) return;\n const control = field.querySelector<HTMLElement>('input,select,textarea,button,[tabindex]:not([tabindex=\"-1\"])');\n control?.focus({ preventScroll: true });\n const fieldRect = field.getBoundingClientRect();\n let scrollParent: HTMLElement | null = field.parentElement;\n while (scrollParent) {\n const style = window.getComputedStyle(scrollParent);\n if (/(auto|scroll)/.test(style.overflowY) && scrollParent.scrollHeight > scrollParent.clientHeight) break;\n scrollParent = scrollParent.parentElement;\n }\n if (scrollParent) {\n const parentRect = scrollParent.getBoundingClientRect();\n scrollParent.scrollTo({ top: Math.max(0, scrollParent.scrollTop + fieldRect.top - parentRect.top - 24), behavior: \"smooth\" });\n } else {\n window.scrollTo({ top: Math.max(0, window.scrollY + fieldRect.top - 24), behavior: \"smooth\" });\n }\n}\n\nfunction customProcedureOption(query: string): ComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n\nfunction mergeOptions<T extends { code: string }>(defaults: T[], supplied: T[] | undefined): T[] {\n const map = new Map(defaults.map((item) => [item.code.toUpperCase(), item]));\n supplied?.forEach((item) => map.set(item.code.toUpperCase(), item)); return [...map.values()];\n}\n\nfunction mergeDiagnosisOptions(options: BillSubmissionDiagnosisOption[]): BillSubmissionDiagnosisOption[] {\n return [...new Map(options.map((item) => [item.code.toUpperCase(), item])).values()]\n .sort((left, right) => left.code.localeCompare(right.code, undefined, { numeric: true }));\n}\n\nexport function normalizeClaimsAdministratorName(value: string): string {\n return value.toUpperCase().replace(/\\[[^\\]]*]/g, \" \").replace(/\\b(?:INCORPORATED|INC|COMPANY|CO|CORPORATION|CORP|GROUP|INSURANCE|SERVICES)\\b/g, \" \").replace(/[^A-Z0-9]+/g, \" \").trim().replace(/\\s+/g, \" \");\n}\n\nexport function exactClaimsAdministratorMatch(results: BillReviewPayer[], suppliedName: string): BillReviewPayer | undefined {\n const normalized = normalizeClaimsAdministratorName(suppliedName);\n return results.find((payer) => normalizeClaimsAdministratorName(payer.name) === normalized)\n ?? results.find((payer) => payer.confidence === \"high\" && payer.recommended);\n}\n\nexport function claimsAdministratorRecommendations(results: BillReviewPayer[], limit = 5): BillReviewPayer[] {\n return [...results]\n .sort((left, right) => Number(Boolean(right.recommended)) - Number(Boolean(left.recommended)))\n .slice(0, Math.max(0, limit));\n}\n\nexport function claimNumberPatternMatches(\n pattern: NonNullable<BillReviewPayer[\"claimNumberPatterns\"]>[number],\n claimNumber: string,\n): boolean | null {\n const example = pattern.example?.trim();\n if (example && /9{2,}/.test(example)) {\n const expression = [...example].map((character) => character === \"9\"\n ? \"\\\\d\"\n : character.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"\");\n return new RegExp(`^${expression}$`, \"i\").test(claimNumber.trim());\n }\n return pattern.matches ?? null;\n}\n\n/**\n * Form-state claims administrator for a directory pick. When the administrator\n * requires payer selection it carries the payer (routing payer) choices and\n * requires an explicit user choice; administrators without routing payers stay a\n * plain `{ id, name }` reference.\n */\nexport function chooseClaimsAdministrator(\n payer: Pick<BillReviewPayer, \"id\" | \"name\" | \"payerSelectionRequired\" | \"payers\">,\n selectedPayerId?: string,\n): NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]> {\n if (!payer.payerSelectionRequired) return { id: payer.id, name: payer.name };\n const payers = (payer.payers ?? []).map((option) => ({ ...option }));\n const resolvedPayerId = selectedPayerId && payers.some((option) => option.id === selectedPayerId)\n ? selectedPayerId\n : undefined;\n return {\n id: payer.id,\n name: payer.name,\n payerSelectionRequired: true,\n ...(payers.length ? { payers } : {}),\n ...(resolvedPayerId ? { payerId: resolvedPayerId } : {}),\n };\n}\n\n/**\n * The claims administrator reference exactly as submitted to MindBill: picker\n * metadata (payerSelectionRequired, payers) stays client-side and the chosen\n * payerId rides on the wire only when set.\n */\nexport function submittedClaimsAdministrator(\n administrator: NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]>,\n): { id: string; name: string; payerId?: string } {\n return {\n id: administrator.id ?? \"\",\n name: administrator.name,\n ...(administrator.payerId ? { payerId: administrator.payerId } : {}),\n };\n}\n\nexport type BillSubmissionSectionId =\n | \"header\"\n | \"patient\"\n | \"claim\"\n | \"providers\"\n | \"serviceLines\"\n | \"attachments\"\n | \"actions\";\n\ntype BillSubmissionSections = Record<BillSubmissionSectionId, ReactNode>;\nconst BillSubmissionSectionsContext = createContext<BillSubmissionSections | null>(null);\n\nfunction BillSubmissionSection({ id }: { id: BillSubmissionSectionId }): ReactElement {\n const sections = useContext(BillSubmissionSectionsContext);\n if (!sections) throw new Error(\"Bill submission sections must be rendered inside BillSubmissionForm.\");\n return <>{sections[id]}</>;\n}\n\nexport function BillSubmissionHeader(): ReactElement { return <BillSubmissionSection id=\"header\" />; }\nexport function BillSubmissionPatientSection(): ReactElement { return <BillSubmissionSection id=\"patient\" />; }\nexport function BillSubmissionClaimSection(): ReactElement { return <BillSubmissionSection id=\"claim\" />; }\nexport function BillSubmissionProvidersSection(): ReactElement { return <BillSubmissionSection id=\"providers\" />; }\nexport function BillSubmissionServiceLinesSection(): ReactElement { return <BillSubmissionSection id=\"serviceLines\" />; }\nexport function BillSubmissionAttachmentsSection(): ReactElement { return <BillSubmissionSection id=\"attachments\" />; }\nexport function BillSubmissionActions(): ReactElement { return <BillSubmissionSection id=\"actions\" />; }\n\nexport function BillSubmissionForm({\n initialBill, attachments = EMPTY_ATTACHMENTS, onSubmit, onSubmitted, getSession, sessionEndpoint, apiBaseUrl,\n fetch: fetchOverride, onListClaimsAdministrators, onSearchClaimsAdministrators, onGetClaimsAdministratorDirectory, claimsAdministratorSources, claimsAdministratorHint,\n diagnosisOptions = [], onSearchDiagnoses,\n onLookupPostalCode, procedureOptions, modifierOptions, taxonomyOptions, deliveryRoutePicker = \"auto\", attachmentReportTypeMode = \"auto\",\n attachmentReportTypes = BILL_SUBMISSION_REPORT_TYPES, defaultAttachmentReportType,\n appearance, className = \"bill-submission-form\",\n style, disabled = false, submitLabel = \"Submit bill\", heading = \"Bill information\",\n description = \"Review the bill details, add attachments, and submit.\",\n attentionFields = [], attentionMessage,\n children,\n}: BillSubmissionFormProps): ReactElement {\n const [bill, setBill] = useState(() => cloneInitialBill(initialBill));\n const [selectedIds, setSelectedIds] = useState(() => attachments.map((item) => item.id));\n const [removedSourceIds, setRemovedSourceIds] = useState<string[]>([]);\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]); const [errors, setErrors] = useState<Record<string, string>>({});\n const [sourceAttachmentReportTypes, setSourceAttachmentReportTypes] = useState<Record<string, string>>(() => Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : [])));\n const [validationActive, setValidationActive] = useState(false);\n const [formError, setFormError] = useState<string | null>(null); const [submitting, setSubmitting] = useState(false);\n // The delivery-method dialog staged with the validated bill.\n const [routeDialog, setRouteDialog] = useState<{ delivery: BillDeliveryOptions; complete: CompleteBillSubmissionInput } | null>(null);\n const [routeError, setRouteError] = useState<string | null>(null);\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]); const [payerLoading, setPayerLoading] = useState(false);\n const [payerSuggestions, setPayerSuggestions] = useState<BillReviewPayerSuggestion[]>([]);\n const [selectedPayerMetadata, setSelectedPayerMetadata] = useState<BillReviewPayer | null>(null);\n const [payerLoadingMore, setPayerLoadingMore] = useState(false); const [payerQuery, setPayerQuery] = useState<string | null>(null); const [payerHasMore, setPayerHasMore] = useState(true);\n const [directoryOpen, setDirectoryOpen] = useState(false);\n const [directory, setDirectory] = useState<BillClaimsAdministratorDirectory | null>(null);\n const [directoryLoading, setDirectoryLoading] = useState(false);\n const [directoryError, setDirectoryError] = useState<string | null>(null);\n const [diagnosisResults, setDiagnosisResults] = useState<BillSubmissionDiagnosisOption[]>([]);\n const [diagnosisLoading, setDiagnosisLoading] = useState(false); const [diagnosisLoadingMore, setDiagnosisLoadingMore] = useState(false);\n const [diagnosisQuery, setDiagnosisQuery] = useState<string | null>(null); const [diagnosisHasMore, setDiagnosisHasMore] = useState(true);\n const [postalStatus, setPostalStatus] = useState<string | null>(null); const [dragActive, setDragActive] = useState(false);\n const formRef = useRef<HTMLFormElement>(null); const fileInput = useRef<HTMLInputElement>(null);\n const diagnosisRequest = useRef(0); const diagnosisAppendPending = useRef(false); const payerRequest = useRef(0); const payerAppendPending = useRef(false);\n const procedures = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_PROCEDURES, procedureOptions), [procedureOptions]);\n const orderedClaimsAdministratorSources = useMemo(() => [...(claimsAdministratorSources ?? [])]\n .filter((source) => source.name.trim())\n .sort((left, right) => Number(right.source.toLowerCase() === \"eams\") - Number(left.source.toLowerCase() === \"eams\")), [claimsAdministratorSources]);\n const sourceClaimsAdministratorName = orderedClaimsAdministratorSources[0]?.name.trim() ?? \"\";\n const modifiers = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_MODIFIERS, modifierOptions), [modifierOptions]);\n const taxonomies = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_TAXONOMIES, taxonomyOptions), [taxonomyOptions]);\n const [evaluationType, setEvaluationType] = useState<BillSubmissionEvaluationType>(() => initialEvaluationType(initialBill));\n const connected = !onSubmit;\n const referenceClient = useMemo(() => (getSession || sessionEndpoint || connected) ? createBillReferenceClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const submissionClient = useMemo(() => connected ? createBillSubmissionClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const locked = disabled || submitting;\n const showAttachmentReportTypes = attachmentReportTypeMode === \"visible\" || (attachmentReportTypeMode === \"auto\" && bill.billingMode !== \"med_legal\");\n const forcedAttachmentReportType = showAttachmentReportTypes ? undefined : (defaultAttachmentReportType ?? MED_LEGAL_REPORT_TYPE_CODE);\n const reportTypeOptions = useMemo(() => attachmentReportTypes.map((item) => ({ id: item.code, label: item.code.replace(/^OZ:/, \"\"), detail: item.label })), [attachmentReportTypes]);\n const missingAttachmentReportType = showAttachmentReportTypes && (\n selectedIds.some((id) => !(sourceAttachmentReportTypes[id] || attachments.find((item) => item.id === id)?.reportTypeCode || defaultAttachmentReportType))\n || uploads.some((upload) => !(upload.reportTypeCode || defaultAttachmentReportType))\n );\n\n useEffect(() => {\n setBill(cloneInitialBill(initialBill)); setEvaluationType(initialEvaluationType(initialBill)); setSelectedIds(attachments.map((item) => item.id));\n setRemovedSourceIds([]); setUploads([]); setSourceAttachmentReportTypes(Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : []))); setErrors({}); setValidationActive(false); setFormError(null); setDiagnosisResults([]);\n setDiagnosisQuery(null); setDiagnosisHasMore(true); diagnosisRequest.current += 1; diagnosisAppendPending.current = false;\n setPayerResults([]); setPayerSuggestions([]); setSelectedPayerMetadata(null); setPayerQuery(null); setPayerHasMore(true); payerRequest.current += 1; payerAppendPending.current = false;\n }, [initialBill, attachments, sourceClaimsAdministratorName]);\n useEffect(() => {\n if (!validationActive) return;\n const next = validateBillSubmission(bill).fieldErrors;\n setErrors(missingAttachmentReportType ? { ...next, attachments: \"Select a report type for every attachment.\" } : next);\n }, [bill, missingAttachmentReportType, validationActive]);\n useEffect(() => {\n const root = formRef.current;\n if (!root) return;\n const nodes = Array.from(root.querySelectorAll<HTMLElement>(\"[data-field-path]\"));\n nodes.forEach((node) => node.removeAttribute(\"data-attention\"));\n for (const requested of attentionFields) {\n const normalized = requested.replace(/\\[\\]/g, \"\");\n for (const node of nodes) {\n const actual = node.dataset.fieldPath ?? \"\";\n if (actual === requested || actual === normalized || actual.startsWith(`${normalized}.`) || normalized.startsWith(`${actual}.`)) {\n node.dataset.attention = \"true\";\n }\n }\n }\n }, [attentionFields]);\n\n const addFiles = useCallback((fileList: FileList | File[]) => {\n const files = Array.from(fileList); if (!files.length) return; 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); 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, ...(defaultAttachmentReportType ? { reportTypeCode: defaultAttachmentReportType } : {}) }))]);\n }, [defaultAttachmentReportType, selectedIds.length, uploads]);\n useEffect(() => {\n const over = (event: DragEvent) => { if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); setDragActive(true); } };\n const leave = (event: DragEvent) => { if (!event.relatedTarget) setDragActive(false); };\n const drop = (event: DragEvent) => { if (event.dataTransfer?.files.length) { event.preventDefault(); setDragActive(false); addFiles(event.dataTransfer.files); } };\n window.addEventListener(\"dragover\", over); window.addEventListener(\"dragleave\", leave); window.addEventListener(\"drop\", drop);\n return () => { window.removeEventListener(\"dragover\", over); window.removeEventListener(\"dragleave\", leave); window.removeEventListener(\"drop\", drop); };\n }, [addFiles]);\n\n const setAddress = (patch: Partial<BillSubmissionAddress>) => setBill((current) => ({ ...current, patient: { ...current.patient, address: { ...current.patient.address, ...patch } } }));\n const setLine = (index: number, patch: Partial<BillSubmissionInput[\"serviceLines\"][number]>) => setBill((current) => ({ ...current, serviceLines: ensureTrailingBillSubmissionLine(current.serviceLines.map((line, lineIndex) => {\n if (lineIndex !== index) return line;\n const next = { ...line, ...patch };\n const charge = calculateBillSubmissionAllowedAmount(next, procedures);\n if (charge != null) return { ...next, charge };\n if (Object.hasOwn(patch, \"code\")) { const withoutCharge = { ...next }; delete withoutCharge.charge; return withoutCharge; }\n return next;\n })) }));\n const text = (value: string | null | undefined, onChange: (value: string) => void, options: Pick<React.InputHTMLAttributes<HTMLInputElement>, \"placeholder\" | \"maxLength\" | \"type\" | \"inputMode\"> = {}) => <input className=\"mbsf-input\" disabled={locked} value={value ?? \"\"} onChange={(event) => onChange(event.target.value)} {...options} />;\n const loadPayers = useCallback((query: string, append = false): void => {\n const trimmed = query.trim();\n const list = onListClaimsAdministrators ?? referenceClient?.listClaimsAdministrators;\n const legacySearch = onSearchClaimsAdministrators ?? referenceClient?.searchClaimsAdministrators;\n if (!list && !legacySearch) return;\n const continuing = append && payerQuery === trimmed;\n if (continuing && (!payerHasMore || payerAppendPending.current)) return;\n const offset = continuing ? payerResults.length : 0;\n const request = ++payerRequest.current;\n if (continuing) { payerAppendPending.current = true; setPayerLoadingMore(true); }\n else { setPayerLoading(true); setPayerLoadingMore(false); setPayerQuery(trimmed); setPayerHasMore(true); }\n const page: Promise<BillReviewPayerPage> = list\n ? list({ query: trimmed, claimNumber: bill.claim.claimNumber, ...(sourceClaimsAdministratorName ? { sourceClaimsAdministratorName } : {}), ...(bill.claim.employer ? { employerName: bill.claim.employer } : {}), limit: PAYER_PAGE_SIZE, offset })\n : legacySearch!(trimmed, bill.claim.claimNumber).then((results): BillReviewPayerPage => ({ results, total: results.length }));\n void page.then((result) => {\n if (request !== payerRequest.current) return;\n setPayerResults((current) => {\n const combined = continuing ? [...current, ...result.results] : result.results;\n return [...new Map(combined.map((payer) => [payer.id, payer])).values()];\n });\n if (!continuing) setPayerSuggestions(result.suggestions ?? []);\n setPayerHasMore(result.nextOffset != null ? result.nextOffset > offset : offset + result.results.length < result.total);\n }).catch((caught: unknown) => {\n if (request === payerRequest.current) setFormError(caught instanceof Error ? caught.message : \"Claims administrator search is unavailable.\");\n }).finally(() => {\n if (request !== payerRequest.current) return;\n payerAppendPending.current = false; setPayerLoading(false); setPayerLoadingMore(false);\n });\n }, [bill.claim.claimNumber, bill.claim.employer, onListClaimsAdministrators, onSearchClaimsAdministrators, payerHasMore, payerQuery, payerResults.length, referenceClient, sourceClaimsAdministratorName]);\n const searchPayers = (query: string) => {\n setSelectedPayerMetadata(null);\n setBill((current) => {\n const selected = current.claim.claimsAdministrator;\n if (selected?.id && selected.name === query) return current;\n return { ...current, claim: { ...current.claim, claimsAdministrator: { name: query } } };\n });\n loadPayers(query);\n };\n const loadDiagnoses = (query: string, append = false) => {\n const trimmed = query.trim();\n const search = onSearchDiagnoses ?? referenceClient?.searchDiagnosisCodes;\n if (!search) { setDiagnosisResults(mergeDiagnosisOptions(diagnosisOptions)); setDiagnosisHasMore(false); setDiagnosisQuery(trimmed); return; }\n const continuing = append && diagnosisQuery === trimmed;\n if (continuing && (!diagnosisHasMore || diagnosisAppendPending.current)) return;\n const offset = continuing ? diagnosisResults.length : 0;\n const request = ++diagnosisRequest.current;\n if (continuing) { diagnosisAppendPending.current = true; setDiagnosisLoadingMore(true); }\n else { setDiagnosisLoading(true); setDiagnosisLoadingMore(false); setDiagnosisQuery(trimmed); setDiagnosisHasMore(true); }\n void search(trimmed, DIAGNOSIS_PAGE_SIZE, offset).then((page) => {\n if (request !== diagnosisRequest.current) return;\n setDiagnosisResults((current) => mergeDiagnosisOptions(continuing ? [...current, ...page] : page));\n setDiagnosisHasMore(page.length >= DIAGNOSIS_PAGE_SIZE);\n }).catch(() => {\n if (request === diagnosisRequest.current && !continuing) setDiagnosisResults([]);\n }).finally(() => {\n if (request !== diagnosisRequest.current) return;\n diagnosisAppendPending.current = false; setDiagnosisLoading(false); setDiagnosisLoadingMore(false);\n });\n };\n const searchDiagnoses = (query: string) => loadDiagnoses(query);\n const diagnosisChoices = useMemo(() => mergeDiagnosisOptions([...diagnosisOptions, ...diagnosisResults]), [diagnosisOptions, diagnosisResults]);\n const updatePostalCode = (postalCode: string) => {\n setAddress({ postalCode }); setPostalStatus(null); const lookup = onLookupPostalCode ?? referenceClient?.lookupPostalCode;\n if (!lookup || !/^\\d{5}$/.test(postalCode)) return;\n setPostalStatus(\"Looking up ZIP…\"); void lookup(postalCode).then((place) => { if (!place) return setPostalStatus(\"ZIP not found\"); setAddress({ city: place.city, state: place.state.toUpperCase() }); setPostalStatus(`${place.city}, ${place.state.toUpperCase()} filled from ZIP`); }).catch(() => setPostalStatus(\"ZIP lookup unavailable\"));\n };\n const changeEvaluation = (type: BillSubmissionEvaluationType) => {\n setEvaluationType(type); setBill((current) => ({ ...current, diagnoses: applyBillSubmissionEvaluationDiagnoses(current.diagnoses, type), renderingProvider: { ...current.renderingProvider, isAme: type === \"ame\", isQme: type !== \"ame\", ...(type === \"psych_qme\" && !current.renderingProvider?.specialty ? { specialty: \"Psychiatry\" } : {}) }, serviceLines: applyBillSubmissionEvaluationModifiers(current.serviceLines, type) }));\n };\n const lineCharge = (line: BillSubmissionInput[\"serviceLines\"][number]) => calculateBillSubmissionAllowedAmount(line, procedures) ?? (Number.isFinite(line.charge) ? Number(line.charge) : undefined);\n const total = submittedLines(bill.serviceLines).reduce((sum, line) => sum + (lineCharge(line) ?? 0), 0);\n\n async function submit(): Promise<void> {\n const clean: BillSubmissionInput = { ...cloneBill(bill), serviceLines: submittedLines(bill.serviceLines).map((line) => { const charge = lineCharge(line); return charge == null ? line : { ...line, charge }; }) };\n const validation = validateBillSubmission(clean);\n const fieldErrors = missingAttachmentReportType ? { ...validation.fieldErrors, attachments: \"Select a report type for every attachment.\" } : validation.fieldErrors;\n setValidationActive(true); setErrors(fieldErrors); setFormError(null);\n if (Object.keys(fieldErrors).length) {\n const count = Object.keys(fieldErrors).length;\n const first = Object.values(fieldErrors)[0];\n setFormError(`Fix ${count} highlighted field${count === 1 ? \"\" : \"s\"} before submitting. ${first}`);\n window.requestAnimationFrame(() => { if (formRef.current) focusFirstInvalid(formRef.current); });\n return;\n }\n if (selectedIds.length + uploads.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n const administrator = clean.claim.claimsAdministrator;\n const complete = {\n ...clean,\n claim: {\n ...clean.claim,\n ...(administrator ? { claimsAdministrator: submittedClaimsAdministrator(administrator) } : {}),\n },\n } as CompleteBillSubmissionInput;\n if (onSubmit) {\n setSubmitting(true);\n try { await onSubmit({ bill: complete, sourceAttachmentIds: selectedIds, sourceAttachmentReportTypes, uploads }); }\n catch (caught) { setFormError(caught instanceof Error ? caught.message : \"Unable to submit the bill.\"); }\n finally { setSubmitting(false); }\n return;\n }\n // Connected mode: show the delivery-method dialog (e-bill / email / fax /\n // mail with recipient overrides) before dispatch. Falls back to direct\n // submission on MindBill's recommended route when the preview is\n // unavailable (older API deployments, missing payers:read permission).\n if (deliveryRoutePicker !== \"off\" && referenceClient) {\n setSubmitting(true);\n try {\n const delivery = await referenceClient.getDeliveryPreview({\n claimsAdministratorId: complete.claim.claimsAdministrator.id,\n ...(complete.claim.injuryState ? { injuryState: complete.claim.injuryState } : {}),\n });\n setSubmitting(false);\n setRouteError(null);\n setRouteDialog({ delivery, complete });\n return;\n } catch {\n setSubmitting(false);\n }\n }\n await performConnectedSubmit(complete, undefined);\n }\n\n async function performConnectedSubmit(\n complete: CompleteBillSubmissionInput,\n submission: SendRouteSubmission | undefined,\n ): Promise<void> {\n setSubmitting(true);\n try {\n if (!submissionClient) throw new Error(\"The connected billing client is unavailable.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId: sourceAttachmentReportTypes,\n ...(forcedAttachmentReportType ? { defaultReportTypeCode: forcedAttachmentReportType } : {}),\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const result = await submissionClient.submitBill({\n bill: complete,\n ...(submission ? { submission } : {}),\n documents,\n });\n setRouteDialog(null);\n setRouteError(null);\n await onSubmitted?.(result);\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : \"Unable to submit the bill.\";\n if (submission) setRouteError(message); else setFormError(message);\n }\n finally { setSubmitting(false); }\n }\n\n const claimsAdministratorError = errors[\"claim.claimsAdministrator\"];\n const choosePayer = (payer: BillReviewPayer, selectedPayerId?: string) => {\n setSelectedPayerMetadata(payer);\n setBill((current) => ({ ...current, claim: { ...current.claim, claimsAdministrator: chooseClaimsAdministrator(payer, selectedPayerId) } }));\n };\n const administrator = bill.claim.claimsAdministrator;\n const displayedPayerMetadata = selectedPayerMetadata?.id === administrator?.id ? selectedPayerMetadata : null;\n const displayedClaimPatterns = (displayedPayerMetadata?.claimNumberPatterns ?? []).map((pattern) => ({\n ...pattern,\n matches: claimNumberPatternMatches(pattern, bill.claim.claimNumber),\n }));\n const evaluatedClaimPatterns = displayedClaimPatterns.filter((pattern) => pattern.matches != null);\n const claimNumberMatches = evaluatedClaimPatterns.some((pattern) => pattern.matches);\n const claimNumberPatternState = evaluatedClaimPatterns.length ? (claimNumberMatches ? \"match\" : \"warning\") : null;\n const subpayorOptions = administrator?.payerSelectionRequired ? administrator.payers ?? [] : [];\n const subpayorError = errors[\"claim.claimsAdministrator.payerId\"];\n const selectedSubpayor = subpayorOptions.find((option) => option.id === administrator?.payerId);\n const chooseSubpayor = (payerId: string) => setBill((current) => current.claim.claimsAdministrator\n ? { ...current, claim: { ...current.claim, claimsAdministrator: { ...current.claim.claimsAdministrator, payerId } } }\n : current);\n const openAdministratorDirectory = async (): Promise<void> => {\n if (!administrator?.id) return;\n setDirectoryOpen(true); setDirectory(null); setDirectoryError(null); setDirectoryLoading(true);\n try {\n const load = onGetClaimsAdministratorDirectory ?? referenceClient?.getClaimsAdministratorDirectory;\n if (!load) throw new Error(\"Claims administrator details are unavailable.\");\n setDirectory(await load(administrator.id, bill.claim.injuryState));\n } catch (caught) {\n setDirectoryError(caught instanceof Error ? caught.message : \"Unable to load claims administrator details.\");\n } finally {\n setDirectoryLoading(false);\n }\n };\n\n const headerSection = <div className=\"mbsf-head\"><div><h3 className=\"mbsf-title\">{heading}</h3><p className=\"mbsf-copy\">{description}</p></div><span className=\"mbsf-required\"><RequiredMark /> Required</span></div>;\n\n const patientSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Patient</legend><div className=\"mbsf-grid\">\n <Field path=\"patient.firstName\" label=\"First name\" required error={errors[\"patient.firstName\"]}>{text(bill.patient.firstName, (firstName) => setBill((c) => ({ ...c, patient: { ...c.patient, firstName } })))}</Field>\n <Field path=\"patient.lastName\" label=\"Last name\" required error={errors[\"patient.lastName\"]}>{text(bill.patient.lastName, (lastName) => setBill((c) => ({ ...c, patient: { ...c.patient, lastName } })))}</Field>\n <Field label=\"Middle name\">{text(bill.patient.middleName, (middleName) => setBill((c) => ({ ...c, patient: { ...c.patient, middleName } })))}</Field>\n <Field label=\"Phone (optional)\">{text(bill.patient.phone, (phone) => setBill((c) => ({ ...c, patient: { ...c.patient, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"patient.dateOfBirth\" label=\"Date of birth\" required error={errors[\"patient.dateOfBirth\"]}><TextDateInput ariaLabel=\"Date of birth\" value={bill.patient.dateOfBirth} disabled={locked} required onChange={(dateOfBirth) => setBill((c) => ({ ...c, patient: { ...c.patient, dateOfBirth } }))} /></Field>\n <Field path=\"patient.address.line1\" label=\"Address\" required span error={errors[\"patient.address.line1\"]}>{text(bill.patient.address.line1, (line1) => setAddress({ line1 }), { placeholder: \"Street address\" })}</Field>\n <Field path=\"patient.address.postalCode\" label=\"ZIP\" required error={errors[\"patient.address.postalCode\"]}>{text(bill.patient.address.postalCode, updatePostalCode, { maxLength: 10 })}{postalStatus ? <small className=\"mbsf-help\">{postalStatus}</small> : null}</Field>\n <Field path=\"patient.address.city\" label=\"City\" required error={errors[\"patient.address.city\"]}>{text(bill.patient.address.city, (city) => setAddress({ city }))}</Field>\n <Field path=\"patient.address.state\" label=\"State\" required error={errors[\"patient.address.state\"]}>{text(bill.patient.address.state, (state) => setAddress({ state: state.toUpperCase() }), { maxLength: 2 })}</Field>\n </div></fieldset>;\n\n const claimSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Injury & claim</legend><div className=\"mbsf-grid\">\n <Field path=\"service.date\" label=\"Date of service\" required error={errors[\"service.date\"]}><TextDateInput ariaLabel=\"Date of service\" value={bill.service.date} disabled={locked} required onChange={(date) => setBill((c) => ({ ...c, service: { ...c.service, date } }))} /></Field>\n <Field label=\"Treatment authorization # (optional)\">{text(bill.service.authorizationNumber, (authorizationNumber) => setBill((c) => ({ ...c, service: { ...c.service, authorizationNumber } })), { placeholder: \"Utilization-review authorization number\" })}<small className=\"mbsf-help\">Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></Field>\n <Field path=\"claim.dateOfInjury\" label=\"Date of injury\" required error={errors[\"claim.dateOfInjury\"]}><TextDateInput ariaLabel=\"Date of injury\" value={bill.claim.dateOfInjury} disabled={locked} required onChange={(dateOfInjury) => setBill((c) => ({ ...c, claim: { ...c.claim, dateOfInjury } }))} /></Field>\n <Field path=\"claim.employer\" label=\"Employer name\" required error={errors[\"claim.employer\"]}>{text(bill.claim.employer, (employer) => setBill((c) => ({ ...c, claim: { ...c.claim, employer } })))}</Field>\n <Field path=\"claim.claimNumber\" label=\"Claim number\" required error={errors[\"claim.claimNumber\"]}>{text(bill.claim.claimNumber, (claimNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, claimNumber } })))}\n {displayedClaimPatterns.length ? <div className=\"mbsf-claim-patterns\" data-state={claimNumberPatternState ?? undefined} role=\"status\">\n {claimNumberPatternState === \"match\" ? <strong>✓ Matches a known claim number pattern</strong> : claimNumberPatternState === \"warning\" ? <strong>⚠ Does not match the known claim number patterns</strong> : <strong>Known claim number patterns</strong>}\n <span className=\"mbsf-claim-pattern-list\">{displayedClaimPatterns.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \")}</span>\n </div> : null}\n </Field>\n <Field label=\"WCAB / ADJ number (optional)\">{text(bill.claim.adjNumber, (adjNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, adjNumber } })))}</Field>\n <Field path=\"claim.claimsAdministrator\" label=\"Claims administrator\" required span error={claimsAdministratorError} invalid={!administrator?.id}>\n <ComboBox ariaLabel=\"Claims administrator\" invalid={Boolean(claimsAdministratorError) || !administrator?.id} disabled={locked} loading={payerLoading} loadingMore={payerLoadingMore} filterOptions={false} value={administrator?.name ?? \"\"} placeholder=\"Browse or search claims administrators…\" options={payerResults.map((payer) => { const patternDetail = payer.claimNumberPatterns?.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \") ?? payer.claimNumberHint ?? \"\"; return { id: payer.id, label: payer.name, detail: [payer.aliases?.length ? `Also known as ${payer.aliases.join(\", \")}` : \"\", patternDetail].filter(Boolean).join(\" · \") || \"Claims administrator\", ...(payer.affiliatedEntities?.length ? { affiliatedEntities: payer.affiliatedEntities } : {}), ...(payer.route ? { trailing: payer.route } : {}) }; })} onOpen={() => { if (payerQuery !== \"\") loadPayers(\"\"); }} onQuery={searchPayers} onEndReached={() => loadPayers(payerQuery ?? \"\", true)} onSelect={(option) => choosePayer(payerResults.find((payer) => payer.id === option.id) ?? { id: option.id, name: option.label })} />\n {orderedClaimsAdministratorSources.length ? <div className=\"mbsf-source-evidence\">{orderedClaimsAdministratorSources.map((source, index) => <span key={`${source.source}-${source.name}-${index}`}>{source.url ? <a href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">{source.label}</a> : <strong>{source.label}</strong>}: <q>{source.name}</q></span>)}</div> : null}\n {claimsAdministratorHint ? <small className=\"mbsf-help\">Claims administrator in your system: {claimsAdministratorHint}</small> : null}\n {payerSuggestions.length ? <div className=\"mbsf-suggestions\"><strong>Suggested:</strong>{payerSuggestions.slice(0, 5).map((suggestion) => { const suggestedSubpayor = suggestion.payers?.find((option) => option.id === suggestion.selectedPayerId); return <button className=\"mbsf-suggestion\" type=\"button\" key={`${suggestion.id}-${suggestion.selectedPayerId ?? \"admin\"}`} title={suggestion.reason} onClick={() => choosePayer(suggestion, suggestion.selectedPayerId)}>{suggestion.name}{suggestedSubpayor ? ` · ${suggestedSubpayor.label}` : \"\"}</button>; })}</div> : null}\n {administrator?.id ? <button className=\"mbsf-directory-link\" type=\"button\" onClick={() => { void openAdministratorDirectory(); }}>View contacts and routing details for {administrator.name}</button> : <small className=\"mbsf-help\">Search the directory and choose a claims administrator.</small>}\n </Field>\n {administrator?.payerSelectionRequired ? <Field path=\"claim.claimsAdministrator.payerId\" label=\"Payer\" required span error={subpayorError}>\n {subpayorOptions.length ? <ComboBox ariaLabel=\"Payer\" invalid={Boolean(subpayorError)} disabled={locked} value={selectedSubpayor?.label ?? \"\"} placeholder=\"Select the payer named on the claim or report…\" options={subpayorOptions.map((option) => { const identifiers = Object.entries(option.clearinghousePayerIds ?? {}).map(([name, id]) => `${name.replace(/_/g, \" \")} ${id}`); const sourceRoute = option.sourceClearinghouse && option.sourcePayerId ? `Catalog: ${option.sourceClearinghouse} ${option.sourcePayerId}` : \"\"; const detail = [option.aliases?.length ? `Also known as ${option.aliases.join(\", \")}` : \"\", option.hint ?? \"\", sourceRoute].filter(Boolean).join(\" · \"); const badges = [option.optionType ? `Type: ${option.optionType}` : \"\", option.deliveryType ? `Delivery: ${option.deliveryType}` : \"\", option.clearinghouse && option.payerId ? `Delivered via ${option.clearinghouse} ${option.payerId}` : \"\", ...identifiers, option.preferredClearinghouse ? `Preferred: ${option.preferredClearinghouse}` : \"\", option.default ? \"Directory default\" : \"\"].filter(Boolean); return { id: option.id, label: option.label, ...(detail ? { detail } : {}), ...(badges.length ? { badges } : {}), ...(option.affiliatedEntities?.length ? { affiliatedEntities: option.affiliatedEntities } : {}), ...(option.route ? { trailing: option.route } : {}) }; })} onSelect={(option) => chooseSubpayor(option.id)} /> : <div className=\"mbsf-error\" role=\"alert\">No routing payers are available for {administrator.name}. Electronic submission remains blocked; contact support to correct the payer directory.</div>}\n {selectedSubpayor ? <div className=\"mbsf-payer-status\" role=\"status\"><strong>✓ Payer set:</strong> {selectedSubpayor.label}{selectedSubpayor.route ? ` · ${selectedSubpayor.route}` : \"\"}</div> : <small className=\"mbsf-help\">{administrator.name} administers multiple payers. Choose the payer named on the claim or report so MindBill can route the bill correctly.</small>}\n </Field> : null}\n <Field label=\"Injury description (optional)\" span>{text(bill.claim.description, (description) => setBill((c) => ({ ...c, claim: { ...c.claim, description } })))}</Field>\n <Field path=\"diagnoses\" label=\"Diagnosis codes (ICD-10)\" required span error={errors.diagnoses}>\n <div className=\"mbsf-quick-picks\" aria-label=\"Common diagnosis codes\">{BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS.map((option) => { const selected = (bill.diagnoses ?? []).includes(option.code); return <button className=\"mbsf-quick-pick\" data-selected={selected} type=\"button\" key={option.code} aria-pressed={selected} title={`${option.code} — ${option.description}`} onClick={() => setBill((current) => ({ ...current, diagnoses: selected ? (current.diagnoses ?? []).filter((code) => code !== option.code) : [...new Set([...(current.diagnoses ?? []), option.code])] }))}>{selected ? \"✓\" : \"+\"} {option.label}</button>; })}</div>\n <div className=\"mbsf-chips\">{(bill.diagnoses ?? []).map((code) => { const option = [...BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS, ...diagnosisChoices].find((item) => item.code === code); return <span className=\"mbsf-chip\" key={code}><strong>{code}</strong>{option?.description ? ` ${option.description}` : \"\"}<button type=\"button\" aria-label={`Remove ${code}`} onClick={() => setBill((c) => ({ ...c, diagnoses: (c.diagnoses ?? []).filter((item) => item !== code) }))}>×</button></span>; })}</div>\n <ComboBox ariaLabel=\"Add diagnosis code\" invalid={Boolean(errors.diagnoses)} disabled={locked} loading={diagnosisLoading} loadingMore={diagnosisLoadingMore} value=\"\" placeholder={(bill.diagnoses?.length ?? 0) ? `${bill.diagnoses!.length} selected — add more…` : \"Search ICD-10 codes…\"} options={diagnosisChoices.filter((item) => !(bill.diagnoses ?? []).includes(item.code)).map((item) => ({ id: item.code, label: item.code, detail: item.description }))} onOpen={() => { if (diagnosisQuery !== \"\") loadDiagnoses(\"\"); }} onQuery={searchDiagnoses} onEndReached={() => loadDiagnoses(diagnosisQuery ?? \"\", true)} onSelect={(option) => setBill((c) => ({ ...c, diagnoses: [...new Set([...(c.diagnoses ?? []), option.id])] }))} />\n </Field>\n </div></fieldset>;\n\n const providersSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Providers & place of service</legend><div className=\"mbsf-grid\">\n <h4 className=\"mbsf-subhead\">Billing provider</h4>\n <Field path=\"billingProvider.name\" label=\"Billing provider name\" required error={errors[\"billingProvider.name\"]}>{text(bill.billingProvider?.name, (name) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, name } })))}</Field>\n <Field path=\"billingProvider.taxId\" label=\"Tax ID (EIN / SSN)\" required error={errors[\"billingProvider.taxId\"]}>{text(bill.billingProvider?.taxId, (taxId) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxId } })), { inputMode: \"numeric\" })}</Field>\n <Field path=\"billingProvider.npi\" label=\"Billing provider NPI\" required error={errors[\"billingProvider.npi\"]}>{text(bill.billingProvider?.npi, (npi) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"billingProvider.phone\" label=\"Billing provider phone\" required error={errors[\"billingProvider.phone\"]}>{text(bill.billingProvider?.phone, (phone) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"billingProvider.address.line1\" label=\"Billing address line 1\" required span error={errors[\"billingProvider.address.line1\"]}>{text(bill.billingProvider?.address?.line1, (line1) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1, line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Billing address line 2 (optional)\" span>{text(bill.billingProvider?.address?.line2, (line2) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2, city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.city\" label=\"Billing city\" required error={errors[\"billingProvider.address.city\"]}>{text(bill.billingProvider?.address?.city, (city) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city, state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.state\" label=\"Billing state\" required error={errors[\"billingProvider.address.state\"]}>{text(bill.billingProvider?.address?.state, (state) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"billingProvider.address.postalCode\" label=\"Billing ZIP\" required error={errors[\"billingProvider.address.postalCode\"]}>{text(bill.billingProvider?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode } } })))}</Field>\n <h4 className=\"mbsf-subhead\">Rendering provider</h4>\n <Field path=\"renderingProvider.name\" label=\"Rendering provider name\" required error={errors[\"renderingProvider.name\"]}>{text(bill.renderingProvider?.name, (name) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, name } })))}</Field>\n <Field path=\"renderingProvider.npi\" label=\"Rendering provider NPI\" required error={errors[\"renderingProvider.npi\"]}>{text(bill.renderingProvider?.npi, (npi) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"renderingProvider.taxonomy\" label=\"Rendering taxonomy\" required error={errors[\"renderingProvider.taxonomy\"]}><ComboBox ariaLabel=\"Rendering taxonomy\" invalid={Boolean(errors[\"renderingProvider.taxonomy\"])} disabled={locked} preserveValueOnOpen value={bill.renderingProvider?.taxonomy ?? \"\"} placeholder=\"Search specialty name or taxonomy code…\" options={taxonomies.map((item) => ({ id: item.code, label: item.description, detail: item.code }))} createOption={(query) => { const code = query.trim().toUpperCase(); return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null; }} onSelect={(option) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, taxonomy: option.id } }))} /><small className=\"mbsf-help\">Search by specialty name or 10-character taxonomy code.</small></Field>\n <h4 className=\"mbsf-subhead\">Service facility</h4>\n <Field path=\"serviceLocation.placeOfServiceCode\" label=\"Place of service code\" required error={errors[\"serviceLocation.placeOfServiceCode\"]}>{text(bill.serviceLocation?.placeOfServiceCode, (placeOfServiceCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, placeOfServiceCode } })), { inputMode: \"numeric\", maxLength: 2, placeholder: \"11\" })}</Field>\n <Field path=\"serviceLocation.address.line1\" label=\"Service address line 1\" required span error={errors[\"serviceLocation.address.line1\"]}>{text(bill.serviceLocation?.address?.line1, (line1) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1, line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Service address line 2 (optional)\" span>{text(bill.serviceLocation?.address?.line2, (line2) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2, city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.city\" label=\"Service city\" required error={errors[\"serviceLocation.address.city\"]}>{text(bill.serviceLocation?.address?.city, (city) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city, state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.state\" label=\"Service state\" required error={errors[\"serviceLocation.address.state\"]}>{text(bill.serviceLocation?.address?.state, (state) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"serviceLocation.address.postalCode\" label=\"Service ZIP\" required error={errors[\"serviceLocation.address.postalCode\"]}>{text(bill.serviceLocation?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode } } })))}</Field>\n </div></fieldset>;\n\n const serviceLinesSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Evaluation & service lines</legend>\n <p className=\"mbsf-help\">Sets the evaluator/specialty modifier on medical-legal evaluation lines.</p>\n <div className=\"mbsf-segments\" role=\"group\" aria-label=\"Evaluation type\">{([ [\"qme\", \"QME (default)\"], [\"ame\", \"AME\"], [\"psych_qme\", \"Psych QME\"] ] as const).map(([type, label]) => <button className=\"mbsf-segment\" type=\"button\" key={type} aria-pressed={evaluationType === type} onClick={() => changeEvaluation(type)}>{label}</button>)}</div>\n <p className=\"mbsf-help\">{evaluationType === \"ame\" ? \"Agreed Medical Evaluator — eligible ML evaluation codes default to modifier -94.\" : evaluationType === \"psych_qme\" ? \"Psychiatric QME — eligible ML evaluation codes default to modifier -96 (-95 for ML200).\" : \"Qualified Medical Evaluator — eligible ML evaluation codes default to modifier -95.\"}</p>\n <div className=\"mbsf-lines\" data-field-path=\"serviceLines\" data-invalid={Boolean(errors.serviceLines)}><div className=\"mbsf-line-head\"><span>Procedure code<RequiredMark /></span><span>Modifiers</span><span>Dx</span><span>Units<RequiredMark /></span><span>Allowed</span><span /> </div>\n {bill.serviceLines.map((line, index) => <div className=\"mbsf-line\" key={index}>\n <div data-label=\"Procedure code\" data-field-path={`serviceLines.${index}.code`} data-invalid={Boolean(errors[`serviceLines.${index}.code`])}><ComboBox ariaLabel={`Procedure code ${index + 1}`} invalid={Boolean(errors[`serviceLines.${index}.code`])} disabled={locked} value={line.code} placeholder=\"Search or enter code…\" options={procedures.map((item) => ({ id: item.code, label: item.code, detail: item.description }))} createOption={customProcedureOption} onSelect={(option) => { const auto = evaluationModifier(evaluationType, option.id); setLine(index, { code: option.id, ...(auto ? { modifiers: [auto, ...(line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")))] } : line.modifiers ? { modifiers: line.modifiers } : {}) }); }} />{line.code ? <small className=\"mbsf-help\">{procedures.find((item) => item.code === line.code)?.description ?? \"Custom CPT, HCPCS, or medical-legal code\"}</small> : null}{errors[`serviceLines.${index}.code`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.code`]}</small> : null}</div>\n <div data-label=\"Modifiers\"><div className=\"mbsf-chips\">{(line.modifiers ?? []).map((modifier) => <span className=\"mbsf-chip\" key={modifier}>−{modifier.replace(/^-/, \"\")}<button type=\"button\" aria-label={`Remove modifier ${modifier}`} onClick={() => setLine(index, { modifiers: (line.modifiers ?? []).filter((item) => item !== modifier) })}>×</button></span>)}</div><ComboBox ariaLabel={`Modifiers ${index + 1}`} disabled={locked} value=\"\" placeholder={(line.modifiers?.length ?? 0) ? `${line.modifiers!.length} modifier${line.modifiers!.length === 1 ? \"\" : \"s\"}` : \"Add modifiers…\"} options={modifiers.filter((item) => !(line.modifiers ?? []).includes(item.code)).map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }))} onSelect={(option) => setLine(index, { modifiers: [...new Set([...(line.modifiers ?? []), option.id])] })} /></div>\n <div data-label=\"Dx\"><div className=\"mbsf-dx\">{(bill.diagnoses ?? []).length ? (bill.diagnoses ?? []).map((code, dxIndex) => { const pointer = dxIndex + 1; const active = (line.diagnosisPointers ?? []).includes(pointer); return <button type=\"button\" key={code} className=\"mbsf-dx-chip\" data-active={active} title={`${String.fromCharCode(64 + pointer)} — ${code}`} aria-pressed={active} aria-label={`Point line ${index + 1} at diagnosis ${code}`} onClick={() => setLine(index, { diagnosisPointers: active ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer) : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right) })}>{String.fromCharCode(64 + pointer)}</button>; }) : <small className=\"mbsf-help\">Add diagnoses above</small>}</div></div>\n <div data-label=\"Units\" data-field-path={`serviceLines.${index}.units`} data-invalid={Boolean(errors[`serviceLines.${index}.units`])}><input className=\"mbsf-input\" aria-label={`Units ${index + 1}`} aria-invalid={Boolean(errors[`serviceLines.${index}.units`])} type=\"number\" min={1} value={line.units ?? 1} onChange={(event) => setLine(index, { units: Number(event.target.value) })} />{errors[`serviceLines.${index}.units`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.units`]}</small> : null}</div>\n <div className=\"mbsf-money\" data-label=\"Allowed\">{lineCharge(line) == null ? \"—\" : lineCharge(line)!.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</div>\n <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove service line ${index + 1}`} disabled={locked || (!lineHasContent(line) && index === bill.serviceLines.length - 1)} onClick={() => setBill((c) => ({ ...c, serviceLines: ensureTrailingBillSubmissionLine(c.serviceLines.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>)}\n <div className=\"mbsf-total\"><span>Total</span><span>{total.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</span></div>\n </div>{errors.serviceLines ? <p className=\"mbsf-error\" role=\"alert\">{errors.serviceLines}</p> : null}\n </fieldset>;\n\n const attachmentsSection = <fieldset className=\"mbsf-card\" data-field-path=\"attachments\" data-invalid={Boolean(errors.attachments)} disabled={locked}><legend className=\"mbsf-legend\">Attachments</legend><div className=\"mbsf-attach-list\">\n {attachments.filter((attachment) => !removedSourceIds.includes(attachment.id)).map((attachment) => { const auto = attachment.autoAttached || attachment.documentType === \"w9\"; const removable = attachment.removable ?? !auto; const reportTypeCode = sourceAttachmentReportTypes[attachment.id] || attachment.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" data-auto={auto} key={attachment.id}><div className=\"mbsf-attach-main\">{auto ? <span aria-label=\"Auto-attached\" role=\"img\">✓</span> : null}<span className=\"mbsf-file\"><strong>{attachment.fileName}</strong><span className=\"mbsf-badge\">{auto ? \"Auto-attached\" : documentLabels[attachment.documentType]}</span><span className=\"mbsf-help\" style={{ display: \"block\" }}>{attachment.description || (auto ? \"Included automatically with every bill.\" : documentLabels[attachment.documentType])}</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${attachment.fileName}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setSourceAttachmentReportTypes((current) => ({ ...current, [attachment.id]: option.id }))} /></div> : null}<div className=\"mbsf-attach-actions\">{attachment.previewUrl ? <a className=\"mbsf-secondary\" href={attachment.previewUrl} target=\"_blank\" rel=\"noopener noreferrer\">Preview</a> : null}{removable ? <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${attachment.fileName}`} disabled={locked} onClick={() => { setSelectedIds((current) => current.filter((id) => id !== attachment.id)); setRemovedSourceIds((current) => [...new Set([...current, attachment.id])]); }}>×</button> : null}</div></div>; })}\n {uploads.map((upload, index) => { const reportTypeCode = upload.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" key={`${upload.file.name}-${index}`}><div className=\"mbsf-attach-main\"><span className=\"mbsf-file\"><strong>{upload.file.name}</strong><span className=\"mbsf-help\" style={{ display: \"block\" }}>{(upload.file.size / 1024 / 1024).toFixed(1)} MB</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${upload.file.name}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setUploads((current) => current.map((item, itemIndex) => itemIndex === index ? { ...item, reportTypeCode: option.id } : item))} /></div> : null}<div className=\"mbsf-attach-actions\"><button className=\"mbsf-secondary\" type=\"button\" onClick={() => previewUploadedPdf(upload.file)}>Preview</button><button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${upload.file.name}`} onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button></div></div>; })}\n </div>{errors.attachments ? <p className=\"mbsf-error\" role=\"alert\">{errors.attachments}</p> : null}<input ref={fileInput} hidden type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={(event) => { if (event.target.files) addFiles(event.target.files); event.target.value = \"\"; }} /><button className=\"mbsf-drop\" data-active={dragActive} type=\"button\" onClick={() => fileInput.current?.click()}><span><strong style={{ fontSize: 18 }}>Drop additional PDF files here, or click to choose</strong><span className=\"mbsf-help\" style={{ display: \"block\", marginTop: 8 }}>Add supporting documents anywhere on this screen.</span></span></button></fieldset>;\n\n const actionsSection = <>{formError ? <div className=\"mbsf-alert\" role=\"alert\">{formError}</div> : null}<div className=\"mbsf-actions\"><button className=\"mbsf-submit\" type=\"submit\" disabled={locked}>{submitting ? \"Submitting…\" : submitLabel}</button></div></>;\n const sections: BillSubmissionSections = {\n header: headerSection,\n patient: patientSection,\n claim: claimSection,\n providers: providersSection,\n serviceLines: serviceLinesSection,\n attachments: attachmentsSection,\n actions: actionsSection,\n };\n const defaultLayout = <>\n <BillSubmissionHeader />\n <BillSubmissionPatientSection />\n <BillSubmissionClaimSection />\n <BillSubmissionProvidersSection />\n <BillSubmissionServiceLinesSection />\n <BillSubmissionAttachmentsSection />\n <BillSubmissionActions />\n </>;\n\n return <BillSubmissionSectionsContext.Provider value={sections}>\n <form ref={formRef} className={`${className} mbsf`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} onSubmit={(event) => { event.preventDefault(); void submit(); }} noValidate>\n <style>{css}</style>\n {attentionMessage ? <div className=\"mbsf-attention\" role=\"status\">{attentionMessage}</div> : null}\n {children ?? defaultLayout}\n {routeDialog ? (\n <SendRouteDialog\n title=\"Send bill\"\n delivery={routeDialog.delivery}\n submitting={submitting}\n error={routeError}\n onCancel={() => { if (!submitting) { setRouteDialog(null); setRouteError(null); } }}\n onConfirm={(submission) => { void performConnectedSubmit(routeDialog.complete, submission); }}\n />\n ) : null}\n </form>\n <ClaimsAdministratorDirectoryDialog\n open={directoryOpen}\n directory={directory}\n loading={directoryLoading}\n error={directoryError}\n onClose={() => {\n setDirectoryOpen(false);\n setDirectory(null);\n setDirectoryError(null);\n }}\n />\n </BillSubmissionSectionsContext.Provider>;\n}\n","\"use client\";\n\n// Delivery-method picker shown when a bill is submitted: one\n// card per route (e-bill / email / fax / mail), the selected card expands\n// inline with its destination sub-form, and the primary button names the\n// channel. Rendered by BillSubmissionForm by default in connected mode; also\n// exported for hosts that submit through their own server.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BillDeliveryOptions, BillSubmissionRoute, SubmitBillInput } from \"@mindbill/browser\";\n\nconst EMAIL_RE = /[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}/;\n\n/** First plausible email address inside a raw contact string, or null. */\nexport function extractSendRouteEmail(raw: string | null | undefined): string | null {\n if (!raw) return null;\n const match = raw.match(EMAIL_RE);\n return match ? match[0] : null;\n}\n\n/** \"(213) 555-0199\" for 10/11-digit US numbers; anything else trimmed as-is. */\nexport function formatSendRouteFax(raw: string | null | undefined): string {\n if (!raw) return \"\";\n const digits = raw.replace(/\\D/g, \"\");\n const ten = digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n if (ten.length === 10) return `(${ten.slice(0, 3)}) ${ten.slice(3, 6)}-${ten.slice(6)}`;\n return raw.trim();\n}\n\n/**\n * Live format-as-you-type for the fax input: digits render progressively as\n * \"(213) 555-0199\" whether typed bare or pasted pre-formatted. A leading \"+\"\n * (international) or an overflowing value is left as typed.\n */\nexport function formatSendRouteFaxInput(raw: string): string {\n const trimmed = raw.trimStart();\n if (trimmed.startsWith(\"+\")) return raw;\n const all = trimmed.replace(/\\D/g, \"\");\n const digits = all.length === 11 && all.startsWith(\"1\") ? all.slice(1) : all;\n if (digits.length > 10 || (all.length === 11 && !all.startsWith(\"1\")) || all.length > 11) return raw;\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n\nexport type SendRouteSubmission = Pick<\n SubmitBillInput,\n \"route\" | \"destination\" | \"attention\" | \"subject\" | \"note\" | \"cc\"\n>;\n\nexport type SendRouteDialogProps = {\n /** Dialog heading, e.g. \"Send bill\". */\n title?: ReactNode;\n delivery: BillDeliveryOptions;\n submitting?: boolean;\n /** Disables the confirm button while the caller uploads documents. */\n disabled?: boolean;\n error?: string | null;\n onCancel: () => void;\n onConfirm: (submission: SendRouteSubmission) => void;\n};\n\nconst css = `\n.mbrd-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbrd{display:grid;gap:16px;width:min(560px,100%);max-height:min(86vh,860px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:15px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbrd *{box-sizing:border-box}\n.mbrd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbrd-title{margin:0;font-size:20px;font-weight:760}\n.mbrd-copy{margin:4px 0 0;color:var(--mb-muted);font-size:14px}\n.mbrd-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbrd-cards{display:grid;gap:10px}\n.mbrd-card{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);transition:border-color .12s ease,background .12s ease}\n.mbrd-card[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbrd-card[data-disabled=true]{opacity:.55}\n.mbrd-card-main{display:flex;align-items:center;gap:12px;width:100%;padding:13px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}\n.mbrd-card[data-disabled=true] .mbrd-card-main{cursor:not-allowed}\n.mbrd-radio{flex:0 0 auto;width:18px;height:18px;border:2px solid var(--mb-border);border-radius:50%;display:grid;place-items:center}\n.mbrd-card[data-selected=true] .mbrd-radio{border-color:var(--mb-accent)}\n.mbrd-card[data-selected=true] .mbrd-radio:after{content:\"\";width:9px;height:9px;border-radius:50%;background:var(--mb-accent)}\n.mbrd-card-text{min-width:0;flex:1}\n.mbrd-card-title{font-weight:700;line-height:1.3;overflow-wrap:anywhere}\n.mbrd-card-detail{margin-top:2px;color:var(--mb-muted);font-size:13px;line-height:1.35;overflow-wrap:anywhere}\n.mbrd-badges{display:flex;flex:0 0 auto;gap:6px}\n.mbrd-badge{padding:2px 8px;border:1px solid var(--mb-border);border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}\n.mbrd-badge[data-tone=verified]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 8%,var(--mb-surface));color:#0c7a48}\n.mbrd-badge[data-tone=auto]{border-color:color-mix(in srgb,var(--mb-accent) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}\n.mbrd-sub{display:grid;gap:12px;padding:12px 14px;border-top:1px solid var(--mb-border);background:color-mix(in srgb,var(--mb-accent) 2%,var(--mb-surface));border-radius:0 0 var(--mb-control-radius) var(--mb-control-radius)}\n.mbrd-choice{border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-surface)}\n.mbrd-choice[data-selected=true]{border-color:var(--mb-accent)}\n.mbrd-choice[data-disabled=true]{opacity:.55}\n.mbrd-choice-main{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:transparent;color:inherit;font:inherit;font-size:13px;text-align:left;cursor:pointer}\n.mbrd-choice[data-disabled=true] .mbrd-choice-main{cursor:not-allowed}\n.mbrd-choice-title{font-weight:650;overflow-wrap:anywhere}\n.mbrd-choice-detail{margin-top:1px;color:var(--mb-muted);font-size:12px}\n.mbrd-choice-body{display:grid;gap:8px;padding:10px 11px;border-top:1px solid var(--mb-border)}\n.mbrd-field{display:grid;gap:5px;font-size:13px}\n.mbrd-label{font-weight:650}\n.mbrd-star{color:var(--mb-danger)}\n.mbrd-input,.mbrd-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbrd-textarea{resize:vertical;min-height:74px}\n.mbrd-input:focus,.mbrd-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbrd-error{color:var(--mb-danger);font-size:12px}\n.mbrd-help{color:var(--mb-muted);font-size:12px}\n.mbrd-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbrd-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbrd-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbrd-confirm{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbrd-confirm:disabled,.mbrd-cancel:disabled{opacity:.6;cursor:not-allowed}\n`;\n\nconst CONFIRM_LABELS: Record<BillSubmissionRoute, string> = {\n ebill: \"Send Bill\",\n email: \"Email Bill\",\n fax: \"Fax Bill\",\n mail: \"Mail Bill\",\n};\n\nfunction RouteCard({\n selected,\n disabled,\n title,\n detail,\n badges,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n badges?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-card\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-card-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-card-title\">{title}</span>\n {detail ? <span className=\"mbrd-card-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n {badges ? <span className=\"mbrd-badges\">{badges}</span> : null}\n </button>\n {selected && children ? <div className=\"mbrd-sub\">{children}</div> : null}\n </div>\n );\n}\n\nfunction RecipientChoice({\n selected,\n disabled,\n title,\n detail,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-choice\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-choice-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden style={{ width: 15, height: 15 }} />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-choice-title\">{title}</span>\n {detail ? <span className=\"mbrd-choice-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n </button>\n {selected && children ? <div className=\"mbrd-choice-body\">{children}</div> : null}\n </div>\n );\n}\n\nexport function SendRouteDialog({\n title = \"Send bill\",\n delivery,\n submitting = false,\n disabled = false,\n error = null,\n onCancel,\n onConfirm,\n}: SendRouteDialogProps): ReactElement {\n const ebillOption = delivery.options.find((option) => option.route === \"ebill\");\n const mailOption = delivery.options.find((option) => option.route === \"mail\");\n const recommendedRoute = delivery.recommended.route;\n const onFileEmail = extractSendRouteEmail(delivery.contacts.claimsEmail);\n const onFileFax = delivery.contacts.faxNumber?.trim() || null;\n const onFileFaxDisplay = formatSendRouteFax(onFileFax);\n const onFileMail = delivery.contacts.mailingAddress?.trim() || \"\";\n\n const [route, setRoute] = useState<BillSubmissionRoute>(recommendedRoute);\n const [emailMode, setEmailMode] = useState<\"onfile\" | \"alt\">(onFileEmail ? \"onfile\" : \"alt\");\n const [faxMode, setFaxMode] = useState<\"onfile\" | \"alt\">(onFileFax ? \"onfile\" : \"alt\");\n const [emailTo, setEmailTo] = useState(\"\");\n const [subject, setSubject] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const [ccInput, setCcInput] = useState(\"\");\n const [faxTo, setFaxTo] = useState(\"\");\n const [attention, setAttention] = useState(\"\");\n const [mailTo, setMailTo] = useState(onFileMail);\n\n useEffect(() => {\n setRoute(recommendedRoute);\n setEmailMode(onFileEmail ? \"onfile\" : \"alt\");\n setFaxMode(onFileFax ? \"onfile\" : \"alt\");\n setMailTo(onFileMail);\n }, [recommendedRoute, onFileEmail, onFileFax, onFileMail]);\n\n // Close on Escape (unless a submit is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const effectiveEmail = emailMode === \"onfile\" && onFileEmail ? onFileEmail : emailTo.trim();\n const effectiveFax = faxMode === \"onfile\" && onFileFax ? onFileFax : faxTo;\n const faxDigits = effectiveFax.replace(/\\D/g, \"\");\n const emailValid = EMAIL_RE.test(effectiveEmail);\n const ccList = ccInput.split(/[,;]/).map((entry) => entry.trim()).filter(Boolean);\n const ccValid = ccList.every((entry) => EMAIL_RE.test(entry));\n const faxValid = faxDigits.length >= 10;\n const mailValid = mailTo.trim().length > 2;\n const confirmDisabled =\n submitting\n || disabled\n || (route === \"email\" && (!emailValid || !ccValid))\n || (route === \"fax\" && !faxValid)\n || (route === \"mail\" && !mailValid);\n\n const submission = useMemo((): SendRouteSubmission => {\n if (route === \"email\") {\n return {\n route,\n destination: { email: effectiveEmail },\n ...(subject.trim() ? { subject: subject.trim() } : {}),\n ...(message.trim() ? { note: message.trim() } : {}),\n ...(ccList.length ? { cc: ccList } : {}),\n };\n }\n if (route === \"fax\") {\n return {\n route,\n destination: { faxNumber: effectiveFax.trim() },\n ...(attention.trim() ? { attention: attention.trim() } : {}),\n };\n }\n if (route === \"mail\") {\n return { route, destination: { mailingAddress: mailTo.trim() } };\n }\n return { route };\n // ccList derives from ccInput.\n }, [route, effectiveEmail, subject, message, ccInput, effectiveFax, attention, mailTo]);\n\n return (\n <div className=\"mbrd-overlay\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}>\n <style>{css}</style>\n <div className=\"mbrd\" role=\"dialog\" aria-modal=\"true\" aria-label={typeof title === \"string\" ? title : \"Send bill\"}>\n <div className=\"mbrd-head\">\n <div>\n <h3 className=\"mbrd-title\">{title}</h3>\n <p className=\"mbrd-copy\">Select the delivery method.</p>\n </div>\n <button className=\"mbrd-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n <div className=\"mbrd-cards\" role=\"radiogroup\" aria-label=\"Delivery method\">\n {(() => {\n const ebillCard = ebillOption ? (\n <RouteCard\n key=\"ebill\"\n selected={route === \"ebill\"}\n title={ebillOption.printAndMail ? ebillOption.label : `e-Bill to ${ebillOption.payerName || delivery.payerName}`}\n detail={[\n ebillOption.detail || null,\n !ebillOption.printAndMail && ebillOption.label.startsWith(\"e-bill \")\n ? ebillOption.label.slice(\"e-bill \".length)\n : null,\n ].filter(Boolean).join(\" · \")}\n badges={<>\n {!ebillOption.fallback ? <span className=\"mbrd-badge\" data-tone=\"verified\">Verified Route</span> : null}\n {recommendedRoute === \"ebill\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n </>}\n onSelect={() => setRoute(\"ebill\")}\n />\n ) : null;\n\n const emailCard = (\n <RouteCard\n key=\"email\"\n selected={route === \"email\"}\n title=\"Email Bill\"\n detail={onFileEmail ?? \"No claims email on file — enter a recipient.\"}\n badges={recommendedRoute === \"email\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"email\")}\n >\n <div role=\"radiogroup\" aria-label=\"Email recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={emailMode === \"onfile\"}\n disabled={!onFileEmail}\n title={onFileEmail ?? \"Claims email on file\"}\n detail={onFileEmail ? \"Claims contact on file\" : \"No claims email exists on file for this payer.\"}\n onSelect={() => setEmailMode(\"onfile\")}\n />\n <RecipientChoice\n selected={emailMode === \"alt\"}\n title=\"Alternative email recipient\"\n onSelect={() => setEmailMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative email address <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" type=\"email\" value={emailTo} placeholder=\"user@mail.com\" onChange={(event) => setEmailTo(event.target.value)} />\n {emailTo.trim() && !EMAIL_RE.test(emailTo.trim()) ? <span className=\"mbrd-error\">Enter a valid email address.</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Cc — optional</span>\n <input className=\"mbrd-input\" value={ccInput} placeholder=\"adjuster@payer.com, supervisor@payer.com\" onChange={(event) => setCcInput(event.target.value)} />\n {!ccValid ? <span className=\"mbrd-error\">Each Cc entry must be a valid email address (separate with commas).</span> : null}\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Email subject — optional</span>\n <input className=\"mbrd-input\" value={subject} maxLength={255} onChange={(event) => setSubject(event.target.value)} />\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Message — optional</span>\n <textarea className=\"mbrd-textarea\" value={message} maxLength={5000} placeholder=\"Added at the top of the email body, above the bill summary.\" onChange={(event) => setMessage(event.target.value)} />\n </label>\n </RouteCard>\n );\n\n const faxCard = (\n <RouteCard\n key=\"fax\"\n selected={route === \"fax\"}\n title=\"Fax Bill\"\n detail={onFileFax ? `${onFileFaxDisplay} — payer fax on file` : \"No fax on file — enter a number.\"}\n badges={recommendedRoute === \"fax\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"fax\")}\n >\n <div role=\"radiogroup\" aria-label=\"Fax recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={faxMode === \"onfile\"}\n disabled={!onFileFax}\n title={onFileFax ? onFileFaxDisplay : \"Payer fax on file\"}\n detail={onFileFax ? \"Payer fax on file\" : \"No fax number exists on file for this payer.\"}\n onSelect={() => setFaxMode(\"onfile\")}\n />\n <RecipientChoice\n selected={faxMode === \"alt\"}\n title=\"Alternative fax recipient\"\n onSelect={() => setFaxMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative fax number <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" inputMode=\"tel\" value={faxTo} placeholder=\"(000) 000-0000\" onChange={(event) => setFaxTo(formatSendRouteFaxInput(event.target.value))} />\n {faxTo.trim() && faxTo.replace(/\\D/g, \"\").length < 10 ? <span className=\"mbrd-error\">Enter a valid fax number (10 digits).</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Attention — optional</span>\n <input className=\"mbrd-input\" value={attention} maxLength={120} placeholder=\"Recipient name\" onChange={(event) => setAttention(event.target.value)} />\n <span className=\"mbrd-help\">Printed as ATTENTION on the fax cover sheet.</span>\n </label>\n </RouteCard>\n );\n\n const mailCard = (\n <RouteCard\n key=\"mail\"\n selected={route === \"mail\"}\n title=\"Mail Bill\"\n detail={onFileMail ? onFileMail.replace(/\\n/g, \", \") : \"Physical mail — enter the payer's mailing address.\"}\n badges={recommendedRoute === \"mail\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"mail\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Mailing address <span className=\"mbrd-star\">*</span></span>\n <textarea className=\"mbrd-textarea\" value={mailTo} placeholder={\"Payer Claims Dept\\nPO Box 1234\\nCity, ST 00000\"} onChange={(event) => setMailTo(event.target.value)} />\n {!mailValid ? <span className=\"mbrd-error\">Enter a mailing address.</span> : null}\n <span className=\"mbrd-help\">\n {mailOption?.printAndMail\n ? mailOption.detail\n : \"Sent as physical mail — printed and mailed to this address.\"}\n </span>\n </label>\n </RouteCard>\n );\n\n // Preference order: ebill (only when the payer has an e-route) → fax\n // and email WITH a contact on file → mail (always) → the rest last.\n const cards: ReactNode[] = [];\n if (ebillCard) cards.push(ebillCard);\n if (onFileFax) cards.push(faxCard);\n if (onFileEmail) cards.push(emailCard);\n cards.push(mailCard);\n if (!onFileFax) cards.push(faxCard);\n if (!onFileEmail) cards.push(emailCard);\n return cards;\n })()}\n </div>\n\n {error ? <div className=\"mbrd-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbrd-actions\">\n <button className=\"mbrd-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button\n className=\"mbrd-confirm\"\n type=\"button\"\n disabled={confirmDisabled}\n onClick={() => onConfirm(submission)}\n >\n {submitting ? \"Submitting…\" : CONFIRM_LABELS[route]}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorPayer,\n} from \"@mindbill/browser\";\n\nexport type ClaimsAdministratorDirectoryDialogProps = {\n open: boolean;\n directory?: BillClaimsAdministratorDirectory | null;\n loading?: boolean;\n error?: string | null;\n onClose: () => void;\n};\n\ntype Tab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst css = `\n.mbcad-backdrop{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:24px;background:rgba(17,28,38,.44)}\n.mbcad-dialog{--mbcad-accent:var(--mb-accent,#176c70);--mbcad-border:var(--mb-border,#d7e0df);--mbcad-surface:var(--mb-surface,#fff);--mbcad-text:var(--mb-text,#17282d);--mbcad-muted:var(--mb-muted,#607176);display:grid;grid-template-rows:auto auto minmax(0,1fr);width:min(1180px,100%);max-height:min(860px,92vh);overflow:hidden;border:1px solid var(--mbcad-border);border-radius:14px;background:var(--mbcad-surface);color:var(--mbcad-text);box-shadow:0 28px 80px rgba(14,31,43,.28);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mbcad-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 22px;border-bottom:1px solid var(--mbcad-border)}.mbcad-head h2{margin:0;font-size:24px;line-height:1.2}.mbcad-close{width:40px;height:40px;border:0;border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 9%,var(--mbcad-surface));color:var(--mbcad-accent);font:inherit;font-size:28px;line-height:1;cursor:pointer}\n.mbcad-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin:18px 22px 0;border-radius:10px;background:color-mix(in srgb,var(--mbcad-muted) 8%,var(--mbcad-surface));overflow:hidden}.mbcad-tab{min-height:64px;padding:10px;border:0;border-right:1px solid var(--mbcad-border);border-top:4px solid transparent;background:transparent;color:var(--mbcad-muted);font:inherit;font-weight:750;cursor:pointer}.mbcad-tab:last-child{border-right:0}.mbcad-tab[aria-selected=true]{border-top-color:var(--mbcad-accent);background:var(--mbcad-surface);color:var(--mbcad-text)}\n.mbcad-body{overflow:auto;padding:24px 22px 28px}.mbcad-grid{display:grid;gap:0;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-row{display:grid;grid-template-columns:minmax(180px,.8fr) minmax(0,2fr);gap:18px;padding:11px 14px;border-bottom:1px solid var(--mbcad-border)}.mbcad-row:last-child{border-bottom:0}.mbcad-row strong{font-weight:750}.mbcad-list{display:grid;gap:5px;margin:0;padding:0;list-style:none}.mbcad-list a,.mbcad-table a{color:var(--mbcad-accent);overflow-wrap:anywhere}.mbcad-payers{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mbcad-payer{display:grid;gap:7px;padding:12px;border:1px solid var(--mbcad-border);border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 3%,var(--mbcad-surface))}.mbcad-payer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbcad-payer-route{color:var(--mbcad-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbcad-payer-meta{display:flex;flex-wrap:wrap;gap:6px}.mbcad-payer-meta span{padding:3px 7px;border:1px solid var(--mbcad-border);border-radius:999px;color:var(--mbcad-muted);font-size:12px}.mbcad-payer-note{margin:0;color:var(--mbcad-muted);font-size:13px}.mbcad-table{width:100%;border-collapse:collapse;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-table th,.mbcad-table td{padding:13px 14px;border-bottom:1px solid var(--mbcad-border);text-align:left;vertical-align:top}.mbcad-table th{background:color-mix(in srgb,var(--mbcad-muted) 7%,var(--mbcad-surface));font-size:13px}.mbcad-empty{padding:36px;text-align:center;color:var(--mbcad-muted)}.mbcad-notice{padding:14px 16px;border:1px solid color-mix(in srgb,var(--mbcad-accent) 70%,var(--mbcad-border));border-radius:9px;background:color-mix(in srgb,var(--mbcad-accent) 5%,var(--mbcad-surface));font-weight:650}\n@media(max-width:760px){.mbcad-backdrop{padding:8px}.mbcad-dialog{max-height:96vh}.mbcad-head{padding:14px}.mbcad-head h2{font-size:19px}.mbcad-tabs{display:flex;overflow-x:auto;margin:10px 12px 0}.mbcad-tab{min-width:145px}.mbcad-body{padding:14px 12px 18px}.mbcad-row{grid-template-columns:1fr;gap:5px}.mbcad-table{display:block;overflow-x:auto}}\n`;\n\nfunction outbound(value: string, kind: \"phone\" | \"email\" | \"url\"): ReactElement {\n const href = kind === \"phone\" ? `tel:${value.replace(/[^+\\d]/g, \"\")}` : kind === \"email\" ? `mailto:${value}` : /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n return <a href={href} {...(kind === \"url\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>;\n}\n\nfunction list(values: string[] | undefined, kind?: \"phone\" | \"email\" | \"url\"): ReactNode {\n return values?.length ? <ul className=\"mbcad-list\">{values.map((value, index) => <li key={`${value}-${index}`}>{kind ? outbound(value, kind) : value}</li>)}</ul> : \"—\";\n}\n\nfunction payerDetails(payer: BillClaimsAdministratorPayer, index: number): ReactElement {\n const identifiers = Object.entries(payer.clearinghousePayerIds ?? {}).map(([name, id]) => `${name.replace(/_/g, \" \")}: ${id}`);\n const metadata = [\n payer.optionType ? `Type: ${payer.optionType}` : null,\n payer.deliveryType ? `Delivery: ${payer.deliveryType}` : null,\n payer.clearinghouse && payer.payerId ? `${payer.clearinghouse}: ${payer.payerId}` : null,\n payer.sourceClearinghouse && payer.sourcePayerId ? `Catalog route: ${payer.sourceClearinghouse} ${payer.sourcePayerId}` : null,\n ...identifiers,\n payer.preferredClearinghouse ? `Preferred: ${payer.preferredClearinghouse}` : null,\n ].filter((value): value is string => Boolean(value));\n return <li className=\"mbcad-payer\" key={`${payer.name}-${index}`}>\n <div className=\"mbcad-payer-head\"><strong>{payer.name}</strong>{payer.route ? <span className=\"mbcad-payer-route\">{payer.route}</span> : null}</div>\n {payer.aliases?.length ? <p className=\"mbcad-payer-note\">Also known as {payer.aliases.join(\", \")}</p> : null}\n {payer.hint ? <p className=\"mbcad-payer-note\">{payer.hint}</p> : null}\n {payer.affiliatedEntities?.length ? <p className=\"mbcad-payer-note\">Affiliated with {payer.affiliatedEntities.join(\", \")}</p> : null}\n {metadata.length ? <div className=\"mbcad-payer-meta\">{metadata.map((item) => <span key={item}>{item}</span>)}</div> : null}\n </li>;\n}\n\nfunction Main({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n return <div className=\"mbcad-grid\">\n {([\n [\"Name\", directory.name ?? \"—\"], [\"Description\", directory.description ?? \"—\"], [\"Type\", directory.type ?? \"—\"],\n [\"Website\", directory.website ? outbound(directory.website, \"url\") : \"—\"],\n [\"Also known as\", list(directory.aliases)], [\"Affiliated entities\", list(directory.affiliatedEntities)],\n [\"Hours of operation\", directory.hours ?? \"—\"], [\"Telephone numbers\", list(directory.telephoneNumbers, \"phone\")],\n [\"Email addresses\", list(directory.emailAddresses, \"email\")], [\"Web portals\", list(directory.webPortals, \"url\")],\n [\"Payers\", directory.payers?.length ? <ul className=\"mbcad-payers\">{directory.payers.map(payerDetails)}</ul> : \"—\"],\n [\"Bill processing workflow\", directory.billProcessingWorkflow ?? \"—\"],\n [\"Bill processing workflow notes\", directory.billProcessingWorkflowNotes ?? \"—\"],\n [\"Claim number hint\", directory.claimNumberHint ?? \"—\"],\n ] as Array<[string, ReactNode]>).map(([label, value]) => <div className=\"mbcad-row\" key={label}><strong>{label}</strong><div>{value}</div></div>)}\n </div>;\n}\n\nfunction contacts(items: BillClaimsAdministratorContact[] | undefined, empty: string): ReactElement {\n if (!items?.length) return <div className=\"mbcad-empty\">{empty}</div>;\n return <table className=\"mbcad-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Web portal</th><th>Email</th><th>Fax</th><th>Address / note</th></tr></thead><tbody>{items.map((item, index) => <tr key={`${item.name ?? \"contact\"}-${index}`}><td>{item.name ?? \"—\"}</td><td>{item.phone ? outbound(item.phone, \"phone\") : \"—\"}</td><td>{item.portalUrl ? outbound(item.portalUrl, \"url\") : \"—\"}</td><td>{item.email ? outbound(item.email, \"email\") : \"—\"}</td><td>{item.fax ?? \"—\"}</td><td>{[item.address, item.note].filter(Boolean).join(\" · \") || \"—\"}</td></tr>)}</tbody></table>;\n}\n\nexport function ClaimsAdministratorDirectoryDialog({ open, directory, loading = false, error, onClose }: ClaimsAdministratorDirectoryDialogProps): ReactElement | null {\n const [tab, setTab] = useState<Tab>(\"main\");\n useEffect(() => { if (open) setTab(\"main\"); }, [open, directory?.id]);\n useEffect(() => {\n if (!open) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", close); return () => window.removeEventListener(\"keydown\", close);\n }, [onClose, open]);\n if (!open) return null;\n const title = directory?.name ?? \"Claims administrator directory\";\n return <div className=\"mbcad-backdrop\" onMouseDown={(event) => { if (event.target === event.currentTarget) onClose(); }}><style>{css}</style><section className=\"mbcad-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mbcad-title\">\n <header className=\"mbcad-head\"><h2 id=\"mbcad-title\">{title}</h2><button className=\"mbcad-close\" type=\"button\" aria-label=\"Close claims administrator details\" onClick={onClose}>×</button></header>\n <div className=\"mbcad-tabs\" role=\"tablist\">{([\n [\"main\", \"Main\"], [\"bill-review\", \"Bill Review\"], [\"authorization\", \"Authorization Info\"], [\"mailing\", \"Mailing Address\"], [\"patterns\", \"Claim Number Pattern\"],\n ] as Array<[Tab, string]>).map(([id, label]) => <button className=\"mbcad-tab\" type=\"button\" role=\"tab\" aria-selected={tab === id} onClick={() => setTab(id)} key={id}>{label}</button>)}</div>\n <div className=\"mbcad-body\" role=\"tabpanel\">{loading ? <div className=\"mbcad-empty\">Loading directory details…</div> : error ? <div className=\"mbcad-empty\" role=\"alert\">{error}</div> : !directory ? <div className=\"mbcad-empty\">Directory details are unavailable.</div> : tab === \"main\" ? <Main directory={directory} /> : tab === \"bill-review\" ? contacts(directory.billReview, \"No bill-review contacts are listed.\") : tab === \"authorization\" ? <>{directory.authorizationNotice ? <p className=\"mbcad-notice\">{directory.authorizationNotice}</p> : null}{contacts(directory.authorization, \"No authorization contacts are listed.\")}</> : tab === \"mailing\" ? directory.mailingAddresses?.length ? <table className=\"mbcad-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Bill treatment types</th><th>Submission type</th></tr></thead><tbody>{directory.mailingAddresses.map((item, index) => <tr key={`${item.address}-${index}`}><td>{item.company ?? \"—\"}</td><td>{item.address}</td><td>{item.notes ?? \"—\"}</td><td>{item.billTreatmentTypes?.join(\", \") || \"—\"}</td><td>{item.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No mailing addresses are listed.</div> : directory.claimNumberPatterns?.length ? <table className=\"mbcad-table\"><thead><tr><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{directory.claimNumberPatterns.map((item, index) => <tr key={`${item.pattern}-${index}`}><td>{item.length ?? \"—\"}</td><td>{item.pattern}</td><td>{item.example ?? \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No claim-number patterns are listed.</div>}</div>\n </section></div>;\n}\n","import type {\n BillSubmissionDiagnosisOption,\n BillSubmissionModifierOption,\n BillSubmissionProcedureOption,\n BillSubmissionTaxonomyOption,\n} from \"./bill-submission-form\";\n\n/** Public-domain and MindBill-owned metadata. CPT descriptions are intentionally limited to the curated catalog. */\nexport const DEFAULT_BILL_SUBMISSION_PROCEDURES: BillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"90846\", description: \"Family psychotherapy without patient\" },\n { code: \"90847\", description: \"Family psychotherapy with patient\" },\n { code: \"90853\", description: \"Group psychotherapy\" },\n { code: \"90785\", description: \"Interactive complexity\" },\n { code: \"90833\", description: \"Psychotherapy add-on, 30 minutes\" },\n { code: \"90836\", description: \"Psychotherapy add-on, 45 minutes\" },\n { code: \"90838\", description: \"Psychotherapy add-on, 60 minutes\" },\n { code: \"99202\", description: \"New patient office visit, level 2\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99211\", description: \"Established patient office visit, level 1\" },\n { code: \"99212\", description: \"Established patient office visit, level 2\" },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"96136\", description: \"Psychological or neuropsychological testing, first 30 minutes\" },\n { code: \"96137\", description: \"Psychological or neuropsychological testing, each additional 30 minutes\" },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97112\", description: \"Neuromuscular reeducation\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"97530\", description: \"Therapeutic activities\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1-2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3-4 regions\" },\n { code: \"98942\", description: \"Chiropractic manipulative treatment, 5 regions\" },\n { code: \"72100\", description: \"Spine radiograph, lumbosacral, 2-3 views\" },\n { code: \"73030\", description: \"Shoulder radiograph, complete\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"20552\", description: \"Trigger point injection, 1-2 muscles\" },\n { code: \"64483\", description: \"Transforaminal epidural injection, lumbar or sacral\" },\n { code: \"64635\", description: \"Destruction by neurolytic agent, paravertebral facet joint nerve\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n { code: \"L0650\", description: \"Lumbar orthosis\" },\n { code: \"A4556\", description: \"Electrodes\" },\n];\n\nexport const DEFAULT_BILL_SUBMISSION_MODIFIERS: BillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\n/** Common NUCC provider taxonomies. Consumers can extend this catalog through taxonomyOptions. */\nexport const DEFAULT_BILL_SUBMISSION_TAXONOMIES: BillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"122300000X\", description: \"Dentist\" },\n { code: \"133V00000X\", description: \"Dietitian, Registered\" },\n { code: \"163W00000X\", description: \"Registered Nurse\" },\n { code: \"183500000X\", description: \"Pharmacist\" },\n { code: \"207L00000X\", description: \"Anesthesiology\" },\n { code: \"207P00000X\", description: \"Emergency Medicine\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207RC0000X\", description: \"Cardiovascular Disease\" },\n { code: \"207RN0300X\", description: \"Nephrology\" },\n { code: \"207RP1001X\", description: \"Pulmonary Disease\" },\n { code: \"207RR0500X\", description: \"Rheumatology\" },\n { code: \"207T00000X\", description: \"Neurological Surgery\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"207Y00000X\", description: \"Otolaryngology\" },\n { code: \"208000000X\", description: \"Pediatrics\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"2084P0802X\", description: \"Addiction Psychiatry\" },\n { code: \"2084P0804X\", description: \"Child & Adolescent Psychiatry\" },\n { code: \"2084S0012X\", description: \"Sleep Medicine\" },\n { code: \"2085R0202X\", description: \"Diagnostic Radiology\" },\n { code: \"208600000X\", description: \"Surgery\" },\n { code: \"2086S0105X\", description: \"Surgery of the Hand\" },\n { code: \"208D00000X\", description: \"General Practice\" },\n { code: \"208M00000X\", description: \"Hospitalist\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nexport const BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS: Array<BillSubmissionDiagnosisOption & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst COMPOSITE_MULTIPLIERS: Record<string, number> = {\n \"93+94+96\": 2.45, \"93+94+97\": 1.95, \"93+94+98\": 1.95,\n \"92+93\": 1.1, \"93+95\": 1.1, \"93+94\": 1.45, \"93+96\": 2.1,\n \"93+97\": 1.6, \"93+98\": 1.6, \"94+96\": 2.35, \"94+97\": 1.85, \"94+98\": 1.85,\n};\n\nconst MED_LEGAL_MODIFIER_MULTIPLIERS: Record<string, number> = {\n \"92\": 1,\n \"93\": 1.1,\n \"94\": 1.35,\n \"95\": 1,\n \"96\": 2,\n \"97\": 1.5,\n \"98\": 1.5,\n};\n\nfunction medicalLegalMultiplier(modifiers: string[]): number {\n const priced = modifiers.filter((item) => MED_LEGAL_MODIFIER_MULTIPLIERS[item] !== 1);\n if (priced.length === 0) return 1;\n const composite = COMPOSITE_MULTIPLIERS[priced.join(\"+\")];\n if (composite != null) return composite;\n return priced.reduce((total, item) => total * (MED_LEGAL_MODIFIER_MULTIPLIERS[item] ?? 1), 1);\n}\n\nexport function calculateBillSubmissionAllowedAmount(\n line: { code: string; modifiers?: string[]; units?: number },\n procedures: BillSubmissionProcedureOption[] = DEFAULT_BILL_SUBMISSION_PROCEDURES,\n): number | undefined {\n const procedure = procedures.find((item) => item.code.toUpperCase() === line.code.trim().toUpperCase());\n if (procedure?.allowedAmount == null) return undefined;\n const code = procedure.code.toUpperCase();\n const units = Math.max(1, line.units ?? 1);\n const normalized = [...new Set((line.modifiers ?? []).map((item) => item.replace(/^-/, \"\").toUpperCase()))].sort();\n const multiplier = [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)\n ? medicalLegalMultiplier(normalized)\n : 1;\n return Math.round(procedure.allowedAmount * units * multiplier * 100) / 100;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type BillingDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type BillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type BillAgingBucket = {\n id: BillAgingBucketId;\n label: string;\n count: number;\n balance: number;\n};\nexport type BillingDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n bills: number;\n aging: BillAgingBucket[];\n};\n\nexport type BillingComponentProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillListProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n onSelectBill?: (bill: BillingDashboardBill) => void;\n emptyState?: ReactNode;\n};\n\nexport type BillAgingSummaryProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n};\n\nexport type BillingDashboardProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n onSelectBill?: (bill: BillingDashboardBill) => void;\n initialSearch?: string;\n initialState?: string;\n hideFilters?: boolean;\n};\n\nexport type BillingReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type BillingReportRow = {\n key: string;\n label: string;\n billCount: number;\n totalBilled: number;\n totalPaid: number;\n balanceDue: number;\n};\nexport type BillingReportProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n groupBy?: BillingReportDimension;\n heading?: ReactNode;\n description?: ReactNode;\n};\n\nconst css = `\n.mbdash{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbdash *{box-sizing:border-box}.mbdash h2,.mbdash h3,.mbdash p{margin:0}.mbdash-copy{color:var(--mb-muted);margin-top:5px!important}.mbdash-card{min-width:0;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mbdash-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.mbdash-head h2{font-size:24px}.mbdash-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-stat{display:grid;gap:7px;padding:20px 22px;border-right:1px solid var(--mb-border)}.mbdash-stat:last-child{border:0}.mbdash-label{color:var(--mb-muted);font-size:12px;font-weight:760;letter-spacing:.06em;text-transform:uppercase}.mbdash-value{font-size:24px;font-weight:780;font-variant-numeric:tabular-nums}.mbdash-aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-aging-item{display:grid;gap:5px;padding:16px 20px;border-right:1px solid var(--mb-border)}.mbdash-aging-item:last-child{border:0}.mbdash-aging-item strong{font-size:18px;font-variant-numeric:tabular-nums}.mbdash-aging-item span:last-child{color:var(--mb-muted);font-size:13px}\n.mbdash-filters{display:grid;grid-template-columns:minmax(240px,1fr) minmax(180px,260px);gap:12px}.mbdash-control{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbdash-control:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbdash-table-wrap{overflow:auto}.mbdash-table{width:100%;border-collapse:collapse}.mbdash-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-align:left;text-transform:uppercase;white-space:nowrap}.mbdash-table td{padding:16px;border-bottom:1px solid var(--mb-border);vertical-align:top}.mbdash-table tr:last-child td{border-bottom:0}.mbdash-table tbody tr[data-clickable=true]{cursor:pointer}.mbdash-table tbody tr[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mbdash-primary{display:block;color:var(--mb-text);font-weight:720;text-decoration:none}.mbdash-secondary{display:block;margin-top:4px;color:var(--mb-muted);font-size:13px}.mbdash-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}.mbdash-money{text-align:right!important;font-variant-numeric:tabular-nums;white-space:nowrap}.mbdash-empty{padding:46px 22px;color:var(--mb-muted);text-align:center}.mbdash-mobile-list{display:none}.mbdash-mobile-card{display:grid;gap:14px;padding:18px;border-bottom:1px solid var(--mb-border)}.mbdash-mobile-card:last-child{border:0}.mbdash-mobile-top,.mbdash-mobile-money{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbdash-mobile-money>span{display:grid;gap:3px}.mbdash-mobile-money small{color:var(--mb-muted)}\n.mbdash-report-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;border-bottom:1px solid var(--mb-border)}.mbdash-report-total td{font-weight:780;background:var(--mb-soft)}\n@media(max-width:900px){.mbdash-summary{grid-template-columns:repeat(2,1fr)}.mbdash-stat:nth-child(2){border-right:0}.mbdash-stat:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mbdash-aging{grid-template-columns:repeat(2,1fr)}.mbdash-aging-item:nth-child(2){border-right:0}.mbdash-aging-item:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}}\n@media(max-width:700px){.mbdash{gap:16px}.mbdash-head{align-items:flex-start;flex-direction:column}.mbdash-filters{grid-template-columns:1fr}.mbdash-table-wrap{display:none}.mbdash-mobile-list{display:block}.mbdash-value{font-size:20px}.mbdash-stat,.mbdash-aging-item{padding:16px}.mbdash-report .mbdash-table-wrap{display:block}.mbdash-report .mbdash-table th:nth-child(2),.mbdash-report .mbdash-table td:nth-child(2),.mbdash-report .mbdash-table th:nth-child(3),.mbdash-report .mbdash-table td:nth-child(3){display:none}}\n`;\n\nconst terminalStates = new Set([\"closed\", \"voided\", \"cancelled\"]);\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nexport function billAgingDays(bill: BillingDashboardBill, now = new Date()): number {\n if (Number.isFinite(bill.agingDays)) return Math.max(0, Math.floor(bill.agingDays!));\n if (!bill.submittedAt) return 0;\n const submitted = new Date(bill.submittedAt);\n if (Number.isNaN(submitted.valueOf())) return 0;\n return Math.max(0, Math.floor((now.valueOf() - submitted.valueOf()) / 86_400_000));\n}\n\nexport function billAgingBucket(bill: BillingDashboardBill, now = new Date()): BillAgingBucketId {\n const days = billAgingDays(bill, now);\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeBillingDashboard(bills: BillingDashboardBill[], now = new Date()): BillingDashboardSummary {\n const aging: BillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n let totalBilled = 0; let totalPaid = 0; let outstanding = 0; let openCount = 0;\n for (const bill of bills) {\n totalBilled += Number(bill.totalCharge || 0); totalPaid += Number(bill.totalPaid || 0); outstanding += Number(bill.balanceDue || 0);\n if (!terminalStates.has(bill.state.toLowerCase()) && bill.balanceDue > 0) {\n openCount += 1; const bucket = aging.find((item) => item.id === billAgingBucket(bill, now))!;\n bucket.count += 1; bucket.balance += Number(bill.balanceDue || 0);\n }\n }\n return { totalBilled, totalPaid, outstanding, openCount, bills: bills.length, aging };\n}\n\nfunction Shell({ appearance, className = \"\", style, children }: BillingComponentProps & { children: ReactNode }): ReactElement {\n return <div className={`mbdash ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}><style>{css}</style>{children}</div>;\n}\n\nfunction BillIdentity({ bill }: { bill: BillingDashboardBill }): ReactElement {\n const label = bill.billNumber == null ? bill.externalId ?? \"Bill\" : `Bill #${bill.billNumber}`;\n const content = <><span className=\"mbdash-primary\">{label}</span><span className=\"mbdash-secondary\">{[bill.patientName, bill.claimNumber ? `Claim ${bill.claimNumber}` : null].filter(Boolean).join(\" · \")}</span></>;\n return bill.href ? <a href={bill.href} className=\"mbdash-primary\">{content}</a> : <>{content}</>;\n}\n\nfunction BillListContent({ bills, onSelectBill, emptyState = \"No bills match these filters.\" }: BillListProps): ReactElement {\n if (!bills.length) return <div className=\"mbdash-card mbdash-empty\">{emptyState}</div>;\n return <div className=\"mbdash-card\">\n <div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Bill</th><th>Payer</th><th>Status</th><th>Age</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>\n {bills.map((bill) => <tr key={bill.id} data-clickable={Boolean(onSelectBill)} onClick={() => onSelectBill?.(bill)}><td><BillIdentity bill={bill} /></td><td>{bill.payerName || \"—\"}</td><td><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></td><td>{billAgingDays(bill)} days</td><td className=\"mbdash-money\">{money(bill.totalCharge)}</td><td className=\"mbdash-money\">{money(bill.totalPaid)}</td><td className=\"mbdash-money\"><strong>{money(bill.balanceDue)}</strong></td></tr>)}\n </tbody></table></div>\n <div className=\"mbdash-mobile-list\">{bills.map((bill) => <article className=\"mbdash-mobile-card\" key={bill.id} onClick={() => onSelectBill?.(bill)}><div className=\"mbdash-mobile-top\"><div><BillIdentity bill={bill} /></div><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></div><div className=\"mbdash-mobile-money\"><span><small>Age</small>{billAgingDays(bill)} days</span><span><small>Paid</small>{money(bill.totalPaid)}</span><span><small>Balance</small><strong>{money(bill.balanceDue)}</strong></span></div></article>)}</div>\n </div>;\n}\n\nexport function BillList(props: BillListProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><BillListContent {...props} /></Shell>;\n}\n\nfunction AgingContent({ bills, heading = \"Accounts receivable\" }: Pick<BillAgingSummaryProps, \"bills\" | \"heading\">): ReactElement {\n const summary = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n return <><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">Current balances and aging at a glance.</p></div></div><div className=\"mbdash-card mbdash-summary\"><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Outstanding</span><span className=\"mbdash-value\">{money(summary.outstanding)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Open bills</span><span className=\"mbdash-value\">{summary.openCount}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Collected</span><span className=\"mbdash-value\">{money(summary.totalPaid)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Total billed</span><span className=\"mbdash-value\">{money(summary.totalBilled)}</span></div></div><div className=\"mbdash-card mbdash-aging\">{summary.aging.map((bucket) => <div className=\"mbdash-aging-item\" key={bucket.id}><span className=\"mbdash-label\">{bucket.label}</span><strong>{money(bucket.balance)}</strong><span>{bucket.count} bill{bucket.count === 1 ? \"\" : \"s\"}</span></div>)}</div></>;\n}\n\nexport function BillAgingSummary(props: BillAgingSummaryProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><AgingContent bills={props.bills} {...(props.heading === undefined ? {} : { heading: props.heading })} /></Shell>;\n}\n\nexport function BillingDashboard({ bills, heading = \"Billing\", description = \"Track submitted bills, payments, and outstanding balances.\", onSelectBill, initialSearch = \"\", initialState = \"all\", hideFilters = false, appearance, className, style }: BillingDashboardProps): ReactElement {\n const [search, setSearch] = useState(initialSearch); const [state, setState] = useState(initialState);\n const states = useMemo(() => [...new Set(bills.map((bill) => bill.state))].sort((a, b) => a.localeCompare(b)), [bills]);\n const filtered = useMemo(() => { const query = search.trim().toLowerCase(); return bills.filter((bill) => (state === \"all\" || bill.state === state) && (!query || [bill.billNumber, bill.externalId, bill.patientName, bill.claimNumber, bill.payerName, bill.workItemLabel].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }, [bills, search, state]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n ...(className === undefined ? {} : { className }),\n ...(style === undefined ? {} : { style }),\n };\n const listProps = { bills: filtered, ...(onSelectBill === undefined ? {} : { onSelectBill }) };\n return <Shell {...shellProps}><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div></div><AgingContent bills={filtered} heading=\"Receivables\" />{hideFilters ? null : <div className=\"mbdash-filters\"><input className=\"mbdash-control\" type=\"search\" value={search} onChange={(event) => setSearch(event.target.value)} placeholder=\"Search patient, claim, payer, or bill…\" aria-label=\"Search bills\" /><select className=\"mbdash-control\" value={state} onChange={(event) => setState(event.target.value)} aria-label=\"Filter bills by status\"><option value=\"all\">All statuses</option>{states.map((item) => <option value={item} key={item}>{stateLabel(item)}</option>)}</select></div>}<BillListContent {...listProps} /></Shell>;\n}\n\nexport function buildBillingReportRows(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): BillingReportRow[] {\n const rows = new Map<string, BillingReportRow>();\n for (const bill of bills) {\n const key = groupBy === \"payer\" ? bill.payerName || \"Unassigned payer\" : groupBy === \"aging\" ? billAgingBucket(bill) : bill.state;\n const label = groupBy === \"status\" ? stateLabel(key) : groupBy === \"aging\" ? ({ current: \"0–30 days\", \"31-60\": \"31–60 days\", \"61-90\": \"61–90 days\", \"91+\": \"91+ days\" } as Record<string, string>)[key] ?? key : key;\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += Number(bill.totalCharge || 0); row.totalPaid += Number(bill.totalPaid || 0); row.balanceDue += Number(bill.balanceDue || 0); rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => a.label.localeCompare(b.label, undefined, { numeric: true }));\n}\n\nexport function buildBillingReportCsv(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): string {\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n return [[\"Group\", \"Bills\", \"Total billed\", \"Total paid\", \"Balance due\"].map(escape).join(\",\"), ...buildBillingReportRows(bills, groupBy).map((row) => [row.label, row.billCount, row.totalBilled.toFixed(2), row.totalPaid.toFixed(2), row.balanceDue.toFixed(2)].map(escape).join(\",\"))].join(\"\\n\");\n}\n\nexport function BillingReport({ bills, groupBy = \"status\", heading = \"Billing report\", description = \"Billed, paid, and outstanding totals.\", appearance, className, style }: BillingReportProps): ReactElement {\n const rows = useMemo(() => buildBillingReportRows(bills, groupBy), [bills, groupBy]); const total = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n className: `mbdash-report ${className ?? \"\"}`.trim(),\n ...(style === undefined ? {} : { style }),\n };\n return <Shell {...shellProps}><div className=\"mbdash-card\"><div className=\"mbdash-report-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div><span className=\"mbdash-state\">By {groupBy}</span></div><div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Group</th><th>Bills</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>{rows.map((row) => <tr key={row.key}><td><strong>{row.label}</strong></td><td>{row.billCount}</td><td className=\"mbdash-money\">{money(row.totalBilled)}</td><td className=\"mbdash-money\">{money(row.totalPaid)}</td><td className=\"mbdash-money\">{money(row.balanceDue)}</td></tr>)}<tr className=\"mbdash-report-total\"><td>Total</td><td>{total.bills}</td><td className=\"mbdash-money\">{money(total.totalBilled)}</td><td className=\"mbdash-money\">{money(total.totalPaid)}</td><td className=\"mbdash-money\">{money(total.outstanding)}</td></tr></tbody></table></div></div></Shell>;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { billAgingBucket, type BillAgingBucketId, type BillingDashboardBill } from \"./billing-dashboard\";\n\nexport type BillStatusAgingCell = {\n state: string;\n bucket: BillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: BillingDashboardBill[];\n};\n\nexport type BillStatusAgingRow = {\n state: string;\n label: string;\n cells: BillStatusAgingCell[];\n total: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixData = {\n rows: BillStatusAgingRow[];\n columnTotals: BillStatusAgingCell[];\n grandTotal: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n /** Lifecycle-first row order; unknown states append alphabetically. */\n stateOrder?: string[];\n /** Show outstanding balance under each count. Default true. */\n showBalances?: boolean;\n onSelectCell?: (cell: BillStatusAgingCell) => void;\n};\n\nexport const BILL_STATUS_AGING_BUCKETS: { id: BillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\",\n \"incomplete\",\n \"created\",\n \"sent\",\n \"submitted\",\n \"accepted\",\n \"processed\",\n \"paid\",\n \"underpaid\",\n \"denied\",\n \"rejected\",\n \"appealing\",\n \"second_review\",\n \"ibr\",\n \"lien\",\n \"closed\",\n];\n\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nconst emptyCell = (state: string, bucket: BillAgingBucketId | \"total\"): BillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildBillStatusAgingMatrix(\n bills: BillingDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): BillStatusAgingMatrixData {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => {\n const cells = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id));\n const total = emptyCell(state, \"total\");\n return { state, label: stateLabel(state), cells, total };\n });\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = BILL_STATUS_AGING_BUCKETS.findIndex((bucket) => bucket.id === billAgingBucket(bill, now));\n const balance = Number(bill.balanceDue || 0);\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += balance;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildBillStatusAgingCsv(bills: BillingDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildBillStatusAgingMatrix(bills, stateOrder);\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n const header = [\"Status\", ...BILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(escape).join(\",\")).join(\"\\n\");\n}\n\nconst css = `\n.mbmx{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbmx *{box-sizing:border-box}.mbmx h2,.mbmx p{margin:0}\n.mbmx-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:16px}.mbmx-head h2{font-size:24px}.mbmx-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbmx-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:auto}\n.mbmx-table{width:100%;border-collapse:collapse;min-width:640px}\n.mbmx-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;text-align:right}\n.mbmx-table th:first-child{text-align:left}\n.mbmx-table td{padding:0;border-bottom:1px solid var(--mb-border);border-left:1px solid color-mix(in srgb,var(--mb-border) 55%,transparent);text-align:right;vertical-align:middle}\n.mbmx-table td:first-child{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n.mbmx-table tr:last-child td{border-bottom:0}\n.mbmx-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}\n.mbmx-cell{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--mb-text);font:inherit;text-align:right}\n.mbmx-cell[data-clickable=true]{cursor:pointer}.mbmx-cell[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbmx-count{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n.mbmx-balance{display:block;margin-top:2px;color:var(--mb-muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n.mbmx-zero{color:var(--mb-muted)}\n.mbmx-total td,.mbmx-table td.mbmx-rowtotal{background:var(--mb-soft);font-weight:760}\n`;\n\nexport function BillStatusAgingMatrix({\n bills,\n heading = \"Bills by status and age\",\n description = \"Every bill grouped by lifecycle status, then by days outstanding.\",\n stateOrder,\n showBalances = true,\n onSelectCell,\n appearance,\n className = \"\",\n style,\n}: BillStatusAgingMatrixProps): ReactElement {\n const matrix = useMemo(() => buildBillStatusAgingMatrix(bills, stateOrder), [bills, stateOrder]);\n const clickable = Boolean(onSelectCell);\n const cell = (data: BillStatusAgingCell, key: string, isTotal = false): ReactElement => (\n <td key={key} className={isTotal ? \"mbmx-rowtotal\" : undefined}>\n <button\n type=\"button\"\n className=\"mbmx-cell\"\n data-clickable={clickable && data.count > 0}\n onClick={() => data.count > 0 && onSelectCell?.(data)}\n disabled={!clickable || data.count === 0}\n aria-label={`${stateLabel(data.state)} · ${data.bucket === \"total\" ? \"all ages\" : data.bucket}: ${data.count} bills`}\n >\n <span className={`mbmx-count ${data.count === 0 ? \"mbmx-zero\" : \"\"}`.trim()}>{data.count === 0 ? \"—\" : data.count}</span>\n {showBalances && data.count > 0 ? <span className=\"mbmx-balance\">{money(data.balance)}</span> : null}\n </button>\n </td>\n );\n return (\n <div className={`mbmx ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbmx-head\"><div><h2>{heading}</h2><p className=\"mbmx-copy\">{description}</p></div></div>\n <div className=\"mbmx-card\">\n <table className=\"mbmx-table\">\n <thead><tr><th>Status</th>{BILL_STATUS_AGING_BUCKETS.map((bucket) => <th key={bucket.id}>{bucket.label}</th>)}<th>Total</th></tr></thead>\n <tbody>\n {matrix.rows.map((row) => (\n <tr key={row.state}>\n <td><span className=\"mbmx-state\">{row.label}</span></td>\n {row.cells.map((data) => cell(data, `${row.state}-${data.bucket}`))}\n {cell(row.total, `${row.state}-total`, true)}\n </tr>\n ))}\n <tr className=\"mbmx-total\">\n <td>Total</td>\n {matrix.columnTotals.map((data) => cell(data, `all-${data.bucket}`))}\n {cell(matrix.grandTotal, \"all-total\", true)}\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// \"Bill Tasks\" dashboard: one rounded, tone-colored card per\n// task section (Payment Due, No Response, Denied, …), rows bucketed by age in\n// days with colored bucket header pills, per-cell click-through counts, and a\n// closing grand-total card. Purely props-driven: hosts aggregate their own\n// work items with buildBillTasksDashboard (re-exported from @mindbill/browser)\n// so MindBill itself can dogfood the surface without the partner API.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"@mindbill/browser\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillTasksDashboardCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport type BillTasksDashboardProps = SurfaceProps & {\n data: BillTasksDashboardData;\n /** Must match the buckets passed to buildBillTasksDashboard. */\n buckets?: BillTasksAgingBucket[];\n heading?: ReactNode;\n grandTotalLabel?: string;\n emptyLabel?: string;\n onSelectCell?: (cell: BillTasksDashboardCell) => void;\n /** Rendered above the sections — hosts pass their own filters. */\n toolbar?: ReactNode;\n footnote?: ReactNode;\n};\n\nconst TONES: Record<BillTasksDashboardSection[\"tone\"], string> = {\n violet: \"#7c53c3\",\n red: \"#cf4437\",\n blue: \"#2f7fd1\",\n green: \"#2c9a5b\",\n amber: \"#d9931f\",\n neutral: \"#8195a1\",\n};\n\nconst BUCKET_PILL_BASES = [\"#2c9a5b\", \"#1f9aa8\", \"#dcbb28\", \"#e08a2e\", \"#d75d8a\"];\n\nconst css = `\n.mbtk{color:var(--mb-text);font-family:var(--mb-font);font-size:14px}.mbtk *{box-sizing:border-box}.mbtk h2,.mbtk p{margin:0}\n.mbtk-heading{margin-bottom:14px}.mbtk-heading h2{font-size:24px}\n.mbtk-toolbar{margin-bottom:14px}\n.mbtk-section{margin-bottom:16px;border:1.5px solid var(--mbtk-tone,var(--mb-border));border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:hidden}\n.mbtk-section.is-grand{border-color:var(--mb-border)}\n.mbtk-grid{display:grid;grid-template-columns:var(--mbtk-cols);gap:0 10px;align-items:center;padding:0 16px}\n.mbtk-head{padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mbtk-tone,var(--mb-border)) 22%,var(--mb-border))}\n.mbtk-title{display:flex;align-items:center;gap:9px;min-width:0}\n.mbtk-dot{flex:0 0 auto;width:11px;height:11px;border-radius:50%;background:var(--mbtk-tone,var(--mb-muted))}\n.mbtk-title-text{min-width:0}\n.mbtk-title-text strong{display:block;font-size:15.5px;line-height:1.3}\n.mbtk-basis{display:block;color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mbtk-pill{justify-self:stretch;padding:5px 6px;border-radius:999px;background:color-mix(in srgb,var(--mbtk-pill) 20%,var(--mb-surface));color:color-mix(in srgb,var(--mbtk-pill) 62%,var(--mb-text));font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n.mbtk-colhead{justify-self:stretch;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n.mbtk-row{border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);min-height:44px}\n.mbtk-row:first-of-type{border-top:0}\n.mbtk-rowlabel{color:var(--mb-muted);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n.mbtk-count{text-align:center;font-variant-numeric:tabular-nums}\n.mbtk-zero{color:var(--mb-muted)}\n.mbtk-link{border:0;background:none;padding:6px 8px;color:var(--mb-accent);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px}\n.mbtk-link:hover{text-decoration:underline;background:color-mix(in srgb,var(--mb-accent) 8%,transparent)}\n.mbtk-total{text-align:center}\n.mbtk-totals{background:var(--mb-soft);border-top:1px solid var(--mb-border);font-weight:760}\n.mbtk-totals .mbtk-rowlabel{color:var(--mb-text);font-weight:760}\n.mbtk-empty{padding:22px 16px;color:var(--mb-muted);text-align:center}\n.mbtk-grand .mbtk-rowlabel{color:var(--mb-text);font-size:14px;font-weight:800}\n.mbtk-grand{min-height:52px}\n.mbtk-footnote{margin-top:12px;color:var(--mb-muted);font-size:12.5px}\n@media(max-width:760px){.mbtk-pill,.mbtk-colhead,.mbtk-count{display:none}.mbtk-grid{grid-template-columns:minmax(0,1fr) auto}}\n`;\n\nfunction cellButton(\n key: string,\n count: number,\n className: string,\n label: string,\n onSelect: (() => void) | null,\n): ReactElement {\n if (count > 0 && onSelect) {\n return (\n <span key={key} className={className}>\n <button type=\"button\" className=\"mbtk-link\" aria-label={label} onClick={onSelect}>{count}</button>\n </span>\n );\n }\n return <span key={key} className={`${className}${count === 0 ? \" mbtk-zero\" : \"\"}`}>{count}</span>;\n}\n\nfunction TaskRow({\n sectionId,\n row,\n buckets,\n onSelectCell,\n}: {\n sectionId: string;\n row: BillTasksDashboardRow;\n buckets: BillTasksAgingBucket[];\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n}): ReactElement {\n const allRefs = row.refs.flat();\n return (\n <div className=\"mbtk-grid mbtk-row\">\n <span className=\"mbtk-rowlabel\">{row.label}</span>\n {buckets.map((bucket, index) => {\n const count = row.counts[index] ?? 0;\n return cellButton(\n bucket.id,\n count,\n \"mbtk-count\",\n `${row.label} · ${bucket.label}: ${count} tasks`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: bucket.id, refs: row.refs[index] ?? [], count })\n : null,\n );\n })}\n {cellButton(\n \"task-total\",\n row.total,\n \"mbtk-total\",\n `${row.label} · all ages: ${row.total} tasks`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: null, refs: allRefs, count: row.total })\n : null,\n )}\n </div>\n );\n}\n\nfunction SectionCard({\n section,\n buckets,\n emptyLabel,\n onSelectCell,\n}: {\n section: BillTasksDashboardSection;\n buckets: BillTasksAgingBucket[];\n emptyLabel: ReactNode;\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n}): ReactElement {\n return (\n <section\n className=\"mbtk-section\"\n style={{ \"--mbtk-tone\": TONES[section.tone] } as CSSProperties}\n aria-label={section.label}\n >\n <div className=\"mbtk-grid mbtk-head\">\n <span className=\"mbtk-title\">\n <i className=\"mbtk-dot\" aria-hidden=\"true\" />\n <span className=\"mbtk-title-text\">\n <strong>{section.label}</strong>\n <span className=\"mbtk-basis\">by {section.agingBasisLabel}</span>\n </span>\n </span>\n {buckets.map((bucket, index) => (\n <span\n key={bucket.id}\n className=\"mbtk-pill\"\n style={{ \"--mbtk-pill\": BUCKET_PILL_BASES[index % BUCKET_PILL_BASES.length] } as CSSProperties}\n >\n {bucket.label}\n </span>\n ))}\n <span className=\"mbtk-colhead\">Task Total</span>\n </div>\n {section.empty ? (\n <p className=\"mbtk-empty\">{emptyLabel}</p>\n ) : (\n <>\n {section.rows.map((row) => (\n <TaskRow key={row.id} sectionId={section.id} row={row} buckets={buckets} onSelectCell={onSelectCell} />\n ))}\n <div className=\"mbtk-grid mbtk-row mbtk-totals\">\n <span className=\"mbtk-rowlabel\">Total</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{section.totals[index] ?? 0}</span>\n ))}\n <span className=\"mbtk-total\">{section.total}</span>\n </div>\n </>\n )}\n </section>\n );\n}\n\nexport function BillTasksDashboard({\n data,\n buckets = BILL_TASKS_AGING_BUCKETS,\n heading,\n grandTotalLabel = \"Bill Tasks Total\",\n emptyLabel = \"No Tasks\",\n onSelectCell,\n toolbar,\n footnote,\n appearance,\n className = \"\",\n style,\n}: BillTasksDashboardProps): ReactElement {\n const columns = `minmax(150px,1.6fr) repeat(${buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`;\n return (\n <div\n className={`mbtk ${className}`.trim()}\n style={{ ...mindBillAppearanceStyle(appearance), \"--mbtk-cols\": columns, ...style } as CSSProperties}\n >\n <style>{css}</style>\n {heading ? <div className=\"mbtk-heading\">{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div> : null}\n {toolbar ? <div className=\"mbtk-toolbar\">{toolbar}</div> : null}\n {data.sections.map((section) => (\n <SectionCard\n key={section.id}\n section={section}\n buckets={buckets}\n emptyLabel={emptyLabel}\n onSelectCell={onSelectCell}\n />\n ))}\n <section className=\"mbtk-section is-grand\" aria-label={grandTotalLabel}>\n <div className=\"mbtk-grid mbtk-row mbtk-grand mbtk-totals\">\n <span className=\"mbtk-rowlabel\">{grandTotalLabel}</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{data.grandTotals[index] ?? 0}</span>\n ))}\n <span className=\"mbtk-total\">{data.grandTotal}</span>\n </div>\n </section>\n {footnote ? <p className=\"mbtk-footnote\">{footnote}</p> : null}\n </div>\n );\n}\n","\"use client\";\n\n// Submissions ribbon: a horizontal scrollable row of chips —\n// one per bill submission (Original Bill, Second Review, Duplicate Bill, …) —\n// each with an optional deadline badge and up to three small label/value meta\n// pairs (delivery route, sent date, acknowledgement). Purely presentational;\n// billSubmissionsRibbonFromHistory maps MindBill's presented history rows\n// (kind === \"submission\") into ribbon items.\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { BillHistoryEntry } from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillSubmissionRibbonItem = {\n id: string;\n /** \"Original Bill\" | \"Second Review\" | \"Duplicate Bill\" | … */\n label: string;\n /** Small rounded badge, e.g. \"Denial in 3 working days\". */\n badge?: string;\n /** Up to three label/value pairs rendered under the label. */\n meta?: Array<{ label: string; value: string }>;\n active?: boolean;\n href?: string;\n};\n\nexport type BillSubmissionsRibbonProps = SurfaceProps & {\n items: BillSubmissionRibbonItem[];\n onSelect?: (item: BillSubmissionRibbonItem) => void;\n};\n\n/** Maps a presented-history submission summary to its delivery route word. */\nexport function billSubmissionsRibbonDeliveryLabel(summary: string): string {\n if (/electronically sent/i.test(summary)) return \"e-Bill (837)\";\n if (/faxed/i.test(summary)) return \"Fax\";\n if (/emailed/i.test(summary)) return \"Email\";\n if (/mailed/i.test(summary)) return \"Mail\";\n return \"Sent\";\n}\n\nfunction ribbonDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/** Builds ribbon items from MindBill's presented history (submission rows only). */\nexport function billSubmissionsRibbonFromHistory(history: BillHistoryEntry[]): BillSubmissionRibbonItem[] {\n return history\n .filter((entry) => entry.kind === \"submission\")\n .map((entry) => ({\n id: entry.id,\n label: entry.action,\n meta: [\n { label: \"Delivery\", value: billSubmissionsRibbonDeliveryLabel(entry.summary) },\n { label: \"Sent\", value: ribbonDate(entry.date) },\n ],\n }));\n}\n\nconst css = `\n.mbsr{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;color:var(--mb-text);font-family:var(--mb-font);font-size:13px}\n.mbsr *{box-sizing:border-box}\n.mbsr-chip{flex:0 0 auto;display:grid;gap:7px;min-width:180px;max-width:280px;padding:11px 13px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer}\n.mbsr-chip:hover{border-color:var(--mb-accent)}\n.mbsr-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));box-shadow:0 0 0 1px var(--mb-accent) inset}\n.mbsr-top{display:flex;align-items:center;gap:8px;min-width:0}\n.mbsr-label{font-size:13.5px;font-weight:760;line-height:1.3;overflow-wrap:anywhere}\n.mbsr-badge{flex:0 0 auto;padding:2px 8px;border:1px solid color-mix(in srgb,var(--mb-warning) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-warning) 12%,var(--mb-surface));font-size:11px;font-weight:700;white-space:nowrap}\n.mbsr-meta{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,auto);gap:2px 14px;justify-content:start}\n.mbsr-meta>span{display:grid;gap:1px;min-width:0}\n.mbsr-meta i{color:var(--mb-muted);font-size:10.5px;font-style:normal;font-weight:800;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}\n.mbsr-meta b{font-size:12.5px;font-weight:700;white-space:nowrap}\n`;\n\nexport function BillSubmissionsRibbon({\n items,\n onSelect,\n appearance,\n className = \"\",\n style,\n}: BillSubmissionsRibbonProps): ReactElement {\n return (\n <div\n className={`mbsr ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"list\"\n aria-label=\"Bill submissions\"\n >\n <style>{css}</style>\n {items.map((item) => {\n const content = (\n <>\n <span className=\"mbsr-top\">\n <span className=\"mbsr-label\">{item.label}</span>\n {item.badge ? <span className=\"mbsr-badge\">{item.badge}</span> : null}\n </span>\n {item.meta?.length ? (\n <span className=\"mbsr-meta\">\n {item.meta.slice(0, 3).map((pair) => (\n <span key={pair.label}><i>{pair.label}</i><b>{pair.value}</b></span>\n ))}\n </span>\n ) : null}\n </>\n );\n return item.href ? (\n <a\n key={item.id}\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n href={item.href}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </a>\n ) : (\n <button\n key={item.id}\n type=\"button\"\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\n// \"Report Bill Status\" dialog: call the Claims Administrator /\n// Bill Review vendor (contacts in section 1), verify the submission receipt\n// the host renders in section 2, then record the reported payment status plus\n// the call details in section 3. Presentational: the host posts the resulting\n// ReportBillStatusInput through its own lifecycle action call.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n type ReportBillStatusId,\n type ReportBillStatusInput,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// The five status options and their input shape are framework-neutral and live\n// in @mindbill/browser; re-exported here so existing imports keep working.\nexport { REPORT_BILL_STATUS_OPTIONS } from \"@mindbill/browser\";\nexport type { ReportBillStatusId, ReportBillStatusInput } from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type ReportBillStatusDialogProps = SurfaceProps & {\n title?: ReactNode;\n claimsAdmin?: {\n name: string;\n hoursOfOperation?: string;\n phones?: Array<{ label: string; value: string }>;\n };\n billReview?: { name: string; phone?: string };\n /** Host renders its submission receipt, e.g. a BillHistoryTable. */\n receipt?: ReactNode;\n submitting?: boolean;\n error?: string | null;\n onCancel: () => void;\n onSave: (input: ReportBillStatusInput) => void;\n};\n\nconst css = `\n.mbbs-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbbs{display:grid;gap:18px;width:min(860px,100%);max-height:min(90vh,960px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:14px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbbs *{box-sizing:border-box}\n.mbbs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbbs-title{margin:0;font-size:20px;font-weight:760}\n.mbbs-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbbs-section h4{margin:0 0 4px;font-size:15px}\n.mbbs-copy{margin:0 0 10px;color:var(--mb-muted);font-size:13px}\n.mbbs-contacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.mbbs-contact{border:1px solid var(--mb-border);border-left:4px solid var(--mb-accent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));padding:12px 14px}\n.mbbs-contact h5{margin:0 0 6px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-contact dl{display:grid;gap:4px;margin:0}\n.mbbs-contact dl>div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px}\n.mbbs-contact dt{color:var(--mb-muted);font-size:12.5px}\n.mbbs-contact dd{margin:0;font-weight:700;overflow-wrap:anywhere}\n.mbbs-receipt{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:10px}\n.mbbs-report{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:18px}\n.mbbs-options{display:grid;gap:8px;align-content:start}\n.mbbs-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);cursor:pointer}\n.mbbs-option[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbbs-option input{margin-top:3px;accent-color:var(--mb-accent)}\n.mbbs-option-label{display:block;font-weight:750;line-height:1.35}\n.mbbs-option-copy{display:block;margin-top:2px;color:var(--mb-muted);font-size:12.5px;line-height:1.4}\n.mbbs-fields{display:grid;gap:10px;align-content:start}\n.mbbs-field{display:grid;gap:5px;font-size:13px}\n.mbbs-label{font-weight:650}\n.mbbs-input,.mbbs-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbbs-textarea{resize:vertical;min-height:74px}\n.mbbs-input:focus,.mbbs-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbbs-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbbs-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbbs-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbbs-save{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbbs-save:disabled,.mbbs-cancel:disabled{opacity:.6;cursor:not-allowed}\n@media(max-width:700px){.mbbs-contacts,.mbbs-report{grid-template-columns:1fr}}\n`;\n\nexport function ReportBillStatusDialog({\n title = \"Report Bill Status\",\n claimsAdmin,\n billReview,\n receipt,\n submitting = false,\n error = null,\n onCancel,\n onSave,\n appearance,\n className = \"\",\n style,\n}: ReportBillStatusDialogProps): ReactElement {\n const [status, setStatus] = useState<ReportBillStatusId | null>(null);\n const [company, setCompany] = useState(\"\");\n const [representativeName, setRepresentativeName] = useState(\"\");\n const [representativeRole, setRepresentativeRole] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n const [callReference, setCallReference] = useState(\"\");\n const [note, setNote] = useState(\"\");\n\n // Close on Escape (unless a save is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const save = () => {\n if (!status) return;\n onSave({\n status,\n ...(company.trim() ? { company: company.trim() } : {}),\n ...(representativeName.trim() ? { representativeName: representativeName.trim() } : {}),\n ...(representativeRole.trim() ? { representativeRole: representativeRole.trim() } : {}),\n ...(phone.trim() ? { phone: phone.trim() } : {}),\n ...(callReference.trim() ? { callReference: callReference.trim() } : {}),\n ...(note.trim() ? { note: note.trim() } : {}),\n });\n };\n\n const field = (\n label: string,\n value: string,\n onChange: (next: string) => void,\n ): ReactElement => (\n <label className=\"mbbs-field\" key={label}>\n <span className=\"mbbs-label\">{label}</span>\n <input className=\"mbbs-input\" value={value} disabled={submitting} onChange={(event) => onChange(event.target.value)} />\n </label>\n );\n\n return (\n <div\n className=\"mbbs-overlay\"\n role=\"presentation\"\n onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}\n >\n <style>{css}</style>\n <div\n className={`mbbs ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === \"string\" ? title : \"Report Bill Status\"}\n >\n <div className=\"mbbs-head\">\n <h3 className=\"mbbs-title\">{title}</h3>\n <button className=\"mbbs-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n {claimsAdmin || billReview ? (\n <div className=\"mbbs-section\">\n <h4>1. Call Claims Administrator or Bill Review</h4>\n <p className=\"mbbs-copy\">Contact the payer to request the payment status of this bill.</p>\n <div className=\"mbbs-contacts\">\n {claimsAdmin ? (\n <div className=\"mbbs-contact\">\n <h5>Claims Admin</h5>\n <dl>\n <div><dt>Name</dt><dd>{claimsAdmin.name}</dd></div>\n {claimsAdmin.hoursOfOperation ? <div><dt>Hours of Operation</dt><dd>{claimsAdmin.hoursOfOperation}</dd></div> : null}\n {(claimsAdmin.phones ?? []).map((entry) => (\n <div key={`${entry.label}-${entry.value}`}><dt>{entry.label}</dt><dd>{entry.value}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {billReview ? (\n <div className=\"mbbs-contact\">\n <h5>Bill Review</h5>\n <dl>\n <div><dt>Name</dt><dd>{billReview.name}</dd></div>\n {billReview.phone ? <div><dt>Phone</dt><dd>{billReview.phone}</dd></div> : null}\n </dl>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n\n {receipt ? (\n <div className=\"mbbs-section\">\n <h4>2. Review Bill Submission Receipt</h4>\n <p className=\"mbbs-copy\">Reference the submission receipt below when the payer asks how and when the bill was sent.</p>\n <div className=\"mbbs-receipt\">{receipt}</div>\n </div>\n ) : null}\n\n <div className=\"mbbs-section\">\n <h4>3. Report Bill Payment Status</h4>\n <p className=\"mbbs-copy\">Select the status reported by the payer, then record who provided it.</p>\n <div className=\"mbbs-report\">\n <div className=\"mbbs-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n {REPORT_BILL_STATUS_OPTIONS.map((option) => (\n <label key={option.id} className=\"mbbs-option\" data-selected={status === option.id}>\n <input\n type=\"radio\"\n name=\"mbbs-status\"\n value={option.id}\n checked={status === option.id}\n disabled={submitting}\n onChange={() => setStatus(option.id)}\n />\n <span>\n <span className=\"mbbs-option-label\">{option.label}</span>\n <span className=\"mbbs-option-copy\">{option.description}</span>\n </span>\n </label>\n ))}\n </div>\n <div className=\"mbbs-fields\">\n {field(\"Company\", company, setCompany)}\n {field(\"Name\", representativeName, setRepresentativeName)}\n {field(\"Role\", representativeRole, setRepresentativeRole)}\n {field(\"Phone Number\", phone, setPhone)}\n {field(\"Call Reference Number\", callReference, setCallReference)}\n <label className=\"mbbs-field\">\n <span className=\"mbbs-label\">Message Note</span>\n <textarea className=\"mbbs-textarea\" value={note} disabled={submitting} onChange={(event) => setNote(event.target.value)} />\n </label>\n </div>\n </div>\n </div>\n\n {error ? <div className=\"mbbs-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbbs-actions\">\n <button className=\"mbbs-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button className=\"mbbs-save\" type=\"button\" disabled={submitting || !status} onClick={save}>\n {submitting ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createOrganizationClient,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n} from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// Embeddable organization onboarding (INC-1470): capture the practice name,\n// tax ID, group NPI, billing provider, locations, and W-9 ONCE, saved straight\n// to MindBill through the partner browser session — the partner's users never\n// visit the MindBill dashboard. `BillingSettings` is the compact\n// edit-after-setup variant of the same surface.\n\nexport type OrganizationOnboardingProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** \"onboarding\" renders a stepper; \"settings\" stacks every section for editing. */\n variant?: \"onboarding\" | \"settings\";\n onSaved?: (profile: OrganizationProfileData) => void;\n onCompleted?: (profile: OrganizationProfileData) => void;\n onError?: (error: Error) => void;\n};\n\ntype StepId = \"practice\" | \"locations\" | \"w9\" | \"review\";\nconst STEPS: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n];\n\nconst css = `\n.mbob{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbob *{box-sizing:border-box}.mbob h2,.mbob h3,.mbob p{margin:0}\n.mbob-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);padding:24px}\n.mbob-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.mbob-head h2{font-size:22px}.mbob-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbob-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n.mbob-step{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-surface);padding:7px 13px;color:var(--mb-muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n.mbob-step[data-active=true]{border-color:var(--mb-accent);color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbob-step[data-done=true] i{color:#159447;font-style:normal}\n.mbob-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px}.mbob-span{grid-column:1/-1}\n.mbob-field{display:grid;gap:7px;font-size:13px;font-weight:720}\n.mbob-field input{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);padding:10px 12px;color:var(--mb-text);font:inherit;font-weight:450}\n.mbob-field input:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbob-subhead{margin:20px 0 12px!important;padding-top:16px;border-top:1px solid var(--mb-border);font-size:15px}\n.mbob-loc{display:grid;grid-template-columns:1.2fr 1.4fr .9fr .4fr .6fr auto auto;gap:10px;align-items:end;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding:12px 0}\n.mbob-loc:first-of-type{border-top:0}\n.mbob-primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--mb-muted);white-space:nowrap;padding-bottom:12px}\n.mbob-remove{border:0;background:transparent;color:var(--mb-muted);font-size:20px;cursor:pointer;padding-bottom:8px}\n.mbob-add,.mbob-secondary{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);padding:10px 14px;color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}\n.mbob-drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);text-align:center;cursor:pointer;position:relative}\n.mbob-drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n.mbob-drop span{color:var(--mb-muted);font-size:13px}\n.mbob-w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid #9fd6b4;border-radius:var(--mb-control-radius);background:#f3fcf6;padding:12px 14px;margin-bottom:14px}\n.mbob-w9-current span{color:var(--mb-muted);font-size:13px}\n.mbob-check{display:grid;gap:9px}\n.mbob-check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:11px 14px}\n.mbob-check-item[data-complete=true]{border-color:#9fd6b4;background:#f3fcf6}\n.mbob-check-item i{font-style:normal}\n.mbob-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n.mbob-save{min-width:170px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n.mbob-save:disabled{opacity:.6;cursor:wait}\n.mbob-error{margin-top:14px;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;color:var(--mb-danger)}\n.mbob-status{color:var(--mb-muted)}\n.mbob-done{color:#159447;font-weight:750}\n@media(max-width:820px){.mbob-grid{grid-template-columns:1fr}.mbob-span{grid-column:auto}.mbob-loc{grid-template-columns:1fr 1fr;align-items:center}.mbob-loc>*{grid-column:auto}}\n`;\n\nconst blankLocation = (): OrganizationLocationInput => ({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function OrganizationOnboarding({\n appearance,\n className = \"\",\n style,\n sessionEndpoint = \"/api/mindbill/session\",\n getSession,\n apiBaseUrl,\n heading = \"Billing setup\",\n description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\",\n variant = \"onboarding\",\n onSaved,\n onCompleted,\n onError,\n}: OrganizationOnboardingProps): ReactElement {\n const client: OrganizationClient = useMemo(\n () =>\n createOrganizationClient({\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n }),\n [sessionEndpoint, getSession, apiBaseUrl],\n );\n\n const [profile, setProfile] = useState<OrganizationProfileData | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [step, setStep] = useState<StepId>(\"practice\");\n const [identity, setIdentity] = useState({ name: \"\", legalName: \"\", taxId: \"\", npi: \"\", phone: \"\", email: \"\" });\n const [provider, setProvider] = useState<OrganizationBillingProviderInput>({ name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" });\n const [locations, setLocations] = useState<OrganizationLocationInput[]>([blankLocation()]);\n const [w9File, setW9File] = useState<File | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [savedStep, setSavedStep] = useState<Record<string, boolean>>({});\n const completedFired = useRef(false);\n\n const adoptProfile = useCallback((next: OrganizationProfileData) => {\n setProfile(next);\n setIdentity((current) => ({\n name: next.practiceIdentity.name ?? current.name,\n legalName: next.practiceIdentity.legalName ?? current.legalName,\n taxId: next.practiceIdentity.taxId ?? current.taxId,\n npi: next.practiceIdentity.npi ?? current.npi,\n phone: next.practiceIdentity.phone ?? current.phone,\n email: next.practiceIdentity.email ?? current.email,\n }));\n if (next.billingProviders[0]) setProvider({ billType: \"Professional\", ...next.billingProviders[0] });\n if (next.locations.length) setLocations(next.locations.map((item) => ({ ...item })));\n if (next.onboarding.complete && !completedFired.current) {\n completedFired.current = true;\n onCompleted?.(next);\n }\n }, [onCompleted]);\n\n useEffect(() => {\n let alive = true;\n client.getOrganization()\n .then((next) => { if (alive) { setLoadError(null); adoptProfile(next); } })\n .catch((caught) => {\n if (!alive) return;\n const failure = caught instanceof Error ? caught : new Error(\"The organization could not be loaded.\");\n setLoadError(failure.message);\n onError?.(failure);\n });\n return () => { alive = false; };\n }, [client, adoptProfile, onError]);\n\n const run = async (work: () => Promise<OrganizationProfileData>, stepId: StepId) => {\n setSaving(true);\n setError(null);\n try {\n const next = await work();\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, [stepId]: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") {\n const order: StepId[] = [\"practice\", \"locations\", \"w9\", \"review\"];\n const nextStep = order[order.indexOf(stepId) + 1];\n if (nextStep) setStep(nextStep);\n }\n } catch (caught) {\n const failure = caught instanceof Error ? caught : new Error(\"Saving failed.\");\n setError(failure.message);\n onError?.(failure);\n } finally {\n setSaving(false);\n }\n };\n\n const savePractice = () =>\n run(() =>\n client.saveBillingProfile({\n practiceIdentity: identity,\n ...(provider.name.trim() || provider.taxId.trim() || provider.npi.trim() ? { billingProviders: [provider] } : {}),\n }), \"practice\");\n const saveLocations = () =>\n run(() => client.saveLocations(locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n const saveW9 = () =>\n run(async () => {\n if (!w9File) throw new Error(\"Choose the practice W-9 PDF first.\");\n return client.saveW9({ filename: w9File.name, contentBase64: await fileToBase64(w9File) });\n }, \"w9\");\n\n const field = (label: string, value: string, onChange: (value: string) => void, span = false, placeholder = \"\") => (\n <label className={`mbob-field${span ? \" mbob-span\" : \"\"}`}>{label}\n <input value={value} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} disabled={saving} />\n </label>\n );\n\n const setLocation = (index: number, patch: Partial<OrganizationLocationInput>) =>\n setLocations((current) => current.map((item, itemIndex) => {\n if (itemIndex !== index) return patch.isPrimary ? { ...item, isPrimary: false } : item;\n return { ...item, ...patch };\n }));\n\n const practiceSection = (\n <div>\n <div className=\"mbob-grid\">\n {field(\"Practice name\", identity.name, (name) => setIdentity((c) => ({ ...c, name })))}\n {field(\"Legal name\", identity.legalName, (legalName) => setIdentity((c) => ({ ...c, legalName })))}\n {field(\"Tax ID (EIN)\", identity.taxId, (taxId) => setIdentity((c) => ({ ...c, taxId })), false, \"94-1234567\")}\n {field(\"Group NPI\", identity.npi, (npi) => setIdentity((c) => ({ ...c, npi })))}\n {field(\"Phone\", identity.phone, (phone) => setIdentity((c) => ({ ...c, phone })))}\n {field(\"Email\", identity.email, (email) => setIdentity((c) => ({ ...c, email })))}\n </div>\n <h3 className=\"mbob-subhead\">Billing provider (pay-to)</h3>\n <div className=\"mbob-grid\">\n {field(\"Billing provider name\", provider.name, (name) => setProvider((c) => ({ ...c, name })))}\n {field(\"Billing tax ID\", provider.taxId, (taxId) => setProvider((c) => ({ ...c, taxId })))}\n {field(\"Billing NPI\", provider.npi, (npi) => setProvider((c) => ({ ...c, npi })))}\n {field(\"Billing phone\", provider.phone ?? \"\", (phone) => setProvider((c) => ({ ...c, phone })))}\n {field(\"Street\", provider.billingStreet ?? \"\", (billingStreet) => setProvider((c) => ({ ...c, billingStreet })), true)}\n {field(\"City\", provider.billingCity ?? \"\", (billingCity) => setProvider((c) => ({ ...c, billingCity })))}\n {field(\"State\", provider.billingState ?? \"\", (billingState) => setProvider((c) => ({ ...c, billingState: billingState.toUpperCase().slice(0, 2) })))}\n {field(\"ZIP\", provider.billingZip ?? \"\", (billingZip) => setProvider((c) => ({ ...c, billingZip })))}\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"practice\"] ? \"Saved to MindBill.\" : \"Saved once, used on every bill.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={savePractice}>{saving ? \"Saving…\" : \"Save practice\"}</button></div>\n </div>\n );\n\n const locationsSection = (\n <div>\n {locations.map((location, index) => (\n <div className=\"mbob-loc\" key={location.id ?? index}>\n {field(\"Name\", location.name, (name) => setLocation(index, { name }))}\n {field(\"Street\", location.street, (street) => setLocation(index, { street }))}\n {field(\"City\", location.city, (city) => setLocation(index, { city }))}\n {field(\"State\", location.state, (state) => setLocation(index, { state: state.toUpperCase().slice(0, 2) }))}\n {field(\"ZIP\", location.zip, (zip) => setLocation(index, { zip }))}\n <label className=\"mbob-primary\"><input type=\"radio\" name=\"mbob-primary\" checked={location.isPrimary === true} onChange={() => setLocation(index, { isPrimary: true })} /> Primary</label>\n <button className=\"mbob-remove\" type=\"button\" aria-label=\"Remove location\" onClick={() => setLocations((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button>\n </div>\n ))}\n <button className=\"mbob-add\" type=\"button\" onClick={() => setLocations((current) => [...current, blankLocation()])}>+ Add location</button>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"locations\"] ? \"Saved to MindBill.\" : \"Where evaluations happen.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={saveLocations}>{saving ? \"Saving…\" : \"Save locations\"}</button></div>\n </div>\n );\n\n const w9Section = (\n <div>\n {profile?.w9 ? (\n <div className=\"mbob-w9-current\"><div><strong>{profile.w9.filename}</strong><span> · added {profile.w9.addDate}</span></div><span>Rides on every bill automatically</span></div>\n ) : null}\n <label className=\"mbob-drop\">\n <input type=\"file\" accept=\"application/pdf,.pdf\" onChange={(event) => setW9File(event.target.files?.[0] ?? null)} />\n <strong>{w9File ? w9File.name : profile?.w9 ? \"Replace the W-9 PDF\" : \"Drop the practice W-9 PDF here, or click to choose\"}</strong>\n <span>The W-9 is auto-attached to every submission.</span>\n </label>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"w9\"] ? \"Saved to MindBill.\" : \"\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving || !w9File} onClick={saveW9}>{saving ? \"Uploading…\" : \"Save W-9\"}</button></div>\n </div>\n );\n\n const reviewSection = (\n <div className=\"mbob-check\">\n {(profile?.onboarding.checklist ?? []).map((item) => (\n <div className=\"mbob-check-item\" key={item.id} data-complete={item.complete}>\n <i>{item.complete ? \"✓\" : \"•\"}</i><span>{item.label}</span>\n </div>\n ))}\n {profile?.onboarding.complete ? <p className=\"mbob-done\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> : <p className=\"mbob-status\">Items above complete themselves as each section is saved.</p>}\n </div>\n );\n\n const sections: Record<StepId, ReactElement> = { practice: practiceSection, locations: locationsSection, w9: w9Section, review: reviewSection };\n\n return (\n <div className={`mbob ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbob-card\">\n <div className=\"mbob-head\"><div><h2>{heading}</h2><p className=\"mbob-copy\">{description}</p></div></div>\n {loadError ? <div className=\"mbob-error\" role=\"alert\">{loadError}</div> : null}\n {variant === \"onboarding\" ? (\n <>\n <div className=\"mbob-steps\">\n {STEPS.map((item) => (\n <button className=\"mbob-step\" type=\"button\" key={item.id} data-active={step === item.id} data-done={Boolean(savedStep[item.id])} onClick={() => setStep(item.id)}>\n <i>{savedStep[item.id] ? \"✓\" : \"\"}</i>{item.label}\n </button>\n ))}\n </div>\n {sections[step]}\n </>\n ) : (\n <>\n {practiceSection}\n <h3 className=\"mbob-subhead\">Locations</h3>\n {locationsSection}\n <h3 className=\"mbob-subhead\">Practice W-9</h3>\n {w9Section}\n <h3 className=\"mbob-subhead\">Checklist</h3>\n {reviewSection}\n </>\n )}\n {error ? <div className=\"mbob-error\" role=\"alert\">{error}</div> : null}\n </div>\n </div>\n );\n}\n\n/** Compact edit-after-setup variant of {@link OrganizationOnboarding}. */\nexport function BillingSettings(props: Omit<OrganizationOnboardingProps, \"variant\">): ReactElement {\n return (\n <OrganizationOnboarding\n heading=\"Billing settings\"\n description=\"Practice identity, locations, and the W-9 used on every bill.\"\n {...props}\n variant=\"settings\"\n />\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 { useState, type CSSProperties, type ReactElement } from \"react\";\nimport type {\n BillEorDocument,\n BillHistoryEntry,\n BillLifecycleAction,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillPaymentRecord,\n BillRejection,\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.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></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 BillHistoryTableProps = SurfaceProps & {\n entries: readonly BillHistoryEntry[];\n emptyLabel?: string;\n /** Formats the Date column. Defaults to MM/DD/YYYY. */\n formatDate?: (iso: string) => string;\n /** Resolve a clickable href for a submitted document; return null for plain text. */\n documentHref?: (doc: { id: string; filename: string }) => string | null;\n /** Open an authenticated submitted document in a new tab when no direct href is available. */\n onOpenDocument?: (doc: { id: string; filename: string }) => void | Promise<void>;\n};\n\nfunction historyDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/**\n * The Bill History table: Date / Action / User / Details rows where\n * submissions are pale-blue expandable rows (documents + compliance due dates), notes\n * are pale-yellow, and 277 responses expand into decoded status-code sentences. The\n * rows come pre-worded from the MindBill API (`BillLifecycleData.history`).\n */\nexport function BillHistoryTable({ entries, emptyLabel = \"No bill history yet.\", appearance, className, style, formatDate = historyDate, documentHref, onOpenDocument }: BillHistoryTableProps): ReactElement {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n return (\n <section className={classes(\"mb-surface mb-history\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill history\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submissions, payer responses, follow-up, and payments.</span></div></header>\n {!entries.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <div className=\"mb-history-table\">\n <div className=\"mb-history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul className=\"mb-history-rows\">\n {entries.map((entry) => {\n const expandable = Boolean(entry.details);\n const isOpen = expandable && Boolean(expanded[entry.id]);\n const details = entry.details;\n const lineContents = <>\n <span className=\"mb-history-date\">{formatDate(entry.date)}</span>\n <span className=\"mb-history-action\">{entry.action}</span>\n <span className=\"mb-history-actor\">{entry.actor ?? \"—\"}</span>\n <span className=\"mb-history-summary\">\n {expandable ? <i className={`mb-history-caret${isOpen ? \" is-open\" : \"\"}`} aria-hidden=\"true\" /> : null}\n {entry.summary}\n </span>\n </>;\n return (\n <li key={entry.id} className={`mb-history-row is-${entry.tone}`}>\n {expandable ? <button\n type=\"button\"\n className=\"mb-history-line is-expandable\"\n aria-expanded={isOpen}\n onClick={() => setExpanded((current) => ({ ...current, [entry.id]: !current[entry.id] }))}\n >{lineContents}</button> : <div className=\"mb-history-line\">{lineContents}</div>}\n {isOpen && details ? (\n <div className=\"mb-history-details\">\n {details.rows?.length ? (\n <dl className=\"mb-history-kv\">\n {details.rows.map((row) => (\n <div key={`${row.label}-${row.value}`}><dt>{row.label}</dt><dd>{row.value}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.documents?.length ? (\n <div className=\"mb-history-kv\"><div><dt>Documents</dt><dd>\n {details.documents.map((doc) => {\n const href = documentHref?.(doc) ?? null;\n return href\n ? <a key={doc.id} className=\"mb-history-doc\" href={href} target=\"_blank\" rel=\"noreferrer\">{doc.filename}</a>\n : onOpenDocument\n ? <button key={doc.id} type=\"button\" className=\"mb-history-doc\" onClick={() => void onOpenDocument(doc)}>{doc.filename}</button>\n : <span key={doc.id} className=\"mb-history-doc\">{doc.filename}</span>;\n })}\n </dd></div></div>\n ) : null}\n {details.codes?.length ? (\n <dl className=\"mb-history-codes\">\n {details.codes.map((code) => (\n <div key={code.code}><dt>{code.code}</dt><dd>{code.text}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.complianceDueDates?.length ? (\n <div className=\"mb-history-due\">\n <em>Compliance Due Dates</em>\n <dl>\n {details.complianceDueDates.map((due) => (\n <div key={`${due.date}-${due.text}`}><dt>{formatDate(due.date)}</dt><dd>{due.text}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {details.text ? <p className=\"mb-history-text\">{details.text}</p> : null}\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </section>\n );\n}\n\nexport type BillLifecycleStage = \"submitted\" | \"accepted\" | \"processed\" | \"closed\";\n\nconst lifecycleStages: Array<{ id: BillLifecycleStage; label: string }> = [\n { id: \"submitted\", label: \"Sent\" },\n { id: \"accepted\", label: \"Accepted\" },\n { id: \"processed\", label: \"Processed\" },\n { id: \"closed\", label: \"Closed\" },\n];\n\nexport type BillLifecycleProgressStep = {\n id: string;\n label: string;\n status: \"complete\" | \"current\" | \"upcoming\";\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(\"appeal\") || value.includes(\"reject\")) return \"submitted\";\n if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"partial\") || value.includes(\"response\") || value.includes(\"ibr\") || value.includes(\"lien\")) return \"processed\";\n if (value.includes(\"accepted\")) return \"accepted\";\n return \"submitted\";\n}\n\nexport type BillLifecycleProgressStepsOptions = {\n /**\n * Render pre-submission bills (\"draft\") as a dedicated leading Draft stage\n * ahead of the Sent→Closed rail. Off by default: hosts whose bills are always\n * already submitted (the typical partner embed) never see a Draft stage, and\n * without the flag a draft state keeps the legacy rendering (Sent as the\n * current stage). Post-submission states render identically either way.\n */\n draftStage?: boolean;\n};\n\n/** True when the lifecycle state is a pre-submission draft. */\nexport function isBillLifecycleDraft(state: string): boolean {\n return state.toLowerCase() === \"draft\";\n}\n\n/** Builds the progress rail for a lifecycle state, including terminal exception paths. */\nexport function billLifecycleProgressSteps(state: string, options?: BillLifecycleProgressStepsOptions): BillLifecycleProgressStep[] {\n if (state.toLowerCase() === \"rejected\") {\n return [\n { id: \"submitted\", label: \"Sent\", status: \"complete\" },\n { id: \"rejected\", label: \"Rejected\", status: \"current\" },\n ];\n }\n\n if (options?.draftStage && isBillLifecycleDraft(state)) {\n return [\n { id: \"draft\", label: \"Draft\", status: \"current\" },\n ...lifecycleStages.map((stage) => ({ ...stage, status: \"upcoming\" as const })),\n ];\n }\n\n const current = billLifecycleStage(state);\n const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);\n return lifecycleStages.map((stage, index) => ({\n ...stage,\n status:\n index < currentIndex\n ? \"complete\"\n : index === currentIndex\n ? \"current\"\n : \"upcoming\",\n }));\n}\n\n/** Returns the end-user label for a canonical lifecycle state. */\nexport function billLifecycleDisplayLabel(state: string, nativeStatus?: string): string {\n const value = state.toLowerCase();\n if (value === \"submitted\") return \"Sent\";\n if (value === \"second_review\") return \"Second Review sent\";\n if (value === \"rejected\") return \"Rejected\";\n if (value === \"denied\") return \"Denied\";\n if (value === \"partially_paid\") return \"Partially paid\";\n if (value === \"written_off\") return \"Written off\";\n return humanize(state || nativeStatus || \"submitted\");\n}\n\nexport type BillLifecycleProgressProps = SurfaceProps & {\n state: string;\n nativeStatus?: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n /** Opt-in leading Draft stage for pre-submission bills. See {@link BillLifecycleProgressStepsOptions}. */\n draftStage?: boolean;\n};\n\nexport function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, draftStage, appearance, className, style }: BillLifecycleProgressProps): ReactElement {\n const rejected = state.toLowerCase() === \"rejected\";\n const draft = Boolean(draftStage) && isBillLifecycleDraft(state);\n const steps = billLifecycleProgressSteps(state, { draftStage: Boolean(draftStage) });\n return (\n <section className={classes(`mb-surface mb-progress${rejected ? \" is-rejected\" : \"\"}`, className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill lifecycle\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{billLifecycleDisplayLabel(state, nativeStatus)}</strong><span>{rejected ? \"The payer rejected this submission.\" : draft ? \"Not yet sent\" : `${submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : \"Submitted\"}${typeof agingDays === \"number\" ? ` · ${agingDays} days old` : \"\"}`}</span></div></header>\n <ol className=\"mb-progress-list\" style={{ gridTemplateColumns: `repeat(${steps.length}, minmax(0, 1fr))` }}>\n {steps.map((step, index) => (\n <li key={step.id} className={`is-${step.status}`} aria-current={step.status === \"current\" ? \"step\" : undefined}>\n <span aria-hidden=\"true\">{step.status === \"complete\" ? \"✓\" : rejected && step.status === \"current\" ? \"!\" : index + 1}</span>\n <b>{step.label}</b>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nexport type BillRejectionNoticeProps = SurfaceProps & {\n rejection: BillRejection;\n title?: string;\n submittedAt?: string | null;\n formatDate?: (createdAt: string) => string;\n};\n\n/** Builds concise source-aware copy without inventing a clearinghouse name. */\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n\n/** A prominent, end-user-readable explanation of a rejected submission. */\nexport function BillRejectionNotice({ rejection, title = \"Rejected — action required\", submittedAt, appearance, className, style, formatDate = defaultFormatDate }: BillRejectionNoticeProps): ReactElement {\n const issues = rejection.issues?.length\n ? rejection.issues\n : [{ code: rejection.code, description: rejection.reason }];\n const hasCodes = issues.some((issue) => Boolean(issue.code));\n\n return (\n <section className={classes(\"mb-surface mb-rejection-notice\", className)} style={mindBillAppearanceStyle(appearance, style)} role=\"alert\" aria-label=\"Bill rejection reasons\">\n <style>{lifecycleSurfaceStyles}</style>\n <div className=\"mb-rejection-overview\">\n <header className=\"mb-rejection-heading\">\n <span className=\"mb-rejection-icon\" aria-hidden=\"true\">!</span>\n <div><strong>{title}</strong><span>Fix the {issues.length === 1 ? \"issue\" : \"issues\"} below, then resubmit.</span></div>\n </header>\n <ol className=\"mb-rejection-progress\" aria-label=\"Submission status\">\n <li className=\"is-complete\"><span aria-hidden=\"true\">✓</span><b>Sent</b>{submittedAt ? <small>{formatDate(submittedAt)}</small> : null}</li>\n <li className=\"is-rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>{rejection.receivedAt ? <small>{formatDate(rejection.receivedAt)}</small> : null}</li>\n </ol>\n </div>\n <div className=\"mb-rejection-issues\" aria-label=\"Rejection reasons\">\n <div className=\"mb-rejection-issues-heading\">\n <strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong>\n <span>{billRejectionIssueSummary(rejection, issues.length)}</span>\n </div>\n <ol aria-label={`${issues.length} rejection ${issues.length === 1 ? \"reason\" : \"reasons\"}`}>\n {issues.map((issue, index) => (\n <li key={`${issue.code ?? \"issue\"}-${index}`}>\n <span className=\"mb-rejection-bullet\" aria-hidden=\"true\" />\n <p>{issue.description}</p>\n {issue.code ? <span className=\"mb-rejection-code\">{issue.code}</span> : null}\n </li>\n ))}\n </ol>\n {hasCodes ? <p className=\"mb-rejection-code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> : null}\n </div>\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 type BillExplanationOfReviewProps = SurfaceProps & {\n remittance: BillRemittanceSummary;\n eors: readonly BillEorDocument[];\n payments: readonly BillPaymentRecord[];\n submittedAt?: string | null;\n onOpenEor?: (document: BillEorDocument) => void | Promise<void>;\n};\n\n/**\n * A consolidated payer-response surface: financial summary, denial context,\n * EOR documents, and posted payments in one familiar reconciliation view.\n */\nexport function BillExplanationOfReview({\n remittance,\n eors,\n payments,\n submittedAt,\n onOpenEor,\n appearance,\n className,\n style,\n}: BillExplanationOfReviewProps): ReactElement {\n const rows = payments.length ? payments : [null];\n return (\n <section className={classes(\"mb-surface mb-eor-review\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Explanation of Review and payments\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Explanation of Review</strong><span>Payer response and payment reconciliation.</span></div></header>\n <dl className=\"mb-eor-metrics\">\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div className=\"is-balance\"><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n <div className=\"mb-eor-table-wrap\">\n <table className=\"mb-eor-table\">\n <thead>\n <tr className=\"mb-eor-groups\"><th colSpan={2}>Submission</th><th colSpan={5}>EOR payment information</th><th colSpan={2}>EOR post</th><th>EOR</th></tr>\n <tr><th>Submission</th><th>Submission payment</th><th>Payment method</th><th>Reference</th><th>Effective date</th><th>Payment total</th><th>Deposit date</th><th>Post date</th><th>Source</th><th>Document</th></tr>\n </thead>\n <tbody>{rows.map((payment, index) => {\n const eor = eors[index] ?? eors[0];\n return <tr key={payment?.id ?? `empty-${index}`}>\n <td data-label=\"Submission\"><strong>Original bill</strong>{submittedAt ? <span>Sent {defaultFormatDate(submittedAt)}</span> : null}</td>\n <td data-label=\"Submission payment\">{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</td>\n <td data-label=\"Payment method\">{payment ? humanize(payment.method) : \"—\"}</td>\n <td data-label=\"Reference\">{payment?.checkNumber || \"—\"}</td>\n <td data-label=\"Effective date\">{payment ? payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt) : \"—\"}</td>\n <td data-label=\"Payment total\">{payment ? currency(payment.amount) : currency(0)}</td>\n <td data-label=\"Deposit date\">{payment?.depositDate || \"Not recorded\"}</td>\n <td data-label=\"Post date\">{payment ? defaultFormatDate(payment.postedAt) : eor ? defaultFormatDate(eor.addedAt) : \"—\"}</td>\n <td data-label=\"Source\">{payment ? payment.source.toUpperCase() : eor ? \"EOR\" : \"—\"}</td>\n <td data-label=\"EOR\">{eor && onOpenEor ? <button type=\"button\" className=\"mb-eor-link\" onClick={() => void onOpenEor(eor)}>{eor.filename}</button> : eor?.filename || \"—\"}</td>\n </tr>;\n })}</tbody>\n </table>\n </div>\n {eors.length > rows.length ? <div className=\"mb-eor-documents\">{eors.slice(rows.length).map((eor) => <button type=\"button\" key={eor.id} onClick={() => void onOpenEor?.(eor)}>{eor.filename}</button>)}</div> : null}\n </section>\n );\n}\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>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Balance due</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>Funds recorded against this bill.</span></div></header>\n {!payments.length ? <p className=\"mb-empty\">No payments posted.</p> : <div className=\"mb-payment-list\">{payments.map((payment) => {\n const additional = payment.feeAmount ?? 0;\n return <article key={payment.id}>\n <div className=\"mb-payment-amount\"><strong>{currency(payment.amount)}</strong><span>Total received</span></div>\n <dl>\n <div><dt>Applied to bill</dt><dd>{currency(payment.principalAmount)}</dd></div>\n {additional > 0 ? <div><dt>Penalty & interest</dt><dd>{currency(additional)}</dd></div> : null}\n <div><dt>Method</dt><dd>{payment.method.toUpperCase()}</dd></div>\n <div><dt>Reference</dt><dd>{payment.checkNumber || \"—\"}</dd></div>\n <div><dt>Effective date</dt><dd>{payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt)}</dd></div>\n <div><dt>Deposit date</dt><dd>{payment.depositDate || \"Not recorded\"}</dd></div>\n <div><dt>Posted</dt><dd>{defaultFormatDate(payment.postedAt)} · {payment.source.toUpperCase()}</dd></div>\n <div><dt>Status</dt><dd>{humanize(payment.status || \"posted\")}</dd></div>\n </dl>\n {payment.feeReason ? <p>{payment.feeReason}</p> : null}\n {payment.note ? <p>{payment.note}</p> : null}\n </article>;\n })}</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(4,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-progress.is-rejected{border-color:color-mix(in srgb,var(--mb-danger) 34%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 3%,var(--mb-surface));box-shadow:0 8px 24px color-mix(in srgb,var(--mb-danger) 8%,transparent)}.mb-progress.is-rejected .mb-surface-heading strong,.mb-progress.is-rejected .mb-progress-list li.is-current{color:var(--mb-danger)}.mb-progress.is-rejected .mb-progress-list li.is-current>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}\n.mb-rejection-notice{border:1px solid color-mix(in srgb,var(--mb-danger) 30%,var(--mb-border));border-left:4px solid var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 5%,var(--mb-surface));box-shadow:0 14px 38px color-mix(in srgb,var(--mb-danger) 9%,transparent);padding:26px 28px 18px}.mb-rejection-overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}.mb-rejection-heading{display:flex;align-items:flex-start;gap:14px}.mb-rejection-heading>div{display:grid;gap:5px}.mb-rejection-heading strong{color:var(--mb-danger);font-size:19px;line-height:1.25}.mb-rejection-heading span{color:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-text));font-size:14px;line-height:1.45}.mb-rejection-icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--mb-danger);box-shadow:0 5px 14px color-mix(in srgb,var(--mb-danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.mb-rejection-progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.mb-rejection-progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;color:var(--mb-text);font-size:12px}.mb-rejection-progress li:first-child::after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-border))}.mb-rejection-progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--mb-danger) 32%,var(--mb-border));border-radius:50%;background:var(--mb-surface);color:var(--mb-danger);font-size:16px;font-weight:900}.mb-rejection-progress li.is-rejected>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}.mb-rejection-progress b{font-size:13px}.mb-rejection-progress small{color:var(--mb-muted);font-size:11px;line-height:1.3}.mb-rejection-issues{border:1px solid color-mix(in srgb,var(--mb-danger) 19%,var(--mb-border));border-radius:12px;background:color-mix(in srgb,var(--mb-danger) 2%,var(--mb-surface));overflow:hidden}.mb-rejection-issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mb-danger) 14%,var(--mb-border))}.mb-rejection-issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.mb-rejection-issues-heading strong>span{color:var(--mb-danger);font-size:17px}.mb-rejection-issues-heading>span{color:var(--mb-muted);font-size:12px;text-align:right}.mb-rejection-issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.mb-rejection-issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--mb-danger) 11%,var(--mb-border));border-radius:8px;background:color-mix(in srgb,var(--mb-danger) 1%,var(--mb-surface));box-shadow:0 1px 3px rgba(23,39,48,.04)}.mb-rejection-bullet{width:7px;height:7px;border-radius:50%;background:var(--mb-danger)}.mb-rejection-issues p{margin:0;font-size:14px;line-height:1.45}.mb-rejection-code{justify-self:end;border:1px solid color-mix(in srgb,var(--mb-danger) 20%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-danger) 6%,var(--mb-surface));color:var(--mb-danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.mb-rejection-code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--mb-muted);font-size:11px}.mb-rejection-code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}\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-remittance dl{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:1px;background:var(--mb-border)}.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-remittance dl>div{border:0;background:var(--mb-surface)}.mb-snapshot dl>div:nth-child(3n+1),.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt,.mb-payment-list 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,.mb-payment-list 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:minmax(120px,.35fr) 1fr;gap:14px 24px;padding:16px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-amount{display:grid;align-content:start;gap:2px}.mb-payment-amount strong{font-size:1.2rem}.mb-payment-list article>dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}.mb-payment-list article>dl>div{display:grid;align-content:start;gap:3px}.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.mb-eor-review{border-top:4px solid var(--mb-accent);padding-top:17px}.mb-eor-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 18px;border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-eor-metrics>div{display:grid;gap:4px;padding:13px 15px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+4){border-top:0}.mb-eor-metrics>div:nth-child(4n+1){border-left:0}.mb-eor-metrics dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-eor-metrics dd{margin:0;font-size:15px;font-weight:800}.mb-eor-metrics .is-balance{background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-eor-table-wrap{overflow-x:auto;border:1px solid var(--mb-border);border-radius:10px}.mb-eor-table{width:100%;min-width:1080px;border-collapse:collapse;font-size:12px}.mb-eor-table th,.mb-eor-table td{padding:10px 12px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border);text-align:left;vertical-align:top}.mb-eor-table th:first-child,.mb-eor-table td:first-child{border-left:0}.mb-eor-table thead th{background:var(--mb-soft);color:var(--mb-muted);font-weight:800}.mb-eor-table .mb-eor-groups th{border-top:0;background:color-mix(in srgb,var(--mb-accent) 13%,var(--mb-surface));color:var(--mb-text);text-align:center}.mb-eor-table td>strong,.mb-eor-table td>span{display:block}.mb-eor-table td>span{margin-top:3px;color:var(--mb-muted)}.mb-eor-link,.mb-eor-documents button{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:750;padding:0;text-align:left;text-decoration:underline;cursor:pointer;overflow-wrap:anywhere}.mb-eor-documents{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}\n.mb-history-table{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}\n.mb-history-head{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;padding:8px 14px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}\n.mb-history-rows{list-style:none;margin:0;padding:0}.mb-history-row{border-top:1px solid var(--mb-border)}\n.mb-history-row.is-submission{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface))}\n.mb-history-row.is-note{background:color-mix(in srgb,#f2c344 13%,var(--mb-surface))}\n.mb-history-line{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left}\n.mb-history-line.is-expandable{cursor:pointer}.mb-history-line.is-expandable:hover .mb-history-summary{text-decoration:underline}\n.mb-history-date{color:var(--mb-muted);font-size:13px}.mb-history-action{font-size:13.5px;font-weight:750}\n.mb-history-row.is-problem .mb-history-action{color:var(--mb-danger)}\n.mb-history-actor{color:var(--mb-muted);font-size:13px;overflow-wrap:anywhere}\n.mb-history-summary{display:flex;align-items:flex-start;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n.mb-history-caret{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--mb-muted);transition:transform .12s ease}\n.mb-history-caret.is-open{transform:rotate(90deg)}\n.mb-history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}\n.mb-history-kv,.mb-history-codes,.mb-history-due dl{display:grid;gap:4px;margin:0}\n.mb-history-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-kv dt{font-weight:750}.mb-history-kv dd{margin:0;overflow-wrap:anywhere}.mb-history-kv dd a{color:var(--mb-accent)}.mb-history-doc{display:block}.mb-history-kv button.mb-history-doc{border:0;background:transparent;color:var(--mb-accent);font:inherit;padding:0;text-align:left;text-decoration:underline;cursor:pointer}\n.mb-history-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.mb-history-codes dt{font-weight:800}.mb-history-codes dd{margin:0}\n.mb-history-due{margin-top:8px}.mb-history-due em{display:block;color:var(--mb-muted);font-size:12.5px;margin-bottom:4px}\n.mb-history-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-due dt{font-weight:750}.mb-history-due dd{margin:0}\n.mb-history-text{margin:8px 0 0;color:var(--mb-text);white-space:pre-wrap}\n@media(max-width:700px){.mb-history-head{display:none}.mb-history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.mb-history-details{padding:4px 12px 12px}.mb-history-kv>div,.mb-history-due dl>div{grid-template-columns:1fr}}\n@media(max-width:700px){.mb-surface.mb-progress{padding:16px 10px}.mb-progress-list{grid-template-columns:repeat(4,minmax(0,1fr))}.mb-progress-list li{display:grid;grid-template-columns:1fr;align-items:start;gap:6px;text-align:center;font-size:10px;min-width:0}.mb-progress-list li b{font-size:10px;white-space:nowrap}.mb-progress-list li:not(:last-child)::after{left:calc(50% + 12px);right:calc(-50% + 12px);top:11px;bottom:auto;width:auto;height:2px}.mb-progress-list li>span{grid-row:auto;width:24px;height:24px;font-size:11px}.mb-rejection-notice{padding:18px 14px 14px}.mb-rejection-overview{grid-template-columns:1fr;gap:18px}.mb-rejection-heading strong{font-size:17px}.mb-rejection-icon{width:36px;height:36px}.mb-rejection-progress{margin:0 0 4px}.mb-rejection-issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.mb-rejection-issues-heading>span{text-align:left}.mb-rejection-issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.mb-rejection-code{grid-column:2;justify-self:start}.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>dl{grid-template-columns:1fr 1fr}}\n`;\n","\"use client\";\n\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 DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n SECOND_REVIEW_REASON_TEMPLATE,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n type BrowserBillCreateInput,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillEorDocument,\n type BillLifecycleAction,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReopenBillInput,\n type SandboxSimulationScenario,\n type SubmitNewBillInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleProgress,\n BillRejectionNotice,\n} from \"./bill-lifecycle-surfaces\";\nimport { BillReadOnlyForm } from \"./bill-read-only-form\";\nimport {\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BillSubmissionForm,\n prepareBillSubmissionDocuments,\n type BillSubmissionDocumentType,\n type BillSubmissionFormValue,\n type BillSubmissionInput,\n type BillSubmissionSourceAttachment,\n} from \"./bill-submission-form\";\nimport type { BillReviewAttachment, BillSubmissionRoute } from \"./native-bill-review\";\nimport { BillSubmissionsRibbon, billSubmissionsRibbonFromHistory } from \"./bill-submissions-ribbon\";\nimport { ReportBillStatusDialog } from \"./report-bill-status-dialog\";\nimport { SendRouteDialog } from \"./send-route-dialog\";\n\nexport {\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n} from \"@mindbill/browser\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\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 BillRejection,\n CloseBillInput,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n ResubmitBillInput,\n SandboxSimulationScenario,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SimulateSandboxBillInput,\n SubmitNewBillInput,\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};\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 getClaimsAdministratorDirectory: BillLifecycleClient[\"getClaimsAdministratorDirectory\"];\n getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\n getAttachment: BillLifecycleClient[\"getAttachment\"];\n openAttachment: (attachment: Pick<BillReviewAttachment, \"id\">) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n downloadPacket: () => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n reopenBill: BillLifecycleClient[\"reopenBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n resubmitBill: BillLifecycleClient[\"resubmitBill\"];\n submitNewBill: BillLifecycleClient[\"submitNewBill\"];\n sendDuplicateBill: BillLifecycleClient[\"sendDuplicateBill\"];\n reportBillStatus: BillLifecycleClient[\"reportBillStatus\"];\n simulateSandbox: BillLifecycleClient[\"simulateSandbox\"];\n};\n\nfunction reservePreviewWindow(): Window | null {\n const preview = window.open(\"about:blank\", \"_blank\");\n if (preview) {\n preview.opener = null;\n preview.document.open();\n preview.document.write(\"<!doctype html><title>Preparing PDF…</title><meta name=viewport content=\\\"width=device-width,initial-scale=1\\\"><style>body{margin:0;display:grid;place-items:center;min-height:100vh;font:16px system-ui;color:#42545a;background:#f5f8f8}</style><p>Preparing PDF preview…</p>\");\n preview.document.close();\n }\n return preview;\n}\n\nfunction previewBlob(blob: Blob, preview: Window | null): void {\n const url = URL.createObjectURL(blob);\n if (preview) preview.location.replace(url);\n else {\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.click();\n }\n window.setTimeout(() => URL.revokeObjectURL(url), 3_600_000);\n}\n\n/**\n * Opens a PDF loader from a user gesture without losing Safari's popup permission\n * while the authenticated request is in flight.\n */\nexport async function openPdfFromUserGesture(loadPdf: () => Promise<Blob>): Promise<void> {\n const preview = reservePreviewWindow();\n try {\n previewBlob(await loadPdf(), preview);\n } catch (error) {\n preview?.close();\n throw error;\n }\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 fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [data, setData] = useState<BillLifecycleData | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\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 setData(null);\n setError(null);\n setIsLoading(enabled);\n }, [enabled, providedBillId]);\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) 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 ? window.setInterval(() => void refresh(), refreshInterval) : 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 (task: () => Promise<BillLifecycleData>) => {\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 ? cause : 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 openAttachment = useCallback(async (attachment: Pick<BillReviewAttachment, \"id\">) => {\n await openPdfFromUserGesture(() => client.getAttachment(attachment.id));\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n await openPdfFromUserGesture(() => client.getEor(document.id));\n }, [client]);\n const downloadPacket = useCallback(async () => {\n setError(null);\n try {\n await openPdfFromUserGesture(() => client.getPacket());\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission packet could not be opened.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n\n return {\n billId: providedBillId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators: (query, claimNumber) => client.searchClaimsAdministrators(query, claimNumber),\n getClaimsAdministratorDirectory: (id, injuryState) => client.getClaimsAdministratorDirectory(id, injuryState),\n getDeliveryOptions: () => client.getDeliveryOptions(),\n getAttachment: (attachmentId) => client.getAttachment(attachmentId),\n openAttachment,\n openEor,\n downloadPacket,\n closeBill: (input) => mutate(() => client.closeBill(input)),\n reopenBill: (input) => mutate(() => client.reopenBill(input)),\n postPayment: (input) => mutate(() => client.postPayment(input)),\n submitSecondReview: (input) => mutate(() => client.submitSecondReview(input)),\n resubmitBill: (input) => mutate(() => client.resubmitBill(input)),\n submitNewBill: (input) => mutate(() => client.submitNewBill(input)),\n sendDuplicateBill: (input) => mutate(() => client.sendDuplicateBill(input)),\n reportBillStatus: (input) => mutate(() => client.reportBillStatus(input)),\n simulateSandbox: (input) => mutate(() => client.simulateSandbox(input)),\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillReactAppearance;\n /** Human-readable name recorded for user-initiated bill actions. */\n actorName?: string;\n /** Optional host-system claims-administrator name shown as a selection hint. */\n claimsAdministratorHint?: ReactNode;\n /** Host-system evidence shown without preselecting a canonical directory entry. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /**\n * Exposes payer-response simulation controls for an explicit sandbox\n * playground. Sandbox responses remain indistinguishable from live\n * lifecycle responses to ordinary host applications.\n */\n sandboxControls?: boolean;\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 = \"\" | \"resubmit\" | \"submit_new_bill\" | \"second_review\" | \"payment\" | \"close\" | \"reopen\" | \"send_duplicate\" | \"report_status\";\ntype Tab = \"details\" | \"history\";\n\nfunction LifecycleDialog({ children, title, wide = false, onClose }: { children: ReactNode; title: string; wide?: boolean; onClose: () => void }): 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) => event.key === \"Escape\" && onClose();\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) => event.currentTarget === event.target && onClose()}>\n <div ref={dialog} className={[\"mb-lifecycle-dialog\", wide ? \"wide\" : \"\"].filter(Boolean).join(\" \")} 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>{children}\n </div>\n </div>;\n}\n\nfunction correctionDocumentType(value: string): BillSubmissionDocumentType {\n return (BILL_SUBMISSION_DOCUMENT_TYPES as readonly string[]).includes(value)\n ? value as BillSubmissionDocumentType\n : \"other\";\n}\n\nfunction uniqueContactValues(values: Array<string | null | undefined>): string[] {\n const seen = new Set<string>();\n return values.flatMap((value) => {\n const trimmed = value?.trim();\n if (!trimmed) return [];\n const key = trimmed.toLocaleLowerCase();\n if (seen.has(key)) return [];\n seen.add(key);\n return [trimmed];\n });\n}\n\nfunction CorrectionVerificationContact({ delivery }: { delivery: BillLifecycleData[\"delivery\"] }): ReactElement | null {\n const directory = delivery.directory;\n const billReview = directory?.billReview ?? [];\n const phones = uniqueContactValues([\n delivery.contacts.adjusterPhone,\n ...(directory?.telephoneNumbers ?? []),\n ...billReview.map((contact) => contact.phone),\n ]);\n const emails = uniqueContactValues([\n delivery.contacts.claimsEmail,\n delivery.contacts.adjusterEmail,\n ...(directory?.emailAddresses ?? []),\n ...billReview.map((contact) => contact.email),\n ]);\n const faxes = uniqueContactValues([\n delivery.contacts.faxNumber,\n ...billReview.map((contact) => contact.fax),\n ]);\n const portals = uniqueContactValues([\n delivery.contacts.portalUrl,\n ...(directory?.webPortals ?? []),\n ...billReview.map((contact) => contact.portalUrl),\n directory?.website,\n ]);\n const mailingAddresses = uniqueContactValues([\n delivery.contacts.mailingAddress,\n ...(directory?.mailingAddresses ?? []).map((entry) => entry.address),\n ...billReview.map((contact) => contact.address),\n ]);\n const methods = [\n { label: \"Phone\", values: phones, href: (value: string) => `tel:${value.replace(/[^+\\d]/g, \"\")}` },\n { label: \"Email\", values: emails, href: (value: string) => `mailto:${value}` },\n { label: \"Fax\", values: faxes },\n { label: \"Portal\", values: portals, href: (value: string) => value },\n { label: \"Mail\", values: mailingAddresses },\n ].filter((method) => method.values.length);\n\n if (!methods.length) return null;\n return <aside className=\"mb-lifecycle-correction-contact\">\n <strong>Need to verify the rejected information?</strong>\n <span>Contact {delivery.payerName} using any available method:</span>\n <dl>{methods.map((method) => <div key={method.label}>\n <dt>{method.label}</dt>\n <dd>{method.values.map((value, index) => <span key={value}>{index ? \" · \" : \"\"}{method.href\n ? <a href={method.href(value)} {...(method.label === \"Portal\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>\n : value}</span>)}</dd>\n </div>)}</dl>\n </aside>;\n}\n\nfunction correctionBill(data: BillLifecycleData): BillSubmissionInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n const firstName = data.patient.firstName || nameParts[0] || \"\";\n const lastName = data.patient.lastName || nameParts.slice(1).join(\" \") || \"\";\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName,\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName,\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: {\n line1: data.patient.address?.line1 || \"\",\n city: data.patient.address?.city || \"\",\n state: data.patient.address?.state || \"\",\n postalCode: data.patient.address?.postalCode || \"\",\n },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n ...(data.injury.claimsAdminId && data.injury.claimsAdminName ? {\n claimsAdministrator: { id: data.injury.claimsAdminId, name: data.injury.claimsAdminName },\n } : {}),\n },\n service: {\n date: data.bill.dos,\n ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}),\n ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}),\n },\n ...(billing ? { billingProvider: {\n name: billing.name,\n taxId: billing.taxId,\n npi: billing.npi,\n ...(billing.phone ? { phone: billing.phone } : {}),\n address: {\n line1: billing.billingStreet || \"\",\n city: billing.billingCity || \"\",\n state: billing.billingState || \"\",\n postalCode: billing.billingZip || \"\",\n },\n } } : {}),\n ...(rendering ? { renderingProvider: {\n name: rendering.name,\n npi: rendering.npi,\n ...(rendering.taxonomy ? { taxonomy: rendering.taxonomy } : {}),\n ...(rendering.specialty ? { specialty: rendering.specialty } : {}),\n ...(rendering.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}),\n ...(rendering.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering.isQME !== undefined ? { isQme: rendering.isQME } : {}),\n ...(rendering.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n } } : {}),\n ...(location ? { serviceLocation: {\n ...(location.name ? { name: location.name } : {}),\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip },\n ...(location.posCode ? { placeOfServiceCode: location.posCode } : {}),\n } } : {}),\n diagnoses: data.injury.diagnoses?.map((diagnosis) => diagnosis.code)\n ?? [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({\n code: line.code,\n modifiers: [...line.modifiers],\n units: line.units,\n charge: line.charge,\n ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}),\n ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}),\n ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}),\n })),\n };\n}\n\nfunction today(): string {\n const now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60_000).toISOString().slice(0, 10);\n}\n\nfunction usDate(isoDate: string): string {\n const [year, month, day] = isoDate.split(\"-\");\n return year && month && day ? `${month}/${day}/${year}` : isoDate;\n}\n\nfunction actionPanel(action: BillLifecycleAction): Panel {\n if (action.id === \"resubmit\") return \"resubmit\";\n if (action.id === \"submit_new_bill\") return \"submit_new_bill\";\n if (action.id === \"second_review\") return \"second_review\";\n if (action.id === \"post_payment\") return \"payment\";\n if (action.id === \"close\") return \"close\";\n if (action.id === \"reopen\") return \"reopen\";\n if (action.id === \"send_duplicate\") return \"send_duplicate\";\n if (action.id === \"report_bill_status\") return \"report_status\";\n return \"\";\n}\n\nfunction sandboxScenarios(state: string): Array<{ id: SandboxSimulationScenario; label: string; detail: string }> {\n if (state === \"submitted\") return [\n { id: \"accepted\", label: \"Accept submission\", detail: \"Add clearinghouse and payer acknowledgements.\" },\n { id: \"rejected\", label: \"Reject submission\", detail: \"Return a correctable routing rejection.\" },\n ];\n if (state === \"accepted\" || state === \"second_review\") return [\n { id: \"processed\", label: \"Process with EOR\", detail: \"Attach a synthetic payer EOR and enable payment posting.\" },\n { id: \"denied\", label: \"Deny payment\", detail: \"Attach a realistic denial EOR and enable Second Review.\" },\n ];\n return [];\n}\n\nexport function shouldShowSandboxControls(environment: BillLifecycleData[\"environment\"], enabled = false): boolean {\n return enabled && environment === \"sandbox\";\n}\n\nexport function ConnectedBillLifecycle({ appearance, actorName, claimsAdministratorHint, claimsAdministratorSources, sandboxControls = false, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [tab, setTab] = useState<Tab>(\"details\");\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [reason, setReason] = useState(\"\");\n const [correctionError, setCorrectionError] = useState(\"\");\n const [newBillError, setNewBillError] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({ amount: 0, penaltyAmount: 0, interestAmount: 0, method: \"check\", checkNumber: \"\", depositDate: today(), note: \"\" });\n const [review, setReview] = useState<SubmitSecondReviewInput>({ reason: \"\", payerClaimControlNumber: \"\", disputedAmount: undefined, attachmentIds: [], route: \"ebill\" });\n const [duplicateDelivery, setDuplicateDelivery] = useState<BillDeliveryOptions | null>(null);\n const [duplicateDeliveryError, setDuplicateDeliveryError] = useState(\"\");\n const actor = actorName?.trim() ? { actorName: actorName.trim() } : {};\n const lastData = useRef<BillLifecycleData | null>(null);\n const correctionInitialBill = useMemo(() => data ? correctionBill(data) : null, [data]);\n const correctionAttachments = useMemo<BillSubmissionSourceAttachment[]>(() => data ? data.bill.attachments.map((attachment) => {\n const documentType = correctionDocumentType(attachment.documentType);\n const isW9 = documentType === \"w9\";\n return {\n id: attachment.id,\n fileName: attachment.filename,\n documentType,\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => lifecycle.getAttachment(attachment.id),\n ...(isW9 ? { autoAttached: true, removable: false } : { removable: true }),\n };\n }) : [], [data, lifecycle]);\n const correctionAttentionFields = useMemo(() => data?.rejection?.issues\n ?.flatMap((issue) => issue.fieldPaths || [])\n .filter((path, index, fields) => fields.indexOf(path) === index) || [], [data]);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n const payerRemaining = data.remittance.payerReportedPaid === null\n ? data.bill.balanceDue\n : Math.max(0, data.remittance.payerReportedPaid - data.remittance.postedPrincipal);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 && current.amount <= data.bill.balanceDue\n ? current.amount\n : Math.min(data.bill.balanceDue, payerRemaining || data.bill.balanceDue),\n penaltyAmount: 0,\n interestAmount: 0,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length ? current.attachmentIds.filter((id) => data.bill.attachments.some((document) => document.id === id)) : data.bill.attachments.map((document) => document.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading bill…</div>}</>;\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 complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setReason(\"\");\n setNotice(message);\n } catch {\n // useBillLifecycle keeps the server error visible.\n }\n };\n const submitCorrection = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setCorrectionError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.resubmitBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n });\n } catch (cause) {\n // A failed resubmission must never look like a success: keep the dialog\n // (and the biller's corrections) open and show the server's reason inline\n // next to the submit control, like the other action panels do.\n setCorrectionError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The corrected bill could not be resubmitted.\",\n );\n return;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"Corrected submission sent.\");\n };\n const submitNewBillFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setNewBillError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.submitNewBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n } satisfies SubmitNewBillInput);\n } catch (cause) {\n // Same contract as the correction dialog: a failed submission must never\n // look like a success — keep the form (and the biller's edits) open and\n // show the server's reason inline next to the submit control.\n setNewBillError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The new bill could not be submitted.\",\n );\n return;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"New bill submitted.\");\n };\n const loadDuplicateDelivery = () => {\n setDuplicateDeliveryError(\"\");\n if (duplicateDelivery) return;\n lifecycle.getDeliveryOptions()\n .then((options) => setDuplicateDelivery(options))\n .catch((cause) => setDuplicateDeliveryError(cause instanceof Error ? cause.message : \"Delivery options could not be loaded.\"));\n };\n const viewEor = data.lifecycle.actions.find((action) => action.id === \"view_eor\" && action.enabled);\n const supportedActions = new Set<BillLifecycleAction[\"id\"]>([\"resubmit\", \"submit_new_bill\", \"second_review\", \"post_payment\", \"close\", \"reopen\", \"send_duplicate\", \"report_bill_status\"]);\n const actions = data.lifecycle.actions.filter((action) => action.enabled && supportedActions.has(action.id));\n const showSandboxControls = shouldShowSandboxControls(data.environment, sandboxControls);\n const simulations = showSandboxControls ? sandboxScenarios(data.lifecycle.state) : [];\n const ribbonItems = data.history ? billSubmissionsRibbonFromHistory(data.history) : [];\n const statusContacts = reportBillStatusContacts(data.delivery);\n const receiptEntries = (data.history ?? []).filter((entry) => entry.kind === \"submission\" || entry.kind === \"ack\");\n const reviewDeadline = secondReviewDeadline(data.eors);\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {ribbonItems.length >= 2 ? <BillSubmissionsRibbon items={ribbonItems} onSelect={() => setTab(\"history\")} {...(appearance ? { appearance } : {})} /> : null}\n {data.lifecycle.state.toLowerCase() === \"rejected\" && data.rejection\n ? <BillRejectionNotice rejection={data.rejection} submittedAt={data.lifecycle.submittedAt ?? null} {...(appearance ? { appearance } : {})} />\n : <BillLifecycleProgress state={data.lifecycle.state} nativeStatus={data.lifecycle.nativeStatus} submittedAt={data.lifecycle.submittedAt ?? null} agingDays={data.lifecycle.agingDays ?? null} {...(appearance ? { appearance } : {})} />}\n\n <header className=\"mb-lifecycle-head\">\n <div><div className=\"mb-lifecycle-title\"><h2>Bill #{data.bill.billNumber}</h2></div><p>Claim {data.injury.claimNumber || \"—\"}{lifecycle.isRefreshing ? \" · Refreshing…\" : \"\"}</p></div>\n <button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadPacket().catch(() => undefined)}>Download packet</button>\n </header>\n\n <div className=\"mb-lifecycle-tabs\" role=\"tablist\" aria-label=\"Bill view\">\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"details\"} onClick={() => setTab(\"details\")}>Bill details</button>\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"history\"} onClick={() => setTab(\"history\")}>Bill history</button>\n </div>\n\n {tab === \"details\" ? <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">\n {(data.eors.length || data.payments.length || [\"processed\", \"denied\", \"partially_paid\"].includes(data.lifecycle.state)) ? <BillExplanationOfReview remittance={data.remittance} eors={data.eors} payments={data.payments} submittedAt={data.lifecycle.submittedAt ?? null} onOpenEor={lifecycle.openEor} {...(appearance ? { appearance } : {})} /> : null}\n\n {showSandboxControls ? <section className=\"mb-lifecycle-simulator\" aria-label=\"Sandbox lifecycle simulator\"><div><span>Sandbox demo controls</span><h3>Simulate the next payer response</h3><p>This changes sandbox data only. The host receives the result through the same lifecycle API and components partners use.</p></div>{simulations.length ? <div className=\"mb-lifecycle-simulator-actions\">{simulations.map((scenario) => <button type=\"button\" key={scenario.id} disabled={lifecycle.isMutating} onClick={() => void complete(`${scenario.label} simulated.`, () => lifecycle.simulateSandbox({ scenario: scenario.id }))}><strong>{scenario.label}</strong><span>{scenario.detail}</span></button>)}</div> : <p className=\"mb-lifecycle-simulator-idle\">No simulated payer transition is needed at this stage. Use the bill action below to continue.</p>}</section> : null}\n\n <BillReadOnlyForm data={data} onOpenAttachment={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} />\n </div> : <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">{data.history?.length\n ? <BillHistoryTable entries={data.history} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} />\n : <BillActivityTimeline events={data.activity} {...(appearance ? { appearance } : {})} />}</div>}\n\n {(viewEor || actions.length) ? <aside className=\"mb-lifecycle-actions-sheet\" aria-label=\"Bill actions\">\n {viewEor && data.eors[0] ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(data.eors[0]!).catch(() => undefined)}>{viewEor.label}</button> : null}\n {actions.map((action) => <button type=\"button\" key={action.id} className={action.primary ? \"mb-lifecycle-button primary\" : \"mb-lifecycle-button secondary\"} onClick={() => {\n const next = actionPanel(action);\n if (!next) return;\n if (next === \"resubmit\") setCorrectionError(\"\");\n if (next === \"submit_new_bill\") setNewBillError(\"\");\n if (next === \"send_duplicate\") loadDuplicateDelivery();\n if (next === \"second_review\") setReview((current) => current.reason.trim() ? current : { ...current, reason: SECOND_REVIEW_REASON_TEMPLATE });\n setPanel(next);\n }}>{action.label}</button>)}\n </aside> : null}\n\n {panel === \"resubmit\" && correctionInitialBill ? <LifecycleDialog title=\"Correct and resubmit\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Correct and resubmit</h3><p>Review the rejected snapshot, correct the highlighted information, and submit a new immutable attempt under this bill.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>Resubmitting sends a real bill. Confirm the corrected information before continuing.</span></div> : null}{data.rejection ? <div className=\"mb-lifecycle-correction-reason\"><strong>{data.rejection.reason}</strong>{data.rejection.issues?.map((issue, index) => <span key={`${issue.code || \"issue\"}-${index}`}>{issue.code ? `${issue.code}: ` : \"\"}{issue.description}</span>)}</div> : null}<CorrectionVerificationContact delivery={data.delivery} /><label className=\"mb-lifecycle-correction-note\"><span>Correction note (optional)</span><textarea value={reason} placeholder=\"What changed before resubmission?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitCorrection}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionFields={correctionAttentionFields}\n attentionMessage={correctionAttentionFields.length ? \"The rejected response points to the highlighted fields. Confirm every required value before resubmitting.\" : \"Confirm the bill information below before resubmitting.\"}\n submitLabel={lifecycle.isMutating ? \"Resubmitting…\" : \"Resubmit bill\"}\n heading=\"Corrected bill information\"\n description=\"The original submission stays unchanged. This form creates the next submission attempt.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{correctionError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{correctionError}</div> : null}</section></LifecycleDialog> : null}\n\n {panel === \"submit_new_bill\" && correctionInitialBill ? <LifecycleDialog title=\"Submit New Bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Submit New Bill</h3><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot below and submit a fresh bill — both bills stay linked in the submissions timeline.</p></div></header><label className=\"mb-lifecycle-correction-note\"><span>Submission note (optional)</span><textarea value={reason} placeholder=\"Why is a new bill being submitted?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitNewBillFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every value carried over from the closed bill before submitting the new bill.\"\n submitLabel={lifecycle.isMutating ? \"Submitting…\" : \"Submit New Bill\"}\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{newBillError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{newBillError}</div> : null}</section></LifecycleDialog> : null}\n\n {panel === \"second_review\" ? <LifecycleDialog title=\"Submit Second Review\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Submit Second Review</h3><p>Explain the dispute and include the payer control number and supporting documents.</p></div>{reviewDeadline ? <p className=\"mb-lifecycle-deadline-hint\">Second Review must be requested within 90 days of the denial EOR (dated {usDate(reviewDeadline.eorDate)}) — file by <strong>{usDate(reviewDeadline.deadline)}</strong>.</p> : null}<div className=\"mb-lifecycle-fields two\"><label className=\"full\"><span>Reason</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label><label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label><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><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></div><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><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, ...actor }))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div></section></LifecycleDialog> : null}\n\n {panel === \"payment\" ? <LifecycleDialog title=\"Post payment\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Post payment</h3><p>Record a full or partial payment, plus any penalty and interest received.</p></div><div className=\"mb-lifecycle-fields two\"><label><span>Amount applied to bill</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label><label><span>Penalty</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.penaltyAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, penaltyAmount: Number(event.target.value) }))} /></label><label><span>Interest</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.interestAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, interestAmount: Number(event.target.value) }))} /></label><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><label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label><label><span>Deposit date</span><input required value={payment.depositDate} placeholder=\"MM/DD/YYYY\" onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label><label className=\"full\"><span>Note (optional)</span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label></div><div className=\"mb-payment-total\"><span>Total received</span><strong>{new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(payment.amount + (payment.penaltyAmount ?? 0) + (payment.interestAmount ?? 0))}</strong></div><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.penaltyAmount ?? 0) < 0 || (payment.interestAmount ?? 0) < 0 || !payment.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment({ ...payment, ...actor }))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div></section></LifecycleDialog> : null}\n\n {(panel === \"close\" || panel === \"reopen\") ? <LifecycleDialog title={panel === \"close\" ? \"Close bill\" : \"Reopen bill\"} onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>{panel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</h3><p>{panel === \"close\" ? \"The immutable submission and history remain available.\" : \"Return this bill to active follow-up without changing the submitted snapshot.\"}</p></div><label><span>Reason</span><textarea required value={reason} onChange={(event) => setReason(event.target.value)} /></label><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 || !reason.trim()} onClick={() => void complete(panel === \"close\" ? \"Bill closed.\" : \"Bill reopened.\", () => panel === \"close\" ? lifecycle.closeBill({ reason, ...actor } satisfies CloseBillInput) : lifecycle.reopenBill({ reason, ...actor } satisfies ReopenBillInput))}>{lifecycle.isMutating ? \"Saving…\" : panel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</button></div></section></LifecycleDialog> : null}\n\n {panel === \"send_duplicate\" ? (duplicateDelivery\n ? <SendRouteDialog\n title=\"Send duplicate bill\"\n delivery={duplicateDelivery}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onConfirm={(submission) => void complete(\"Duplicate bill sent.\", () => lifecycle.sendDuplicateBill({ ...submission, ...actor }))}\n />\n : <LifecycleDialog title=\"Send duplicate bill\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Send duplicate bill</h3><p>{duplicateDeliveryError || \"Loading delivery options…\"}</p></div><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button>{duplicateDeliveryError ? <button type=\"button\" className=\"mb-lifecycle-button primary\" onClick={loadDuplicateDelivery}>Try again</button> : null}</div></section></LifecycleDialog>) : null}\n\n {panel === \"report_status\" ? <ReportBillStatusDialog\n {...(statusContacts.claimsAdmin ? { claimsAdmin: statusContacts.claimsAdmin } : {})}\n {...(statusContacts.billReview ? { billReview: statusContacts.billReview } : {})}\n {...(receiptEntries.length ? { receipt: <BillHistoryTable entries={receiptEntries} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} /> } : {})}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onSave={(input) => void complete(\"Bill status reported.\", () => lifecycle.reportBillStatus({ ...input, ...actor }))}\n {...(appearance ? { appearance } : {})}\n /> : 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-lifecycle-simulator{display:grid;gap:14px;padding:18px;border:1px solid #b8dadd;border-radius:var(--mb-radius,14px);background:#f2fbfb}.mb-lifecycle-simulator>div:first-child>span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase}.mb-lifecycle-simulator h3{margin:3px 0 0;font-size:1.05rem}.mb-lifecycle-simulator p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-simulator-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.mb-lifecycle-simulator-actions button{min-height:76px;border:1px solid #a9cccf;border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;padding:12px 14px;text-align:left;font:inherit}.mb-lifecycle-simulator-actions button:hover{border-color:var(--mb-accent);box-shadow:0 3px 14px rgba(23,108,112,.1)}.mb-lifecycle-simulator-actions button:disabled{cursor:not-allowed;opacity:.55}.mb-lifecycle-simulator-actions button strong,.mb-lifecycle-simulator-actions button span{display:block}.mb-lifecycle-simulator-actions button span{margin-top:3px;color:var(--mb-muted);font-size:.83rem}.mb-lifecycle-simulator-idle{padding:10px 12px;border-radius:8px;background:rgba(255,255,255,.72)}\n.mb-connected-lifecycle{--mb-accent:#176c70;--mb-text:#17282d;--mb-muted:#607176;--mb-border:#d7e0df;--mb-soft:#f4f7f6;--mb-surface:#fff;display:grid;gap:18px;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-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-title{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.mb-lifecycle-title h2{margin:0;font-size:1.7rem}.mb-lifecycle-head p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-tabs{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);padding:6px}.mb-lifecycle-tabs button{min-height:46px;border:0;border-radius:8px;background:transparent;color:var(--mb-muted);font:inherit;font-size:1rem;font-weight:750;cursor:pointer}.mb-lifecycle-tabs button[aria-selected=true]{background:var(--mb-accent);color:white}.mb-lifecycle-tabpanel{display:grid;gap:18px}.mb-lifecycle-button{min-height:40px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast,#fff)}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-actions-sheet{position:sticky;bottom:12px;z-index:24;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;padding:10px;border:1px solid var(--mb-border);border-radius:12px;background:color-mix(in srgb,var(--mb-surface) 94%,transparent);box-shadow:0 10px 34px rgba(18,35,43,.16);backdrop-filter:blur(12px)}.mb-lifecycle-card,.mb-lifecycle-panel{padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:1.08rem}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-card header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-documents{list-style:none;margin:14px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid;gap:3px;min-width:0}.mb-lifecycle-documents li span{color:var(--mb-muted);font-size:.85rem}.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(100dvh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:44px;height:44px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:24px/1 inherit}.mb-lifecycle-panel{display:grid;gap:17px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:13px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:.85rem;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr 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-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}\n.mb-lifecycle-dialog.wide{width:min(1280px,100%)}.mb-lifecycle-correction{display:grid;gap:16px;padding:22px;border-radius:var(--mb-radius,14px);background:var(--mb-surface);box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-correction>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-right:56px}.mb-lifecycle-correction h3{margin:0;font-size:1.2rem}.mb-lifecycle-correction header p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-live-warning,.mb-lifecycle-correction-reason,.mb-lifecycle-correction-contact{display:grid;gap:4px;padding:13px 15px;border-radius:10px}.mb-lifecycle-live-warning{border-left:4px solid #b97716;background:#fff8e8;color:#6f470e}.mb-lifecycle-correction-reason{border-left:4px solid #c5443f;background:#fff2f1;color:#812d29}.mb-lifecycle-correction-contact{border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-lifecycle-correction-contact dl{display:grid;gap:7px;margin:8px 0 0}.mb-lifecycle-correction-contact dl>div{display:grid;grid-template-columns:58px minmax(0,1fr);gap:10px}.mb-lifecycle-correction-contact dt{color:var(--mb-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.mb-lifecycle-correction-contact dd{min-width:0;margin:0;overflow-wrap:anywhere}.mb-lifecycle-correction-contact a{color:var(--mb-accent);text-underline-offset:2px}.mb-lifecycle-correction-note{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-correction-note textarea{min-height:76px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px;resize:vertical}\n.mb-payment-total{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:9px;background:var(--mb-soft)}.mb-payment-total strong{font-size:1.12rem}\n.mb-lifecycle-deadline-hint{margin:0;padding:10px 12px;border-radius:9px;background:color-mix(in srgb,var(--mb-warning,#8a5c17) 10%,var(--mb-surface));color:var(--mb-warning,#8a5c17);font-size:.85rem}\n@media(max-width:700px){.mb-lifecycle-head,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-head>.mb-lifecycle-button{width:100%}.mb-lifecycle-actions-sheet{bottom:calc(var(--mb-host-bottom-offset,72px) + env(safe-area-inset-bottom) + 8px);grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-actions-sheet .mb-lifecycle-button:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-fields.two{grid-template-columns:1fr}.mb-lifecycle-fields .full{grid-column:auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:calc(100dvh - 12px)}.mb-lifecycle-dialog .mb-lifecycle-panel,.mb-lifecycle-correction{border-radius:18px 18px 0 0}.mb-lifecycle-correction{padding:18px 12px calc(18px + env(safe-area-inset-bottom))}.mb-lifecycle-correction>header{align-items:stretch;flex-direction:column;padding-right:56px}.mb-lifecycle-correction-contact dl>div{grid-template-columns:1fr;gap:2px}.mb-lifecycle-tabs button{font-size:.9rem}.mb-lifecycle-title h2{font-size:1.4rem}}\n`;\n"],"mappings":"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","names":["useEffect","useRef","value","useEffect","useState","jsx","jsxs","money","contacts","useState","useEffect","useEffect","useMemo","useRef","useState","useEffect","useMemo","useState","Fragment","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","date","css","Field","useState","useEffect","useMemo","useRef","list","administrator","description","useMemo","useState","Fragment","jsx","jsxs","css","money","useMemo","useState","useMemo","jsx","jsxs","money","stateLabel","css","useMemo","BILL_TASKS_AGING_BUCKETS","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","css","useEffect","useState","REPORT_BILL_STATUS_OPTIONS","jsx","jsxs","css","useState","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","css","useMemo","useState","useRef","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useMemo","useState","useRef","useEffect","useCallback","useState","Fragment","jsx","jsxs","useState","contacts","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","SECOND_REVIEW_REASON_TEMPLATE","createBillLifecycleClient","reportBillStatusContacts","secondReviewDeadline","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","DEFAULT_SESSION_ENDPOINT","DEFAULT_API_BASE_URL","useState","useRef","useMemo","useEffect","useCallback","document","options","useRef","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","../src/appearance.ts","../src/native-bill-review.tsx","../src/bill-read-only-form.tsx","../src/bill-submission-form.tsx","../src/send-route-dialog.tsx","../src/claims-administrator-directory-dialog.tsx","../src/billing-catalog.ts","../src/billing-dashboard.tsx","../src/status-aging-matrix.tsx","../src/bill-tasks-dashboard.tsx","../src/bill-submissions-ribbon.tsx","../src/report-bill-status-dialog.tsx","../src/organization-onboarding.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 { BillReadOnlyForm } from \"./bill-read-only-form\";\nexport type { BillReadOnlyFormProps } from \"./bill-read-only-form\";\n\nexport {\n applyBillSubmissionEvaluationDiagnoses,\n applyBillSubmissionEvaluationModifiers,\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BILL_SUBMISSION_REPORT_TYPES,\n BILL_SUBMISSION_REQUIRED_FIELDS,\n BillSubmissionActions,\n BillSubmissionAttachmentsSection,\n BillSubmissionClaimSection,\n BillSubmissionForm,\n BillSubmissionHeader,\n BillSubmissionPatientSection,\n BillSubmissionProvidersSection,\n BillSubmissionServiceLinesSection,\n chooseClaimsAdministrator,\n ensureTrailingBillSubmissionLine,\n exactClaimsAdministratorMatch,\n formatBillSubmissionDate,\n claimsAdministratorRecommendations,\n MED_LEGAL_REPORT_TYPE_CODE,\n normalizeClaimsAdministratorName,\n parseBillSubmissionDate,\n prepareBillSubmissionDocuments,\n PSYCH_QME_DEFAULT_DIAGNOSIS,\n submittedClaimsAdministrator,\n validateBillSubmission,\n} from \"./bill-submission-form\";\nexport type {\n BillSubmissionAddress,\n BillSubmissionAttachmentReportTypeMode,\n BillSubmissionDiagnosisOption,\n BillSubmissionDocumentType,\n BillSubmissionEvaluationType,\n BillSubmissionFormProps,\n BillSubmissionFormValue,\n BillSubmissionInput,\n BillSubmissionModifierOption,\n BillSubmissionPostalPlace,\n BillSubmissionProcedureOption,\n BillSubmissionReportTypeOption,\n BillSubmissionSectionId,\n BillSubmissionSourceAttachment,\n BillSubmissionTaxonomyOption,\n BillSubmissionUpload,\n BillSubmissionValidation,\n} from \"./bill-submission-form\";\nexport { extractSendRouteEmail, formatSendRouteFax, SendRouteDialog } from \"./send-route-dialog\";\nexport type { SendRouteDialogProps, SendRouteSubmission } from \"./send-route-dialog\";\n\nexport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\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 BillAgingSummary,\n BillingDashboard,\n BillingReport,\n BillList,\n billAgingBucket,\n billAgingDays,\n buildBillingReportCsv,\n buildBillingReportRows,\n summarizeBillingDashboard,\n} from \"./billing-dashboard\";\nexport type {\n BillAgingBucket,\n BillAgingBucketId,\n BillAgingSummaryProps,\n BillingComponentProps,\n BillingDashboardBill,\n BillingDashboardProps,\n BillingDashboardSummary,\n BillingReportDimension,\n BillingReportProps,\n BillingReportRow,\n BillListProps,\n} from \"./billing-dashboard\";\n\nexport {\n BILL_STATUS_AGING_BUCKETS,\n BillStatusAgingMatrix,\n buildBillStatusAgingCsv,\n buildBillStatusAgingMatrix,\n} from \"./status-aging-matrix\";\nexport type {\n BillStatusAgingCell,\n BillStatusAgingMatrixData,\n BillStatusAgingMatrixProps,\n BillStatusAgingRow,\n} from \"./status-aging-matrix\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n BillTasksDashboard,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"./bill-tasks-dashboard\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardCell,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardProps,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"./bill-tasks-dashboard\";\n\nexport {\n BillSubmissionsRibbon,\n billSubmissionsRibbonDeliveryLabel,\n billSubmissionsRibbonFromHistory,\n} from \"./bill-submissions-ribbon\";\nexport type {\n BillSubmissionRibbonItem,\n BillSubmissionsRibbonProps,\n} from \"./bill-submissions-ribbon\";\n\nexport {\n REPORT_BILL_STATUS_OPTIONS,\n ReportBillStatusDialog,\n} from \"./report-bill-status-dialog\";\nexport type {\n ReportBillStatusDialogProps,\n ReportBillStatusId,\n ReportBillStatusInput,\n} from \"./report-bill-status-dialog\";\n\nexport { BillingSettings, OrganizationOnboarding } from \"./organization-onboarding\";\nexport type { OrganizationOnboardingProps } from \"./organization-onboarding\";\n\nexport {\n ConnectedBillStatus,\n createBillStatusClient,\n useBillStatus,\n} from \"./connected-bill-status\";\nexport type {\n BillClaimsAdministratorSource,\n BillReviewPayerOption,\n BillReviewPayerSuggestion,\n BrowserBillSubmissionResult,\n} from \"@mindbill/browser\";\n\nexport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleActions,\n BillLifecycleProgress,\n BillRejectionNotice,\n BillPaymentLedger,\n BillPayerContactCard,\n BillRemittanceCard,\n BillSnapshotSummary,\n billActivityEventLabel,\n billLifecycleDisplayLabel,\n billLifecycleStage,\n isBillLifecycleDraft,\n visibleBillLifecycleActions,\n} from \"./bill-lifecycle-surfaces\";\nexport type {\n BillActivityEvent,\n BillActivityTimelineProps,\n BillHistoryTableProps,\n BillExplanationOfReviewProps,\n BillLifecycleActionsProps,\n BillLifecycleProgressProps,\n BillLifecycleProgressStepsOptions,\n BillRejectionNoticeProps,\n BillLifecycleStage,\n BillPaymentLedgerProps,\n BillPayerContactCardProps,\n BillRemittanceCardProps,\n BillSnapshotSummaryProps,\n} from \"./bill-lifecycle-surfaces\";\n\nexport {\n ConnectedBillLifecycle,\n createBillLifecycleClient,\n reportBillStatusContacts,\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n secondReviewDeadline,\n useBillLifecycle,\n} from \"./connected-bill-lifecycle\";\nexport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nexport type { ClaimsAdministratorDirectoryDialogProps } from \"./claims-administrator-directory-dialog\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\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 BillRejection,\n CloseBillInput,\n ConnectedBillLifecycleProps,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n SecondReviewDeadline,\n SendDuplicateBillInput,\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 | \"midnight-cyan\";\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: \"#f4510b\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#fffaf6\",\n surfaceColor: \"#fffefd\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#090f1f\",\n mutedColor: \"#626a73\",\n borderColor: \"#e7e1da\",\n borderRadius: \"16px\",\n controlRadius: \"10px\",\n shadow: \"0 12px 36px rgba(244,81,11,.08), 0 1px 2px rgba(9,15,31,.05)\",\n dangerColor: \"#c4322b\",\n successColor: \"#16835b\",\n warningColor: \"#a65f00\",\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 \"midnight-cyan\": {\n accentColor: \"#05092e\",\n accentTextColor: \"#ffffff\",\n backgroundColor: \"#edf6ff\",\n surfaceColor: \"#ffffff\",\n inputBackgroundColor: \"#ffffff\",\n textColor: \"#05092e\",\n mutedColor: \"#596078\",\n borderColor: \"#d9dae1\",\n borderRadius: \"0px\",\n controlRadius: \"999px\",\n shadow: \"0 1px 2px rgba(5,9,46,.04)\",\n dangerColor: \"#b42318\",\n successColor: \"#167a58\",\n warningColor: \"#9a6418\",\n fontFamily: \"Geist, Inter, ui-sans-serif, system-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 /** True when a bill for this claims administrator must name one of `payers`. */\n payerSelectionRequired?: boolean;\n /** Selectable payers (subpayors) under this claims administrator. */\n payers?: Array<{ id: string; label: string; default?: boolean }>;\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 /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: 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 { useEffect, useState, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPattern,\n BillLifecycleDelivery,\n BillReviewAttachment,\n BillReviewData,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\n\nexport type BillReadOnlyFormProps = {\n data: BillReviewData & { delivery?: BillLifecycleDelivery };\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n onOpenAttachment?: (attachment: BillReviewAttachment) => void | Promise<void>;\n};\n\nfunction money(value: number): string {\n return new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(value);\n}\n\nfunction date(value?: string | null): string {\n if (!value) return \"—\";\n const parsed = new Date(`${value.slice(0, 10)}T12:00:00`);\n return Number.isNaN(parsed.getTime()) ? value : new Intl.DateTimeFormat(undefined, { dateStyle: \"medium\" }).format(parsed);\n}\n\nfunction Value({ label, children, wide = false }: { label: string; children?: ReactNode; wide?: boolean }): ReactElement {\n return <div className={wide ? \"mb-read-value is-wide\" : \"mb-read-value\"}><dt>{label}</dt><dd>{children || \"—\"}</dd></div>;\n}\n\ntype PayerTab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst PAYER_TABS: ReadonlyArray<readonly [PayerTab, string]> = [\n [\"main\", \"Main\"],\n [\"bill-review\", \"Bill Review\"],\n [\"authorization\", \"Authorization Info\"],\n [\"mailing\", \"Mailing Address\"],\n [\"patterns\", \"Claim Number Pattern\"],\n];\n\nfunction DirectoryEmpty({ children }: { children: ReactNode }): ReactElement {\n return <p className=\"mb-read-directory-empty\">{children}</p>;\n}\n\nfunction ContactTable({ contacts, empty }: { contacts: readonly BillClaimsAdministratorContact[]; empty: string }): ReactElement {\n if (!contacts.length) return <DirectoryEmpty>{empty}</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Portal / email</th><th>Fax</th><th>Address</th></tr></thead><tbody>{contacts.map((contact, index) => <tr key={`${contact.name || \"contact\"}-${index}`}><td>{contact.name || \"—\"}{contact.note ? <small>{contact.note}</small> : null}</td><td>{contact.phone || \"—\"}</td><td>{contact.portalUrl ? <a href={contact.portalUrl} target=\"_blank\" rel=\"noopener noreferrer\">Open portal</a> : contact.email || \"—\"}</td><td>{contact.fax || \"—\"}</td><td>{contact.address || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction MailingTable({ addresses }: { addresses: readonly BillClaimsAdministratorMailingAddress[] }): ReactElement {\n if (!addresses.length) return <DirectoryEmpty>No mailing addresses are available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Submission types</th></tr></thead><tbody>{addresses.map((entry, index) => <tr key={`${entry.address}-${index}`}><td>{entry.company || \"—\"}</td><td>{entry.address}</td><td>{entry.notes || \"—\"}</td><td>{entry.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nfunction PatternTable({ patterns }: { patterns: readonly BillClaimsAdministratorPattern[] }): ReactElement {\n if (!patterns.length) return <DirectoryEmpty>No claim-number pattern is available for this directory entry.</DirectoryEmpty>;\n return <div className=\"mb-read-directory-table-wrap\"><table className=\"mb-read-directory-table\"><thead><tr><th>Status</th><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{patterns.map((entry, index) => <tr key={`${entry.pattern}-${index}`}><td>{entry.matches === true ? <span className=\"mb-read-match is-match\">✓ Matches this claim</span> : entry.matches === false ? <span className=\"mb-read-match is-warning\">Review format</span> : \"Advisory\"}</td><td>{entry.length ?? \"—\"}</td><td>{entry.pattern}</td><td>{entry.example || \"—\"}</td></tr>)}</tbody></table></div>;\n}\n\nexport function BillReadOnlyForm({ data, appearance, className, style, onOpenAttachment }: BillReadOnlyFormProps): ReactElement {\n const [payerOpen, setPayerOpen] = useState(false);\n const [payerTab, setPayerTab] = useState<PayerTab>(\"main\");\n const { bill, patient, injury } = data;\n const diagnoses = injury.diagnoses?.length\n ? injury.diagnoses\n : (injury.diagnosisCodes ?? []).map((code) => ({ code, description: \"\" }));\n const provider = bill.billingSnapshot?.billingProvider;\n const clinician = bill.billingSnapshot?.renderingProvider;\n const location = bill.billingSnapshot?.placeOfService;\n const address = patient.address;\n const patientAddress = [address?.line1, address?.city, address?.state, address?.postalCode].filter(Boolean).join(\", \");\n const billingAddress = provider ? [provider.billingStreet, provider.billingCity, provider.billingState, provider.billingZip].filter(Boolean).join(\", \") : \"\";\n const locationAddress = location ? [location.street, location.city, location.state, location.zip].filter(Boolean).join(\", \") : \"\";\n const payerName = data.delivery?.payerName || injury.claimsAdminName || \"—\";\n const contacts = data.delivery?.contacts;\n const directory = data.delivery?.directory;\n const fallbackContacts: readonly BillClaimsAdministratorContact[] = contacts && Object.values(contacts).some(Boolean) ? [{\n name: contacts.adjusterName || \"Claims contact\",\n ...(contacts.adjusterPhone ? { phone: contacts.adjusterPhone } : {}),\n ...(contacts.adjusterEmail || contacts.claimsEmail ? { email: contacts.adjusterEmail || contacts.claimsEmail } : {}),\n ...(contacts.faxNumber ? { fax: contacts.faxNumber } : {}),\n ...(contacts.portalUrl ? { portalUrl: contacts.portalUrl } : {}),\n ...(contacts.mailingAddress ? { address: contacts.mailingAddress } : {}),\n }] : [];\n const billReview = directory?.billReview?.length ? directory.billReview : fallbackContacts;\n const mailingAddresses: readonly BillClaimsAdministratorMailingAddress[] = directory?.mailingAddresses?.length\n ? directory.mailingAddresses\n : contacts?.mailingAddress ? [{ company: payerName, address: contacts.mailingAddress }] : [];\n useEffect(() => {\n if (!payerOpen) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") setPayerOpen(false); };\n window.addEventListener(\"keydown\", close);\n return () => window.removeEventListener(\"keydown\", close);\n }, [payerOpen]);\n\n return <section className={[\"mb-readonly-bill\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill details\">\n <style>{READ_ONLY_STYLES}</style>\n <header className=\"mb-readonly-heading\"><h2>Bill details</h2><strong>{money(bill.totalCharge)}</strong></header>\n\n <section className=\"mb-read-card\"><h3>Patient</h3><dl className=\"mb-read-grid\">\n <Value label=\"Name\">{patient.name || [patient.firstName, patient.middleName, patient.lastName].filter(Boolean).join(\" \")}</Value>\n <Value label=\"Date of birth\">{date(patient.dob)}</Value>\n <Value label=\"Phone\">{patient.phone}</Value>\n <Value label=\"Address\" wide>{patientAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Claim & injury</h3><dl className=\"mb-read-grid\">\n <Value label=\"Claim number\">{injury.claimNumber}</Value>\n <Value label=\"WCAB / ADJ number\">{injury.adjNumber}</Value>\n <Value label=\"Claims administrator\"><button type=\"button\" className=\"mb-read-payer\" onClick={() => { setPayerTab(\"main\"); setPayerOpen(true); }}>{payerName}</button></Value>\n <Value label=\"Employer\">{injury.employer}</Value>\n <Value label=\"Date of injury\">{date(injury.doi)}</Value>\n <Value label=\"Date of service\">{bill.dosEnd ? `${date(bill.dos)} – ${date(bill.dosEnd)}` : date(bill.dos)}</Value>\n <Value label=\"Injury description\" wide>{injury.injuryDescription}</Value>\n </dl>{diagnoses.length ? <div className=\"mb-read-diagnoses\" aria-label=\"Diagnoses\">{diagnoses.map((diagnosis) => <div key={diagnosis.code}><strong>{diagnosis.code}</strong>{diagnosis.description ? <span>{diagnosis.description}</span> : null}</div>)}</div> : null}</section>\n\n <section className=\"mb-read-card\"><h3>Providers & location</h3><dl className=\"mb-read-grid\">\n <Value label=\"Billing provider\">{provider?.name}</Value>\n <Value label=\"Billing NPI\">{provider?.npi}</Value>\n <Value label=\"Billing tax ID\">{provider?.taxId}</Value>\n <Value label=\"Billing phone\">{provider?.phone}</Value>\n <Value label=\"Billing address\" wide>{billingAddress}</Value>\n <Value label=\"Rendering provider\">{clinician?.name}</Value>\n <Value label=\"Rendering NPI\">{clinician?.npi}</Value>\n <Value label=\"Rendering taxonomy\">{clinician?.taxonomy}</Value>\n <Value label=\"Place of service code\">{location?.posCode}</Value>\n <Value label=\"Service address\" wide>{locationAddress}</Value>\n </dl></section>\n\n <section className=\"mb-read-card\"><h3>Service lines</h3><div className=\"mb-read-lines\" role=\"table\" aria-label=\"Service lines\">\n <div className=\"mb-read-line-header\" role=\"row\"><span>Procedure</span><span>Modifiers</span><span>Units</span><span>Charge</span></div>\n {bill.lineItems.map((line, index) => <div className=\"mb-read-line\" role=\"row\" key={line.id ?? `${line.code}-${index}`}>\n <strong>{line.code}</strong><div className=\"mb-read-chips\">{line.modifiers.length ? line.modifiers.map((modifier) => <span key={modifier}>{modifier}</span>) : \"—\"}</div><span>{line.units}</span><strong>{money(line.charge)}</strong>\n </div>)}\n <div className=\"mb-read-total\"><span>Paid {money(bill.totalPaid)}</span><strong>Balance {money(bill.balanceDue)}</strong></div>\n </div></section>\n\n <section className=\"mb-read-card\"><h3>Attachments</h3>{bill.attachments.length ? <ul className=\"mb-read-documents\">{bill.attachments.map((attachment) => <li key={attachment.id}><div><strong>{attachment.filename}</strong><span>{attachment.description || attachment.documentType.replace(/_/g, \" \")}</span></div>{onOpenAttachment ? <button type=\"button\" onClick={() => void onOpenAttachment(attachment)}>Preview</button> : null}</li>)}</ul> : <p className=\"mb-read-empty\">No attachments.</p>}</section>\n {payerOpen ? <div className=\"mb-read-dialog-backdrop\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget) setPayerOpen(false); }}><section className=\"mb-read-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mb-read-payer-title\"><header><div><h3 id=\"mb-read-payer-title\">{payerName}</h3><span>Claims administrator</span></div><button type=\"button\" aria-label=\"Close claims administrator details\" onClick={() => setPayerOpen(false)}>×</button></header>\n <label className=\"mb-read-dialog-mobile-nav\"><span>Information section</span><select aria-label=\"Claims administrator information section\" value={payerTab} onChange={(event) => setPayerTab(event.target.value as PayerTab)}>{PAYER_TABS.map(([id, label]) => <option value={id} key={id}>{label}</option>)}</select></label>\n <div className=\"mb-read-dialog-tabs\" role=\"tablist\" aria-label=\"Claims administrator information\">\n {PAYER_TABS.map(([id, label]) => <button type=\"button\" role=\"tab\" aria-selected={payerTab === id} key={id} onClick={() => setPayerTab(id)}>{label}</button>)}\n </div>\n <div className=\"mb-read-dialog-panel\" role=\"tabpanel\">\n {payerTab === \"main\" ? <dl className=\"mb-read-directory-main\"><Value label=\"Name\">{payerName}</Value><Value label=\"Type\">{directory?.type}</Value><Value label=\"Description\" wide>{directory?.description}</Value><Value label=\"Website\">{directory?.website ? <a href={directory.website} target=\"_blank\" rel=\"noopener noreferrer\">{directory.website}</a> : \"—\"}</Value><Value label=\"Hours of operation\">{directory?.hours}</Value><Value label=\"Also known as\" wide>{directory?.aliases?.join(\", \")}</Value><Value label=\"Affiliated entities\" wide>{directory?.affiliatedEntities?.join(\", \")}</Value></dl> : null}\n {payerTab === \"bill-review\" ? <ContactTable contacts={billReview} empty=\"No bill-review contacts are available for this directory entry.\" /> : null}\n {payerTab === \"authorization\" ? <ContactTable contacts={directory?.authorization ?? []} empty=\"No authorization contacts are available for this directory entry.\" /> : null}\n {payerTab === \"mailing\" ? <MailingTable addresses={mailingAddresses} /> : null}\n {payerTab === \"patterns\" ? <PatternTable patterns={directory?.claimNumberPatterns ?? []} /> : null}\n </div>\n </section></div> : null}\n </section>;\n}\n\nconst READ_ONLY_STYLES = `\n.mb-read-diagnoses{display:grid;gap:8px;margin-top:16px}.mb-read-diagnoses>div{display:grid;grid-template-columns:minmax(64px,max-content) 1fr;gap:12px;align-items:baseline;border:1px solid var(--mb-border);border-radius:9px;background:#f7f9f8;padding:9px 12px}.mb-read-diagnoses span{color:var(--mb-muted)}\n.mb-readonly-bill{--mb-accent:#176c70;--mb-border:#d7e0df;--mb-surface:#fff;--mb-muted:#607176;color:var(--mb-text,#17282d);font:inherit;display:grid;gap:16px}.mb-readonly-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:20px}.mb-readonly-heading h2,.mb-read-card h3{margin:0}.mb-readonly-heading>strong{font-size:1.35rem}.mb-read-card{background:var(--mb-surface);border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);padding:20px;box-shadow:0 1px 2px rgba(15,40,45,.04)}.mb-read-card h3{font-size:1.05rem;margin-bottom:16px}.mb-read-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px 28px;margin:0}.mb-read-value{min-width:0}.mb-read-value.is-wide{grid-column:1/-1}.mb-read-value dt{color:var(--mb-muted);font-size:.75rem;font-weight:700;letter-spacing:.07em;text-transform:uppercase}.mb-read-value dd{font-weight:600;margin:5px 0 0;overflow-wrap:anywhere}.mb-read-payer{border:0;border-bottom:1px dotted currentColor;background:transparent;color:inherit;padding:0;font:inherit;font-weight:inherit;text-align:left;cursor:pointer}.mb-read-payer:hover{color:var(--mb-accent)}.mb-read-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:16px}.mb-read-chips span{border:1px solid var(--mb-border);border-radius:999px;padding:3px 9px;font-size:.82rem;background:#f7f9f8}.mb-read-lines{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-read-line-header,.mb-read-line{display:grid;grid-template-columns:1.2fr 1.5fr .45fr .7fr;gap:16px;align-items:center;padding:12px 14px}.mb-read-line-header{background:#f6f8f7;color:var(--mb-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.mb-read-line{border-top:1px solid var(--mb-border)}.mb-read-line .mb-read-chips{margin:0}.mb-read-line>span:last-child,.mb-read-line>strong:last-child{text-align:right}.mb-read-total{display:flex;justify-content:flex-end;gap:24px;border-top:1px solid var(--mb-border);padding:13px 14px}.mb-read-documents{list-style:none;padding:0;margin:0;display:grid}.mb-read-documents li{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 0;border-top:1px solid var(--mb-border)}.mb-read-documents li:first-child{border-top:0;padding-top:0}.mb-read-documents li:last-child{padding-bottom:0}.mb-read-documents div{display:grid;gap:3px;min-width:0}.mb-read-documents strong{overflow-wrap:anywhere}.mb-read-documents span,.mb-read-empty{color:var(--mb-muted)}.mb-read-documents button{border:1px solid var(--mb-border);border-radius:8px;background:transparent;color:inherit;padding:8px 13px;font:inherit;font-weight:650;cursor:pointer}.mb-read-documents button:hover{border-color:var(--mb-accent);color:var(--mb-accent)}.mb-read-dialog-backdrop{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:rgba(11,28,32,.46);padding:20px}.mb-read-dialog{width:min(1040px,100%);min-height:min(620px,calc(100dvh - 40px));max-height:calc(100dvh - 40px);overflow:auto;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface);padding:22px;box-shadow:0 22px 70px rgba(8,25,29,.24)}.mb-read-dialog header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:20px}.mb-read-dialog header span{display:block;margin-top:4px;color:var(--mb-muted);font-size:.78rem}.mb-read-dialog h3{margin:0;font-size:1.35rem}.mb-read-dialog header button{display:grid;place-items:center;width:44px;height:44px;border:0;background:transparent;color:inherit;font:inherit;font-size:1.7rem;line-height:1;cursor:pointer}.mb-read-dialog-mobile-nav{display:none}.mb-read-dialog-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-radius:10px;background:var(--mb-soft,#f4f7f6);padding:0 10px}.mb-read-dialog-tabs button{min-height:68px;border:0;border-top:4px solid transparent;background:transparent;color:var(--mb-muted);font:inherit;font-weight:750;cursor:pointer;padding:8px}.mb-read-dialog-tabs button[aria-selected=true]{border-color:var(--mb-accent);background:var(--mb-surface);color:var(--mb-text)}.mb-read-dialog-panel{padding-top:22px}.mb-read-directory-main{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 28px;margin:0}.mb-read-directory-main a,.mb-read-directory-table a{color:var(--mb-accent)}.mb-read-directory-table-wrap{border:1px solid var(--mb-border);border-radius:10px;overflow:auto}.mb-read-directory-table{width:100%;border-collapse:collapse;text-align:left}.mb-read-directory-table th,.mb-read-directory-table td{padding:13px 14px;vertical-align:top;border-top:1px solid var(--mb-border)}.mb-read-directory-table th{border-top:0;background:var(--mb-soft,#f4f7f6);color:var(--mb-muted);font-size:.78rem}.mb-read-directory-table td small{display:block;margin-top:4px;color:var(--mb-muted)}.mb-read-directory-empty{margin:0;padding:26px;border:1px dashed var(--mb-border);border-radius:10px;color:var(--mb-muted);text-align:center}.mb-read-match{display:inline-flex;border-radius:999px;padding:3px 8px;font-size:.78rem;font-weight:750}.mb-read-match.is-match{background:#eaf7ef;color:#237448}.mb-read-match.is-warning{background:#fff5df;color:#8a5b00}\n@media(max-width:700px){.mb-readonly-heading{align-items:flex-start}.mb-read-grid,.mb-read-directory-main{grid-template-columns:1fr}.mb-read-value.is-wide{grid-column:auto}.mb-read-card{padding:16px}.mb-read-line-header{display:none}.mb-read-line{grid-template-columns:1fr auto;gap:8px}.mb-read-line>*:nth-child(2){grid-column:1/-1}.mb-read-total{justify-content:space-between}.mb-readonly-heading>strong{font-size:1.05rem}.mb-read-dialog-backdrop{place-items:end center;padding:0}.mb-read-dialog{width:100%;min-height:0;max-height:calc(100dvh - 12px);border-radius:18px 18px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}.mb-read-dialog header{margin-bottom:14px}.mb-read-dialog-mobile-nav{display:grid;gap:6px;color:var(--mb-muted);font-size:.75rem;font-weight:750;letter-spacing:.05em;text-transform:uppercase}.mb-read-dialog-mobile-nav select{width:100%;min-height:48px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);font:inherit;font-size:1rem;font-weight:700;padding:10px 12px;text-transform:none}.mb-read-dialog-tabs{display:none}.mb-read-dialog-panel{padding-top:16px}.mb-read-directory-table-wrap{border:0;overflow:visible}.mb-read-directory-table,.mb-read-directory-table thead,.mb-read-directory-table tbody,.mb-read-directory-table tr,.mb-read-directory-table th,.mb-read-directory-table td{display:block}.mb-read-directory-table thead{display:none}.mb-read-directory-table tr{border:1px solid var(--mb-border);border-radius:10px;margin-bottom:10px;overflow:hidden}.mb-read-directory-table td{border-top:1px solid var(--mb-border)}.mb-read-directory-table td:first-child{border-top:0}}\n`;\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createBillReferenceClient,\n createBillSubmissionClient,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillClaimsAdministratorDirectory,\n type BrowserBillSubmissionDocument,\n type BrowserBillSubmissionResult,\n type BillLifecycleSessionProvider,\n type BillReviewPayer,\n type BillReviewPayerListInput,\n type BillReviewPayerOption,\n type BillReviewPayerPage,\n type BillReviewPayerSuggestion,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { SendRouteDialog, type SendRouteSubmission } from \"./send-route-dialog\";\nimport { ClaimsAdministratorDirectoryDialog } from \"./claims-administrator-directory-dialog\";\nimport {\n BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS,\n calculateBillSubmissionAllowedAmount,\n DEFAULT_BILL_SUBMISSION_MODIFIERS,\n DEFAULT_BILL_SUBMISSION_PROCEDURES,\n DEFAULT_BILL_SUBMISSION_TAXONOMIES,\n} from \"./billing-catalog\";\n\nexport const BILL_SUBMISSION_DOCUMENT_TYPES = [\n \"final_report\", \"proof_of_service\", \"letter_of_attestation\", \"form_122\",\n \"return_to_work_voucher\", \"w9\", \"medical_records\", \"appeal\", \"other\",\n] as const;\n\nexport type BillSubmissionDocumentType = (typeof BILL_SUBMISSION_DOCUMENT_TYPES)[number];\nexport type BillSubmissionAttachmentReportTypeMode = \"auto\" | \"hidden\" | \"visible\";\nexport type BillSubmissionReportTypeOption = { code: string; label: string };\nexport const MED_LEGAL_REPORT_TYPE_CODE = \"OZ:J4\";\nexport const BILL_SUBMISSION_REPORT_TYPES: readonly BillSubmissionReportTypeOption[] = [\n { code: \"OZ:J1\", label: \"Doctor's First Report (DLSR 5021)\" },\n { code: \"OZ:J2\", label: \"Supplemental Medical Report (BRs)\" },\n { code: \"OZ:J3\", label: \"Medical Permanent Impairment Report\" },\n { code: MED_LEGAL_REPORT_TYPE_CODE, label: \"Med-Legal Report\" },\n { code: \"OZ:J5\", label: \"Vocational Report\" },\n { code: \"OZ:J6\", label: \"Work Status Report\" },\n { code: \"OZ:J7\", label: \"Consultation Report\" },\n { code: \"OZ:J8\", label: \"Permanent Disability Report\" },\n { code: \"OZ:J9\", label: \"Itemized Statement\" },\n { code: \"03\", label: \"Justifying Treatment Beyond Utilization Guidelines\" },\n { code: \"04\", label: \"Drugs Administered\" }, { code: \"05\", label: \"Treatment Diagnosis\" },\n { code: \"06\", label: \"Initial Assessment\" }, { code: \"07\", label: \"Plan of Treatment\" },\n { code: \"08\", label: \"Plan of Treatment\" }, { code: \"09\", label: \"PR2 (Progress Report)\" },\n { code: \"10\", label: \"Continued Treatment\" }, { code: \"11\", label: \"Chemical Analysis\" },\n { code: \"13\", label: \"Certified Test Report\" }, { code: \"15\", label: \"Justification for Admission\" },\n { code: \"21\", label: \"Recovery Plan\" }, { code: \"A3\", label: \"Allergies/Sensitivities Document\" },\n { code: \"A4\", label: \"Autopsy Report\" }, { code: \"AM\", label: \"Ambulance Certification\" },\n { code: \"AS\", label: \"Admission Summary\" }, { code: \"B2\", label: \"Prescription\" },\n { code: \"B3\", label: \"Physician Order\" }, { code: \"B4\", label: \"Referral Form\" },\n { code: \"BR\", label: \"Benchmark Testing Results\" }, { code: \"BS\", label: \"Baseline\" },\n { code: \"BT\", label: \"Blanket Test Results\" }, { code: \"CB\", label: \"Chiropractic Justification\" },\n { code: \"CK\", label: \"Canceled Check\" }, { code: \"CT\", label: \"Certification\" },\n { code: \"D2\", label: \"Drug Profile Document\" }, { code: \"DA\", label: \"Dental Models\" },\n { code: \"DB\", label: \"Durable Medical Equipment RX\" }, { code: \"DG\", label: \"Diagnostic Report\" },\n { code: \"DJ\", label: \"Discharge Monitoring Report\" }, { code: \"DS\", label: \"Discharge Summary\" },\n { code: \"EB\", label: \"Explanation of Benefits\" }, { code: \"HC\", label: \"Health Clinic Records (HC)\" },\n { code: \"HR\", label: \"Health Clinic Records (HR)\" }, { code: \"I5\", label: \"Immunization Record\" },\n { code: \"IR\", label: \"State School Immunization Records\" }, { code: \"LA\", label: \"Laboratory Results\" },\n { code: \"M1\", label: \"Medical Record Attachment\" }, { code: \"MT\", label: \"Nursing Notes\" },\n { code: \"NN\", label: \"Minor Deviation Request\" }, { code: \"OB\", label: \"Operative Note\" },\n { code: \"OC\", label: \"Oxygen Content Averaging Report\" }, { code: \"OD\", label: \"Orders and Treatments Document\" },\n { code: \"OE\", label: \"Objective Physical Examination Doc\" }, { code: \"OX\", label: \"Oxygen Therapy Certification\" },\n { code: \"OZ\", label: \"Support Data for Bill\" }, { code: \"P4\", label: \"Pathology Report\" },\n { code: \"P5\", label: \"Patient Medical History Document\" }, { code: \"PE\", label: \"Periodontal Charts\" },\n { code: \"PN\", label: \"Physical Therapy Notes\" }, { code: \"PO\", label: \"Prosthetics or Orthotic Certification\" },\n { code: \"PQ\", label: \"Paramedical Results\" }, { code: \"PY\", label: \"Physician's Report\" },\n { code: \"PZ\", label: \"Physical Therapy Certification\" }, { code: \"RB\", label: \"Radiology Films\" },\n { code: \"RR\", label: \"Radiology Reports\" }, { code: \"RT\", label: \"Report of tests and Analysis Report\" },\n { code: \"RX\", label: \"Renewable Oxygen Content Averaging Report\" }, { code: \"SG\", label: \"Symptoms Document\" },\n { code: \"V5\", label: \"Death Notification\" }, { code: \"XP\", label: \"Photographs\" },\n] as const;\nexport type BillSubmissionEvaluationType = \"qme\" | \"ame\" | \"psych_qme\";\nexport type BillSubmissionAddress = { line1: string; line2?: string; city: string; state: string; postalCode: string };\nexport type BillSubmissionDiagnosisOption = { code: string; description: string };\nexport type BillSubmissionProcedureOption = { code: string; description: string; allowedAmount?: number };\nexport type BillSubmissionModifierOption = { code: string; description: string };\nexport type BillSubmissionTaxonomyOption = { code: string; description: string };\nexport type BillSubmissionPostalPlace = { city: string; state: string };\n\nexport type BillSubmissionInput = {\n externalId?: string;\n billingMode?: \"med_legal\" | \"professional\";\n patient: {\n id?: string; externalId?: string; firstName: string; middleName?: string; lastName: string;\n dateOfBirth: string; ssn?: string; gender?: \"M\" | \"F\" | \"X\"; phone?: string;\n address: BillSubmissionAddress;\n };\n claim: {\n id?: string; externalId?: string; claimNumber: string; adjNumber?: string; employer?: string;\n dateOfInjury?: string; injuryState?: string; description?: string;\n claimsAdministrator?: {\n id?: string;\n name: string;\n /** The chosen payer (subpayor) when the claims administrator requires payer selection. */\n payerId?: string;\n /** Directory metadata carried while editing; stripped from the submitted bill. */\n payerSelectionRequired?: boolean;\n payers?: BillReviewPayerOption[];\n };\n };\n service: { date: string; endDate?: string | null; authorizationNumber?: string | null };\n billingProvider?: {\n name?: string; taxId?: string; npi?: string; phone?: string; address?: BillSubmissionAddress;\n };\n renderingProvider?: {\n name?: string; specialty?: string; npi?: string; taxonomy?: string; licenseNumber?: string;\n licenseState?: string; isQme?: boolean; isAme?: boolean;\n };\n serviceLocation?: { name?: string; address?: BillSubmissionAddress; placeOfServiceCode?: string };\n diagnoses?: string[];\n serviceLines: Array<{\n code: string; modifiers?: string[]; units?: number; serviceDate?: string;\n serviceDateEnd?: string | null; charge?: number; diagnosisPointers?: number[];\n }>;\n};\n\n/** A validated, submission-ready bill. The form accepts partial provider data while editing,\n * but only emits this complete contract after every required field has passed validation. */\nexport type CompleteBillSubmissionInput = Omit<\n BillSubmissionInput,\n \"claim\" | \"billingProvider\" | \"renderingProvider\" | \"serviceLocation\" | \"diagnoses\" | \"serviceLines\"\n> & {\n claim: BillSubmissionInput[\"claim\"] & {\n employer: string;\n dateOfInjury: string;\n claimsAdministrator: { id: string; name: string; payerId?: string };\n };\n billingProvider: {\n name: string; taxId: string; npi: string; phone: string; address: BillSubmissionAddress;\n };\n renderingProvider: NonNullable<BillSubmissionInput[\"renderingProvider\"]> & {\n name: string; npi: string; taxonomy: string;\n };\n serviceLocation: NonNullable<BillSubmissionInput[\"serviceLocation\"]> & {\n address: BillSubmissionAddress; placeOfServiceCode: string;\n };\n diagnoses: string[];\n serviceLines: BillSubmissionInput[\"serviceLines\"];\n};\n\nexport type BillSubmissionSourceAttachment = {\n id: string;\n fileName: string;\n documentType: BillSubmissionDocumentType;\n description?: string;\n /** @deprecated Source attachments shown in the form are included until removed. */\n selected?: boolean;\n /** Marks a document that the host selected by default. This does not imply that it is locked. */\n autoAttached?: boolean;\n /** Controls whether the user can remove the document from this submission packet. Defaults to false for auto-attached documents and true otherwise. */\n removable?: boolean;\n previewUrl?: string;\n /** Authenticated source loader used when the document is not available at a public URL. */\n loadBlob?: () => Promise<Blob>;\n reportTypeCode?: string;\n};\nexport type BillSubmissionUpload = { file: File; documentType: BillSubmissionDocumentType; description?: string; reportTypeCode?: string };\nexport type BillSubmissionFormValue = {\n bill: CompleteBillSubmissionInput;\n sourceAttachmentIds: string[];\n sourceAttachmentReportTypes: Record<string, string>;\n uploads: BillSubmissionUpload[];\n};\n\nexport type BillSubmissionFormProps = {\n initialBill: BillSubmissionInput;\n attachments?: BillSubmissionSourceAttachment[];\n /**\n * Legacy custom submission escape hatch. Connected forms should omit this so\n * the component owns PDF encoding and the Partner API wire contract.\n */\n onSubmit?: (value: BillSubmissionFormValue) => void | Promise<void>;\n /** Called after the connected component atomically creates and submits the bill. */\n onSubmitted?: (result: BrowserBillSubmissionResult) => void | Promise<void>;\n /** Short-lived partner browser session. Enables reference data and direct submission. */\n getSession?: BillLifecycleSessionProvider;\n sessionEndpoint?: string;\n apiBaseUrl?: string;\n fetch?: typeof globalThis.fetch;\n /** Paginated claims-administrator directory. Empty queries return the alphabetical first page. */\n onListClaimsAdministrators?: (input?: BillReviewPayerListInput) => Promise<BillReviewPayerPage>;\n /** @deprecated Prefer onListClaimsAdministrators for browse and pagination support. */\n onSearchClaimsAdministrators?: (query: string, claimNumber?: string) => Promise<BillReviewPayer[]>;\n onGetClaimsAdministratorDirectory?: (id: string, injuryState?: string) => Promise<BillClaimsAdministratorDirectory>;\n /** Host-system evidence shown without preselecting a canonical directory entry. EAMS evidence takes precedence. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /** @deprecated Prefer claimsAdministratorSources so the source label and optional URL remain explicit. */\n claimsAdministratorHint?: ReactNode;\n diagnosisOptions?: BillSubmissionDiagnosisOption[];\n onSearchDiagnoses?: (query: string, limit?: number, offset?: number) => Promise<BillSubmissionDiagnosisOption[]>;\n onLookupPostalCode?: (postalCode: string) => Promise<BillSubmissionPostalPlace | null>;\n procedureOptions?: BillSubmissionProcedureOption[];\n modifierOptions?: BillSubmissionModifierOption[];\n /** Common NUCC provider taxonomies are bundled; supplied values extend or replace matching codes. */\n taxonomyOptions?: BillSubmissionTaxonomyOption[];\n /**\n * The delivery-method dialog shown when the biller submits.\n * \"auto\" (default) shows it in connected mode whenever the delivery preview\n * is available; \"off\" submits directly on MindBill's recommended route.\n */\n deliveryRoutePicker?: \"auto\" | \"off\";\n /** Auto hides and forces J4 for med-legal bills; treatment bills show the full report-type directory. */\n attachmentReportTypeMode?: BillSubmissionAttachmentReportTypeMode;\n attachmentReportTypes?: readonly BillSubmissionReportTypeOption[];\n defaultAttachmentReportType?: string;\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n submitLabel?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** Rejected-field paths to visually call out while the user corrects the next submission. */\n attentionFields?: string[];\n attentionMessage?: ReactNode;\n /**\n * Optional composable layout. Use the exported section components as children;\n * the parent form continues to own validation, directory lookups, uploads, and submission.\n */\n children?: ReactNode;\n};\n\nexport const BILL_SUBMISSION_REQUIRED_FIELDS = [\n \"patient.firstName\", \"patient.lastName\", \"patient.dateOfBirth\", \"patient.address.line1\",\n \"patient.address.city\", \"patient.address.state\", \"patient.address.postalCode\",\n \"claim.claimNumber\", \"claim.employer\", \"claim.dateOfInjury\", \"claim.claimsAdministrator\", \"service.date\",\n \"billingProvider.name\", \"billingProvider.taxId\", \"billingProvider.npi\", \"billingProvider.phone\",\n \"billingProvider.address.line1\", \"billingProvider.address.city\", \"billingProvider.address.state\", \"billingProvider.address.postalCode\",\n \"renderingProvider.name\", \"renderingProvider.npi\", \"renderingProvider.taxonomy\",\n \"serviceLocation.placeOfServiceCode\", \"serviceLocation.address.line1\", \"serviceLocation.address.city\",\n \"serviceLocation.address.state\", \"serviceLocation.address.postalCode\",\n \"diagnoses[]\",\n \"serviceLines[].code\", \"serviceLines[].units\",\n] as const;\n\nexport type BillSubmissionValidation = { valid: boolean; fieldErrors: Record<string, string> };\n\nconst documentLabels: Record<BillSubmissionDocumentType, string> = {\n final_report: \"Final report\", proof_of_service: \"Proof of service\",\n letter_of_attestation: \"Letter of attestation\", form_122: \"Form 122\",\n return_to_work_voucher: \"Return-to-work voucher\", w9: \"W-9\",\n medical_records: \"Medical records\", appeal: \"Appeal\", other: \"Other\",\n};\nconst MAX_PDF_BYTES = 25 * 1024 * 1024;\nconst MAX_UPLOAD_BYTES = 100 * 1024 * 1024;\nconst MAX_DOCUMENTS = 25;\nconst DIAGNOSIS_PAGE_SIZE = 100;\nconst PAYER_PAGE_SIZE = 50;\nconst EMPTY_ATTACHMENTS: BillSubmissionSourceAttachment[] = [];\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = \"\";\n for (let offset = 0; offset < bytes.length; offset += 32_768) {\n binary += String.fromCharCode(...bytes.subarray(offset, offset + 32_768));\n }\n return globalThis.btoa(binary);\n}\n\nasync function pdfDocument(\n blob: Blob,\n input: Omit<BrowserBillSubmissionDocument, \"contentBase64\">,\n): Promise<BrowserBillSubmissionDocument> {\n if (blob.size > MAX_PDF_BYTES) throw new Error(`${input.filename} is larger than 25 MB.`);\n const bytes = new Uint8Array(await blob.arrayBuffer());\n if (\n bytes.length < 5\n || bytes[0] !== 0x25\n || bytes[1] !== 0x50\n || bytes[2] !== 0x44\n || bytes[3] !== 0x46\n || bytes[4] !== 0x2d\n ) {\n throw new Error(`${input.filename} is not a valid PDF.`);\n }\n return { ...input, contentBase64: bytesToBase64(bytes) };\n}\n\nexport async function prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId = {},\n defaultReportTypeCode,\n fetch: fetchOverride,\n}: {\n attachments: BillSubmissionSourceAttachment[];\n selectedIds: string[];\n uploads: BillSubmissionUpload[];\n reportTypeCodeByAttachmentId?: Record<string, string>;\n defaultReportTypeCode?: string;\n fetch?: typeof globalThis.fetch;\n}): Promise<BrowserBillSubmissionDocument[]> {\n const fetcher = fetchOverride ?? globalThis.fetch;\n const selected = selectedIds.map((id) => attachments.find((item) => item.id === id)).filter((item): item is BillSubmissionSourceAttachment => Boolean(item));\n const sourceDocuments = await Promise.all(selected.map(async (attachment) => {\n let blob: Blob;\n if (attachment.loadBlob) blob = await attachment.loadBlob();\n else {\n if (!attachment.previewUrl) throw new Error(`${attachment.fileName} cannot be submitted because its document URL is missing.`);\n if (typeof fetcher !== \"function\") throw new Error(\"A Fetch API implementation is required.\");\n const response = await fetcher(attachment.previewUrl, { credentials: \"same-origin\" });\n if (!response.ok) throw new Error(`${attachment.fileName} could not be loaded for submission.`);\n blob = await response.blob();\n }\n return pdfDocument(blob, {\n externalId: attachment.id,\n filename: attachment.fileName,\n documentType: attachment.documentType,\n ...((reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCodeByAttachmentId[attachment.id] || attachment.reportTypeCode || defaultReportTypeCode } : {}),\n ...(attachment.description ? { description: attachment.description } : {}),\n });\n }));\n const uploadedDocuments = await Promise.all(uploads.map(({ file, documentType, description, reportTypeCode }) => pdfDocument(file, {\n filename: file.name,\n documentType,\n ...((reportTypeCode || defaultReportTypeCode) ? { reportTypeCode: reportTypeCode || defaultReportTypeCode } : {}),\n ...(description ? { description } : {}),\n })));\n return [...sourceDocuments, ...uploadedDocuments];\n}\n\nfunction previewUploadedPdf(file: File): void {\n const url = URL.createObjectURL(file);\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n window.setTimeout(() => URL.revokeObjectURL(url), 60_000);\n}\n\nfunction blankLine(): BillSubmissionInput[\"serviceLines\"][number] {\n return { code: \"\", modifiers: [], units: 1 };\n}\nfunction lineHasContent(line: BillSubmissionInput[\"serviceLines\"][number]): boolean {\n return Boolean(line.code.trim() || line.modifiers?.length || line.charge != null);\n}\nexport function ensureTrailingBillSubmissionLine(\n lines: BillSubmissionInput[\"serviceLines\"],\n): BillSubmissionInput[\"serviceLines\"] {\n const normalized: BillSubmissionInput[\"serviceLines\"] = lines.length ? lines.map((line) => ({ ...line, modifiers: [...(line.modifiers ?? [])], units: line.units ?? 1 })) : [];\n while (normalized.length > 1 && !lineHasContent(normalized.at(-1)!) && !lineHasContent(normalized.at(-2)!)) normalized.pop();\n if (!normalized.length || lineHasContent(normalized.at(-1)!)) normalized.push(blankLine());\n return normalized;\n}\n\nexport function parseBillSubmissionDate(value: string): string | undefined {\n const trimmed = value.trim();\n const iso = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(trimmed);\n const us = /^(\\d{1,2})[/-](\\d{1,2})[/-](\\d{4})$/.exec(trimmed);\n const digits = /^(\\d{2})(\\d{2})(\\d{4})$/.exec(trimmed.replace(/\\D/g, \"\"));\n const match = iso ? [iso[2], iso[3], iso[1]] : us ? [us[1], us[2], us[3]] : digits ? [digits[1], digits[2], digits[3]] : null;\n if (!match) return undefined;\n const month = Number(match[0]); const day = Number(match[1]); const year = Number(match[2]);\n const date = new Date(Date.UTC(year, month - 1, day));\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) return undefined;\n return `${String(year).padStart(4, \"0\")}-${String(month).padStart(2, \"0\")}-${String(day).padStart(2, \"0\")}`;\n}\nexport function formatBillSubmissionDate(value: string | null | undefined): string {\n const parsed = value ? parseBillSubmissionDate(value) : undefined;\n if (!parsed) return \"\";\n const [year, month, day] = parsed.split(\"-\");\n return `${month}/${day}/${year}`;\n}\n\nfunction evaluationModifier(type: BillSubmissionEvaluationType, code: string): string | undefined {\n if (!/^ML(?:200|201|202|203|PRR)$/.test(code.toUpperCase())) return undefined;\n if (type === \"ame\") return code.toUpperCase() === \"ML200\" || code.toUpperCase() === \"MLPRR\" ? undefined : \"94\";\n if (type === \"psych_qme\") return code.toUpperCase() === \"ML200\" ? \"95\" : code.toUpperCase() === \"MLPRR\" ? undefined : \"96\";\n return \"95\";\n}\nexport function applyBillSubmissionEvaluationModifiers(\n lines: BillSubmissionInput[\"serviceLines\"], type: BillSubmissionEvaluationType,\n): BillSubmissionInput[\"serviceLines\"] {\n return lines.map((line) => {\n const auto = evaluationModifier(type, line.code);\n const modifiers = (line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")));\n return { ...line, modifiers: auto ? [auto, ...modifiers] : modifiers };\n });\n}\n\nexport const PSYCH_QME_DEFAULT_DIAGNOSIS = \"Z04.6\";\n\n/** Seed Psych QME's general examination code only when no diagnosis was supplied. */\nexport function applyBillSubmissionEvaluationDiagnoses(\n diagnoses: string[] | undefined,\n type: BillSubmissionEvaluationType,\n): string[] {\n const current = [...(diagnoses ?? [])];\n return type === \"psych_qme\" && !current.some((code) => code.trim())\n ? [PSYCH_QME_DEFAULT_DIAGNOSIS]\n : current;\n}\n\nfunction initialEvaluationType(bill: BillSubmissionInput): BillSubmissionEvaluationType {\n if (bill.renderingProvider?.isAme) return \"ame\";\n return bill.renderingProvider?.specialty?.toLowerCase().includes(\"psych\") ? \"psych_qme\" : \"qme\";\n}\n\nfunction cloneInitialBill(bill: BillSubmissionInput): BillSubmissionInput {\n const cloned = cloneBill(bill);\n cloned.diagnoses = applyBillSubmissionEvaluationDiagnoses(cloned.diagnoses, initialEvaluationType(bill));\n return cloned;\n}\n\nfunction submittedLines(lines: BillSubmissionInput[\"serviceLines\"]): BillSubmissionInput[\"serviceLines\"] {\n return lines.filter(lineHasContent).map((line) => ({ ...line, code: line.code.trim(), modifiers: [...(line.modifiers ?? [])] }));\n}\nfunction cloneBill(bill: BillSubmissionInput): BillSubmissionInput {\n return {\n ...bill,\n patient: { ...bill.patient, address: { ...bill.patient.address } },\n claim: { ...bill.claim, ...(bill.claim.claimsAdministrator ? { claimsAdministrator: { ...bill.claim.claimsAdministrator } } : {}) },\n service: { ...bill.service },\n ...(bill.billingProvider ? { billingProvider: { ...bill.billingProvider, ...(bill.billingProvider.address ? { address: { ...bill.billingProvider.address } } : {}) } } : {}),\n ...(bill.renderingProvider ? { renderingProvider: { ...bill.renderingProvider } } : {}),\n ...(bill.serviceLocation ? { serviceLocation: { ...bill.serviceLocation, ...(bill.serviceLocation.address ? { address: { ...bill.serviceLocation.address } } : {}) } } : {}),\n diagnoses: [...(bill.diagnoses ?? [])],\n serviceLines: ensureTrailingBillSubmissionLine(bill.serviceLines),\n };\n}\nexport function validateBillSubmission(bill: BillSubmissionInput): BillSubmissionValidation {\n const errors: Record<string, string> = {};\n const required = (path: string, value: unknown, message: string) => { if (typeof value !== \"string\" || !value.trim()) errors[path] = message; };\n required(\"patient.firstName\", bill.patient.firstName, \"Enter the patient's first name.\");\n required(\"patient.lastName\", bill.patient.lastName, \"Enter the patient's last name.\");\n required(\"patient.dateOfBirth\", bill.patient.dateOfBirth, \"Enter the patient's date of birth.\");\n required(\"patient.address.line1\", bill.patient.address.line1, \"Enter the patient's street address.\");\n required(\"patient.address.city\", bill.patient.address.city, \"Enter the patient's city.\");\n required(\"patient.address.state\", bill.patient.address.state, \"Enter the patient's 2-letter state code.\");\n required(\"patient.address.postalCode\", bill.patient.address.postalCode, \"Enter the patient's ZIP code.\");\n required(\"claim.claimNumber\", bill.claim.claimNumber, \"Enter the claim number.\");\n required(\"claim.employer\", bill.claim.employer, \"Enter the employer name.\");\n required(\"claim.dateOfInjury\", bill.claim.dateOfInjury, \"Enter the date of injury.\");\n required(\"claim.claimsAdministrator\", bill.claim.claimsAdministrator?.name, \"Select a claims administrator so MindBill can route this bill.\");\n required(\"service.date\", bill.service.date, \"Enter the date of service.\");\n required(\"billingProvider.name\", bill.billingProvider?.name, \"Enter the billing provider name.\");\n required(\"billingProvider.taxId\", bill.billingProvider?.taxId, \"Enter the billing provider Tax ID (EIN or SSN).\");\n required(\"billingProvider.npi\", bill.billingProvider?.npi, \"Enter the billing provider NPI.\");\n required(\"billingProvider.phone\", bill.billingProvider?.phone, \"Enter the billing provider phone number.\");\n required(\"billingProvider.address.line1\", bill.billingProvider?.address?.line1, \"Enter the billing provider street address.\");\n required(\"billingProvider.address.city\", bill.billingProvider?.address?.city, \"Enter the billing provider city.\");\n required(\"billingProvider.address.state\", bill.billingProvider?.address?.state, \"Enter the billing provider 2-letter state code.\");\n required(\"billingProvider.address.postalCode\", bill.billingProvider?.address?.postalCode, \"Enter the billing provider ZIP code.\");\n required(\"renderingProvider.name\", bill.renderingProvider?.name, \"Enter the rendering provider name.\");\n required(\"renderingProvider.npi\", bill.renderingProvider?.npi, \"Enter the rendering provider NPI.\");\n required(\"renderingProvider.taxonomy\", bill.renderingProvider?.taxonomy, \"Enter the rendering provider taxonomy code.\");\n required(\"serviceLocation.placeOfServiceCode\", bill.serviceLocation?.placeOfServiceCode, \"Enter the 2-digit place of service code.\");\n required(\"serviceLocation.address.line1\", bill.serviceLocation?.address?.line1, \"Enter the service facility street address.\");\n required(\"serviceLocation.address.city\", bill.serviceLocation?.address?.city, \"Enter the service facility city.\");\n required(\"serviceLocation.address.state\", bill.serviceLocation?.address?.state, \"Enter the service facility 2-letter state code.\");\n required(\"serviceLocation.address.postalCode\", bill.serviceLocation?.address?.postalCode, \"Enter the service facility ZIP code.\");\n if (!(bill.diagnoses ?? []).some((code) => code.trim())) {\n errors.diagnoses = \"Select at least one ICD-10 diagnosis code.\";\n }\n if (bill.claim.claimsAdministrator?.name && !bill.claim.claimsAdministrator.id) {\n errors[\"claim.claimsAdministrator\"] = \"Select a claims administrator from the payer directory.\";\n }\n if (bill.claim.claimsAdministrator?.payerSelectionRequired && !bill.claim.claimsAdministrator.payerId?.trim()) {\n errors[\"claim.claimsAdministrator.payerId\"] = \"Select the payer for this claims administrator.\";\n }\n if (bill.patient.dateOfBirth && !parseBillSubmissionDate(bill.patient.dateOfBirth)) errors[\"patient.dateOfBirth\"] = \"Use MM/DD/YYYY\";\n if (bill.claim.dateOfInjury && !parseBillSubmissionDate(bill.claim.dateOfInjury)) errors[\"claim.dateOfInjury\"] = \"Use MM/DD/YYYY\";\n if (bill.patient.address.state.trim().length !== 2) errors[\"patient.address.state\"] = \"Use a 2-letter state code\";\n if (bill.billingProvider?.address?.state && bill.billingProvider.address.state.trim().length !== 2) errors[\"billingProvider.address.state\"] = \"Use a 2-letter state code.\";\n if (bill.serviceLocation?.address?.state && bill.serviceLocation.address.state.trim().length !== 2) errors[\"serviceLocation.address.state\"] = \"Use a 2-letter state code.\";\n const digits = (value?: string) => value?.replace(/\\D/g, \"\") ?? \"\";\n if (bill.billingProvider?.taxId && digits(bill.billingProvider.taxId).length !== 9) errors[\"billingProvider.taxId\"] = \"Enter a valid 9-digit EIN or SSN.\";\n if (bill.billingProvider?.npi && !/^\\d{10}$/.test(digits(bill.billingProvider.npi))) errors[\"billingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.npi && !/^\\d{10}$/.test(digits(bill.renderingProvider.npi))) errors[\"renderingProvider.npi\"] = \"Enter a valid 10-digit NPI.\";\n if (bill.renderingProvider?.taxonomy && !/^[A-Za-z0-9]{10}$/.test(bill.renderingProvider.taxonomy.trim())) errors[\"renderingProvider.taxonomy\"] = \"Enter a valid 10-character taxonomy code.\";\n if (bill.serviceLocation?.placeOfServiceCode && !/^\\d{2}$/.test(bill.serviceLocation.placeOfServiceCode.trim())) errors[\"serviceLocation.placeOfServiceCode\"] = \"Enter a valid 2-digit place of service code.\";\n const lines = submittedLines(bill.serviceLines);\n if (!lines.length) errors.serviceLines = \"Add at least one service line\";\n lines.forEach((line, index) => {\n required(`serviceLines.${index}.code`, line.code, \"Select a procedure code.\");\n if (!Number.isInteger(line.units) || (line.units ?? 0) < 1) errors[`serviceLines.${index}.units`] = \"Enter at least 1 unit\";\n if (bill.billingMode === \"professional\" && (!Number.isFinite(line.charge) || (line.charge ?? 0) < 0)) errors[`serviceLines.${index}.charge`] = \"Enter the billed charge\";\n });\n return { valid: Object.keys(errors).length === 0, fieldErrors: errors };\n}\n\nconst css = `\n.mbsf{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbsf *{box-sizing:border-box}\n.mbsf-attention{padding:14px 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));color:var(--mb-text)}.mbsf [data-attention=true] .mbsf-input,.mbsf [data-attention=true] .mbsf-select,.mbsf [data-attention=true].mbsf-lines{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf [data-attention=true]>.mbsf-label{color:var(--mb-danger)}\n.mbsf-head,.mbsf-section-head,.mbsf-attach-row,.mbsf-actions{display:flex;align-items:center;justify-content:space-between;gap:16px}.mbsf-title{margin:0;font-size:24px}.mbsf-copy,.mbsf-help{color:var(--mb-muted);margin:5px 0 0}.mbsf-required{font-size:13px;color:var(--mb-muted);white-space:nowrap}.mbsf-star,.mbsf-error{color:var(--mb-danger)}\n.mbsf-card{min-width:0;margin:0;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}.mbsf-card[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-legend{padding:0 10px;font-size:18px;font-weight:760}.mbsf-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px}.mbsf-subhead{grid-column:1/-1;margin:6px 0 -2px;padding-top:14px;border-top:1px solid var(--mb-border);font-size:15px;font-weight:780;letter-spacing:.01em}.mbsf-subhead:first-child{margin-top:0;padding-top:0;border-top:0}.mbsf-span{grid-column:1/-1}.mbsf-field{display:grid;align-content:start;gap:7px;min-width:0}.mbsf-label{font-weight:680}.mbsf-input,.mbsf-select{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbsf-input:focus,.mbsf-select:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}.mbsf-field[data-invalid=true] .mbsf-input,.mbsf-field[data-invalid=true] .mbsf-select,.mbsf-invalid-control .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-field[data-invalid=true] .mbsf-input:focus,.mbsf-field[data-invalid=true] .mbsf-select:focus{outline-color:color-mix(in srgb,var(--mb-danger) 24%,transparent)}\n.mbsf-combo{position:relative}.mbsf-menu{position:absolute;z-index:20;top:calc(100% + 5px);left:0;right:0;max-height:min(420px,52vh);overflow:auto;overscroll-behavior:contain;padding:7px;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);box-shadow:0 14px 35px rgba(17,38,49,.16)}.mbsf-option{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:14px;width:100%;padding:11px 12px;border:0;border-radius:8px;background:transparent;color:var(--mb-text);font:inherit;text-align:left;cursor:pointer}.mbsf-option+.mbsf-option{border-top:1px solid color-mix(in srgb,var(--mb-border) 65%,transparent)}.mbsf-option:hover,.mbsf-option:focus{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface));outline:0}.mbsf-option-main{display:grid;gap:5px;min-width:0}.mbsf-option small{color:var(--mb-muted);overflow-wrap:anywhere;line-height:1.35}.mbsf-option-route{align-self:start;margin-top:2px;color:var(--mb-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbsf-option-badges{display:flex;flex-wrap:wrap;gap:5px}.mbsf-option-badge{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:11px;line-height:1.35}.mbsf-option-affiliates{display:block}.mbsf-option-affiliates strong{color:var(--mb-text);font-size:12px}.mbsf-menu-status{padding:12px;text-align:center;color:var(--mb-muted);font-size:13px}.mbsf-directory-link{justify-self:start;border:0;padding:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:700;text-align:left;text-decoration:underline;cursor:pointer}\n.mbsf-payer-status{display:flex;align-items:center;gap:7px;color:#087f5b;font-size:13px;font-weight:650}.mbsf-payer-intro{margin:4px 0 0;color:var(--mb-muted)}.mbsf-payer-list{display:grid;gap:8px}.mbsf-payer-option{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface))}.mbsf-payer-option-main{display:grid;gap:5px;min-width:0}.mbsf-payer-option-main strong{overflow-wrap:anywhere}.mbsf-payer-signals{display:flex;flex-wrap:wrap;gap:6px}.mbsf-payer-signal{padding:2px 7px;border:1px solid var(--mb-border);border-radius:999px;color:var(--mb-muted);font-size:12px}.mbsf-payer-signal[data-state=match]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));color:#087f5b}.mbsf-payer-signal[data-state=warning]{border-color:color-mix(in srgb,#c56a00 55%,var(--mb-border));color:#9a5200}\n.mbsf-source-evidence{display:grid;gap:4px;color:var(--mb-muted);font-size:13px}.mbsf-source-evidence a{color:var(--mb-accent);font-weight:700}.mbsf-source-evidence q{color:var(--mb-text)}.mbsf-suggestions{display:flex;align-items:center;flex-wrap:wrap;gap:7px;color:var(--mb-muted);font-size:13px}.mbsf-suggestion{padding:5px 10px;border:1px solid color-mix(in srgb,var(--mb-accent) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));color:var(--mb-accent);font:inherit;font-weight:700;cursor:pointer}.mbsf-suggestion:hover,.mbsf-suggestion:focus{outline:2px solid color-mix(in srgb,var(--mb-accent) 25%,transparent)}.mbsf-claim-patterns{display:grid;gap:4px;margin-top:2px;font-size:13px}.mbsf-claim-patterns[data-state=match]{color:#087f5b}.mbsf-claim-patterns[data-state=warning]{color:#9a5200}.mbsf-claim-pattern-list{color:var(--mb-muted)}\n.mbsf-chips,.mbsf-quick-picks{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:8px}.mbsf-chip,.mbsf-quick-pick{display:inline-flex;align-items:center;gap:7px;padding:5px 9px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-input)}.mbsf-chip button{border:0;background:transparent;color:var(--mb-muted);cursor:pointer;font:inherit}.mbsf-quick-pick{color:var(--mb-text);font:inherit;cursor:pointer}.mbsf-quick-pick[data-selected=true]{border-color:var(--mb-accent);color:var(--mb-accent)}\n.mbsf-segments{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:hidden}.mbsf-segment{min-height:44px;border:0;border-right:1px solid var(--mb-border);background:var(--mb-input);color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}.mbsf-segment:last-child{border-right:0}.mbsf-segment[aria-pressed=true]{background:var(--mb-accent);color:var(--mb-accent-contrast)}\n.mbsf-lines{margin-top:18px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);overflow:visible}.mbsf-lines[data-invalid=true]{border-color:var(--mb-danger)}.mbsf-line-head,.mbsf-line{display:grid;grid-template-columns:minmax(190px,1.05fr) minmax(190px,1.3fr) minmax(112px,.7fr) 100px 120px 42px;gap:12px;align-items:start;padding:12px}.mbsf-line-head{color:var(--mb-muted);font-size:13px;font-weight:700;border-bottom:1px solid var(--mb-border)}.mbsf-line{border-bottom:1px solid var(--mb-border)}.mbsf-line:last-child{border-bottom:0}.mbsf-line [data-invalid=true] .mbsf-input{border-color:var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 4%,var(--mb-input))}.mbsf-money{padding-top:12px;text-align:right;font-variant-numeric:tabular-nums}.mbsf-dx{display:flex;flex-wrap:wrap;gap:5px;padding-top:6px}.mbsf-dx-chip{width:30px;height:30px;border:1px solid var(--mb-border);border-radius:8px;background:var(--mb-surface);color:var(--mb-muted);font:inherit;font-size:13px;font-weight:750;cursor:pointer}.mbsf-dx-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}.mbsf-total{display:flex;justify-content:flex-end;gap:45px;padding:16px 56px 16px 16px;font-size:17px;font-weight:760}\n.mbsf-icon-btn{width:40px;height:42px;border:0;background:transparent;color:var(--mb-text);font-size:22px;cursor:pointer}.mbsf-secondary{min-height:40px;padding:8px 14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}.mbsf-attach-list{display:grid;gap:10px;margin-bottom:18px}.mbsf-attach-row{padding:14px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius)}.mbsf-attach-row[data-auto=true]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 5%,var(--mb-surface))}.mbsf-attach-main{display:flex;align-items:center;gap:12px;min-width:0;flex:1}.mbsf-attach-type{width:min(360px,32vw);flex:0 1 360px}.mbsf-attach-type .mbsf-label{display:block;margin-bottom:6px;font-size:12px}.mbsf-attach-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}.mbsf-file{min-width:0}.mbsf-file strong{overflow-wrap:anywhere}.mbsf-badge{display:inline-block;margin-left:8px;padding:2px 7px;border:1px solid var(--mb-border);border-radius:7px;color:var(--mb-muted);font-size:12px;font-weight:600}.mbsf-drop{display:grid;width:100%;place-items:center;min-height:210px;padding:30px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));color:var(--mb-text);font:inherit;text-align:center;cursor:pointer}.mbsf-drop[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface))}.mbsf-alert{padding:12px 14px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger)}.mbsf-actions{justify-content:flex-end}.mbsf-submit{min-width:180px;min-height:48px;padding:11px 24px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:780;cursor:pointer}\n@media(max-width:820px){.mbsf{gap:16px}.mbsf-grid{grid-template-columns:1fr}.mbsf-span{grid-column:auto}.mbsf-card{padding:18px 16px}.mbsf-line-head{display:none}.mbsf-line{position:relative;display:grid;grid-template-columns:minmax(0,1fr) 86px;gap:14px;padding:18px 16px}.mbsf-line>div:before{display:block;margin-bottom:6px;color:var(--mb-muted);font-size:12px;font-weight:700;content:attr(data-label)}.mbsf-line>div:nth-child(1),.mbsf-line>div:nth-child(2),.mbsf-line>div:nth-child(3){grid-column:1/-1}.mbsf-money{align-self:end;padding:0 0 12px;text-align:right}.mbsf-line .mbsf-icon-btn{position:absolute;right:8px;bottom:3px}.mbsf-total{padding:16px 18px;gap:24px}.mbsf-head{align-items:flex-start}.mbsf-segments{grid-template-columns:repeat(3,minmax(0,1fr))}.mbsf-segment{min-width:0;padding:8px 4px;border-right:1px solid var(--mb-border);border-bottom:0;font-size:13px}.mbsf-segment:last-child{border-right:0}.mbsf-payer-option{align-items:flex-start}.mbsf-attach-row{align-items:flex-start;flex-wrap:wrap}.mbsf-attach-main{align-items:flex-start;flex-basis:calc(100% - 150px)}.mbsf-attach-type{width:100%;flex-basis:100%;order:3}.mbsf-attach-actions{margin-left:auto}.mbsf-drop{min-height:190px;padding:24px 18px}.mbsf-actions{position:sticky;bottom:86px;z-index:10}.mbsf.mbsf-lifecycle-correction .mbsf-actions{position:static;bottom:auto}.mbsf-submit{width:100%}}\n`;\n\nfunction RequiredMark(): ReactElement { return <span className=\"mbsf-star\"> *</span>; }\nfunction Field({ label, required, error, invalid, path, span, children }: { label: string; required?: boolean; error?: string | undefined; invalid?: boolean; path?: string; span?: boolean; children: ReactNode }): ReactElement {\n return <label className={`mbsf-field${span ? \" mbsf-span\" : \"\"}`} data-field-path={path} data-invalid={Boolean(error) || invalid}><span className=\"mbsf-label\">{label}{required ? <RequiredMark /> : null}</span>{children}{error ? <small className=\"mbsf-error\" role=\"alert\">{error}</small> : null}</label>;\n}\nfunction TextDateInput({ value, onChange, disabled, required, ariaLabel }: { value?: string | null | undefined; onChange: (value: string) => void; disabled: boolean; required?: boolean; ariaLabel: string }): ReactElement {\n const [display, setDisplay] = useState(() => formatBillSubmissionDate(value));\n const [invalid, setInvalid] = useState(false);\n useEffect(() => { setDisplay(formatBillSubmissionDate(value)); setInvalid(false); }, [value]);\n return <><input className=\"mbsf-input\" type=\"text\" inputMode=\"numeric\" autoComplete=\"off\" placeholder=\"MM/DD/YYYY\" aria-label={ariaLabel} aria-invalid={invalid} required={required} disabled={disabled} value={display} onChange={(event) => {\n const next = event.target.value; const parsed = parseBillSubmissionDate(next); setDisplay(next); setInvalid(Boolean(next && !parsed));\n if (!next.trim()) onChange(\"\"); else if (parsed) onChange(parsed);\n }} onBlur={() => setInvalid(Boolean(display && !parseBillSubmissionDate(display)))} />{invalid ? <small className=\"mbsf-error\">Use MM/DD/YYYY</small> : null}</>;\n}\n\ntype ComboOption = { id: string; label: string; detail?: string; badges?: string[]; affiliatedEntities?: string[]; trailing?: string };\nfunction ComboBox({ value, placeholder, options, disabled, loading, loadingMore, invalid, preserveValueOnOpen = false, filterOptions = true, onOpen, onQuery, onEndReached, onSelect, createOption, ariaLabel }: { value: string; placeholder: string; options: ComboOption[]; disabled: boolean; loading?: boolean; loadingMore?: boolean; invalid?: boolean; preserveValueOnOpen?: boolean; filterOptions?: boolean; onOpen?: () => void; onQuery?: (query: string) => void; onEndReached?: () => void; onSelect: (option: ComboOption) => void; createOption?: (query: string) => ComboOption | null; ariaLabel: string }): ReactElement {\n const [open, setOpen] = useState(false); const [query, setQuery] = useState(\"\");\n const visible = useMemo(() => {\n const q = query.trim().toLowerCase();\n const matches = q && filterOptions ? options.filter((option) => `${option.id} ${option.label} ${option.detail ?? \"\"} ${(option.badges ?? []).join(\" \")} ${(option.affiliatedEntities ?? []).join(\" \")} ${option.trailing ?? \"\"}`.toLowerCase().includes(q)) : options;\n const custom = createOption?.(query) ?? null;\n return custom && !matches.some((option) => option.id.toUpperCase() === custom.id.toUpperCase()) ? [...matches, custom] : matches;\n }, [createOption, filterOptions, options, query]);\n const showMenu = open;\n return <div className=\"mbsf-combo\"><input className=\"mbsf-input\" role=\"combobox\" aria-label={ariaLabel} aria-invalid={invalid} aria-expanded={showMenu} autoComplete=\"off\" disabled={disabled} placeholder={placeholder} value={open ? query : value} onFocus={() => { const next = preserveValueOnOpen ? value : \"\"; setOpen(true); setQuery(next); onOpen?.(); if (next) onQuery?.(next); }} onChange={(event) => { setOpen(true); setQuery(event.target.value); onQuery?.(event.target.value); }} onBlur={() => setTimeout(() => setOpen(false), 120)} />{showMenu ? <div className=\"mbsf-menu\" role=\"listbox\" onScroll={(event) => { const menu = event.currentTarget; if (menu.scrollHeight - menu.scrollTop - menu.clientHeight < 120) onEndReached?.(); }}>{loading && !visible.length ? <div className=\"mbsf-menu-status\">Loading…</div> : visible.length ? visible.map((option) => <button className=\"mbsf-option\" type=\"button\" role=\"option\" key={option.id} onMouseDown={(event) => event.preventDefault()} onClick={() => { onSelect(option); setOpen(false); setQuery(\"\"); }}><span className=\"mbsf-option-main\"><strong>{option.label}</strong>{option.detail ? <small>{option.detail}</small> : null}{option.badges?.length ? <span className=\"mbsf-option-badges\">{option.badges.map((badge) => <span className=\"mbsf-option-badge\" key={badge}>{badge}</span>)}</span> : null}{option.affiliatedEntities?.length ? <small className=\"mbsf-option-affiliates\"><strong>Affiliated entities:</strong> {option.affiliatedEntities.join(\", \")}</small> : null}</span>{option.trailing ? <span className=\"mbsf-option-route\">{option.trailing}</span> : null}</button>) : <div className=\"mbsf-option\">No matches</div>}{loadingMore ? <div className=\"mbsf-menu-status\">Loading more…</div> : null}</div> : null}</div>;\n}\n\nfunction focusFirstInvalid(form: HTMLFormElement): void {\n const field = form.querySelector<HTMLElement>('[data-invalid=\"true\"]');\n if (!field) return;\n const control = field.querySelector<HTMLElement>('input,select,textarea,button,[tabindex]:not([tabindex=\"-1\"])');\n control?.focus({ preventScroll: true });\n const fieldRect = field.getBoundingClientRect();\n let scrollParent: HTMLElement | null = field.parentElement;\n while (scrollParent) {\n const style = window.getComputedStyle(scrollParent);\n if (/(auto|scroll)/.test(style.overflowY) && scrollParent.scrollHeight > scrollParent.clientHeight) break;\n scrollParent = scrollParent.parentElement;\n }\n if (scrollParent) {\n const parentRect = scrollParent.getBoundingClientRect();\n scrollParent.scrollTo({ top: Math.max(0, scrollParent.scrollTop + fieldRect.top - parentRect.top - 24), behavior: \"smooth\" });\n } else {\n window.scrollTo({ top: Math.max(0, window.scrollY + fieldRect.top - 24), behavior: \"smooth\" });\n }\n}\n\nfunction customProcedureOption(query: string): ComboOption | null {\n const code = query.trim().toUpperCase().replace(/\\s+/g, \"\");\n if (!/^(?:\\d{5}|[A-Z]\\d{4}|ML(?:20[0-5]|PRR))$/.test(code)) return null;\n return { id: code, label: code, detail: \"Use this CPT, HCPCS, or medical-legal code\" };\n}\n\nfunction mergeOptions<T extends { code: string }>(defaults: T[], supplied: T[] | undefined): T[] {\n const map = new Map(defaults.map((item) => [item.code.toUpperCase(), item]));\n supplied?.forEach((item) => map.set(item.code.toUpperCase(), item)); return [...map.values()];\n}\n\nfunction mergeDiagnosisOptions(options: BillSubmissionDiagnosisOption[]): BillSubmissionDiagnosisOption[] {\n return [...new Map(options.map((item) => [item.code.toUpperCase(), item])).values()]\n .sort((left, right) => left.code.localeCompare(right.code, undefined, { numeric: true }));\n}\n\nexport function normalizeClaimsAdministratorName(value: string): string {\n return value.toUpperCase().replace(/\\[[^\\]]*]/g, \" \").replace(/\\b(?:INCORPORATED|INC|COMPANY|CO|CORPORATION|CORP|GROUP|INSURANCE|SERVICES)\\b/g, \" \").replace(/[^A-Z0-9]+/g, \" \").trim().replace(/\\s+/g, \" \");\n}\n\nexport function exactClaimsAdministratorMatch(results: BillReviewPayer[], suppliedName: string): BillReviewPayer | undefined {\n const normalized = normalizeClaimsAdministratorName(suppliedName);\n return results.find((payer) => normalizeClaimsAdministratorName(payer.name) === normalized)\n ?? results.find((payer) => payer.confidence === \"high\" && payer.recommended);\n}\n\nexport function claimsAdministratorRecommendations(results: BillReviewPayer[], limit = 5): BillReviewPayer[] {\n return [...results]\n .sort((left, right) => Number(Boolean(right.recommended)) - Number(Boolean(left.recommended)))\n .slice(0, Math.max(0, limit));\n}\n\nexport function claimNumberPatternMatches(\n pattern: NonNullable<BillReviewPayer[\"claimNumberPatterns\"]>[number],\n claimNumber: string,\n): boolean | null {\n const example = pattern.example?.trim();\n if (example && /9{2,}/.test(example)) {\n const expression = [...example].map((character) => character === \"9\"\n ? \"\\\\d\"\n : character.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")).join(\"\");\n return new RegExp(`^${expression}$`, \"i\").test(claimNumber.trim());\n }\n return pattern.matches ?? null;\n}\n\n/**\n * Form-state claims administrator for a directory pick. When the administrator\n * requires payer selection it carries the payer (routing payer) choices and\n * requires an explicit user choice; administrators without routing payers stay a\n * plain `{ id, name }` reference.\n */\nexport function chooseClaimsAdministrator(\n payer: Pick<BillReviewPayer, \"id\" | \"name\" | \"payerSelectionRequired\" | \"payers\">,\n selectedPayerId?: string,\n): NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]> {\n if (!payer.payerSelectionRequired) return { id: payer.id, name: payer.name };\n const payers = (payer.payers ?? []).map((option) => ({ ...option }));\n const resolvedPayerId = selectedPayerId && payers.some((option) => option.id === selectedPayerId)\n ? selectedPayerId\n : undefined;\n return {\n id: payer.id,\n name: payer.name,\n payerSelectionRequired: true,\n ...(payers.length ? { payers } : {}),\n ...(resolvedPayerId ? { payerId: resolvedPayerId } : {}),\n };\n}\n\n/**\n * The claims administrator reference exactly as submitted to MindBill: picker\n * metadata (payerSelectionRequired, payers) stays client-side and the chosen\n * payerId rides on the wire only when set.\n */\nexport function submittedClaimsAdministrator(\n administrator: NonNullable<BillSubmissionInput[\"claim\"][\"claimsAdministrator\"]>,\n): { id: string; name: string; payerId?: string } {\n return {\n id: administrator.id ?? \"\",\n name: administrator.name,\n ...(administrator.payerId ? { payerId: administrator.payerId } : {}),\n };\n}\n\nexport type BillSubmissionSectionId =\n | \"header\"\n | \"patient\"\n | \"claim\"\n | \"providers\"\n | \"serviceLines\"\n | \"attachments\"\n | \"actions\";\n\ntype BillSubmissionSections = Record<BillSubmissionSectionId, ReactNode>;\nconst BillSubmissionSectionsContext = createContext<BillSubmissionSections | null>(null);\n\nfunction BillSubmissionSection({ id }: { id: BillSubmissionSectionId }): ReactElement {\n const sections = useContext(BillSubmissionSectionsContext);\n if (!sections) throw new Error(\"Bill submission sections must be rendered inside BillSubmissionForm.\");\n return <>{sections[id]}</>;\n}\n\nexport function BillSubmissionHeader(): ReactElement { return <BillSubmissionSection id=\"header\" />; }\nexport function BillSubmissionPatientSection(): ReactElement { return <BillSubmissionSection id=\"patient\" />; }\nexport function BillSubmissionClaimSection(): ReactElement { return <BillSubmissionSection id=\"claim\" />; }\nexport function BillSubmissionProvidersSection(): ReactElement { return <BillSubmissionSection id=\"providers\" />; }\nexport function BillSubmissionServiceLinesSection(): ReactElement { return <BillSubmissionSection id=\"serviceLines\" />; }\nexport function BillSubmissionAttachmentsSection(): ReactElement { return <BillSubmissionSection id=\"attachments\" />; }\nexport function BillSubmissionActions(): ReactElement { return <BillSubmissionSection id=\"actions\" />; }\n\nexport function BillSubmissionForm({\n initialBill, attachments = EMPTY_ATTACHMENTS, onSubmit, onSubmitted, getSession, sessionEndpoint, apiBaseUrl,\n fetch: fetchOverride, onListClaimsAdministrators, onSearchClaimsAdministrators, onGetClaimsAdministratorDirectory, claimsAdministratorSources, claimsAdministratorHint,\n diagnosisOptions = [], onSearchDiagnoses,\n onLookupPostalCode, procedureOptions, modifierOptions, taxonomyOptions, deliveryRoutePicker = \"auto\", attachmentReportTypeMode = \"auto\",\n attachmentReportTypes = BILL_SUBMISSION_REPORT_TYPES, defaultAttachmentReportType,\n appearance, className = \"bill-submission-form\",\n style, disabled = false, submitLabel = \"Submit bill\", heading = \"Bill information\",\n description = \"Review the bill details, add attachments, and submit.\",\n attentionFields = [], attentionMessage,\n children,\n}: BillSubmissionFormProps): ReactElement {\n const [bill, setBill] = useState(() => cloneInitialBill(initialBill));\n const [selectedIds, setSelectedIds] = useState(() => attachments.map((item) => item.id));\n const [removedSourceIds, setRemovedSourceIds] = useState<string[]>([]);\n const [uploads, setUploads] = useState<BillSubmissionUpload[]>([]); const [errors, setErrors] = useState<Record<string, string>>({});\n const [sourceAttachmentReportTypes, setSourceAttachmentReportTypes] = useState<Record<string, string>>(() => Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : [])));\n const [validationActive, setValidationActive] = useState(false);\n const [formError, setFormError] = useState<string | null>(null); const [submitting, setSubmitting] = useState(false);\n // The delivery-method dialog staged with the validated bill.\n const [routeDialog, setRouteDialog] = useState<{ delivery: BillDeliveryOptions; complete: CompleteBillSubmissionInput } | null>(null);\n const [routeError, setRouteError] = useState<string | null>(null);\n const [payerResults, setPayerResults] = useState<BillReviewPayer[]>([]); const [payerLoading, setPayerLoading] = useState(false);\n const [payerSuggestions, setPayerSuggestions] = useState<BillReviewPayerSuggestion[]>([]);\n const [selectedPayerMetadata, setSelectedPayerMetadata] = useState<BillReviewPayer | null>(null);\n const [payerLoadingMore, setPayerLoadingMore] = useState(false); const [payerQuery, setPayerQuery] = useState<string | null>(null); const [payerHasMore, setPayerHasMore] = useState(true);\n const [directoryOpen, setDirectoryOpen] = useState(false);\n const [directory, setDirectory] = useState<BillClaimsAdministratorDirectory | null>(null);\n const [directoryLoading, setDirectoryLoading] = useState(false);\n const [directoryError, setDirectoryError] = useState<string | null>(null);\n const [diagnosisResults, setDiagnosisResults] = useState<BillSubmissionDiagnosisOption[]>([]);\n const [diagnosisLoading, setDiagnosisLoading] = useState(false); const [diagnosisLoadingMore, setDiagnosisLoadingMore] = useState(false);\n const [diagnosisQuery, setDiagnosisQuery] = useState<string | null>(null); const [diagnosisHasMore, setDiagnosisHasMore] = useState(true);\n const [postalStatus, setPostalStatus] = useState<string | null>(null); const [dragActive, setDragActive] = useState(false);\n const formRef = useRef<HTMLFormElement>(null); const fileInput = useRef<HTMLInputElement>(null);\n const diagnosisRequest = useRef(0); const diagnosisAppendPending = useRef(false); const payerRequest = useRef(0); const payerAppendPending = useRef(false);\n const procedures = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_PROCEDURES, procedureOptions), [procedureOptions]);\n const orderedClaimsAdministratorSources = useMemo(() => [...(claimsAdministratorSources ?? [])]\n .filter((source) => source.name.trim())\n .sort((left, right) => Number(right.source.toLowerCase() === \"eams\") - Number(left.source.toLowerCase() === \"eams\")), [claimsAdministratorSources]);\n const sourceClaimsAdministratorName = orderedClaimsAdministratorSources[0]?.name.trim() ?? \"\";\n const modifiers = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_MODIFIERS, modifierOptions), [modifierOptions]);\n const taxonomies = useMemo(() => mergeOptions(DEFAULT_BILL_SUBMISSION_TAXONOMIES, taxonomyOptions), [taxonomyOptions]);\n const [evaluationType, setEvaluationType] = useState<BillSubmissionEvaluationType>(() => initialEvaluationType(initialBill));\n const connected = !onSubmit;\n const referenceClient = useMemo(() => (getSession || sessionEndpoint || connected) ? createBillReferenceClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const submissionClient = useMemo(() => connected ? createBillSubmissionClient({ getSession, sessionEndpoint, apiBaseUrl, fetch: fetchOverride }) : null, [getSession, sessionEndpoint, apiBaseUrl, fetchOverride, connected]);\n const locked = disabled || submitting;\n const showAttachmentReportTypes = attachmentReportTypeMode === \"visible\" || (attachmentReportTypeMode === \"auto\" && bill.billingMode !== \"med_legal\");\n const forcedAttachmentReportType = showAttachmentReportTypes ? undefined : (defaultAttachmentReportType ?? MED_LEGAL_REPORT_TYPE_CODE);\n const reportTypeOptions = useMemo(() => attachmentReportTypes.map((item) => ({ id: item.code, label: item.code.replace(/^OZ:/, \"\"), detail: item.label })), [attachmentReportTypes]);\n const missingAttachmentReportType = showAttachmentReportTypes && (\n selectedIds.some((id) => !(sourceAttachmentReportTypes[id] || attachments.find((item) => item.id === id)?.reportTypeCode || defaultAttachmentReportType))\n || uploads.some((upload) => !(upload.reportTypeCode || defaultAttachmentReportType))\n );\n\n useEffect(() => {\n setBill(cloneInitialBill(initialBill)); setEvaluationType(initialEvaluationType(initialBill)); setSelectedIds(attachments.map((item) => item.id));\n setRemovedSourceIds([]); setUploads([]); setSourceAttachmentReportTypes(Object.fromEntries(attachments.flatMap((item) => item.reportTypeCode ? [[item.id, item.reportTypeCode]] : []))); setErrors({}); setValidationActive(false); setFormError(null); setDiagnosisResults([]);\n setDiagnosisQuery(null); setDiagnosisHasMore(true); diagnosisRequest.current += 1; diagnosisAppendPending.current = false;\n setPayerResults([]); setPayerSuggestions([]); setSelectedPayerMetadata(null); setPayerQuery(null); setPayerHasMore(true); payerRequest.current += 1; payerAppendPending.current = false;\n }, [initialBill, attachments, sourceClaimsAdministratorName]);\n useEffect(() => {\n if (!validationActive) return;\n const next = validateBillSubmission(bill).fieldErrors;\n setErrors(missingAttachmentReportType ? { ...next, attachments: \"Select a report type for every attachment.\" } : next);\n }, [bill, missingAttachmentReportType, validationActive]);\n useEffect(() => {\n const root = formRef.current;\n if (!root) return;\n const nodes = Array.from(root.querySelectorAll<HTMLElement>(\"[data-field-path]\"));\n nodes.forEach((node) => node.removeAttribute(\"data-attention\"));\n for (const requested of attentionFields) {\n const normalized = requested.replace(/\\[\\]/g, \"\");\n for (const node of nodes) {\n const actual = node.dataset.fieldPath ?? \"\";\n if (actual === requested || actual === normalized || actual.startsWith(`${normalized}.`) || normalized.startsWith(`${actual}.`)) {\n node.dataset.attention = \"true\";\n }\n }\n }\n }, [attentionFields]);\n\n const addFiles = useCallback((fileList: FileList | File[]) => {\n const files = Array.from(fileList); if (!files.length) return; 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); 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, ...(defaultAttachmentReportType ? { reportTypeCode: defaultAttachmentReportType } : {}) }))]);\n }, [defaultAttachmentReportType, selectedIds.length, uploads]);\n useEffect(() => {\n const over = (event: DragEvent) => { if (event.dataTransfer?.types.includes(\"Files\")) { event.preventDefault(); setDragActive(true); } };\n const leave = (event: DragEvent) => { if (!event.relatedTarget) setDragActive(false); };\n const drop = (event: DragEvent) => { if (event.dataTransfer?.files.length) { event.preventDefault(); setDragActive(false); addFiles(event.dataTransfer.files); } };\n window.addEventListener(\"dragover\", over); window.addEventListener(\"dragleave\", leave); window.addEventListener(\"drop\", drop);\n return () => { window.removeEventListener(\"dragover\", over); window.removeEventListener(\"dragleave\", leave); window.removeEventListener(\"drop\", drop); };\n }, [addFiles]);\n\n const setAddress = (patch: Partial<BillSubmissionAddress>) => setBill((current) => ({ ...current, patient: { ...current.patient, address: { ...current.patient.address, ...patch } } }));\n const setLine = (index: number, patch: Partial<BillSubmissionInput[\"serviceLines\"][number]>) => setBill((current) => ({ ...current, serviceLines: ensureTrailingBillSubmissionLine(current.serviceLines.map((line, lineIndex) => {\n if (lineIndex !== index) return line;\n const next = { ...line, ...patch };\n const charge = calculateBillSubmissionAllowedAmount(next, procedures);\n if (charge != null) return { ...next, charge };\n if (Object.hasOwn(patch, \"code\")) { const withoutCharge = { ...next }; delete withoutCharge.charge; return withoutCharge; }\n return next;\n })) }));\n const text = (value: string | null | undefined, onChange: (value: string) => void, options: Pick<React.InputHTMLAttributes<HTMLInputElement>, \"placeholder\" | \"maxLength\" | \"type\" | \"inputMode\"> = {}) => <input className=\"mbsf-input\" disabled={locked} value={value ?? \"\"} onChange={(event) => onChange(event.target.value)} {...options} />;\n const loadPayers = useCallback((query: string, append = false): void => {\n const trimmed = query.trim();\n const list = onListClaimsAdministrators ?? referenceClient?.listClaimsAdministrators;\n const legacySearch = onSearchClaimsAdministrators ?? referenceClient?.searchClaimsAdministrators;\n if (!list && !legacySearch) return;\n const continuing = append && payerQuery === trimmed;\n if (continuing && (!payerHasMore || payerAppendPending.current)) return;\n const offset = continuing ? payerResults.length : 0;\n const request = ++payerRequest.current;\n if (continuing) { payerAppendPending.current = true; setPayerLoadingMore(true); }\n else { setPayerLoading(true); setPayerLoadingMore(false); setPayerQuery(trimmed); setPayerHasMore(true); }\n const page: Promise<BillReviewPayerPage> = list\n ? list({ query: trimmed, claimNumber: bill.claim.claimNumber, ...(sourceClaimsAdministratorName ? { sourceClaimsAdministratorName } : {}), ...(bill.claim.employer ? { employerName: bill.claim.employer } : {}), limit: PAYER_PAGE_SIZE, offset })\n : legacySearch!(trimmed, bill.claim.claimNumber).then((results): BillReviewPayerPage => ({ results, total: results.length }));\n void page.then((result) => {\n if (request !== payerRequest.current) return;\n setPayerResults((current) => {\n const combined = continuing ? [...current, ...result.results] : result.results;\n return [...new Map(combined.map((payer) => [payer.id, payer])).values()];\n });\n if (!continuing) setPayerSuggestions(result.suggestions ?? []);\n setPayerHasMore(result.nextOffset != null ? result.nextOffset > offset : offset + result.results.length < result.total);\n }).catch((caught: unknown) => {\n if (request === payerRequest.current) setFormError(caught instanceof Error ? caught.message : \"Claims administrator search is unavailable.\");\n }).finally(() => {\n if (request !== payerRequest.current) return;\n payerAppendPending.current = false; setPayerLoading(false); setPayerLoadingMore(false);\n });\n }, [bill.claim.claimNumber, bill.claim.employer, onListClaimsAdministrators, onSearchClaimsAdministrators, payerHasMore, payerQuery, payerResults.length, referenceClient, sourceClaimsAdministratorName]);\n const searchPayers = (query: string) => {\n setSelectedPayerMetadata(null);\n setBill((current) => {\n const selected = current.claim.claimsAdministrator;\n if (selected?.id && selected.name === query) return current;\n return { ...current, claim: { ...current.claim, claimsAdministrator: { name: query } } };\n });\n loadPayers(query);\n };\n const loadDiagnoses = (query: string, append = false) => {\n const trimmed = query.trim();\n const search = onSearchDiagnoses ?? referenceClient?.searchDiagnosisCodes;\n if (!search) { setDiagnosisResults(mergeDiagnosisOptions(diagnosisOptions)); setDiagnosisHasMore(false); setDiagnosisQuery(trimmed); return; }\n const continuing = append && diagnosisQuery === trimmed;\n if (continuing && (!diagnosisHasMore || diagnosisAppendPending.current)) return;\n const offset = continuing ? diagnosisResults.length : 0;\n const request = ++diagnosisRequest.current;\n if (continuing) { diagnosisAppendPending.current = true; setDiagnosisLoadingMore(true); }\n else { setDiagnosisLoading(true); setDiagnosisLoadingMore(false); setDiagnosisQuery(trimmed); setDiagnosisHasMore(true); }\n void search(trimmed, DIAGNOSIS_PAGE_SIZE, offset).then((page) => {\n if (request !== diagnosisRequest.current) return;\n setDiagnosisResults((current) => mergeDiagnosisOptions(continuing ? [...current, ...page] : page));\n setDiagnosisHasMore(page.length >= DIAGNOSIS_PAGE_SIZE);\n }).catch(() => {\n if (request === diagnosisRequest.current && !continuing) setDiagnosisResults([]);\n }).finally(() => {\n if (request !== diagnosisRequest.current) return;\n diagnosisAppendPending.current = false; setDiagnosisLoading(false); setDiagnosisLoadingMore(false);\n });\n };\n const searchDiagnoses = (query: string) => loadDiagnoses(query);\n const diagnosisChoices = useMemo(() => mergeDiagnosisOptions([...diagnosisOptions, ...diagnosisResults]), [diagnosisOptions, diagnosisResults]);\n const updatePostalCode = (postalCode: string) => {\n setAddress({ postalCode }); setPostalStatus(null); const lookup = onLookupPostalCode ?? referenceClient?.lookupPostalCode;\n if (!lookup || !/^\\d{5}$/.test(postalCode)) return;\n setPostalStatus(\"Looking up ZIP…\"); void lookup(postalCode).then((place) => { if (!place) return setPostalStatus(\"ZIP not found\"); setAddress({ city: place.city, state: place.state.toUpperCase() }); setPostalStatus(`${place.city}, ${place.state.toUpperCase()} filled from ZIP`); }).catch(() => setPostalStatus(\"ZIP lookup unavailable\"));\n };\n const changeEvaluation = (type: BillSubmissionEvaluationType) => {\n setEvaluationType(type); setBill((current) => ({ ...current, diagnoses: applyBillSubmissionEvaluationDiagnoses(current.diagnoses, type), renderingProvider: { ...current.renderingProvider, isAme: type === \"ame\", isQme: type !== \"ame\", ...(type === \"psych_qme\" && !current.renderingProvider?.specialty ? { specialty: \"Psychiatry\" } : {}) }, serviceLines: applyBillSubmissionEvaluationModifiers(current.serviceLines, type) }));\n };\n const lineCharge = (line: BillSubmissionInput[\"serviceLines\"][number]) => calculateBillSubmissionAllowedAmount(line, procedures) ?? (Number.isFinite(line.charge) ? Number(line.charge) : undefined);\n const total = submittedLines(bill.serviceLines).reduce((sum, line) => sum + (lineCharge(line) ?? 0), 0);\n\n async function submit(): Promise<void> {\n const clean: BillSubmissionInput = { ...cloneBill(bill), serviceLines: submittedLines(bill.serviceLines).map((line) => { const charge = lineCharge(line); return charge == null ? line : { ...line, charge }; }) };\n const validation = validateBillSubmission(clean);\n const fieldErrors = missingAttachmentReportType ? { ...validation.fieldErrors, attachments: \"Select a report type for every attachment.\" } : validation.fieldErrors;\n setValidationActive(true); setErrors(fieldErrors); setFormError(null);\n if (Object.keys(fieldErrors).length) {\n const count = Object.keys(fieldErrors).length;\n const first = Object.values(fieldErrors)[0];\n setFormError(`Fix ${count} highlighted field${count === 1 ? \"\" : \"s\"} before submitting. ${first}`);\n window.requestAnimationFrame(() => { if (formRef.current) focusFirstInvalid(formRef.current); });\n return;\n }\n if (selectedIds.length + uploads.length > MAX_DOCUMENTS) return setFormError(`A bill can include at most ${MAX_DOCUMENTS} attachments.`);\n const administrator = clean.claim.claimsAdministrator;\n const complete = {\n ...clean,\n claim: {\n ...clean.claim,\n ...(administrator ? { claimsAdministrator: submittedClaimsAdministrator(administrator) } : {}),\n },\n } as CompleteBillSubmissionInput;\n if (onSubmit) {\n setSubmitting(true);\n try { await onSubmit({ bill: complete, sourceAttachmentIds: selectedIds, sourceAttachmentReportTypes, uploads }); }\n catch (caught) { setFormError(caught instanceof Error ? caught.message : \"Unable to submit the bill.\"); }\n finally { setSubmitting(false); }\n return;\n }\n // Connected mode: show the delivery-method dialog (e-bill / email / fax /\n // mail with recipient overrides) before dispatch. Falls back to direct\n // submission on MindBill's recommended route when the preview is\n // unavailable (older API deployments, missing payers:read permission).\n if (deliveryRoutePicker !== \"off\" && referenceClient) {\n setSubmitting(true);\n try {\n const delivery = await referenceClient.getDeliveryPreview({\n claimsAdministratorId: complete.claim.claimsAdministrator.id,\n ...(complete.claim.injuryState ? { injuryState: complete.claim.injuryState } : {}),\n });\n setSubmitting(false);\n setRouteError(null);\n setRouteDialog({ delivery, complete });\n return;\n } catch {\n setSubmitting(false);\n }\n }\n await performConnectedSubmit(complete, undefined);\n }\n\n async function performConnectedSubmit(\n complete: CompleteBillSubmissionInput,\n submission: SendRouteSubmission | undefined,\n ): Promise<void> {\n setSubmitting(true);\n try {\n if (!submissionClient) throw new Error(\"The connected billing client is unavailable.\");\n const documents = await prepareBillSubmissionDocuments({\n attachments,\n selectedIds,\n uploads,\n reportTypeCodeByAttachmentId: sourceAttachmentReportTypes,\n ...(forcedAttachmentReportType ? { defaultReportTypeCode: forcedAttachmentReportType } : {}),\n ...(fetchOverride ? { fetch: fetchOverride } : {}),\n });\n const result = await submissionClient.submitBill({\n bill: complete,\n ...(submission ? { submission } : {}),\n documents,\n });\n setRouteDialog(null);\n setRouteError(null);\n await onSubmitted?.(result);\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : \"Unable to submit the bill.\";\n if (submission) setRouteError(message); else setFormError(message);\n }\n finally { setSubmitting(false); }\n }\n\n const claimsAdministratorError = errors[\"claim.claimsAdministrator\"];\n const choosePayer = (payer: BillReviewPayer, selectedPayerId?: string) => {\n setSelectedPayerMetadata(payer);\n setBill((current) => ({ ...current, claim: { ...current.claim, claimsAdministrator: chooseClaimsAdministrator(payer, selectedPayerId) } }));\n };\n const administrator = bill.claim.claimsAdministrator;\n const displayedPayerMetadata = selectedPayerMetadata?.id === administrator?.id ? selectedPayerMetadata : null;\n const displayedClaimPatterns = (displayedPayerMetadata?.claimNumberPatterns ?? []).map((pattern) => ({\n ...pattern,\n matches: claimNumberPatternMatches(pattern, bill.claim.claimNumber),\n }));\n const evaluatedClaimPatterns = displayedClaimPatterns.filter((pattern) => pattern.matches != null);\n const claimNumberMatches = evaluatedClaimPatterns.some((pattern) => pattern.matches);\n const claimNumberPatternState = evaluatedClaimPatterns.length ? (claimNumberMatches ? \"match\" : \"warning\") : null;\n const subpayorOptions = administrator?.payerSelectionRequired ? administrator.payers ?? [] : [];\n const subpayorError = errors[\"claim.claimsAdministrator.payerId\"];\n const selectedSubpayor = subpayorOptions.find((option) => option.id === administrator?.payerId);\n const chooseSubpayor = (payerId: string) => setBill((current) => current.claim.claimsAdministrator\n ? { ...current, claim: { ...current.claim, claimsAdministrator: { ...current.claim.claimsAdministrator, payerId } } }\n : current);\n const openAdministratorDirectory = async (): Promise<void> => {\n if (!administrator?.id) return;\n setDirectoryOpen(true); setDirectory(null); setDirectoryError(null); setDirectoryLoading(true);\n try {\n const load = onGetClaimsAdministratorDirectory ?? referenceClient?.getClaimsAdministratorDirectory;\n if (!load) throw new Error(\"Claims administrator details are unavailable.\");\n setDirectory(await load(administrator.id, bill.claim.injuryState));\n } catch (caught) {\n setDirectoryError(caught instanceof Error ? caught.message : \"Unable to load claims administrator details.\");\n } finally {\n setDirectoryLoading(false);\n }\n };\n\n const headerSection = <div className=\"mbsf-head\"><div><h3 className=\"mbsf-title\">{heading}</h3><p className=\"mbsf-copy\">{description}</p></div><span className=\"mbsf-required\"><RequiredMark /> Required</span></div>;\n\n const patientSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Patient</legend><div className=\"mbsf-grid\">\n <Field path=\"patient.firstName\" label=\"First name\" required error={errors[\"patient.firstName\"]}>{text(bill.patient.firstName, (firstName) => setBill((c) => ({ ...c, patient: { ...c.patient, firstName } })))}</Field>\n <Field path=\"patient.lastName\" label=\"Last name\" required error={errors[\"patient.lastName\"]}>{text(bill.patient.lastName, (lastName) => setBill((c) => ({ ...c, patient: { ...c.patient, lastName } })))}</Field>\n <Field label=\"Middle name\">{text(bill.patient.middleName, (middleName) => setBill((c) => ({ ...c, patient: { ...c.patient, middleName } })))}</Field>\n <Field label=\"Phone (optional)\">{text(bill.patient.phone, (phone) => setBill((c) => ({ ...c, patient: { ...c.patient, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"patient.dateOfBirth\" label=\"Date of birth\" required error={errors[\"patient.dateOfBirth\"]}><TextDateInput ariaLabel=\"Date of birth\" value={bill.patient.dateOfBirth} disabled={locked} required onChange={(dateOfBirth) => setBill((c) => ({ ...c, patient: { ...c.patient, dateOfBirth } }))} /></Field>\n <Field path=\"patient.address.line1\" label=\"Address\" required span error={errors[\"patient.address.line1\"]}>{text(bill.patient.address.line1, (line1) => setAddress({ line1 }), { placeholder: \"Street address\" })}</Field>\n <Field path=\"patient.address.postalCode\" label=\"ZIP\" required error={errors[\"patient.address.postalCode\"]}>{text(bill.patient.address.postalCode, updatePostalCode, { maxLength: 10 })}{postalStatus ? <small className=\"mbsf-help\">{postalStatus}</small> : null}</Field>\n <Field path=\"patient.address.city\" label=\"City\" required error={errors[\"patient.address.city\"]}>{text(bill.patient.address.city, (city) => setAddress({ city }))}</Field>\n <Field path=\"patient.address.state\" label=\"State\" required error={errors[\"patient.address.state\"]}>{text(bill.patient.address.state, (state) => setAddress({ state: state.toUpperCase() }), { maxLength: 2 })}</Field>\n </div></fieldset>;\n\n const claimSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Injury & claim</legend><div className=\"mbsf-grid\">\n <Field path=\"service.date\" label=\"Date of service\" required error={errors[\"service.date\"]}><TextDateInput ariaLabel=\"Date of service\" value={bill.service.date} disabled={locked} required onChange={(date) => setBill((c) => ({ ...c, service: { ...c.service, date } }))} /></Field>\n <Field label=\"Treatment authorization # (optional)\">{text(bill.service.authorizationNumber, (authorizationNumber) => setBill((c) => ({ ...c, service: { ...c.service, authorizationNumber } })), { placeholder: \"Utilization-review authorization number\" })}<small className=\"mbsf-help\">Rides on the bill as CMS-1500 Box 23 / 837 REF*G1.</small></Field>\n <Field path=\"claim.dateOfInjury\" label=\"Date of injury\" required error={errors[\"claim.dateOfInjury\"]}><TextDateInput ariaLabel=\"Date of injury\" value={bill.claim.dateOfInjury} disabled={locked} required onChange={(dateOfInjury) => setBill((c) => ({ ...c, claim: { ...c.claim, dateOfInjury } }))} /></Field>\n <Field path=\"claim.employer\" label=\"Employer name\" required error={errors[\"claim.employer\"]}>{text(bill.claim.employer, (employer) => setBill((c) => ({ ...c, claim: { ...c.claim, employer } })))}</Field>\n <Field path=\"claim.claimNumber\" label=\"Claim number\" required error={errors[\"claim.claimNumber\"]}>{text(bill.claim.claimNumber, (claimNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, claimNumber } })))}\n {displayedClaimPatterns.length ? <div className=\"mbsf-claim-patterns\" data-state={claimNumberPatternState ?? undefined} role=\"status\">\n {claimNumberPatternState === \"match\" ? <strong>✓ Matches a known claim number pattern</strong> : claimNumberPatternState === \"warning\" ? <strong>⚠ Does not match the known claim number patterns</strong> : <strong>Known claim number patterns</strong>}\n <span className=\"mbsf-claim-pattern-list\">{displayedClaimPatterns.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \")}</span>\n </div> : null}\n </Field>\n <Field label=\"WCAB / ADJ number (optional)\">{text(bill.claim.adjNumber, (adjNumber) => setBill((c) => ({ ...c, claim: { ...c.claim, adjNumber } })))}</Field>\n <Field path=\"claim.claimsAdministrator\" label=\"Claims administrator\" required span error={claimsAdministratorError} invalid={!administrator?.id}>\n <ComboBox ariaLabel=\"Claims administrator\" invalid={Boolean(claimsAdministratorError) || !administrator?.id} disabled={locked} loading={payerLoading} loadingMore={payerLoadingMore} filterOptions={false} value={administrator?.name ?? \"\"} placeholder=\"Browse or search claims administrators…\" options={payerResults.map((payer) => { const patternDetail = payer.claimNumberPatterns?.map((pattern) => `${pattern.pattern}${pattern.example ? ` (example: ${pattern.example})` : \"\"}`).join(\" · \") ?? payer.claimNumberHint ?? \"\"; return { id: payer.id, label: payer.name, detail: [payer.aliases?.length ? `Also known as ${payer.aliases.join(\", \")}` : \"\", patternDetail].filter(Boolean).join(\" · \") || \"Claims administrator\", ...(payer.affiliatedEntities?.length ? { affiliatedEntities: payer.affiliatedEntities } : {}), ...(payer.route ? { trailing: payer.route } : {}) }; })} onOpen={() => { if (payerQuery !== \"\") loadPayers(\"\"); }} onQuery={searchPayers} onEndReached={() => loadPayers(payerQuery ?? \"\", true)} onSelect={(option) => choosePayer(payerResults.find((payer) => payer.id === option.id) ?? { id: option.id, name: option.label })} />\n {orderedClaimsAdministratorSources.length ? <div className=\"mbsf-source-evidence\">{orderedClaimsAdministratorSources.map((source, index) => <span key={`${source.source}-${source.name}-${index}`}>{source.url ? <a href={source.url} target=\"_blank\" rel=\"noopener noreferrer\">{source.label}</a> : <strong>{source.label}</strong>}: <q>{source.name}</q></span>)}</div> : null}\n {claimsAdministratorHint ? <small className=\"mbsf-help\">Claims administrator in your system: {claimsAdministratorHint}</small> : null}\n {payerSuggestions.length ? <div className=\"mbsf-suggestions\"><strong>Suggested:</strong>{payerSuggestions.slice(0, 5).map((suggestion) => { const suggestedSubpayor = suggestion.payers?.find((option) => option.id === suggestion.selectedPayerId); return <button className=\"mbsf-suggestion\" type=\"button\" key={`${suggestion.id}-${suggestion.selectedPayerId ?? \"admin\"}`} title={suggestion.reason} onClick={() => choosePayer(suggestion, suggestion.selectedPayerId)}>{suggestion.name}{suggestedSubpayor ? ` · ${suggestedSubpayor.label}` : \"\"}</button>; })}</div> : null}\n {administrator?.id ? <button className=\"mbsf-directory-link\" type=\"button\" onClick={() => { void openAdministratorDirectory(); }}>View contacts and routing details for {administrator.name}</button> : <small className=\"mbsf-help\">Search the directory and choose a claims administrator.</small>}\n </Field>\n {administrator?.payerSelectionRequired ? <Field path=\"claim.claimsAdministrator.payerId\" label=\"Payer\" required span error={subpayorError}>\n {subpayorOptions.length ? <ComboBox ariaLabel=\"Payer\" invalid={Boolean(subpayorError)} disabled={locked} value={selectedSubpayor?.label ?? \"\"} placeholder=\"Select the payer named on the claim or report…\" options={subpayorOptions.map((option) => ({ id: option.id, label: option.label, ...(option.hint ? { detail: option.hint } : {}), ...(option.affiliatedEntities?.length ? { affiliatedEntities: option.affiliatedEntities } : {}) }))} onSelect={(option) => chooseSubpayor(option.id)} /> : <div className=\"mbsf-error\" role=\"alert\">No routing payers are available for {administrator.name}. Electronic submission remains blocked; contact support to correct the payer directory.</div>}\n {selectedSubpayor ? <div className=\"mbsf-payer-status\" role=\"status\"><strong>✓ Payer set:</strong> {selectedSubpayor.label}</div> : <small className=\"mbsf-help\">{administrator.name} administers multiple payers. Choose the payer named on the claim or report so MindBill can route the bill correctly.</small>}\n </Field> : null}\n <Field label=\"Injury description (optional)\" span>{text(bill.claim.description, (description) => setBill((c) => ({ ...c, claim: { ...c.claim, description } })))}</Field>\n <Field path=\"diagnoses\" label=\"Diagnosis codes (ICD-10)\" required span error={errors.diagnoses}>\n <div className=\"mbsf-quick-picks\" aria-label=\"Common diagnosis codes\">{BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS.map((option) => { const selected = (bill.diagnoses ?? []).includes(option.code); return <button className=\"mbsf-quick-pick\" data-selected={selected} type=\"button\" key={option.code} aria-pressed={selected} title={`${option.code} — ${option.description}`} onClick={() => setBill((current) => ({ ...current, diagnoses: selected ? (current.diagnoses ?? []).filter((code) => code !== option.code) : [...new Set([...(current.diagnoses ?? []), option.code])] }))}>{selected ? \"✓\" : \"+\"} {option.label}</button>; })}</div>\n <div className=\"mbsf-chips\">{(bill.diagnoses ?? []).map((code) => { const option = [...BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS, ...diagnosisChoices].find((item) => item.code === code); return <span className=\"mbsf-chip\" key={code}><strong>{code}</strong>{option?.description ? ` ${option.description}` : \"\"}<button type=\"button\" aria-label={`Remove ${code}`} onClick={() => setBill((c) => ({ ...c, diagnoses: (c.diagnoses ?? []).filter((item) => item !== code) }))}>×</button></span>; })}</div>\n <ComboBox ariaLabel=\"Add diagnosis code\" invalid={Boolean(errors.diagnoses)} disabled={locked} loading={diagnosisLoading} loadingMore={diagnosisLoadingMore} value=\"\" placeholder={(bill.diagnoses?.length ?? 0) ? `${bill.diagnoses!.length} selected — add more…` : \"Search ICD-10 codes…\"} options={diagnosisChoices.filter((item) => !(bill.diagnoses ?? []).includes(item.code)).map((item) => ({ id: item.code, label: item.code, detail: item.description }))} onOpen={() => { if (diagnosisQuery !== \"\") loadDiagnoses(\"\"); }} onQuery={searchDiagnoses} onEndReached={() => loadDiagnoses(diagnosisQuery ?? \"\", true)} onSelect={(option) => setBill((c) => ({ ...c, diagnoses: [...new Set([...(c.diagnoses ?? []), option.id])] }))} />\n </Field>\n </div></fieldset>;\n\n const providersSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Providers & place of service</legend><div className=\"mbsf-grid\">\n <h4 className=\"mbsf-subhead\">Billing provider</h4>\n <Field path=\"billingProvider.name\" label=\"Billing provider name\" required error={errors[\"billingProvider.name\"]}>{text(bill.billingProvider?.name, (name) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, name } })))}</Field>\n <Field path=\"billingProvider.taxId\" label=\"Tax ID (EIN / SSN)\" required error={errors[\"billingProvider.taxId\"]}>{text(bill.billingProvider?.taxId, (taxId) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, taxId } })), { inputMode: \"numeric\" })}</Field>\n <Field path=\"billingProvider.npi\" label=\"Billing provider NPI\" required error={errors[\"billingProvider.npi\"]}>{text(bill.billingProvider?.npi, (npi) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"billingProvider.phone\" label=\"Billing provider phone\" required error={errors[\"billingProvider.phone\"]}>{text(bill.billingProvider?.phone, (phone) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, phone } })), { type: \"tel\" })}</Field>\n <Field path=\"billingProvider.address.line1\" label=\"Billing address line 1\" required span error={errors[\"billingProvider.address.line1\"]}>{text(bill.billingProvider?.address?.line1, (line1) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1, line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Billing address line 2 (optional)\" span>{text(bill.billingProvider?.address?.line2, (line2) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2, city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.city\" label=\"Billing city\" required error={errors[\"billingProvider.address.city\"]}>{text(bill.billingProvider?.address?.city, (city) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city, state: c.billingProvider?.address?.state ?? \"\", postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"billingProvider.address.state\" label=\"Billing state\" required error={errors[\"billingProvider.address.state\"]}>{text(bill.billingProvider?.address?.state, (state) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.billingProvider?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"billingProvider.address.postalCode\" label=\"Billing ZIP\" required error={errors[\"billingProvider.address.postalCode\"]}>{text(bill.billingProvider?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, billingProvider: { ...c.billingProvider, address: { line1: c.billingProvider?.address?.line1 ?? \"\", line2: c.billingProvider?.address?.line2 ?? \"\", city: c.billingProvider?.address?.city ?? \"\", state: c.billingProvider?.address?.state ?? \"\", postalCode } } })))}</Field>\n <h4 className=\"mbsf-subhead\">Rendering provider</h4>\n <Field path=\"renderingProvider.name\" label=\"Rendering provider name\" required error={errors[\"renderingProvider.name\"]}>{text(bill.renderingProvider?.name, (name) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, name } })))}</Field>\n <Field path=\"renderingProvider.npi\" label=\"Rendering provider NPI\" required error={errors[\"renderingProvider.npi\"]}>{text(bill.renderingProvider?.npi, (npi) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, npi } })), { inputMode: \"numeric\", maxLength: 10 })}</Field>\n <Field path=\"renderingProvider.taxonomy\" label=\"Rendering taxonomy\" required error={errors[\"renderingProvider.taxonomy\"]}><ComboBox ariaLabel=\"Rendering taxonomy\" invalid={Boolean(errors[\"renderingProvider.taxonomy\"])} disabled={locked} preserveValueOnOpen value={bill.renderingProvider?.taxonomy ?? \"\"} placeholder=\"Search specialty name or taxonomy code…\" options={taxonomies.map((item) => ({ id: item.code, label: item.description, detail: item.code }))} createOption={(query) => { const code = query.trim().toUpperCase(); return /^[A-Z0-9]{10}$/.test(code) ? { id: code, label: code, detail: \"Use this taxonomy code\" } : null; }} onSelect={(option) => setBill((c) => ({ ...c, renderingProvider: { ...c.renderingProvider, taxonomy: option.id } }))} /><small className=\"mbsf-help\">Search by specialty name or 10-character taxonomy code.</small></Field>\n <h4 className=\"mbsf-subhead\">Service facility</h4>\n <Field path=\"serviceLocation.placeOfServiceCode\" label=\"Place of service code\" required error={errors[\"serviceLocation.placeOfServiceCode\"]}>{text(bill.serviceLocation?.placeOfServiceCode, (placeOfServiceCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, placeOfServiceCode } })), { inputMode: \"numeric\", maxLength: 2, placeholder: \"11\" })}</Field>\n <Field path=\"serviceLocation.address.line1\" label=\"Service address line 1\" required span error={errors[\"serviceLocation.address.line1\"]}>{text(bill.serviceLocation?.address?.line1, (line1) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1, line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field label=\"Service address line 2 (optional)\" span>{text(bill.serviceLocation?.address?.line2, (line2) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2, city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.city\" label=\"Service city\" required error={errors[\"serviceLocation.address.city\"]}>{text(bill.serviceLocation?.address?.city, (city) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city, state: c.serviceLocation?.address?.state ?? \"\", postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })))}</Field>\n <Field path=\"serviceLocation.address.state\" label=\"Service state\" required error={errors[\"serviceLocation.address.state\"]}>{text(bill.serviceLocation?.address?.state, (state) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: state.toUpperCase(), postalCode: c.serviceLocation?.address?.postalCode ?? \"\" } } })), { maxLength: 2 })}</Field>\n <Field path=\"serviceLocation.address.postalCode\" label=\"Service ZIP\" required error={errors[\"serviceLocation.address.postalCode\"]}>{text(bill.serviceLocation?.address?.postalCode, (postalCode) => setBill((c) => ({ ...c, serviceLocation: { ...c.serviceLocation, address: { line1: c.serviceLocation?.address?.line1 ?? \"\", line2: c.serviceLocation?.address?.line2 ?? \"\", city: c.serviceLocation?.address?.city ?? \"\", state: c.serviceLocation?.address?.state ?? \"\", postalCode } } })))}</Field>\n </div></fieldset>;\n\n const serviceLinesSection = <fieldset className=\"mbsf-card\" disabled={locked}><legend className=\"mbsf-legend\">Evaluation & service lines</legend>\n <p className=\"mbsf-help\">Sets the evaluator/specialty modifier on medical-legal evaluation lines.</p>\n <div className=\"mbsf-segments\" role=\"group\" aria-label=\"Evaluation type\">{([ [\"qme\", \"QME (default)\"], [\"ame\", \"AME\"], [\"psych_qme\", \"Psych QME\"] ] as const).map(([type, label]) => <button className=\"mbsf-segment\" type=\"button\" key={type} aria-pressed={evaluationType === type} onClick={() => changeEvaluation(type)}>{label}</button>)}</div>\n <p className=\"mbsf-help\">{evaluationType === \"ame\" ? \"Agreed Medical Evaluator — eligible ML evaluation codes default to modifier -94.\" : evaluationType === \"psych_qme\" ? \"Psychiatric QME — eligible ML evaluation codes default to modifier -96 (-95 for ML200).\" : \"Qualified Medical Evaluator — eligible ML evaluation codes default to modifier -95.\"}</p>\n <div className=\"mbsf-lines\" data-field-path=\"serviceLines\" data-invalid={Boolean(errors.serviceLines)}><div className=\"mbsf-line-head\"><span>Procedure code<RequiredMark /></span><span>Modifiers</span><span>Dx</span><span>Units<RequiredMark /></span><span>Allowed</span><span /> </div>\n {bill.serviceLines.map((line, index) => <div className=\"mbsf-line\" key={index}>\n <div data-label=\"Procedure code\" data-field-path={`serviceLines.${index}.code`} data-invalid={Boolean(errors[`serviceLines.${index}.code`])}><ComboBox ariaLabel={`Procedure code ${index + 1}`} invalid={Boolean(errors[`serviceLines.${index}.code`])} disabled={locked} value={line.code} placeholder=\"Search or enter code…\" options={procedures.map((item) => ({ id: item.code, label: item.code, detail: item.description }))} createOption={customProcedureOption} onSelect={(option) => { const auto = evaluationModifier(evaluationType, option.id); setLine(index, { code: option.id, ...(auto ? { modifiers: [auto, ...(line.modifiers ?? []).filter((item) => ![\"94\", \"95\", \"96\"].includes(item.replace(/^-/, \"\")))] } : line.modifiers ? { modifiers: line.modifiers } : {}) }); }} />{line.code ? <small className=\"mbsf-help\">{procedures.find((item) => item.code === line.code)?.description ?? \"Custom CPT, HCPCS, or medical-legal code\"}</small> : null}{errors[`serviceLines.${index}.code`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.code`]}</small> : null}</div>\n <div data-label=\"Modifiers\"><div className=\"mbsf-chips\">{(line.modifiers ?? []).map((modifier) => <span className=\"mbsf-chip\" key={modifier}>−{modifier.replace(/^-/, \"\")}<button type=\"button\" aria-label={`Remove modifier ${modifier}`} onClick={() => setLine(index, { modifiers: (line.modifiers ?? []).filter((item) => item !== modifier) })}>×</button></span>)}</div><ComboBox ariaLabel={`Modifiers ${index + 1}`} disabled={locked} value=\"\" placeholder={(line.modifiers?.length ?? 0) ? `${line.modifiers!.length} modifier${line.modifiers!.length === 1 ? \"\" : \"s\"}` : \"Add modifiers…\"} options={modifiers.filter((item) => !(line.modifiers ?? []).includes(item.code)).map((item) => ({ id: item.code, label: `−${item.code}`, detail: item.description }))} onSelect={(option) => setLine(index, { modifiers: [...new Set([...(line.modifiers ?? []), option.id])] })} /></div>\n <div data-label=\"Dx\"><div className=\"mbsf-dx\">{(bill.diagnoses ?? []).length ? (bill.diagnoses ?? []).map((code, dxIndex) => { const pointer = dxIndex + 1; const active = (line.diagnosisPointers ?? []).includes(pointer); return <button type=\"button\" key={code} className=\"mbsf-dx-chip\" data-active={active} title={`${String.fromCharCode(64 + pointer)} — ${code}`} aria-pressed={active} aria-label={`Point line ${index + 1} at diagnosis ${code}`} onClick={() => setLine(index, { diagnosisPointers: active ? (line.diagnosisPointers ?? []).filter((item) => item !== pointer) : [...(line.diagnosisPointers ?? []), pointer].sort((left, right) => left - right) })}>{String.fromCharCode(64 + pointer)}</button>; }) : <small className=\"mbsf-help\">Add diagnoses above</small>}</div></div>\n <div data-label=\"Units\" data-field-path={`serviceLines.${index}.units`} data-invalid={Boolean(errors[`serviceLines.${index}.units`])}><input className=\"mbsf-input\" aria-label={`Units ${index + 1}`} aria-invalid={Boolean(errors[`serviceLines.${index}.units`])} type=\"number\" min={1} value={line.units ?? 1} onChange={(event) => setLine(index, { units: Number(event.target.value) })} />{errors[`serviceLines.${index}.units`] ? <small className=\"mbsf-error\" role=\"alert\">{errors[`serviceLines.${index}.units`]}</small> : null}</div>\n <div className=\"mbsf-money\" data-label=\"Allowed\">{lineCharge(line) == null ? \"—\" : lineCharge(line)!.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</div>\n <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove service line ${index + 1}`} disabled={locked || (!lineHasContent(line) && index === bill.serviceLines.length - 1)} onClick={() => setBill((c) => ({ ...c, serviceLines: ensureTrailingBillSubmissionLine(c.serviceLines.filter((_, itemIndex) => itemIndex !== index)) }))}>×</button>\n </div>)}\n <div className=\"mbsf-total\"><span>Total</span><span>{total.toLocaleString(undefined, { style: \"currency\", currency: \"USD\" })}</span></div>\n </div>{errors.serviceLines ? <p className=\"mbsf-error\" role=\"alert\">{errors.serviceLines}</p> : null}\n </fieldset>;\n\n const attachmentsSection = <fieldset className=\"mbsf-card\" data-field-path=\"attachments\" data-invalid={Boolean(errors.attachments)} disabled={locked}><legend className=\"mbsf-legend\">Attachments</legend><div className=\"mbsf-attach-list\">\n {attachments.filter((attachment) => !removedSourceIds.includes(attachment.id)).map((attachment) => { const auto = attachment.autoAttached || attachment.documentType === \"w9\"; const removable = attachment.removable ?? !auto; const reportTypeCode = sourceAttachmentReportTypes[attachment.id] || attachment.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" data-auto={auto} key={attachment.id}><div className=\"mbsf-attach-main\">{auto ? <span aria-label=\"Auto-attached\" role=\"img\">✓</span> : null}<span className=\"mbsf-file\"><strong>{attachment.fileName}</strong><span className=\"mbsf-badge\">{auto ? \"Auto-attached\" : documentLabels[attachment.documentType]}</span><span className=\"mbsf-help\" style={{ display: \"block\" }}>{attachment.description || (auto ? \"Included automatically with every bill.\" : documentLabels[attachment.documentType])}</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${attachment.fileName}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setSourceAttachmentReportTypes((current) => ({ ...current, [attachment.id]: option.id }))} /></div> : null}<div className=\"mbsf-attach-actions\">{attachment.previewUrl ? <a className=\"mbsf-secondary\" href={attachment.previewUrl} target=\"_blank\" rel=\"noopener noreferrer\">Preview</a> : null}{removable ? <button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${attachment.fileName}`} disabled={locked} onClick={() => { setSelectedIds((current) => current.filter((id) => id !== attachment.id)); setRemovedSourceIds((current) => [...new Set([...current, attachment.id])]); }}>×</button> : null}</div></div>; })}\n {uploads.map((upload, index) => { const reportTypeCode = upload.reportTypeCode || defaultAttachmentReportType || \"\"; return <div className=\"mbsf-attach-row\" key={`${upload.file.name}-${index}`}><div className=\"mbsf-attach-main\"><span className=\"mbsf-file\"><strong>{upload.file.name}</strong><span className=\"mbsf-help\" style={{ display: \"block\" }}>{(upload.file.size / 1024 / 1024).toFixed(1)} MB</span></span></div>{showAttachmentReportTypes ? <div className=\"mbsf-attach-type\"><ComboBox ariaLabel={`Report type for ${upload.file.name}`} invalid={!reportTypeCode} disabled={locked} preserveValueOnOpen value={reportTypeCode} placeholder=\"Select report type…\" options={reportTypeOptions} onSelect={(option) => setUploads((current) => current.map((item, itemIndex) => itemIndex === index ? { ...item, reportTypeCode: option.id } : item))} /></div> : null}<div className=\"mbsf-attach-actions\"><button className=\"mbsf-secondary\" type=\"button\" onClick={() => previewUploadedPdf(upload.file)}>Preview</button><button className=\"mbsf-icon-btn\" type=\"button\" aria-label={`Remove ${upload.file.name}`} onClick={() => setUploads((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button></div></div>; })}\n </div>{errors.attachments ? <p className=\"mbsf-error\" role=\"alert\">{errors.attachments}</p> : null}<input ref={fileInput} hidden type=\"file\" accept=\"application/pdf,.pdf\" multiple onChange={(event) => { if (event.target.files) addFiles(event.target.files); event.target.value = \"\"; }} /><button className=\"mbsf-drop\" data-active={dragActive} type=\"button\" onClick={() => fileInput.current?.click()}><span><strong style={{ fontSize: 18 }}>Drop additional PDF files here, or click to choose</strong><span className=\"mbsf-help\" style={{ display: \"block\", marginTop: 8 }}>Add supporting documents anywhere on this screen.</span></span></button></fieldset>;\n\n const actionsSection = <>{formError ? <div className=\"mbsf-alert\" role=\"alert\">{formError}</div> : null}<div className=\"mbsf-actions\"><button className=\"mbsf-submit\" type=\"submit\" disabled={locked}>{submitting ? \"Submitting…\" : submitLabel}</button></div></>;\n const sections: BillSubmissionSections = {\n header: headerSection,\n patient: patientSection,\n claim: claimSection,\n providers: providersSection,\n serviceLines: serviceLinesSection,\n attachments: attachmentsSection,\n actions: actionsSection,\n };\n const defaultLayout = <>\n <BillSubmissionHeader />\n <BillSubmissionPatientSection />\n <BillSubmissionClaimSection />\n <BillSubmissionProvidersSection />\n <BillSubmissionServiceLinesSection />\n <BillSubmissionAttachmentsSection />\n <BillSubmissionActions />\n </>;\n\n return <BillSubmissionSectionsContext.Provider value={sections}>\n <form ref={formRef} className={`${className} mbsf`} style={{ ...mindBillAppearanceStyle(appearance), ...style }} onSubmit={(event) => { event.preventDefault(); void submit(); }} noValidate>\n <style>{css}</style>\n {attentionMessage ? <div className=\"mbsf-attention\" role=\"status\">{attentionMessage}</div> : null}\n {children ?? defaultLayout}\n {routeDialog ? (\n <SendRouteDialog\n title=\"Send bill\"\n delivery={routeDialog.delivery}\n submitting={submitting}\n error={routeError}\n onCancel={() => { if (!submitting) { setRouteDialog(null); setRouteError(null); } }}\n onConfirm={(submission) => { void performConnectedSubmit(routeDialog.complete, submission); }}\n />\n ) : null}\n </form>\n <ClaimsAdministratorDirectoryDialog\n open={directoryOpen}\n directory={directory}\n loading={directoryLoading}\n error={directoryError}\n onClose={() => {\n setDirectoryOpen(false);\n setDirectory(null);\n setDirectoryError(null);\n }}\n />\n </BillSubmissionSectionsContext.Provider>;\n}\n","\"use client\";\n\n// Delivery-method picker shown when a bill is submitted: one\n// card per route (e-bill / email / fax / mail), the selected card expands\n// inline with its destination sub-form, and the primary button names the\n// channel. Rendered by BillSubmissionForm by default in connected mode; also\n// exported for hosts that submit through their own server.\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type { BillDeliveryOptions, BillSubmissionRoute, SubmitBillInput } from \"@mindbill/browser\";\n\nconst EMAIL_RE = /[A-Za-z0-9._%+'-]+@[A-Za-z0-9-]+(?:\\.[A-Za-z0-9-]+)*\\.[A-Za-z]{2,}/;\n\n/** First plausible email address inside a raw contact string, or null. */\nexport function extractSendRouteEmail(raw: string | null | undefined): string | null {\n if (!raw) return null;\n const match = raw.match(EMAIL_RE);\n return match ? match[0] : null;\n}\n\n/** \"(213) 555-0199\" for 10/11-digit US numbers; anything else trimmed as-is. */\nexport function formatSendRouteFax(raw: string | null | undefined): string {\n if (!raw) return \"\";\n const digits = raw.replace(/\\D/g, \"\");\n const ten = digits.length === 11 && digits.startsWith(\"1\") ? digits.slice(1) : digits;\n if (ten.length === 10) return `(${ten.slice(0, 3)}) ${ten.slice(3, 6)}-${ten.slice(6)}`;\n return raw.trim();\n}\n\n/**\n * Live format-as-you-type for the fax input: digits render progressively as\n * \"(213) 555-0199\" whether typed bare or pasted pre-formatted. A leading \"+\"\n * (international) or an overflowing value is left as typed.\n */\nexport function formatSendRouteFaxInput(raw: string): string {\n const trimmed = raw.trimStart();\n if (trimmed.startsWith(\"+\")) return raw;\n const all = trimmed.replace(/\\D/g, \"\");\n const digits = all.length === 11 && all.startsWith(\"1\") ? all.slice(1) : all;\n if (digits.length > 10 || (all.length === 11 && !all.startsWith(\"1\")) || all.length > 11) return raw;\n if (digits.length === 0) return \"\";\n if (digits.length <= 3) return `(${digits}`;\n if (digits.length <= 6) return `(${digits.slice(0, 3)}) ${digits.slice(3)}`;\n return `(${digits.slice(0, 3)}) ${digits.slice(3, 6)}-${digits.slice(6)}`;\n}\n\nexport type SendRouteSubmission = Pick<\n SubmitBillInput,\n \"route\" | \"destination\" | \"attention\" | \"subject\" | \"note\" | \"cc\"\n>;\n\nexport type SendRouteDialogProps = {\n /** Dialog heading, e.g. \"Send bill\". */\n title?: ReactNode;\n delivery: BillDeliveryOptions;\n submitting?: boolean;\n /** Disables the confirm button while the caller uploads documents. */\n disabled?: boolean;\n error?: string | null;\n onCancel: () => void;\n onConfirm: (submission: SendRouteSubmission) => void;\n};\n\nconst css = `\n.mbrd-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbrd{display:grid;gap:16px;width:min(560px,100%);max-height:min(86vh,860px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:15px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbrd *{box-sizing:border-box}\n.mbrd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbrd-title{margin:0;font-size:20px;font-weight:760}\n.mbrd-copy{margin:4px 0 0;color:var(--mb-muted);font-size:14px}\n.mbrd-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbrd-cards{display:grid;gap:10px}\n.mbrd-card{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);transition:border-color .12s ease,background .12s ease}\n.mbrd-card[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbrd-card[data-disabled=true]{opacity:.55}\n.mbrd-card-main{display:flex;align-items:center;gap:12px;width:100%;padding:13px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}\n.mbrd-card[data-disabled=true] .mbrd-card-main{cursor:not-allowed}\n.mbrd-radio{flex:0 0 auto;width:18px;height:18px;border:2px solid var(--mb-border);border-radius:50%;display:grid;place-items:center}\n.mbrd-card[data-selected=true] .mbrd-radio{border-color:var(--mb-accent)}\n.mbrd-card[data-selected=true] .mbrd-radio:after{content:\"\";width:9px;height:9px;border-radius:50%;background:var(--mb-accent)}\n.mbrd-card-text{min-width:0;flex:1}\n.mbrd-card-title{font-weight:700;line-height:1.3;overflow-wrap:anywhere}\n.mbrd-card-detail{margin-top:2px;color:var(--mb-muted);font-size:13px;line-height:1.35;overflow-wrap:anywhere}\n.mbrd-badges{display:flex;flex:0 0 auto;gap:6px}\n.mbrd-badge{padding:2px 8px;border:1px solid var(--mb-border);border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap}\n.mbrd-badge[data-tone=verified]{border-color:color-mix(in srgb,#159447 45%,var(--mb-border));background:color-mix(in srgb,#159447 8%,var(--mb-surface));color:#0c7a48}\n.mbrd-badge[data-tone=auto]{border-color:color-mix(in srgb,var(--mb-accent) 45%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-accent)}\n.mbrd-sub{display:grid;gap:12px;padding:12px 14px;border-top:1px solid var(--mb-border);background:color-mix(in srgb,var(--mb-accent) 2%,var(--mb-surface));border-radius:0 0 var(--mb-control-radius) var(--mb-control-radius)}\n.mbrd-choice{border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-surface)}\n.mbrd-choice[data-selected=true]{border-color:var(--mb-accent)}\n.mbrd-choice[data-disabled=true]{opacity:.55}\n.mbrd-choice-main{display:flex;align-items:center;gap:10px;width:100%;padding:9px 11px;border:0;background:transparent;color:inherit;font:inherit;font-size:13px;text-align:left;cursor:pointer}\n.mbrd-choice[data-disabled=true] .mbrd-choice-main{cursor:not-allowed}\n.mbrd-choice-title{font-weight:650;overflow-wrap:anywhere}\n.mbrd-choice-detail{margin-top:1px;color:var(--mb-muted);font-size:12px}\n.mbrd-choice-body{display:grid;gap:8px;padding:10px 11px;border-top:1px solid var(--mb-border)}\n.mbrd-field{display:grid;gap:5px;font-size:13px}\n.mbrd-label{font-weight:650}\n.mbrd-star{color:var(--mb-danger)}\n.mbrd-input,.mbrd-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbrd-textarea{resize:vertical;min-height:74px}\n.mbrd-input:focus,.mbrd-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbrd-error{color:var(--mb-danger);font-size:12px}\n.mbrd-help{color:var(--mb-muted);font-size:12px}\n.mbrd-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbrd-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbrd-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbrd-confirm{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbrd-confirm:disabled,.mbrd-cancel:disabled{opacity:.6;cursor:not-allowed}\n`;\n\nconst CONFIRM_LABELS: Record<BillSubmissionRoute, string> = {\n ebill: \"Send Bill\",\n email: \"Email Bill\",\n fax: \"Fax Bill\",\n mail: \"Mail Bill\",\n};\n\nfunction RouteCard({\n selected,\n disabled,\n title,\n detail,\n badges,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n badges?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-card\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-card-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-card-title\">{title}</span>\n {detail ? <span className=\"mbrd-card-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n {badges ? <span className=\"mbrd-badges\">{badges}</span> : null}\n </button>\n {selected && children ? <div className=\"mbrd-sub\">{children}</div> : null}\n </div>\n );\n}\n\nfunction RecipientChoice({\n selected,\n disabled,\n title,\n detail,\n onSelect,\n children,\n}: {\n selected: boolean;\n disabled?: boolean;\n title: ReactNode;\n detail?: ReactNode;\n onSelect: () => void;\n children?: ReactNode;\n}): ReactElement {\n return (\n <div className=\"mbrd-choice\" data-selected={selected} data-disabled={Boolean(disabled)}>\n <button\n className=\"mbrd-choice-main\"\n type=\"button\"\n role=\"radio\"\n aria-checked={selected}\n disabled={disabled}\n onClick={onSelect}\n >\n <span className=\"mbrd-radio\" aria-hidden style={{ width: 15, height: 15 }} />\n <span className=\"mbrd-card-text\">\n <span className=\"mbrd-choice-title\">{title}</span>\n {detail ? <span className=\"mbrd-choice-detail\" style={{ display: \"block\" }}>{detail}</span> : null}\n </span>\n </button>\n {selected && children ? <div className=\"mbrd-choice-body\">{children}</div> : null}\n </div>\n );\n}\n\nexport function SendRouteDialog({\n title = \"Send bill\",\n delivery,\n submitting = false,\n disabled = false,\n error = null,\n onCancel,\n onConfirm,\n}: SendRouteDialogProps): ReactElement {\n const ebillOption = delivery.options.find((option) => option.route === \"ebill\");\n const mailOption = delivery.options.find((option) => option.route === \"mail\");\n const recommendedRoute = delivery.recommended.route;\n const onFileEmail = extractSendRouteEmail(delivery.contacts.claimsEmail);\n const onFileFax = delivery.contacts.faxNumber?.trim() || null;\n const onFileFaxDisplay = formatSendRouteFax(onFileFax);\n const onFileMail = delivery.contacts.mailingAddress?.trim() || \"\";\n\n const [route, setRoute] = useState<BillSubmissionRoute>(recommendedRoute);\n const [emailMode, setEmailMode] = useState<\"onfile\" | \"alt\">(onFileEmail ? \"onfile\" : \"alt\");\n const [faxMode, setFaxMode] = useState<\"onfile\" | \"alt\">(onFileFax ? \"onfile\" : \"alt\");\n const [emailTo, setEmailTo] = useState(\"\");\n const [subject, setSubject] = useState(\"\");\n const [message, setMessage] = useState(\"\");\n const [ccInput, setCcInput] = useState(\"\");\n const [faxTo, setFaxTo] = useState(\"\");\n const [attention, setAttention] = useState(\"\");\n const [mailTo, setMailTo] = useState(onFileMail);\n\n useEffect(() => {\n setRoute(recommendedRoute);\n setEmailMode(onFileEmail ? \"onfile\" : \"alt\");\n setFaxMode(onFileFax ? \"onfile\" : \"alt\");\n setMailTo(onFileMail);\n }, [recommendedRoute, onFileEmail, onFileFax, onFileMail]);\n\n // Close on Escape (unless a submit is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const effectiveEmail = emailMode === \"onfile\" && onFileEmail ? onFileEmail : emailTo.trim();\n const effectiveFax = faxMode === \"onfile\" && onFileFax ? onFileFax : faxTo;\n const faxDigits = effectiveFax.replace(/\\D/g, \"\");\n const emailValid = EMAIL_RE.test(effectiveEmail);\n const ccList = ccInput.split(/[,;]/).map((entry) => entry.trim()).filter(Boolean);\n const ccValid = ccList.every((entry) => EMAIL_RE.test(entry));\n const faxValid = faxDigits.length >= 10;\n const mailValid = mailTo.trim().length > 2;\n const confirmDisabled =\n submitting\n || disabled\n || (route === \"email\" && (!emailValid || !ccValid))\n || (route === \"fax\" && !faxValid)\n || (route === \"mail\" && !mailValid);\n\n const submission = useMemo((): SendRouteSubmission => {\n if (route === \"email\") {\n return {\n route,\n destination: { email: effectiveEmail },\n ...(subject.trim() ? { subject: subject.trim() } : {}),\n ...(message.trim() ? { note: message.trim() } : {}),\n ...(ccList.length ? { cc: ccList } : {}),\n };\n }\n if (route === \"fax\") {\n return {\n route,\n destination: { faxNumber: effectiveFax.trim() },\n ...(attention.trim() ? { attention: attention.trim() } : {}),\n };\n }\n if (route === \"mail\") {\n return { route, destination: { mailingAddress: mailTo.trim() } };\n }\n return { route };\n // ccList derives from ccInput.\n }, [route, effectiveEmail, subject, message, ccInput, effectiveFax, attention, mailTo]);\n\n return (\n <div className=\"mbrd-overlay\" role=\"presentation\" onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}>\n <style>{css}</style>\n <div className=\"mbrd\" role=\"dialog\" aria-modal=\"true\" aria-label={typeof title === \"string\" ? title : \"Send bill\"}>\n <div className=\"mbrd-head\">\n <div>\n <h3 className=\"mbrd-title\">{title}</h3>\n <p className=\"mbrd-copy\">Select the delivery method.</p>\n </div>\n <button className=\"mbrd-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n <div className=\"mbrd-cards\" role=\"radiogroup\" aria-label=\"Delivery method\">\n {(() => {\n const ebillCard = ebillOption ? (\n <RouteCard\n key=\"ebill\"\n selected={route === \"ebill\"}\n title={ebillOption.printAndMail ? ebillOption.label : `e-Bill to ${ebillOption.payerName || delivery.payerName}`}\n detail={[\n ebillOption.detail || null,\n !ebillOption.printAndMail && ebillOption.label.startsWith(\"e-bill \")\n ? ebillOption.label.slice(\"e-bill \".length)\n : null,\n ].filter(Boolean).join(\" · \")}\n badges={<>\n {!ebillOption.fallback ? <span className=\"mbrd-badge\" data-tone=\"verified\">Verified Route</span> : null}\n {recommendedRoute === \"ebill\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n </>}\n onSelect={() => setRoute(\"ebill\")}\n />\n ) : null;\n\n const emailCard = (\n <RouteCard\n key=\"email\"\n selected={route === \"email\"}\n title=\"Email Bill\"\n detail={onFileEmail ?? \"No claims email on file — enter a recipient.\"}\n badges={recommendedRoute === \"email\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"email\")}\n >\n <div role=\"radiogroup\" aria-label=\"Email recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={emailMode === \"onfile\"}\n disabled={!onFileEmail}\n title={onFileEmail ?? \"Claims email on file\"}\n detail={onFileEmail ? \"Claims contact on file\" : \"No claims email exists on file for this payer.\"}\n onSelect={() => setEmailMode(\"onfile\")}\n />\n <RecipientChoice\n selected={emailMode === \"alt\"}\n title=\"Alternative email recipient\"\n onSelect={() => setEmailMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative email address <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" type=\"email\" value={emailTo} placeholder=\"user@mail.com\" onChange={(event) => setEmailTo(event.target.value)} />\n {emailTo.trim() && !EMAIL_RE.test(emailTo.trim()) ? <span className=\"mbrd-error\">Enter a valid email address.</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Cc — optional</span>\n <input className=\"mbrd-input\" value={ccInput} placeholder=\"adjuster@payer.com, supervisor@payer.com\" onChange={(event) => setCcInput(event.target.value)} />\n {!ccValid ? <span className=\"mbrd-error\">Each Cc entry must be a valid email address (separate with commas).</span> : null}\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Email subject — optional</span>\n <input className=\"mbrd-input\" value={subject} maxLength={255} onChange={(event) => setSubject(event.target.value)} />\n </label>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Message — optional</span>\n <textarea className=\"mbrd-textarea\" value={message} maxLength={5000} placeholder=\"Added at the top of the email body, above the bill summary.\" onChange={(event) => setMessage(event.target.value)} />\n </label>\n </RouteCard>\n );\n\n const faxCard = (\n <RouteCard\n key=\"fax\"\n selected={route === \"fax\"}\n title=\"Fax Bill\"\n detail={onFileFax ? `${onFileFaxDisplay} — payer fax on file` : \"No fax on file — enter a number.\"}\n badges={recommendedRoute === \"fax\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"fax\")}\n >\n <div role=\"radiogroup\" aria-label=\"Fax recipient\" style={{ display: \"grid\", gap: 8 }}>\n <RecipientChoice\n selected={faxMode === \"onfile\"}\n disabled={!onFileFax}\n title={onFileFax ? onFileFaxDisplay : \"Payer fax on file\"}\n detail={onFileFax ? \"Payer fax on file\" : \"No fax number exists on file for this payer.\"}\n onSelect={() => setFaxMode(\"onfile\")}\n />\n <RecipientChoice\n selected={faxMode === \"alt\"}\n title=\"Alternative fax recipient\"\n onSelect={() => setFaxMode(\"alt\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Alternative fax number <span className=\"mbrd-star\">*</span></span>\n <input className=\"mbrd-input\" inputMode=\"tel\" value={faxTo} placeholder=\"(000) 000-0000\" onChange={(event) => setFaxTo(formatSendRouteFaxInput(event.target.value))} />\n {faxTo.trim() && faxTo.replace(/\\D/g, \"\").length < 10 ? <span className=\"mbrd-error\">Enter a valid fax number (10 digits).</span> : null}\n </label>\n </RecipientChoice>\n </div>\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Attention — optional</span>\n <input className=\"mbrd-input\" value={attention} maxLength={120} placeholder=\"Recipient name\" onChange={(event) => setAttention(event.target.value)} />\n <span className=\"mbrd-help\">Printed as ATTENTION on the fax cover sheet.</span>\n </label>\n </RouteCard>\n );\n\n const mailCard = (\n <RouteCard\n key=\"mail\"\n selected={route === \"mail\"}\n title=\"Mail Bill\"\n detail={onFileMail ? onFileMail.replace(/\\n/g, \", \") : \"Physical mail — enter the payer's mailing address.\"}\n badges={recommendedRoute === \"mail\" ? <span className=\"mbrd-badge\" data-tone=\"auto\">Auto</span> : null}\n onSelect={() => setRoute(\"mail\")}\n >\n <label className=\"mbrd-field\">\n <span className=\"mbrd-label\">Mailing address <span className=\"mbrd-star\">*</span></span>\n <textarea className=\"mbrd-textarea\" value={mailTo} placeholder={\"Payer Claims Dept\\nPO Box 1234\\nCity, ST 00000\"} onChange={(event) => setMailTo(event.target.value)} />\n {!mailValid ? <span className=\"mbrd-error\">Enter a mailing address.</span> : null}\n <span className=\"mbrd-help\">\n {mailOption?.printAndMail\n ? mailOption.detail\n : \"Sent as physical mail — printed and mailed to this address.\"}\n </span>\n </label>\n </RouteCard>\n );\n\n // Preference order: ebill (only when the payer has an e-route) → fax\n // and email WITH a contact on file → mail (always) → the rest last.\n const cards: ReactNode[] = [];\n if (ebillCard) cards.push(ebillCard);\n if (onFileFax) cards.push(faxCard);\n if (onFileEmail) cards.push(emailCard);\n cards.push(mailCard);\n if (!onFileFax) cards.push(faxCard);\n if (!onFileEmail) cards.push(emailCard);\n return cards;\n })()}\n </div>\n\n {error ? <div className=\"mbrd-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbrd-actions\">\n <button className=\"mbrd-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button\n className=\"mbrd-confirm\"\n type=\"button\"\n disabled={confirmDisabled}\n onClick={() => onConfirm(submission)}\n >\n {submitting ? \"Submitting…\" : CONFIRM_LABELS[route]}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorPayer,\n} from \"@mindbill/browser\";\n\nexport type ClaimsAdministratorDirectoryDialogProps = {\n open: boolean;\n directory?: BillClaimsAdministratorDirectory | null;\n loading?: boolean;\n error?: string | null;\n onClose: () => void;\n};\n\ntype Tab = \"main\" | \"bill-review\" | \"authorization\" | \"mailing\" | \"patterns\";\n\nconst css = `\n.mbcad-backdrop{position:fixed;z-index:1000;inset:0;display:grid;place-items:center;padding:24px;background:rgba(17,28,38,.44)}\n.mbcad-dialog{--mbcad-accent:var(--mb-accent,#176c70);--mbcad-border:var(--mb-border,#d7e0df);--mbcad-surface:var(--mb-surface,#fff);--mbcad-text:var(--mb-text,#17282d);--mbcad-muted:var(--mb-muted,#607176);display:grid;grid-template-rows:auto auto minmax(0,1fr);width:min(1180px,100%);max-height:min(860px,92vh);overflow:hidden;border:1px solid var(--mbcad-border);border-radius:14px;background:var(--mbcad-surface);color:var(--mbcad-text);box-shadow:0 28px 80px rgba(14,31,43,.28);font-family:var(--mb-font,Inter,ui-sans-serif,system-ui,sans-serif)}\n.mbcad-head{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:18px 22px;border-bottom:1px solid var(--mbcad-border)}.mbcad-head h2{margin:0;font-size:24px;line-height:1.2}.mbcad-close{width:40px;height:40px;border:0;border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 9%,var(--mbcad-surface));color:var(--mbcad-accent);font:inherit;font-size:28px;line-height:1;cursor:pointer}\n.mbcad-tabs{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));margin:18px 22px 0;border-radius:10px;background:color-mix(in srgb,var(--mbcad-muted) 8%,var(--mbcad-surface));overflow:hidden}.mbcad-tab{min-height:64px;padding:10px;border:0;border-right:1px solid var(--mbcad-border);border-top:4px solid transparent;background:transparent;color:var(--mbcad-muted);font:inherit;font-weight:750;cursor:pointer}.mbcad-tab:last-child{border-right:0}.mbcad-tab[aria-selected=true]{border-top-color:var(--mbcad-accent);background:var(--mbcad-surface);color:var(--mbcad-text)}\n.mbcad-body{overflow:auto;padding:24px 22px 28px}.mbcad-grid{display:grid;gap:0;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-row{display:grid;grid-template-columns:minmax(180px,.8fr) minmax(0,2fr);gap:18px;padding:11px 14px;border-bottom:1px solid var(--mbcad-border)}.mbcad-row:last-child{border-bottom:0}.mbcad-row strong{font-weight:750}.mbcad-list{display:grid;gap:5px;margin:0;padding:0;list-style:none}.mbcad-list a,.mbcad-table a{color:var(--mbcad-accent);overflow-wrap:anywhere}.mbcad-payers{display:grid;gap:9px;margin:0;padding:0;list-style:none}.mbcad-payer{display:grid;gap:7px;padding:12px;border:1px solid var(--mbcad-border);border-radius:9px;background:color-mix(in srgb,var(--mbcad-muted) 3%,var(--mbcad-surface))}.mbcad-payer-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbcad-payer-route{color:var(--mbcad-accent);font-size:13px;font-weight:750;white-space:nowrap}.mbcad-payer-meta{display:flex;flex-wrap:wrap;gap:6px}.mbcad-payer-meta span{padding:3px 7px;border:1px solid var(--mbcad-border);border-radius:999px;color:var(--mbcad-muted);font-size:12px}.mbcad-payer-note{margin:0;color:var(--mbcad-muted);font-size:13px}.mbcad-table{width:100%;border-collapse:collapse;border:1px solid var(--mbcad-border);border-radius:10px;overflow:hidden}.mbcad-table th,.mbcad-table td{padding:13px 14px;border-bottom:1px solid var(--mbcad-border);text-align:left;vertical-align:top}.mbcad-table th{background:color-mix(in srgb,var(--mbcad-muted) 7%,var(--mbcad-surface));font-size:13px}.mbcad-empty{padding:36px;text-align:center;color:var(--mbcad-muted)}.mbcad-notice{padding:14px 16px;border:1px solid color-mix(in srgb,var(--mbcad-accent) 70%,var(--mbcad-border));border-radius:9px;background:color-mix(in srgb,var(--mbcad-accent) 5%,var(--mbcad-surface));font-weight:650}\n@media(max-width:760px){.mbcad-backdrop{padding:8px}.mbcad-dialog{max-height:96vh}.mbcad-head{padding:14px}.mbcad-head h2{font-size:19px}.mbcad-tabs{display:flex;overflow-x:auto;margin:10px 12px 0}.mbcad-tab{min-width:145px}.mbcad-body{padding:14px 12px 18px}.mbcad-row{grid-template-columns:1fr;gap:5px}.mbcad-table{display:block;overflow-x:auto}}\n`;\n\nfunction outbound(value: string, kind: \"phone\" | \"email\" | \"url\"): ReactElement {\n const href = kind === \"phone\" ? `tel:${value.replace(/[^+\\d]/g, \"\")}` : kind === \"email\" ? `mailto:${value}` : /^https?:\\/\\//i.test(value) ? value : `https://${value}`;\n return <a href={href} {...(kind === \"url\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>;\n}\n\nfunction list(values: string[] | undefined, kind?: \"phone\" | \"email\" | \"url\"): ReactNode {\n return values?.length ? <ul className=\"mbcad-list\">{values.map((value, index) => <li key={`${value}-${index}`}>{kind ? outbound(value, kind) : value}</li>)}</ul> : \"—\";\n}\n\nfunction payerDetails(payer: BillClaimsAdministratorPayer, index: number): ReactElement {\n const identifiers = Object.entries(payer.clearinghousePayerIds ?? {}).map(([name, id]) => `${name.replace(/_/g, \" \")}: ${id}`);\n const metadata = [\n payer.optionType ? `Type: ${payer.optionType}` : null,\n payer.deliveryType ? `Delivery: ${payer.deliveryType}` : null,\n payer.clearinghouse && payer.payerId ? `${payer.clearinghouse}: ${payer.payerId}` : null,\n payer.sourceClearinghouse && payer.sourcePayerId ? `Catalog route: ${payer.sourceClearinghouse} ${payer.sourcePayerId}` : null,\n ...identifiers,\n payer.preferredClearinghouse ? `Preferred: ${payer.preferredClearinghouse}` : null,\n ].filter((value): value is string => Boolean(value));\n return <li className=\"mbcad-payer\" key={`${payer.name}-${index}`}>\n <div className=\"mbcad-payer-head\"><strong>{payer.name}</strong>{payer.route ? <span className=\"mbcad-payer-route\">{payer.route}</span> : null}</div>\n {payer.aliases?.length ? <p className=\"mbcad-payer-note\">Also known as {payer.aliases.join(\", \")}</p> : null}\n {payer.hint ? <p className=\"mbcad-payer-note\">{payer.hint}</p> : null}\n {payer.affiliatedEntities?.length ? <p className=\"mbcad-payer-note\">Affiliated with {payer.affiliatedEntities.join(\", \")}</p> : null}\n {metadata.length ? <div className=\"mbcad-payer-meta\">{metadata.map((item) => <span key={item}>{item}</span>)}</div> : null}\n </li>;\n}\n\nfunction Main({ directory }: { directory: BillClaimsAdministratorDirectory }): ReactElement {\n return <div className=\"mbcad-grid\">\n {([\n [\"Name\", directory.name ?? \"—\"], [\"Description\", directory.description ?? \"—\"], [\"Type\", directory.type ?? \"—\"],\n [\"Website\", directory.website ? outbound(directory.website, \"url\") : \"—\"],\n [\"Also known as\", list(directory.aliases)], [\"Affiliated entities\", list(directory.affiliatedEntities)],\n [\"Hours of operation\", directory.hours ?? \"—\"], [\"Telephone numbers\", list(directory.telephoneNumbers, \"phone\")],\n [\"Email addresses\", list(directory.emailAddresses, \"email\")], [\"Web portals\", list(directory.webPortals, \"url\")],\n [\"Payers\", directory.payers?.length ? <ul className=\"mbcad-payers\">{directory.payers.map(payerDetails)}</ul> : \"—\"],\n [\"Bill processing workflow\", directory.billProcessingWorkflow ?? \"—\"],\n [\"Bill processing workflow notes\", directory.billProcessingWorkflowNotes ?? \"—\"],\n [\"Claim number hint\", directory.claimNumberHint ?? \"—\"],\n ] as Array<[string, ReactNode]>).map(([label, value]) => <div className=\"mbcad-row\" key={label}><strong>{label}</strong><div>{value}</div></div>)}\n </div>;\n}\n\nfunction contacts(items: BillClaimsAdministratorContact[] | undefined, empty: string): ReactElement {\n if (!items?.length) return <div className=\"mbcad-empty\">{empty}</div>;\n return <table className=\"mbcad-table\"><thead><tr><th>Name</th><th>Telephone</th><th>Web portal</th><th>Email</th><th>Fax</th><th>Address / note</th></tr></thead><tbody>{items.map((item, index) => <tr key={`${item.name ?? \"contact\"}-${index}`}><td>{item.name ?? \"—\"}</td><td>{item.phone ? outbound(item.phone, \"phone\") : \"—\"}</td><td>{item.portalUrl ? outbound(item.portalUrl, \"url\") : \"—\"}</td><td>{item.email ? outbound(item.email, \"email\") : \"—\"}</td><td>{item.fax ?? \"—\"}</td><td>{[item.address, item.note].filter(Boolean).join(\" · \") || \"—\"}</td></tr>)}</tbody></table>;\n}\n\nexport function ClaimsAdministratorDirectoryDialog({ open, directory, loading = false, error, onClose }: ClaimsAdministratorDirectoryDialogProps): ReactElement | null {\n const [tab, setTab] = useState<Tab>(\"main\");\n useEffect(() => { if (open) setTab(\"main\"); }, [open, directory?.id]);\n useEffect(() => {\n if (!open) return;\n const close = (event: KeyboardEvent) => { if (event.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", close); return () => window.removeEventListener(\"keydown\", close);\n }, [onClose, open]);\n if (!open) return null;\n const title = directory?.name ?? \"Claims administrator directory\";\n return <div className=\"mbcad-backdrop\" onMouseDown={(event) => { if (event.target === event.currentTarget) onClose(); }}><style>{css}</style><section className=\"mbcad-dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mbcad-title\">\n <header className=\"mbcad-head\"><h2 id=\"mbcad-title\">{title}</h2><button className=\"mbcad-close\" type=\"button\" aria-label=\"Close claims administrator details\" onClick={onClose}>×</button></header>\n <div className=\"mbcad-tabs\" role=\"tablist\">{([\n [\"main\", \"Main\"], [\"bill-review\", \"Bill Review\"], [\"authorization\", \"Authorization Info\"], [\"mailing\", \"Mailing Address\"], [\"patterns\", \"Claim Number Pattern\"],\n ] as Array<[Tab, string]>).map(([id, label]) => <button className=\"mbcad-tab\" type=\"button\" role=\"tab\" aria-selected={tab === id} onClick={() => setTab(id)} key={id}>{label}</button>)}</div>\n <div className=\"mbcad-body\" role=\"tabpanel\">{loading ? <div className=\"mbcad-empty\">Loading directory details…</div> : error ? <div className=\"mbcad-empty\" role=\"alert\">{error}</div> : !directory ? <div className=\"mbcad-empty\">Directory details are unavailable.</div> : tab === \"main\" ? <Main directory={directory} /> : tab === \"bill-review\" ? contacts(directory.billReview, \"No bill-review contacts are listed.\") : tab === \"authorization\" ? <>{directory.authorizationNotice ? <p className=\"mbcad-notice\">{directory.authorizationNotice}</p> : null}{contacts(directory.authorization, \"No authorization contacts are listed.\")}</> : tab === \"mailing\" ? directory.mailingAddresses?.length ? <table className=\"mbcad-table\"><thead><tr><th>Company</th><th>Address</th><th>Notes</th><th>Bill treatment types</th><th>Submission type</th></tr></thead><tbody>{directory.mailingAddresses.map((item, index) => <tr key={`${item.address}-${index}`}><td>{item.company ?? \"—\"}</td><td>{item.address}</td><td>{item.notes ?? \"—\"}</td><td>{item.billTreatmentTypes?.join(\", \") || \"—\"}</td><td>{item.submissionTypes?.join(\", \") || \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No mailing addresses are listed.</div> : directory.claimNumberPatterns?.length ? <table className=\"mbcad-table\"><thead><tr><th>Length</th><th>Pattern</th><th>Example</th></tr></thead><tbody>{directory.claimNumberPatterns.map((item, index) => <tr key={`${item.pattern}-${index}`}><td>{item.length ?? \"—\"}</td><td>{item.pattern}</td><td>{item.example ?? \"—\"}</td></tr>)}</tbody></table> : <div className=\"mbcad-empty\">No claim-number patterns are listed.</div>}</div>\n </section></div>;\n}\n","import type {\n BillSubmissionDiagnosisOption,\n BillSubmissionModifierOption,\n BillSubmissionProcedureOption,\n BillSubmissionTaxonomyOption,\n} from \"./bill-submission-form\";\n\n/** Public-domain and MindBill-owned metadata. CPT descriptions are intentionally limited to the curated catalog. */\nexport const DEFAULT_BILL_SUBMISSION_PROCEDURES: BillSubmissionProcedureOption[] = [\n { code: \"ML200\", description: \"Missed appointment for a medical-legal evaluation\", allowedAmount: 503.75 },\n { code: \"ML201\", description: \"Comprehensive medical-legal evaluation\", allowedAmount: 2015 },\n { code: \"ML202\", description: \"Follow-up medical-legal evaluation\", allowedAmount: 1316.25 },\n { code: \"ML203\", description: \"Supplemental medical-legal evaluation\", allowedAmount: 650 },\n { code: \"ML204\", description: \"Medical-legal testimony\", allowedAmount: 113.75 },\n { code: \"ML205\", description: \"Review of sub rosa recordings\", allowedAmount: 81.25 },\n { code: \"MLPRR\", description: \"Medical-legal record review\", allowedAmount: 3 },\n { code: \"90791\", description: \"Psychiatric diagnostic evaluation\" },\n { code: \"90792\", description: \"Psychiatric diagnostic evaluation with medical services\" },\n { code: \"90832\", description: \"Psychotherapy, 30 minutes\" },\n { code: \"90834\", description: \"Psychotherapy, 45 minutes\" },\n { code: \"90837\", description: \"Psychotherapy, 60 minutes\" },\n { code: \"90846\", description: \"Family psychotherapy without patient\" },\n { code: \"90847\", description: \"Family psychotherapy with patient\" },\n { code: \"90853\", description: \"Group psychotherapy\" },\n { code: \"90785\", description: \"Interactive complexity\" },\n { code: \"90833\", description: \"Psychotherapy add-on, 30 minutes\" },\n { code: \"90836\", description: \"Psychotherapy add-on, 45 minutes\" },\n { code: \"90838\", description: \"Psychotherapy add-on, 60 minutes\" },\n { code: \"99202\", description: \"New patient office visit, level 2\" },\n { code: \"99203\", description: \"New patient office visit, level 3\" },\n { code: \"99204\", description: \"New patient office visit, level 4\" },\n { code: \"99205\", description: \"New patient office visit, level 5\", allowedAmount: 349.48 },\n { code: \"99211\", description: \"Established patient office visit, level 1\" },\n { code: \"99212\", description: \"Established patient office visit, level 2\" },\n { code: \"99213\", description: \"Established patient office visit, level 3\" },\n { code: \"99214\", description: \"Established patient office visit, level 4\" },\n { code: \"99215\", description: \"Established patient office visit, level 5\" },\n { code: \"96130\", description: \"Psychological testing evaluation, first hour\" },\n { code: \"96131\", description: \"Psychological testing evaluation, each additional hour\", allowedAmount: 131.96 },\n { code: \"96136\", description: \"Psychological or neuropsychological testing, first 30 minutes\" },\n { code: \"96137\", description: \"Psychological or neuropsychological testing, each additional 30 minutes\" },\n { code: \"97161\", description: \"Physical therapy evaluation, low complexity\" },\n { code: \"97162\", description: \"Physical therapy evaluation, moderate complexity\" },\n { code: \"97163\", description: \"Physical therapy evaluation, high complexity\" },\n { code: \"97110\", description: \"Therapeutic exercises\" },\n { code: \"97112\", description: \"Neuromuscular reeducation\" },\n { code: \"97140\", description: \"Manual therapy techniques\" },\n { code: \"97530\", description: \"Therapeutic activities\" },\n { code: \"98940\", description: \"Chiropractic manipulative treatment, 1-2 regions\" },\n { code: \"98941\", description: \"Chiropractic manipulative treatment, 3-4 regions\" },\n { code: \"98942\", description: \"Chiropractic manipulative treatment, 5 regions\" },\n { code: \"72100\", description: \"Spine radiograph, lumbosacral, 2-3 views\" },\n { code: \"73030\", description: \"Shoulder radiograph, complete\" },\n { code: \"72141\", description: \"MRI cervical spine without contrast\" },\n { code: \"72148\", description: \"MRI lumbar spine without contrast\" },\n { code: \"73721\", description: \"MRI lower-extremity joint without contrast\" },\n { code: \"20610\", description: \"Major joint injection or aspiration\" },\n { code: \"20552\", description: \"Trigger point injection, 1-2 muscles\" },\n { code: \"64483\", description: \"Transforaminal epidural injection, lumbar or sacral\" },\n { code: \"64635\", description: \"Destruction by neurolytic agent, paravertebral facet joint nerve\" },\n { code: \"99070\", description: \"Supplies and materials\" },\n { code: \"L0650\", description: \"Lumbar orthosis\" },\n { code: \"A4556\", description: \"Electrodes\" },\n];\n\nexport const DEFAULT_BILL_SUBMISSION_MODIFIERS: BillSubmissionModifierOption[] = [\n { code: \"92\", description: \"Primary Treating Physician evaluation\" },\n { code: \"93\", description: \"Interpreter required\" },\n { code: \"94\", description: \"Agreed Medical Evaluator\" },\n { code: \"95\", description: \"Qualified Medical Evaluator\" },\n { code: \"96\", description: \"Psychiatric/psychological evaluation\" },\n { code: \"97\", description: \"Toxicology evaluation\" },\n { code: \"98\", description: \"Oncology evaluation\" },\n { code: \"59\", description: \"Distinct procedural service\" },\n { code: \"XE\", description: \"Separate encounter\" },\n { code: \"XS\", description: \"Separate structure\" },\n { code: \"XP\", description: \"Separate practitioner\" },\n { code: \"XU\", description: \"Unusual non-overlapping service\" },\n];\n\n/** Common NUCC provider taxonomies. Consumers can extend this catalog through taxonomyOptions. */\nexport const DEFAULT_BILL_SUBMISSION_TAXONOMIES: BillSubmissionTaxonomyOption[] = [\n { code: \"103G00000X\", description: \"Clinical Neuropsychologist\" },\n { code: \"103T00000X\", description: \"Psychologist\" },\n { code: \"111N00000X\", description: \"Chiropractor\" },\n { code: \"122300000X\", description: \"Dentist\" },\n { code: \"133V00000X\", description: \"Dietitian, Registered\" },\n { code: \"163W00000X\", description: \"Registered Nurse\" },\n { code: \"183500000X\", description: \"Pharmacist\" },\n { code: \"207L00000X\", description: \"Anesthesiology\" },\n { code: \"207P00000X\", description: \"Emergency Medicine\" },\n { code: \"207Q00000X\", description: \"Family Medicine\" },\n { code: \"207R00000X\", description: \"Internal Medicine\" },\n { code: \"207RC0000X\", description: \"Cardiovascular Disease\" },\n { code: \"207RN0300X\", description: \"Nephrology\" },\n { code: \"207RP1001X\", description: \"Pulmonary Disease\" },\n { code: \"207RR0500X\", description: \"Rheumatology\" },\n { code: \"207T00000X\", description: \"Neurological Surgery\" },\n { code: \"207X00000X\", description: \"Orthopaedic Surgery\" },\n { code: \"207XS0117X\", description: \"Orthopaedic Surgery of the Spine\" },\n { code: \"207Y00000X\", description: \"Otolaryngology\" },\n { code: \"208000000X\", description: \"Pediatrics\" },\n { code: \"208100000X\", description: \"Physical Medicine & Rehabilitation\" },\n { code: \"2083X0100X\", description: \"Occupational Medicine\" },\n { code: \"2084N0400X\", description: \"Neurology\" },\n { code: \"2084P0800X\", description: \"Psychiatry\" },\n { code: \"2084P0802X\", description: \"Addiction Psychiatry\" },\n { code: \"2084P0804X\", description: \"Child & Adolescent Psychiatry\" },\n { code: \"2084S0012X\", description: \"Sleep Medicine\" },\n { code: \"2085R0202X\", description: \"Diagnostic Radiology\" },\n { code: \"208600000X\", description: \"Surgery\" },\n { code: \"2086S0105X\", description: \"Surgery of the Hand\" },\n { code: \"208D00000X\", description: \"General Practice\" },\n { code: \"208M00000X\", description: \"Hospitalist\" },\n { code: \"208VP0000X\", description: \"Pain Medicine\" },\n { code: \"213E00000X\", description: \"Podiatrist\" },\n { code: \"225100000X\", description: \"Physical Therapist\" },\n { code: \"225X00000X\", description: \"Occupational Therapist\" },\n { code: \"363A00000X\", description: \"Physician Assistant\" },\n { code: \"363L00000X\", description: \"Nurse Practitioner\" },\n];\n\nexport const BILL_SUBMISSION_DIAGNOSIS_QUICK_PICKS: Array<BillSubmissionDiagnosisOption & { label: string }> = [\n { label: \"Psych\", code: \"Z04.6\", description: \"General psychiatric examination requested by authority\" },\n { label: \"Back\", code: \"M54.50\", description: \"Low back pain, unspecified\" },\n { label: \"Neck\", code: \"M54.2\", description: \"Cervicalgia\" },\n { label: \"Left hand\", code: \"M79.642\", description: \"Pain in left hand\" },\n { label: \"Right hand\", code: \"M79.641\", description: \"Pain in right hand\" },\n { label: \"Left knee\", code: \"M25.562\", description: \"Pain in left knee\" },\n { label: \"Right knee\", code: \"M25.561\", description: \"Pain in right knee\" },\n];\n\nconst COMPOSITE_MULTIPLIERS: Record<string, number> = {\n \"93+94+96\": 2.45, \"93+94+97\": 1.95, \"93+94+98\": 1.95,\n \"92+93\": 1.1, \"93+95\": 1.1, \"93+94\": 1.45, \"93+96\": 2.1,\n \"93+97\": 1.6, \"93+98\": 1.6, \"94+96\": 2.35, \"94+97\": 1.85, \"94+98\": 1.85,\n};\n\nconst MED_LEGAL_MODIFIER_MULTIPLIERS: Record<string, number> = {\n \"92\": 1,\n \"93\": 1.1,\n \"94\": 1.35,\n \"95\": 1,\n \"96\": 2,\n \"97\": 1.5,\n \"98\": 1.5,\n};\n\nfunction medicalLegalMultiplier(modifiers: string[]): number {\n const priced = modifiers.filter((item) => MED_LEGAL_MODIFIER_MULTIPLIERS[item] !== 1);\n if (priced.length === 0) return 1;\n const composite = COMPOSITE_MULTIPLIERS[priced.join(\"+\")];\n if (composite != null) return composite;\n return priced.reduce((total, item) => total * (MED_LEGAL_MODIFIER_MULTIPLIERS[item] ?? 1), 1);\n}\n\nexport function calculateBillSubmissionAllowedAmount(\n line: { code: string; modifiers?: string[]; units?: number },\n procedures: BillSubmissionProcedureOption[] = DEFAULT_BILL_SUBMISSION_PROCEDURES,\n): number | undefined {\n const procedure = procedures.find((item) => item.code.toUpperCase() === line.code.trim().toUpperCase());\n if (procedure?.allowedAmount == null) return undefined;\n const code = procedure.code.toUpperCase();\n const units = Math.max(1, line.units ?? 1);\n const normalized = [...new Set((line.modifiers ?? []).map((item) => item.replace(/^-/, \"\").toUpperCase()))].sort();\n const multiplier = [\"ML200\", \"ML201\", \"ML202\", \"ML203\"].includes(code)\n ? medicalLegalMultiplier(normalized)\n : 1;\n return Math.round(procedure.allowedAmount * units * multiplier * 100) / 100;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo, useState } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport type BillingDashboardBill = {\n id: string;\n billNumber?: string | number;\n externalId?: string;\n patientName: string;\n claimNumber?: string;\n payerName?: string;\n state: string;\n submittedAt?: string;\n updatedAt?: string;\n agingDays?: number;\n totalCharge: number;\n totalPaid: number;\n balanceDue: number;\n href?: string;\n workItemLabel?: string;\n};\n\nexport type BillAgingBucketId = \"current\" | \"31-60\" | \"61-90\" | \"91+\";\nexport type BillAgingBucket = {\n id: BillAgingBucketId;\n label: string;\n count: number;\n balance: number;\n};\nexport type BillingDashboardSummary = {\n totalBilled: number;\n totalPaid: number;\n outstanding: number;\n openCount: number;\n bills: number;\n aging: BillAgingBucket[];\n};\n\nexport type BillingComponentProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillListProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n onSelectBill?: (bill: BillingDashboardBill) => void;\n emptyState?: ReactNode;\n};\n\nexport type BillAgingSummaryProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n};\n\nexport type BillingDashboardProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n onSelectBill?: (bill: BillingDashboardBill) => void;\n initialSearch?: string;\n initialState?: string;\n hideFilters?: boolean;\n};\n\nexport type BillingReportDimension = \"status\" | \"payer\" | \"aging\";\nexport type BillingReportRow = {\n key: string;\n label: string;\n billCount: number;\n totalBilled: number;\n totalPaid: number;\n balanceDue: number;\n};\nexport type BillingReportProps = BillingComponentProps & {\n bills: BillingDashboardBill[];\n groupBy?: BillingReportDimension;\n heading?: ReactNode;\n description?: ReactNode;\n};\n\nconst css = `\n.mbdash{display:grid;gap:20px;color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbdash *{box-sizing:border-box}.mbdash h2,.mbdash h3,.mbdash p{margin:0}.mbdash-copy{color:var(--mb-muted);margin-top:5px!important}.mbdash-card{min-width:0;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow)}\n.mbdash-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px}.mbdash-head h2{font-size:24px}.mbdash-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-stat{display:grid;gap:7px;padding:20px 22px;border-right:1px solid var(--mb-border)}.mbdash-stat:last-child{border:0}.mbdash-label{color:var(--mb-muted);font-size:12px;font-weight:760;letter-spacing:.06em;text-transform:uppercase}.mbdash-value{font-size:24px;font-weight:780;font-variant-numeric:tabular-nums}.mbdash-aging{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden}.mbdash-aging-item{display:grid;gap:5px;padding:16px 20px;border-right:1px solid var(--mb-border)}.mbdash-aging-item:last-child{border:0}.mbdash-aging-item strong{font-size:18px;font-variant-numeric:tabular-nums}.mbdash-aging-item span:last-child{color:var(--mb-muted);font-size:13px}\n.mbdash-filters{display:grid;grid-template-columns:minmax(240px,1fr) minmax(180px,260px);gap:12px}.mbdash-control{width:100%;min-height:46px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);color:var(--mb-text);font:inherit}.mbdash-control:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbdash-table-wrap{overflow:auto}.mbdash-table{width:100%;border-collapse:collapse}.mbdash-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-align:left;text-transform:uppercase;white-space:nowrap}.mbdash-table td{padding:16px;border-bottom:1px solid var(--mb-border);vertical-align:top}.mbdash-table tr:last-child td{border-bottom:0}.mbdash-table tbody tr[data-clickable=true]{cursor:pointer}.mbdash-table tbody tr[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}.mbdash-primary{display:block;color:var(--mb-text);font-weight:720;text-decoration:none}.mbdash-secondary{display:block;margin-top:4px;color:var(--mb-muted);font-size:13px}.mbdash-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}.mbdash-money{text-align:right!important;font-variant-numeric:tabular-nums;white-space:nowrap}.mbdash-empty{padding:46px 22px;color:var(--mb-muted);text-align:center}.mbdash-mobile-list{display:none}.mbdash-mobile-card{display:grid;gap:14px;padding:18px;border-bottom:1px solid var(--mb-border)}.mbdash-mobile-card:last-child{border:0}.mbdash-mobile-top,.mbdash-mobile-money{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.mbdash-mobile-money>span{display:grid;gap:3px}.mbdash-mobile-money small{color:var(--mb-muted)}\n.mbdash-report-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;border-bottom:1px solid var(--mb-border)}.mbdash-report-total td{font-weight:780;background:var(--mb-soft)}\n@media(max-width:900px){.mbdash-summary{grid-template-columns:repeat(2,1fr)}.mbdash-stat:nth-child(2){border-right:0}.mbdash-stat:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}.mbdash-aging{grid-template-columns:repeat(2,1fr)}.mbdash-aging-item:nth-child(2){border-right:0}.mbdash-aging-item:nth-child(-n+2){border-bottom:1px solid var(--mb-border)}}\n@media(max-width:700px){.mbdash{gap:16px}.mbdash-head{align-items:flex-start;flex-direction:column}.mbdash-filters{grid-template-columns:1fr}.mbdash-table-wrap{display:none}.mbdash-mobile-list{display:block}.mbdash-value{font-size:20px}.mbdash-stat,.mbdash-aging-item{padding:16px}.mbdash-report .mbdash-table-wrap{display:block}.mbdash-report .mbdash-table th:nth-child(2),.mbdash-report .mbdash-table td:nth-child(2),.mbdash-report .mbdash-table th:nth-child(3),.mbdash-report .mbdash-table td:nth-child(3){display:none}}\n`;\n\nconst terminalStates = new Set([\"closed\", \"voided\", \"cancelled\"]);\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nexport function billAgingDays(bill: BillingDashboardBill, now = new Date()): number {\n if (Number.isFinite(bill.agingDays)) return Math.max(0, Math.floor(bill.agingDays!));\n if (!bill.submittedAt) return 0;\n const submitted = new Date(bill.submittedAt);\n if (Number.isNaN(submitted.valueOf())) return 0;\n return Math.max(0, Math.floor((now.valueOf() - submitted.valueOf()) / 86_400_000));\n}\n\nexport function billAgingBucket(bill: BillingDashboardBill, now = new Date()): BillAgingBucketId {\n const days = billAgingDays(bill, now);\n if (days <= 30) return \"current\";\n if (days <= 60) return \"31-60\";\n if (days <= 90) return \"61-90\";\n return \"91+\";\n}\n\nexport function summarizeBillingDashboard(bills: BillingDashboardBill[], now = new Date()): BillingDashboardSummary {\n const aging: BillAgingBucket[] = [\n { id: \"current\", label: \"0–30 days\", count: 0, balance: 0 },\n { id: \"31-60\", label: \"31–60 days\", count: 0, balance: 0 },\n { id: \"61-90\", label: \"61–90 days\", count: 0, balance: 0 },\n { id: \"91+\", label: \"91+ days\", count: 0, balance: 0 },\n ];\n let totalBilled = 0; let totalPaid = 0; let outstanding = 0; let openCount = 0;\n for (const bill of bills) {\n totalBilled += Number(bill.totalCharge || 0); totalPaid += Number(bill.totalPaid || 0); outstanding += Number(bill.balanceDue || 0);\n if (!terminalStates.has(bill.state.toLowerCase()) && bill.balanceDue > 0) {\n openCount += 1; const bucket = aging.find((item) => item.id === billAgingBucket(bill, now))!;\n bucket.count += 1; bucket.balance += Number(bill.balanceDue || 0);\n }\n }\n return { totalBilled, totalPaid, outstanding, openCount, bills: bills.length, aging };\n}\n\nfunction Shell({ appearance, className = \"\", style, children }: BillingComponentProps & { children: ReactNode }): ReactElement {\n return <div className={`mbdash ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}><style>{css}</style>{children}</div>;\n}\n\nfunction BillIdentity({ bill }: { bill: BillingDashboardBill }): ReactElement {\n const label = bill.billNumber == null ? bill.externalId ?? \"Bill\" : `Bill #${bill.billNumber}`;\n const content = <><span className=\"mbdash-primary\">{label}</span><span className=\"mbdash-secondary\">{[bill.patientName, bill.claimNumber ? `Claim ${bill.claimNumber}` : null].filter(Boolean).join(\" · \")}</span></>;\n return bill.href ? <a href={bill.href} className=\"mbdash-primary\">{content}</a> : <>{content}</>;\n}\n\nfunction BillListContent({ bills, onSelectBill, emptyState = \"No bills match these filters.\" }: BillListProps): ReactElement {\n if (!bills.length) return <div className=\"mbdash-card mbdash-empty\">{emptyState}</div>;\n return <div className=\"mbdash-card\">\n <div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Bill</th><th>Payer</th><th>Status</th><th>Age</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>\n {bills.map((bill) => <tr key={bill.id} data-clickable={Boolean(onSelectBill)} onClick={() => onSelectBill?.(bill)}><td><BillIdentity bill={bill} /></td><td>{bill.payerName || \"—\"}</td><td><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></td><td>{billAgingDays(bill)} days</td><td className=\"mbdash-money\">{money(bill.totalCharge)}</td><td className=\"mbdash-money\">{money(bill.totalPaid)}</td><td className=\"mbdash-money\"><strong>{money(bill.balanceDue)}</strong></td></tr>)}\n </tbody></table></div>\n <div className=\"mbdash-mobile-list\">{bills.map((bill) => <article className=\"mbdash-mobile-card\" key={bill.id} onClick={() => onSelectBill?.(bill)}><div className=\"mbdash-mobile-top\"><div><BillIdentity bill={bill} /></div><span className=\"mbdash-state\">{stateLabel(bill.state)}</span></div><div className=\"mbdash-mobile-money\"><span><small>Age</small>{billAgingDays(bill)} days</span><span><small>Paid</small>{money(bill.totalPaid)}</span><span><small>Balance</small><strong>{money(bill.balanceDue)}</strong></span></div></article>)}</div>\n </div>;\n}\n\nexport function BillList(props: BillListProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><BillListContent {...props} /></Shell>;\n}\n\nfunction AgingContent({ bills, heading = \"Accounts receivable\" }: Pick<BillAgingSummaryProps, \"bills\" | \"heading\">): ReactElement {\n const summary = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n return <><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">Current balances and aging at a glance.</p></div></div><div className=\"mbdash-card mbdash-summary\"><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Outstanding</span><span className=\"mbdash-value\">{money(summary.outstanding)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Open bills</span><span className=\"mbdash-value\">{summary.openCount}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Collected</span><span className=\"mbdash-value\">{money(summary.totalPaid)}</span></div><div className=\"mbdash-stat\"><span className=\"mbdash-label\">Total billed</span><span className=\"mbdash-value\">{money(summary.totalBilled)}</span></div></div><div className=\"mbdash-card mbdash-aging\">{summary.aging.map((bucket) => <div className=\"mbdash-aging-item\" key={bucket.id}><span className=\"mbdash-label\">{bucket.label}</span><strong>{money(bucket.balance)}</strong><span>{bucket.count} bill{bucket.count === 1 ? \"\" : \"s\"}</span></div>)}</div></>;\n}\n\nexport function BillAgingSummary(props: BillAgingSummaryProps): ReactElement {\n const shellProps = {\n ...(props.appearance === undefined ? {} : { appearance: props.appearance }),\n ...(props.className === undefined ? {} : { className: props.className }),\n ...(props.style === undefined ? {} : { style: props.style }),\n };\n return <Shell {...shellProps}><AgingContent bills={props.bills} {...(props.heading === undefined ? {} : { heading: props.heading })} /></Shell>;\n}\n\nexport function BillingDashboard({ bills, heading = \"Billing\", description = \"Track submitted bills, payments, and outstanding balances.\", onSelectBill, initialSearch = \"\", initialState = \"all\", hideFilters = false, appearance, className, style }: BillingDashboardProps): ReactElement {\n const [search, setSearch] = useState(initialSearch); const [state, setState] = useState(initialState);\n const states = useMemo(() => [...new Set(bills.map((bill) => bill.state))].sort((a, b) => a.localeCompare(b)), [bills]);\n const filtered = useMemo(() => { const query = search.trim().toLowerCase(); return bills.filter((bill) => (state === \"all\" || bill.state === state) && (!query || [bill.billNumber, bill.externalId, bill.patientName, bill.claimNumber, bill.payerName, bill.workItemLabel].some((value) => String(value ?? \"\").toLowerCase().includes(query)))); }, [bills, search, state]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n ...(className === undefined ? {} : { className }),\n ...(style === undefined ? {} : { style }),\n };\n const listProps = { bills: filtered, ...(onSelectBill === undefined ? {} : { onSelectBill }) };\n return <Shell {...shellProps}><div className=\"mbdash-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div></div><AgingContent bills={filtered} heading=\"Receivables\" />{hideFilters ? null : <div className=\"mbdash-filters\"><input className=\"mbdash-control\" type=\"search\" value={search} onChange={(event) => setSearch(event.target.value)} placeholder=\"Search patient, claim, payer, or bill…\" aria-label=\"Search bills\" /><select className=\"mbdash-control\" value={state} onChange={(event) => setState(event.target.value)} aria-label=\"Filter bills by status\"><option value=\"all\">All statuses</option>{states.map((item) => <option value={item} key={item}>{stateLabel(item)}</option>)}</select></div>}<BillListContent {...listProps} /></Shell>;\n}\n\nexport function buildBillingReportRows(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): BillingReportRow[] {\n const rows = new Map<string, BillingReportRow>();\n for (const bill of bills) {\n const key = groupBy === \"payer\" ? bill.payerName || \"Unassigned payer\" : groupBy === \"aging\" ? billAgingBucket(bill) : bill.state;\n const label = groupBy === \"status\" ? stateLabel(key) : groupBy === \"aging\" ? ({ current: \"0–30 days\", \"31-60\": \"31–60 days\", \"61-90\": \"61–90 days\", \"91+\": \"91+ days\" } as Record<string, string>)[key] ?? key : key;\n const row = rows.get(key) ?? { key, label, billCount: 0, totalBilled: 0, totalPaid: 0, balanceDue: 0 };\n row.billCount += 1; row.totalBilled += Number(bill.totalCharge || 0); row.totalPaid += Number(bill.totalPaid || 0); row.balanceDue += Number(bill.balanceDue || 0); rows.set(key, row);\n }\n return [...rows.values()].sort((a, b) => a.label.localeCompare(b.label, undefined, { numeric: true }));\n}\n\nexport function buildBillingReportCsv(bills: BillingDashboardBill[], groupBy: BillingReportDimension = \"status\"): string {\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n return [[\"Group\", \"Bills\", \"Total billed\", \"Total paid\", \"Balance due\"].map(escape).join(\",\"), ...buildBillingReportRows(bills, groupBy).map((row) => [row.label, row.billCount, row.totalBilled.toFixed(2), row.totalPaid.toFixed(2), row.balanceDue.toFixed(2)].map(escape).join(\",\"))].join(\"\\n\");\n}\n\nexport function BillingReport({ bills, groupBy = \"status\", heading = \"Billing report\", description = \"Billed, paid, and outstanding totals.\", appearance, className, style }: BillingReportProps): ReactElement {\n const rows = useMemo(() => buildBillingReportRows(bills, groupBy), [bills, groupBy]); const total = useMemo(() => summarizeBillingDashboard(bills), [bills]);\n const shellProps = {\n ...(appearance === undefined ? {} : { appearance }),\n className: `mbdash-report ${className ?? \"\"}`.trim(),\n ...(style === undefined ? {} : { style }),\n };\n return <Shell {...shellProps}><div className=\"mbdash-card\"><div className=\"mbdash-report-head\"><div><h2>{heading}</h2><p className=\"mbdash-copy\">{description}</p></div><span className=\"mbdash-state\">By {groupBy}</span></div><div className=\"mbdash-table-wrap\"><table className=\"mbdash-table\"><thead><tr><th>Group</th><th>Bills</th><th className=\"mbdash-money\">Billed</th><th className=\"mbdash-money\">Paid</th><th className=\"mbdash-money\">Balance</th></tr></thead><tbody>{rows.map((row) => <tr key={row.key}><td><strong>{row.label}</strong></td><td>{row.billCount}</td><td className=\"mbdash-money\">{money(row.totalBilled)}</td><td className=\"mbdash-money\">{money(row.totalPaid)}</td><td className=\"mbdash-money\">{money(row.balanceDue)}</td></tr>)}<tr className=\"mbdash-report-total\"><td>Total</td><td>{total.bills}</td><td className=\"mbdash-money\">{money(total.totalBilled)}</td><td className=\"mbdash-money\">{money(total.totalPaid)}</td><td className=\"mbdash-money\">{money(total.outstanding)}</td></tr></tbody></table></div></div></Shell>;\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useMemo } from \"react\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\nimport { billAgingBucket, type BillAgingBucketId, type BillingDashboardBill } from \"./billing-dashboard\";\n\nexport type BillStatusAgingCell = {\n state: string;\n bucket: BillAgingBucketId | \"total\";\n count: number;\n balance: number;\n bills: BillingDashboardBill[];\n};\n\nexport type BillStatusAgingRow = {\n state: string;\n label: string;\n cells: BillStatusAgingCell[];\n total: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixData = {\n rows: BillStatusAgingRow[];\n columnTotals: BillStatusAgingCell[];\n grandTotal: BillStatusAgingCell;\n};\n\nexport type BillStatusAgingMatrixProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n bills: BillingDashboardBill[];\n heading?: ReactNode;\n description?: ReactNode;\n /** Lifecycle-first row order; unknown states append alphabetically. */\n stateOrder?: string[];\n /** Show outstanding balance under each count. Default true. */\n showBalances?: boolean;\n onSelectCell?: (cell: BillStatusAgingCell) => void;\n};\n\nexport const BILL_STATUS_AGING_BUCKETS: { id: BillAgingBucketId; label: string }[] = [\n { id: \"current\", label: \"0–30 days\" },\n { id: \"31-60\", label: \"31–60 days\" },\n { id: \"61-90\", label: \"61–90 days\" },\n { id: \"91+\", label: \"91+ days\" },\n];\n\nconst DEFAULT_STATE_ORDER = [\n \"draft\",\n \"incomplete\",\n \"created\",\n \"sent\",\n \"submitted\",\n \"accepted\",\n \"processed\",\n \"paid\",\n \"underpaid\",\n \"denied\",\n \"rejected\",\n \"appealing\",\n \"second_review\",\n \"ibr\",\n \"lien\",\n \"closed\",\n];\n\nconst money = (value: number) => Number(value || 0).toLocaleString(undefined, { style: \"currency\", currency: \"USD\" });\nconst stateLabel = (state: string) => state.replaceAll(\"_\", \" \").replace(/\\b\\w/g, (letter) => letter.toUpperCase());\n\nconst emptyCell = (state: string, bucket: BillAgingBucketId | \"total\"): BillStatusAgingCell => ({ state, bucket, count: 0, balance: 0, bills: [] });\n\nexport function buildBillStatusAgingMatrix(\n bills: BillingDashboardBill[],\n stateOrder: string[] = DEFAULT_STATE_ORDER,\n now = new Date(),\n): BillStatusAgingMatrixData {\n const orderIndex = new Map(stateOrder.map((state, index) => [state.toLowerCase(), index]));\n const states = [...new Set(bills.map((bill) => bill.state))].sort((a, b) => {\n const left = orderIndex.get(a.toLowerCase()) ?? stateOrder.length;\n const right = orderIndex.get(b.toLowerCase()) ?? stateOrder.length;\n return left - right || a.localeCompare(b);\n });\n const columnTotals = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(\"all\", bucket.id));\n const grandTotal = emptyCell(\"all\", \"total\");\n const rows = states.map((state) => {\n const cells = BILL_STATUS_AGING_BUCKETS.map((bucket) => emptyCell(state, bucket.id));\n const total = emptyCell(state, \"total\");\n return { state, label: stateLabel(state), cells, total };\n });\n const rowByState = new Map(rows.map((row) => [row.state, row]));\n for (const bill of bills) {\n const row = rowByState.get(bill.state)!;\n const bucketIndex = BILL_STATUS_AGING_BUCKETS.findIndex((bucket) => bucket.id === billAgingBucket(bill, now));\n const balance = Number(bill.balanceDue || 0);\n for (const cell of [row.cells[bucketIndex]!, row.total, columnTotals[bucketIndex]!, grandTotal]) {\n cell.count += 1;\n cell.balance += balance;\n cell.bills.push(bill);\n }\n }\n return { rows, columnTotals, grandTotal };\n}\n\nexport function buildBillStatusAgingCsv(bills: BillingDashboardBill[], stateOrder?: string[]): string {\n const matrix = buildBillStatusAgingMatrix(bills, stateOrder);\n const escape = (value: string | number) => `\"${String(value).replaceAll('\"', '\"\"')}\"`;\n const header = [\"Status\", ...BILL_STATUS_AGING_BUCKETS.map((bucket) => bucket.label), \"Total\"];\n const lines = matrix.rows.map((row) => [row.label, ...row.cells.map((cell) => cell.count), row.total.count]);\n lines.push([\"Total\", ...matrix.columnTotals.map((cell) => cell.count), matrix.grandTotal.count]);\n return [header, ...lines].map((line) => line.map(escape).join(\",\")).join(\"\\n\");\n}\n\nconst css = `\n.mbmx{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbmx *{box-sizing:border-box}.mbmx h2,.mbmx p{margin:0}\n.mbmx-head{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin-bottom:16px}.mbmx-head h2{font-size:24px}.mbmx-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbmx-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:auto}\n.mbmx-table{width:100%;border-collapse:collapse;min-width:640px}\n.mbmx-table th{padding:13px 16px;border-bottom:1px solid var(--mb-border);color:var(--mb-muted);font-size:12px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap;text-align:right}\n.mbmx-table th:first-child{text-align:left}\n.mbmx-table td{padding:0;border-bottom:1px solid var(--mb-border);border-left:1px solid color-mix(in srgb,var(--mb-border) 55%,transparent);text-align:right;vertical-align:middle}\n.mbmx-table td:first-child{border-left:0;padding:14px 16px;text-align:left;white-space:nowrap}\n.mbmx-table tr:last-child td{border-bottom:0}\n.mbmx-state{display:inline-flex;padding:4px 9px;border-radius:999px;background:color-mix(in srgb,var(--mb-accent) 10%,var(--mb-surface));color:var(--mb-text);font-size:12px;font-weight:720}\n.mbmx-cell{display:block;width:100%;min-height:56px;padding:9px 16px;border:0;background:none;color:var(--mb-text);font:inherit;text-align:right}\n.mbmx-cell[data-clickable=true]{cursor:pointer}.mbmx-cell[data-clickable=true]:hover{background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbmx-count{display:block;font-size:17px;font-weight:760;font-variant-numeric:tabular-nums}\n.mbmx-balance{display:block;margin-top:2px;color:var(--mb-muted);font-size:12px;font-variant-numeric:tabular-nums;white-space:nowrap}\n.mbmx-zero{color:var(--mb-muted)}\n.mbmx-total td,.mbmx-table td.mbmx-rowtotal{background:var(--mb-soft);font-weight:760}\n`;\n\nexport function BillStatusAgingMatrix({\n bills,\n heading = \"Bills by status and age\",\n description = \"Every bill grouped by lifecycle status, then by days outstanding.\",\n stateOrder,\n showBalances = true,\n onSelectCell,\n appearance,\n className = \"\",\n style,\n}: BillStatusAgingMatrixProps): ReactElement {\n const matrix = useMemo(() => buildBillStatusAgingMatrix(bills, stateOrder), [bills, stateOrder]);\n const clickable = Boolean(onSelectCell);\n const cell = (data: BillStatusAgingCell, key: string, isTotal = false): ReactElement => (\n <td key={key} className={isTotal ? \"mbmx-rowtotal\" : undefined}>\n <button\n type=\"button\"\n className=\"mbmx-cell\"\n data-clickable={clickable && data.count > 0}\n onClick={() => data.count > 0 && onSelectCell?.(data)}\n disabled={!clickable || data.count === 0}\n aria-label={`${stateLabel(data.state)} · ${data.bucket === \"total\" ? \"all ages\" : data.bucket}: ${data.count} bills`}\n >\n <span className={`mbmx-count ${data.count === 0 ? \"mbmx-zero\" : \"\"}`.trim()}>{data.count === 0 ? \"—\" : data.count}</span>\n {showBalances && data.count > 0 ? <span className=\"mbmx-balance\">{money(data.balance)}</span> : null}\n </button>\n </td>\n );\n return (\n <div className={`mbmx ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbmx-head\"><div><h2>{heading}</h2><p className=\"mbmx-copy\">{description}</p></div></div>\n <div className=\"mbmx-card\">\n <table className=\"mbmx-table\">\n <thead><tr><th>Status</th>{BILL_STATUS_AGING_BUCKETS.map((bucket) => <th key={bucket.id}>{bucket.label}</th>)}<th>Total</th></tr></thead>\n <tbody>\n {matrix.rows.map((row) => (\n <tr key={row.state}>\n <td><span className=\"mbmx-state\">{row.label}</span></td>\n {row.cells.map((data) => cell(data, `${row.state}-${data.bucket}`))}\n {cell(row.total, `${row.state}-total`, true)}\n </tr>\n ))}\n <tr className=\"mbmx-total\">\n <td>Total</td>\n {matrix.columnTotals.map((data) => cell(data, `all-${data.bucket}`))}\n {cell(matrix.grandTotal, \"all-total\", true)}\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","\"use client\";\n\n// \"Bill Tasks\" dashboard: one rounded, tone-colored card per\n// task section (Payment Due, No Response, Denied, …), rows bucketed by age in\n// days with colored bucket header pills, per-cell click-through counts, and a\n// closing grand-total card. Purely props-driven: hosts aggregate their own\n// work items with buildBillTasksDashboard (re-exported from @mindbill/browser)\n// so MindBill itself can dogfood the surface without the partner API.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport {\n BILL_TASKS_AGING_BUCKETS,\n type BillTasksAgingBucket,\n type BillTasksDashboardData,\n type BillTasksDashboardRow,\n type BillTasksDashboardSection,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\nexport {\n BILL_TASKS_AGING_BUCKETS,\n billTasksAgingBucketIndex,\n buildBillTasksDashboard,\n} from \"@mindbill/browser\";\nexport type {\n BillTasksAgingBucket,\n BillTasksDashboardData,\n BillTasksDashboardItem,\n BillTasksDashboardRow,\n BillTasksDashboardSection,\n BillTasksDashboardSectionInput,\n BillTasksDashboardTone,\n} from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillTasksDashboardCell = {\n sectionId: string;\n rowId: string;\n /** Null for a row's \"Task Total\" cell (all buckets). */\n bucketId: string | null;\n refs: string[];\n count: number;\n};\n\nexport type BillTasksDashboardProps = SurfaceProps & {\n data: BillTasksDashboardData;\n /** Must match the buckets passed to buildBillTasksDashboard. */\n buckets?: BillTasksAgingBucket[];\n heading?: ReactNode;\n grandTotalLabel?: string;\n emptyLabel?: string;\n onSelectCell?: (cell: BillTasksDashboardCell) => void;\n /** Rendered above the sections — hosts pass their own filters. */\n toolbar?: ReactNode;\n footnote?: ReactNode;\n};\n\nconst TONES: Record<BillTasksDashboardSection[\"tone\"], string> = {\n violet: \"#7c53c3\",\n red: \"#cf4437\",\n blue: \"#2f7fd1\",\n green: \"#2c9a5b\",\n amber: \"#d9931f\",\n neutral: \"#8195a1\",\n};\n\nconst BUCKET_PILL_BASES = [\"#2c9a5b\", \"#1f9aa8\", \"#dcbb28\", \"#e08a2e\", \"#d75d8a\"];\n\nconst css = `\n.mbtk{color:var(--mb-text);font-family:var(--mb-font);font-size:14px}.mbtk *{box-sizing:border-box}.mbtk h2,.mbtk p{margin:0}\n.mbtk-heading{margin-bottom:14px}.mbtk-heading h2{font-size:24px}\n.mbtk-toolbar{margin-bottom:14px}\n.mbtk-section{margin-bottom:16px;border:1.5px solid var(--mbtk-tone,var(--mb-border));border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);overflow:hidden}\n.mbtk-section.is-grand{border-color:var(--mb-border)}\n.mbtk-grid{display:grid;grid-template-columns:var(--mbtk-cols);gap:0 10px;align-items:center;padding:0 16px}\n.mbtk-head{padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mbtk-tone,var(--mb-border)) 22%,var(--mb-border))}\n.mbtk-title{display:flex;align-items:center;gap:9px;min-width:0}\n.mbtk-dot{flex:0 0 auto;width:11px;height:11px;border-radius:50%;background:var(--mbtk-tone,var(--mb-muted))}\n.mbtk-title-text{min-width:0}\n.mbtk-title-text strong{display:block;font-size:15.5px;line-height:1.3}\n.mbtk-basis{display:block;color:var(--mb-muted);font-size:12px;line-height:1.35}\n.mbtk-pill{justify-self:stretch;padding:5px 6px;border-radius:999px;background:color-mix(in srgb,var(--mbtk-pill) 20%,var(--mb-surface));color:color-mix(in srgb,var(--mbtk-pill) 62%,var(--mb-text));font-size:11px;font-weight:750;line-height:1.25;text-align:center;white-space:nowrap}\n.mbtk-colhead{justify-self:stretch;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;text-align:center;white-space:nowrap}\n.mbtk-row{border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);min-height:44px}\n.mbtk-row:first-of-type{border-top:0}\n.mbtk-rowlabel{color:var(--mb-muted);font-size:13px;line-height:1.35;padding:9px 0;overflow-wrap:anywhere}\n.mbtk-count{text-align:center;font-variant-numeric:tabular-nums}\n.mbtk-zero{color:var(--mb-muted)}\n.mbtk-link{border:0;background:none;padding:6px 8px;color:var(--mb-accent);font:inherit;font-weight:750;font-variant-numeric:tabular-nums;cursor:pointer;border-radius:6px}\n.mbtk-link:hover{text-decoration:underline;background:color-mix(in srgb,var(--mb-accent) 8%,transparent)}\n.mbtk-total{text-align:center}\n.mbtk-totals{background:var(--mb-soft);border-top:1px solid var(--mb-border);font-weight:760}\n.mbtk-totals .mbtk-rowlabel{color:var(--mb-text);font-weight:760}\n.mbtk-empty{padding:22px 16px;color:var(--mb-muted);text-align:center}\n.mbtk-grand .mbtk-rowlabel{color:var(--mb-text);font-size:14px;font-weight:800}\n.mbtk-grand{min-height:52px}\n.mbtk-footnote{margin-top:12px;color:var(--mb-muted);font-size:12.5px}\n@media(max-width:760px){.mbtk-pill,.mbtk-colhead,.mbtk-count{display:none}.mbtk-grid{grid-template-columns:minmax(0,1fr) auto}}\n`;\n\nfunction cellButton(\n key: string,\n count: number,\n className: string,\n label: string,\n onSelect: (() => void) | null,\n): ReactElement {\n if (count > 0 && onSelect) {\n return (\n <span key={key} className={className}>\n <button type=\"button\" className=\"mbtk-link\" aria-label={label} onClick={onSelect}>{count}</button>\n </span>\n );\n }\n return <span key={key} className={`${className}${count === 0 ? \" mbtk-zero\" : \"\"}`}>{count}</span>;\n}\n\nfunction TaskRow({\n sectionId,\n row,\n buckets,\n onSelectCell,\n}: {\n sectionId: string;\n row: BillTasksDashboardRow;\n buckets: BillTasksAgingBucket[];\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n}): ReactElement {\n const allRefs = row.refs.flat();\n return (\n <div className=\"mbtk-grid mbtk-row\">\n <span className=\"mbtk-rowlabel\">{row.label}</span>\n {buckets.map((bucket, index) => {\n const count = row.counts[index] ?? 0;\n return cellButton(\n bucket.id,\n count,\n \"mbtk-count\",\n `${row.label} · ${bucket.label}: ${count} tasks`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: bucket.id, refs: row.refs[index] ?? [], count })\n : null,\n );\n })}\n {cellButton(\n \"task-total\",\n row.total,\n \"mbtk-total\",\n `${row.label} · all ages: ${row.total} tasks`,\n onSelectCell\n ? () => onSelectCell({ sectionId, rowId: row.id, bucketId: null, refs: allRefs, count: row.total })\n : null,\n )}\n </div>\n );\n}\n\nfunction SectionCard({\n section,\n buckets,\n emptyLabel,\n onSelectCell,\n}: {\n section: BillTasksDashboardSection;\n buckets: BillTasksAgingBucket[];\n emptyLabel: ReactNode;\n onSelectCell?: ((cell: BillTasksDashboardCell) => void) | undefined;\n}): ReactElement {\n return (\n <section\n className=\"mbtk-section\"\n style={{ \"--mbtk-tone\": TONES[section.tone] } as CSSProperties}\n aria-label={section.label}\n >\n <div className=\"mbtk-grid mbtk-head\">\n <span className=\"mbtk-title\">\n <i className=\"mbtk-dot\" aria-hidden=\"true\" />\n <span className=\"mbtk-title-text\">\n <strong>{section.label}</strong>\n <span className=\"mbtk-basis\">by {section.agingBasisLabel}</span>\n </span>\n </span>\n {buckets.map((bucket, index) => (\n <span\n key={bucket.id}\n className=\"mbtk-pill\"\n style={{ \"--mbtk-pill\": BUCKET_PILL_BASES[index % BUCKET_PILL_BASES.length] } as CSSProperties}\n >\n {bucket.label}\n </span>\n ))}\n <span className=\"mbtk-colhead\">Task Total</span>\n </div>\n {section.empty ? (\n <p className=\"mbtk-empty\">{emptyLabel}</p>\n ) : (\n <>\n {section.rows.map((row) => (\n <TaskRow key={row.id} sectionId={section.id} row={row} buckets={buckets} onSelectCell={onSelectCell} />\n ))}\n <div className=\"mbtk-grid mbtk-row mbtk-totals\">\n <span className=\"mbtk-rowlabel\">Total</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{section.totals[index] ?? 0}</span>\n ))}\n <span className=\"mbtk-total\">{section.total}</span>\n </div>\n </>\n )}\n </section>\n );\n}\n\nexport function BillTasksDashboard({\n data,\n buckets = BILL_TASKS_AGING_BUCKETS,\n heading,\n grandTotalLabel = \"Bill Tasks Total\",\n emptyLabel = \"No Tasks\",\n onSelectCell,\n toolbar,\n footnote,\n appearance,\n className = \"\",\n style,\n}: BillTasksDashboardProps): ReactElement {\n const columns = `minmax(150px,1.6fr) repeat(${buckets.length},minmax(84px,1fr)) minmax(84px,1fr)`;\n return (\n <div\n className={`mbtk ${className}`.trim()}\n style={{ ...mindBillAppearanceStyle(appearance), \"--mbtk-cols\": columns, ...style } as CSSProperties}\n >\n <style>{css}</style>\n {heading ? <div className=\"mbtk-heading\">{typeof heading === \"string\" ? <h2>{heading}</h2> : heading}</div> : null}\n {toolbar ? <div className=\"mbtk-toolbar\">{toolbar}</div> : null}\n {data.sections.map((section) => (\n <SectionCard\n key={section.id}\n section={section}\n buckets={buckets}\n emptyLabel={emptyLabel}\n onSelectCell={onSelectCell}\n />\n ))}\n <section className=\"mbtk-section is-grand\" aria-label={grandTotalLabel}>\n <div className=\"mbtk-grid mbtk-row mbtk-grand mbtk-totals\">\n <span className=\"mbtk-rowlabel\">{grandTotalLabel}</span>\n {buckets.map((bucket, index) => (\n <span key={bucket.id} className=\"mbtk-count\">{data.grandTotals[index] ?? 0}</span>\n ))}\n <span className=\"mbtk-total\">{data.grandTotal}</span>\n </div>\n </section>\n {footnote ? <p className=\"mbtk-footnote\">{footnote}</p> : null}\n </div>\n );\n}\n","\"use client\";\n\n// Submissions ribbon: a horizontal scrollable row of chips —\n// one per bill submission (Original Bill, Second Review, Duplicate Bill, …) —\n// each with an optional deadline badge and up to three small label/value meta\n// pairs (delivery route, sent date, acknowledgement). Purely presentational;\n// billSubmissionsRibbonFromHistory maps MindBill's presented history rows\n// (kind === \"submission\") into ribbon items.\n\nimport type { CSSProperties, ReactElement } from \"react\";\nimport type { BillHistoryEntry } from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type BillSubmissionRibbonItem = {\n id: string;\n /** \"Original Bill\" | \"Second Review\" | \"Duplicate Bill\" | … */\n label: string;\n /** Small rounded badge, e.g. \"Denial in 3 working days\". */\n badge?: string;\n /** Up to three label/value pairs rendered under the label. */\n meta?: Array<{ label: string; value: string }>;\n active?: boolean;\n href?: string;\n};\n\nexport type BillSubmissionsRibbonProps = SurfaceProps & {\n items: BillSubmissionRibbonItem[];\n onSelect?: (item: BillSubmissionRibbonItem) => void;\n};\n\n/** Maps a presented-history submission summary to its delivery route word. */\nexport function billSubmissionsRibbonDeliveryLabel(summary: string): string {\n if (/electronically sent/i.test(summary)) return \"e-Bill (837)\";\n if (/faxed/i.test(summary)) return \"Fax\";\n if (/emailed/i.test(summary)) return \"Email\";\n if (/mailed/i.test(summary)) return \"Mail\";\n return \"Sent\";\n}\n\nfunction ribbonDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/** Builds ribbon items from MindBill's presented history (submission rows only). */\nexport function billSubmissionsRibbonFromHistory(history: BillHistoryEntry[]): BillSubmissionRibbonItem[] {\n return history\n .filter((entry) => entry.kind === \"submission\")\n .map((entry) => ({\n id: entry.id,\n label: entry.action,\n meta: [\n { label: \"Delivery\", value: billSubmissionsRibbonDeliveryLabel(entry.summary) },\n { label: \"Sent\", value: ribbonDate(entry.date) },\n ],\n }));\n}\n\nconst css = `\n.mbsr{display:flex;gap:10px;overflow-x:auto;padding-bottom:4px;color:var(--mb-text);font-family:var(--mb-font);font-size:13px}\n.mbsr *{box-sizing:border-box}\n.mbsr-chip{flex:0 0 auto;display:grid;gap:7px;min-width:180px;max-width:280px;padding:11px 13px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:inherit;font:inherit;text-align:left;text-decoration:none;cursor:pointer}\n.mbsr-chip:hover{border-color:var(--mb-accent)}\n.mbsr-chip[data-active=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface));box-shadow:0 0 0 1px var(--mb-accent) inset}\n.mbsr-top{display:flex;align-items:center;gap:8px;min-width:0}\n.mbsr-label{font-size:13.5px;font-weight:760;line-height:1.3;overflow-wrap:anywhere}\n.mbsr-badge{flex:0 0 auto;padding:2px 8px;border:1px solid color-mix(in srgb,var(--mb-warning) 55%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-warning) 12%,var(--mb-surface));font-size:11px;font-weight:700;white-space:nowrap}\n.mbsr-meta{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,auto);gap:2px 14px;justify-content:start}\n.mbsr-meta>span{display:grid;gap:1px;min-width:0}\n.mbsr-meta i{color:var(--mb-muted);font-size:10.5px;font-style:normal;font-weight:800;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}\n.mbsr-meta b{font-size:12.5px;font-weight:700;white-space:nowrap}\n`;\n\nexport function BillSubmissionsRibbon({\n items,\n onSelect,\n appearance,\n className = \"\",\n style,\n}: BillSubmissionsRibbonProps): ReactElement {\n return (\n <div\n className={`mbsr ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"list\"\n aria-label=\"Bill submissions\"\n >\n <style>{css}</style>\n {items.map((item) => {\n const content = (\n <>\n <span className=\"mbsr-top\">\n <span className=\"mbsr-label\">{item.label}</span>\n {item.badge ? <span className=\"mbsr-badge\">{item.badge}</span> : null}\n </span>\n {item.meta?.length ? (\n <span className=\"mbsr-meta\">\n {item.meta.slice(0, 3).map((pair) => (\n <span key={pair.label}><i>{pair.label}</i><b>{pair.value}</b></span>\n ))}\n </span>\n ) : null}\n </>\n );\n return item.href ? (\n <a\n key={item.id}\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n href={item.href}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </a>\n ) : (\n <button\n key={item.id}\n type=\"button\"\n className=\"mbsr-chip\"\n data-active={Boolean(item.active)}\n role=\"listitem\"\n onClick={() => onSelect?.(item)}\n >\n {content}\n </button>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\n// \"Report Bill Status\" dialog: call the Claims Administrator /\n// Bill Review vendor (contacts in section 1), verify the submission receipt\n// the host renders in section 2, then record the reported payment status plus\n// the call details in section 3. Presentational: the host posts the resulting\n// ReportBillStatusInput through its own lifecycle action call.\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport {\n REPORT_BILL_STATUS_OPTIONS,\n type ReportBillStatusId,\n type ReportBillStatusInput,\n} from \"@mindbill/browser\";\n\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// The five status options and their input shape are framework-neutral and live\n// in @mindbill/browser; re-exported here so existing imports keep working.\nexport { REPORT_BILL_STATUS_OPTIONS } from \"@mindbill/browser\";\nexport type { ReportBillStatusId, ReportBillStatusInput } from \"@mindbill/browser\";\n\ntype SurfaceProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n};\n\nexport type ReportBillStatusDialogProps = SurfaceProps & {\n title?: ReactNode;\n claimsAdmin?: {\n name: string;\n hoursOfOperation?: string;\n phones?: Array<{ label: string; value: string }>;\n };\n billReview?: { name: string; phone?: string };\n /** Host renders its submission receipt, e.g. a BillHistoryTable. */\n receipt?: ReactNode;\n submitting?: boolean;\n error?: string | null;\n onCancel: () => void;\n onSave: (input: ReportBillStatusInput) => void;\n};\n\nconst css = `\n.mbbs-overlay{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(15,30,40,.45)}\n.mbbs{display:grid;gap:18px;width:min(860px,100%);max-height:min(90vh,960px);overflow:auto;overscroll-behavior:contain;padding:24px;border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);color:var(--mb-text);font-family:var(--mb-font);font-size:14px;box-shadow:0 24px 60px rgba(17,38,49,.28)}\n.mbbs *{box-sizing:border-box}\n.mbbs-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}\n.mbbs-title{margin:0;font-size:20px;font-weight:760}\n.mbbs-close{border:0;background:transparent;color:var(--mb-muted);font-size:22px;line-height:1;cursor:pointer}\n.mbbs-section h4{margin:0 0 4px;font-size:15px}\n.mbbs-copy{margin:0 0 10px;color:var(--mb-muted);font-size:13px}\n.mbbs-contacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.mbbs-contact{border:1px solid var(--mb-border);border-left:4px solid var(--mb-accent);border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-accent) 3%,var(--mb-surface));padding:12px 14px}\n.mbbs-contact h5{margin:0 0 6px;color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}\n.mbbs-contact dl{display:grid;gap:4px;margin:0}\n.mbbs-contact dl>div{display:grid;grid-template-columns:130px minmax(0,1fr);gap:10px}\n.mbbs-contact dt{color:var(--mb-muted);font-size:12.5px}\n.mbbs-contact dd{margin:0;font-weight:700;overflow-wrap:anywhere}\n.mbbs-receipt{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:10px}\n.mbbs-report{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:18px}\n.mbbs-options{display:grid;gap:8px;align-content:start}\n.mbbs-option{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);cursor:pointer}\n.mbbs-option[data-selected=true]{border-color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 5%,var(--mb-surface))}\n.mbbs-option input{margin-top:3px;accent-color:var(--mb-accent)}\n.mbbs-option-label{display:block;font-weight:750;line-height:1.35}\n.mbbs-option-copy{display:block;margin-top:2px;color:var(--mb-muted);font-size:12.5px;line-height:1.4}\n.mbbs-fields{display:grid;gap:10px;align-content:start}\n.mbbs-field{display:grid;gap:5px;font-size:13px}\n.mbbs-label{font-weight:650}\n.mbbs-input,.mbbs-textarea{width:100%;padding:9px 11px;border:1px solid var(--mb-border);border-radius:calc(var(--mb-control-radius) - 2px);background:var(--mb-input);color:var(--mb-text);font:inherit;font-size:14px}\n.mbbs-textarea{resize:vertical;min-height:74px}\n.mbbs-input:focus,.mbbs-textarea:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbbs-alert{padding:10px 12px;border-radius:var(--mb-control-radius);background:color-mix(in srgb,var(--mb-danger) 10%,transparent);color:var(--mb-danger);font-size:13px}\n.mbbs-actions{display:flex;justify-content:flex-end;gap:10px}\n.mbbs-cancel{min-height:42px;padding:9px 16px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);color:var(--mb-text);font:inherit;font-weight:680;cursor:pointer}\n.mbbs-save{min-height:42px;min-width:130px;padding:9px 18px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);font:inherit;font-weight:760;cursor:pointer}\n.mbbs-save:disabled,.mbbs-cancel:disabled{opacity:.6;cursor:not-allowed}\n@media(max-width:700px){.mbbs-contacts,.mbbs-report{grid-template-columns:1fr}}\n`;\n\nexport function ReportBillStatusDialog({\n title = \"Report Bill Status\",\n claimsAdmin,\n billReview,\n receipt,\n submitting = false,\n error = null,\n onCancel,\n onSave,\n appearance,\n className = \"\",\n style,\n}: ReportBillStatusDialogProps): ReactElement {\n const [status, setStatus] = useState<ReportBillStatusId | null>(null);\n const [company, setCompany] = useState(\"\");\n const [representativeName, setRepresentativeName] = useState(\"\");\n const [representativeRole, setRepresentativeRole] = useState(\"\");\n const [phone, setPhone] = useState(\"\");\n const [callReference, setCallReference] = useState(\"\");\n const [note, setNote] = useState(\"\");\n\n // Close on Escape (unless a save is in flight — the caller owns that state).\n useEffect(() => {\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && !submitting) onCancel();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [onCancel, submitting]);\n\n const save = () => {\n if (!status) return;\n onSave({\n status,\n ...(company.trim() ? { company: company.trim() } : {}),\n ...(representativeName.trim() ? { representativeName: representativeName.trim() } : {}),\n ...(representativeRole.trim() ? { representativeRole: representativeRole.trim() } : {}),\n ...(phone.trim() ? { phone: phone.trim() } : {}),\n ...(callReference.trim() ? { callReference: callReference.trim() } : {}),\n ...(note.trim() ? { note: note.trim() } : {}),\n });\n };\n\n const field = (\n label: string,\n value: string,\n onChange: (next: string) => void,\n ): ReactElement => (\n <label className=\"mbbs-field\" key={label}>\n <span className=\"mbbs-label\">{label}</span>\n <input className=\"mbbs-input\" value={value} disabled={submitting} onChange={(event) => onChange(event.target.value)} />\n </label>\n );\n\n return (\n <div\n className=\"mbbs-overlay\"\n role=\"presentation\"\n onMouseDown={(event) => { if (event.target === event.currentTarget && !submitting) onCancel(); }}\n >\n <style>{css}</style>\n <div\n className={`mbbs ${className}`.trim()}\n style={mindBillAppearanceStyle(appearance, style)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={typeof title === \"string\" ? title : \"Report Bill Status\"}\n >\n <div className=\"mbbs-head\">\n <h3 className=\"mbbs-title\">{title}</h3>\n <button className=\"mbbs-close\" type=\"button\" aria-label=\"Close\" disabled={submitting} onClick={onCancel}>×</button>\n </div>\n\n {claimsAdmin || billReview ? (\n <div className=\"mbbs-section\">\n <h4>1. Call Claims Administrator or Bill Review</h4>\n <p className=\"mbbs-copy\">Contact the payer to request the payment status of this bill.</p>\n <div className=\"mbbs-contacts\">\n {claimsAdmin ? (\n <div className=\"mbbs-contact\">\n <h5>Claims Admin</h5>\n <dl>\n <div><dt>Name</dt><dd>{claimsAdmin.name}</dd></div>\n {claimsAdmin.hoursOfOperation ? <div><dt>Hours of Operation</dt><dd>{claimsAdmin.hoursOfOperation}</dd></div> : null}\n {(claimsAdmin.phones ?? []).map((entry) => (\n <div key={`${entry.label}-${entry.value}`}><dt>{entry.label}</dt><dd>{entry.value}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {billReview ? (\n <div className=\"mbbs-contact\">\n <h5>Bill Review</h5>\n <dl>\n <div><dt>Name</dt><dd>{billReview.name}</dd></div>\n {billReview.phone ? <div><dt>Phone</dt><dd>{billReview.phone}</dd></div> : null}\n </dl>\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n\n {receipt ? (\n <div className=\"mbbs-section\">\n <h4>2. Review Bill Submission Receipt</h4>\n <p className=\"mbbs-copy\">Reference the submission receipt below when the payer asks how and when the bill was sent.</p>\n <div className=\"mbbs-receipt\">{receipt}</div>\n </div>\n ) : null}\n\n <div className=\"mbbs-section\">\n <h4>3. Report Bill Payment Status</h4>\n <p className=\"mbbs-copy\">Select the status reported by the payer, then record who provided it.</p>\n <div className=\"mbbs-report\">\n <div className=\"mbbs-options\" role=\"radiogroup\" aria-label=\"Reported bill payment status\">\n {REPORT_BILL_STATUS_OPTIONS.map((option) => (\n <label key={option.id} className=\"mbbs-option\" data-selected={status === option.id}>\n <input\n type=\"radio\"\n name=\"mbbs-status\"\n value={option.id}\n checked={status === option.id}\n disabled={submitting}\n onChange={() => setStatus(option.id)}\n />\n <span>\n <span className=\"mbbs-option-label\">{option.label}</span>\n <span className=\"mbbs-option-copy\">{option.description}</span>\n </span>\n </label>\n ))}\n </div>\n <div className=\"mbbs-fields\">\n {field(\"Company\", company, setCompany)}\n {field(\"Name\", representativeName, setRepresentativeName)}\n {field(\"Role\", representativeRole, setRepresentativeRole)}\n {field(\"Phone Number\", phone, setPhone)}\n {field(\"Call Reference Number\", callReference, setCallReference)}\n <label className=\"mbbs-field\">\n <span className=\"mbbs-label\">Message Note</span>\n <textarea className=\"mbbs-textarea\" value={note} disabled={submitting} onChange={(event) => setNote(event.target.value)} />\n </label>\n </div>\n </div>\n </div>\n\n {error ? <div className=\"mbbs-alert\" role=\"alert\">{error}</div> : null}\n\n <div className=\"mbbs-actions\">\n <button className=\"mbbs-cancel\" type=\"button\" disabled={submitting} onClick={onCancel}>Cancel</button>\n <button className=\"mbbs-save\" type=\"button\" disabled={submitting || !status} onClick={save}>\n {submitting ? \"Saving…\" : \"Save\"}\n </button>\n </div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport type { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n createOrganizationClient,\n type BillLifecycleSessionProvider,\n type OrganizationBillingProviderInput,\n type OrganizationClient,\n type OrganizationLocationInput,\n type OrganizationProfileData,\n} from \"@mindbill/browser\";\nimport { mindBillAppearanceStyle, type MindBillReactAppearance } from \"./appearance\";\n\n// Embeddable organization onboarding (INC-1470): capture the practice name,\n// tax ID, group NPI, billing provider, locations, and W-9 ONCE, saved straight\n// to MindBill through the partner browser session — the partner's users never\n// visit the MindBill dashboard. `BillingSettings` is the compact\n// edit-after-setup variant of the same surface.\n\nexport type OrganizationOnboardingProps = {\n appearance?: MindBillReactAppearance;\n className?: string;\n style?: CSSProperties;\n sessionEndpoint?: string;\n getSession?: BillLifecycleSessionProvider;\n apiBaseUrl?: string;\n heading?: ReactNode;\n description?: ReactNode;\n /** \"onboarding\" renders a stepper; \"settings\" stacks every section for editing. */\n variant?: \"onboarding\" | \"settings\";\n onSaved?: (profile: OrganizationProfileData) => void;\n onCompleted?: (profile: OrganizationProfileData) => void;\n onError?: (error: Error) => void;\n};\n\ntype StepId = \"practice\" | \"locations\" | \"w9\" | \"review\";\nconst STEPS: Array<{ id: StepId; label: string }> = [\n { id: \"practice\", label: \"Practice & billing\" },\n { id: \"locations\", label: \"Locations\" },\n { id: \"w9\", label: \"W-9\" },\n { id: \"review\", label: \"Review\" },\n];\n\nconst css = `\n.mbob{color:var(--mb-text);font-family:var(--mb-font);font-size:15px}.mbob *{box-sizing:border-box}.mbob h2,.mbob h3,.mbob p{margin:0}\n.mbob-card{border:1px solid var(--mb-border);border-radius:var(--mb-radius);background:var(--mb-surface);box-shadow:var(--mb-shadow);padding:24px}\n.mbob-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.mbob-head h2{font-size:22px}.mbob-copy{color:var(--mb-muted);margin-top:5px!important}\n.mbob-steps{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}\n.mbob-step{display:inline-flex;align-items:center;gap:7px;border:1px solid var(--mb-border);border-radius:999px;background:var(--mb-surface);padding:7px 13px;color:var(--mb-muted);font:inherit;font-size:13px;font-weight:700;cursor:pointer}\n.mbob-step[data-active=true]{border-color:var(--mb-accent);color:var(--mb-accent);background:color-mix(in srgb,var(--mb-accent) 8%,var(--mb-surface))}\n.mbob-step[data-done=true] i{color:#159447;font-style:normal}\n.mbob-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px 22px}.mbob-span{grid-column:1/-1}\n.mbob-field{display:grid;gap:7px;font-size:13px;font-weight:720}\n.mbob-field input{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-input);padding:10px 12px;color:var(--mb-text);font:inherit;font-weight:450}\n.mbob-field input:focus{outline:3px solid color-mix(in srgb,var(--mb-accent) 22%,transparent);border-color:var(--mb-accent)}\n.mbob-subhead{margin:20px 0 12px!important;padding-top:16px;border-top:1px solid var(--mb-border);font-size:15px}\n.mbob-loc{display:grid;grid-template-columns:1.2fr 1.4fr .9fr .4fr .6fr auto auto;gap:10px;align-items:end;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding:12px 0}\n.mbob-loc:first-of-type{border-top:0}\n.mbob-primary{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--mb-muted);white-space:nowrap;padding-bottom:12px}\n.mbob-remove{border:0;background:transparent;color:var(--mb-muted);font-size:20px;cursor:pointer;padding-bottom:8px}\n.mbob-add,.mbob-secondary{border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);background:var(--mb-surface);padding:10px 14px;color:var(--mb-text);font:inherit;font-weight:700;cursor:pointer}\n.mbob-drop{display:grid;place-content:center;gap:6px;min-height:150px;border:2px dashed color-mix(in srgb,var(--mb-muted) 55%,transparent);border-radius:var(--mb-control-radius);text-align:center;cursor:pointer;position:relative}\n.mbob-drop input{position:absolute;inset:0;opacity:0;cursor:pointer}\n.mbob-drop span{color:var(--mb-muted);font-size:13px}\n.mbob-w9-current{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid #9fd6b4;border-radius:var(--mb-control-radius);background:#f3fcf6;padding:12px 14px;margin-bottom:14px}\n.mbob-w9-current span{color:var(--mb-muted);font-size:13px}\n.mbob-check{display:grid;gap:9px}\n.mbob-check-item{display:flex;align-items:center;gap:10px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius);padding:11px 14px}\n.mbob-check-item[data-complete=true]{border-color:#9fd6b4;background:#f3fcf6}\n.mbob-check-item i{font-style:normal}\n.mbob-actions{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:20px}\n.mbob-save{min-width:170px;border:0;border-radius:var(--mb-control-radius);background:var(--mb-accent);color:var(--mb-accent-contrast);padding:12px 22px;font:inherit;font-weight:780;cursor:pointer}\n.mbob-save:disabled{opacity:.6;cursor:wait}\n.mbob-error{margin-top:14px;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;color:var(--mb-danger)}\n.mbob-status{color:var(--mb-muted)}\n.mbob-done{color:#159447;font-weight:750}\n@media(max-width:820px){.mbob-grid{grid-template-columns:1fr}.mbob-span{grid-column:auto}.mbob-loc{grid-template-columns:1fr 1fr;align-items:center}.mbob-loc>*{grid-column:auto}}\n`;\n\nconst blankLocation = (): OrganizationLocationInput => ({ name: \"\", street: \"\", city: \"\", state: \"\", zip: \"\", isPrimary: false });\n\nasync function fileToBase64(file: File): Promise<string> {\n const buffer = new Uint8Array(await file.arrayBuffer());\n let binary = \"\";\n for (const byte of buffer) binary += String.fromCharCode(byte);\n return btoa(binary);\n}\n\nexport function OrganizationOnboarding({\n appearance,\n className = \"\",\n style,\n sessionEndpoint = \"/api/mindbill/session\",\n getSession,\n apiBaseUrl,\n heading = \"Billing setup\",\n description = \"Practice identity, locations, and the W-9 — saved once, used on every bill.\",\n variant = \"onboarding\",\n onSaved,\n onCompleted,\n onError,\n}: OrganizationOnboardingProps): ReactElement {\n const client: OrganizationClient = useMemo(\n () =>\n createOrganizationClient({\n sessionEndpoint,\n ...(getSession ? { getSession } : {}),\n ...(apiBaseUrl ? { apiBaseUrl } : {}),\n }),\n [sessionEndpoint, getSession, apiBaseUrl],\n );\n\n const [profile, setProfile] = useState<OrganizationProfileData | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n const [step, setStep] = useState<StepId>(\"practice\");\n const [identity, setIdentity] = useState({ name: \"\", legalName: \"\", taxId: \"\", npi: \"\", phone: \"\", email: \"\" });\n const [provider, setProvider] = useState<OrganizationBillingProviderInput>({ name: \"\", taxId: \"\", npi: \"\", billType: \"Professional\", phone: \"\", billingStreet: \"\", billingCity: \"\", billingState: \"\", billingZip: \"\" });\n const [locations, setLocations] = useState<OrganizationLocationInput[]>([blankLocation()]);\n const [w9File, setW9File] = useState<File | null>(null);\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [savedStep, setSavedStep] = useState<Record<string, boolean>>({});\n const completedFired = useRef(false);\n\n const adoptProfile = useCallback((next: OrganizationProfileData) => {\n setProfile(next);\n setIdentity((current) => ({\n name: next.practiceIdentity.name ?? current.name,\n legalName: next.practiceIdentity.legalName ?? current.legalName,\n taxId: next.practiceIdentity.taxId ?? current.taxId,\n npi: next.practiceIdentity.npi ?? current.npi,\n phone: next.practiceIdentity.phone ?? current.phone,\n email: next.practiceIdentity.email ?? current.email,\n }));\n if (next.billingProviders[0]) setProvider({ billType: \"Professional\", ...next.billingProviders[0] });\n if (next.locations.length) setLocations(next.locations.map((item) => ({ ...item })));\n if (next.onboarding.complete && !completedFired.current) {\n completedFired.current = true;\n onCompleted?.(next);\n }\n }, [onCompleted]);\n\n useEffect(() => {\n let alive = true;\n client.getOrganization()\n .then((next) => { if (alive) { setLoadError(null); adoptProfile(next); } })\n .catch((caught) => {\n if (!alive) return;\n const failure = caught instanceof Error ? caught : new Error(\"The organization could not be loaded.\");\n setLoadError(failure.message);\n onError?.(failure);\n });\n return () => { alive = false; };\n }, [client, adoptProfile, onError]);\n\n const run = async (work: () => Promise<OrganizationProfileData>, stepId: StepId) => {\n setSaving(true);\n setError(null);\n try {\n const next = await work();\n adoptProfile(next);\n setSavedStep((current) => ({ ...current, [stepId]: true }));\n onSaved?.(next);\n if (variant === \"onboarding\") {\n const order: StepId[] = [\"practice\", \"locations\", \"w9\", \"review\"];\n const nextStep = order[order.indexOf(stepId) + 1];\n if (nextStep) setStep(nextStep);\n }\n } catch (caught) {\n const failure = caught instanceof Error ? caught : new Error(\"Saving failed.\");\n setError(failure.message);\n onError?.(failure);\n } finally {\n setSaving(false);\n }\n };\n\n const savePractice = () =>\n run(() =>\n client.saveBillingProfile({\n practiceIdentity: identity,\n ...(provider.name.trim() || provider.taxId.trim() || provider.npi.trim() ? { billingProviders: [provider] } : {}),\n }), \"practice\");\n const saveLocations = () =>\n run(() => client.saveLocations(locations.filter((item) => item.name.trim() || item.street.trim())), \"locations\");\n const saveW9 = () =>\n run(async () => {\n if (!w9File) throw new Error(\"Choose the practice W-9 PDF first.\");\n return client.saveW9({ filename: w9File.name, contentBase64: await fileToBase64(w9File) });\n }, \"w9\");\n\n const field = (label: string, value: string, onChange: (value: string) => void, span = false, placeholder = \"\") => (\n <label className={`mbob-field${span ? \" mbob-span\" : \"\"}`}>{label}\n <input value={value} placeholder={placeholder} onChange={(event) => onChange(event.target.value)} disabled={saving} />\n </label>\n );\n\n const setLocation = (index: number, patch: Partial<OrganizationLocationInput>) =>\n setLocations((current) => current.map((item, itemIndex) => {\n if (itemIndex !== index) return patch.isPrimary ? { ...item, isPrimary: false } : item;\n return { ...item, ...patch };\n }));\n\n const practiceSection = (\n <div>\n <div className=\"mbob-grid\">\n {field(\"Practice name\", identity.name, (name) => setIdentity((c) => ({ ...c, name })))}\n {field(\"Legal name\", identity.legalName, (legalName) => setIdentity((c) => ({ ...c, legalName })))}\n {field(\"Tax ID (EIN)\", identity.taxId, (taxId) => setIdentity((c) => ({ ...c, taxId })), false, \"94-1234567\")}\n {field(\"Group NPI\", identity.npi, (npi) => setIdentity((c) => ({ ...c, npi })))}\n {field(\"Phone\", identity.phone, (phone) => setIdentity((c) => ({ ...c, phone })))}\n {field(\"Email\", identity.email, (email) => setIdentity((c) => ({ ...c, email })))}\n </div>\n <h3 className=\"mbob-subhead\">Billing provider (pay-to)</h3>\n <div className=\"mbob-grid\">\n {field(\"Billing provider name\", provider.name, (name) => setProvider((c) => ({ ...c, name })))}\n {field(\"Billing tax ID\", provider.taxId, (taxId) => setProvider((c) => ({ ...c, taxId })))}\n {field(\"Billing NPI\", provider.npi, (npi) => setProvider((c) => ({ ...c, npi })))}\n {field(\"Billing phone\", provider.phone ?? \"\", (phone) => setProvider((c) => ({ ...c, phone })))}\n {field(\"Street\", provider.billingStreet ?? \"\", (billingStreet) => setProvider((c) => ({ ...c, billingStreet })), true)}\n {field(\"City\", provider.billingCity ?? \"\", (billingCity) => setProvider((c) => ({ ...c, billingCity })))}\n {field(\"State\", provider.billingState ?? \"\", (billingState) => setProvider((c) => ({ ...c, billingState: billingState.toUpperCase().slice(0, 2) })))}\n {field(\"ZIP\", provider.billingZip ?? \"\", (billingZip) => setProvider((c) => ({ ...c, billingZip })))}\n </div>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"practice\"] ? \"Saved to MindBill.\" : \"Saved once, used on every bill.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={savePractice}>{saving ? \"Saving…\" : \"Save practice\"}</button></div>\n </div>\n );\n\n const locationsSection = (\n <div>\n {locations.map((location, index) => (\n <div className=\"mbob-loc\" key={location.id ?? index}>\n {field(\"Name\", location.name, (name) => setLocation(index, { name }))}\n {field(\"Street\", location.street, (street) => setLocation(index, { street }))}\n {field(\"City\", location.city, (city) => setLocation(index, { city }))}\n {field(\"State\", location.state, (state) => setLocation(index, { state: state.toUpperCase().slice(0, 2) }))}\n {field(\"ZIP\", location.zip, (zip) => setLocation(index, { zip }))}\n <label className=\"mbob-primary\"><input type=\"radio\" name=\"mbob-primary\" checked={location.isPrimary === true} onChange={() => setLocation(index, { isPrimary: true })} /> Primary</label>\n <button className=\"mbob-remove\" type=\"button\" aria-label=\"Remove location\" onClick={() => setLocations((current) => current.filter((_, itemIndex) => itemIndex !== index))}>×</button>\n </div>\n ))}\n <button className=\"mbob-add\" type=\"button\" onClick={() => setLocations((current) => [...current, blankLocation()])}>+ Add location</button>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"locations\"] ? \"Saved to MindBill.\" : \"Where evaluations happen.\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving} onClick={saveLocations}>{saving ? \"Saving…\" : \"Save locations\"}</button></div>\n </div>\n );\n\n const w9Section = (\n <div>\n {profile?.w9 ? (\n <div className=\"mbob-w9-current\"><div><strong>{profile.w9.filename}</strong><span> · added {profile.w9.addDate}</span></div><span>Rides on every bill automatically</span></div>\n ) : null}\n <label className=\"mbob-drop\">\n <input type=\"file\" accept=\"application/pdf,.pdf\" onChange={(event) => setW9File(event.target.files?.[0] ?? null)} />\n <strong>{w9File ? w9File.name : profile?.w9 ? \"Replace the W-9 PDF\" : \"Drop the practice W-9 PDF here, or click to choose\"}</strong>\n <span>The W-9 is auto-attached to every submission.</span>\n </label>\n <div className=\"mbob-actions\"><span className=\"mbob-status\">{savedStep[\"w9\"] ? \"Saved to MindBill.\" : \"\"}</span><button className=\"mbob-save\" type=\"button\" disabled={saving || !w9File} onClick={saveW9}>{saving ? \"Uploading…\" : \"Save W-9\"}</button></div>\n </div>\n );\n\n const reviewSection = (\n <div className=\"mbob-check\">\n {(profile?.onboarding.checklist ?? []).map((item) => (\n <div className=\"mbob-check-item\" key={item.id} data-complete={item.complete}>\n <i>{item.complete ? \"✓\" : \"•\"}</i><span>{item.label}</span>\n </div>\n ))}\n {profile?.onboarding.complete ? <p className=\"mbob-done\">Billing setup is complete — bills submitted from your product carry this profile automatically.</p> : <p className=\"mbob-status\">Items above complete themselves as each section is saved.</p>}\n </div>\n );\n\n const sections: Record<StepId, ReactElement> = { practice: practiceSection, locations: locationsSection, w9: w9Section, review: reviewSection };\n\n return (\n <div className={`mbob ${className}`.trim()} style={{ ...mindBillAppearanceStyle(appearance), ...style }}>\n <style>{css}</style>\n <div className=\"mbob-card\">\n <div className=\"mbob-head\"><div><h2>{heading}</h2><p className=\"mbob-copy\">{description}</p></div></div>\n {loadError ? <div className=\"mbob-error\" role=\"alert\">{loadError}</div> : null}\n {variant === \"onboarding\" ? (\n <>\n <div className=\"mbob-steps\">\n {STEPS.map((item) => (\n <button className=\"mbob-step\" type=\"button\" key={item.id} data-active={step === item.id} data-done={Boolean(savedStep[item.id])} onClick={() => setStep(item.id)}>\n <i>{savedStep[item.id] ? \"✓\" : \"\"}</i>{item.label}\n </button>\n ))}\n </div>\n {sections[step]}\n </>\n ) : (\n <>\n {practiceSection}\n <h3 className=\"mbob-subhead\">Locations</h3>\n {locationsSection}\n <h3 className=\"mbob-subhead\">Practice W-9</h3>\n {w9Section}\n <h3 className=\"mbob-subhead\">Checklist</h3>\n {reviewSection}\n </>\n )}\n {error ? <div className=\"mbob-error\" role=\"alert\">{error}</div> : null}\n </div>\n </div>\n );\n}\n\n/** Compact edit-after-setup variant of {@link OrganizationOnboarding}. */\nexport function BillingSettings(props: Omit<OrganizationOnboardingProps, \"variant\">): ReactElement {\n return (\n <OrganizationOnboarding\n heading=\"Billing settings\"\n description=\"Practice identity, locations, and the W-9 used on every bill.\"\n {...props}\n variant=\"settings\"\n />\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 { useState, type CSSProperties, type ReactElement } from \"react\";\nimport type {\n BillEorDocument,\n BillHistoryEntry,\n BillLifecycleAction,\n BillLifecycleData,\n BillLifecycleDelivery,\n BillPaymentRecord,\n BillRejection,\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.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></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 BillHistoryTableProps = SurfaceProps & {\n entries: readonly BillHistoryEntry[];\n emptyLabel?: string;\n /** Formats the Date column. Defaults to MM/DD/YYYY. */\n formatDate?: (iso: string) => string;\n /** Resolve a clickable href for a submitted document; return null for plain text. */\n documentHref?: (doc: { id: string; filename: string }) => string | null;\n /** Open an authenticated submitted document in a new tab when no direct href is available. */\n onOpenDocument?: (doc: { id: string; filename: string }) => void | Promise<void>;\n};\n\nfunction historyDate(iso: string): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return iso;\n return new Intl.DateTimeFormat(\"en-US\", { month: \"2-digit\", day: \"2-digit\", year: \"numeric\" }).format(parsed);\n}\n\n/**\n * The Bill History table: Date / Action / User / Details rows where\n * submissions are pale-blue expandable rows (documents + compliance due dates), notes\n * are pale-yellow, and 277 responses expand into decoded status-code sentences. The\n * rows come pre-worded from the MindBill API (`BillLifecycleData.history`).\n */\nexport function BillHistoryTable({ entries, emptyLabel = \"No bill history yet.\", appearance, className, style, formatDate = historyDate, documentHref, onOpenDocument }: BillHistoryTableProps): ReactElement {\n const [expanded, setExpanded] = useState<Record<string, boolean>>({});\n return (\n <section className={classes(\"mb-surface mb-history\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill history\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Bill history</strong><span>Submissions, payer responses, follow-up, and payments.</span></div></header>\n {!entries.length ? <p className=\"mb-activity-empty\">{emptyLabel}</p> : (\n <div className=\"mb-history-table\">\n <div className=\"mb-history-head\" aria-hidden=\"true\"><span>Date</span><span>Action</span><span>User</span><span>Details</span></div>\n <ul className=\"mb-history-rows\">\n {entries.map((entry) => {\n const expandable = Boolean(entry.details);\n const isOpen = expandable && Boolean(expanded[entry.id]);\n const details = entry.details;\n const lineContents = <>\n <span className=\"mb-history-date\">{formatDate(entry.date)}</span>\n <span className=\"mb-history-action\">{entry.action}</span>\n <span className=\"mb-history-actor\">{entry.actor ?? \"—\"}</span>\n <span className=\"mb-history-summary\">\n {expandable ? <i className={`mb-history-caret${isOpen ? \" is-open\" : \"\"}`} aria-hidden=\"true\" /> : null}\n {entry.summary}\n </span>\n </>;\n return (\n <li key={entry.id} className={`mb-history-row is-${entry.tone}`}>\n {expandable ? <button\n type=\"button\"\n className=\"mb-history-line is-expandable\"\n aria-expanded={isOpen}\n onClick={() => setExpanded((current) => ({ ...current, [entry.id]: !current[entry.id] }))}\n >{lineContents}</button> : <div className=\"mb-history-line\">{lineContents}</div>}\n {isOpen && details ? (\n <div className=\"mb-history-details\">\n {details.rows?.length ? (\n <dl className=\"mb-history-kv\">\n {details.rows.map((row) => (\n <div key={`${row.label}-${row.value}`}><dt>{row.label}</dt><dd>{row.value}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.documents?.length ? (\n <div className=\"mb-history-kv\"><div><dt>Documents</dt><dd>\n {details.documents.map((doc) => {\n const href = documentHref?.(doc) ?? null;\n return href\n ? <a key={doc.id} className=\"mb-history-doc\" href={href} target=\"_blank\" rel=\"noreferrer\">{doc.filename}</a>\n : onOpenDocument\n ? <button key={doc.id} type=\"button\" className=\"mb-history-doc\" onClick={() => void onOpenDocument(doc)}>{doc.filename}</button>\n : <span key={doc.id} className=\"mb-history-doc\">{doc.filename}</span>;\n })}\n </dd></div></div>\n ) : null}\n {details.codes?.length ? (\n <dl className=\"mb-history-codes\">\n {details.codes.map((code) => (\n <div key={code.code}><dt>{code.code}</dt><dd>{code.text}</dd></div>\n ))}\n </dl>\n ) : null}\n {details.complianceDueDates?.length ? (\n <div className=\"mb-history-due\">\n <em>Compliance Due Dates</em>\n <dl>\n {details.complianceDueDates.map((due) => (\n <div key={`${due.date}-${due.text}`}><dt>{formatDate(due.date)}</dt><dd>{due.text}</dd></div>\n ))}\n </dl>\n </div>\n ) : null}\n {details.text ? <p className=\"mb-history-text\">{details.text}</p> : null}\n </div>\n ) : null}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </section>\n );\n}\n\nexport type BillLifecycleStage = \"submitted\" | \"accepted\" | \"processed\" | \"closed\";\n\nconst lifecycleStages: Array<{ id: BillLifecycleStage; label: string }> = [\n { id: \"submitted\", label: \"Sent\" },\n { id: \"accepted\", label: \"Accepted\" },\n { id: \"processed\", label: \"Processed\" },\n { id: \"closed\", label: \"Closed\" },\n];\n\nexport type BillLifecycleProgressStep = {\n id: string;\n label: string;\n status: \"complete\" | \"current\" | \"upcoming\";\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(\"appeal\") || value.includes(\"reject\")) return \"submitted\";\n if (value.includes(\"processed\") || value.includes(\"paid\") || value.includes(\"denied\") || value.includes(\"partial\") || value.includes(\"response\") || value.includes(\"ibr\") || value.includes(\"lien\")) return \"processed\";\n if (value.includes(\"accepted\")) return \"accepted\";\n return \"submitted\";\n}\n\nexport type BillLifecycleProgressStepsOptions = {\n /**\n * Render pre-submission bills (\"draft\") as a dedicated leading Draft stage\n * ahead of the Sent→Closed rail. Off by default: hosts whose bills are always\n * already submitted (the typical partner embed) never see a Draft stage, and\n * without the flag a draft state keeps the legacy rendering (Sent as the\n * current stage). Post-submission states render identically either way.\n */\n draftStage?: boolean;\n};\n\n/** True when the lifecycle state is a pre-submission draft. */\nexport function isBillLifecycleDraft(state: string): boolean {\n return state.toLowerCase() === \"draft\";\n}\n\n/** Builds the progress rail for a lifecycle state, including terminal exception paths. */\nexport function billLifecycleProgressSteps(state: string, options?: BillLifecycleProgressStepsOptions): BillLifecycleProgressStep[] {\n if (state.toLowerCase() === \"rejected\") {\n return [\n { id: \"submitted\", label: \"Sent\", status: \"complete\" },\n { id: \"rejected\", label: \"Rejected\", status: \"current\" },\n ];\n }\n\n if (options?.draftStage && isBillLifecycleDraft(state)) {\n return [\n { id: \"draft\", label: \"Draft\", status: \"current\" },\n ...lifecycleStages.map((stage) => ({ ...stage, status: \"upcoming\" as const })),\n ];\n }\n\n const current = billLifecycleStage(state);\n const currentIndex = lifecycleStages.findIndex((stage) => stage.id === current);\n return lifecycleStages.map((stage, index) => ({\n ...stage,\n status:\n index < currentIndex\n ? \"complete\"\n : index === currentIndex\n ? \"current\"\n : \"upcoming\",\n }));\n}\n\n/** Returns the end-user label for a canonical lifecycle state. */\nexport function billLifecycleDisplayLabel(state: string, nativeStatus?: string): string {\n const value = state.toLowerCase();\n if (value === \"submitted\") return \"Sent\";\n if (value === \"second_review\") return \"Second Review sent\";\n if (value === \"rejected\") return \"Rejected\";\n if (value === \"denied\") return \"Denied\";\n if (value === \"partially_paid\") return \"Partially paid\";\n if (value === \"written_off\") return \"Written off\";\n return humanize(state || nativeStatus || \"submitted\");\n}\n\nexport type BillLifecycleProgressProps = SurfaceProps & {\n state: string;\n nativeStatus?: string;\n submittedAt?: string | null;\n agingDays?: number | null;\n /** Opt-in leading Draft stage for pre-submission bills. See {@link BillLifecycleProgressStepsOptions}. */\n draftStage?: boolean;\n};\n\nexport function BillLifecycleProgress({ state, nativeStatus, submittedAt, agingDays, draftStage, appearance, className, style }: BillLifecycleProgressProps): ReactElement {\n const rejected = state.toLowerCase() === \"rejected\";\n const draft = Boolean(draftStage) && isBillLifecycleDraft(state);\n const steps = billLifecycleProgressSteps(state, { draftStage: Boolean(draftStage) });\n return (\n <section className={classes(`mb-surface mb-progress${rejected ? \" is-rejected\" : \"\"}`, className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Bill lifecycle\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>{billLifecycleDisplayLabel(state, nativeStatus)}</strong><span>{rejected ? \"The payer rejected this submission.\" : draft ? \"Not yet sent\" : `${submittedAt ? `Submitted ${defaultFormatDate(submittedAt)}` : \"Submitted\"}${typeof agingDays === \"number\" ? ` · ${agingDays} days old` : \"\"}`}</span></div></header>\n <ol className=\"mb-progress-list\" style={{ gridTemplateColumns: `repeat(${steps.length}, minmax(0, 1fr))` }}>\n {steps.map((step, index) => (\n <li key={step.id} className={`is-${step.status}`} aria-current={step.status === \"current\" ? \"step\" : undefined}>\n <span aria-hidden=\"true\">{step.status === \"complete\" ? \"✓\" : rejected && step.status === \"current\" ? \"!\" : index + 1}</span>\n <b>{step.label}</b>\n </li>\n ))}\n </ol>\n </section>\n );\n}\n\nexport type BillRejectionNoticeProps = SurfaceProps & {\n rejection: BillRejection;\n title?: string;\n submittedAt?: string | null;\n formatDate?: (createdAt: string) => string;\n};\n\n/** Builds concise source-aware copy without inventing a clearinghouse name. */\nexport function billRejectionIssueSummary(rejection: BillRejection, count: number): string {\n const noun = count === 1 ? \"validation error\" : \"validation errors\";\n const source = rejection.source?.trim().replace(/\\.$/, \"\");\n if (!source) return `${count} ${noun}.`;\n if (/acknowledg/i.test(source)) return `${count} clearinghouse ${noun}.`;\n return `${count} ${noun} returned by ${source}.`;\n}\n\n/** A prominent, end-user-readable explanation of a rejected submission. */\nexport function BillRejectionNotice({ rejection, title = \"Rejected — action required\", submittedAt, appearance, className, style, formatDate = defaultFormatDate }: BillRejectionNoticeProps): ReactElement {\n const issues = rejection.issues?.length\n ? rejection.issues\n : [{ code: rejection.code, description: rejection.reason }];\n const hasCodes = issues.some((issue) => Boolean(issue.code));\n\n return (\n <section className={classes(\"mb-surface mb-rejection-notice\", className)} style={mindBillAppearanceStyle(appearance, style)} role=\"alert\" aria-label=\"Bill rejection reasons\">\n <style>{lifecycleSurfaceStyles}</style>\n <div className=\"mb-rejection-overview\">\n <header className=\"mb-rejection-heading\">\n <span className=\"mb-rejection-icon\" aria-hidden=\"true\">!</span>\n <div><strong>{title}</strong><span>Fix the {issues.length === 1 ? \"issue\" : \"issues\"} below, then resubmit.</span></div>\n </header>\n <ol className=\"mb-rejection-progress\" aria-label=\"Submission status\">\n <li className=\"is-complete\"><span aria-hidden=\"true\">✓</span><b>Sent</b>{submittedAt ? <small>{formatDate(submittedAt)}</small> : null}</li>\n <li className=\"is-rejected\" aria-current=\"step\"><span aria-hidden=\"true\">!</span><b>Rejected</b>{rejection.receivedAt ? <small>{formatDate(rejection.receivedAt)}</small> : null}</li>\n </ol>\n </div>\n <div className=\"mb-rejection-issues\" aria-label=\"Rejection reasons\">\n <div className=\"mb-rejection-issues-heading\">\n <strong><span aria-hidden=\"true\">△</span> Rejection reasons</strong>\n <span>{billRejectionIssueSummary(rejection, issues.length)}</span>\n </div>\n <ol aria-label={`${issues.length} rejection ${issues.length === 1 ? \"reason\" : \"reasons\"}`}>\n {issues.map((issue, index) => (\n <li key={`${issue.code ?? \"issue\"}-${index}`}>\n <span className=\"mb-rejection-bullet\" aria-hidden=\"true\" />\n <p>{issue.description}</p>\n {issue.code ? <span className=\"mb-rejection-code\">{issue.code}</span> : null}\n </li>\n ))}\n </ol>\n {hasCodes ? <p className=\"mb-rejection-code-note\"><span aria-hidden=\"true\">i</span> Technical error codes are included for support and auditability.</p> : null}\n </div>\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 type BillExplanationOfReviewProps = SurfaceProps & {\n remittance: BillRemittanceSummary;\n eors: readonly BillEorDocument[];\n payments: readonly BillPaymentRecord[];\n submittedAt?: string | null;\n onOpenEor?: (document: BillEorDocument) => void | Promise<void>;\n};\n\n/**\n * A consolidated payer-response surface: financial summary, denial context,\n * EOR documents, and posted payments in one familiar reconciliation view.\n */\nexport function BillExplanationOfReview({\n remittance,\n eors,\n payments,\n submittedAt,\n onOpenEor,\n appearance,\n className,\n style,\n}: BillExplanationOfReviewProps): ReactElement {\n const rows = payments.length ? payments : [null];\n return (\n <section className={classes(\"mb-surface mb-eor-review\", className)} style={mindBillAppearanceStyle(appearance, style)} aria-label=\"Explanation of Review and payments\">\n <style>{lifecycleSurfaceStyles}</style>\n <header className=\"mb-surface-heading\"><div><strong>Explanation of Review</strong><span>Payer response and payment reconciliation.</span></div></header>\n <dl className=\"mb-eor-metrics\">\n <div><dt>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div className=\"is-balance\"><dt>Balance due</dt><dd>{currency(remittance.balanceDue)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n </dl>\n {remittance.denialReason ? <div className=\"mb-denial\"><strong>Denial reason</strong><p>{remittance.denialReason}</p></div> : null}\n <div className=\"mb-eor-table-wrap\">\n <table className=\"mb-eor-table\">\n <thead>\n <tr className=\"mb-eor-groups\"><th colSpan={2}>Submission</th><th colSpan={5}>EOR payment information</th><th colSpan={2}>EOR post</th><th>EOR</th></tr>\n <tr><th>Submission</th><th>Submission payment</th><th>Payment method</th><th>Reference</th><th>Effective date</th><th>Payment total</th><th>Deposit date</th><th>Post date</th><th>Source</th><th>Document</th></tr>\n </thead>\n <tbody>{rows.map((payment, index) => {\n const eor = eors[index] ?? eors[0];\n return <tr key={payment?.id ?? `empty-${index}`}>\n <td data-label=\"Submission\"><strong>Original bill</strong>{submittedAt ? <span>Sent {defaultFormatDate(submittedAt)}</span> : null}</td>\n <td data-label=\"Submission payment\">{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</td>\n <td data-label=\"Payment method\">{payment ? humanize(payment.method) : \"—\"}</td>\n <td data-label=\"Reference\">{payment?.checkNumber || \"—\"}</td>\n <td data-label=\"Effective date\">{payment ? payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt) : \"—\"}</td>\n <td data-label=\"Payment total\">{payment ? currency(payment.amount) : currency(0)}</td>\n <td data-label=\"Deposit date\">{payment?.depositDate || \"Not recorded\"}</td>\n <td data-label=\"Post date\">{payment ? defaultFormatDate(payment.postedAt) : eor ? defaultFormatDate(eor.addedAt) : \"—\"}</td>\n <td data-label=\"Source\">{payment ? payment.source.toUpperCase() : eor ? \"EOR\" : \"—\"}</td>\n <td data-label=\"EOR\">{eor && onOpenEor ? <button type=\"button\" className=\"mb-eor-link\" onClick={() => void onOpenEor(eor)}>{eor.filename}</button> : eor?.filename || \"—\"}</td>\n </tr>;\n })}</tbody>\n </table>\n </div>\n {eors.length > rows.length ? <div className=\"mb-eor-documents\">{eors.slice(rows.length).map((eor) => <button type=\"button\" key={eor.id} onClick={() => void onOpenEor?.(eor)}>{eor.filename}</button>)}</div> : null}\n </section>\n );\n}\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>Amount billed</dt><dd>{currency(remittance.billedAmount)}</dd></div>\n <div><dt>Expected</dt><dd>{currency(remittance.expectedAmount)}</dd></div>\n <div><dt>Payer allowed</dt><dd>{remittance.payerAllowedAmount === null ? \"—\" : currency(remittance.payerAllowedAmount)}</dd></div>\n <div><dt>Payer reported paid</dt><dd>{remittance.payerReportedPaid === null ? \"—\" : currency(remittance.payerReportedPaid)}</dd></div>\n <div><dt>Payment posted</dt><dd>{currency(remittance.postedPrincipal)}</dd></div>\n <div><dt>Penalty & interest</dt><dd>{currency(remittance.postedAdditional)}</dd></div>\n <div><dt>Total received</dt><dd>{currency(remittance.totalPostedCash)}</dd></div>\n <div><dt>Balance due</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>Funds recorded against this bill.</span></div></header>\n {!payments.length ? <p className=\"mb-empty\">No payments posted.</p> : <div className=\"mb-payment-list\">{payments.map((payment) => {\n const additional = payment.feeAmount ?? 0;\n return <article key={payment.id}>\n <div className=\"mb-payment-amount\"><strong>{currency(payment.amount)}</strong><span>Total received</span></div>\n <dl>\n <div><dt>Applied to bill</dt><dd>{currency(payment.principalAmount)}</dd></div>\n {additional > 0 ? <div><dt>Penalty & interest</dt><dd>{currency(additional)}</dd></div> : null}\n <div><dt>Method</dt><dd>{payment.method.toUpperCase()}</dd></div>\n <div><dt>Reference</dt><dd>{payment.checkNumber || \"—\"}</dd></div>\n <div><dt>Effective date</dt><dd>{payment.receivedDate || payment.depositDate || defaultFormatDate(payment.postedAt)}</dd></div>\n <div><dt>Deposit date</dt><dd>{payment.depositDate || \"Not recorded\"}</dd></div>\n <div><dt>Posted</dt><dd>{defaultFormatDate(payment.postedAt)} · {payment.source.toUpperCase()}</dd></div>\n <div><dt>Status</dt><dd>{humanize(payment.status || \"posted\")}</dd></div>\n </dl>\n {payment.feeReason ? <p>{payment.feeReason}</p> : null}\n {payment.note ? <p>{payment.note}</p> : null}\n </article>;\n })}</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(4,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-progress.is-rejected{border-color:color-mix(in srgb,var(--mb-danger) 34%,var(--mb-border));background:color-mix(in srgb,var(--mb-danger) 3%,var(--mb-surface));box-shadow:0 8px 24px color-mix(in srgb,var(--mb-danger) 8%,transparent)}.mb-progress.is-rejected .mb-surface-heading strong,.mb-progress.is-rejected .mb-progress-list li.is-current{color:var(--mb-danger)}.mb-progress.is-rejected .mb-progress-list li.is-current>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}\n.mb-rejection-notice{border:1px solid color-mix(in srgb,var(--mb-danger) 30%,var(--mb-border));border-left:4px solid var(--mb-danger);background:color-mix(in srgb,var(--mb-danger) 5%,var(--mb-surface));box-shadow:0 14px 38px color-mix(in srgb,var(--mb-danger) 9%,transparent);padding:26px 28px 18px}.mb-rejection-overview{display:grid;grid-template-columns:minmax(230px,.72fr) minmax(360px,1.28fr);align-items:start;gap:38px}.mb-rejection-heading{display:flex;align-items:flex-start;gap:14px}.mb-rejection-heading>div{display:grid;gap:5px}.mb-rejection-heading strong{color:var(--mb-danger);font-size:19px;line-height:1.25}.mb-rejection-heading span{color:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-text));font-size:14px;line-height:1.45}.mb-rejection-icon{display:grid;place-items:center;flex:0 0 auto;width:42px;height:42px;border-radius:50%;background:var(--mb-danger);box-shadow:0 5px 14px color-mix(in srgb,var(--mb-danger) 25%,transparent);color:#fff;font-size:21px;font-weight:900}.mb-rejection-progress{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:5px 0 24px;padding:0}.mb-rejection-progress li{display:grid;grid-template-rows:34px auto auto;gap:4px;position:relative;text-align:center;color:var(--mb-text);font-size:12px}.mb-rejection-progress li:first-child::after{content:\"\";position:absolute;left:calc(50% + 17px);right:calc(-50% + 17px);top:16px;height:2px;background:color-mix(in srgb,var(--mb-danger) 48%,var(--mb-border))}.mb-rejection-progress li>span{display:grid;place-items:center;justify-self:center;position:relative;z-index:1;width:34px;height:34px;border:2px solid color-mix(in srgb,var(--mb-danger) 32%,var(--mb-border));border-radius:50%;background:var(--mb-surface);color:var(--mb-danger);font-size:16px;font-weight:900}.mb-rejection-progress li.is-rejected>span{border-color:var(--mb-danger);background:var(--mb-danger);color:#fff}.mb-rejection-progress b{font-size:13px}.mb-rejection-progress small{color:var(--mb-muted);font-size:11px;line-height:1.3}.mb-rejection-issues{border:1px solid color-mix(in srgb,var(--mb-danger) 19%,var(--mb-border));border-radius:12px;background:color-mix(in srgb,var(--mb-danger) 2%,var(--mb-surface));overflow:hidden}.mb-rejection-issues-heading{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--mb-danger) 14%,var(--mb-border))}.mb-rejection-issues-heading strong{display:flex;align-items:center;gap:8px;font-size:13px}.mb-rejection-issues-heading strong>span{color:var(--mb-danger);font-size:17px}.mb-rejection-issues-heading>span{color:var(--mb-muted);font-size:12px;text-align:right}.mb-rejection-issues ol{display:grid;gap:7px;list-style:none;margin:0;padding:10px 12px}.mb-rejection-issues li{display:grid;grid-template-columns:8px minmax(0,1fr) auto;align-items:center;gap:11px;padding:10px 12px;border:1px solid color-mix(in srgb,var(--mb-danger) 11%,var(--mb-border));border-radius:8px;background:color-mix(in srgb,var(--mb-danger) 1%,var(--mb-surface));box-shadow:0 1px 3px rgba(23,39,48,.04)}.mb-rejection-bullet{width:7px;height:7px;border-radius:50%;background:var(--mb-danger)}.mb-rejection-issues p{margin:0;font-size:14px;line-height:1.45}.mb-rejection-code{justify-self:end;border:1px solid color-mix(in srgb,var(--mb-danger) 20%,var(--mb-border));border-radius:999px;background:color-mix(in srgb,var(--mb-danger) 6%,var(--mb-surface));color:var(--mb-danger);font-size:11px;font-weight:850;line-height:1.2;padding:4px 8px}.mb-rejection-code-note{display:flex;align-items:center;gap:7px;margin:0;padding:1px 16px 13px;color:var(--mb-muted);font-size:11px}.mb-rejection-code-note>span{display:grid;place-items:center;width:16px;height:16px;border:1px solid currentColor;border-radius:50%;font-size:10px;font-weight:850}\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-remittance dl{grid-template-columns:repeat(4,minmax(0,1fr));row-gap:1px;background:var(--mb-border)}.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-remittance dl>div{border:0;background:var(--mb-surface)}.mb-snapshot dl>div:nth-child(3n+1),.mb-contacts dl>div:first-child{border-left:0}.mb-snapshot dt,.mb-remittance dt,.mb-contacts dt,.mb-payment-list 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,.mb-payment-list 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:minmax(120px,.35fr) 1fr;gap:14px 24px;padding:16px 0;border-top:1px solid var(--mb-border)}.mb-payment-list article:first-child{border-top:0}.mb-payment-amount{display:grid;align-content:start;gap:2px}.mb-payment-amount strong{font-size:1.2rem}.mb-payment-list article>dl{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin:0}.mb-payment-list article>dl>div{display:grid;align-content:start;gap:3px}.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.mb-eor-review{border-top:4px solid var(--mb-accent);padding-top:17px}.mb-eor-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin:0 0 18px;border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}.mb-eor-metrics>div{display:grid;gap:4px;padding:13px 15px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border)}.mb-eor-metrics>div:nth-child(-n+4){border-top:0}.mb-eor-metrics>div:nth-child(4n+1){border-left:0}.mb-eor-metrics dt{color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.mb-eor-metrics dd{margin:0;font-size:15px;font-weight:800}.mb-eor-metrics .is-balance{background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-eor-table-wrap{overflow-x:auto;border:1px solid var(--mb-border);border-radius:10px}.mb-eor-table{width:100%;min-width:1080px;border-collapse:collapse;font-size:12px}.mb-eor-table th,.mb-eor-table td{padding:10px 12px;border-left:1px solid var(--mb-border);border-top:1px solid var(--mb-border);text-align:left;vertical-align:top}.mb-eor-table th:first-child,.mb-eor-table td:first-child{border-left:0}.mb-eor-table thead th{background:var(--mb-soft);color:var(--mb-muted);font-weight:800}.mb-eor-table .mb-eor-groups th{border-top:0;background:color-mix(in srgb,var(--mb-accent) 13%,var(--mb-surface));color:var(--mb-text);text-align:center}.mb-eor-table td>strong,.mb-eor-table td>span{display:block}.mb-eor-table td>span{margin-top:3px;color:var(--mb-muted)}.mb-eor-link,.mb-eor-documents button{border:0;background:transparent;color:var(--mb-accent);font:inherit;font-weight:750;padding:0;text-align:left;text-decoration:underline;cursor:pointer;overflow-wrap:anywhere}.mb-eor-documents{display:flex;flex-wrap:wrap;gap:12px;margin-top:12px}\n.mb-history-table{border:1px solid var(--mb-border);border-radius:10px;overflow:hidden}\n.mb-history-head{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;padding:8px 14px;background:var(--mb-soft);color:var(--mb-muted);font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase}\n.mb-history-rows{list-style:none;margin:0;padding:0}.mb-history-row{border-top:1px solid var(--mb-border)}\n.mb-history-row.is-submission{background:color-mix(in srgb,var(--mb-accent) 9%,var(--mb-surface))}\n.mb-history-row.is-note{background:color-mix(in srgb,#f2c344 13%,var(--mb-surface))}\n.mb-history-line{display:grid;grid-template-columns:96px 160px 140px minmax(0,1fr);gap:12px;width:100%;padding:10px 14px;border:0;background:transparent;color:inherit;font:inherit;text-align:left}\n.mb-history-line.is-expandable{cursor:pointer}.mb-history-line.is-expandable:hover .mb-history-summary{text-decoration:underline}\n.mb-history-date{color:var(--mb-muted);font-size:13px}.mb-history-action{font-size:13.5px;font-weight:750}\n.mb-history-row.is-problem .mb-history-action{color:var(--mb-danger)}\n.mb-history-actor{color:var(--mb-muted);font-size:13px;overflow-wrap:anywhere}\n.mb-history-summary{display:flex;align-items:flex-start;gap:7px;min-width:0;font-size:13.5px;line-height:1.45;overflow-wrap:anywhere}\n.mb-history-caret{flex:0 0 auto;margin-top:5px;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid var(--mb-muted);transition:transform .12s ease}\n.mb-history-caret.is-open{transform:rotate(90deg)}\n.mb-history-details{padding:4px 14px 14px 122px;font-size:13.5px;line-height:1.5}\n.mb-history-kv,.mb-history-codes,.mb-history-due dl{display:grid;gap:4px;margin:0}\n.mb-history-kv>div{display:grid;grid-template-columns:180px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-kv dt{font-weight:750}.mb-history-kv dd{margin:0;overflow-wrap:anywhere}.mb-history-kv dd a{color:var(--mb-accent)}.mb-history-doc{display:block}.mb-history-kv button.mb-history-doc{border:0;background:transparent;color:var(--mb-accent);font:inherit;padding:0;text-align:left;text-decoration:underline;cursor:pointer}\n.mb-history-codes>div{display:grid;grid-template-columns:56px minmax(0,1fr);gap:12px}.mb-history-codes dt{font-weight:800}.mb-history-codes dd{margin:0}\n.mb-history-due{margin-top:8px}.mb-history-due em{display:block;color:var(--mb-muted);font-size:12.5px;margin-bottom:4px}\n.mb-history-due dl>div{display:grid;grid-template-columns:96px minmax(0,1fr);gap:12px;border-top:1px solid color-mix(in srgb,var(--mb-border) 60%,transparent);padding-top:4px}\n.mb-history-due dt{font-weight:750}.mb-history-due dd{margin:0}\n.mb-history-text{margin:8px 0 0;color:var(--mb-text);white-space:pre-wrap}\n@media(max-width:700px){.mb-history-head{display:none}.mb-history-line{grid-template-columns:1fr;gap:2px;padding:10px 12px}.mb-history-details{padding:4px 12px 12px}.mb-history-kv>div,.mb-history-due dl>div{grid-template-columns:1fr}}\n@media(max-width:700px){.mb-surface.mb-progress{padding:16px 10px}.mb-progress-list{grid-template-columns:repeat(4,minmax(0,1fr))}.mb-progress-list li{display:grid;grid-template-columns:1fr;align-items:start;gap:6px;text-align:center;font-size:10px;min-width:0}.mb-progress-list li b{font-size:10px;white-space:nowrap}.mb-progress-list li:not(:last-child)::after{left:calc(50% + 12px);right:calc(-50% + 12px);top:11px;bottom:auto;width:auto;height:2px}.mb-progress-list li>span{grid-row:auto;width:24px;height:24px;font-size:11px}.mb-rejection-notice{padding:18px 14px 14px}.mb-rejection-overview{grid-template-columns:1fr;gap:18px}.mb-rejection-heading strong{font-size:17px}.mb-rejection-icon{width:36px;height:36px}.mb-rejection-progress{margin:0 0 4px}.mb-rejection-issues-heading{align-items:flex-start;flex-direction:column;gap:4px}.mb-rejection-issues-heading>span{text-align:left}.mb-rejection-issues li{grid-template-columns:8px minmax(0,1fr);gap:8px 10px}.mb-rejection-code{grid-column:2;justify-self:start}.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>dl{grid-template-columns:1fr 1fr}}\n`;\n","\"use client\";\n\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 DEFAULT_API_BASE_URL,\n DEFAULT_SESSION_ENDPOINT,\n SECOND_REVIEW_REASON_TEMPLATE,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n type BrowserBillCreateInput,\n type BillDeliveryOptions,\n type BillClaimsAdministratorSource,\n type BillEorDocument,\n type BillLifecycleAction,\n type BillLifecycleClient,\n type BillLifecycleClientOptions,\n type BillLifecycleData,\n type CloseBillInput,\n type PostBillPaymentInput,\n type ReopenBillInput,\n type SandboxSimulationScenario,\n type SubmitNewBillInput,\n type SubmitSecondReviewInput,\n} from \"@mindbill/browser\";\nimport type { MindBillReactAppearance } from \"./appearance\";\nimport { mindBillAppearanceStyle } from \"./appearance\";\nimport {\n BillActivityTimeline,\n BillExplanationOfReview,\n BillHistoryTable,\n BillLifecycleProgress,\n BillRejectionNotice,\n} from \"./bill-lifecycle-surfaces\";\nimport { BillReadOnlyForm } from \"./bill-read-only-form\";\nimport {\n BILL_SUBMISSION_DOCUMENT_TYPES,\n BillSubmissionForm,\n prepareBillSubmissionDocuments,\n type BillSubmissionDocumentType,\n type BillSubmissionFormValue,\n type BillSubmissionInput,\n type BillSubmissionSourceAttachment,\n} from \"./bill-submission-form\";\nimport type { BillReviewAttachment, BillSubmissionRoute } from \"./native-bill-review\";\nimport { BillSubmissionsRibbon, billSubmissionsRibbonFromHistory } from \"./bill-submissions-ribbon\";\nimport { ReportBillStatusDialog } from \"./report-bill-status-dialog\";\nimport { SendRouteDialog } from \"./send-route-dialog\";\n\nexport {\n SECOND_REVIEW_REASON_TEMPLATE,\n SECOND_REVIEW_WINDOW_DAYS,\n createBillLifecycleClient,\n reportBillStatusContacts,\n secondReviewDeadline,\n} from \"@mindbill/browser\";\nexport type {\n BillClaimsAdministratorContact,\n BillClaimsAdministratorDirectory,\n BillClaimsAdministratorMailingAddress,\n BillClaimsAdministratorPayer,\n BillClaimsAdministratorPattern,\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 BillRejection,\n CloseBillInput,\n PostBillPaymentInput,\n ReopenBillInput,\n ReportBillStatusContacts,\n ResubmitBillInput,\n SandboxSimulationScenario,\n SecondReviewDeadline,\n SendDuplicateBillInput,\n SimulateSandboxBillInput,\n SubmitNewBillInput,\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};\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 getClaimsAdministratorDirectory: BillLifecycleClient[\"getClaimsAdministratorDirectory\"];\n getDeliveryOptions: BillLifecycleClient[\"getDeliveryOptions\"];\n getAttachment: BillLifecycleClient[\"getAttachment\"];\n openAttachment: (attachment: Pick<BillReviewAttachment, \"id\">) => Promise<void>;\n openEor: (document: BillEorDocument) => Promise<void>;\n downloadPacket: () => Promise<void>;\n closeBill: BillLifecycleClient[\"closeBill\"];\n reopenBill: BillLifecycleClient[\"reopenBill\"];\n postPayment: BillLifecycleClient[\"postPayment\"];\n submitSecondReview: BillLifecycleClient[\"submitSecondReview\"];\n resubmitBill: BillLifecycleClient[\"resubmitBill\"];\n submitNewBill: BillLifecycleClient[\"submitNewBill\"];\n sendDuplicateBill: BillLifecycleClient[\"sendDuplicateBill\"];\n reportBillStatus: BillLifecycleClient[\"reportBillStatus\"];\n simulateSandbox: BillLifecycleClient[\"simulateSandbox\"];\n};\n\nfunction reservePreviewWindow(): Window | null {\n const preview = window.open(\"about:blank\", \"_blank\");\n if (preview) {\n preview.opener = null;\n preview.document.open();\n preview.document.write(\"<!doctype html><title>Preparing PDF…</title><meta name=viewport content=\\\"width=device-width,initial-scale=1\\\"><style>body{margin:0;display:grid;place-items:center;min-height:100vh;font:16px system-ui;color:#42545a;background:#f5f8f8}</style><p>Preparing PDF preview…</p>\");\n preview.document.close();\n }\n return preview;\n}\n\nfunction previewBlob(blob: Blob, preview: Window | null): void {\n const url = URL.createObjectURL(blob);\n if (preview) preview.location.replace(url);\n else {\n const link = document.createElement(\"a\");\n link.href = url;\n link.target = \"_blank\";\n link.rel = \"noopener noreferrer\";\n link.click();\n }\n window.setTimeout(() => URL.revokeObjectURL(url), 3_600_000);\n}\n\n/**\n * Opens a PDF loader from a user gesture without losing Safari's popup permission\n * while the authenticated request is in flight.\n */\nexport async function openPdfFromUserGesture(loadPdf: () => Promise<Blob>): Promise<void> {\n const preview = reservePreviewWindow();\n try {\n previewBlob(await loadPdf(), preview);\n } catch (error) {\n preview?.close();\n throw error;\n }\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 fetch: fetchOverride,\n}: UseBillLifecycleOptions): UseBillLifecycleResult {\n const [data, setData] = useState<BillLifecycleData | null>(null);\n const [error, setError] = useState<Error | null>(null);\n const [isLoading, setIsLoading] = useState(enabled);\n const [isRefreshing, setIsRefreshing] = useState(false);\n const [isMutating, setIsMutating] = useState(false);\n const mounted = useRef(true);\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 setData(null);\n setError(null);\n setIsLoading(enabled);\n }, [enabled, providedBillId]);\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) 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 ? window.setInterval(() => void refresh(), refreshInterval) : 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 (task: () => Promise<BillLifecycleData>) => {\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 ? cause : 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 openAttachment = useCallback(async (attachment: Pick<BillReviewAttachment, \"id\">) => {\n await openPdfFromUserGesture(() => client.getAttachment(attachment.id));\n }, [client]);\n const openEor = useCallback(async (document: BillEorDocument) => {\n await openPdfFromUserGesture(() => client.getEor(document.id));\n }, [client]);\n const downloadPacket = useCallback(async () => {\n setError(null);\n try {\n await openPdfFromUserGesture(() => client.getPacket());\n } catch (cause) {\n const nextError = cause instanceof Error ? cause : new Error(\"Submission packet could not be opened.\");\n if (mounted.current) setError(nextError);\n throw nextError;\n }\n }, [client]);\n\n return {\n billId: providedBillId,\n data,\n error,\n isLoading,\n isRefreshing,\n isMutating,\n refresh,\n searchClaimsAdministrators: (query, claimNumber) => client.searchClaimsAdministrators(query, claimNumber),\n getClaimsAdministratorDirectory: (id, injuryState) => client.getClaimsAdministratorDirectory(id, injuryState),\n getDeliveryOptions: () => client.getDeliveryOptions(),\n getAttachment: (attachmentId) => client.getAttachment(attachmentId),\n openAttachment,\n openEor,\n downloadPacket,\n closeBill: (input) => mutate(() => client.closeBill(input)),\n reopenBill: (input) => mutate(() => client.reopenBill(input)),\n postPayment: (input) => mutate(() => client.postPayment(input)),\n submitSecondReview: (input) => mutate(() => client.submitSecondReview(input)),\n resubmitBill: (input) => mutate(() => client.resubmitBill(input)),\n submitNewBill: (input) => mutate(() => client.submitNewBill(input)),\n sendDuplicateBill: (input) => mutate(() => client.sendDuplicateBill(input)),\n reportBillStatus: (input) => mutate(() => client.reportBillStatus(input)),\n simulateSandbox: (input) => mutate(() => client.simulateSandbox(input)),\n };\n}\n\nexport type ConnectedBillLifecycleProps = UseBillLifecycleOptions & {\n appearance?: MindBillReactAppearance;\n /** Human-readable name recorded for user-initiated bill actions. */\n actorName?: string;\n /** Optional host-system claims-administrator name shown as a selection hint. */\n claimsAdministratorHint?: ReactNode;\n /** Host-system evidence shown without preselecting a canonical directory entry. */\n claimsAdministratorSources?: readonly BillClaimsAdministratorSource[];\n /**\n * Exposes payer-response simulation controls for an explicit sandbox\n * playground. Sandbox responses remain indistinguishable from live\n * lifecycle responses to ordinary host applications.\n */\n sandboxControls?: boolean;\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 = \"\" | \"resubmit\" | \"submit_new_bill\" | \"second_review\" | \"payment\" | \"close\" | \"reopen\" | \"send_duplicate\" | \"report_status\";\ntype Tab = \"details\" | \"history\";\n\nfunction LifecycleDialog({ children, title, wide = false, onClose }: { children: ReactNode; title: string; wide?: boolean; onClose: () => void }): ReactElement {\n const dialog = useRef<HTMLDivElement | null>(null);\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n useEffect(() => {\n const previous = document.activeElement as HTMLElement | null;\n dialog.current?.focus();\n const onKeyDown = (event: KeyboardEvent) => event.key === \"Escape\" && onCloseRef.current();\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n previous?.focus();\n };\n }, []);\n return <div className=\"mb-lifecycle-dialog-backdrop\" onMouseDown={(event) => event.currentTarget === event.target && onClose()}>\n <div ref={dialog} className={[\"mb-lifecycle-dialog\", wide ? \"wide\" : \"\"].filter(Boolean).join(\" \")} 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>{children}\n </div>\n </div>;\n}\n\nfunction correctionDocumentType(value: string): BillSubmissionDocumentType {\n return (BILL_SUBMISSION_DOCUMENT_TYPES as readonly string[]).includes(value)\n ? value as BillSubmissionDocumentType\n : \"other\";\n}\n\nfunction uniqueContactValues(values: Array<string | null | undefined>): string[] {\n const seen = new Set<string>();\n return values.flatMap((value) => {\n const trimmed = value?.trim();\n if (!trimmed) return [];\n const key = trimmed.toLocaleLowerCase();\n if (seen.has(key)) return [];\n seen.add(key);\n return [trimmed];\n });\n}\n\nfunction CorrectionVerificationContact({ delivery }: { delivery: BillLifecycleData[\"delivery\"] }): ReactElement | null {\n const directory = delivery.directory;\n const billReview = directory?.billReview ?? [];\n const phones = uniqueContactValues([\n delivery.contacts.adjusterPhone,\n ...(directory?.telephoneNumbers ?? []),\n ...billReview.map((contact) => contact.phone),\n ]);\n const emails = uniqueContactValues([\n delivery.contacts.claimsEmail,\n delivery.contacts.adjusterEmail,\n ...(directory?.emailAddresses ?? []),\n ...billReview.map((contact) => contact.email),\n ]);\n const faxes = uniqueContactValues([\n delivery.contacts.faxNumber,\n ...billReview.map((contact) => contact.fax),\n ]);\n const portals = uniqueContactValues([\n delivery.contacts.portalUrl,\n ...(directory?.webPortals ?? []),\n ...billReview.map((contact) => contact.portalUrl),\n directory?.website,\n ]);\n const mailingAddresses = uniqueContactValues([\n delivery.contacts.mailingAddress,\n ...(directory?.mailingAddresses ?? []).map((entry) => entry.address),\n ...billReview.map((contact) => contact.address),\n ]);\n const methods = [\n { label: \"Phone\", values: phones, href: (value: string) => `tel:${value.replace(/[^+\\d]/g, \"\")}` },\n { label: \"Email\", values: emails, href: (value: string) => `mailto:${value}` },\n { label: \"Fax\", values: faxes },\n { label: \"Portal\", values: portals, href: (value: string) => value },\n { label: \"Mail\", values: mailingAddresses },\n ].filter((method) => method.values.length);\n\n if (!methods.length) return null;\n return <aside className=\"mb-lifecycle-correction-contact\">\n <strong>Need to verify the rejected information?</strong>\n <span>Contact {delivery.payerName} using any available method:</span>\n <dl>{methods.map((method) => <div key={method.label}>\n <dt>{method.label}</dt>\n <dd>{method.values.map((value, index) => <span key={value}>{index ? \" · \" : \"\"}{method.href\n ? <a href={method.href(value)} {...(method.label === \"Portal\" ? { target: \"_blank\", rel: \"noreferrer\" } : {})}>{value}</a>\n : value}</span>)}</dd>\n </div>)}</dl>\n </aside>;\n}\n\nfunction correctionBill(data: BillLifecycleData): BillSubmissionInput {\n const billing = data.bill.billingSnapshot?.billingProvider;\n const rendering = data.bill.billingSnapshot?.renderingProvider;\n const location = data.bill.billingSnapshot?.placeOfService;\n const nameParts = data.patient.name.trim().split(/\\s+/);\n const firstName = data.patient.firstName || nameParts[0] || \"\";\n const lastName = data.patient.lastName || nameParts.slice(1).join(\" \") || \"\";\n return {\n billingMode: data.bill.billingMode,\n patient: {\n firstName,\n ...(data.patient.middleName ? { middleName: data.patient.middleName } : {}),\n lastName,\n dateOfBirth: data.patient.dob || \"\",\n ...(data.patient.phone ? { phone: data.patient.phone } : {}),\n address: {\n line1: data.patient.address?.line1 || \"\",\n city: data.patient.address?.city || \"\",\n state: data.patient.address?.state || \"\",\n postalCode: data.patient.address?.postalCode || \"\",\n },\n },\n claim: {\n claimNumber: data.injury.claimNumber || \"\",\n ...(data.injury.adjNumber ? { adjNumber: data.injury.adjNumber } : {}),\n employer: data.injury.employer || \"\",\n dateOfInjury: data.injury.doi || \"\",\n ...(data.injury.injuryDescription ? { description: data.injury.injuryDescription } : {}),\n ...(data.injury.claimsAdminId && data.injury.claimsAdminName ? {\n claimsAdministrator: { id: data.injury.claimsAdminId, name: data.injury.claimsAdminName },\n } : {}),\n },\n service: {\n date: data.bill.dos,\n ...(data.bill.dosEnd !== undefined ? { endDate: data.bill.dosEnd } : {}),\n ...(data.bill.authorizationNumber !== undefined ? { authorizationNumber: data.bill.authorizationNumber } : {}),\n },\n ...(billing ? { billingProvider: {\n name: billing.name,\n taxId: billing.taxId,\n npi: billing.npi,\n ...(billing.phone ? { phone: billing.phone } : {}),\n address: {\n line1: billing.billingStreet || \"\",\n city: billing.billingCity || \"\",\n state: billing.billingState || \"\",\n postalCode: billing.billingZip || \"\",\n },\n } } : {}),\n ...(rendering ? { renderingProvider: {\n name: rendering.name,\n npi: rendering.npi,\n ...(rendering.taxonomy ? { taxonomy: rendering.taxonomy } : {}),\n ...(rendering.specialty ? { specialty: rendering.specialty } : {}),\n ...(rendering.licenseNumber ? { licenseNumber: rendering.licenseNumber } : {}),\n ...(rendering.licenseState ? { licenseState: rendering.licenseState } : {}),\n ...(rendering.isQME !== undefined ? { isQme: rendering.isQME } : {}),\n ...(rendering.isAME !== undefined ? { isAme: rendering.isAME } : {}),\n } } : {}),\n ...(location ? { serviceLocation: {\n ...(location.name ? { name: location.name } : {}),\n address: { line1: location.street, city: location.city, state: location.state, postalCode: location.zip },\n ...(location.posCode ? { placeOfServiceCode: location.posCode } : {}),\n } } : {}),\n diagnoses: data.injury.diagnoses?.map((diagnosis) => diagnosis.code)\n ?? [...(data.injury.diagnosisCodes || [])],\n serviceLines: data.bill.lineItems.map((line) => ({\n code: line.code,\n modifiers: [...line.modifiers],\n units: line.units,\n charge: line.charge,\n ...(line.serviceDate ? { serviceDate: line.serviceDate } : {}),\n ...(line.serviceDateEnd !== undefined ? { serviceDateEnd: line.serviceDateEnd } : {}),\n ...(line.diagnosisPointers ? { diagnosisPointers: [...line.diagnosisPointers] } : {}),\n })),\n };\n}\n\nfunction today(): string {\n const now = new Date();\n return new Date(now.getTime() - now.getTimezoneOffset() * 60_000).toISOString().slice(0, 10);\n}\n\nfunction usDate(isoDate: string): string {\n const [year, month, day] = isoDate.split(\"-\");\n return year && month && day ? `${month}/${day}/${year}` : isoDate;\n}\n\nfunction actionPanel(action: BillLifecycleAction): Panel {\n if (action.id === \"resubmit\") return \"resubmit\";\n if (action.id === \"submit_new_bill\") return \"submit_new_bill\";\n if (action.id === \"second_review\") return \"second_review\";\n if (action.id === \"post_payment\") return \"payment\";\n if (action.id === \"close\") return \"close\";\n if (action.id === \"reopen\") return \"reopen\";\n if (action.id === \"send_duplicate\") return \"send_duplicate\";\n if (action.id === \"report_bill_status\") return \"report_status\";\n return \"\";\n}\n\nfunction sandboxScenarios(state: string): Array<{ id: SandboxSimulationScenario; label: string; detail: string }> {\n if (state === \"submitted\") return [\n { id: \"accepted\", label: \"Accept submission\", detail: \"Add clearinghouse and payer acknowledgements.\" },\n { id: \"rejected\", label: \"Reject submission\", detail: \"Return a correctable routing rejection.\" },\n ];\n if (state === \"accepted\" || state === \"second_review\") return [\n { id: \"processed\", label: \"Process with EOR\", detail: \"Attach a synthetic payer EOR and enable payment posting.\" },\n { id: \"denied\", label: \"Deny payment\", detail: \"Attach a realistic denial EOR and enable Second Review.\" },\n ];\n return [];\n}\n\nexport function shouldShowSandboxControls(environment: BillLifecycleData[\"environment\"], enabled = false): boolean {\n return enabled && environment === \"sandbox\";\n}\n\nexport function ConnectedBillLifecycle({ appearance, actorName, claimsAdministratorHint, claimsAdministratorSources, sandboxControls = false, className, style, loadingFallback, errorFallback, onChanged, ...options }: ConnectedBillLifecycleProps): ReactElement {\n const lifecycle = useBillLifecycle(options);\n const { data } = lifecycle;\n const [tab, setTab] = useState<Tab>(\"details\");\n const [panel, setPanel] = useState<Panel>(\"\");\n const [notice, setNotice] = useState(\"\");\n const [reason, setReason] = useState(\"\");\n const [correctionError, setCorrectionError] = useState(\"\");\n const [newBillError, setNewBillError] = useState(\"\");\n const [payment, setPayment] = useState<PostBillPaymentInput>({ amount: 0, penaltyAmount: 0, interestAmount: 0, method: \"check\", checkNumber: \"\", depositDate: today(), note: \"\" });\n const [review, setReview] = useState<SubmitSecondReviewInput>({ reason: \"\", payerClaimControlNumber: \"\", disputedAmount: undefined, attachmentIds: [], route: \"ebill\" });\n const [duplicateDelivery, setDuplicateDelivery] = useState<BillDeliveryOptions | null>(null);\n const [duplicateDeliveryError, setDuplicateDeliveryError] = useState(\"\");\n const actor = actorName?.trim() ? { actorName: actorName.trim() } : {};\n const lastData = useRef<BillLifecycleData | null>(null);\n const correctionInitialBill = useMemo(() => data ? correctionBill(data) : null, [data]);\n const correctionAttachments = useMemo<BillSubmissionSourceAttachment[]>(() => data ? data.bill.attachments.map((attachment) => {\n const documentType = correctionDocumentType(attachment.documentType);\n const isW9 = documentType === \"w9\";\n return {\n id: attachment.id,\n fileName: attachment.filename,\n documentType,\n ...(attachment.description ? { description: attachment.description } : {}),\n ...(attachment.reportType ? { reportTypeCode: attachment.reportType } : {}),\n loadBlob: () => lifecycle.getAttachment(attachment.id),\n ...(isW9 ? { autoAttached: true, removable: false } : { removable: true }),\n };\n }) : [], [data, lifecycle]);\n const correctionAttentionFields = useMemo(() => data?.rejection?.issues\n ?.flatMap((issue) => issue.fieldPaths || [])\n .filter((path, index, fields) => fields.indexOf(path) === index) || [], [data]);\n\n useEffect(() => {\n if (!data || data === lastData.current) return;\n lastData.current = data;\n onChanged?.(data);\n const payerRemaining = data.remittance.payerReportedPaid === null\n ? data.bill.balanceDue\n : Math.max(0, data.remittance.payerReportedPaid - data.remittance.postedPrincipal);\n setPayment((current) => ({\n ...current,\n amount: current.amount > 0 && current.amount <= data.bill.balanceDue\n ? current.amount\n : Math.min(data.bill.balanceDue, payerRemaining || data.bill.balanceDue),\n penaltyAmount: 0,\n interestAmount: 0,\n }));\n setReview((current) => ({\n ...current,\n disputedAmount: current.disputedAmount ?? data.bill.balanceDue,\n attachmentIds: current.attachmentIds.length ? current.attachmentIds.filter((id) => data.bill.attachments.some((document) => document.id === id)) : data.bill.attachments.map((document) => document.id),\n }));\n }, [data, onChanged]);\n\n if (lifecycle.isLoading && !data) return <>{loadingFallback ?? <div className=\"mb-lifecycle-loading\">Loading bill…</div>}</>;\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 complete = async (message: string, task: () => Promise<unknown>) => {\n setNotice(\"\");\n try {\n await task();\n setPanel(\"\");\n setReason(\"\");\n setNotice(message);\n } catch {\n // useBillLifecycle keeps the server error visible.\n }\n };\n const submitCorrection = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setCorrectionError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.resubmitBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n });\n } catch (cause) {\n // A failed resubmission must never look like a success: keep the dialog\n // (and the biller's corrections) open and show the server's reason inline\n // next to the submit control, like the other action panels do.\n setCorrectionError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The corrected bill could not be resubmitted.\",\n );\n return;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"Corrected submission sent.\");\n };\n const submitNewBillFromForm = async (value: BillSubmissionFormValue) => {\n setNotice(\"\");\n setNewBillError(\"\");\n try {\n const documents = await prepareBillSubmissionDocuments({\n attachments: correctionAttachments,\n selectedIds: value.sourceAttachmentIds,\n reportTypeCodeByAttachmentId: value.sourceAttachmentReportTypes,\n uploads: value.uploads,\n ...(options.fetch ? { fetch: options.fetch } : {}),\n });\n await lifecycle.submitNewBill({\n bill: value.bill as BrowserBillCreateInput,\n ...(documents.length ? { documents } : {}),\n ...(reason.trim() ? { reason: reason.trim() } : {}),\n ...actor,\n } satisfies SubmitNewBillInput);\n } catch (cause) {\n // Same contract as the correction dialog: a failed submission must never\n // look like a success — keep the form (and the biller's edits) open and\n // show the server's reason inline next to the submit control.\n setNewBillError(\n cause instanceof Error && cause.message\n ? cause.message\n : \"The new bill could not be submitted.\",\n );\n return;\n }\n setPanel(\"\");\n setReason(\"\");\n setNotice(\"New bill submitted.\");\n };\n const loadDuplicateDelivery = () => {\n setDuplicateDeliveryError(\"\");\n if (duplicateDelivery) return;\n lifecycle.getDeliveryOptions()\n .then((options) => setDuplicateDelivery(options))\n .catch((cause) => setDuplicateDeliveryError(cause instanceof Error ? cause.message : \"Delivery options could not be loaded.\"));\n };\n const viewEor = data.lifecycle.actions.find((action) => action.id === \"view_eor\" && action.enabled);\n const supportedActions = new Set<BillLifecycleAction[\"id\"]>([\"resubmit\", \"submit_new_bill\", \"second_review\", \"post_payment\", \"close\", \"reopen\", \"send_duplicate\", \"report_bill_status\"]);\n const actions = data.lifecycle.actions.filter((action) => action.enabled && supportedActions.has(action.id));\n const showSandboxControls = shouldShowSandboxControls(data.environment, sandboxControls);\n const simulations = showSandboxControls ? sandboxScenarios(data.lifecycle.state) : [];\n const ribbonItems = data.history ? billSubmissionsRibbonFromHistory(data.history) : [];\n const statusContacts = reportBillStatusContacts(data.delivery);\n const receiptEntries = (data.history ?? []).filter((entry) => entry.kind === \"submission\" || entry.kind === \"ack\");\n const reviewDeadline = secondReviewDeadline(data.eors);\n\n return <section className={[\"mb-connected-lifecycle\", className].filter(Boolean).join(\" \")} style={mindBillAppearanceStyle(appearance, style)}>\n <style>{CONNECTED_LIFECYCLE_STYLES}</style>\n {ribbonItems.length >= 2 ? <BillSubmissionsRibbon items={ribbonItems} onSelect={() => setTab(\"history\")} {...(appearance ? { appearance } : {})} /> : null}\n {data.lifecycle.state.toLowerCase() === \"rejected\" && data.rejection\n ? <BillRejectionNotice rejection={data.rejection} submittedAt={data.lifecycle.submittedAt ?? null} {...(appearance ? { appearance } : {})} />\n : <BillLifecycleProgress state={data.lifecycle.state} nativeStatus={data.lifecycle.nativeStatus} submittedAt={data.lifecycle.submittedAt ?? null} agingDays={data.lifecycle.agingDays ?? null} {...(appearance ? { appearance } : {})} />}\n\n <header className=\"mb-lifecycle-head\">\n <div><div className=\"mb-lifecycle-title\"><h2>Bill #{data.bill.billNumber}</h2></div><p>Claim {data.injury.claimNumber || \"—\"}{lifecycle.isRefreshing ? \" · Refreshing…\" : \"\"}</p></div>\n <button type=\"button\" className=\"mb-lifecycle-button primary\" disabled={lifecycle.isMutating} onClick={() => void lifecycle.downloadPacket().catch(() => undefined)}>Download packet</button>\n </header>\n\n <div className=\"mb-lifecycle-tabs\" role=\"tablist\" aria-label=\"Bill view\">\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"details\"} onClick={() => setTab(\"details\")}>Bill details</button>\n <button type=\"button\" role=\"tab\" aria-selected={tab === \"history\"} onClick={() => setTab(\"history\")}>Bill history</button>\n </div>\n\n {tab === \"details\" ? <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">\n {(data.eors.length || data.payments.length || [\"processed\", \"denied\", \"partially_paid\"].includes(data.lifecycle.state)) ? <BillExplanationOfReview remittance={data.remittance} eors={data.eors} payments={data.payments} submittedAt={data.lifecycle.submittedAt ?? null} onOpenEor={lifecycle.openEor} {...(appearance ? { appearance } : {})} /> : null}\n\n {showSandboxControls ? <section className=\"mb-lifecycle-simulator\" aria-label=\"Sandbox lifecycle simulator\"><div><span>Sandbox demo controls</span><h3>Simulate the next payer response</h3><p>This changes sandbox data only. The host receives the result through the same lifecycle API and components partners use.</p></div>{simulations.length ? <div className=\"mb-lifecycle-simulator-actions\">{simulations.map((scenario) => <button type=\"button\" key={scenario.id} disabled={lifecycle.isMutating} onClick={() => void complete(`${scenario.label} simulated.`, () => lifecycle.simulateSandbox({ scenario: scenario.id }))}><strong>{scenario.label}</strong><span>{scenario.detail}</span></button>)}</div> : <p className=\"mb-lifecycle-simulator-idle\">No simulated payer transition is needed at this stage. Use the bill action below to continue.</p>}</section> : null}\n\n <BillReadOnlyForm data={data} onOpenAttachment={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} />\n </div> : <div className=\"mb-lifecycle-tabpanel\" role=\"tabpanel\">{data.history?.length\n ? <BillHistoryTable entries={data.history} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} />\n : <BillActivityTimeline events={data.activity} {...(appearance ? { appearance } : {})} />}</div>}\n\n {(viewEor || actions.length) ? <aside className=\"mb-lifecycle-actions-sheet\" aria-label=\"Bill actions\">\n {viewEor && data.eors[0] ? <button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => void lifecycle.openEor(data.eors[0]!).catch(() => undefined)}>{viewEor.label}</button> : null}\n {actions.map((action) => <button type=\"button\" key={action.id} className={action.primary ? \"mb-lifecycle-button primary\" : \"mb-lifecycle-button secondary\"} onClick={() => {\n const next = actionPanel(action);\n if (!next) return;\n if (next === \"resubmit\") setCorrectionError(\"\");\n if (next === \"submit_new_bill\") setNewBillError(\"\");\n if (next === \"send_duplicate\") loadDuplicateDelivery();\n if (next === \"second_review\") setReview((current) => current.reason.trim() ? current : { ...current, reason: SECOND_REVIEW_REASON_TEMPLATE });\n setPanel(next);\n }}>{action.label}</button>)}\n </aside> : null}\n\n {panel === \"resubmit\" && correctionInitialBill ? <LifecycleDialog title=\"Correct and resubmit\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Correct and resubmit</h3><p>Review the rejected snapshot, correct the highlighted information, and submit a new immutable attempt under this bill.</p></div></header>{data.environment === \"live\" ? <div className=\"mb-lifecycle-live-warning\"><strong>Live clearinghouse submission</strong><span>Resubmitting sends a real bill. Confirm the corrected information before continuing.</span></div> : null}{data.rejection ? <div className=\"mb-lifecycle-correction-reason\"><strong>{data.rejection.reason}</strong>{data.rejection.issues?.map((issue, index) => <span key={`${issue.code || \"issue\"}-${index}`}>{issue.code ? `${issue.code}: ` : \"\"}{issue.description}</span>)}</div> : null}<CorrectionVerificationContact delivery={data.delivery} /><label className=\"mb-lifecycle-correction-note\"><span>Correction note (optional)</span><textarea value={reason} placeholder=\"What changed before resubmission?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitCorrection}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionFields={correctionAttentionFields}\n attentionMessage={correctionAttentionFields.length ? \"The rejected response points to the highlighted fields. Confirm every required value before resubmitting.\" : \"Confirm the bill information below before resubmitting.\"}\n submitLabel={lifecycle.isMutating ? \"Resubmitting…\" : \"Resubmit bill\"}\n heading=\"Corrected bill information\"\n description=\"The original submission stays unchanged. This form creates the next submission attempt.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{correctionError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{correctionError}</div> : null}</section></LifecycleDialog> : null}\n\n {panel === \"submit_new_bill\" && correctionInitialBill ? <LifecycleDialog title=\"Submit New Bill\" wide onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-correction\"><header><div><h3>Submit New Bill</h3><p>This closed bill stays closed and keeps its record. Review the carried-over snapshot below and submit a fresh bill — both bills stay linked in the submissions timeline.</p></div></header><label className=\"mb-lifecycle-correction-note\"><span>Submission note (optional)</span><textarea value={reason} placeholder=\"Why is a new bill being submitted?\" onChange={(event) => setReason(event.target.value)} /></label><BillSubmissionForm\n className=\"mbsf-lifecycle-correction\"\n initialBill={correctionInitialBill}\n attachments={correctionAttachments}\n onSubmit={submitNewBillFromForm}\n onSearchClaimsAdministrators={lifecycle.searchClaimsAdministrators}\n onGetClaimsAdministratorDirectory={lifecycle.getClaimsAdministratorDirectory}\n claimsAdministratorHint={claimsAdministratorHint}\n {...(claimsAdministratorSources ? { claimsAdministratorSources } : {})}\n attentionMessage=\"Confirm every value carried over from the closed bill before submitting the new bill.\"\n submitLabel={lifecycle.isMutating ? \"Submitting…\" : \"Submit New Bill\"}\n heading=\"New bill information\"\n description=\"The closed bill stays unchanged. This form submits a fresh bill linked to it.\"\n disabled={lifecycle.isMutating}\n {...(options.getSession ? { getSession: options.getSession } : {})}\n {...(options.sessionEndpoint ? { sessionEndpoint: options.sessionEndpoint } : {})}\n {...(options.apiBaseUrl ? { apiBaseUrl: options.apiBaseUrl } : {})}\n {...(options.fetch ? { fetch: options.fetch } : {})}\n {...(appearance ? { appearance } : {})}\n />{newBillError ? <div className=\"mb-lifecycle-message error\" role=\"alert\">{newBillError}</div> : null}</section></LifecycleDialog> : null}\n\n {panel === \"second_review\" ? <LifecycleDialog title=\"Submit Second Review\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Submit Second Review</h3><p>Explain the dispute and include the payer control number and supporting documents.</p></div>{reviewDeadline ? <p className=\"mb-lifecycle-deadline-hint\">Second Review must be requested within 90 days of the denial EOR (dated {usDate(reviewDeadline.eorDate)}) — file by <strong>{usDate(reviewDeadline.deadline)}</strong>.</p> : null}<div className=\"mb-lifecycle-fields two\"><label className=\"full\"><span>Reason</span><textarea required value={review.reason} onChange={(event) => setReview((current) => ({ ...current, reason: event.target.value }))} /></label><label><span>Payer claim control number</span><input required value={review.payerClaimControlNumber} onChange={(event) => setReview((current) => ({ ...current, payerClaimControlNumber: event.target.value }))} /></label><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><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></div><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><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, ...actor }))}>{lifecycle.isMutating ? \"Submitting…\" : \"Submit Second Review\"}</button></div></section></LifecycleDialog> : null}\n\n {panel === \"payment\" ? <LifecycleDialog title=\"Post payment\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Post payment</h3><p>Record a full or partial payment, plus any penalty and interest received.</p></div><div className=\"mb-lifecycle-fields two\"><label><span>Amount applied to bill</span><input type=\"number\" min=\"0.01\" max={data.bill.balanceDue} step=\"0.01\" value={payment.amount || \"\"} onChange={(event) => setPayment((current) => ({ ...current, amount: Number(event.target.value) }))} /></label><label><span>Penalty</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.penaltyAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, penaltyAmount: Number(event.target.value) }))} /></label><label><span>Interest</span><input type=\"number\" min=\"0\" step=\"0.01\" value={payment.interestAmount || \"\"} placeholder=\"0.00\" onChange={(event) => setPayment((current) => ({ ...current, interestAmount: Number(event.target.value) }))} /></label><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><label><span>{payment.method === \"check\" ? \"Check number\" : \"EFT reference\"}</span><input value={payment.checkNumber} onChange={(event) => setPayment((current) => ({ ...current, checkNumber: event.target.value }))} /></label><label><span>Deposit date</span><input required value={payment.depositDate} placeholder=\"MM/DD/YYYY\" onChange={(event) => setPayment((current) => ({ ...current, depositDate: event.target.value }))} /></label><label className=\"full\"><span>Note (optional)</span><input value={payment.note} onChange={(event) => setPayment((current) => ({ ...current, note: event.target.value }))} /></label></div><div className=\"mb-payment-total\"><span>Total received</span><strong>{new Intl.NumberFormat(undefined, { style: \"currency\", currency: \"USD\" }).format(payment.amount + (payment.penaltyAmount ?? 0) + (payment.interestAmount ?? 0))}</strong></div><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.penaltyAmount ?? 0) < 0 || (payment.interestAmount ?? 0) < 0 || !payment.depositDate} onClick={() => void complete(\"Payment posted.\", () => lifecycle.postPayment({ ...payment, ...actor }))}>{lifecycle.isMutating ? \"Posting…\" : \"Post payment\"}</button></div></section></LifecycleDialog> : null}\n\n {(panel === \"close\" || panel === \"reopen\") ? <LifecycleDialog title={panel === \"close\" ? \"Close bill\" : \"Reopen bill\"} onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>{panel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</h3><p>{panel === \"close\" ? \"The immutable submission and history remain available.\" : \"Return this bill to active follow-up without changing the submitted snapshot.\"}</p></div><label><span>Reason</span><textarea required value={reason} onChange={(event) => setReason(event.target.value)} /></label><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 || !reason.trim()} onClick={() => void complete(panel === \"close\" ? \"Bill closed.\" : \"Bill reopened.\", () => panel === \"close\" ? lifecycle.closeBill({ reason, ...actor } satisfies CloseBillInput) : lifecycle.reopenBill({ reason, ...actor } satisfies ReopenBillInput))}>{lifecycle.isMutating ? \"Saving…\" : panel === \"close\" ? \"Close bill\" : \"Reopen bill\"}</button></div></section></LifecycleDialog> : null}\n\n {panel === \"send_duplicate\" ? (duplicateDelivery\n ? <SendRouteDialog\n title=\"Send duplicate bill\"\n delivery={duplicateDelivery}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onConfirm={(submission) => void complete(\"Duplicate bill sent.\", () => lifecycle.sendDuplicateBill({ ...submission, ...actor }))}\n />\n : <LifecycleDialog title=\"Send duplicate bill\" onClose={() => setPanel(\"\")}><section className=\"mb-lifecycle-panel\"><div><h3>Send duplicate bill</h3><p>{duplicateDeliveryError || \"Loading delivery options…\"}</p></div><div className=\"mb-lifecycle-panel-actions\"><button type=\"button\" className=\"mb-lifecycle-button secondary\" onClick={() => setPanel(\"\")}>Cancel</button>{duplicateDeliveryError ? <button type=\"button\" className=\"mb-lifecycle-button primary\" onClick={loadDuplicateDelivery}>Try again</button> : null}</div></section></LifecycleDialog>) : null}\n\n {panel === \"report_status\" ? <ReportBillStatusDialog\n {...(statusContacts.claimsAdmin ? { claimsAdmin: statusContacts.claimsAdmin } : {})}\n {...(statusContacts.billReview ? { billReview: statusContacts.billReview } : {})}\n {...(receiptEntries.length ? { receipt: <BillHistoryTable entries={receiptEntries} onOpenDocument={lifecycle.openAttachment} {...(appearance ? { appearance } : {})} /> } : {})}\n submitting={lifecycle.isMutating}\n error={lifecycle.error?.message ?? null}\n onCancel={() => setPanel(\"\")}\n onSave={(input) => void complete(\"Bill status reported.\", () => lifecycle.reportBillStatus({ ...input, ...actor }))}\n {...(appearance ? { appearance } : {})}\n /> : 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-lifecycle-simulator{display:grid;gap:14px;padding:18px;border:1px solid #b8dadd;border-radius:var(--mb-radius,14px);background:#f2fbfb}.mb-lifecycle-simulator>div:first-child>span{color:var(--mb-accent);font-size:.72rem;font-weight:850;letter-spacing:.09em;text-transform:uppercase}.mb-lifecycle-simulator h3{margin:3px 0 0;font-size:1.05rem}.mb-lifecycle-simulator p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-simulator-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.mb-lifecycle-simulator-actions button{min-height:76px;border:1px solid #a9cccf;border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;padding:12px 14px;text-align:left;font:inherit}.mb-lifecycle-simulator-actions button:hover{border-color:var(--mb-accent);box-shadow:0 3px 14px rgba(23,108,112,.1)}.mb-lifecycle-simulator-actions button:disabled{cursor:not-allowed;opacity:.55}.mb-lifecycle-simulator-actions button strong,.mb-lifecycle-simulator-actions button span{display:block}.mb-lifecycle-simulator-actions button span{margin-top:3px;color:var(--mb-muted);font-size:.83rem}.mb-lifecycle-simulator-idle{padding:10px 12px;border-radius:8px;background:rgba(255,255,255,.72)}\n.mb-connected-lifecycle{--mb-accent:#176c70;--mb-text:#17282d;--mb-muted:#607176;--mb-border:#d7e0df;--mb-soft:#f4f7f6;--mb-surface:#fff;display:grid;gap:18px;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-head{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-title{display:flex;align-items:center;flex-wrap:wrap;gap:10px}.mb-lifecycle-title h2{margin:0;font-size:1.7rem}.mb-lifecycle-head p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-tabs{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--mb-border);border-radius:12px;background:var(--mb-surface);padding:6px}.mb-lifecycle-tabs button{min-height:46px;border:0;border-radius:8px;background:transparent;color:var(--mb-muted);font:inherit;font-size:1rem;font-weight:750;cursor:pointer}.mb-lifecycle-tabs button[aria-selected=true]{background:var(--mb-accent);color:white}.mb-lifecycle-tabpanel{display:grid;gap:18px}.mb-lifecycle-button{min-height:40px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);cursor:pointer;font:inherit;font-weight:750;padding:9px 14px}.mb-lifecycle-button.primary{border-color:var(--mb-accent);background:var(--mb-accent);color:var(--mb-accent-contrast,#fff)}.mb-lifecycle-button:disabled{cursor:not-allowed;opacity:.5}.mb-lifecycle-actions-sheet{position:sticky;bottom:12px;z-index:24;display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:9px;padding:10px;border:1px solid var(--mb-border);border-radius:12px;background:color-mix(in srgb,var(--mb-surface) 94%,transparent);box-shadow:0 10px 34px rgba(18,35,43,.16);backdrop-filter:blur(12px)}.mb-lifecycle-card,.mb-lifecycle-panel{padding:20px;border:1px solid var(--mb-border);border-radius:var(--mb-radius,14px);background:var(--mb-surface)}.mb-lifecycle-card header{display:flex;align-items:center;justify-content:space-between;gap:20px}.mb-lifecycle-card h3,.mb-lifecycle-panel h3{margin:0;font-size:1.08rem}.mb-lifecycle-card p,.mb-lifecycle-panel p{margin:3px 0 0;color:var(--mb-muted)}.mb-lifecycle-card header>span{display:grid;place-items:center;min-width:28px;height:28px;border-radius:999px;background:var(--mb-soft);font-weight:750}.mb-lifecycle-documents{list-style:none;margin:14px 0 0;padding:0}.mb-lifecycle-documents li{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 0;border-top:1px solid var(--mb-border)}.mb-lifecycle-documents li>div{display:grid;gap:3px;min-width:0}.mb-lifecycle-documents li span{color:var(--mb-muted);font-size:.85rem}.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(100dvh - 40px);overflow:auto;outline:0}.mb-lifecycle-dialog-close{position:absolute;z-index:1;top:12px;right:12px;width:44px;height:44px;border:1px solid var(--mb-border);border-radius:10px;background:var(--mb-surface);color:var(--mb-text);cursor:pointer;font:24px/1 inherit}.mb-lifecycle-panel{display:grid;gap:17px;padding-top:24px;box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-panel label{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-panel label small{color:var(--mb-muted);font-weight:500}.mb-lifecycle-panel input,.mb-lifecycle-panel select,.mb-lifecycle-panel textarea{width:100%;min-height:44px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px}.mb-lifecycle-panel textarea{min-height:100px;resize:vertical}.mb-lifecycle-fields{display:grid;gap:13px}.mb-lifecycle-fields.two{grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-fields .full{grid-column:1/-1}.mb-lifecycle-panel-actions{display:flex;justify-content:flex-end;gap:8px}.mb-lifecycle-packet{display:grid;gap:0;margin:0;padding:0;border:0}.mb-lifecycle-packet legend{margin-bottom:7px;font-size:.85rem;font-weight:800}.mb-lifecycle-packet>label{display:grid;grid-template-columns:auto 1fr 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-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}\n.mb-lifecycle-dialog.wide{width:min(1280px,100%)}.mb-lifecycle-correction{display:grid;gap:16px;padding:22px;border-radius:var(--mb-radius,14px);background:var(--mb-surface);box-shadow:0 24px 70px rgba(18,35,43,.22)}.mb-lifecycle-correction>header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding-right:56px}.mb-lifecycle-correction h3{margin:0;font-size:1.2rem}.mb-lifecycle-correction header p{margin:4px 0 0;color:var(--mb-muted)}.mb-lifecycle-live-warning,.mb-lifecycle-correction-reason,.mb-lifecycle-correction-contact{display:grid;gap:4px;padding:13px 15px;border-radius:10px}.mb-lifecycle-live-warning{border-left:4px solid #b97716;background:#fff8e8;color:#6f470e}.mb-lifecycle-correction-reason{border-left:4px solid #c5443f;background:#fff2f1;color:#812d29}.mb-lifecycle-correction-contact{border:1px solid color-mix(in srgb,var(--mb-accent) 35%,var(--mb-border));background:color-mix(in srgb,var(--mb-accent) 7%,var(--mb-surface))}.mb-lifecycle-correction-contact dl{display:grid;gap:7px;margin:8px 0 0}.mb-lifecycle-correction-contact dl>div{display:grid;grid-template-columns:58px minmax(0,1fr);gap:10px}.mb-lifecycle-correction-contact dt{color:var(--mb-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.mb-lifecycle-correction-contact dd{min-width:0;margin:0;overflow-wrap:anywhere}.mb-lifecycle-correction-contact a{color:var(--mb-accent);text-underline-offset:2px}.mb-lifecycle-correction-note{display:grid;gap:6px;font-size:.85rem;font-weight:750}.mb-lifecycle-correction-note textarea{min-height:76px;border:1px solid var(--mb-border);border-radius:var(--mb-control-radius,8px);background:var(--mb-input,#fff);color:var(--mb-text);font:inherit;padding:10px 12px;resize:vertical}\n.mb-payment-total{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:9px;background:var(--mb-soft)}.mb-payment-total strong{font-size:1.12rem}\n.mb-lifecycle-deadline-hint{margin:0;padding:10px 12px;border-radius:9px;background:color-mix(in srgb,var(--mb-warning,#8a5c17) 10%,var(--mb-surface));color:var(--mb-warning,#8a5c17);font-size:.85rem}\n@media(max-width:700px){.mb-lifecycle-head,.mb-lifecycle-card header{align-items:stretch;flex-direction:column}.mb-lifecycle-head>.mb-lifecycle-button{width:100%}.mb-lifecycle-actions-sheet{bottom:calc(var(--mb-host-bottom-offset,72px) + env(safe-area-inset-bottom) + 8px);grid-template-columns:repeat(2,minmax(0,1fr))}.mb-lifecycle-actions-sheet .mb-lifecycle-button:last-child:nth-child(odd){grid-column:1/-1}.mb-lifecycle-fields.two{grid-template-columns:1fr}.mb-lifecycle-fields .full{grid-column:auto}.mb-lifecycle-dialog-backdrop{align-items:end;padding:0}.mb-lifecycle-dialog{max-height:calc(100dvh - 12px)}.mb-lifecycle-dialog .mb-lifecycle-panel,.mb-lifecycle-correction{border-radius:18px 18px 0 0}.mb-lifecycle-correction{padding:18px 12px calc(18px + env(safe-area-inset-bottom))}.mb-lifecycle-correction>header{align-items:stretch;flex-direction:column;padding-right:56px}.mb-lifecycle-correction-contact dl>div{grid-template-columns:1fr;gap:2px}.mb-lifecycle-tabs button{font-size:.9rem}.mb-lifecycle-title h2{font-size:1.4rem}}\n`;\n"],"mappings":";;;AAEA,OAAO;AAEP,SAAS,eAAe,aAAAA,aAAW,UAAAC,eAAc;;;ACkB1C,IAAM,uBAAuB;AAAA,EAClC,UAAU;AAAA,IACR,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AAAA,EACA,iBAAiB;AAAA,IACf,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,YAAY;AAAA,EACd;AACF;AAEO,SAAS,0BACd,YACyB;AACzB,QAAM,SAAS,YAAY,UAAU;AACrC,SAAO,EAAE,GAAG,qBAAqB,MAAM,GAAG,GAAG,YAAY,OAAO;AAClE;AAEO,SAAS,wBACd,YACA,OACe;AACf,QAAM,WAAW,0BAA0B,UAAU;AACrD,SAAO;AAAA,IACL,eAAe,SAAS;AAAA,IACxB,wBAAwB,SAAS;AAAA,IACjC,aAAa,SAAS;AAAA,IACtB,cAAc,SAAS;AAAA,IACvB,eAAe,SAAS;AAAA,IACxB,aAAa,SAAS;AAAA,IACtB,gBAAgB,SAAS;AAAA,IACzB,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,IACtB,eAAe,SAAS;AAAA,IACxB,uBAAuB,SAAS;AAAA,IAChC,eAAe,SAAS;AAAA,IACxB,eAAe,SAAS;AAAA,IACxB,gBAAgB,SAAS;AAAA,IACzB,gBAAgB,SAAS;AAAA,IACzB,GAAG;AAAA,EACL;AACF;;;ACzIA,SAAS,mCAAmC;AAI5C,SAAS,WAAW,OAAO,SAAS,QAAQ,gBAAgB;AAwcjC,SAAqF,UAArF,KAAqF,YAArF;AAtY3B,IAAM,uBAA2C;AAAA,EAC/C,MAAM;AAAA,EACN,WAAW,CAAC;AAAA,EACZ,OAAO;AAAA,EACP,QAAQ;AACV;AAEA,SAAS,qBAAqB,MAAmC;AAC/D,SAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,UAAU,WAAW,KAAK,KAAK,UAAU,KAAK,CAAC,KAAK,eAAe,CAAC,KAAK,kBAAkB,CAAC,KAAK,UAAU,CAAE,KAAK,mBAAmB;AACxK;AAGO,SAAS,4BACd,OACsB;AACtB,QAAM,UAAU,MACb,OAAO,CAAC,SAAS,CAAC,qBAAqB,IAAI,CAAC,EAC5C,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,KAAK,SAAS,EAAE,EAAE;AAE9D,SAAO,QAAQ,SAAS,KACpB,CAAC,GAAG,SAAS,EAAE,GAAG,sBAAsB,WAAW,CAAC,EAAE,CAAC,IACvD;AACN;AAoNA,IAAM,yBAAoD;AAAA,EACxD,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,UAAU;AACZ;AACA,IAAM,kBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,WAAW;AAAA,EACX,KAAK;AACP;AACA,IAAM,iBAAqC;AAAA,EACzC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AAAA,EACL,SAAS;AACX;AAEA,IAAM,kBAA0D;AAAA,EAC9D,cAAc;AAAA,EACd,uBAAuB;AAAA,EACvB,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,wBAAwB;AAAA,EACxB,IAAI;AAAA,EACJ,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,OAAO;AACT;AAEA,IAAM,YAAY,CAAC,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,MAAK,IAAI;AACjR,IAAM,aAAa;AAAA,EACjB,CAAC,SAAS,8BAA8B;AAAA,EACxC,CAAC,SAAS,oCAAoC;AAAA,EAC9C,CAAC,SAAS,gCAAgC;AAAA,EAC1C,CAAC,SAAS,mCAAmC;AAAA,EAC7C,CAAC,SAAS,yBAAyB;AAAA,EACnC,CAAC,SAAS,2BAA2B;AAAA,EACrC,CAAC,SAAS,uBAAuB;AACnC;AACA,IAAM,YAAY;AAAA,EAChB,CAAC,MAAM,4BAA4B;AAAA,EAAG,CAAC,MAAM,sBAAsB;AAAA,EACnE,CAAC,MAAM,gCAAgC;AAAA,EAAG,CAAC,MAAM,mCAAmC;AAAA,EACpF,CAAC,MAAM,yCAAyC;AAAA,EAAG,CAAC,MAAM,uBAAuB;AAAA,EACjF,CAAC,MAAM,qBAAqB;AAC9B;AAEA,IAAM,8BAA8B,oBAAI,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC;AAC9D,IAAM,iBAAoD;AAAA,EACxD,MAAM,CAAC,SAAS,SAAS,OAAO;AAAA,EAChC,MAAM,CAAC,SAAS,OAAO;AAAA,EACvB,MAAM,CAAC,SAAS,SAAS,OAAO;AAAA,EAChC,MAAM,CAAC,SAAS,SAAS,SAAS,SAAS,OAAO;AAAA,EAClD,MAAM,CAAC,SAAS,SAAS,OAAO;AAAA,EAChC,MAAM,CAAC,SAAS,SAAS,OAAO;AAAA,EAChC,MAAM,CAAC,SAAS,SAAS,OAAO;AAClC;AAEA,SAAS,QAAQ,MAAuC;AACtD,QAAM,WAAW,KAAK,KAAK;AAC3B,QAAM,YAAY,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,KAAK;AACtD,SAAO;AAAA,IACL,eAAe,KAAK,OAAO,iBAAiB;AAAA,IAC5C,iBAAiB,KAAK,OAAO,mBAAmB;AAAA,IAChD,kBAAkB,KAAK,QAAQ,aAAa,UAAU,CAAC,KAAK;AAAA,IAC5D,mBAAmB,KAAK,QAAQ,eAAe,UAAU,SAAS,IAAI,UAAU,MAAM,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI;AAAA,IACzG,iBAAiB,KAAK,QAAQ,aAAa,UAAU,SAAS,IAAK,UAAU,GAAG,EAAE,KAAK,KAAM;AAAA,IAC7F,YAAY,KAAK,QAAQ,OAAO;AAAA,IAChC,aAAa,KAAK,OAAO,eAAe;AAAA,IACxC,UAAU,KAAK,OAAO,YAAY;AAAA,IAClC,KAAK,KAAK,OAAO,OAAO;AAAA,IACxB,eAAe,KAAK,OAAO,iBAAiB;AAAA,IAC5C,kBAAkB,QAAQ,KAAK,OAAO,gBAAgB;AAAA,IACtD,WAAW,KAAK,OAAO,aAAa;AAAA,IACpC,KAAK,KAAK,KAAK,OAAO;AAAA,IACtB,QAAQ,KAAK,KAAK,UAAU;AAAA,IAC5B,qBAAqB,KAAK,KAAK,uBAAuB;AAAA,IACtD,iBAAiB;AAAA,MACf,GAAG;AAAA,MACH,GAAI,UAAU,mBAAmB,CAAC;AAAA,IACpC;AAAA,IACA,WAAW,EAAE,GAAG,iBAAiB,GAAI,UAAU,qBAAqB,CAAC,EAAG;AAAA,IACxE,UAAU,EAAE,GAAG,gBAAgB,GAAI,UAAU,kBAAkB,CAAC,EAAG;AAAA,IACnE,WAAW,4BAA4B,KAAK,KAAK,SAAS;AAAA,EAC5D;AACF;AAEO,SAAS,yBACd,OACqB;AACrB,SAAO,4BAA4B;AAAA,IACjC,eAAe,MAAM;AAAA,IACrB,kBAAkB;AAAA,MAChB,WAAW,MAAM,iBAAiB,KAAK;AAAA,MACvC,GAAI,MAAM,kBAAkB,KAAK,IAAI,EAAE,YAAY,MAAM,kBAAkB,KAAK,EAAE,IAAI,CAAC;AAAA,MACvF,UAAU,MAAM,gBAAgB,KAAK;AAAA,MACrC,GAAI,MAAM,aAAa,EAAE,KAAK,MAAM,WAAW,IAAI,CAAC;AAAA,IACtD;AAAA,IACA,iBAAiB;AAAA,MACf,GAAI,MAAM,YAAY,KAAK,IAAI,EAAE,aAAa,MAAM,YAAY,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5E,GAAI,MAAM,SAAS,KAAK,IAAI,EAAE,UAAU,MAAM,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,MACnE,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC;AAAA,MACtC,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,MACpE,kBAAkB,MAAM;AAAA,MACxB,GAAI,MAAM,UAAU,KAAK,IAAI,EAAE,WAAW,MAAM,UAAU,KAAK,EAAE,YAAY,EAAE,QAAQ,QAAQ,EAAE,EAAE,IAAI,CAAC;AAAA,IAC1G;AAAA,IACA,KAAK,MAAM;AAAA,IACX,QAAQ,MAAM,UAAU;AAAA,IACxB,qBAAqB,MAAM,oBAAoB,KAAK,KAAK;AAAA,IACzD,iBAAiB,EAAE,GAAG,MAAM,gBAAgB;AAAA,IAC5C,mBAAmB,EAAE,GAAG,MAAM,UAAU;AAAA,IACxC,gBAAgB,EAAE,GAAG,MAAM,SAAS;AAAA,IACpC,WAAW,MAAM,UAAU,OAAO,CAAC,SAAS,KAAK,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,MAAM,WAAW,OAAO,QAAQ,aAAa,gBAAgB,kBAAkB,OAAO;AAAA,MAC7J,GAAI,KAAK,EAAE,GAAG,IAAI,CAAC;AAAA,MACnB,MAAM,KAAK,KAAK,EAAE,YAAY;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3B,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,MACrC,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,MAC3C,GAAI,mBAAmB,SAAS,EAAE,kBAAkB,IAAI,CAAC;AAAA,IAC3D,EAAE;AAAA,EACJ,CAAC;AACH;AAEA,SAAS,MAAM,OAAuB;AACpC,SAAO,IAAI,KAAK,aAAa,SAAS;AAAA,IACpC,OAAO;AAAA,IACP,UAAU;AAAA,EACZ,CAAC,EAAE,OAAO,KAAK;AACjB;AAEA,SAAS,MAAM;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASiB;AACf,SACE,qBAAC,WAAM,WAAU,mBACf;AAAA,yBAAC,UACE;AAAA;AAAA,MAAO,WAAW,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE,IAAU;AAAA,MAAM,WAAW,iCAAE;AAAA;AAAA,QAAC,oBAAC,WAAM,sBAAQ;AAAA,SAAQ,IAAM;AAAA,OAC1I;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAa;AAAA,QACb,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA;AAAA,IAClD;AAAA,IACC,OAAO,oBAAC,WAAM,WAAU,kBAAkB,gBAAK,IAAW;AAAA,KAC7D;AAEJ;AASA,SAAS,SAAS,EAAE,OAAO,OAAO,SAAS,UAAU,aAAa,UAAU,UAAU,KAAK,GAS1E;AACf,QAAM,SAAS,MAAM;AACrB,QAAM,OAAO,OAAuB,IAAI;AACxC,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,CAAC;AACtC,QAAM,WAAW,QAAQ,MAAM;AAC7B,UAAM,QAAQ,MAAM,KAAK,EAAE,YAAY;AACvC,WAAO,QAAQ,OAAO,CAAC,WAAW,CAAC,SAAS,OAAO,MAAM,YAAY,EAAE,SAAS,KAAK,KAAK,OAAO,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE;AAAA,EACnJ,GAAG,CAAC,SAAS,KAAK,CAAC;AACnB,YAAU,MAAM;AACd,UAAM,QAAQ,CAAC,UAAsB;AACnC,UAAI,CAAC,KAAK,SAAS,SAAS,MAAM,MAAc,EAAG,SAAQ,KAAK;AAAA,IAClE;AACA,aAAS,iBAAiB,aAAa,KAAK;AAC5C,WAAO,MAAM,SAAS,oBAAoB,aAAa,KAAK;AAAA,EAC9D,GAAG,CAAC,CAAC;AACL,QAAM,SAAS,CAAC,WAAwB;AACtC,aAAS,OAAO,OAAO,MAAM;AAC7B,YAAQ,KAAK;AACb,cAAU,CAAC;AAAA,EACb;AACA,QAAM,UAAU,CAAC,UAA2C;AAC1D,QAAI,MAAM,QAAQ,aAAa;AAAE,YAAM,eAAe;AAAG,cAAQ,IAAI;AAAG,gBAAU,CAACC,WAAU,KAAK,IAAIA,SAAQ,GAAG,SAAS,SAAS,CAAC,CAAC;AAAA,IAAG;AACxI,QAAI,MAAM,QAAQ,WAAW;AAAE,YAAM,eAAe;AAAG,gBAAU,CAACA,WAAU,KAAK,IAAIA,SAAQ,GAAG,CAAC,CAAC;AAAA,IAAG;AACrG,QAAI,MAAM,QAAQ,WAAW,QAAQ,SAAS,MAAM,GAAG;AAAE,YAAM,eAAe;AAAG,aAAO,SAAS,MAAM,CAAC;AAAA,IAAG;AAC3G,QAAI,MAAM,QAAQ,SAAU,SAAQ,KAAK;AAAA,EAC3C;AACA,SAAO,qBAAC,SAAI,WAAU,mBAAkB,KAAK,MAC3C;AAAA,yBAAC,WAAM,WAAU,mBACf;AAAA,2BAAC,UAAM;AAAA;AAAA,QAAO,WAAW,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE,IAAU;AAAA,SAAK;AAAA,MAClG;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,qBAAkB;AAAA,UAClB,iBAAe;AAAA,UACf,iBAAe,QAAQ,SAAS,SAAS;AAAA,UACzC,yBAAuB,QAAQ,SAAS,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,KAAK;AAAA,UAC1E,MAAM,QAAQ;AAAA,UACd,cAAa;AAAA,UACb,kBAAe;AAAA,UACf,iBAAc;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,MAAM,QAAQ,IAAI;AAAA,UAC3B,WAAW;AAAA,UACX,UAAU,CAAC,UAAU;AAAE,qBAAS,MAAM,OAAO,KAAK;AAAG,oBAAQ,IAAI;AAAG,sBAAU,CAAC;AAAA,UAAG;AAAA;AAAA,MACpF;AAAA,OACF;AAAA,IACC,QAAQ,SAAS,SAAS,oBAAC,QAAG,IAAI,QAAQ,MAAK,WAAU,WAAU,wBACjE,mBAAS,IAAI,CAAC,QAAQ,UAAU,oBAAC,QAAG,IAAI,GAAG,MAAM,IAAI,KAAK,IAAI,MAAK,UAAS,iBAAe,UAAU,QACpG,+BAAC,YAAO,MAAK,UAAS,WAAW,UAAU,SAAS,WAAW,IAAI,aAAa,CAAC,UAAU,MAAM,eAAe,GAAG,SAAS,MAAM,OAAO,MAAM,GAC7I;AAAA,2BAAC,UAAK,WAAU,yBAAwB;AAAA,4BAAC,YAAQ,iBAAO,OAAM;AAAA,QAAU,OAAO,QAAQ,oBAAC,QAAI,iBAAO,OAAM,IAAQ;AAAA,SAAK;AAAA,MAAQ,OAAO,SAAS,oBAAC,UAAM,iBAAO,QAAO,IAAU;AAAA,OAC/K,KAHiH,GAAG,OAAO,KAAK,IAAI,KAAK,EAI3I,CAAK,GACP,IAAQ;AAAA,KACV;AACF;AAEA,SAAS,cAAc,EAAE,OAAO,OAAO,UAAU,UAAU,SAAS,GAA8H;AAChM,SAAO;AAAA,IAAC;AAAA;AAAA,MACN;AAAA,MACA;AAAA,MACA,UAAU,CAAC,SAAS,SAAS,KAAK,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC;AAAA,MAC3D,SAAS,UAAU,IAAI,CAAC,WAAW,EAAE,OAAO,OAAO,OAAO,MAAM,EAAE;AAAA,MACjE,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,MAC7C,GAAI,aAAa,SAAY,CAAC,IAAI,EAAE,SAAS;AAAA,MAC9C,MAAK;AAAA;AAAA,EACP;AACF;AAEA,SAAS,YAAY,OAA2C;AAC9D,QAAM,YAAY,IAAI,IAAI,MAAM,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC;AACjE,SAAO,UAAU,IAAI,IAAI,IAAI,QAAQ,UAAU,IAAI,IAAI,IAAI,cAAc;AAC3E;AAEA,SAAS,uBAAuB,QAAsB,MAAwB;AAC5E,MAAI,SAAS,QAAS,QAAO,CAAC,IAAI;AAClC,MAAI,WAAW,SAAS,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,SAAS,IAAI,EAAG,QAAO,CAAC,IAAI;AACzF,MAAI,WAAW,SAAS,CAAC,SAAS,SAAS,OAAO,EAAE,SAAS,IAAI,EAAG,QAAO,CAAC,IAAI;AAChF,MAAI,WAAW,aAAa;AAC1B,QAAI,SAAS,QAAS,QAAO,CAAC,IAAI;AAClC,QAAI,CAAC,SAAS,SAAS,OAAO,EAAE,SAAS,IAAI,EAAG,QAAO,CAAC,IAAI;AAAA,EAC9D;AACA,SAAO,CAAC;AACV;AAEA,SAAS,sBAAsB,UAAkB,MAAuB;AACtE,SAAO,CAAC,SAAS,eAAe,QAAQ,GAAG,SAAS,IAAI,KAAK;AAC/D;AAEA,SAAS,YAAY,OAA6B,QAA4C;AAC5F,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAM,YAAY,KAAK,UAAU;AAAA,MAC/B,CAAC,UAAU,CAAC,4BAA4B,IAAI,KAAK,KAAK,sBAAsB,OAAO,KAAK,IAAI;AAAA,IAC9F;AACA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,uBAAuB,QAAQ,KAAK,IAAI,GAAG,GAAG,SAAS,CAAC,CAAC;AAAA,IACtF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,OAAO;AAAA,EACP,oBAAoB,EAAE,OAAO,QAAQ;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAsC;AACpC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,MAAM,QAAQ,IAAI,CAAC;AACtD,QAAM,CAAC,YAAY,aAAa,IAAI;AAAA,IAClC,MAAM,KAAK,OAAO,mBAAmB;AAAA,EACvC;AACA,QAAM,CAAC,cAAc,eAAe,IAAI,SAA4B,CAAC,CAAC;AACtE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAqC,IAAI;AACvF,QAAM,CAAC,YAAY,aAAa,IAAI,SAA8B,iBAAiB;AACnF,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAsB,IAAI;AAClD,QAAM,CAAC,cAAc,eAAe,IAClC,SAAiC,OAAO;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgD,EAAE;AAC1E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,EAAE;AACrC,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,EAAE;AACvC,QAAM,YAAY,SAAS,gBAAgB,KAAK,KAAK,WAAW,iBAAiB,CAAC;AAElF,YAAU,MAAM;AACd,aAAS,QAAQ,IAAI,CAAC;AACtB,kBAAc,KAAK,OAAO,mBAAmB,EAAE;AAAA,EACjD,GAAG,CAAC,IAAI,CAAC;AAET,YAAU,MAAM;AACd,UAAM,QAAQ,WAAW,KAAK;AAC9B,UAAM,cAAc,MAAM,YAAY,KAAK;AAC3C,QACE,CAAC,gCACA,MAAM,SAAS,KAAK,YAAY,SAAS,GAC1C;AACA,sBAAgB,CAAC,CAAC;AAClB,mBAAa,KAAK;AAClB;AAAA,IACF;AACA,QAAI,UAAU;AACd,UAAM,QAAQ,OAAO,WAAW,MAAM;AACpC,mBAAa,IAAI;AACjB,WAAK,6BAA6B,OAAO,WAAW,EACjD,KAAK,CAAC,YAAY;AACjB,YAAI,CAAC,QAAS;AACd,wBAAgB,OAAO;AACvB,cAAM,iBAAiB,QAAQ;AAAA,UAC7B,CAAC,UAAU,MAAM,eAAe,MAAM,eAAe;AAAA,QACvD;AACA,YAAI,CAAC,MAAM,iBAAiB,gBAAgB;AAC1C,mBAAS,CAAC,kBAAkB;AAAA,YAC1B,GAAG;AAAA,YACH,eAAe,eAAe;AAAA,YAC9B,iBAAiB,eAAe;AAAA,UAClC,EAAE;AACF,wBAAc,eAAe,IAAI;AACjC;AAAA,YACE;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,YAAI,SAAS;AACX,0BAAgB,CAAC,CAAC;AAClB;AAAA,YACE,iBAAiB,QACb,MAAM,UACN;AAAA,UACN;AAAA,QACF;AAAA,MACF,CAAC,EACA,QAAQ,MAAM;AACb,YAAI,QAAS,cAAa,KAAK;AAAA,MACjC,CAAC;AAAA,IACL,GAAG,GAAG;AACN,WAAO,MAAM;AACX,gBAAU;AACV,aAAO,aAAa,KAAK;AAAA,IAC3B;AAAA,EACF,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,aAAa;AAAA,IACjC,CAAC,UAAU,MAAM,OAAO,MAAM;AAAA,EAChC;AAEA,QAAM,iBACJ,CAAC,MAAM,aACP,eAAe,KAAK,MAAM,UAAU,QAAQ,UAAU,EAAE,CAAC;AAC3D,QAAM,WAAW,QAAQ,MAAM;AAC7B,UAAM,SAAmB,CAAC;AAC1B,QAAI,CAAC,MAAM,iBAAiB,KAAK,KAAK,CAAC,MAAM,gBAAgB,KAAK,EAAG,QAAO,KAAK,cAAc;AAC/F,QAAI,CAAC,MAAM,cAAe,QAAO,KAAK,sBAAsB;AAC5D,QAAI,CAAC,MAAM,YAAY,KAAK,EAAG,QAAO,KAAK,cAAc;AACzD,QAAI,CAAC,MAAM,IAAK,QAAO,KAAK,gBAAgB;AAC5C,QAAI,CAAC,eAAgB,QAAO,KAAK,yBAAyB;AAC1D,QAAI,KAAK,KAAK,gBAAgB,eAAe,CAAC,MAAM,IAAK,QAAO,KAAK,iBAAiB;AACtF,QAAI,CAAC,MAAM,gBAAgB,KAAK,KAAK,EAAG,QAAO,KAAK,eAAe;AACnE,QAAI,CAAC,MAAM,gBAAgB,MAAM,KAAK,EAAG,QAAO,KAAK,QAAQ;AAC7D,QAAI,CAAC,MAAM,gBAAgB,IAAI,KAAK,EAAG,QAAO,KAAK,aAAa;AAChE,QAAI,CAAC,MAAM,UAAU,KAAK,KAAK,KAAK,CAAC,MAAM,UAAU,IAAI,KAAK,EAAG,QAAO,KAAK,mBAAmB;AAChG,QAAI,CAAC,CAAC,MAAM,SAAS,MAAM,MAAM,SAAS,QAAQ,MAAM,SAAS,MAAM,MAAM,SAAS,OAAO,MAAM,SAAS,GAAG,EAAE,MAAM,CAAC,UAAU,MAAM,KAAK,CAAC,EAAG,QAAO,KAAK,kBAAkB;AAC/K,UAAM,iBAAiB,MAAM,UAAU,OAAO,CAAC,SAAS,KAAK,KAAK,KAAK,CAAC;AACxE,QAAI,CAAC,eAAe,UAAU,eAAe,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,EAAG,QAAO,KAAK,sBAAsB;AAChH,QAAI,KAAK,KAAK,gBAAgB,kBAAkB,eAAe,KAAK,CAAC,SAAS,CAAC,KAAK,eAAe,KAAK,UAAU,CAAC,GAAG;AACpH,aAAO,KAAK,iDAAiD;AAAA,IAC/D;AACA,WAAO;AAAA,EACT,GAAG,CAAC,gBAAgB,KAAK,KAAK,aAAa,KAAK,CAAC;AACjD,QAAM,YAAY,SAAS,WAAW;AAEtC,QAAM,wBAAwB,CAC5B,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,iBAAiB,EAAE,GAAG,QAAQ,iBAAiB,CAAC,GAAG,GAAG,MAAM;AAAA,EAC9D,EAAE;AACJ,QAAM,kBAAkB,CACtB,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,WAAW,EAAE,GAAG,QAAQ,WAAW,CAAC,GAAG,GAAG,MAAM;AAAA,EAClD,EAAE;AACJ,QAAM,iBAAiB,CACrB,KACA,UAEA,SAAS,CAAC,aAAa;AAAA,IACrB,GAAG;AAAA,IACH,UAAU,EAAE,GAAG,QAAQ,UAAU,CAAC,GAAG,GAAG,MAAM;AAAA,EAChD,EAAE;AAEJ,iBAAe,IAAI,QAA2B,MAA2B;AACvE,YAAQ,MAAM;AACd,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,KAAK;AACX,gBAAU,WAAW,SAAS,mBAAmB,iBAAiB;AAAA,IACpE,SAAS,OAAO;AACd;AAAA,QACE,iBAAiB,QACb,MAAM,UACN;AAAA,MACN;AAAA,IACF,UAAE;AACA,cAAQ,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,aAAa,CAAC,UAAqB;AACvC,UAAM,eAAe;AACrB,QAAI,SAAS,cAAc;AACzB,UAAI,CAAC,UAAW;AAChB,WAAK,IAAI,UAAU,MAAM,SAAS,yBAAyB,KAAK,GAAG,iBAAiB,CAAC;AACrF;AAAA,IACF;AACA,QAAI,CAAC,OAAQ;AACb,SAAK,IAAI,QAAQ,YAAY;AAC3B,YAAM,UAAU,MAAM,OAAO,yBAAyB,KAAK,CAAC;AAC5D,UAAI,QAAS,UAAS,QAAQ,OAAO,CAAC;AAAA,IACxC,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,YAAY;AAC7B,QAAI,CAAC,qBAAsB;AAC3B,oBAAgB,IAAI;AACpB,aAAS,EAAE;AACX,QAAI;AACF,YAAM,OAAO,MAAM,qBAAqB;AACxC,yBAAmB,IAAI;AACvB,YAAM,cAAc,KAAK,eAAe,KAAK,QAAQ,CAAC;AACtD,UAAI,CAAC,YAAa,OAAM,IAAI,MAAM,gDAAgD;AAClF,oBAAc,EAAE,OAAO,YAAY,MAAM,CAAC;AAC1C,oBAAc,IAAI;AAAA,IACpB,SAAS,OAAO;AACd,eAAS,iBAAiB,QAAQ,MAAM,UAAU,sCAAsC;AAAA,IAC1F,UAAE;AACA,sBAAgB,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,mBAAmB,iBAAiB,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,WAAW,KAAK;AACpG,QAAM,mBAAmB,WAAW,UAAU,QAC1C,eACA,WAAW,UAAU,UACnB,kBACA,WAAW,UAAU,SACnB,oBACA;AACR,QAAM,mBAAmB,WAAW,UAAU,QAC1C,WAAW,aAAa,aAAa,kBAAkB,UAAU,iBAAiB,SAAS,aAAa,KACxG,WAAW,UAAU,UACnB,WAAW,aAAa,SAAS,kBAAkB,UAAU,iBAAiB,SAAS,eAAe,KACtG,WAAW,UAAU,SACnB,WAAW,aAAa,kBAAkB,kBAAkB,UAAU,iBAAiB,SAAS,kBAAkB,KAClH;AACR,QAAM,iBAAiB,CAAC,UAAkB,cAAc,CAAC,YAAY;AACnE,UAAM,cAAc,QAAQ,UAAU,QAClC,EAAE,WAAW,MAAM,IACnB,QAAQ,UAAU,UAChB,EAAE,OAAO,MAAM,IACf,EAAE,gBAAgB,MAAM;AAC9B,WAAO,EAAE,GAAG,SAAS,YAAY;AAAA,EACnC,CAAC;AACD,QAAM,eAAe,MAAM,IAAI,UAAU,YAAY;AACnD,UAAM,SAAS,yBAAyB,KAAK,GAAG,UAAU;AAC1D,kBAAc,KAAK;AAAA,EACrB,CAAC;AAED,QAAM,SAAS,YAAY;AACzB,QAAI,CAAC,KAAM;AACX,YAAQ,YAAY;AACpB,aAAS,EAAE;AACX,QAAI;AACF,YAAM,gBAAgB,MAAM,cAAc,gBAAgB,YAAY,CAAC;AACvE,cAAQ,IAAI;AACZ,sBAAgB,OAAO;AACvB,gBAAU,qCAAqC;AAAA,IACjD,SAAS,OAAO;AACd,eAAS,iBAAiB,QAAQ,MAAM,UAAU,iCAAiC;AAAA,IACrF,UAAE;AACA,cAAQ,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,eAAe;AACrB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MACnE,OAAO,wBAAwB,YAAY,KAAK;AAAA,MAChD,UAAU;AAAA,MAEV;AAAA,4BAAC,WAAO,qCAA0B;AAAA,QAClC,oBAAC,WAAO,wCAA6B;AAAA,QACrC,oBAAC,WAAO,2CAAgC;AAAA,QACvC,SAAS,WAAW,iCAAE;AAAA,+BAAC,YAAO,WAAU,qBACvC;AAAA,iCAAC,SACC;AAAA,kCAAC,UAAK,WAAU,qBAAoB,4BAAc;AAAA,cAClD,qBAAC,QAAG;AAAA;AAAA,gBAAO,KAAK,KAAK;AAAA,iBAAW;AAAA,cAChC,oBAAC,OAAE,uEAAyD;AAAA,eAC9D;AAAA,YACA,qBAAC,SAAI,WAAU,mBACb;AAAA,kCAAC,UAAM,eAAK,KAAK,QAAO;AAAA,cACxB,oBAAC,YAAQ,gBAAM,KAAK,KAAK,WAAW,GAAE;AAAA,eACxC;AAAA,aACF;AAAA,UAEA,qBAAC,QAAG,WAAU,qBACZ;AAAA,iCAAC,SAAI;AAAA,kCAAC,QAAG,qBAAO;AAAA,cAAK,oBAAC,QAAI,WAAC,MAAM,kBAAkB,MAAM,mBAAmB,MAAM,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,UAAI;AAAA,eAAK;AAAA,YACzI,qBAAC,SAAI;AAAA,kCAAC,QAAG,mBAAK;AAAA,cAAK,oBAAC,QAAI,gBAAM,eAAe,UAAI;AAAA,eAAK;AAAA,YACtD,qBAAC,SAAI;AAAA,kCAAC,QAAG,sBAAQ;AAAA,cAAK,oBAAC,QAAI,gBAAM,YAAY,UAAI;AAAA,eAAK;AAAA,YACtD,qBAAC,SAAI;AAAA,kCAAC,QAAG,4BAAc;AAAA,cAAK,oBAAC,QAAI,gBAAM,OAAO,UAAI;AAAA,eAAK;AAAA,aACzD;AAAA,WAAK,IAAM;AAAA,QAEX,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BACb,+BAAC,SACC;AAAA,gCAAC,QAAG,kCAAoB;AAAA,YACxB,oBAAC,OAAE,gFAAkE;AAAA,aACvE,GACF;AAAA,UACA,qBAAC,SAAI,WAAU,0BACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,UAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,UAAU,CAAC;AAAA,gBACX,aAAY;AAAA,gBACZ,MAAK;AAAA,gBACL,SAAS,aAAa,IAAI,CAAC,WAAW;AAAA,kBACpC,OAAO,MAAM;AAAA,kBACb,OAAO,MAAM;AAAA,kBACb,GAAI,MAAM,cACN,EAAE,OAAO,cAAc,IACvB,MAAM,eAAe,WACnB,EAAE,OAAO,cAAc,IACvB,CAAC;AAAA,kBACP,QAAQ;AAAA,oBACN,IAAI,MAAM,WAAW,CAAC,GAAG,IAAI,CAAC,WAAW,OAAO,KAAK;AAAA,oBACrD,MAAM,gBACF,kCACA;AAAA,kBACN,EAAE,KAAK,GAAG;AAAA,gBACZ,EAAE;AAAA,gBACF,UAAU,CAAC,OAAO,WAAW;AAC3B,sBAAI,QAAQ;AACV,6BAAS,CAAC,aAAa,EAAE,GAAG,SAAS,eAAe,OAAO,OAAO,iBAAiB,OAAO,MAAM,EAAE;AAClG,kCAAc,OAAO,KAAK;AAC1B,8BAAU,sEAAsE;AAAA,kBAClF,OAAO;AACL,kCAAc,KAAK;AACnB,6BAAS,CAAC,YAAY,UAAU,QAAQ,kBAAkB,UAAU,EAAE,GAAG,SAAS,eAAe,IAAI,iBAAiB,GAAG,CAAC;AAAA,kBAC5H;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YACC,YAAY,oBAAC,UAAK,WAAU,wBAAuB,6BAAU,IAAU;AAAA,YACvE,CAAC,aAAa,WAAW,KAAK,EAAE,SAAS,KAAK,aAAa,WAAW,KAAK,CAAC,MAAM,gBACjF,oBAAC,UAAK,WAAU,wBAAuB,qDAAuC,IAC5E;AAAA,YACH,eAAe,SAAS,SACvB,oBAAC,SAAI,WAAU,2BAA0B,MAAK,UAC3C,wBAAc,QAAQ,IAAI,CAAC,WAC1B,oBAAC,UAAK,WAAW,OAAO,OACrB,iBAAO,SAD0B,GAAG,OAAO,IAAI,IAAI,OAAO,KAAK,EAElE,CACD,GACH,IACE;AAAA,aACN;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,+BAAiB;AAAA,YAAK,oBAAC,OAAE,mEAAqD;AAAA,aAAI,GAAM;AAAA,UACzI,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,sBAAqB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,kBAAkB,UAAU,CAAC,qBAAqB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,iBAAiB,EAAE,GAAG;AAAA,YAC1L,oBAAC,SAAM,OAAM,eAAc,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,mBAAmB,UAAU,CAAC,sBAAsB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,kBAAkB,EAAE,GAAG;AAAA,YACtL,oBAAC,SAAM,OAAM,qBAAoB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,iBAAiB,UAAU,CAAC,oBAAoB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,gBAAgB,EAAE,GAAG;AAAA,YACtL,oBAAC,SAAM,OAAM,iBAAgB,MAAK,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,YAAY,UAAU,CAAC,eAAe,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,EAAE,GAAG;AAAA,YAC/K,oBAAC,SAAM,OAAM,gBAAe,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,aAAa,UAAU,CAAC,gBAAgB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,YAAY,EAAE,GAAI,GAAK,KAAK,OAAO,oBAAoB,UAAU,KAAK,OAAO,oBAAoB,QAAS,EAAE,MAAM,KAAK,OAAO,oBAAoB,UAAU,KAAK,OAAO,oBAAoB,SAAS,GAAG,IAAI,CAAC,GAAI;AAAA,YACrW,oBAAC,SAAM,OAAM,YAAW,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,UAAU,CAAC,aAAa,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,SAAS,EAAE,GAAG;AAAA,YAC/I,oBAAC,SAAM,OAAM,kBAAiB,MAAK,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,KAAK,UAAU,CAAC,QAAQ,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,GAAG;AAAA,YAC1J,MAAM,mBAAmB,oBAAC,SAAM,OAAM,8BAA6B,MAAK,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,eAAe,UAAU,CAAC,kBAAkB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,cAAc,EAAE,GAAG,IAAK;AAAA,YACnO,UAAU,eAAe,QAAQ,OAAO,oBAAC,SAAM,OAAM,qBAAoB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,WAAW,UAAU,CAAC,cAAc,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,UAAU,EAAE,GAAG,MAAM,iBAAiB,8DAA8D,uDAAuD;AAAA,aAC3V;AAAA,UACC,UAAU,eAAe,QAAQ,OAAO,qBAAC,OAAE,WAAU,kBAAiB;AAAA;AAAA,YAAkD,oBAAC,OAAE,MAAK,2CAA0C,QAAO,UAAS,KAAI,cAAa,4BAAc;AAAA,YAAI;AAAA,aAAC;AAAA,WACjO;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,qBAAO;AAAA,YAAK,oBAAC,OAAE,qFAAuE;AAAA,aAAI,GAAM;AAAA,UACjJ,qBAAC,SAAI,WAAW,kBAAkB,UAAU,oBAAoB,UAAU,wBAAwB,QAAQ,UAAU,KAAK,IACvH;AAAA,gCAAC,SAAM,OAAM,mBAAkB,MAAK,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,KAAK,UAAU,CAAC,QAAQ,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,IAAI,EAAE,GAAG;AAAA,YAC3J,UAAU,mBAAmB,oBAAC,SAAM,OAAM,oBAAmB,MAAK,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,QAAQ,UAAU,CAAC,WAAW,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG,IAAK;AAAA,YACxM,UAAU,wBAAwB,QAAQ,OAAO,oBAAC,SAAM,OAAM,wBAAuB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,qBAAqB,UAAU,CAAC,wBAAwB,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,oBAAoB,EAAE,GAAG;AAAA,aACzP;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,8BAAgB;AAAA,YAAK,oBAAC,OAAE,gEAAkD;AAAA,aAAI,GAAM;AAAA,UACrI,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,MAAM,UAAU,CAAC,UAAU,sBAAsB,QAAQ,KAAK,GAAG;AAAA,YACzJ,oBAAC,SAAM,OAAM,UAAS,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,OAAO,UAAU,CAAC,UAAU,sBAAsB,SAAS,KAAK,GAAG;AAAA,YACpJ,oBAAC,SAAM,OAAM,eAAc,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,KAAK,UAAU,CAAC,UAAU,sBAAsB,OAAO,KAAK,GAAG;AAAA,YACrJ,oBAAC,SAAM,OAAM,SAAQ,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,SAAS,IAAI,UAAU,CAAC,UAAU,sBAAsB,SAAS,KAAK,GAAG;AAAA,YACzJ,oBAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,iBAAiB,IAAI,UAAU,CAAC,UAAU,sBAAsB,iBAAiB,KAAK,GAAG;AAAA,YAClL,oBAAC,SAAM,OAAM,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,eAAe,IAAI,UAAU,CAAC,UAAU,sBAAsB,eAAe,KAAK,GAAG;AAAA,YACpK,oBAAC,iBAAc,OAAM,SAAQ,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,gBAAgB,IAAI,UAAU,CAAC,UAAU,sBAAsB,gBAAgB,KAAK,GAAG;AAAA,YAC/K,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,gBAAgB,cAAc,IAAI,UAAU,CAAC,UAAU,sBAAsB,cAAc,KAAK,GAAG;AAAA,aACnK;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,uBAAS;AAAA,YAAK,oBAAC,OAAE,qDAAuC;AAAA,aAAI,GAAM;AAAA,UACnH,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,MAAM,UAAU,CAAC,UAAU,gBAAgB,QAAQ,KAAK,GAAG;AAAA,YAC9I,oBAAC,SAAM,OAAM,aAAY,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,WAAW,UAAU,CAAC,UAAU,gBAAgB,aAAa,KAAK,GAAG;AAAA,YAC1I,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,KAAK,UAAU,CAAC,UAAU,gBAAgB,OAAO,KAAK,GAAG;AAAA,YACjI,oBAAC,SAAM,OAAM,YAAW,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,YAAY,IAAI,UAAU,CAAC,UAAU,gBAAgB,YAAY,KAAK,GAAG;AAAA,YACtJ,oBAAC,SAAM,OAAM,kBAAiB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,iBAAiB,IAAI,UAAU,CAAC,UAAU,gBAAgB,iBAAiB,KAAK,GAAG;AAAA,YACtK,oBAAC,iBAAc,OAAM,4BAA2B,UAAU,CAAC,UAAU,OAAO,MAAM,UAAU,gBAAgB,IAAI,UAAU,CAAC,UAAU,gBAAgB,gBAAgB,KAAK,GAAG;AAAA,aAC/K;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,8BAAgB;AAAA,YAAK,oBAAC,OAAE,uDAAyC;AAAA,aAAI,GAAM;AAAA,UAC5H,qBAAC,SAAI,WAAU,wBACb;AAAA,gCAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,MAAM,UAAU,CAAC,UAAU,eAAe,QAAQ,KAAK,GAAG;AAAA,YAC3I,oBAAC,SAAM,OAAM,UAAS,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,QAAQ,UAAU,CAAC,UAAU,eAAe,UAAU,KAAK,GAAG;AAAA,YACxI,oBAAC,SAAM,OAAM,QAAO,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,MAAM,UAAU,CAAC,UAAU,eAAe,QAAQ,KAAK,GAAG;AAAA,YAClI,oBAAC,iBAAc,OAAM,SAAQ,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,OAAO,UAAU,CAAC,UAAU,eAAe,SAAS,KAAK,GAAG;AAAA,YAC7I,oBAAC,SAAM,OAAM,OAAM,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,KAAK,UAAU,CAAC,UAAU,eAAe,OAAO,KAAK,GAAG;AAAA,YAC/H,oBAAC,SAAM,OAAM,yBAAwB,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,MAAM,SAAS,WAAW,MAAM,UAAU,CAAC,UAAU,eAAe,WAAW,KAAK,GAAG;AAAA,aACnK;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,6BAAe;AAAA,YAAK,qBAAC,OAAG;AAAA,mBAAK,KAAK,gBAAgB,iBAAiB,8GAA8G;AAAA,cAAiE;AAAA,eAA+B;AAAA,aAAI,GAAM;AAAA,UAC3U,KAAK,KAAK,gBAAgB,kBAAkB,UAAU,kBAAkB,QAAQ,OAAO,qBAAC,SAAI,WAAU,qBAAoB,MAAK,SAAQ,cAAW,8BAC/I;AAAA,aAAC,CAAC,OAAM,KAAK,GAAE,CAAC,OAAM,KAAK,GAAE,CAAC,aAAY,WAAW,CAAC,EAAY,IAAI,CAAC,CAAC,OAAM,KAAK,MAAM,oBAAC,YAAO,MAAK,UAAqB,WAAW,YAAY,MAAM,SAAS,MAAM,QAAQ,WAAW,IAAI,UAAU,CAAC,UAAU,SAAS,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,YAAY,QAAQ,WAAW,KAAK,CAAC,EAAE,EAAE,GAAI,mBAAvO,KAA6O,CAAS;AAAA,YAC5W,oBAAC,UAAK,4FAA8E;AAAA,aACtF;AAAA,UACA,oBAAC,SAAI,WAAU,mBACZ,gBAAM,UAAU,IAAI,CAAC,MAAM,UAC1B,qBAAC,SAAI,WAAW,kBAAkB,KAAK,KAAK,gBAAgB,iBAAiB,iBAAiB,EAAE,IAC9F;AAAA,iCAAC,WAAM,WAAU,mBAAkB;AAAA,mCAAC,UAAK;AAAA;AAAA,gBAAS,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE;AAAA,iBAAO;AAAA,cAAQ,KAAK,KAAK,gBAAgB,iBAAiB,oBAAC,WAAM,UAAU,CAAC,UAAU,aAAY,oBAAmB,OAAO,KAAK,MAAM,UAAU,CAAC,UAAU;AACtQ,sBAAM,OAAO,MAAM,OAAO,MAAM,YAAY;AAC5C,yBAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,CAAC,EAAE,EAAE;AAAA,cAC5K,GAAG,IAAK,qBAAC,YAAO,UAAU,CAAC,UAAU,OAAO,KAAK,MAAM,UAAU,CAAC,UAAU;AAC1E,sBAAM,OAAO,MAAM,OAAO;AAC1B,yBAAS,CAAC,YAAY;AACpB,wBAAM,YAAY,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc;AAC3D,wBAAI,cAAc,MAAO,QAAO;AAChC,0BAAM,aAAa,YAAY,CAAC,EAAE,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,QAAQ,SAAS,CAAC,EAAE,CAAC;AACrF,2BAAO,EAAE,GAAG,MAAM,MAAM,WAAW,YAAY,aAAa,CAAC,EAAE;AAAA,kBACjE,CAAC;AACD,yBAAO,EAAE,GAAG,SAAS,WAAW,4BAA4B,SAAS,EAAE;AAAA,gBACzE,CAAC;AAAA,cACH,GAAG;AAAA,oCAAC,YAAO,OAAM,IAAG,+BAAY;AAAA,gBAAU,WAAW,IAAI,CAAC,CAAC,MAAK,KAAK,MAAM,qBAAC,YAAO,OAAO,MAAkB;AAAA;AAAA,kBAAK;AAAA,kBAAI;AAAA,qBAAhB,IAAsB,CAAS;AAAA,iBAAE;AAAA,cAAW,KAAK,KAAK,gBAAgB,eAAe,KAAK,OAAO,oBAAC,WAAO,qBAAW,KAAK,CAAC,CAAC,IAAI,MAAM,SAAS,KAAK,IAAI,IAAI,CAAC,GAAE,IAAW;AAAA,eAAK;AAAA,YACnR,qBAAC,SAAI,WAAU,uBAAuB;AAAA,mBAAK,KAAK,gBAAgB,iBAAiB,qBAAC,WAAM,WAAU,mBAAkB;AAAA,oCAAC,UAAK,uBAAS;AAAA,gBAAO,oBAAC,WAAM,UAAU,CAAC,UAAU,aAAY,eAAc,OAAO,KAAK,UAAU,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU;AACrP,wBAAM,YAAY,MAAM,OAAO,MAAM,YAAY,EAAE,MAAM,OAAO,EAAE,IAAI,CAAC,UAAU,MAAM,QAAQ,MAAM,EAAE,CAAC,EAAE,OAAO,OAAO;AACxH,2BAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,UAAU,IAAI,IAAI,CAAC,EAAE,EAAE;AAAA,gBACjL,GAAG;AAAA,iBAAE,IAAW,qBAAC,WAAM,WAAU,mBAAkB;AAAA,oCAAC,UAAK,uBAAS;AAAA,gBAAO,qBAAC,YAAO,UAAU,CAAC,UAAU,OAAM,IAAG,UAAU,CAAC,UAAU;AAClI,wBAAM,WAAW,MAAM,OAAO;AAC9B,sBAAI,CAAC,SAAU;AACf,2BAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,KAAK,WAAW,QAAQ,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;AAAA,gBAC9N,GAAG;AAAA,sCAAC,YAAO,OAAM,IAAG,gCAAa;AAAA,kBAAU,UAAU,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS,KAAK,KAAK,sBAAsB,OAAO,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,OAAM,KAAK,MAAM,qBAAC,YAAO,OAA0B;AAAA;AAAA,oBAAE;AAAA,oBAAM;AAAA,oBAAI;AAAA,uBAAnB,KAAyB,CAAS;AAAA,mBAAE;AAAA,iBAAS;AAAA,cAAS,oBAAC,SAAI,WAAU,mBAAmB,eAAK,KAAK,gBAAgB,cAAc,KAAK,UAAU,IAAI,CAAC,aAAa,qBAAC,YAAO,MAAK,UAAS,UAAU,CAAC,UAAyB,SAAS,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,WAAW,KAAK,UAAU,OAAO,CAAC,UAAU,UAAU,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG;AAAA;AAAA,gBAAE;AAAA,gBAAS;AAAA,mBAA5Q,QAA8Q,CAAS,IAAI,MAAK;AAAA,eAAM;AAAA,YAC9rB,qBAAC,WAAM,WAAU,mBAAkB;AAAA,mCAAC,UAAK;AAAA;AAAA,gBAAK,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE;AAAA,iBAAO;AAAA,cAAO,oBAAC,WAAM,MAAK,UAAS,KAAI,KAAI,UAAQ,MAAC,UAAU,CAAC,UAAU,OAAO,KAAK,OAAO,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG;AAAA,eAAE;AAAA,YACpa,KAAK,KAAK,gBAAgB,iBAAiB,iCAC1C;AAAA,mCAAC,WAAM,WAAU,mBAAkB;AAAA,qCAAC,UAAK;AAAA;AAAA,kBAAY,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE;AAAA,mBAAO;AAAA,gBAAO,oBAAC,WAAM,MAAK,QAAO,UAAU,QAAQ,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU,OAAO,KAAK,eAAe,IAAI,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,aAAa,MAAM,OAAO,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG;AAAA,iBAAE;AAAA,cACjc,qBAAC,WAAM,WAAU,mBAAkB;AAAA,qCAAC,UAAK;AAAA;AAAA,kBAAS,oBAAC,WAAM,sBAAQ;AAAA,mBAAQ;AAAA,gBAAO,oBAAC,WAAM,MAAK,QAAO,UAAU,CAAC,UAAU,OAAO,KAAK,kBAAkB,IAAI,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,gBAAgB,MAAM,OAAO,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG;AAAA,iBAAE;AAAA,cAC5X,qBAAC,WAAM,WAAU,mBAAkB;AAAA,qCAAC,UAAK;AAAA;AAAA,kBAAM,oBAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO,gBAAE;AAAA,mBAAO;AAAA,gBAAO,oBAAC,WAAM,MAAK,UAAS,KAAI,QAAO,MAAK,QAAO,UAAU,QAAQ,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU,OAAO,KAAK,UAAU,IAAI,UAAU,CAAC,UAAU,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,QAAQ,OAAO,MAAM,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG;AAAA,iBAAE;AAAA,cACld,qBAAC,WAAM,WAAU,mBAAkB;AAAA,qCAAC,UAAK;AAAA;AAAA,kBAAmB,oBAAC,WAAM,uBAAI;AAAA,mBAAQ;AAAA,gBAAO,oBAAC,WAAM,WAAU,WAAU,UAAU,CAAC,UAAU,QAAQ,KAAK,qBAAqB,CAAC,GAAG,KAAK,IAAI,GAAG,UAAU,CAAC,UAAU;AAAE,wBAAM,oBAAoB,MAAM,OAAO,MAAM,MAAM,OAAO,EAAE,IAAI,MAAM,EAAE,OAAO,CAAC,UAAU,OAAO,UAAU,KAAK,KAAK,SAAS,KAAK,SAAS,EAAE;AAAG,2BAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,kBAAkB,IAAI,IAAI,CAAC,EAAE,EAAE;AAAA,gBAAG,GAAG;AAAA,iBAAE;AAAA,eACjiB,IAAM;AAAA,YACN,qBAAC,SAAI,WAAU,qBAAoB;AAAA,kCAAC,UAAK,qBAAO;AAAA,cAAO,oBAAC,YAAQ,gBAAM,KAAK,MAAM,GAAE;AAAA,eAAS;AAAA,YAC5F,oBAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,cAAY,UAAU,KAAK,QAAQ,WAAW,IAAI,UAAU,CAAC,UAAU,SAAS,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,4BAA4B,QAAQ,UAAU,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,CAAC,EAAE,EAAE,GAAG,kBAAC;AAAA,eA/BrL,KAAK,MAAM,KAgCpH,CACD,GACH;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAW,cAClB;AAAA,8BAAC,SAAI,WAAU,0BAAyB,+BAAC,SAAI;AAAA,gCAAC,QAAG,kCAAoB;AAAA,YAAK,oBAAC,OAAE,8DAAgD;AAAA,aAAI,GAAM;AAAA,UACvI,qBAAC,SAAI,WAAU,kBAAiB;AAAA,gCAAC,YAAO,oDAAsC;AAAA,YAAS;AAAA,aAA6H;AAAA,UACpN,oBAAC,QAAG,WAAU,uBACX,eAAK,KAAK,YAAY,IAAI,CAAC,eAC1B,qBAAC,QACC;AAAA,gCAAC,UAAK,WAAU,kBAAiB,iBAAG;AAAA,YACpC,qBAAC,SAAI;AAAA,kCAAC,YAAQ,qBAAW,UAAS;AAAA,cAAS,oBAAC,UAAM,0BAAgB,WAAW,YAAsC,KAAK,WAAW,eAAe,uBAAsB;AAAA,eAAO;AAAA,YAC9K,mBAAmB,oBAAC,YAAO,MAAK,UAAS,WAAU,0BAAyB,SAAS,MAAM,iBAAiB,UAAU,GAAG,kBAAI,IAAY;AAAA,YAC1I,oBAAC,YAAO,MAAK,UAAS,WAAU,oBAAmB,UAAU,CAAC,YAAY,SAAS,cAAc,cAAY,UAAU,WAAW,QAAQ,IAAI,SAAS,MAAM,KAAK,mBAAmB,WAAW,EAAE,EAAE,MAAM,CAAC,UAAU,SAAS,iBAAiB,QAAQ,MAAM,UAAU,gCAAgC,CAAC,GAAG,kBAAC;AAAA,eAJrS,WAAW,EAKpB,CACD,GACH;AAAA,UACA,qBAAC,SAAI,WAAU,oBACb;AAAA,iCAAC,SAAI;AAAA,kCAAC,YAAO,gCAAkB;AAAA,cAAS,oBAAC,UAAK,wEAA0D;AAAA,eAAO;AAAA,YAC/G,oBAAC,YAAO,cAAW,iBAAgB,OAAO,cAAc,UAAU,CAAC,UAAU,UAAU,CAAC,UAAU,gBAAgB,MAAM,OAAO,KAA+B,GAAI,iBAAO,QAAQ,eAAe,EAAE,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,oBAAC,YAAmB,OAAe,mBAAtB,KAA4B,CAAS,GAAE;AAAA,YAC9Q,oBAAC,WAAM,cAAW,yBAAwB,MAAK,QAAO,QAAO,wBAAuB,UAAU,CAAC,UAAU,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAAA,YACxK,oBAAC,YAAO,WAAU,8BAA6B,MAAK,UAAS,UAAU,CAAC,YAAY,CAAC,QAAQ,SAAS,cAAc,SAAS,MAAM,KAAK,OAAO,GAAI,mBAAS,eAAe,oBAAe,mBAAkB;AAAA,aAC9M;AAAA,WACF;AAAA,QAEA,qBAAC,aAAQ,WAAU,oBACjB;AAAA,+BAAC,SAAI;AAAA,gCAAC,QAAG,yBAAW;AAAA,YAAK,oBAAC,OAAE,0GAA4F;AAAA,aAAI;AAAA,UAC3H,QAAQ,oBAAC,SAAI,WAAU,2BAA0B,MAAK,SAAS,iBAAM,IAAS;AAAA,UAC9E,SAAS,oBAAC,SAAI,WAAU,6BAA4B,MAAK,UAAU,kBAAO,IAAS;AAAA,UACnF,CAAC,YAAY,qBAAC,SAAI,WAAU,sBAAqB,MAAK,UAAS;AAAA,gCAAC,YAAO,oCAAsB;AAAA,YAAS,oBAAC,UAAM,mBAAS,KAAK,QAAK,GAAE;AAAA,aAAO,IAAS;AAAA,UACnJ,oBAAC,SAAI,WAAU,qBACZ,mBAAS,eAAe,oBAAC,YAAO,WAAU,4BAA2B,MAAK,UAAS,UAAU,CAAC,YAAY,CAAC,aAAa,SAAS,IAAK,mBAAS,WAAW,qBAAgB,eAAc,IAAY,iCACnM;AAAA,gCAAC,YAAO,WAAU,8BAA6B,MAAK,UAAS,UAAU,CAAC,YAAY,SAAS,IAAK,mBAAS,SAAS,iBAAY,gBAAe;AAAA,YAC/I,oBAAC,YAAO,WAAU,4BAA2B,MAAK,UAAS,UAAU,CAAC,YAAY,CAAC,aAAa,SAAS,MAAM,cAAc,SAAS,MAAM,KAAK,WAAW,GAAI,yBAAe,2BAAsB,mBAAkB;AAAA,aACzN,GACF;AAAA,WACF;AAAA,QACC,cAAc,kBAAkB,oBAAC,SAAI,WAAU,4BAA2B,MAAK,gBAAe,aAAa,CAAC,UAAU;AAAE,cAAI,MAAM,WAAW,MAAM,iBAAiB,SAAS,SAAU,eAAc,KAAK;AAAA,QAAG,GAC5M,+BAAC,aAAQ,WAAU,mBAAkB,MAAK,UAAS,cAAW,QAAO,mBAAgB,0BACnF;AAAA,+BAAC,YAAO;AAAA,iCAAC,SAAI;AAAA,kCAAC,UAAK,WAAU,qBAAoB,uBAAS;AAAA,cAAO,oBAAC,QAAG,IAAG,0BAAyB,qCAAuB;AAAA,cAAK,oBAAC,OAAG,0BAAgB,aAAa,wBAAuB;AAAA,eAAI;AAAA,YAAM,oBAAC,YAAO,MAAK,UAAS,WAAU,mBAAkB,cAAW,SAAQ,UAAU,SAAS,UAAU,SAAS,MAAM,cAAc,KAAK,GAAG,kBAAC;AAAA,aAAS;AAAA,UAChV,qBAAC,cAAS,WAAU,8BAA6B;AAAA,gCAAC,YAAO,uCAAyB;AAAA,YAAU,gBAAgB,QAAQ,IAAI,CAAC,WAAW,qBAAC,WAAM,WAAW,WAAW,UAAU,OAAO,QAAQ,aAAa,IAA0D;AAAA,kCAAC,WAAM,MAAK,SAAQ,MAAK,2BAA0B,SAAS,WAAW,UAAU,OAAO,OAAO,UAAU,MAAM,cAAc,EAAE,OAAO,OAAO,MAAM,CAAC,GAAG;AAAA,cAAE,qBAAC,UAAK;AAAA,oCAAC,YAAQ,iBAAO,OAAM;AAAA,gBAAS,oBAAC,WAAO,iBAAO,QAAO;AAAA,gBAAS,OAAO,SAAS,oBAAC,UAAM,iBAAO,QAAO,IAAU;AAAA,iBAAK;AAAA,cAAQ,gBAAgB,aAAa,UAAU,OAAO,QAAQ,oBAAC,QAAG,yBAAW,IAAQ;AAAA,iBAAvZ,GAAG,OAAO,KAAK,IAAI,OAAO,UAAU,SAAS,EAA+W,CAAQ;AAAA,aAAE;AAAA,UACrnB,WAAW,UAAU,UAAU,qBAAC,SAAI,WAAU,sBAAqB;AAAA,gCAAC,SAAM,OAAO,kBAAkB,UAAQ,MAAC,OAAO,kBAAkB,UAAU,gBAAgB,MAAK,mEAAkE;AAAA,YAAE,oBAAC,SAAM,OAAM,aAAY,UAAQ,MAAC,OAAO,WAAW,aAAa,IAAI,UAAU,CAAC,cAAc,cAAc,CAAC,aAAa,EAAE,GAAG,SAAS,UAAU,EAAE,GAAG;AAAA,YAAG,WAAW,UAAU,UAAU,oBAAC,SAAM,OAAM,WAAU,UAAQ,MAAC,OAAO,WAAW,WAAW,IAAI,UAAU,CAAC,YAAY,cAAc,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,EAAE,GAAG,IAAK;AAAA,aAAK,IAAS;AAAA,UACpkB,oBAAC,SAAM,OAAM,iBAAgB,UAAQ,MAAC,OAAO,WAAW,QAAQ,IAAI,UAAU,CAAC,SAAS,cAAc,CAAC,aAAa,EAAE,GAAG,SAAS,KAAK,EAAE,GAAG;AAAA,UAC5I,qBAAC,YAAO;AAAA,gCAAC,YAAO,WAAU,8BAA6B,MAAK,UAAS,UAAU,SAAS,UAAU,SAAS,MAAM,cAAc,KAAK,GAAG,oBAAM;AAAA,YAAS,oBAAC,YAAO,WAAU,4BAA2B,MAAK,UAAS,UAAU,SAAS,YAAa,WAAW,UAAU,WAAW,CAAC,iBAAiB,KAAK,GAAI,SAAS,MAAM,KAAK,aAAa,GAAI,mBAAS,WAAW,qBAAgB,YAAY,kBAAkB,SAAS,WAAW,KAAK,IAAG;AAAA,aAAS;AAAA,WAC1b,GACF,IAAS;AAAA;AAAA;AAAA,EACX;AAEJ;AAwBO,SAAS,kBAAkB,EAAE,QAAQ,aAAa,WAAW,WAAW,aAAa,WAAW,YAAY,UAAU,CAAC,GAAG,WAAW,OAAO,WAAW,GAAyC;AACrM,SAAO,qBAAC,aAAQ,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,wBAAwB,YAAY,KAAK,GACpI;AAAA,wBAAC,WAAO,qCAA0B;AAAA,IAClC,oBAAC,WAAO,wCAA6B;AAAA,IACrC,qBAAC,SAAI,WAAU,yBAAwB;AAAA,0BAAC,UAAK,WAAU,qBAAoB,yBAAW;AAAA,MAAO,oBAAC,QAAI,iBAAO,WAAW,KAAK,GAAG,GAAE;AAAA,MAAK,qBAAC,OAAG;AAAA,sBAAc,aAAa,IAAI,KAAK,WAAW,EAAE,mBAAmB,CAAC,KAAK;AAAA,QAAiB,aAAa,OAAO,KAAK,SAAM,SAAS,OAAO,cAAc,IAAI,KAAK,GAAG;AAAA,QAAQ,YAAY,iBAAc,IAAI,KAAK,SAAS,EAAE,mBAAmB,CAAC,KAAK;AAAA,SAAG;AAAA,OAAI;AAAA,IACjY,qBAAC,QAAG;AAAA,2BAAC,SAAI;AAAA,4BAAC,QAAG,qBAAO;AAAA,QAAK,oBAAC,QAAI,gBAAM,WAAW,GAAE;AAAA,SAAK;AAAA,MAAM,qBAAC,SAAI;AAAA,4BAAC,QAAG,kBAAI;AAAA,QAAK,oBAAC,QAAI,gBAAM,SAAS,GAAE;AAAA,SAAK;AAAA,MAAM,qBAAC,SAAI;AAAA,4BAAC,QAAG,qBAAO;AAAA,QAAK,oBAAC,QAAI,gBAAM,UAAU,GAAE;AAAA,SAAK;AAAA,OAAM;AAAA,IACrK,QAAQ,SAAS,oBAAC,SAAI,WAAU,4BAA4B,kBAAQ,IAAI,CAAC,WAAW,oBAAC,YAAuB,MAAK,UAAS,WAAW,oBAAoB,OAAO,UAAU,YAAY,WAAW,IAAI,UAAU,OAAO,UAAU,SAAS,OAAO,SAAU,iBAAO,SAAhK,OAAO,EAA+J,CAAS,GAAE,IAAS;AAAA,KAC9R;AACF;AAEA,IAAM,kCAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcxC,IAAM,4BAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6BlC,IAAM,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACnoCrC,SAAS,aAAAC,YAAW,YAAAC,iBAAuE;AA+BlF,SAAkE,OAAAC,MAAlE,QAAAC,aAAA;AAXT,SAASC,OAAM,OAAuB;AACpC,SAAO,IAAI,KAAK,aAAa,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,EAAE,OAAO,KAAK;AAC9F;AAEA,SAAS,KAAK,OAA+B;AAC3C,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,SAAS,oBAAI,KAAK,GAAG,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW;AACxD,SAAO,OAAO,MAAM,OAAO,QAAQ,CAAC,IAAI,QAAQ,IAAI,KAAK,eAAe,QAAW,EAAE,WAAW,SAAS,CAAC,EAAE,OAAO,MAAM;AAC3H;AAEA,SAAS,MAAM,EAAE,OAAO,UAAU,OAAO,MAAM,GAA0E;AACvH,SAAO,gBAAAD,MAAC,SAAI,WAAW,OAAO,0BAA0B,iBAAiB;AAAA,oBAAAD,KAAC,QAAI,iBAAM;AAAA,IAAK,gBAAAA,KAAC,QAAI,sBAAY,UAAI;AAAA,KAAK;AACrH;AAIA,IAAM,aAAyD;AAAA,EAC7D,CAAC,QAAQ,MAAM;AAAA,EACf,CAAC,eAAe,aAAa;AAAA,EAC7B,CAAC,iBAAiB,oBAAoB;AAAA,EACtC,CAAC,WAAW,iBAAiB;AAAA,EAC7B,CAAC,YAAY,sBAAsB;AACrC;AAEA,SAAS,eAAe,EAAE,SAAS,GAA0C;AAC3E,SAAO,gBAAAA,KAAC,OAAE,WAAU,2BAA2B,UAAS;AAC1D;AAEA,SAAS,aAAa,EAAE,UAAAG,WAAU,MAAM,GAAyF;AAC/H,MAAI,CAACA,UAAS,OAAQ,QAAO,gBAAAH,KAAC,kBAAgB,iBAAM;AACpD,SAAO,gBAAAA,KAAC,SAAI,WAAU,gCAA+B,0BAAAC,MAAC,WAAM,WAAU,2BAA0B;AAAA,oBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,sBAAAD,KAAC,QAAG,kBAAI;AAAA,MAAK,gBAAAA,KAAC,QAAG,uBAAS;AAAA,MAAK,gBAAAA,KAAC,QAAG,4BAAc;AAAA,MAAK,gBAAAA,KAAC,QAAG,iBAAG;AAAA,MAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,OAAK,GAAK;AAAA,IAAQ,gBAAAA,KAAC,WAAO,UAAAG,UAAS,IAAI,CAAC,SAAS,UAAU,gBAAAF,MAAC,QAAiD;AAAA,sBAAAA,MAAC,QAAI;AAAA,gBAAQ,QAAQ;AAAA,QAAK,QAAQ,OAAO,gBAAAD,KAAC,WAAO,kBAAQ,MAAK,IAAW;AAAA,SAAK;AAAA,MAAK,gBAAAA,KAAC,QAAI,kBAAQ,SAAS,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,kBAAQ,YAAY,gBAAAA,KAAC,OAAE,MAAM,QAAQ,WAAW,QAAO,UAAS,KAAI,uBAAsB,yBAAW,IAAO,QAAQ,SAAS,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,kBAAQ,OAAO,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,kBAAQ,WAAW,UAAI;AAAA,SAA/V,GAAG,QAAQ,QAAQ,SAAS,IAAI,KAAK,EAA+T,CAAK,GAAE;AAAA,KAAQ,GAAQ;AACznB;AAEA,SAAS,aAAa,EAAE,UAAU,GAAkF;AAClH,MAAI,CAAC,UAAU,OAAQ,QAAO,gBAAAA,KAAC,kBAAe,0EAA4D;AAC1G,SAAO,gBAAAA,KAAC,SAAI,WAAU,gCAA+B,0BAAAC,MAAC,WAAM,WAAU,2BAA0B;AAAA,oBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,sBAAAD,KAAC,QAAG,qBAAO;AAAA,MAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,MAAK,gBAAAA,KAAC,QAAG,mBAAK;AAAA,MAAK,gBAAAA,KAAC,QAAG,8BAAgB;AAAA,OAAK,GAAK;AAAA,IAAQ,gBAAAA,KAAC,WAAO,oBAAU,IAAI,CAAC,OAAO,UAAU,gBAAAC,MAAC,QAAqC;AAAA,sBAAAD,KAAC,QAAI,gBAAM,WAAW,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,SAAQ;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,SAAS,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,iBAAiB,KAAK,IAAI,KAAK,UAAI;AAAA,SAA/J,GAAG,MAAM,OAAO,IAAI,KAAK,EAA2I,CAAK,GAAE;AAAA,KAAQ,GAAQ;AAC7a;AAEA,SAAS,aAAa,EAAE,SAAS,GAA0E;AACzG,MAAI,CAAC,SAAS,OAAQ,QAAO,gBAAAA,KAAC,kBAAe,4EAA8D;AAC3G,SAAO,gBAAAA,KAAC,SAAI,WAAU,gCAA+B,0BAAAC,MAAC,WAAM,WAAU,2BAA0B;AAAA,oBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,sBAAAD,KAAC,QAAG,oBAAM;AAAA,MAAK,gBAAAA,KAAC,QAAG,oBAAM;AAAA,MAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,MAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,OAAK,GAAK;AAAA,IAAQ,gBAAAA,KAAC,WAAO,mBAAS,IAAI,CAAC,OAAO,UAAU,gBAAAC,MAAC,QAAqC;AAAA,sBAAAD,KAAC,QAAI,gBAAM,YAAY,OAAO,gBAAAA,KAAC,UAAK,WAAU,0BAAyB,uCAAoB,IAAU,MAAM,YAAY,QAAQ,gBAAAA,KAAC,UAAK,WAAU,4BAA2B,2BAAa,IAAU,YAAW;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,UAAU,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,SAAQ;AAAA,MAAK,gBAAAA,KAAC,QAAI,gBAAM,WAAW,UAAI;AAAA,SAA9T,GAAG,MAAM,OAAO,IAAI,KAAK,EAA0S,CAAK,GAAE;AAAA,KAAQ,GAAQ;AAClkB;AAEO,SAAS,iBAAiB,EAAE,MAAM,YAAY,WAAW,OAAO,iBAAiB,GAAwC;AAC9H,QAAM,CAAC,WAAW,YAAY,IAAII,UAAS,KAAK;AAChD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAmB,MAAM;AACzD,QAAM,EAAE,MAAM,SAAS,OAAO,IAAI;AAClC,QAAM,YAAY,OAAO,WAAW,SAChC,OAAO,aACN,OAAO,kBAAkB,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,aAAa,GAAG,EAAE;AAC3E,QAAM,WAAW,KAAK,iBAAiB;AACvC,QAAM,YAAY,KAAK,iBAAiB;AACxC,QAAM,WAAW,KAAK,iBAAiB;AACvC,QAAM,UAAU,QAAQ;AACxB,QAAM,iBAAiB,CAAC,SAAS,OAAO,SAAS,MAAM,SAAS,OAAO,SAAS,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI;AACrH,QAAM,iBAAiB,WAAW,CAAC,SAAS,eAAe,SAAS,aAAa,SAAS,cAAc,SAAS,UAAU,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI;AAC1J,QAAM,kBAAkB,WAAW,CAAC,SAAS,QAAQ,SAAS,MAAM,SAAS,OAAO,SAAS,GAAG,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,IAAI;AAC/H,QAAM,YAAY,KAAK,UAAU,aAAa,OAAO,mBAAmB;AACxE,QAAMD,YAAW,KAAK,UAAU;AAChC,QAAM,YAAY,KAAK,UAAU;AACjC,QAAM,mBAA8DA,aAAY,OAAO,OAAOA,SAAQ,EAAE,KAAK,OAAO,IAAI,CAAC;AAAA,IACvH,MAAMA,UAAS,gBAAgB;AAAA,IAC/B,GAAIA,UAAS,gBAAgB,EAAE,OAAOA,UAAS,cAAc,IAAI,CAAC;AAAA,IAClE,GAAIA,UAAS,iBAAiBA,UAAS,cAAc,EAAE,OAAOA,UAAS,iBAAiBA,UAAS,YAAY,IAAI,CAAC;AAAA,IAClH,GAAIA,UAAS,YAAY,EAAE,KAAKA,UAAS,UAAU,IAAI,CAAC;AAAA,IACxD,GAAIA,UAAS,YAAY,EAAE,WAAWA,UAAS,UAAU,IAAI,CAAC;AAAA,IAC9D,GAAIA,UAAS,iBAAiB,EAAE,SAASA,UAAS,eAAe,IAAI,CAAC;AAAA,EACxE,CAAC,IAAI,CAAC;AACN,QAAM,aAAa,WAAW,YAAY,SAAS,UAAU,aAAa;AAC1E,QAAM,mBAAqE,WAAW,kBAAkB,SACpG,UAAU,mBACVA,WAAU,iBAAiB,CAAC,EAAE,SAAS,WAAW,SAASA,UAAS,eAAe,CAAC,IAAI,CAAC;AAC7F,EAAAE,WAAU,MAAM;AACd,QAAI,CAAC,UAAW;AAChB,UAAM,QAAQ,CAAC,UAAyB;AAAE,UAAI,MAAM,QAAQ,SAAU,cAAa,KAAK;AAAA,IAAG;AAC3F,WAAO,iBAAiB,WAAW,KAAK;AACxC,WAAO,MAAM,OAAO,oBAAoB,WAAW,KAAK;AAAA,EAC1D,GAAG,CAAC,SAAS,CAAC;AAEd,SAAO,gBAAAJ,MAAC,aAAQ,WAAW,CAAC,oBAAoB,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,gBAClJ;AAAA,oBAAAD,KAAC,WAAO,4BAAiB;AAAA,IACzB,gBAAAC,MAAC,YAAO,WAAU,uBAAsB;AAAA,sBAAAD,KAAC,QAAG,0BAAY;AAAA,MAAK,gBAAAA,KAAC,YAAQ,UAAAE,OAAM,KAAK,WAAW,GAAE;AAAA,OAAS;AAAA,IAEvG,gBAAAD,MAAC,aAAQ,WAAU,gBAAe;AAAA,sBAAAD,KAAC,QAAG,qBAAO;AAAA,MAAK,gBAAAC,MAAC,QAAG,WAAU,gBAC9D;AAAA,wBAAAD,KAAC,SAAM,OAAM,QAAQ,kBAAQ,QAAQ,CAAC,QAAQ,WAAW,QAAQ,YAAY,QAAQ,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAE;AAAA,QACzH,gBAAAA,KAAC,SAAM,OAAM,iBAAiB,eAAK,QAAQ,GAAG,GAAE;AAAA,QAChD,gBAAAA,KAAC,SAAM,OAAM,SAAS,kBAAQ,OAAM;AAAA,QACpC,gBAAAA,KAAC,SAAM,OAAM,WAAU,MAAI,MAAE,0BAAe;AAAA,SAC9C;AAAA,OAAK;AAAA,IAEL,gBAAAC,MAAC,aAAQ,WAAU,gBAAe;AAAA,sBAAAD,KAAC,QAAG,4BAAkB;AAAA,MAAK,gBAAAC,MAAC,QAAG,WAAU,gBACzE;AAAA,wBAAAD,KAAC,SAAM,OAAM,gBAAgB,iBAAO,aAAY;AAAA,QAChD,gBAAAA,KAAC,SAAM,OAAM,qBAAqB,iBAAO,WAAU;AAAA,QACnD,gBAAAA,KAAC,SAAM,OAAM,wBAAuB,0BAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,iBAAgB,SAAS,MAAM;AAAE,sBAAY,MAAM;AAAG,uBAAa,IAAI;AAAA,QAAG,GAAI,qBAAU,GAAS;AAAA,QACrK,gBAAAA,KAAC,SAAM,OAAM,YAAY,iBAAO,UAAS;AAAA,QACzC,gBAAAA,KAAC,SAAM,OAAM,kBAAkB,eAAK,OAAO,GAAG,GAAE;AAAA,QAChD,gBAAAA,KAAC,SAAM,OAAM,mBAAmB,eAAK,SAAS,GAAG,KAAK,KAAK,GAAG,CAAC,WAAM,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,KAAK,GAAG,GAAE;AAAA,QAC1G,gBAAAA,KAAC,SAAM,OAAM,sBAAqB,MAAI,MAAE,iBAAO,mBAAkB;AAAA,SACnE;AAAA,MAAM,UAAU,SAAS,gBAAAA,KAAC,SAAI,WAAU,qBAAoB,cAAW,aAAa,oBAAU,IAAI,CAAC,cAAc,gBAAAC,MAAC,SAAyB;AAAA,wBAAAD,KAAC,YAAQ,oBAAU,MAAK;AAAA,QAAU,UAAU,cAAc,gBAAAA,KAAC,UAAM,oBAAU,aAAY,IAAU;AAAA,WAAjH,UAAU,IAA4G,CAAM,GAAE,IAAS;AAAA,OAAK;AAAA,IAEvQ,gBAAAC,MAAC,aAAQ,WAAU,gBAAe;AAAA,sBAAAD,KAAC,QAAG,kCAAwB;AAAA,MAAK,gBAAAC,MAAC,QAAG,WAAU,gBAC/E;AAAA,wBAAAD,KAAC,SAAM,OAAM,oBAAoB,oBAAU,MAAK;AAAA,QAChD,gBAAAA,KAAC,SAAM,OAAM,eAAe,oBAAU,KAAI;AAAA,QAC1C,gBAAAA,KAAC,SAAM,OAAM,kBAAkB,oBAAU,OAAM;AAAA,QAC/C,gBAAAA,KAAC,SAAM,OAAM,iBAAiB,oBAAU,OAAM;AAAA,QAC9C,gBAAAA,KAAC,SAAM,OAAM,mBAAkB,MAAI,MAAE,0BAAe;AAAA,QACpD,gBAAAA,KAAC,SAAM,OAAM,sBAAsB,qBAAW,MAAK;AAAA,QACnD,gBAAAA,KAAC,SAAM,OAAM,iBAAiB,qBAAW,KAAI;AAAA,QAC7C,gBAAAA,KAAC,SAAM,OAAM,sBAAsB,qBAAW,UAAS;AAAA,QACvD,gBAAAA,KAAC,SAAM,OAAM,yBAAyB,oBAAU,SAAQ;AAAA,QACxD,gBAAAA,KAAC,SAAM,OAAM,mBAAkB,MAAI,MAAE,2BAAgB;AAAA,SACvD;AAAA,OAAK;AAAA,IAEL,gBAAAC,MAAC,aAAQ,WAAU,gBAAe;AAAA,sBAAAD,KAAC,QAAG,2BAAa;AAAA,MAAK,gBAAAC,MAAC,SAAI,WAAU,iBAAgB,MAAK,SAAQ,cAAW,iBAC7G;AAAA,wBAAAA,MAAC,SAAI,WAAU,uBAAsB,MAAK,OAAM;AAAA,0BAAAD,KAAC,UAAK,uBAAS;AAAA,UAAO,gBAAAA,KAAC,UAAK,uBAAS;AAAA,UAAO,gBAAAA,KAAC,UAAK,mBAAK;AAAA,UAAO,gBAAAA,KAAC,UAAK,oBAAM;AAAA,WAAO;AAAA,QAChI,KAAK,UAAU,IAAI,CAAC,MAAM,UAAU,gBAAAC,MAAC,SAAI,WAAU,gBAAe,MAAK,OACtE;AAAA,0BAAAD,KAAC,YAAQ,eAAK,MAAK;AAAA,UAAS,gBAAAA,KAAC,SAAI,WAAU,iBAAiB,eAAK,UAAU,SAAS,KAAK,UAAU,IAAI,CAAC,aAAa,gBAAAA,KAAC,UAAqB,sBAAX,QAAoB,CAAO,IAAI,UAAI;AAAA,UAAM,gBAAAA,KAAC,UAAM,eAAK,OAAM;AAAA,UAAO,gBAAAA,KAAC,YAAQ,UAAAE,OAAM,KAAK,MAAM,GAAE;AAAA,aAD7I,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,KAAK,EAEnH,CAAM;AAAA,QACN,gBAAAD,MAAC,SAAI,WAAU,iBAAgB;AAAA,0BAAAA,MAAC,UAAK;AAAA;AAAA,YAAMC,OAAM,KAAK,SAAS;AAAA,aAAE;AAAA,UAAO,gBAAAD,MAAC,YAAO;AAAA;AAAA,YAASC,OAAM,KAAK,UAAU;AAAA,aAAE;AAAA,WAAS;AAAA,SAC3H;AAAA,OAAM;AAAA,IAEN,gBAAAD,MAAC,aAAQ,WAAU,gBAAe;AAAA,sBAAAD,KAAC,QAAG,yBAAW;AAAA,MAAM,KAAK,YAAY,SAAS,gBAAAA,KAAC,QAAG,WAAU,qBAAqB,eAAK,YAAY,IAAI,CAAC,eAAe,gBAAAC,MAAC,QAAuB;AAAA,wBAAAA,MAAC,SAAI;AAAA,0BAAAD,KAAC,YAAQ,qBAAW,UAAS;AAAA,UAAS,gBAAAA,KAAC,UAAM,qBAAW,eAAe,WAAW,aAAa,QAAQ,MAAM,GAAG,GAAE;AAAA,WAAO;AAAA,QAAO,mBAAmB,gBAAAA,KAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,iBAAiB,UAAU,GAAG,qBAAO,IAAY;AAAA,WAAlQ,WAAW,EAA4P,CAAK,GAAE,IAAQ,gBAAAA,KAAC,OAAE,WAAU,iBAAgB,6BAAe;AAAA,OAAK;AAAA,IACxe,YAAY,gBAAAA,KAAC,SAAI,WAAU,2BAA0B,MAAK,gBAAe,aAAa,CAAC,UAAU;AAAE,UAAI,MAAM,WAAW,MAAM,cAAe,cAAa,KAAK;AAAA,IAAG,GAAG,0BAAAC,MAAC,aAAQ,WAAU,kBAAiB,MAAK,UAAS,cAAW,QAAO,mBAAgB,uBAAsB;AAAA,sBAAAA,MAAC,YAAO;AAAA,wBAAAA,MAAC,SAAI;AAAA,0BAAAD,KAAC,QAAG,IAAG,uBAAuB,qBAAU;AAAA,UAAK,gBAAAA,KAAC,UAAK,kCAAoB;AAAA,WAAO;AAAA,QAAM,gBAAAA,KAAC,YAAO,MAAK,UAAS,cAAW,sCAAqC,SAAS,MAAM,aAAa,KAAK,GAAG,kBAAC;AAAA,SAAS;AAAA,MACne,gBAAAC,MAAC,WAAM,WAAU,6BAA4B;AAAA,wBAAAD,KAAC,UAAK,iCAAmB;AAAA,QAAO,gBAAAA,KAAC,YAAO,cAAW,4CAA2C,OAAO,UAAU,UAAU,CAAC,UAAU,YAAY,MAAM,OAAO,KAAiB,GAAI,qBAAW,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,gBAAAA,KAAC,YAAO,OAAO,IAAc,mBAAL,EAAW,CAAS,GAAE;AAAA,SAAS;AAAA,MACtT,gBAAAA,KAAC,SAAI,WAAU,uBAAsB,MAAK,WAAU,cAAW,oCAC5D,qBAAW,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,gBAAAA,KAAC,YAAO,MAAK,UAAS,MAAK,OAAM,iBAAe,aAAa,IAAa,SAAS,MAAM,YAAY,EAAE,GAAI,mBAArC,EAA2C,CAAS,GAC7J;AAAA,MACA,gBAAAC,MAAC,SAAI,WAAU,wBAAuB,MAAK,YACxC;AAAA,qBAAa,SAAS,gBAAAA,MAAC,QAAG,WAAU,0BAAyB;AAAA,0BAAAD,KAAC,SAAM,OAAM,QAAQ,qBAAU;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,QAAQ,qBAAW,MAAK;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,eAAc,MAAI,MAAE,qBAAW,aAAY;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,WAAW,qBAAW,UAAU,gBAAAA,KAAC,OAAE,MAAM,UAAU,SAAS,QAAO,UAAS,KAAI,uBAAuB,oBAAU,SAAQ,IAAO,UAAI;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,sBAAsB,qBAAW,OAAM;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,iBAAgB,MAAI,MAAE,qBAAW,SAAS,KAAK,IAAI,GAAE;AAAA,UAAQ,gBAAAA,KAAC,SAAM,OAAM,uBAAsB,MAAI,MAAE,qBAAW,oBAAoB,KAAK,IAAI,GAAE;AAAA,WAAQ,IAAQ;AAAA,QACnlB,aAAa,gBAAgB,gBAAAA,KAAC,gBAAa,UAAU,YAAY,OAAM,mEAAkE,IAAK;AAAA,QAC9I,aAAa,kBAAkB,gBAAAA,KAAC,gBAAa,UAAU,WAAW,iBAAiB,CAAC,GAAG,OAAM,qEAAoE,IAAK;AAAA,QACtK,aAAa,YAAY,gBAAAA,KAAC,gBAAa,WAAW,kBAAkB,IAAK;AAAA,QACzE,aAAa,aAAa,gBAAAA,KAAC,gBAAa,UAAU,WAAW,uBAAuB,CAAC,GAAG,IAAK;AAAA,SAChG;AAAA,OACF,GAAU,IAAS;AAAA,KACrB;AACF;AAEA,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;;;AC7JzB,SAAS,eAAe,aAAa,YAAY,aAAAM,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAC7F;AAAA,EACE;AAAA,EACA;AAAA,OAYK;;;ACTP,SAAS,aAAAC,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;AAyIrC,SA4JgB,YAAAC,WA5JhB,OAAAC,MACA,QAAAC,aADA;AAtIR,IAAM,WAAW;AAGV,SAAS,sBAAsB,KAA+C;AACnF,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,QAAQ,IAAI,MAAM,QAAQ;AAChC,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;AAGO,SAAS,mBAAmB,KAAwC;AACzE,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,SAAS,IAAI,QAAQ,OAAO,EAAE;AACpC,QAAM,MAAM,OAAO,WAAW,MAAM,OAAO,WAAW,GAAG,IAAI,OAAO,MAAM,CAAC,IAAI;AAC/E,MAAI,IAAI,WAAW,GAAI,QAAO,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AACrF,SAAO,IAAI,KAAK;AAClB;AAOO,SAAS,wBAAwB,KAAqB;AAC3D,QAAM,UAAU,IAAI,UAAU;AAC9B,MAAI,QAAQ,WAAW,GAAG,EAAG,QAAO;AACpC,QAAM,MAAM,QAAQ,QAAQ,OAAO,EAAE;AACrC,QAAM,SAAS,IAAI,WAAW,MAAM,IAAI,WAAW,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI;AACzE,MAAI,OAAO,SAAS,MAAO,IAAI,WAAW,MAAM,CAAC,IAAI,WAAW,GAAG,KAAM,IAAI,SAAS,GAAI,QAAO;AACjG,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,OAAO,UAAU,EAAG,QAAO,IAAI,MAAM;AACzC,MAAI,OAAO,UAAU,EAAG,QAAO,IAAI,OAAO,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,MAAM,CAAC,CAAC;AACzE,SAAO,IAAI,OAAO,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC;AACzE;AAmBA,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDZ,IAAM,iBAAsD;AAAA,EAC1D,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR;AAEA,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQiB;AACf,SACE,gBAAAA,MAAC,SAAI,WAAU,aAAY,iBAAe,UAAU,iBAAe,QAAQ,QAAQ,GACjF;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,MAAK;AAAA,QACL,gBAAc;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QAET;AAAA,0BAAAD,KAAC,UAAK,WAAU,cAAa,eAAW,MAAC;AAAA,UACzC,gBAAAC,MAAC,UAAK,WAAU,kBACd;AAAA,4BAAAD,KAAC,UAAK,WAAU,mBAAmB,iBAAM;AAAA,YACxC,SAAS,gBAAAA,KAAC,UAAK,WAAU,oBAAmB,OAAO,EAAE,SAAS,QAAQ,GAAI,kBAAO,IAAU;AAAA,aAC9F;AAAA,UACC,SAAS,gBAAAA,KAAC,UAAK,WAAU,eAAe,kBAAO,IAAU;AAAA;AAAA;AAAA,IAC5D;AAAA,IACC,YAAY,WAAW,gBAAAA,KAAC,SAAI,WAAU,YAAY,UAAS,IAAS;AAAA,KACvE;AAEJ;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOiB;AACf,SACE,gBAAAC,MAAC,SAAI,WAAU,eAAc,iBAAe,UAAU,iBAAe,QAAQ,QAAQ,GACnF;AAAA,oBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,MAAK;AAAA,QACL,gBAAc;AAAA,QACd;AAAA,QACA,SAAS;AAAA,QAET;AAAA,0BAAAD,KAAC,UAAK,WAAU,cAAa,eAAW,MAAC,OAAO,EAAE,OAAO,IAAI,QAAQ,GAAG,GAAG;AAAA,UAC3E,gBAAAC,MAAC,UAAK,WAAU,kBACd;AAAA,4BAAAD,KAAC,UAAK,WAAU,qBAAqB,iBAAM;AAAA,YAC1C,SAAS,gBAAAA,KAAC,UAAK,WAAU,sBAAqB,OAAO,EAAE,SAAS,QAAQ,GAAI,kBAAO,IAAU;AAAA,aAChG;AAAA;AAAA;AAAA,IACF;AAAA,IACC,YAAY,WAAW,gBAAAA,KAAC,SAAI,WAAU,oBAAoB,UAAS,IAAS;AAAA,KAC/E;AAEJ;AAEO,SAAS,gBAAgB;AAAA,EAC9B,QAAQ;AAAA,EACR;AAAA,EACA,aAAa;AAAA,EACb,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,cAAc,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,OAAO;AAC9E,QAAM,aAAa,SAAS,QAAQ,KAAK,CAAC,WAAW,OAAO,UAAU,MAAM;AAC5E,QAAM,mBAAmB,SAAS,YAAY;AAC9C,QAAM,cAAc,sBAAsB,SAAS,SAAS,WAAW;AACvE,QAAM,YAAY,SAAS,SAAS,WAAW,KAAK,KAAK;AACzD,QAAM,mBAAmB,mBAAmB,SAAS;AACrD,QAAM,aAAa,SAAS,SAAS,gBAAgB,KAAK,KAAK;AAE/D,QAAM,CAAC,OAAO,QAAQ,IAAIF,UAA8B,gBAAgB;AACxE,QAAM,CAAC,WAAW,YAAY,IAAIA,UAA2B,cAAc,WAAW,KAAK;AAC3F,QAAM,CAAC,SAAS,UAAU,IAAIA,UAA2B,YAAY,WAAW,KAAK;AACrF,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,EAAE;AACzC,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,EAAE;AACrC,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,EAAE;AAC7C,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAS,UAAU;AAE/C,EAAAF,WAAU,MAAM;AACd,aAAS,gBAAgB;AACzB,iBAAa,cAAc,WAAW,KAAK;AAC3C,eAAW,YAAY,WAAW,KAAK;AACvC,cAAU,UAAU;AAAA,EACtB,GAAG,CAAC,kBAAkB,aAAa,WAAW,UAAU,CAAC;AAGzD,EAAAA,WAAU,MAAM;AACd,UAAM,QAAQ,CAAC,UAAyB;AACtC,UAAI,MAAM,QAAQ,YAAY,CAAC,WAAY,UAAS;AAAA,IACtD;AACA,WAAO,iBAAiB,WAAW,KAAK;AACxC,WAAO,MAAM,OAAO,oBAAoB,WAAW,KAAK;AAAA,EAC1D,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,QAAM,iBAAiB,cAAc,YAAY,cAAc,cAAc,QAAQ,KAAK;AAC1F,QAAM,eAAe,YAAY,YAAY,YAAY,YAAY;AACrE,QAAM,YAAY,aAAa,QAAQ,OAAO,EAAE;AAChD,QAAM,aAAa,SAAS,KAAK,cAAc;AAC/C,QAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO;AAChF,QAAM,UAAU,OAAO,MAAM,CAAC,UAAU,SAAS,KAAK,KAAK,CAAC;AAC5D,QAAM,WAAW,UAAU,UAAU;AACrC,QAAM,YAAY,OAAO,KAAK,EAAE,SAAS;AACzC,QAAM,kBACJ,cACG,YACC,UAAU,YAAY,CAAC,cAAc,CAAC,YACtC,UAAU,SAAS,CAAC,YACpB,UAAU,UAAU,CAAC;AAE3B,QAAM,aAAaC,SAAQ,MAA2B;AACpD,QAAI,UAAU,SAAS;AACrB,aAAO;AAAA,QACL;AAAA,QACA,aAAa,EAAE,OAAO,eAAe;AAAA,QACrC,GAAI,QAAQ,KAAK,IAAI,EAAE,SAAS,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACpD,GAAI,QAAQ,KAAK,IAAI,EAAE,MAAM,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,QACjD,GAAI,OAAO,SAAS,EAAE,IAAI,OAAO,IAAI,CAAC;AAAA,MACxC;AAAA,IACF;AACA,QAAI,UAAU,OAAO;AACnB,aAAO;AAAA,QACL;AAAA,QACA,aAAa,EAAE,WAAW,aAAa,KAAK,EAAE;AAAA,QAC9C,GAAI,UAAU,KAAK,IAAI,EAAE,WAAW,UAAU,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5D;AAAA,IACF;AACA,QAAI,UAAU,QAAQ;AACpB,aAAO,EAAE,OAAO,aAAa,EAAE,gBAAgB,OAAO,KAAK,EAAE,EAAE;AAAA,IACjE;AACA,WAAO,EAAE,MAAM;AAAA,EAEjB,GAAG,CAAC,OAAO,gBAAgB,SAAS,SAAS,SAAS,cAAc,WAAW,MAAM,CAAC;AAEtF,SACE,gBAAAI,MAAC,SAAI,WAAU,gBAAe,MAAK,gBAAe,aAAa,CAAC,UAAU;AAAE,QAAI,MAAM,WAAW,MAAM,iBAAiB,CAAC,WAAY,UAAS;AAAA,EAAG,GAC/I;AAAA,oBAAAD,KAAC,WAAO,eAAI;AAAA,IACZ,gBAAAC,MAAC,SAAI,WAAU,QAAO,MAAK,UAAS,cAAW,QAAO,cAAY,OAAO,UAAU,WAAW,QAAQ,aACpG;AAAA,sBAAAA,MAAC,SAAI,WAAU,aACb;AAAA,wBAAAA,MAAC,SACC;AAAA,0BAAAD,KAAC,QAAG,WAAU,cAAc,iBAAM;AAAA,UAClC,gBAAAA,KAAC,OAAE,WAAU,aAAY,yCAA2B;AAAA,WACtD;AAAA,QACA,gBAAAA,KAAC,YAAO,WAAU,cAAa,MAAK,UAAS,cAAW,SAAQ,UAAU,YAAY,SAAS,UAAU,kBAAC;AAAA,SAC5G;AAAA,MAEA,gBAAAA,KAAC,SAAI,WAAU,cAAa,MAAK,cAAa,cAAW,mBACrD,iBAAM;AACN,cAAM,YAAY,cAChB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,UAAU;AAAA,YACpB,OAAO,YAAY,eAAe,YAAY,QAAQ,aAAa,YAAY,aAAa,SAAS,SAAS;AAAA,YAC9G,QAAQ;AAAA,cACN,YAAY,UAAU;AAAA,cACtB,CAAC,YAAY,gBAAgB,YAAY,MAAM,WAAW,SAAS,IAC/D,YAAY,MAAM,MAAM,UAAU,MAAM,IACxC;AAAA,YACN,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK;AAAA,YAC5B,QAAQ,gBAAAC,MAAAF,WAAA,EACL;AAAA,eAAC,YAAY,WAAW,gBAAAC,KAAC,UAAK,WAAU,cAAa,aAAU,YAAW,4BAAc,IAAU;AAAA,cAClG,qBAAqB,UAAU,gBAAAA,KAAC,UAAK,WAAU,cAAa,aAAU,QAAO,kBAAI,IAAU;AAAA,eAC9F;AAAA,YACA,UAAU,MAAM,SAAS,OAAO;AAAA;AAAA,UAb5B;AAAA,QAcN,IACE;AAEJ,cAAM,YACJ,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,UAAU;AAAA,YACpB,OAAM;AAAA,YACN,QAAQ,eAAe;AAAA,YACvB,QAAQ,qBAAqB,UAAU,gBAAAD,KAAC,UAAK,WAAU,cAAa,aAAU,QAAO,kBAAI,IAAU;AAAA,YACnG,UAAU,MAAM,SAAS,OAAO;AAAA,YAEhC;AAAA,8BAAAC,MAAC,SAAI,MAAK,cAAa,cAAW,mBAAkB,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACnF;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,UAAU,cAAc;AAAA,oBACxB,UAAU,CAAC;AAAA,oBACX,OAAO,eAAe;AAAA,oBACtB,QAAQ,cAAc,2BAA2B;AAAA,oBACjD,UAAU,MAAM,aAAa,QAAQ;AAAA;AAAA,gBACvC;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,UAAU,cAAc;AAAA,oBACxB,OAAM;AAAA,oBACN,UAAU,MAAM,aAAa,KAAK;AAAA,oBAElC,0BAAAC,MAAC,WAAM,WAAU,cACf;AAAA,sCAAAA,MAAC,UAAK,WAAU,cAAa;AAAA;AAAA,wBAA0B,gBAAAD,KAAC,UAAK,WAAU,aAAY,eAAC;AAAA,yBAAO;AAAA,sBAC3F,gBAAAA,KAAC,WAAM,WAAU,cAAa,MAAK,SAAQ,OAAO,SAAS,aAAY,iBAAgB,UAAU,CAAC,UAAU,WAAW,MAAM,OAAO,KAAK,GAAG;AAAA,sBAC3I,QAAQ,KAAK,KAAK,CAAC,SAAS,KAAK,QAAQ,KAAK,CAAC,IAAI,gBAAAA,KAAC,UAAK,WAAU,cAAa,0CAA4B,IAAU;AAAA,uBACzH;AAAA;AAAA,gBACF;AAAA,iBACF;AAAA,cACA,gBAAAC,MAAC,WAAM,WAAU,cACf;AAAA,gCAAAD,KAAC,UAAK,WAAU,cAAa,gCAAa;AAAA,gBAC1C,gBAAAA,KAAC,WAAM,WAAU,cAAa,OAAO,SAAS,aAAY,4CAA2C,UAAU,CAAC,UAAU,WAAW,MAAM,OAAO,KAAK,GAAG;AAAA,gBACzJ,CAAC,UAAU,gBAAAA,KAAC,UAAK,WAAU,cAAa,iFAAmE,IAAU;AAAA,iBACxH;AAAA,cACA,gBAAAC,MAAC,WAAM,WAAU,cACf;AAAA,gCAAAD,KAAC,UAAK,WAAU,cAAa,2CAAwB;AAAA,gBACrD,gBAAAA,KAAC,WAAM,WAAU,cAAa,OAAO,SAAS,WAAW,KAAK,UAAU,CAAC,UAAU,WAAW,MAAM,OAAO,KAAK,GAAG;AAAA,iBACrH;AAAA,cACA,gBAAAC,MAAC,WAAM,WAAU,cACf;AAAA,gCAAAD,KAAC,UAAK,WAAU,cAAa,qCAAkB;AAAA,gBAC/C,gBAAAA,KAAC,cAAS,WAAU,iBAAgB,OAAO,SAAS,WAAW,KAAM,aAAY,+DAA8D,UAAU,CAAC,UAAU,WAAW,MAAM,OAAO,KAAK,GAAG;AAAA,iBACtM;AAAA;AAAA;AAAA,UAvCI;AAAA,QAwCN;AAGF,cAAM,UACJ,gBAAAC;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,UAAU;AAAA,YACpB,OAAM;AAAA,YACN,QAAQ,YAAY,GAAG,gBAAgB,8BAAyB;AAAA,YAChE,QAAQ,qBAAqB,QAAQ,gBAAAD,KAAC,UAAK,WAAU,cAAa,aAAU,QAAO,kBAAI,IAAU;AAAA,YACjG,UAAU,MAAM,SAAS,KAAK;AAAA,YAE9B;AAAA,8BAAAC,MAAC,SAAI,MAAK,cAAa,cAAW,iBAAgB,OAAO,EAAE,SAAS,QAAQ,KAAK,EAAE,GACjF;AAAA,gCAAAD;AAAA,kBAAC;AAAA;AAAA,oBACC,UAAU,YAAY;AAAA,oBACtB,UAAU,CAAC;AAAA,oBACX,OAAO,YAAY,mBAAmB;AAAA,oBACtC,QAAQ,YAAY,sBAAsB;AAAA,oBAC1C,UAAU,MAAM,WAAW,QAAQ;AAAA;AAAA,gBACrC;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,UAAU,YAAY;AAAA,oBACtB,OAAM;AAAA,oBACN,UAAU,MAAM,WAAW,KAAK;AAAA,oBAEhC,0BAAAC,MAAC,WAAM,WAAU,cACf;AAAA,sCAAAA,MAAC,UAAK,WAAU,cAAa;AAAA;AAAA,wBAAuB,gBAAAD,KAAC,UAAK,WAAU,aAAY,eAAC;AAAA,yBAAO;AAAA,sBACxF,gBAAAA,KAAC,WAAM,WAAU,cAAa,WAAU,OAAM,OAAO,OAAO,aAAY,kBAAiB,UAAU,CAAC,UAAU,SAAS,wBAAwB,MAAM,OAAO,KAAK,CAAC,GAAG;AAAA,sBACpK,MAAM,KAAK,KAAK,MAAM,QAAQ,OAAO,EAAE,EAAE,SAAS,KAAK,gBAAAA,KAAC,UAAK,WAAU,cAAa,mDAAqC,IAAU;AAAA,uBACtI;AAAA;AAAA,gBACF;AAAA,iBACF;AAAA,cACA,gBAAAC,MAAC,WAAM,WAAU,cACf;AAAA,gCAAAD,KAAC,UAAK,WAAU,cAAa,uCAAoB;AAAA,gBACjD,gBAAAA,KAAC,WAAM,WAAU,cAAa,OAAO,WAAW,WAAW,KAAK,aAAY,kBAAiB,UAAU,CAAC,UAAU,aAAa,MAAM,OAAO,KAAK,GAAG;AAAA,gBACpJ,gBAAAA,KAAC,UAAK,WAAU,aAAY,0DAA4C;AAAA,iBAC1E;AAAA;AAAA;AAAA,UA/BI;AAAA,QAgCN;AAGF,cAAM,WACJ,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,UAAU,UAAU;AAAA,YACpB,OAAM;AAAA,YACN,QAAQ,aAAa,WAAW,QAAQ,OAAO,IAAI,IAAI;AAAA,YACvD,QAAQ,qBAAqB,SAAS,gBAAAA,KAAC,UAAK,WAAU,cAAa,aAAU,QAAO,kBAAI,IAAU;AAAA,YAClG,UAAU,MAAM,SAAS,MAAM;AAAA,YAE/B,0BAAAC,MAAC,WAAM,WAAU,cACf;AAAA,8BAAAA,MAAC,UAAK,WAAU,cAAa;AAAA;AAAA,gBAAgB,gBAAAD,KAAC,UAAK,WAAU,aAAY,eAAC;AAAA,iBAAO;AAAA,cACjF,gBAAAA,KAAC,cAAS,WAAU,iBAAgB,OAAO,QAAQ,aAAa,kDAAkD,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,KAAK,GAAG;AAAA,cACrK,CAAC,YAAY,gBAAAA,KAAC,UAAK,WAAU,cAAa,sCAAwB,IAAU;AAAA,cAC7E,gBAAAA,KAAC,UAAK,WAAU,aACb,sBAAY,eACT,WAAW,SACX,oEACN;AAAA,eACF;AAAA;AAAA,UAhBI;AAAA,QAiBN;AAKF,cAAM,QAAqB,CAAC;AAC5B,YAAI,UAAW,OAAM,KAAK,SAAS;AACnC,YAAI,UAAW,OAAM,KAAK,OAAO;AACjC,YAAI,YAAa,OAAM,KAAK,SAAS;AACrC,cAAM,KAAK,QAAQ;AACnB,YAAI,CAAC,UAAW,OAAM,KAAK,OAAO;AAClC,YAAI,CAAC,YAAa,OAAM,KAAK,SAAS;AACtC,eAAO;AAAA,MACT,GAAG,GACL;AAAA,MAEC,QAAQ,gBAAAA,KAAC,SAAI,WAAU,cAAa,MAAK,SAAS,iBAAM,IAAS;AAAA,MAElE,gBAAAC,MAAC,SAAI,WAAU,gBACb;AAAA,wBAAAD,KAAC,YAAO,WAAU,eAAc,MAAK,UAAS,UAAU,YAAY,SAAS,UAAU,oBAAM;AAAA,QAC7F,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,UAAU;AAAA,YACV,SAAS,MAAM,UAAU,UAAU;AAAA,YAElC,uBAAa,qBAAgB,eAAe,KAAK;AAAA;AAAA,QACpD;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAEJ;;;ACxbA,SAAS,aAAAE,YAAW,YAAAC,iBAAgB;AA4B3B,SA8Dqb,YAAAC,WA9Drb,OAAAC,MAkBL,QAAAC,aAlBK;AAXT,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASZ,SAAS,SAAS,OAAe,MAA+C;AAC9E,QAAM,OAAO,SAAS,UAAU,OAAO,MAAM,QAAQ,WAAW,EAAE,CAAC,KAAK,SAAS,UAAU,UAAU,KAAK,KAAK,gBAAgB,KAAK,KAAK,IAAI,QAAQ,WAAW,KAAK;AACrK,SAAO,gBAAAF,KAAC,OAAE,MAAa,GAAI,SAAS,QAAQ,EAAE,QAAQ,UAAU,KAAK,aAAa,IAAI,CAAC,GAAK,iBAAM;AACpG;AAEA,SAAS,KAAK,QAA8B,MAA6C;AACvF,SAAO,QAAQ,SAAS,gBAAAA,KAAC,QAAG,WAAU,cAAc,iBAAO,IAAI,CAAC,OAAO,UAAU,gBAAAA,KAAC,QAA8B,iBAAO,SAAS,OAAO,IAAI,IAAI,SAArD,GAAG,KAAK,IAAI,KAAK,EAA0C,CAAK,GAAE,IAAQ;AACtK;AAEA,SAAS,aAAa,OAAqC,OAA6B;AACtF,QAAM,cAAc,OAAO,QAAQ,MAAM,yBAAyB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,QAAQ,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE;AAC7H,QAAM,WAAW;AAAA,IACf,MAAM,aAAa,SAAS,MAAM,UAAU,KAAK;AAAA,IACjD,MAAM,eAAe,aAAa,MAAM,YAAY,KAAK;AAAA,IACzD,MAAM,iBAAiB,MAAM,UAAU,GAAG,MAAM,aAAa,KAAK,MAAM,OAAO,KAAK;AAAA,IACpF,MAAM,uBAAuB,MAAM,gBAAgB,kBAAkB,MAAM,mBAAmB,IAAI,MAAM,aAAa,KAAK;AAAA,IAC1H,GAAG;AAAA,IACH,MAAM,yBAAyB,cAAc,MAAM,sBAAsB,KAAK;AAAA,EAChF,EAAE,OAAO,CAAC,UAA2B,QAAQ,KAAK,CAAC;AACnD,SAAO,gBAAAC,MAAC,QAAG,WAAU,eACnB;AAAA,oBAAAA,MAAC,SAAI,WAAU,oBAAmB;AAAA,sBAAAD,KAAC,YAAQ,gBAAM,MAAK;AAAA,MAAU,MAAM,QAAQ,gBAAAA,KAAC,UAAK,WAAU,qBAAqB,gBAAM,OAAM,IAAU;AAAA,OAAK;AAAA,IAC7I,MAAM,SAAS,SAAS,gBAAAC,MAAC,OAAE,WAAU,oBAAmB;AAAA;AAAA,MAAe,MAAM,QAAQ,KAAK,IAAI;AAAA,OAAE,IAAO;AAAA,IACvG,MAAM,OAAO,gBAAAD,KAAC,OAAE,WAAU,oBAAoB,gBAAM,MAAK,IAAO;AAAA,IAChE,MAAM,oBAAoB,SAAS,gBAAAC,MAAC,OAAE,WAAU,oBAAmB;AAAA;AAAA,MAAiB,MAAM,mBAAmB,KAAK,IAAI;AAAA,OAAE,IAAO;AAAA,IAC/H,SAAS,SAAS,gBAAAD,KAAC,SAAI,WAAU,oBAAoB,mBAAS,IAAI,CAAC,SAAS,gBAAAA,KAAC,UAAiB,kBAAP,IAAY,CAAO,GAAE,IAAS;AAAA,OALhF,GAAG,MAAM,IAAI,IAAI,KAAK,EAM9D;AACF;AAEA,SAAS,KAAK,EAAE,UAAU,GAAkE;AAC1F,SAAO,gBAAAA,KAAC,SAAI,WAAU,cAClB;AAAA,IACA,CAAC,QAAQ,UAAU,QAAQ,QAAG;AAAA,IAAG,CAAC,eAAe,UAAU,eAAe,QAAG;AAAA,IAAG,CAAC,QAAQ,UAAU,QAAQ,QAAG;AAAA,IAC9G,CAAC,WAAW,UAAU,UAAU,SAAS,UAAU,SAAS,KAAK,IAAI,QAAG;AAAA,IACxE,CAAC,iBAAiB,KAAK,UAAU,OAAO,CAAC;AAAA,IAAG,CAAC,uBAAuB,KAAK,UAAU,kBAAkB,CAAC;AAAA,IACtG,CAAC,sBAAsB,UAAU,SAAS,QAAG;AAAA,IAAG,CAAC,qBAAqB,KAAK,UAAU,kBAAkB,OAAO,CAAC;AAAA,IAC/G,CAAC,mBAAmB,KAAK,UAAU,gBAAgB,OAAO,CAAC;AAAA,IAAG,CAAC,eAAe,KAAK,UAAU,YAAY,KAAK,CAAC;AAAA,IAC/G,CAAC,UAAU,UAAU,QAAQ,SAAS,gBAAAA,KAAC,QAAG,WAAU,gBAAgB,oBAAU,OAAO,IAAI,YAAY,GAAE,IAAQ,QAAG;AAAA,IAClH,CAAC,4BAA4B,UAAU,0BAA0B,QAAG;AAAA,IACpE,CAAC,kCAAkC,UAAU,+BAA+B,QAAG;AAAA,IAC/E,CAAC,qBAAqB,UAAU,mBAAmB,QAAG;AAAA,EACxD,EAAiC,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,gBAAAC,MAAC,SAAI,WAAU,aAAwB;AAAA,oBAAAD,KAAC,YAAQ,iBAAM;AAAA,IAAS,gBAAAA,KAAC,SAAK,iBAAM;AAAA,OAA3C,KAAiD,CAAM,GAClJ;AACF;AAEA,SAAS,SAAS,OAAqD,OAA6B;AAClG,MAAI,CAAC,OAAO,OAAQ,QAAO,gBAAAA,KAAC,SAAI,WAAU,eAAe,iBAAM;AAC/D,SAAO,gBAAAC,MAAC,WAAM,WAAU,eAAc;AAAA,oBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,sBAAAD,KAAC,QAAG,kBAAI;AAAA,MAAK,gBAAAA,KAAC,QAAG,uBAAS;AAAA,MAAK,gBAAAA,KAAC,QAAG,wBAAU;AAAA,MAAK,gBAAAA,KAAC,QAAG,mBAAK;AAAA,MAAK,gBAAAA,KAAC,QAAG,iBAAG;AAAA,MAAK,gBAAAA,KAAC,QAAG,4BAAc;AAAA,OAAK,GAAK;AAAA,IAAQ,gBAAAA,KAAC,WAAO,gBAAM,IAAI,CAAC,MAAM,UAAU,gBAAAC,MAAC,QAA8C;AAAA,sBAAAD,KAAC,QAAI,eAAK,QAAQ,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,eAAK,QAAQ,SAAS,KAAK,OAAO,OAAO,IAAI,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,eAAK,YAAY,SAAS,KAAK,WAAW,KAAK,IAAI,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,eAAK,QAAQ,SAAS,KAAK,OAAO,OAAO,IAAI,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,eAAK,OAAO,UAAI;AAAA,MAAK,gBAAAA,KAAC,QAAI,WAAC,KAAK,SAAS,KAAK,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK,KAAK,UAAI;AAAA,SAApV,GAAG,KAAK,QAAQ,SAAS,IAAI,KAAK,EAAuT,CAAK,GAAE;AAAA,KAAQ;AACvjB;AAEO,SAAS,mCAAmC,EAAE,MAAM,WAAW,UAAU,OAAO,OAAO,QAAQ,GAAiE;AACrK,QAAM,CAAC,KAAK,MAAM,IAAIF,UAAc,MAAM;AAC1C,EAAAD,WAAU,MAAM;AAAE,QAAI,KAAM,QAAO,MAAM;AAAA,EAAG,GAAG,CAAC,MAAM,WAAW,EAAE,CAAC;AACpE,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,UAAM,QAAQ,CAAC,UAAyB;AAAE,UAAI,MAAM,QAAQ,SAAU,SAAQ;AAAA,IAAG;AACjF,WAAO,iBAAiB,WAAW,KAAK;AAAG,WAAO,MAAM,OAAO,oBAAoB,WAAW,KAAK;AAAA,EACrG,GAAG,CAAC,SAAS,IAAI,CAAC;AAClB,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,WAAW,QAAQ;AACjC,SAAO,gBAAAI,MAAC,SAAI,WAAU,kBAAiB,aAAa,CAAC,UAAU;AAAE,QAAI,MAAM,WAAW,MAAM,cAAe,SAAQ;AAAA,EAAG,GAAG;AAAA,oBAAAD,KAAC,WAAO,UAAAE,MAAI;AAAA,IAAQ,gBAAAD,MAAC,aAAQ,WAAU,gBAAe,MAAK,UAAS,cAAW,QAAO,mBAAgB,eAC7N;AAAA,sBAAAA,MAAC,YAAO,WAAU,cAAa;AAAA,wBAAAD,KAAC,QAAG,IAAG,eAAe,iBAAM;AAAA,QAAK,gBAAAA,KAAC,YAAO,WAAU,eAAc,MAAK,UAAS,cAAW,sCAAqC,SAAS,SAAS,kBAAC;AAAA,SAAS;AAAA,MAC1L,gBAAAA,KAAC,SAAI,WAAU,cAAa,MAAK,WAAY;AAAA,QAC3C,CAAC,QAAQ,MAAM;AAAA,QAAG,CAAC,eAAe,aAAa;AAAA,QAAG,CAAC,iBAAiB,oBAAoB;AAAA,QAAG,CAAC,WAAW,iBAAiB;AAAA,QAAG,CAAC,YAAY,sBAAsB;AAAA,MAChK,EAA2B,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,gBAAAA,KAAC,YAAO,WAAU,aAAY,MAAK,UAAS,MAAK,OAAM,iBAAe,QAAQ,IAAI,SAAS,MAAM,OAAO,EAAE,GAAa,mBAAL,EAAW,CAAS,GAAE;AAAA,MACxL,gBAAAA,KAAC,SAAI,WAAU,cAAa,MAAK,YAAY,oBAAU,gBAAAA,KAAC,SAAI,WAAU,eAAc,6CAA0B,IAAS,QAAQ,gBAAAA,KAAC,SAAI,WAAU,eAAc,MAAK,SAAS,iBAAM,IAAS,CAAC,YAAY,gBAAAA,KAAC,SAAI,WAAU,eAAc,gDAAkC,IAAS,QAAQ,SAAS,gBAAAA,KAAC,QAAK,WAAsB,IAAK,QAAQ,gBAAgB,SAAS,UAAU,YAAY,qCAAqC,IAAI,QAAQ,kBAAkB,gBAAAC,MAAAF,WAAA,EAAG;AAAA,kBAAU,sBAAsB,gBAAAC,KAAC,OAAE,WAAU,gBAAgB,oBAAU,qBAAoB,IAAO;AAAA,QAAM,SAAS,UAAU,eAAe,uCAAuC;AAAA,SAAE,IAAM,QAAQ,YAAY,UAAU,kBAAkB,SAAS,gBAAAC,MAAC,WAAM,WAAU,eAAc;AAAA,wBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,0BAAAD,KAAC,QAAG,qBAAO;AAAA,UAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,UAAK,gBAAAA,KAAC,QAAG,mBAAK;AAAA,UAAK,gBAAAA,KAAC,QAAG,kCAAoB;AAAA,UAAK,gBAAAA,KAAC,QAAG,6BAAe;AAAA,WAAK,GAAK;AAAA,QAAQ,gBAAAA,KAAC,WAAO,oBAAU,iBAAiB,IAAI,CAAC,MAAM,UAAU,gBAAAC,MAAC,QAAoC;AAAA,0BAAAD,KAAC,QAAI,eAAK,WAAW,UAAI;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,SAAQ;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,SAAS,UAAI;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,oBAAoB,KAAK,IAAI,KAAK,UAAI;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,iBAAiB,KAAK,IAAI,KAAK,UAAI;AAAA,aAA/M,GAAG,KAAK,OAAO,IAAI,KAAK,EAA4L,CAAK,GAAE;AAAA,SAAQ,IAAW,gBAAAA,KAAC,SAAI,WAAU,eAAc,8CAAgC,IAAS,UAAU,qBAAqB,SAAS,gBAAAC,MAAC,WAAM,WAAU,eAAc;AAAA,wBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,0BAAAD,KAAC,QAAG,oBAAM;AAAA,UAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,UAAK,gBAAAA,KAAC,QAAG,qBAAO;AAAA,WAAK,GAAK;AAAA,QAAQ,gBAAAA,KAAC,WAAO,oBAAU,oBAAoB,IAAI,CAAC,MAAM,UAAU,gBAAAC,MAAC,QAAoC;AAAA,0BAAAD,KAAC,QAAI,eAAK,UAAU,UAAI;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,SAAQ;AAAA,UAAK,gBAAAA,KAAC,QAAI,eAAK,WAAW,UAAI;AAAA,aAAzG,GAAG,KAAK,OAAO,IAAI,KAAK,EAAsF,CAAK,GAAE;AAAA,SAAQ,IAAW,gBAAAA,KAAC,SAAI,WAAU,eAAc,kDAAoC,GAAO;AAAA,OAClmD;AAAA,KAAU;AACZ;;;ACvFO,IAAM,qCAAsE;AAAA,EACjF,EAAE,MAAM,SAAS,aAAa,qDAAqD,eAAe,OAAO;AAAA,EACzG,EAAE,MAAM,SAAS,aAAa,0CAA0C,eAAe,KAAK;AAAA,EAC5F,EAAE,MAAM,SAAS,aAAa,sCAAsC,eAAe,QAAQ;AAAA,EAC3F,EAAE,MAAM,SAAS,aAAa,yCAAyC,eAAe,IAAI;AAAA,EAC1F,EAAE,MAAM,SAAS,aAAa,2BAA2B,eAAe,OAAO;AAAA,EAC/E,EAAE,MAAM,SAAS,aAAa,iCAAiC,eAAe,MAAM;AAAA,EACpF,EAAE,MAAM,SAAS,aAAa,+BAA+B,eAAe,EAAE;AAAA,EAC9E,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,0DAA0D;AAAA,EACxF,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAC1D,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAC1D,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAC1D,EAAE,MAAM,SAAS,aAAa,uCAAuC;AAAA,EACrE,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,sBAAsB;AAAA,EACpD,EAAE,MAAM,SAAS,aAAa,yBAAyB;AAAA,EACvD,EAAE,MAAM,SAAS,aAAa,mCAAmC;AAAA,EACjE,EAAE,MAAM,SAAS,aAAa,mCAAmC;AAAA,EACjE,EAAE,MAAM,SAAS,aAAa,mCAAmC;AAAA,EACjE,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,qCAAqC,eAAe,OAAO;AAAA,EACzF,EAAE,MAAM,SAAS,aAAa,4CAA4C;AAAA,EAC1E,EAAE,MAAM,SAAS,aAAa,4CAA4C;AAAA,EAC1E,EAAE,MAAM,SAAS,aAAa,4CAA4C;AAAA,EAC1E,EAAE,MAAM,SAAS,aAAa,4CAA4C;AAAA,EAC1E,EAAE,MAAM,SAAS,aAAa,4CAA4C;AAAA,EAC1E,EAAE,MAAM,SAAS,aAAa,+CAA+C;AAAA,EAC7E,EAAE,MAAM,SAAS,aAAa,0DAA0D,eAAe,OAAO;AAAA,EAC9G,EAAE,MAAM,SAAS,aAAa,gEAAgE;AAAA,EAC9F,EAAE,MAAM,SAAS,aAAa,0EAA0E;AAAA,EACxG,EAAE,MAAM,SAAS,aAAa,8CAA8C;AAAA,EAC5E,EAAE,MAAM,SAAS,aAAa,mDAAmD;AAAA,EACjF,EAAE,MAAM,SAAS,aAAa,+CAA+C;AAAA,EAC7E,EAAE,MAAM,SAAS,aAAa,wBAAwB;AAAA,EACtD,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAC1D,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAC1D,EAAE,MAAM,SAAS,aAAa,yBAAyB;AAAA,EACvD,EAAE,MAAM,SAAS,aAAa,mDAAmD;AAAA,EACjF,EAAE,MAAM,SAAS,aAAa,mDAAmD;AAAA,EACjF,EAAE,MAAM,SAAS,aAAa,iDAAiD;AAAA,EAC/E,EAAE,MAAM,SAAS,aAAa,2CAA2C;AAAA,EACzE,EAAE,MAAM,SAAS,aAAa,gCAAgC;AAAA,EAC9D,EAAE,MAAM,SAAS,aAAa,sCAAsC;AAAA,EACpE,EAAE,MAAM,SAAS,aAAa,oCAAoC;AAAA,EAClE,EAAE,MAAM,SAAS,aAAa,6CAA6C;AAAA,EAC3E,EAAE,MAAM,SAAS,aAAa,sCAAsC;AAAA,EACpE,EAAE,MAAM,SAAS,aAAa,uCAAuC;AAAA,EACrE,EAAE,MAAM,SAAS,aAAa,sDAAsD;AAAA,EACpF,EAAE,MAAM,SAAS,aAAa,mEAAmE;AAAA,EACjG,EAAE,MAAM,SAAS,aAAa,yBAAyB;AAAA,EACvD,EAAE,MAAM,SAAS,aAAa,kBAAkB;AAAA,EAChD,EAAE,MAAM,SAAS,aAAa,aAAa;AAC7C;AAEO,IAAM,oCAAoE;AAAA,EAC/E,EAAE,MAAM,MAAM,aAAa,wCAAwC;AAAA,EACnE,EAAE,MAAM,MAAM,aAAa,uBAAuB;AAAA,EAClD,EAAE,MAAM,MAAM,aAAa,2BAA2B;AAAA,EACtD,EAAE,MAAM,MAAM,aAAa,8BAA8B;AAAA,EACzD,EAAE,MAAM,MAAM,aAAa,uCAAuC;AAAA,EAClE,EAAE,MAAM,MAAM,aAAa,wBAAwB;AAAA,EACnD,EAAE,MAAM,MAAM,aAAa,sBAAsB;AAAA,EACjD,EAAE,MAAM,MAAM,aAAa,8BAA8B;AAAA,EACzD,EAAE,MAAM,MAAM,aAAa,qBAAqB;AAAA,EAChD,EAAE,MAAM,MAAM,aAAa,qBAAqB;AAAA,EAChD,EAAE,MAAM,MAAM,aAAa,wBAAwB;AAAA,EACnD,EAAE,MAAM,MAAM,aAAa,kCAAkC;AAC/D;AAGO,IAAM,qCAAqE;AAAA,EAChF,EAAE,MAAM,cAAc,aAAa,6BAA6B;AAAA,EAChE,EAAE,MAAM,cAAc,aAAa,eAAe;AAAA,EAClD,EAAE,MAAM,cAAc,aAAa,eAAe;AAAA,EAClD,EAAE,MAAM,cAAc,aAAa,UAAU;AAAA,EAC7C,EAAE,MAAM,cAAc,aAAa,wBAAwB;AAAA,EAC3D,EAAE,MAAM,cAAc,aAAa,mBAAmB;AAAA,EACtD,EAAE,MAAM,cAAc,aAAa,aAAa;AAAA,EAChD,EAAE,MAAM,cAAc,aAAa,iBAAiB;AAAA,EACpD,EAAE,MAAM,cAAc,aAAa,qBAAqB;AAAA,EACxD,EAAE,MAAM,cAAc,aAAa,kBAAkB;AAAA,EACrD,EAAE,MAAM,cAAc,aAAa,oBAAoB;AAAA,EACvD,EAAE,MAAM,cAAc,aAAa,yBAAyB;AAAA,EAC5D,EAAE,MAAM,cAAc,aAAa,aAAa;AAAA,EAChD,EAAE,MAAM,cAAc,aAAa,oBAAoB;AAAA,EACvD,EAAE,MAAM,cAAc,aAAa,eAAe;AAAA,EAClD,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,EAC1D,EAAE,MAAM,cAAc,aAAa,sBAAsB;AAAA,EACzD,EAAE,MAAM,cAAc,aAAa,mCAAmC;AAAA,EACtE,EAAE,MAAM,cAAc,aAAa,iBAAiB;AAAA,EACpD,EAAE,MAAM,cAAc,aAAa,aAAa;AAAA,EAChD,EAAE,MAAM,cAAc,aAAa,qCAAqC;AAAA,EACxE,EAAE,MAAM,cAAc,aAAa,wBAAwB;AAAA,EAC3D,EAAE,MAAM,cAAc,aAAa,YAAY;AAAA,EAC/C,EAAE,MAAM,cAAc,aAAa,aAAa;AAAA,EAChD,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,EAC1D,EAAE,MAAM,cAAc,aAAa,gCAAgC;AAAA,EACnE,EAAE,MAAM,cAAc,aAAa,iBAAiB;AAAA,EACpD,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,EAC1D,EAAE,MAAM,cAAc,aAAa,UAAU;AAAA,EAC7C,EAAE,MAAM,cAAc,aAAa,sBAAsB;AAAA,EACzD,EAAE,MAAM,cAAc,aAAa,mBAAmB;AAAA,EACtD,EAAE,MAAM,cAAc,aAAa,cAAc;AAAA,EACjD,EAAE,MAAM,cAAc,aAAa,gBAAgB;AAAA,EACnD,EAAE,MAAM,cAAc,aAAa,aAAa;AAAA,EAChD,EAAE,MAAM,cAAc,aAAa,qBAAqB;AAAA,EACxD,EAAE,MAAM,cAAc,aAAa,yBAAyB;AAAA,EAC5D,EAAE,MAAM,cAAc,aAAa,sBAAsB;AAAA,EACzD,EAAE,MAAM,cAAc,aAAa,qBAAqB;AAC1D;AAEO,IAAM,wCAAkG;AAAA,EAC7G,EAAE,OAAO,SAAS,MAAM,SAAS,aAAa,yDAAyD;AAAA,EACvG,EAAE,OAAO,QAAQ,MAAM,UAAU,aAAa,6BAA6B;AAAA,EAC3E,EAAE,OAAO,QAAQ,MAAM,SAAS,aAAa,cAAc;AAAA,EAC3D,EAAE,OAAO,aAAa,MAAM,WAAW,aAAa,oBAAoB;AAAA,EACxE,EAAE,OAAO,cAAc,MAAM,WAAW,aAAa,qBAAqB;AAAA,EAC1E,EAAE,OAAO,aAAa,MAAM,WAAW,aAAa,oBAAoB;AAAA,EACxE,EAAE,OAAO,cAAc,MAAM,WAAW,aAAa,qBAAqB;AAC5E;AAEA,IAAM,wBAAgD;AAAA,EACpD,YAAY;AAAA,EAAM,YAAY;AAAA,EAAM,YAAY;AAAA,EAChD,SAAS;AAAA,EAAK,SAAS;AAAA,EAAK,SAAS;AAAA,EAAM,SAAS;AAAA,EACpD,SAAS;AAAA,EAAK,SAAS;AAAA,EAAK,SAAS;AAAA,EAAM,SAAS;AAAA,EAAM,SAAS;AACrE;AAEA,IAAM,iCAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR;AAEA,SAAS,uBAAuB,WAA6B;AAC3D,QAAM,SAAS,UAAU,OAAO,CAAC,SAAS,+BAA+B,IAAI,MAAM,CAAC;AACpF,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,QAAM,YAAY,sBAAsB,OAAO,KAAK,GAAG,CAAC;AACxD,MAAI,aAAa,KAAM,QAAO;AAC9B,SAAO,OAAO,OAAO,CAAC,OAAO,SAAS,SAAS,+BAA+B,IAAI,KAAK,IAAI,CAAC;AAC9F;AAEO,SAAS,qCACd,MACA,aAA8C,oCAC1B;AACpB,QAAM,YAAY,WAAW,KAAK,CAAC,SAAS,KAAK,KAAK,YAAY,MAAM,KAAK,KAAK,KAAK,EAAE,YAAY,CAAC;AACtG,MAAI,WAAW,iBAAiB,KAAM,QAAO;AAC7C,QAAM,OAAO,UAAU,KAAK,YAAY;AACxC,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,SAAS,CAAC;AACzC,QAAM,aAAa,CAAC,GAAG,IAAI,KAAK,KAAK,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,QAAQ,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK;AACjH,QAAM,aAAa,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,SAAS,IAAI,IACjE,uBAAuB,UAAU,IACjC;AACJ,SAAO,KAAK,MAAM,UAAU,gBAAgB,QAAQ,aAAa,GAAG,IAAI;AAC1E;;;AH+U+C,SAQtC,YAAAG,WARsC,OAAAC,MAEqF,QAAAC,aAFrF;AAzdxC,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EAAgB;AAAA,EAAoB;AAAA,EAAyB;AAAA,EAC7D;AAAA,EAA0B;AAAA,EAAM;AAAA,EAAmB;AAAA,EAAU;AAC/D;AAKO,IAAM,6BAA6B;AACnC,IAAM,+BAA0E;AAAA,EACrF,EAAE,MAAM,SAAS,OAAO,oCAAoC;AAAA,EAC5D,EAAE,MAAM,SAAS,OAAO,oCAAoC;AAAA,EAC5D,EAAE,MAAM,SAAS,OAAO,sCAAsC;AAAA,EAC9D,EAAE,MAAM,4BAA4B,OAAO,mBAAmB;AAAA,EAC9D,EAAE,MAAM,SAAS,OAAO,oBAAoB;AAAA,EAC5C,EAAE,MAAM,SAAS,OAAO,qBAAqB;AAAA,EAC7C,EAAE,MAAM,SAAS,OAAO,sBAAsB;AAAA,EAC9C,EAAE,MAAM,SAAS,OAAO,8BAA8B;AAAA,EACtD,EAAE,MAAM,SAAS,OAAO,qBAAqB;AAAA,EAC7C,EAAE,MAAM,MAAM,OAAO,qDAAqD;AAAA,EAC1E,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,sBAAsB;AAAA,EACxF,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EACtF,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,wBAAwB;AAAA,EACzF,EAAE,MAAM,MAAM,OAAO,sBAAsB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EACvF,EAAE,MAAM,MAAM,OAAO,wBAAwB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,8BAA8B;AAAA,EACnG,EAAE,MAAM,MAAM,OAAO,gBAAgB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,mCAAmC;AAAA,EAChG,EAAE,MAAM,MAAM,OAAO,iBAAiB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,0BAA0B;AAAA,EACxF,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,eAAe;AAAA,EAChF,EAAE,MAAM,MAAM,OAAO,kBAAkB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,gBAAgB;AAAA,EAC/E,EAAE,MAAM,MAAM,OAAO,4BAA4B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,WAAW;AAAA,EACpF,EAAE,MAAM,MAAM,OAAO,uBAAuB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,6BAA6B;AAAA,EACjG,EAAE,MAAM,MAAM,OAAO,iBAAiB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,gBAAgB;AAAA,EAC9E,EAAE,MAAM,MAAM,OAAO,wBAAwB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,gBAAgB;AAAA,EACrF,EAAE,MAAM,MAAM,OAAO,+BAA+B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAChG,EAAE,MAAM,MAAM,OAAO,8BAA8B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAC/F,EAAE,MAAM,MAAM,OAAO,0BAA0B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,6BAA6B;AAAA,EACpG,EAAE,MAAM,MAAM,OAAO,6BAA6B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,sBAAsB;AAAA,EAChG,EAAE,MAAM,MAAM,OAAO,oCAAoC;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EACtG,EAAE,MAAM,MAAM,OAAO,4BAA4B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,gBAAgB;AAAA,EACzF,EAAE,MAAM,MAAM,OAAO,0BAA0B;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,iBAAiB;AAAA,EACxF,EAAE,MAAM,MAAM,OAAO,kCAAkC;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,iCAAiC;AAAA,EAChH,EAAE,MAAM,MAAM,OAAO,qCAAqC;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,+BAA+B;AAAA,EACjH,EAAE,MAAM,MAAM,OAAO,wBAAwB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,mBAAmB;AAAA,EACxF,EAAE,MAAM,MAAM,OAAO,mCAAmC;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EACrG,EAAE,MAAM,MAAM,OAAO,yBAAyB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,wCAAwC;AAAA,EAC9G,EAAE,MAAM,MAAM,OAAO,sBAAsB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EACxF,EAAE,MAAM,MAAM,OAAO,iCAAiC;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,kBAAkB;AAAA,EAChG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,sCAAsC;AAAA,EACvG,EAAE,MAAM,MAAM,OAAO,4CAA4C;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,oBAAoB;AAAA,EAC7G,EAAE,MAAM,MAAM,OAAO,qBAAqB;AAAA,EAAG,EAAE,MAAM,MAAM,OAAO,cAAc;AAClF;AAwJO,IAAM,kCAAkC;AAAA,EAC7C;AAAA,EAAqB;AAAA,EAAoB;AAAA,EAAuB;AAAA,EAChE;AAAA,EAAwB;AAAA,EAAyB;AAAA,EACjD;AAAA,EAAqB;AAAA,EAAkB;AAAA,EAAsB;AAAA,EAA6B;AAAA,EAC1F;AAAA,EAAwB;AAAA,EAAyB;AAAA,EAAuB;AAAA,EACxE;AAAA,EAAiC;AAAA,EAAgC;AAAA,EAAiC;AAAA,EAClG;AAAA,EAA0B;AAAA,EAAyB;AAAA,EACnD;AAAA,EAAsC;AAAA,EAAiC;AAAA,EACvE;AAAA,EAAiC;AAAA,EACjC;AAAA,EACA;AAAA,EAAuB;AACzB;AAIA,IAAM,iBAA6D;AAAA,EACjE,cAAc;AAAA,EAAgB,kBAAkB;AAAA,EAChD,uBAAuB;AAAA,EAAyB,UAAU;AAAA,EAC1D,wBAAwB;AAAA,EAA0B,IAAI;AAAA,EACtD,iBAAiB;AAAA,EAAmB,QAAQ;AAAA,EAAU,OAAO;AAC/D;AACA,IAAM,gBAAgB,KAAK,OAAO;AAClC,IAAM,mBAAmB,MAAM,OAAO;AACtC,IAAM,gBAAgB;AACtB,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB;AACxB,IAAM,oBAAsD,CAAC;AAE7D,SAAS,cAAc,OAA2B;AAChD,MAAI,SAAS;AACb,WAAS,SAAS,GAAG,SAAS,MAAM,QAAQ,UAAU,OAAQ;AAC5D,cAAU,OAAO,aAAa,GAAG,MAAM,SAAS,QAAQ,SAAS,KAAM,CAAC;AAAA,EAC1E;AACA,SAAO,WAAW,KAAK,MAAM;AAC/B;AAEA,eAAe,YACb,MACA,OACwC;AACxC,MAAI,KAAK,OAAO,cAAe,OAAM,IAAI,MAAM,GAAG,MAAM,QAAQ,wBAAwB;AACxF,QAAM,QAAQ,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AACrD,MACE,MAAM,SAAS,KACZ,MAAM,CAAC,MAAM,MACb,MAAM,CAAC,MAAM,MACb,MAAM,CAAC,MAAM,MACb,MAAM,CAAC,MAAM,MACb,MAAM,CAAC,MAAM,IAChB;AACA,UAAM,IAAI,MAAM,GAAG,MAAM,QAAQ,sBAAsB;AAAA,EACzD;AACA,SAAO,EAAE,GAAG,OAAO,eAAe,cAAc,KAAK,EAAE;AACzD;AAEA,eAAsB,+BAA+B;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA,+BAA+B,CAAC;AAAA,EAChC;AAAA,EACA,OAAO;AACT,GAO6C;AAC3C,QAAM,UAAU,iBAAiB,WAAW;AAC5C,QAAM,WAAW,YAAY,IAAI,CAAC,OAAO,YAAY,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,SAAiD,QAAQ,IAAI,CAAC;AAC3J,QAAM,kBAAkB,MAAM,QAAQ,IAAI,SAAS,IAAI,OAAO,eAAe;AAC3E,QAAI;AACJ,QAAI,WAAW,SAAU,QAAO,MAAM,WAAW,SAAS;AAAA,SACrD;AACH,UAAI,CAAC,WAAW,WAAY,OAAM,IAAI,MAAM,GAAG,WAAW,QAAQ,2DAA2D;AAC7H,UAAI,OAAO,YAAY,WAAY,OAAM,IAAI,MAAM,yCAAyC;AAC5F,YAAM,WAAW,MAAM,QAAQ,WAAW,YAAY,EAAE,aAAa,cAAc,CAAC;AACpF,UAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,GAAG,WAAW,QAAQ,sCAAsC;AAC9F,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AACA,WAAO,YAAY,MAAM;AAAA,MACvB,YAAY,WAAW;AAAA,MACvB,UAAU,WAAW;AAAA,MACrB,cAAc,WAAW;AAAA,MACzB,GAAK,6BAA6B,WAAW,EAAE,KAAK,WAAW,kBAAkB,wBAAyB,EAAE,gBAAgB,6BAA6B,WAAW,EAAE,KAAK,WAAW,kBAAkB,sBAAsB,IAAI,CAAC;AAAA,MACnO,GAAI,WAAW,cAAc,EAAE,aAAa,WAAW,YAAY,IAAI,CAAC;AAAA,IAC1E,CAAC;AAAA,EACH,CAAC,CAAC;AACF,QAAM,oBAAoB,MAAM,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE,MAAM,cAAc,aAAa,eAAe,MAAM,YAAY,MAAM;AAAA,IACjI,UAAU,KAAK;AAAA,IACf;AAAA,IACA,GAAK,kBAAkB,wBAAyB,EAAE,gBAAgB,kBAAkB,sBAAsB,IAAI,CAAC;AAAA,IAC/G,GAAI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,EACvC,CAAC,CAAC,CAAC;AACH,SAAO,CAAC,GAAG,iBAAiB,GAAG,iBAAiB;AAClD;AAEA,SAAS,mBAAmB,MAAkB;AAC5C,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,SAAO,KAAK,KAAK,UAAU,qBAAqB;AAChD,SAAO,WAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,GAAM;AAC1D;AAEA,SAAS,YAAyD;AAChE,SAAO,EAAE,MAAM,IAAI,WAAW,CAAC,GAAG,OAAO,EAAE;AAC7C;AACA,SAAS,eAAe,MAA4D;AAClF,SAAO,QAAQ,KAAK,KAAK,KAAK,KAAK,KAAK,WAAW,UAAU,KAAK,UAAU,IAAI;AAClF;AACO,SAAS,iCACd,OACqC;AACrC,QAAM,aAAkD,MAAM,SAAS,MAAM,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,GAAI,KAAK,aAAa,CAAC,CAAE,GAAG,OAAO,KAAK,SAAS,EAAE,EAAE,IAAI,CAAC;AAC7K,SAAO,WAAW,SAAS,KAAK,CAAC,eAAe,WAAW,GAAG,EAAE,CAAE,KAAK,CAAC,eAAe,WAAW,GAAG,EAAE,CAAE,EAAG,YAAW,IAAI;AAC3H,MAAI,CAAC,WAAW,UAAU,eAAe,WAAW,GAAG,EAAE,CAAE,EAAG,YAAW,KAAK,UAAU,CAAC;AACzF,SAAO;AACT;AAEO,SAAS,wBAAwB,OAAmC;AACzE,QAAM,UAAU,MAAM,KAAK;AAC3B,QAAM,MAAM,4BAA4B,KAAK,OAAO;AACpD,QAAM,KAAK,sCAAsC,KAAK,OAAO;AAC7D,QAAM,SAAS,0BAA0B,KAAK,QAAQ,QAAQ,OAAO,EAAE,CAAC;AACxE,QAAM,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI;AACzH,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAAG,QAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAAG,QAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC1F,QAAMC,QAAO,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AACpD,MAAIA,MAAK,eAAe,MAAM,QAAQA,MAAK,YAAY,MAAM,QAAQ,KAAKA,MAAK,WAAW,MAAM,IAAK,QAAO;AAC5G,SAAO,GAAG,OAAO,IAAI,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,KAAK,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC;AAC3G;AACO,SAAS,yBAAyB,OAA0C;AACjF,QAAM,SAAS,QAAQ,wBAAwB,KAAK,IAAI;AACxD,MAAI,CAAC,OAAQ,QAAO;AACpB,QAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,MAAM,GAAG;AAC3C,SAAO,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI;AAChC;AAEA,SAAS,mBAAmB,MAAoC,MAAkC;AAChG,MAAI,CAAC,8BAA8B,KAAK,KAAK,YAAY,CAAC,EAAG,QAAO;AACpE,MAAI,SAAS,MAAO,QAAO,KAAK,YAAY,MAAM,WAAW,KAAK,YAAY,MAAM,UAAU,SAAY;AAC1G,MAAI,SAAS,YAAa,QAAO,KAAK,YAAY,MAAM,UAAU,OAAO,KAAK,YAAY,MAAM,UAAU,SAAY;AACtH,SAAO;AACT;AACO,SAAS,uCACd,OAA4C,MACP;AACrC,SAAO,MAAM,IAAI,CAAC,SAAS;AACzB,UAAM,OAAO,mBAAmB,MAAM,KAAK,IAAI;AAC/C,UAAM,aAAa,KAAK,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,MAAM,IAAI,EAAE,SAAS,KAAK,QAAQ,MAAM,EAAE,CAAC,CAAC;AAC9G,WAAO,EAAE,GAAG,MAAM,WAAW,OAAO,CAAC,MAAM,GAAG,SAAS,IAAI,UAAU;AAAA,EACvE,CAAC;AACH;AAEO,IAAM,8BAA8B;AAGpC,SAAS,uCACd,WACA,MACU;AACV,QAAM,UAAU,CAAC,GAAI,aAAa,CAAC,CAAE;AACrC,SAAO,SAAS,eAAe,CAAC,QAAQ,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,IAC9D,CAAC,2BAA2B,IAC5B;AACN;AAEA,SAAS,sBAAsB,MAAyD;AACtF,MAAI,KAAK,mBAAmB,MAAO,QAAO;AAC1C,SAAO,KAAK,mBAAmB,WAAW,YAAY,EAAE,SAAS,OAAO,IAAI,cAAc;AAC5F;AAEA,SAAS,iBAAiB,MAAgD;AACxE,QAAM,SAAS,UAAU,IAAI;AAC7B,SAAO,YAAY,uCAAuC,OAAO,WAAW,sBAAsB,IAAI,CAAC;AACvG,SAAO;AACT;AAEA,SAAS,eAAe,OAAiF;AACvG,SAAO,MAAM,OAAO,cAAc,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,KAAK,KAAK,KAAK,GAAG,WAAW,CAAC,GAAI,KAAK,aAAa,CAAC,CAAE,EAAE,EAAE;AACjI;AACA,SAAS,UAAU,MAAgD;AACjE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,SAAS,EAAE,GAAG,KAAK,SAAS,SAAS,EAAE,GAAG,KAAK,QAAQ,QAAQ,EAAE;AAAA,IACjE,OAAO,EAAE,GAAG,KAAK,OAAO,GAAI,KAAK,MAAM,sBAAsB,EAAE,qBAAqB,EAAE,GAAG,KAAK,MAAM,oBAAoB,EAAE,IAAI,CAAC,EAAG;AAAA,IAClI,SAAS,EAAE,GAAG,KAAK,QAAQ;AAAA,IAC3B,GAAI,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,KAAK,iBAAiB,GAAI,KAAK,gBAAgB,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,gBAAgB,QAAQ,EAAE,IAAI,CAAC,EAAG,EAAE,IAAI,CAAC;AAAA,IAC1K,GAAI,KAAK,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,KAAK,kBAAkB,EAAE,IAAI,CAAC;AAAA,IACrF,GAAI,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,KAAK,iBAAiB,GAAI,KAAK,gBAAgB,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,gBAAgB,QAAQ,EAAE,IAAI,CAAC,EAAG,EAAE,IAAI,CAAC;AAAA,IAC1K,WAAW,CAAC,GAAI,KAAK,aAAa,CAAC,CAAE;AAAA,IACrC,cAAc,iCAAiC,KAAK,YAAY;AAAA,EAClE;AACF;AACO,SAAS,uBAAuB,MAAqD;AAC1F,QAAM,SAAiC,CAAC;AACxC,QAAM,WAAW,CAAC,MAAc,OAAgB,YAAoB;AAAE,QAAI,OAAO,UAAU,YAAY,CAAC,MAAM,KAAK,EAAG,QAAO,IAAI,IAAI;AAAA,EAAS;AAC9I,WAAS,qBAAqB,KAAK,QAAQ,WAAW,iCAAiC;AACvF,WAAS,oBAAoB,KAAK,QAAQ,UAAU,gCAAgC;AACpF,WAAS,uBAAuB,KAAK,QAAQ,aAAa,oCAAoC;AAC9F,WAAS,yBAAyB,KAAK,QAAQ,QAAQ,OAAO,qCAAqC;AACnG,WAAS,wBAAwB,KAAK,QAAQ,QAAQ,MAAM,2BAA2B;AACvF,WAAS,yBAAyB,KAAK,QAAQ,QAAQ,OAAO,0CAA0C;AACxG,WAAS,8BAA8B,KAAK,QAAQ,QAAQ,YAAY,+BAA+B;AACvG,WAAS,qBAAqB,KAAK,MAAM,aAAa,yBAAyB;AAC/E,WAAS,kBAAkB,KAAK,MAAM,UAAU,0BAA0B;AAC1E,WAAS,sBAAsB,KAAK,MAAM,cAAc,2BAA2B;AACnF,WAAS,6BAA6B,KAAK,MAAM,qBAAqB,MAAM,gEAAgE;AAC5I,WAAS,gBAAgB,KAAK,QAAQ,MAAM,4BAA4B;AACxE,WAAS,wBAAwB,KAAK,iBAAiB,MAAM,kCAAkC;AAC/F,WAAS,yBAAyB,KAAK,iBAAiB,OAAO,iDAAiD;AAChH,WAAS,uBAAuB,KAAK,iBAAiB,KAAK,iCAAiC;AAC5F,WAAS,yBAAyB,KAAK,iBAAiB,OAAO,0CAA0C;AACzG,WAAS,iCAAiC,KAAK,iBAAiB,SAAS,OAAO,4CAA4C;AAC5H,WAAS,gCAAgC,KAAK,iBAAiB,SAAS,MAAM,kCAAkC;AAChH,WAAS,iCAAiC,KAAK,iBAAiB,SAAS,OAAO,iDAAiD;AACjI,WAAS,sCAAsC,KAAK,iBAAiB,SAAS,YAAY,sCAAsC;AAChI,WAAS,0BAA0B,KAAK,mBAAmB,MAAM,oCAAoC;AACrG,WAAS,yBAAyB,KAAK,mBAAmB,KAAK,mCAAmC;AAClG,WAAS,8BAA8B,KAAK,mBAAmB,UAAU,6CAA6C;AACtH,WAAS,sCAAsC,KAAK,iBAAiB,oBAAoB,0CAA0C;AACnI,WAAS,iCAAiC,KAAK,iBAAiB,SAAS,OAAO,4CAA4C;AAC5H,WAAS,gCAAgC,KAAK,iBAAiB,SAAS,MAAM,kCAAkC;AAChH,WAAS,iCAAiC,KAAK,iBAAiB,SAAS,OAAO,iDAAiD;AACjI,WAAS,sCAAsC,KAAK,iBAAiB,SAAS,YAAY,sCAAsC;AAChI,MAAI,EAAE,KAAK,aAAa,CAAC,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,GAAG;AACvD,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,KAAK,MAAM,qBAAqB,QAAQ,CAAC,KAAK,MAAM,oBAAoB,IAAI;AAC9E,WAAO,2BAA2B,IAAI;AAAA,EACxC;AACA,MAAI,KAAK,MAAM,qBAAqB,0BAA0B,CAAC,KAAK,MAAM,oBAAoB,SAAS,KAAK,GAAG;AAC7G,WAAO,mCAAmC,IAAI;AAAA,EAChD;AACA,MAAI,KAAK,QAAQ,eAAe,CAAC,wBAAwB,KAAK,QAAQ,WAAW,EAAG,QAAO,qBAAqB,IAAI;AACpH,MAAI,KAAK,MAAM,gBAAgB,CAAC,wBAAwB,KAAK,MAAM,YAAY,EAAG,QAAO,oBAAoB,IAAI;AACjH,MAAI,KAAK,QAAQ,QAAQ,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO,uBAAuB,IAAI;AACtF,MAAI,KAAK,iBAAiB,SAAS,SAAS,KAAK,gBAAgB,QAAQ,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO,+BAA+B,IAAI;AAC9I,MAAI,KAAK,iBAAiB,SAAS,SAAS,KAAK,gBAAgB,QAAQ,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO,+BAA+B,IAAI;AAC9I,QAAM,SAAS,CAAC,UAAmB,OAAO,QAAQ,OAAO,EAAE,KAAK;AAChE,MAAI,KAAK,iBAAiB,SAAS,OAAO,KAAK,gBAAgB,KAAK,EAAE,WAAW,EAAG,QAAO,uBAAuB,IAAI;AACtH,MAAI,KAAK,iBAAiB,OAAO,CAAC,WAAW,KAAK,OAAO,KAAK,gBAAgB,GAAG,CAAC,EAAG,QAAO,qBAAqB,IAAI;AACrH,MAAI,KAAK,mBAAmB,OAAO,CAAC,WAAW,KAAK,OAAO,KAAK,kBAAkB,GAAG,CAAC,EAAG,QAAO,uBAAuB,IAAI;AAC3H,MAAI,KAAK,mBAAmB,YAAY,CAAC,oBAAoB,KAAK,KAAK,kBAAkB,SAAS,KAAK,CAAC,EAAG,QAAO,4BAA4B,IAAI;AAClJ,MAAI,KAAK,iBAAiB,sBAAsB,CAAC,UAAU,KAAK,KAAK,gBAAgB,mBAAmB,KAAK,CAAC,EAAG,QAAO,oCAAoC,IAAI;AAChK,QAAM,QAAQ,eAAe,KAAK,YAAY;AAC9C,MAAI,CAAC,MAAM,OAAQ,QAAO,eAAe;AACzC,QAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,aAAS,gBAAgB,KAAK,SAAS,KAAK,MAAM,0BAA0B;AAC5E,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,MAAM,KAAK,SAAS,KAAK,EAAG,QAAO,gBAAgB,KAAK,QAAQ,IAAI;AACpG,QAAI,KAAK,gBAAgB,mBAAmB,CAAC,OAAO,SAAS,KAAK,MAAM,MAAM,KAAK,UAAU,KAAK,GAAI,QAAO,gBAAgB,KAAK,SAAS,IAAI;AAAA,EACjJ,CAAC;AACD,SAAO,EAAE,OAAO,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG,aAAa,OAAO;AACxE;AAEA,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeZ,SAAS,eAA6B;AAAE,SAAO,gBAAAH,KAAC,UAAK,WAAU,aAAY,gBAAE;AAAS;AACtF,SAASI,OAAM,EAAE,OAAO,UAAU,OAAO,SAAS,MAAM,MAAM,SAAS,GAA2J;AAChO,SAAO,gBAAAH,MAAC,WAAM,WAAW,aAAa,OAAO,eAAe,EAAE,IAAI,mBAAiB,MAAM,gBAAc,QAAQ,KAAK,KAAK,SAAS;AAAA,oBAAAA,MAAC,UAAK,WAAU,cAAc;AAAA;AAAA,MAAO,WAAW,gBAAAD,KAAC,gBAAa,IAAK;AAAA,OAAK;AAAA,IAAQ;AAAA,IAAU,QAAQ,gBAAAA,KAAC,WAAM,WAAU,cAAa,MAAK,SAAS,iBAAM,IAAW;AAAA,KAAK;AACxS;AACA,SAAS,cAAc,EAAE,OAAO,UAAU,UAAU,UAAU,UAAU,GAAqJ;AAC3N,QAAM,CAAC,SAAS,UAAU,IAAIK,UAAS,MAAM,yBAAyB,KAAK,CAAC;AAC5E,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,KAAK;AAC5C,EAAAC,WAAU,MAAM;AAAE,eAAW,yBAAyB,KAAK,CAAC;AAAG,eAAW,KAAK;AAAA,EAAG,GAAG,CAAC,KAAK,CAAC;AAC5F,SAAO,gBAAAL,MAAAF,WAAA,EAAE;AAAA,oBAAAC,KAAC,WAAM,WAAU,cAAa,MAAK,QAAO,WAAU,WAAU,cAAa,OAAM,aAAY,cAAa,cAAY,WAAW,gBAAc,SAAS,UAAoB,UAAoB,OAAO,SAAS,UAAU,CAAC,UAAU;AAC5O,YAAM,OAAO,MAAM,OAAO;AAAO,YAAM,SAAS,wBAAwB,IAAI;AAAG,iBAAW,IAAI;AAAG,iBAAW,QAAQ,QAAQ,CAAC,MAAM,CAAC;AACpI,UAAI,CAAC,KAAK,KAAK,EAAG,UAAS,EAAE;AAAA,eAAY,OAAQ,UAAS,MAAM;AAAA,IAClE,GAAG,QAAQ,MAAM,WAAW,QAAQ,WAAW,CAAC,wBAAwB,OAAO,CAAC,CAAC,GAAG;AAAA,IAAG,UAAU,gBAAAA,KAAC,WAAM,WAAU,cAAa,4BAAc,IAAW;AAAA,KAAK;AAC/J;AAGA,SAAS,SAAS,EAAE,OAAO,aAAa,SAAS,UAAU,SAAS,aAAa,SAAS,sBAAsB,OAAO,gBAAgB,MAAM,QAAQ,SAAS,cAAc,UAAU,cAAc,UAAU,GAA8Z;AAC1mB,QAAM,CAAC,MAAM,OAAO,IAAIK,UAAS,KAAK;AAAG,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,EAAE;AAC9E,QAAM,UAAUE,SAAQ,MAAM;AAC5B,UAAM,IAAI,MAAM,KAAK,EAAE,YAAY;AACnC,UAAM,UAAU,KAAK,gBAAgB,QAAQ,OAAO,CAAC,WAAW,GAAG,OAAO,EAAE,IAAI,OAAO,KAAK,IAAI,OAAO,UAAU,EAAE,KAAK,OAAO,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,OAAO,sBAAsB,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,OAAO,YAAY,EAAE,GAAG,YAAY,EAAE,SAAS,CAAC,CAAC,IAAI;AAC9P,UAAM,SAAS,eAAe,KAAK,KAAK;AACxC,WAAO,UAAU,CAAC,QAAQ,KAAK,CAAC,WAAW,OAAO,GAAG,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,MAAM,IAAI;AAAA,EAC3H,GAAG,CAAC,cAAc,eAAe,SAAS,KAAK,CAAC;AAChD,QAAM,WAAW;AACjB,SAAO,gBAAAN,MAAC,SAAI,WAAU,cAAa;AAAA,oBAAAD,KAAC,WAAM,WAAU,cAAa,MAAK,YAAW,cAAY,WAAW,gBAAc,SAAS,iBAAe,UAAU,cAAa,OAAM,UAAoB,aAA0B,OAAO,OAAO,QAAQ,OAAO,SAAS,MAAM;AAAE,YAAM,OAAO,sBAAsB,QAAQ;AAAI,cAAQ,IAAI;AAAG,eAAS,IAAI;AAAG,eAAS;AAAG,UAAI,KAAM,WAAU,IAAI;AAAA,IAAG,GAAG,UAAU,CAAC,UAAU;AAAE,cAAQ,IAAI;AAAG,eAAS,MAAM,OAAO,KAAK;AAAG,gBAAU,MAAM,OAAO,KAAK;AAAA,IAAG,GAAG,QAAQ,MAAM,WAAW,MAAM,QAAQ,KAAK,GAAG,GAAG,GAAG;AAAA,IAAG,WAAW,gBAAAC,MAAC,SAAI,WAAU,aAAY,MAAK,WAAU,UAAU,CAAC,UAAU;AAAE,YAAM,OAAO,MAAM;AAAe,UAAI,KAAK,eAAe,KAAK,YAAY,KAAK,eAAe,IAAK,gBAAe;AAAA,IAAG,GAAI;AAAA,iBAAW,CAAC,QAAQ,SAAS,gBAAAD,KAAC,SAAI,WAAU,oBAAmB,2BAAQ,IAAS,QAAQ,SAAS,QAAQ,IAAI,CAAC,WAAW,gBAAAC,MAAC,YAAO,WAAU,eAAc,MAAK,UAAS,MAAK,UAAyB,aAAa,CAAC,UAAU,MAAM,eAAe,GAAG,SAAS,MAAM;AAAE,iBAAS,MAAM;AAAG,gBAAQ,KAAK;AAAG,iBAAS,EAAE;AAAA,MAAG,GAAG;AAAA,wBAAAA,MAAC,UAAK,WAAU,oBAAmB;AAAA,0BAAAD,KAAC,YAAQ,iBAAO,OAAM;AAAA,UAAU,OAAO,SAAS,gBAAAA,KAAC,WAAO,iBAAO,QAAO,IAAW;AAAA,UAAM,OAAO,QAAQ,SAAS,gBAAAA,KAAC,UAAK,WAAU,sBAAsB,iBAAO,OAAO,IAAI,CAAC,UAAU,gBAAAA,KAAC,UAAK,WAAU,qBAAiC,mBAAR,KAAc,CAAO,GAAE,IAAU;AAAA,UAAM,OAAO,oBAAoB,SAAS,gBAAAC,MAAC,WAAM,WAAU,0BAAyB;AAAA,4BAAAD,KAAC,YAAO,kCAAoB;AAAA,YAAS;AAAA,YAAE,OAAO,mBAAmB,KAAK,IAAI;AAAA,aAAE,IAAW;AAAA,WAAK;AAAA,QAAQ,OAAO,WAAW,gBAAAA,KAAC,UAAK,WAAU,qBAAqB,iBAAO,UAAS,IAAU;AAAA,WAAvqB,OAAO,EAAqqB,CAAS,IAAI,gBAAAA,KAAC,SAAI,WAAU,eAAc,wBAAU;AAAA,MAAQ,cAAc,gBAAAA,KAAC,SAAI,WAAU,oBAAmB,gCAAa,IAAS;AAAA,OAAK,IAAS;AAAA,KAAK;AAChuD;AAEA,SAAS,kBAAkB,MAA6B;AACtD,QAAM,QAAQ,KAAK,cAA2B,uBAAuB;AACrE,MAAI,CAAC,MAAO;AACZ,QAAM,UAAU,MAAM,cAA2B,8DAA8D;AAC/G,WAAS,MAAM,EAAE,eAAe,KAAK,CAAC;AACtC,QAAM,YAAY,MAAM,sBAAsB;AAC9C,MAAI,eAAmC,MAAM;AAC7C,SAAO,cAAc;AACnB,UAAM,QAAQ,OAAO,iBAAiB,YAAY;AAClD,QAAI,gBAAgB,KAAK,MAAM,SAAS,KAAK,aAAa,eAAe,aAAa,aAAc;AACpG,mBAAe,aAAa;AAAA,EAC9B;AACA,MAAI,cAAc;AAChB,UAAM,aAAa,aAAa,sBAAsB;AACtD,iBAAa,SAAS,EAAE,KAAK,KAAK,IAAI,GAAG,aAAa,YAAY,UAAU,MAAM,WAAW,MAAM,EAAE,GAAG,UAAU,SAAS,CAAC;AAAA,EAC9H,OAAO;AACL,WAAO,SAAS,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,UAAU,UAAU,MAAM,EAAE,GAAG,UAAU,SAAS,CAAC;AAAA,EAC/F;AACF;AAEA,SAAS,sBAAsB,OAAmC;AAChE,QAAM,OAAO,MAAM,KAAK,EAAE,YAAY,EAAE,QAAQ,QAAQ,EAAE;AAC1D,MAAI,CAAC,2CAA2C,KAAK,IAAI,EAAG,QAAO;AACnE,SAAO,EAAE,IAAI,MAAM,OAAO,MAAM,QAAQ,6CAA6C;AACvF;AAEA,SAAS,aAAyC,UAAe,UAAgC;AAC/F,QAAM,MAAM,IAAI,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,YAAY,GAAG,IAAI,CAAC,CAAC;AAC3E,YAAU,QAAQ,CAAC,SAAS,IAAI,IAAI,KAAK,KAAK,YAAY,GAAG,IAAI,CAAC;AAAG,SAAO,CAAC,GAAG,IAAI,OAAO,CAAC;AAC9F;AAEA,SAAS,sBAAsB,SAA2E;AACxG,SAAO,CAAC,GAAG,IAAI,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,YAAY,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAChF,KAAK,CAAC,MAAM,UAAU,KAAK,KAAK,cAAc,MAAM,MAAM,QAAW,EAAE,SAAS,KAAK,CAAC,CAAC;AAC5F;AAEO,SAAS,iCAAiC,OAAuB;AACtE,SAAO,MAAM,YAAY,EAAE,QAAQ,cAAc,GAAG,EAAE,QAAQ,kFAAkF,GAAG,EAAE,QAAQ,eAAe,GAAG,EAAE,KAAK,EAAE,QAAQ,QAAQ,GAAG;AAC7M;AAEO,SAAS,8BAA8B,SAA4B,cAAmD;AAC3H,QAAM,aAAa,iCAAiC,YAAY;AAChE,SAAO,QAAQ,KAAK,CAAC,UAAU,iCAAiC,MAAM,IAAI,MAAM,UAAU,KACrF,QAAQ,KAAK,CAAC,UAAU,MAAM,eAAe,UAAU,MAAM,WAAW;AAC/E;AAEO,SAAS,mCAAmC,SAA4B,QAAQ,GAAsB;AAC3G,SAAO,CAAC,GAAG,OAAO,EACf,KAAK,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,WAAW,CAAC,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,EAC5F,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC;AAChC;AAEO,SAAS,0BACd,SACA,aACgB;AAChB,QAAM,UAAU,QAAQ,SAAS,KAAK;AACtC,MAAI,WAAW,QAAQ,KAAK,OAAO,GAAG;AACpC,UAAM,aAAa,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,cAAc,cAAc,MAC7D,QACA,UAAU,QAAQ,uBAAuB,MAAM,CAAC,EAAE,KAAK,EAAE;AAC7D,WAAO,IAAI,OAAO,IAAI,UAAU,KAAK,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC;AAAA,EACnE;AACA,SAAO,QAAQ,WAAW;AAC5B;AAQO,SAAS,0BACd,OACA,iBACkE;AAClE,MAAI,CAAC,MAAM,uBAAwB,QAAO,EAAE,IAAI,MAAM,IAAI,MAAM,MAAM,KAAK;AAC3E,QAAM,UAAU,MAAM,UAAU,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,EAAE;AACnE,QAAM,kBAAkB,mBAAmB,OAAO,KAAK,CAAC,WAAW,OAAO,OAAO,eAAe,IAC5F,kBACA;AACJ,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,MAAM,MAAM;AAAA,IACZ,wBAAwB;AAAA,IACxB,GAAI,OAAO,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,IAClC,GAAI,kBAAkB,EAAE,SAAS,gBAAgB,IAAI,CAAC;AAAA,EACxD;AACF;AAOO,SAAS,6BACd,eACgD;AAChD,SAAO;AAAA,IACL,IAAI,cAAc,MAAM;AAAA,IACxB,MAAM,cAAc;AAAA,IACpB,GAAI,cAAc,UAAU,EAAE,SAAS,cAAc,QAAQ,IAAI,CAAC;AAAA,EACpE;AACF;AAYA,IAAM,gCAAgC,cAA6C,IAAI;AAEvF,SAAS,sBAAsB,EAAE,GAAG,GAAkD;AACpF,QAAM,WAAW,WAAW,6BAA6B;AACzD,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,sEAAsE;AACrG,SAAO,gBAAAA,KAAAD,WAAA,EAAG,mBAAS,EAAE,GAAE;AACzB;AAEO,SAAS,uBAAqC;AAAE,SAAO,gBAAAC,KAAC,yBAAsB,IAAG,UAAS;AAAI;AAC9F,SAAS,+BAA6C;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,WAAU;AAAI;AACvG,SAAS,6BAA2C;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,SAAQ;AAAI;AACnG,SAAS,iCAA+C;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,aAAY;AAAI;AAC3G,SAAS,oCAAkD;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,gBAAe;AAAI;AACjH,SAAS,mCAAiD;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,eAAc;AAAI;AAC/G,SAAS,wBAAsC;AAAE,SAAO,gBAAAA,KAAC,yBAAsB,IAAG,WAAU;AAAI;AAEhG,SAAS,mBAAmB;AAAA,EACjC;AAAA,EAAa,cAAc;AAAA,EAAmB;AAAA,EAAU;AAAA,EAAa;AAAA,EAAY;AAAA,EAAiB;AAAA,EAClG,OAAO;AAAA,EAAe;AAAA,EAA4B;AAAA,EAA8B;AAAA,EAAmC;AAAA,EAA4B;AAAA,EAC/I,mBAAmB,CAAC;AAAA,EAAG;AAAA,EACvB;AAAA,EAAoB;AAAA,EAAkB;AAAA,EAAiB;AAAA,EAAiB,sBAAsB;AAAA,EAAQ,2BAA2B;AAAA,EACjI,wBAAwB;AAAA,EAA8B;AAAA,EACtD;AAAA,EAAY,YAAY;AAAA,EACxB;AAAA,EAAO,WAAW;AAAA,EAAO,cAAc;AAAA,EAAe,UAAU;AAAA,EAChE,cAAc;AAAA,EACd,kBAAkB,CAAC;AAAA,EAAG;AAAA,EACtB;AACF,GAA0C;AACxC,QAAM,CAAC,MAAM,OAAO,IAAIK,UAAS,MAAM,iBAAiB,WAAW,CAAC;AACpE,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAS,MAAM,YAAY,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AACvF,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAmB,CAAC,CAAC;AACrE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAiC,CAAC,CAAC;AAAG,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAiC,CAAC,CAAC;AACnI,QAAM,CAAC,6BAA6B,8BAA8B,IAAIA,UAAiC,MAAM,OAAO,YAAY,YAAY,QAAQ,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC,KAAK,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3N,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,KAAK;AAC9D,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAwB,IAAI;AAAG,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAEnH,QAAM,CAAC,aAAa,cAAc,IAAIA,UAA0F,IAAI;AACpI,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAwB,IAAI;AAChE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAA4B,CAAC,CAAC;AAAG,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AAC/H,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAsC,CAAC,CAAC;AACxF,QAAM,CAAC,uBAAuB,wBAAwB,IAAIA,UAAiC,IAAI;AAC/F,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,KAAK;AAAG,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAwB,IAAI;AAAG,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,IAAI;AACzL,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAkD,IAAI;AACxF,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,KAAK;AAC9D,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAwB,IAAI;AACxE,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAA0C,CAAC,CAAC;AAC5F,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,KAAK;AAAG,QAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAAS,KAAK;AACvI,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAwB,IAAI;AAAG,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,IAAI;AACxI,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAwB,IAAI;AAAG,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AACzH,QAAM,UAAUG,QAAwB,IAAI;AAAG,QAAM,YAAYA,QAAyB,IAAI;AAC9F,QAAM,mBAAmBA,QAAO,CAAC;AAAG,QAAM,yBAAyBA,QAAO,KAAK;AAAG,QAAM,eAAeA,QAAO,CAAC;AAAG,QAAM,qBAAqBA,QAAO,KAAK;AACzJ,QAAM,aAAaD,SAAQ,MAAM,aAAa,oCAAoC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC;AACvH,QAAM,oCAAoCA,SAAQ,MAAM,CAAC,GAAI,8BAA8B,CAAC,CAAE,EAC3F,OAAO,CAAC,WAAW,OAAO,KAAK,KAAK,CAAC,EACrC,KAAK,CAAC,MAAM,UAAU,OAAO,MAAM,OAAO,YAAY,MAAM,MAAM,IAAI,OAAO,KAAK,OAAO,YAAY,MAAM,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACpJ,QAAM,gCAAgC,kCAAkC,CAAC,GAAG,KAAK,KAAK,KAAK;AAC3F,QAAM,YAAYA,SAAQ,MAAM,aAAa,mCAAmC,eAAe,GAAG,CAAC,eAAe,CAAC;AACnH,QAAM,aAAaA,SAAQ,MAAM,aAAa,oCAAoC,eAAe,GAAG,CAAC,eAAe,CAAC;AACrH,QAAM,CAAC,gBAAgB,iBAAiB,IAAIF,UAAuC,MAAM,sBAAsB,WAAW,CAAC;AAC3H,QAAM,YAAY,CAAC;AACnB,QAAM,kBAAkBE,SAAQ,MAAO,cAAc,mBAAmB,YAAa,0BAA0B,EAAE,YAAY,iBAAiB,YAAY,OAAO,cAAc,CAAC,IAAI,MAAM,CAAC,YAAY,iBAAiB,YAAY,eAAe,SAAS,CAAC;AAC7P,QAAM,mBAAmBA,SAAQ,MAAM,YAAY,2BAA2B,EAAE,YAAY,iBAAiB,YAAY,OAAO,cAAc,CAAC,IAAI,MAAM,CAAC,YAAY,iBAAiB,YAAY,eAAe,SAAS,CAAC;AAC5N,QAAM,SAAS,YAAY;AAC3B,QAAM,4BAA4B,6BAA6B,aAAc,6BAA6B,UAAU,KAAK,gBAAgB;AACzI,QAAM,6BAA6B,4BAA4B,SAAa,+BAA+B;AAC3G,QAAM,oBAAoBA,SAAQ,MAAM,sBAAsB,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,QAAQ,EAAE,GAAG,QAAQ,KAAK,MAAM,EAAE,GAAG,CAAC,qBAAqB,CAAC;AACnL,QAAM,8BAA8B,8BAClC,YAAY,KAAK,CAAC,OAAO,EAAE,4BAA4B,EAAE,KAAK,YAAY,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE,GAAG,kBAAkB,4BAA4B,KACrJ,QAAQ,KAAK,CAAC,WAAW,EAAE,OAAO,kBAAkB,4BAA4B;AAGrF,EAAAD,WAAU,MAAM;AACd,YAAQ,iBAAiB,WAAW,CAAC;AAAG,sBAAkB,sBAAsB,WAAW,CAAC;AAAG,mBAAe,YAAY,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAChJ,wBAAoB,CAAC,CAAC;AAAG,eAAW,CAAC,CAAC;AAAG,mCAA+B,OAAO,YAAY,YAAY,QAAQ,CAAC,SAAS,KAAK,iBAAiB,CAAC,CAAC,KAAK,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAG,cAAU,CAAC,CAAC;AAAG,wBAAoB,KAAK;AAAG,iBAAa,IAAI;AAAG,wBAAoB,CAAC,CAAC;AAC9Q,sBAAkB,IAAI;AAAG,wBAAoB,IAAI;AAAG,qBAAiB,WAAW;AAAG,2BAAuB,UAAU;AACpH,oBAAgB,CAAC,CAAC;AAAG,wBAAoB,CAAC,CAAC;AAAG,6BAAyB,IAAI;AAAG,kBAAc,IAAI;AAAG,oBAAgB,IAAI;AAAG,iBAAa,WAAW;AAAG,uBAAmB,UAAU;AAAA,EACpL,GAAG,CAAC,aAAa,aAAa,6BAA6B,CAAC;AAC5D,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,iBAAkB;AACvB,UAAM,OAAO,uBAAuB,IAAI,EAAE;AAC1C,cAAU,8BAA8B,EAAE,GAAG,MAAM,aAAa,6CAA6C,IAAI,IAAI;AAAA,EACvH,GAAG,CAAC,MAAM,6BAA6B,gBAAgB,CAAC;AACxD,EAAAA,WAAU,MAAM;AACd,UAAM,OAAO,QAAQ;AACrB,QAAI,CAAC,KAAM;AACX,UAAM,QAAQ,MAAM,KAAK,KAAK,iBAA8B,mBAAmB,CAAC;AAChF,UAAM,QAAQ,CAAC,SAAS,KAAK,gBAAgB,gBAAgB,CAAC;AAC9D,eAAW,aAAa,iBAAiB;AACvC,YAAM,aAAa,UAAU,QAAQ,SAAS,EAAE;AAChD,iBAAW,QAAQ,OAAO;AACxB,cAAM,SAAS,KAAK,QAAQ,aAAa;AACzC,YAAI,WAAW,aAAa,WAAW,cAAc,OAAO,WAAW,GAAG,UAAU,GAAG,KAAK,WAAW,WAAW,GAAG,MAAM,GAAG,GAAG;AAC/H,eAAK,QAAQ,YAAY;AAAA,QAC3B;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,WAAW,YAAY,CAAC,aAAgC;AAC5D,UAAM,QAAQ,MAAM,KAAK,QAAQ;AAAG,QAAI,CAAC,MAAM,OAAQ;AAAQ,iBAAa,IAAI;AAChF,UAAM,UAAU,MAAM,KAAK,CAAC,SAAS,KAAK,SAAS,qBAAqB,CAAC,KAAK,KAAK,YAAY,EAAE,SAAS,MAAM,CAAC;AACjH,QAAI,QAAS,QAAO,aAAa,GAAG,QAAQ,IAAI,gBAAgB;AAChE,UAAM,YAAY,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,aAAa;AAAG,QAAI,UAAW,QAAO,aAAa,GAAG,UAAU,IAAI,wBAAwB;AAC/I,UAAM,YAAY,CAAC,GAAG,QAAQ,IAAI,CAAC,SAAS,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,OAAO,CAAC,KAAK,SAAS,MAAM,KAAK,MAAM,CAAC;AAC1G,QAAI,YAAY,iBAAkB,QAAO,aAAa,6CAA6C;AACnG,QAAI,YAAY,SAAS,QAAQ,SAAS,MAAM,SAAS,cAAe,QAAO,aAAa,8BAA8B,aAAa,eAAe;AACtJ,eAAW,CAAC,YAAY,CAAC,GAAG,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,MAAM,cAAc,SAAkB,GAAI,8BAA8B,EAAE,gBAAgB,4BAA4B,IAAI,CAAC,EAAG,EAAE,CAAC,CAAC;AAAA,EACnM,GAAG,CAAC,6BAA6B,YAAY,QAAQ,OAAO,CAAC;AAC7D,EAAAA,WAAU,MAAM;AACd,UAAM,OAAO,CAAC,UAAqB;AAAE,UAAI,MAAM,cAAc,MAAM,SAAS,OAAO,GAAG;AAAE,cAAM,eAAe;AAAG,sBAAc,IAAI;AAAA,MAAG;AAAA,IAAE;AACvI,UAAM,QAAQ,CAAC,UAAqB;AAAE,UAAI,CAAC,MAAM,cAAe,eAAc,KAAK;AAAA,IAAG;AACtF,UAAM,OAAO,CAAC,UAAqB;AAAE,UAAI,MAAM,cAAc,MAAM,QAAQ;AAAE,cAAM,eAAe;AAAG,sBAAc,KAAK;AAAG,iBAAS,MAAM,aAAa,KAAK;AAAA,MAAG;AAAA,IAAE;AACjK,WAAO,iBAAiB,YAAY,IAAI;AAAG,WAAO,iBAAiB,aAAa,KAAK;AAAG,WAAO,iBAAiB,QAAQ,IAAI;AAC5H,WAAO,MAAM;AAAE,aAAO,oBAAoB,YAAY,IAAI;AAAG,aAAO,oBAAoB,aAAa,KAAK;AAAG,aAAO,oBAAoB,QAAQ,IAAI;AAAA,IAAG;AAAA,EACzJ,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,aAAa,CAAC,UAA0C,QAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,SAAS,EAAE,GAAG,QAAQ,SAAS,SAAS,EAAE,GAAG,QAAQ,QAAQ,SAAS,GAAG,MAAM,EAAE,EAAE,EAAE;AACvL,QAAM,UAAU,CAAC,OAAe,UAAgE,QAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,cAAc,iCAAiC,QAAQ,aAAa,IAAI,CAAC,MAAM,cAAc;AAC/N,QAAI,cAAc,MAAO,QAAO;AAChC,UAAM,OAAO,EAAE,GAAG,MAAM,GAAG,MAAM;AACjC,UAAM,SAAS,qCAAqC,MAAM,UAAU;AACpE,QAAI,UAAU,KAAM,QAAO,EAAE,GAAG,MAAM,OAAO;AAC7C,QAAI,OAAO,OAAO,OAAO,MAAM,GAAG;AAAE,YAAM,gBAAgB,EAAE,GAAG,KAAK;AAAG,aAAO,cAAc;AAAQ,aAAO;AAAA,IAAe;AAC1H,WAAO;AAAA,EACT,CAAC,CAAC,EAAE,EAAE;AACN,QAAM,OAAO,CAAC,OAAkC,UAAmC,UAAiH,CAAC,MAAM,gBAAAN,KAAC,WAAM,WAAU,cAAa,UAAU,QAAQ,OAAO,SAAS,IAAI,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK,GAAI,GAAG,SAAS;AAC/U,QAAM,aAAa,YAAY,CAAC,OAAe,SAAS,UAAgB;AACtE,UAAM,UAAU,MAAM,KAAK;AAC3B,UAAMS,QAAO,8BAA8B,iBAAiB;AAC5D,UAAM,eAAe,gCAAgC,iBAAiB;AACtE,QAAI,CAACA,SAAQ,CAAC,aAAc;AAC5B,UAAM,aAAa,UAAU,eAAe;AAC5C,QAAI,eAAe,CAAC,gBAAgB,mBAAmB,SAAU;AACjE,UAAM,SAAS,aAAa,aAAa,SAAS;AAClD,UAAM,UAAU,EAAE,aAAa;AAC/B,QAAI,YAAY;AAAE,yBAAmB,UAAU;AAAM,0BAAoB,IAAI;AAAA,IAAG,OAC3E;AAAE,sBAAgB,IAAI;AAAG,0BAAoB,KAAK;AAAG,oBAAc,OAAO;AAAG,sBAAgB,IAAI;AAAA,IAAG;AACzG,UAAM,OAAqCA,QACvCA,MAAK,EAAE,OAAO,SAAS,aAAa,KAAK,MAAM,aAAa,GAAI,gCAAgC,EAAE,8BAA8B,IAAI,CAAC,GAAI,GAAI,KAAK,MAAM,WAAW,EAAE,cAAc,KAAK,MAAM,SAAS,IAAI,CAAC,GAAI,OAAO,iBAAiB,OAAO,CAAC,IAChP,aAAc,SAAS,KAAK,MAAM,WAAW,EAAE,KAAK,CAAC,aAAkC,EAAE,SAAS,OAAO,QAAQ,OAAO,EAAE;AAC9H,SAAK,KAAK,KAAK,CAAC,WAAW;AACzB,UAAI,YAAY,aAAa,QAAS;AACtC,sBAAgB,CAAC,YAAY;AAC3B,cAAM,WAAW,aAAa,CAAC,GAAG,SAAS,GAAG,OAAO,OAAO,IAAI,OAAO;AACvE,eAAO,CAAC,GAAG,IAAI,IAAI,SAAS,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA,MACzE,CAAC;AACD,UAAI,CAAC,WAAY,qBAAoB,OAAO,eAAe,CAAC,CAAC;AAC7D,sBAAgB,OAAO,cAAc,OAAO,OAAO,aAAa,SAAS,SAAS,OAAO,QAAQ,SAAS,OAAO,KAAK;AAAA,IACxH,CAAC,EAAE,MAAM,CAAC,WAAoB;AAC5B,UAAI,YAAY,aAAa,QAAS,cAAa,kBAAkB,QAAQ,OAAO,UAAU,6CAA6C;AAAA,IAC7I,CAAC,EAAE,QAAQ,MAAM;AACf,UAAI,YAAY,aAAa,QAAS;AACtC,yBAAmB,UAAU;AAAO,sBAAgB,KAAK;AAAG,0BAAoB,KAAK;AAAA,IACvF,CAAC;AAAA,EACH,GAAG,CAAC,KAAK,MAAM,aAAa,KAAK,MAAM,UAAU,4BAA4B,8BAA8B,cAAc,YAAY,aAAa,QAAQ,iBAAiB,6BAA6B,CAAC;AACzM,QAAM,eAAe,CAAC,UAAkB;AACtC,6BAAyB,IAAI;AAC7B,YAAQ,CAAC,YAAY;AACnB,YAAM,WAAW,QAAQ,MAAM;AAC/B,UAAI,UAAU,MAAM,SAAS,SAAS,MAAO,QAAO;AACpD,aAAO,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,OAAO,qBAAqB,EAAE,MAAM,MAAM,EAAE,EAAE;AAAA,IACzF,CAAC;AACD,eAAW,KAAK;AAAA,EAClB;AACA,QAAM,gBAAgB,CAAC,OAAe,SAAS,UAAU;AACvD,UAAM,UAAU,MAAM,KAAK;AAC3B,UAAM,SAAS,qBAAqB,iBAAiB;AACrD,QAAI,CAAC,QAAQ;AAAE,0BAAoB,sBAAsB,gBAAgB,CAAC;AAAG,0BAAoB,KAAK;AAAG,wBAAkB,OAAO;AAAG;AAAA,IAAQ;AAC7I,UAAM,aAAa,UAAU,mBAAmB;AAChD,QAAI,eAAe,CAAC,oBAAoB,uBAAuB,SAAU;AACzE,UAAM,SAAS,aAAa,iBAAiB,SAAS;AACtD,UAAM,UAAU,EAAE,iBAAiB;AACnC,QAAI,YAAY;AAAE,6BAAuB,UAAU;AAAM,8BAAwB,IAAI;AAAA,IAAG,OACnF;AAAE,0BAAoB,IAAI;AAAG,8BAAwB,KAAK;AAAG,wBAAkB,OAAO;AAAG,0BAAoB,IAAI;AAAA,IAAG;AACzH,SAAK,OAAO,SAAS,qBAAqB,MAAM,EAAE,KAAK,CAAC,SAAS;AAC/D,UAAI,YAAY,iBAAiB,QAAS;AAC1C,0BAAoB,CAAC,YAAY,sBAAsB,aAAa,CAAC,GAAG,SAAS,GAAG,IAAI,IAAI,IAAI,CAAC;AACjG,0BAAoB,KAAK,UAAU,mBAAmB;AAAA,IACxD,CAAC,EAAE,MAAM,MAAM;AACb,UAAI,YAAY,iBAAiB,WAAW,CAAC,WAAY,qBAAoB,CAAC,CAAC;AAAA,IACjF,CAAC,EAAE,QAAQ,MAAM;AACf,UAAI,YAAY,iBAAiB,QAAS;AAC1C,6BAAuB,UAAU;AAAO,0BAAoB,KAAK;AAAG,8BAAwB,KAAK;AAAA,IACnG,CAAC;AAAA,EACH;AACA,QAAM,kBAAkB,CAAC,UAAkB,cAAc,KAAK;AAC9D,QAAM,mBAAmBF,SAAQ,MAAM,sBAAsB,CAAC,GAAG,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,gBAAgB,CAAC;AAC9I,QAAM,mBAAmB,CAAC,eAAuB;AAC/C,eAAW,EAAE,WAAW,CAAC;AAAG,oBAAgB,IAAI;AAAG,UAAM,SAAS,sBAAsB,iBAAiB;AACzG,QAAI,CAAC,UAAU,CAAC,UAAU,KAAK,UAAU,EAAG;AAC5C,oBAAgB,sBAAiB;AAAG,SAAK,OAAO,UAAU,EAAE,KAAK,CAAC,UAAU;AAAE,UAAI,CAAC,MAAO,QAAO,gBAAgB,eAAe;AAAG,iBAAW,EAAE,MAAM,MAAM,MAAM,OAAO,MAAM,MAAM,YAAY,EAAE,CAAC;AAAG,sBAAgB,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,YAAY,CAAC,kBAAkB;AAAA,IAAG,CAAC,EAAE,MAAM,MAAM,gBAAgB,wBAAwB,CAAC;AAAA,EACjV;AACA,QAAM,mBAAmB,CAAC,SAAuC;AAC/D,sBAAkB,IAAI;AAAG,YAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,uCAAuC,QAAQ,WAAW,IAAI,GAAG,mBAAmB,EAAE,GAAG,QAAQ,mBAAmB,OAAO,SAAS,OAAO,OAAO,SAAS,OAAO,GAAI,SAAS,eAAe,CAAC,QAAQ,mBAAmB,YAAY,EAAE,WAAW,aAAa,IAAI,CAAC,EAAG,GAAG,cAAc,uCAAuC,QAAQ,cAAc,IAAI,EAAE,EAAE;AAAA,EACxa;AACA,QAAM,aAAa,CAAC,SAAsD,qCAAqC,MAAM,UAAU,MAAM,OAAO,SAAS,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI;AAC1L,QAAM,QAAQ,eAAe,KAAK,YAAY,EAAE,OAAO,CAAC,KAAK,SAAS,OAAO,WAAW,IAAI,KAAK,IAAI,CAAC;AAEtG,iBAAe,SAAwB;AACrC,UAAM,QAA6B,EAAE,GAAG,UAAU,IAAI,GAAG,cAAc,eAAe,KAAK,YAAY,EAAE,IAAI,CAAC,SAAS;AAAE,YAAM,SAAS,WAAW,IAAI;AAAG,aAAO,UAAU,OAAO,OAAO,EAAE,GAAG,MAAM,OAAO;AAAA,IAAG,CAAC,EAAE;AACjN,UAAM,aAAa,uBAAuB,KAAK;AAC/C,UAAM,cAAc,8BAA8B,EAAE,GAAG,WAAW,aAAa,aAAa,6CAA6C,IAAI,WAAW;AACxJ,wBAAoB,IAAI;AAAG,cAAU,WAAW;AAAG,iBAAa,IAAI;AACpE,QAAI,OAAO,KAAK,WAAW,EAAE,QAAQ;AACnC,YAAM,QAAQ,OAAO,KAAK,WAAW,EAAE;AACvC,YAAM,QAAQ,OAAO,OAAO,WAAW,EAAE,CAAC;AAC1C,mBAAa,OAAO,KAAK,qBAAqB,UAAU,IAAI,KAAK,GAAG,uBAAuB,KAAK,EAAE;AAClG,aAAO,sBAAsB,MAAM;AAAE,YAAI,QAAQ,QAAS,mBAAkB,QAAQ,OAAO;AAAA,MAAG,CAAC;AAC/F;AAAA,IACF;AACA,QAAI,YAAY,SAAS,QAAQ,SAAS,cAAe,QAAO,aAAa,8BAA8B,aAAa,eAAe;AACvI,UAAMG,iBAAgB,MAAM,MAAM;AAClC,UAAM,WAAW;AAAA,MACf,GAAG;AAAA,MACH,OAAO;AAAA,QACL,GAAG,MAAM;AAAA,QACT,GAAIA,iBAAgB,EAAE,qBAAqB,6BAA6BA,cAAa,EAAE,IAAI,CAAC;AAAA,MAC9F;AAAA,IACF;AACA,QAAI,UAAU;AACZ,oBAAc,IAAI;AAClB,UAAI;AAAE,cAAM,SAAS,EAAE,MAAM,UAAU,qBAAqB,aAAa,6BAA6B,QAAQ,CAAC;AAAA,MAAG,SAC3G,QAAQ;AAAE,qBAAa,kBAAkB,QAAQ,OAAO,UAAU,4BAA4B;AAAA,MAAG,UACxG;AAAU,sBAAc,KAAK;AAAA,MAAG;AAChC;AAAA,IACF;AAKA,QAAI,wBAAwB,SAAS,iBAAiB;AACpD,oBAAc,IAAI;AAClB,UAAI;AACF,cAAM,WAAW,MAAM,gBAAgB,mBAAmB;AAAA,UACxD,uBAAuB,SAAS,MAAM,oBAAoB;AAAA,UAC1D,GAAI,SAAS,MAAM,cAAc,EAAE,aAAa,SAAS,MAAM,YAAY,IAAI,CAAC;AAAA,QAClF,CAAC;AACD,sBAAc,KAAK;AACnB,sBAAc,IAAI;AAClB,uBAAe,EAAE,UAAU,SAAS,CAAC;AACrC;AAAA,MACF,QAAQ;AACN,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AACA,UAAM,uBAAuB,UAAU,MAAS;AAAA,EAClD;AAEA,iBAAe,uBACb,UACA,YACe;AACf,kBAAc,IAAI;AAClB,QAAI;AACF,UAAI,CAAC,iBAAkB,OAAM,IAAI,MAAM,8CAA8C;AACrF,YAAM,YAAY,MAAM,+BAA+B;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,QACA,8BAA8B;AAAA,QAC9B,GAAI,6BAA6B,EAAE,uBAAuB,2BAA2B,IAAI,CAAC;AAAA,QAC1F,GAAI,gBAAgB,EAAE,OAAO,cAAc,IAAI,CAAC;AAAA,MAClD,CAAC;AACD,YAAM,SAAS,MAAM,iBAAiB,WAAW;AAAA,QAC/C,MAAM;AAAA,QACN,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,QACnC;AAAA,MACF,CAAC;AACD,qBAAe,IAAI;AACnB,oBAAc,IAAI;AAClB,YAAM,cAAc,MAAM;AAAA,IAC5B,SAAS,QAAQ;AACf,YAAM,UAAU,kBAAkB,QAAQ,OAAO,UAAU;AAC3D,UAAI,WAAY,eAAc,OAAO;AAAA,UAAQ,cAAa,OAAO;AAAA,IACnE,UACA;AAAU,oBAAc,KAAK;AAAA,IAAG;AAAA,EAClC;AAEA,QAAM,2BAA2B,OAAO,2BAA2B;AACnE,QAAM,cAAc,CAAC,OAAwB,oBAA6B;AACxE,6BAAyB,KAAK;AAC9B,YAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,OAAO,qBAAqB,0BAA0B,OAAO,eAAe,EAAE,EAAE,EAAE;AAAA,EAC5I;AACA,QAAM,gBAAgB,KAAK,MAAM;AACjC,QAAM,yBAAyB,uBAAuB,OAAO,eAAe,KAAK,wBAAwB;AACzG,QAAM,0BAA0B,wBAAwB,uBAAuB,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,IACnG,GAAG;AAAA,IACH,SAAS,0BAA0B,SAAS,KAAK,MAAM,WAAW;AAAA,EACpE,EAAE;AACF,QAAM,yBAAyB,uBAAuB,OAAO,CAAC,YAAY,QAAQ,WAAW,IAAI;AACjG,QAAM,qBAAqB,uBAAuB,KAAK,CAAC,YAAY,QAAQ,OAAO;AACnF,QAAM,0BAA0B,uBAAuB,SAAU,qBAAqB,UAAU,YAAa;AAC7G,QAAM,kBAAkB,eAAe,yBAAyB,cAAc,UAAU,CAAC,IAAI,CAAC;AAC9F,QAAM,gBAAgB,OAAO,mCAAmC;AAChE,QAAM,mBAAmB,gBAAgB,KAAK,CAAC,WAAW,OAAO,OAAO,eAAe,OAAO;AAC9F,QAAM,iBAAiB,CAAC,YAAoB,QAAQ,CAAC,YAAY,QAAQ,MAAM,sBAC3E,EAAE,GAAG,SAAS,OAAO,EAAE,GAAG,QAAQ,OAAO,qBAAqB,EAAE,GAAG,QAAQ,MAAM,qBAAqB,QAAQ,EAAE,EAAE,IAClH,OAAO;AACX,QAAM,6BAA6B,YAA2B;AAC5D,QAAI,CAAC,eAAe,GAAI;AACxB,qBAAiB,IAAI;AAAG,iBAAa,IAAI;AAAG,sBAAkB,IAAI;AAAG,wBAAoB,IAAI;AAC7F,QAAI;AACF,YAAM,OAAO,qCAAqC,iBAAiB;AACnE,UAAI,CAAC,KAAM,OAAM,IAAI,MAAM,+CAA+C;AAC1E,mBAAa,MAAM,KAAK,cAAc,IAAI,KAAK,MAAM,WAAW,CAAC;AAAA,IACnE,SAAS,QAAQ;AACf,wBAAkB,kBAAkB,QAAQ,OAAO,UAAU,8CAA8C;AAAA,IAC7G,UAAE;AACA,0BAAoB,KAAK;AAAA,IAC3B;AAAA,EACF;AAEA,QAAM,gBAAgB,gBAAAT,MAAC,SAAI,WAAU,aAAY;AAAA,oBAAAA,MAAC,SAAI;AAAA,sBAAAD,KAAC,QAAG,WAAU,cAAc,mBAAQ;AAAA,MAAK,gBAAAA,KAAC,OAAE,WAAU,aAAa,uBAAY;AAAA,OAAI;AAAA,IAAM,gBAAAC,MAAC,UAAK,WAAU,iBAAgB;AAAA,sBAAAD,KAAC,gBAAa;AAAA,MAAE;AAAA,OAAS;AAAA,KAAO;AAE/M,QAAM,iBAAiB,gBAAAC,MAAC,cAAS,WAAU,aAAY,UAAU,QAAQ;AAAA,oBAAAD,KAAC,YAAO,WAAU,eAAc,qBAAO;AAAA,IAAS,gBAAAC,MAAC,SAAI,WAAU,aACpI;AAAA,sBAAAD,KAACI,QAAA,EAAM,MAAK,qBAAoB,OAAM,cAAa,UAAQ,MAAC,OAAO,OAAO,mBAAmB,GAAI,eAAK,KAAK,QAAQ,WAAW,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,UAAU,EAAE,EAAE,CAAC,GAAE;AAAA,MAC/M,gBAAAJ,KAACI,QAAA,EAAM,MAAK,oBAAmB,OAAM,aAAY,UAAQ,MAAC,OAAO,OAAO,kBAAkB,GAAI,eAAK,KAAK,QAAQ,UAAU,CAAC,aAAa,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,CAAC,GAAE;AAAA,MACzM,gBAAAJ,KAACI,QAAA,EAAM,OAAM,eAAe,eAAK,KAAK,QAAQ,YAAY,CAAC,eAAe,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,WAAW,EAAE,EAAE,CAAC,GAAE;AAAA,MAC7I,gBAAAJ,KAACI,QAAA,EAAM,OAAM,oBAAoB,eAAK,KAAK,QAAQ,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC,GAAE;AAAA,MACpJ,gBAAAJ,KAACI,QAAA,EAAM,MAAK,uBAAsB,OAAM,iBAAgB,UAAQ,MAAC,OAAO,OAAO,qBAAqB,GAAG,0BAAAJ,KAAC,iBAAc,WAAU,iBAAgB,OAAO,KAAK,QAAQ,aAAa,UAAU,QAAQ,UAAQ,MAAC,UAAU,CAAC,gBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,YAAY,EAAE,EAAE,GAAG,GAAE;AAAA,MAC7S,gBAAAA,KAACI,QAAA,EAAM,MAAK,yBAAwB,OAAM,WAAU,UAAQ,MAAC,MAAI,MAAC,OAAO,OAAO,uBAAuB,GAAI,eAAK,KAAK,QAAQ,QAAQ,OAAO,CAAC,UAAU,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,aAAa,iBAAiB,CAAC,GAAE;AAAA,MACjN,gBAAAH,MAACG,QAAA,EAAM,MAAK,8BAA6B,OAAM,OAAM,UAAQ,MAAC,OAAO,OAAO,4BAA4B,GAAI;AAAA,aAAK,KAAK,QAAQ,QAAQ,YAAY,kBAAkB,EAAE,WAAW,GAAG,CAAC;AAAA,QAAG,eAAe,gBAAAJ,KAAC,WAAM,WAAU,aAAa,wBAAa,IAAW;AAAA,SAAK;AAAA,MAClQ,gBAAAA,KAACI,QAAA,EAAM,MAAK,wBAAuB,OAAM,QAAO,UAAQ,MAAC,OAAO,OAAO,sBAAsB,GAAI,eAAK,KAAK,QAAQ,QAAQ,MAAM,CAAC,SAAS,WAAW,EAAE,KAAK,CAAC,CAAC,GAAE;AAAA,MACjK,gBAAAJ,KAACI,QAAA,EAAM,MAAK,yBAAwB,OAAM,SAAQ,UAAQ,MAAC,OAAO,OAAO,uBAAuB,GAAI,eAAK,KAAK,QAAQ,QAAQ,OAAO,CAAC,UAAU,WAAW,EAAE,OAAO,MAAM,YAAY,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,GAAE;AAAA,OAChN;AAAA,KAAM;AAER,QAAM,eAAe,gBAAAH,MAAC,cAAS,WAAU,aAAY,UAAU,QAAQ;AAAA,oBAAAD,KAAC,YAAO,WAAU,eAAc,4BAAkB;AAAA,IAAS,gBAAAC,MAAC,SAAI,WAAU,aAC7I;AAAA,sBAAAD,KAACI,QAAA,EAAM,MAAK,gBAAe,OAAM,mBAAkB,UAAQ,MAAC,OAAO,OAAO,cAAc,GAAG,0BAAAJ,KAAC,iBAAc,WAAU,mBAAkB,OAAO,KAAK,QAAQ,MAAM,UAAU,QAAQ,UAAQ,MAAC,UAAU,CAACE,UAAS,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,MAAAA,MAAK,EAAE,EAAE,GAAG,GAAE;AAAA,MAC9Q,gBAAAD,MAACG,QAAA,EAAM,OAAM,wCAAwC;AAAA,aAAK,KAAK,QAAQ,qBAAqB,CAAC,wBAAwB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,EAAE,SAAS,oBAAoB,EAAE,EAAE,GAAG,EAAE,aAAa,0CAA0C,CAAC;AAAA,QAAE,gBAAAJ,KAAC,WAAM,WAAU,aAAY,gEAAkD;AAAA,SAAQ;AAAA,MACpV,gBAAAA,KAACI,QAAA,EAAM,MAAK,sBAAqB,OAAM,kBAAiB,UAAQ,MAAC,OAAO,OAAO,oBAAoB,GAAG,0BAAAJ,KAAC,iBAAc,WAAU,kBAAiB,OAAO,KAAK,MAAM,cAAc,UAAU,QAAQ,UAAQ,MAAC,UAAU,CAAC,iBAAiB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,aAAa,EAAE,EAAE,GAAG,GAAE;AAAA,MAC1S,gBAAAA,KAACI,QAAA,EAAM,MAAK,kBAAiB,OAAM,iBAAgB,UAAQ,MAAC,OAAO,OAAO,gBAAgB,GAAI,eAAK,KAAK,MAAM,UAAU,CAAC,aAAa,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,SAAS,EAAE,EAAE,CAAC,GAAE;AAAA,MACnM,gBAAAH,MAACG,QAAA,EAAM,MAAK,qBAAoB,OAAM,gBAAe,UAAQ,MAAC,OAAO,OAAO,mBAAmB,GAAI;AAAA,aAAK,KAAK,MAAM,aAAa,CAAC,gBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,YAAY,EAAE,EAAE,CAAC;AAAA,QAC5M,uBAAuB,SAAS,gBAAAH,MAAC,SAAI,WAAU,uBAAsB,cAAY,2BAA2B,QAAW,MAAK,UAC1H;AAAA,sCAA4B,UAAU,gBAAAD,KAAC,YAAO,yDAAsC,IAAY,4BAA4B,YAAY,gBAAAA,KAAC,YAAO,mEAAgD,IAAY,gBAAAA,KAAC,YAAO,yCAA2B;AAAA,UAChP,gBAAAA,KAAC,UAAK,WAAU,2BAA2B,iCAAuB,IAAI,CAAC,YAAY,GAAG,QAAQ,OAAO,GAAG,QAAQ,UAAU,cAAc,QAAQ,OAAO,MAAM,EAAE,EAAE,EAAE,KAAK,QAAK,GAAE;AAAA,WACjL,IAAS;AAAA,SACX;AAAA,MACA,gBAAAA,KAACI,QAAA,EAAM,OAAM,gCAAgC,eAAK,KAAK,MAAM,WAAW,CAAC,cAAc,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,UAAU,EAAE,EAAE,CAAC,GAAE;AAAA,MACrJ,gBAAAH,MAACG,QAAA,EAAM,MAAK,6BAA4B,OAAM,wBAAuB,UAAQ,MAAC,MAAI,MAAC,OAAO,0BAA0B,SAAS,CAAC,eAAe,IAC3I;AAAA,wBAAAJ,KAAC,YAAS,WAAU,wBAAuB,SAAS,QAAQ,wBAAwB,KAAK,CAAC,eAAe,IAAI,UAAU,QAAQ,SAAS,cAAc,aAAa,kBAAkB,eAAe,OAAO,OAAO,eAAe,QAAQ,IAAI,aAAY,gDAA0C,SAAS,aAAa,IAAI,CAAC,UAAU;AAAE,gBAAM,gBAAgB,MAAM,qBAAqB,IAAI,CAAC,YAAY,GAAG,QAAQ,OAAO,GAAG,QAAQ,UAAU,cAAc,QAAQ,OAAO,MAAM,EAAE,EAAE,EAAE,KAAK,QAAK,KAAK,MAAM,mBAAmB;AAAI,iBAAO,EAAE,IAAI,MAAM,IAAI,OAAO,MAAM,MAAM,QAAQ,CAAC,MAAM,SAAS,SAAS,iBAAiB,MAAM,QAAQ,KAAK,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK,KAAK,wBAAwB,GAAI,MAAM,oBAAoB,SAAS,EAAE,oBAAoB,MAAM,mBAAmB,IAAI,CAAC,GAAI,GAAI,MAAM,QAAQ,EAAE,UAAU,MAAM,MAAM,IAAI,CAAC,EAAG;AAAA,QAAG,CAAC,GAAG,QAAQ,MAAM;AAAE,cAAI,eAAe,GAAI,YAAW,EAAE;AAAA,QAAG,GAAG,SAAS,cAAc,cAAc,MAAM,WAAW,cAAc,IAAI,IAAI,GAAG,UAAU,CAAC,WAAW,YAAY,aAAa,KAAK,CAAC,UAAU,MAAM,OAAO,OAAO,EAAE,KAAK,EAAE,IAAI,OAAO,IAAI,MAAM,OAAO,MAAM,CAAC,GAAG;AAAA,QAC7mC,kCAAkC,SAAS,gBAAAA,KAAC,SAAI,WAAU,wBAAwB,4CAAkC,IAAI,CAAC,QAAQ,UAAU,gBAAAC,MAAC,UAAuD;AAAA,iBAAO,MAAM,gBAAAD,KAAC,OAAE,MAAM,OAAO,KAAK,QAAO,UAAS,KAAI,uBAAuB,iBAAO,OAAM,IAAO,gBAAAA,KAAC,YAAQ,iBAAO,OAAM;AAAA,UAAU;AAAA,UAAE,gBAAAA,KAAC,OAAG,iBAAO,MAAK;AAAA,aAAhM,GAAG,OAAO,MAAM,IAAI,OAAO,IAAI,IAAI,KAAK,EAA4J,CAAO,GAAE,IAAS;AAAA,QAC5W,0BAA0B,gBAAAC,MAAC,WAAM,WAAU,aAAY;AAAA;AAAA,UAAsC;AAAA,WAAwB,IAAW;AAAA,QAChI,iBAAiB,SAAS,gBAAAA,MAAC,SAAI,WAAU,oBAAmB;AAAA,0BAAAD,KAAC,YAAO,wBAAU;AAAA,UAAU,iBAAiB,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,eAAe;AAAE,kBAAM,oBAAoB,WAAW,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,WAAW,eAAe;AAAG,mBAAO,gBAAAC,MAAC,YAAO,WAAU,mBAAkB,MAAK,UAA2E,OAAO,WAAW,QAAQ,SAAS,MAAM,YAAY,YAAY,WAAW,eAAe,GAAI;AAAA,yBAAW;AAAA,cAAM,oBAAoB,SAAM,kBAAkB,KAAK,KAAK;AAAA,iBAAnO,GAAG,WAAW,EAAE,IAAI,WAAW,mBAAmB,OAAO,EAA6K;AAAA,UAAW,CAAC;AAAA,WAAE,IAAS;AAAA,QAC/iB,eAAe,KAAK,gBAAAA,MAAC,YAAO,WAAU,uBAAsB,MAAK,UAAS,SAAS,MAAM;AAAE,eAAK,2BAA2B;AAAA,QAAG,GAAG;AAAA;AAAA,UAAuC,cAAc;AAAA,WAAK,IAAY,gBAAAD,KAAC,WAAM,WAAU,aAAY,qEAAuD;AAAA,SAC9R;AAAA,MACC,eAAe,yBAAyB,gBAAAC,MAACG,QAAA,EAAM,MAAK,qCAAoC,OAAM,SAAQ,UAAQ,MAAC,MAAI,MAAC,OAAO,eACzH;AAAA,wBAAgB,SAAS,gBAAAJ,KAAC,YAAS,WAAU,SAAQ,SAAS,QAAQ,aAAa,GAAG,UAAU,QAAQ,OAAO,kBAAkB,SAAS,IAAI,aAAY,uDAAiD,SAAS,gBAAgB,IAAI,CAAC,YAAY,EAAE,IAAI,OAAO,IAAI,OAAO,OAAO,OAAO,GAAI,OAAO,OAAO,EAAE,QAAQ,OAAO,KAAK,IAAI,CAAC,GAAI,GAAI,OAAO,oBAAoB,SAAS,EAAE,oBAAoB,OAAO,mBAAmB,IAAI,CAAC,EAAG,EAAE,GAAG,UAAU,CAAC,WAAW,eAAe,OAAO,EAAE,GAAG,IAAK,gBAAAC,MAAC,SAAI,WAAU,cAAa,MAAK,SAAQ;AAAA;AAAA,UAAqC,cAAc;AAAA,UAAK;AAAA,WAAwF;AAAA,QAChqB,mBAAmB,gBAAAA,MAAC,SAAI,WAAU,qBAAoB,MAAK,UAAS;AAAA,0BAAAD,KAAC,YAAO,+BAAY;AAAA,UAAS;AAAA,UAAE,iBAAiB;AAAA,WAAM,IAAS,gBAAAC,MAAC,WAAM,WAAU,aAAa;AAAA,wBAAc;AAAA,UAAK;AAAA,WAAqH;AAAA,SAC5S,IAAW;AAAA,MACX,gBAAAD,KAACI,QAAA,EAAM,OAAM,iCAAgC,MAAI,MAAE,eAAK,KAAK,MAAM,aAAa,CAACO,iBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,EAAE,OAAO,aAAAA,aAAY,EAAE,EAAE,CAAC,GAAE;AAAA,MACjK,gBAAAV,MAACG,QAAA,EAAM,MAAK,aAAY,OAAM,4BAA2B,UAAQ,MAAC,MAAI,MAAC,OAAO,OAAO,WACnF;AAAA,wBAAAJ,KAAC,SAAI,WAAU,oBAAmB,cAAW,0BAA0B,gDAAsC,IAAI,CAAC,WAAW;AAAE,gBAAM,YAAY,KAAK,aAAa,CAAC,GAAG,SAAS,OAAO,IAAI;AAAG,iBAAO,gBAAAC,MAAC,YAAO,WAAU,mBAAkB,iBAAe,UAAU,MAAK,UAA2B,gBAAc,UAAU,OAAO,GAAG,OAAO,IAAI,WAAM,OAAO,WAAW,IAAI,SAAS,MAAM,QAAQ,CAAC,aAAa,EAAE,GAAG,SAAS,WAAW,YAAY,QAAQ,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,SAAS,OAAO,IAAI,IAAI,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAI,QAAQ,aAAa,CAAC,GAAI,OAAO,IAAI,CAAC,CAAC,EAAE,EAAE,GAAI;AAAA,uBAAW,WAAM;AAAA,YAAI;AAAA,YAAE,OAAO;AAAA,eAAhU,OAAO,IAA+T;AAAA,QAAW,CAAC,GAAE;AAAA,QACzmB,gBAAAD,KAAC,SAAI,WAAU,cAAe,gBAAK,aAAa,CAAC,GAAG,IAAI,CAAC,SAAS;AAAE,gBAAM,SAAS,CAAC,GAAG,uCAAuC,GAAG,gBAAgB,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI;AAAG,iBAAO,gBAAAC,MAAC,UAAK,WAAU,aAAuB;AAAA,4BAAAD,KAAC,YAAQ,gBAAK;AAAA,YAAU,QAAQ,cAAc,IAAI,OAAO,WAAW,KAAK;AAAA,YAAG,gBAAAA,KAAC,YAAO,MAAK,UAAS,cAAY,UAAU,IAAI,IAAI,SAAS,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,YAAY,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,SAAS,IAAI,EAAE,EAAE,GAAG,kBAAC;AAAA,eAAlP,IAA2P;AAAA,QAAS,CAAC,GAAE;AAAA,QACte,gBAAAA,KAAC,YAAS,WAAU,sBAAqB,SAAS,QAAQ,OAAO,SAAS,GAAG,UAAU,QAAQ,SAAS,kBAAkB,aAAa,sBAAsB,OAAM,IAAG,aAAc,KAAK,WAAW,UAAU,IAAK,GAAG,KAAK,UAAW,MAAM,oCAA0B,6BAAwB,SAAS,iBAAiB,OAAO,CAAC,SAAS,EAAE,KAAK,aAAa,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,YAAY,EAAE,GAAG,QAAQ,MAAM;AAAE,cAAI,mBAAmB,GAAI,eAAc,EAAE;AAAA,QAAG,GAAG,SAAS,iBAAiB,cAAc,MAAM,cAAc,kBAAkB,IAAI,IAAI,GAAG,UAAU,CAAC,WAAW,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAI,EAAE,aAAa,CAAC,GAAI,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG;AAAA,SACltB;AAAA,OACF;AAAA,KAAM;AAER,QAAM,mBAAmB,gBAAAC,MAAC,cAAS,WAAU,aAAY,UAAU,QAAQ;AAAA,oBAAAD,KAAC,YAAO,WAAU,eAAc,0CAAgC;AAAA,IAAS,gBAAAC,MAAC,SAAI,WAAU,aAC/J;AAAA,sBAAAD,KAAC,QAAG,WAAU,gBAAe,8BAAgB;AAAA,MAC7C,gBAAAA,KAACI,QAAA,EAAM,MAAK,wBAAuB,OAAM,yBAAwB,UAAQ,MAAC,OAAO,OAAO,sBAAsB,GAAI,eAAK,KAAK,iBAAiB,MAAM,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,KAAK,EAAE,EAAE,CAAC,GAAE;AAAA,MAC1O,gBAAAJ,KAACI,QAAA,EAAM,MAAK,yBAAwB,OAAM,sBAAqB,UAAQ,MAAC,OAAO,OAAO,uBAAuB,GAAI,eAAK,KAAK,iBAAiB,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,MAAM,EAAE,EAAE,GAAG,EAAE,WAAW,UAAU,CAAC,GAAE;AAAA,MACtQ,gBAAAJ,KAACI,QAAA,EAAM,MAAK,uBAAsB,OAAM,wBAAuB,UAAQ,MAAC,OAAO,OAAO,qBAAqB,GAAI,eAAK,KAAK,iBAAiB,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,WAAW,WAAW,GAAG,CAAC,GAAE;AAAA,MAC7Q,gBAAAJ,KAACI,QAAA,EAAM,MAAK,yBAAwB,OAAM,0BAAyB,UAAQ,MAAC,OAAO,OAAO,uBAAuB,GAAI,eAAK,KAAK,iBAAiB,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC,GAAE;AAAA,MACjQ,gBAAAJ,KAACI,QAAA,EAAM,MAAK,iCAAgC,OAAM,0BAAyB,UAAQ,MAAC,MAAI,MAAC,OAAO,OAAO,+BAA+B,GAAI,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MACne,gBAAAJ,KAACI,QAAA,EAAM,OAAM,qCAAoC,MAAI,MAAE,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MAChZ,gBAAAJ,KAACI,QAAA,EAAM,MAAK,gCAA+B,OAAM,gBAAe,UAAQ,MAAC,OAAO,OAAO,8BAA8B,GAAI,eAAK,KAAK,iBAAiB,SAAS,MAAM,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MACjd,gBAAAJ,KAACI,QAAA,EAAM,MAAK,iCAAgC,OAAM,iBAAgB,UAAQ,MAAC,OAAO,OAAO,+BAA+B,GAAI,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,MAAM,YAAY,GAAG,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,GAAE;AAAA,MAC5f,gBAAAJ,KAACI,QAAA,EAAM,MAAK,sCAAqC,OAAM,eAAc,UAAQ,MAAC,OAAO,OAAO,oCAAoC,GAAI,eAAK,KAAK,iBAAiB,SAAS,YAAY,CAAC,eAAe,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MACle,gBAAAJ,KAAC,QAAG,WAAU,gBAAe,gCAAkB;AAAA,MAC/C,gBAAAA,KAACI,QAAA,EAAM,MAAK,0BAAyB,OAAM,2BAA0B,UAAQ,MAAC,OAAO,OAAO,wBAAwB,GAAI,eAAK,KAAK,mBAAmB,MAAM,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,KAAK,EAAE,EAAE,CAAC,GAAE;AAAA,MACtP,gBAAAJ,KAACI,QAAA,EAAM,MAAK,yBAAwB,OAAM,0BAAyB,UAAQ,MAAC,OAAO,OAAO,uBAAuB,GAAI,eAAK,KAAK,mBAAmB,KAAK,CAAC,QAAQ,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,IAAI,EAAE,EAAE,GAAG,EAAE,WAAW,WAAW,WAAW,GAAG,CAAC,GAAE;AAAA,MACzR,gBAAAH,MAACG,QAAA,EAAM,MAAK,8BAA6B,OAAM,sBAAqB,UAAQ,MAAC,OAAO,OAAO,4BAA4B,GAAG;AAAA,wBAAAJ,KAAC,YAAS,WAAU,sBAAqB,SAAS,QAAQ,OAAO,4BAA4B,CAAC,GAAG,UAAU,QAAQ,qBAAmB,MAAC,OAAO,KAAK,mBAAmB,YAAY,IAAI,aAAY,gDAA0C,SAAS,WAAW,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,OAAO,KAAK,aAAa,QAAQ,KAAK,KAAK,EAAE,GAAG,cAAc,CAAC,UAAU;AAAE,gBAAM,OAAO,MAAM,KAAK,EAAE,YAAY;AAAG,iBAAO,iBAAiB,KAAK,IAAI,IAAI,EAAE,IAAI,MAAM,OAAO,MAAM,QAAQ,yBAAyB,IAAI;AAAA,QAAM,GAAG,UAAU,CAAC,WAAW,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,UAAU,OAAO,GAAG,EAAE,EAAE,GAAG;AAAA,QAAE,gBAAAA,KAAC,WAAM,WAAU,aAAY,qEAAuD;AAAA,SAAQ;AAAA,MAC90B,gBAAAA,KAAC,QAAG,WAAU,gBAAe,8BAAgB;AAAA,MAC7C,gBAAAA,KAACI,QAAA,EAAM,MAAK,sCAAqC,OAAM,yBAAwB,UAAQ,MAAC,OAAO,OAAO,oCAAoC,GAAI,eAAK,KAAK,iBAAiB,oBAAoB,CAAC,uBAAuB,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,mBAAmB,EAAE,EAAE,GAAG,EAAE,WAAW,WAAW,WAAW,GAAG,aAAa,KAAK,CAAC,GAAE;AAAA,MAC3W,gBAAAJ,KAACI,QAAA,EAAM,MAAK,iCAAgC,OAAM,0BAAyB,UAAQ,MAAC,MAAI,MAAC,OAAO,OAAO,+BAA+B,GAAI,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MACne,gBAAAJ,KAACI,QAAA,EAAM,OAAM,qCAAoC,MAAI,MAAE,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MAChZ,gBAAAJ,KAACI,QAAA,EAAM,MAAK,gCAA+B,OAAM,gBAAe,UAAQ,MAAC,OAAO,OAAO,8BAA8B,GAAI,eAAK,KAAK,iBAAiB,SAAS,MAAM,CAAC,SAAS,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,MACjd,gBAAAJ,KAACI,QAAA,EAAM,MAAK,iCAAgC,OAAM,iBAAgB,UAAQ,MAAC,OAAO,OAAO,+BAA+B,GAAI,eAAK,KAAK,iBAAiB,SAAS,OAAO,CAAC,UAAU,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,MAAM,YAAY,GAAG,YAAY,EAAE,iBAAiB,SAAS,cAAc,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,GAAE;AAAA,MAC5f,gBAAAJ,KAACI,QAAA,EAAM,MAAK,sCAAqC,OAAM,eAAc,UAAQ,MAAC,OAAO,OAAO,oCAAoC,GAAI,eAAK,KAAK,iBAAiB,SAAS,YAAY,CAAC,eAAe,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,SAAS,EAAE,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,MAAM,EAAE,iBAAiB,SAAS,QAAQ,IAAI,OAAO,EAAE,iBAAiB,SAAS,SAAS,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC,GAAE;AAAA,OACpe;AAAA,KAAM;AAER,QAAM,sBAAsB,gBAAAH,MAAC,cAAS,WAAU,aAAY,UAAU,QAAQ;AAAA,oBAAAD,KAAC,YAAO,WAAU,eAAc,wCAA8B;AAAA,IACxI,gBAAAA,KAAC,OAAE,WAAU,aAAY,sFAAwE;AAAA,IACjG,gBAAAA,KAAC,SAAI,WAAU,iBAAgB,MAAK,SAAQ,cAAW,mBAAoB,WAAE,CAAC,OAAO,eAAe,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,aAAa,WAAW,CAAE,EAAY,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,gBAAAA,KAAC,YAAO,WAAU,gBAAe,MAAK,UAAoB,gBAAc,mBAAmB,MAAM,SAAS,MAAM,iBAAiB,IAAI,GAAI,mBAArF,IAA2F,CAAS,GAAE;AAAA,IAC/U,gBAAAA,KAAC,OAAE,WAAU,aAAa,6BAAmB,QAAQ,0FAAqF,mBAAmB,cAAc,iGAA4F,4FAAsF;AAAA,IAC7V,gBAAAC,MAAC,SAAI,WAAU,cAAa,mBAAgB,gBAAe,gBAAc,QAAQ,OAAO,YAAY,GAAG;AAAA,sBAAAA,MAAC,SAAI,WAAU,kBAAiB;AAAA,wBAAAA,MAAC,UAAK;AAAA;AAAA,UAAc,gBAAAD,KAAC,gBAAa;AAAA,WAAE;AAAA,QAAO,gBAAAA,KAAC,UAAK,uBAAS;AAAA,QAAO,gBAAAA,KAAC,UAAK,gBAAE;AAAA,QAAO,gBAAAC,MAAC,UAAK;AAAA;AAAA,UAAK,gBAAAD,KAAC,gBAAa;AAAA,WAAE;AAAA,QAAO,gBAAAA,KAAC,UAAK,qBAAO;AAAA,QAAO,gBAAAA,KAAC,UAAK;AAAA,QAAE;AAAA,SAAC;AAAA,MACnR,KAAK,aAAa,IAAI,CAAC,MAAM,UAAU,gBAAAC,MAAC,SAAI,WAAU,aACrD;AAAA,wBAAAA,MAAC,SAAI,cAAW,kBAAiB,mBAAiB,gBAAgB,KAAK,SAAS,gBAAc,QAAQ,OAAO,gBAAgB,KAAK,OAAO,CAAC,GAAG;AAAA,0BAAAD,KAAC,YAAS,WAAW,kBAAkB,QAAQ,CAAC,IAAI,SAAS,QAAQ,OAAO,gBAAgB,KAAK,OAAO,CAAC,GAAG,UAAU,QAAQ,OAAO,KAAK,MAAM,aAAY,8BAAwB,SAAS,WAAW,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,YAAY,EAAE,GAAG,cAAc,uBAAuB,UAAU,CAAC,WAAW;AAAE,kBAAM,OAAO,mBAAmB,gBAAgB,OAAO,EAAE;AAAG,oBAAQ,OAAO,EAAE,MAAM,OAAO,IAAI,GAAI,OAAO,EAAE,WAAW,CAAC,MAAM,IAAI,KAAK,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,MAAM,IAAI,EAAE,SAAS,KAAK,QAAQ,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,YAAY,EAAE,WAAW,KAAK,UAAU,IAAI,CAAC,EAAG,CAAC;AAAA,UAAG,GAAG;AAAA,UAAG,KAAK,OAAO,gBAAAA,KAAC,WAAM,WAAU,aAAa,qBAAW,KAAK,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,GAAG,eAAe,4CAA2C,IAAW;AAAA,UAAM,OAAO,gBAAgB,KAAK,OAAO,IAAI,gBAAAA,KAAC,WAAM,WAAU,cAAa,MAAK,SAAS,iBAAO,gBAAgB,KAAK,OAAO,GAAE,IAAW;AAAA,WAAK;AAAA,QACrjC,gBAAAC,MAAC,SAAI,cAAW,aAAY;AAAA,0BAAAD,KAAC,SAAI,WAAU,cAAe,gBAAK,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,gBAAAC,MAAC,UAAK,WAAU,aAA2B;AAAA;AAAA,YAAE,SAAS,QAAQ,MAAM,EAAE;AAAA,YAAE,gBAAAD,KAAC,YAAO,MAAK,UAAS,cAAY,mBAAmB,QAAQ,IAAI,SAAS,MAAM,QAAQ,OAAO,EAAE,YAAY,KAAK,aAAa,CAAC,GAAG,OAAO,CAAC,SAAS,SAAS,QAAQ,EAAE,CAAC,GAAG,kBAAC;AAAA,eAAnN,QAA4N,CAAO,GAAE;AAAA,UAAM,gBAAAA,KAAC,YAAS,WAAW,aAAa,QAAQ,CAAC,IAAI,UAAU,QAAQ,OAAM,IAAG,aAAc,KAAK,WAAW,UAAU,IAAK,GAAG,KAAK,UAAW,MAAM,YAAY,KAAK,UAAW,WAAW,IAAI,KAAK,GAAG,KAAK,uBAAkB,SAAS,UAAU,OAAO,CAAC,SAAS,EAAE,KAAK,aAAa,CAAC,GAAG,SAAS,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,OAAO,SAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,YAAY,EAAE,GAAG,UAAU,CAAC,WAAW,QAAQ,OAAO,EAAE,WAAW,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAI,KAAK,aAAa,CAAC,GAAI,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG;AAAA,WAAE;AAAA,QAC51B,gBAAAA,KAAC,SAAI,cAAW,MAAK,0BAAAA,KAAC,SAAI,WAAU,WAAY,gBAAK,aAAa,CAAC,GAAG,UAAU,KAAK,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,YAAY;AAAE,gBAAM,UAAU,UAAU;AAAG,gBAAM,UAAU,KAAK,qBAAqB,CAAC,GAAG,SAAS,OAAO;AAAG,iBAAO,gBAAAA,KAAC,YAAO,MAAK,UAAoB,WAAU,gBAAe,eAAa,QAAQ,OAAO,GAAG,OAAO,aAAa,KAAK,OAAO,CAAC,WAAM,IAAI,IAAI,gBAAc,QAAQ,cAAY,cAAc,QAAQ,CAAC,iBAAiB,IAAI,IAAI,SAAS,MAAM,QAAQ,OAAO,EAAE,mBAAmB,UAAU,KAAK,qBAAqB,CAAC,GAAG,OAAO,CAAC,SAAS,SAAS,OAAO,IAAI,CAAC,GAAI,KAAK,qBAAqB,CAAC,GAAI,OAAO,EAAE,KAAK,CAAC,MAAM,UAAU,OAAO,KAAK,EAAE,CAAC,GAAI,iBAAO,aAAa,KAAK,OAAO,KAArb,IAAub;AAAA,QAAW,CAAC,IAAI,gBAAAA,KAAC,WAAM,WAAU,aAAY,iCAAmB,GAAS,GAAM;AAAA,QACrwB,gBAAAC,MAAC,SAAI,cAAW,SAAQ,mBAAiB,gBAAgB,KAAK,UAAU,gBAAc,QAAQ,OAAO,gBAAgB,KAAK,QAAQ,CAAC,GAAG;AAAA,0BAAAD,KAAC,WAAM,WAAU,cAAa,cAAY,SAAS,QAAQ,CAAC,IAAI,gBAAc,QAAQ,OAAO,gBAAgB,KAAK,QAAQ,CAAC,GAAG,MAAK,UAAS,KAAK,GAAG,OAAO,KAAK,SAAS,GAAG,UAAU,CAAC,UAAU,QAAQ,OAAO,EAAE,OAAO,OAAO,MAAM,OAAO,KAAK,EAAE,CAAC,GAAG;AAAA,UAAG,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAAA,KAAC,WAAM,WAAU,cAAa,MAAK,SAAS,iBAAO,gBAAgB,KAAK,QAAQ,GAAE,IAAW;AAAA,WAAK;AAAA,QAC3gB,gBAAAA,KAAC,SAAI,WAAU,cAAa,cAAW,WAAW,qBAAW,IAAI,KAAK,OAAO,WAAM,WAAW,IAAI,EAAG,eAAe,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,GAAE;AAAA,QACvK,gBAAAA,KAAC,YAAO,WAAU,iBAAgB,MAAK,UAAS,cAAY,uBAAuB,QAAQ,CAAC,IAAI,UAAU,UAAW,CAAC,eAAe,IAAI,KAAK,UAAU,KAAK,aAAa,SAAS,GAAI,SAAS,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,GAAG,cAAc,iCAAiC,EAAE,aAAa,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,CAAC,EAAE,EAAE,GAAG,kBAAC;AAAA,WAN3Q,KAOxE,CAAM;AAAA,MACN,gBAAAC,MAAC,SAAI,WAAU,cAAa;AAAA,wBAAAD,KAAC,UAAK,mBAAK;AAAA,QAAO,gBAAAA,KAAC,UAAM,gBAAM,eAAe,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,GAAE;AAAA,SAAO;AAAA,OACtI;AAAA,IAAO,OAAO,eAAe,gBAAAA,KAAC,OAAE,WAAU,cAAa,MAAK,SAAS,iBAAO,cAAa,IAAO;AAAA,KAClG;AAEF,QAAM,qBAAqB,gBAAAC,MAAC,cAAS,WAAU,aAAY,mBAAgB,eAAc,gBAAc,QAAQ,OAAO,WAAW,GAAG,UAAU,QAAQ;AAAA,oBAAAD,KAAC,YAAO,WAAU,eAAc,yBAAW;AAAA,IAAS,gBAAAC,MAAC,SAAI,WAAU,oBACpN;AAAA,kBAAY,OAAO,CAAC,eAAe,CAAC,iBAAiB,SAAS,WAAW,EAAE,CAAC,EAAE,IAAI,CAAC,eAAe;AAAE,cAAM,OAAO,WAAW,gBAAgB,WAAW,iBAAiB;AAAM,cAAM,YAAY,WAAW,aAAa,CAAC;AAAM,cAAM,iBAAiB,4BAA4B,WAAW,EAAE,KAAK,WAAW,kBAAkB,+BAA+B;AAAI,eAAO,gBAAAA,MAAC,SAAI,WAAU,mBAAkB,aAAW,MAA0B;AAAA,0BAAAA,MAAC,SAAI,WAAU,oBAAoB;AAAA,mBAAO,gBAAAD,KAAC,UAAK,cAAW,iBAAgB,MAAK,OAAM,oBAAC,IAAU;AAAA,YAAK,gBAAAC,MAAC,UAAK,WAAU,aAAY;AAAA,8BAAAD,KAAC,YAAQ,qBAAW,UAAS;AAAA,cAAS,gBAAAA,KAAC,UAAK,WAAU,cAAc,iBAAO,kBAAkB,eAAe,WAAW,YAAY,GAAE;AAAA,cAAO,gBAAAA,KAAC,UAAK,WAAU,aAAY,OAAO,EAAE,SAAS,QAAQ,GAAI,qBAAW,gBAAgB,OAAO,4CAA4C,eAAe,WAAW,YAAY,IAAG;AAAA,eAAO;AAAA,aAAO;AAAA,UAAO,4BAA4B,gBAAAA,KAAC,SAAI,WAAU,oBAAmB,0BAAAA,KAAC,YAAS,WAAW,mBAAmB,WAAW,QAAQ,IAAI,SAAS,CAAC,gBAAgB,UAAU,QAAQ,qBAAmB,MAAC,OAAO,gBAAgB,aAAY,4BAAsB,SAAS,mBAAmB,UAAU,CAAC,WAAW,+BAA+B,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,GAAE,IAAS;AAAA,UAAK,gBAAAC,MAAC,SAAI,WAAU,uBAAuB;AAAA,uBAAW,aAAa,gBAAAD,KAAC,OAAE,WAAU,kBAAiB,MAAM,WAAW,YAAY,QAAO,UAAS,KAAI,uBAAsB,qBAAO,IAAO;AAAA,YAAM,YAAY,gBAAAA,KAAC,YAAO,WAAU,iBAAgB,MAAK,UAAS,cAAY,UAAU,WAAW,QAAQ,IAAI,UAAU,QAAQ,SAAS,MAAM;AAAE,6BAAe,CAAC,YAAY,QAAQ,OAAO,CAAC,OAAO,OAAO,WAAW,EAAE,CAAC;AAAG,kCAAoB,CAAC,YAAY,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC;AAAA,YAAG,GAAG,kBAAC,IAAY;AAAA,aAAK;AAAA,aAAt2C,WAAW,EAAi2C;AAAA,MAAQ,CAAC;AAAA,MACvxD,QAAQ,IAAI,CAAC,QAAQ,UAAU;AAAE,cAAM,iBAAiB,OAAO,kBAAkB,+BAA+B;AAAI,eAAO,gBAAAC,MAAC,SAAI,WAAU,mBAAuD;AAAA,0BAAAD,KAAC,SAAI,WAAU,oBAAmB,0BAAAC,MAAC,UAAK,WAAU,aAAY;AAAA,4BAAAD,KAAC,YAAQ,iBAAO,KAAK,MAAK;AAAA,YAAS,gBAAAC,MAAC,UAAK,WAAU,aAAY,OAAO,EAAE,SAAS,QAAQ,GAAK;AAAA,sBAAO,KAAK,OAAO,OAAO,MAAM,QAAQ,CAAC;AAAA,cAAE;AAAA,eAAG;AAAA,aAAO,GAAO;AAAA,UAAO,4BAA4B,gBAAAD,KAAC,SAAI,WAAU,oBAAmB,0BAAAA,KAAC,YAAS,WAAW,mBAAmB,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,gBAAgB,UAAU,QAAQ,qBAAmB,MAAC,OAAO,gBAAgB,aAAY,4BAAsB,SAAS,mBAAmB,UAAU,CAAC,WAAW,WAAW,CAAC,YAAY,QAAQ,IAAI,CAAC,MAAM,cAAc,cAAc,QAAQ,EAAE,GAAG,MAAM,gBAAgB,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,GAAE,IAAS;AAAA,UAAK,gBAAAC,MAAC,SAAI,WAAU,uBAAsB;AAAA,4BAAAD,KAAC,YAAO,WAAU,kBAAiB,MAAK,UAAS,SAAS,MAAM,mBAAmB,OAAO,IAAI,GAAG,qBAAO;AAAA,YAAS,gBAAAA,KAAC,YAAO,WAAU,iBAAgB,MAAK,UAAS,cAAY,UAAU,OAAO,KAAK,IAAI,IAAI,SAAS,MAAM,WAAW,CAAC,YAAY,QAAQ,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,CAAC,GAAG,kBAAC;AAAA,aAAS;AAAA,aAA7gC,GAAG,OAAO,KAAK,IAAI,IAAI,KAAK,EAAu/B;AAAA,MAAQ,CAAC;AAAA,OAChsC;AAAA,IAAO,OAAO,cAAc,gBAAAA,KAAC,OAAE,WAAU,cAAa,MAAK,SAAS,iBAAO,aAAY,IAAO;AAAA,IAAK,gBAAAA,KAAC,WAAM,KAAK,WAAW,QAAM,MAAC,MAAK,QAAO,QAAO,wBAAuB,UAAQ,MAAC,UAAU,CAAC,UAAU;AAAE,UAAI,MAAM,OAAO,MAAO,UAAS,MAAM,OAAO,KAAK;AAAG,YAAM,OAAO,QAAQ;AAAA,IAAI,GAAG;AAAA,IAAE,gBAAAA,KAAC,YAAO,WAAU,aAAY,eAAa,YAAY,MAAK,UAAS,SAAS,MAAM,UAAU,SAAS,MAAM,GAAG,0BAAAC,MAAC,UAAK;AAAA,sBAAAD,KAAC,YAAO,OAAO,EAAE,UAAU,GAAG,GAAG,gEAAkD;AAAA,MAAS,gBAAAA,KAAC,UAAK,WAAU,aAAY,OAAO,EAAE,SAAS,SAAS,WAAW,EAAE,GAAG,+DAAiD;AAAA,OAAO,GAAO;AAAA,KAAS;AAEloB,QAAM,iBAAiB,gBAAAC,MAAAF,WAAA,EAAG;AAAA,gBAAY,gBAAAC,KAAC,SAAI,WAAU,cAAa,MAAK,SAAS,qBAAU,IAAS;AAAA,IAAK,gBAAAA,KAAC,SAAI,WAAU,gBAAe,0BAAAA,KAAC,YAAO,WAAU,eAAc,MAAK,UAAS,UAAU,QAAS,uBAAa,qBAAgB,aAAY,GAAS;AAAA,KAAM;AAC/P,QAAM,WAAmC;AAAA,IACvC,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,WAAW;AAAA,IACX,cAAc;AAAA,IACd,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACA,QAAM,gBAAgB,gBAAAC,MAAAF,WAAA,EACpB;AAAA,oBAAAC,KAAC,wBAAqB;AAAA,IACtB,gBAAAA,KAAC,gCAA6B;AAAA,IAC9B,gBAAAA,KAAC,8BAA2B;AAAA,IAC5B,gBAAAA,KAAC,kCAA+B;AAAA,IAChC,gBAAAA,KAAC,qCAAkC;AAAA,IACnC,gBAAAA,KAAC,oCAAiC;AAAA,IAClC,gBAAAA,KAAC,yBAAsB;AAAA,KACzB;AAEA,SAAO,gBAAAC,MAAC,8BAA8B,UAA9B,EAAuC,OAAO,UACpD;AAAA,oBAAAA,MAAC,UAAK,KAAK,SAAS,WAAW,GAAG,SAAS,SAAS,OAAO,EAAE,GAAG,wBAAwB,UAAU,GAAG,GAAG,MAAM,GAAG,UAAU,CAAC,UAAU;AAAE,YAAM,eAAe;AAAG,WAAK,OAAO;AAAA,IAAG,GAAG,YAAU,MAC1L;AAAA,sBAAAD,KAAC,WAAO,UAAAG,MAAI;AAAA,MACX,mBAAmB,gBAAAH,KAAC,SAAI,WAAU,kBAAiB,MAAK,UAAU,4BAAiB,IAAS;AAAA,MAC5F,YAAY;AAAA,MACZ,cACC,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,UAAU,YAAY;AAAA,UACtB;AAAA,UACA,OAAO;AAAA,UACP,UAAU,MAAM;AAAE,gBAAI,CAAC,YAAY;AAAE,6BAAe,IAAI;AAAG,4BAAc,IAAI;AAAA,YAAG;AAAA,UAAE;AAAA,UAClF,WAAW,CAAC,eAAe;AAAE,iBAAK,uBAAuB,YAAY,UAAU,UAAU;AAAA,UAAG;AAAA;AAAA,MAC9F,IACE;AAAA,OACN;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM;AAAA,QACN;AAAA,QACA,SAAS;AAAA,QACT,OAAO;AAAA,QACP,SAAS,MAAM;AACb,2BAAiB,KAAK;AACtB,uBAAa,IAAI;AACjB,4BAAkB,IAAI;AAAA,QACxB;AAAA;AAAA,IACF;AAAA,KACF;AACF;;;AIvkCA,SAAS,WAAAY,UAAS,YAAAC,iBAAgB;AAkIzB,SAKS,YAAAC,WALkG,OAAAC,MAA3G,QAAAC,aAAA;AAjDT,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUZ,IAAM,iBAAiB,oBAAI,IAAI,CAAC,UAAU,UAAU,WAAW,CAAC;AAChE,IAAMC,SAAQ,CAAC,UAAkB,OAAO,SAAS,CAAC,EAAE,eAAe,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC;AACpH,IAAM,aAAa,CAAC,UAAkB,MAAM,WAAW,KAAK,GAAG,EAAE,QAAQ,SAAS,CAAC,WAAW,OAAO,YAAY,CAAC;AAE3G,SAAS,cAAc,MAA4B,MAAM,oBAAI,KAAK,GAAW;AAClF,MAAI,OAAO,SAAS,KAAK,SAAS,EAAG,QAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,SAAU,CAAC;AACnF,MAAI,CAAC,KAAK,YAAa,QAAO;AAC9B,QAAM,YAAY,IAAI,KAAK,KAAK,WAAW;AAC3C,MAAI,OAAO,MAAM,UAAU,QAAQ,CAAC,EAAG,QAAO;AAC9C,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,QAAQ,IAAI,UAAU,QAAQ,KAAK,KAAU,CAAC;AACnF;AAEO,SAAS,gBAAgB,MAA4B,MAAM,oBAAI,KAAK,GAAsB;AAC/F,QAAM,OAAO,cAAc,MAAM,GAAG;AACpC,MAAI,QAAQ,GAAI,QAAO;AACvB,MAAI,QAAQ,GAAI,QAAO;AACvB,MAAI,QAAQ,GAAI,QAAO;AACvB,SAAO;AACT;AAEO,SAAS,0BAA0B,OAA+B,MAAM,oBAAI,KAAK,GAA4B;AAClH,QAAM,QAA2B;AAAA,IAC/B,EAAE,IAAI,WAAW,OAAO,kBAAa,OAAO,GAAG,SAAS,EAAE;AAAA,IAC1D,EAAE,IAAI,SAAS,OAAO,mBAAc,OAAO,GAAG,SAAS,EAAE;AAAA,IACzD,EAAE,IAAI,SAAS,OAAO,mBAAc,OAAO,GAAG,SAAS,EAAE;AAAA,IACzD,EAAE,IAAI,OAAO,OAAO,YAAY,OAAO,GAAG,SAAS,EAAE;AAAA,EACvD;AACA,MAAI,cAAc;AAAG,MAAI,YAAY;AAAG,MAAI,cAAc;AAAG,MAAI,YAAY;AAC7E,aAAW,QAAQ,OAAO;AACxB,mBAAe,OAAO,KAAK,eAAe,CAAC;AAAG,iBAAa,OAAO,KAAK,aAAa,CAAC;AAAG,mBAAe,OAAO,KAAK,cAAc,CAAC;AAClI,QAAI,CAAC,eAAe,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,KAAK,aAAa,GAAG;AACxE,mBAAa;AAAG,YAAM,SAAS,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,gBAAgB,MAAM,GAAG,CAAC;AAC1F,aAAO,SAAS;AAAG,aAAO,WAAW,OAAO,KAAK,cAAc,CAAC;AAAA,IAClE;AAAA,EACF;AACA,SAAO,EAAE,aAAa,WAAW,aAAa,WAAW,OAAO,MAAM,QAAQ,MAAM;AACtF;AAEA,SAAS,MAAM,EAAE,YAAY,YAAY,IAAI,OAAO,SAAS,GAAkE;AAC7H,SAAO,gBAAAF,MAAC,SAAI,WAAW,UAAU,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,wBAAwB,UAAU,GAAG,GAAG,MAAM,GAAG;AAAA,oBAAAD,KAAC,WAAO,UAAAE,MAAI;AAAA,IAAS;AAAA,KAAS;AAClJ;AAEA,SAAS,aAAa,EAAE,KAAK,GAAiD;AAC5E,QAAM,QAAQ,KAAK,cAAc,OAAO,KAAK,cAAc,SAAS,SAAS,KAAK,UAAU;AAC5F,QAAM,UAAU,gBAAAD,MAAAF,WAAA,EAAE;AAAA,oBAAAC,KAAC,UAAK,WAAU,kBAAkB,iBAAM;AAAA,IAAO,gBAAAA,KAAC,UAAK,WAAU,oBAAoB,WAAC,KAAK,aAAa,KAAK,cAAc,SAAS,KAAK,WAAW,KAAK,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK,GAAE;AAAA,KAAO;AAClN,SAAO,KAAK,OAAO,gBAAAA,KAAC,OAAE,MAAM,KAAK,MAAM,WAAU,kBAAkB,mBAAQ,IAAO,gBAAAA,KAAAD,WAAA,EAAG,mBAAQ;AAC/F;AAEA,SAAS,gBAAgB,EAAE,OAAO,cAAc,aAAa,gCAAgC,GAAgC;AAC3H,MAAI,CAAC,MAAM,OAAQ,QAAO,gBAAAC,KAAC,SAAI,WAAU,4BAA4B,sBAAW;AAChF,SAAO,gBAAAC,MAAC,SAAI,WAAU,eACpB;AAAA,oBAAAD,KAAC,SAAI,WAAU,qBAAoB,0BAAAC,MAAC,WAAM,WAAU,gBAAe;AAAA,sBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,wBAAAD,KAAC,QAAG,kBAAI;AAAA,QAAK,gBAAAA,KAAC,QAAG,mBAAK;AAAA,QAAK,gBAAAA,KAAC,QAAG,oBAAM;AAAA,QAAK,gBAAAA,KAAC,QAAG,iBAAG;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,oBAAM;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,kBAAI;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,qBAAO;AAAA,SAAK,GAAK;AAAA,MAAQ,gBAAAA,KAAC,WACtQ,gBAAM,IAAI,CAAC,SAAS,gBAAAC,MAAC,QAAiB,kBAAgB,QAAQ,YAAY,GAAG,SAAS,MAAM,eAAe,IAAI,GAAG;AAAA,wBAAAD,KAAC,QAAG,0BAAAA,KAAC,gBAAa,MAAY,GAAE;AAAA,QAAK,gBAAAA,KAAC,QAAI,eAAK,aAAa,UAAI;AAAA,QAAK,gBAAAA,KAAC,QAAG,0BAAAA,KAAC,UAAK,WAAU,gBAAgB,qBAAW,KAAK,KAAK,GAAE,GAAO;AAAA,QAAK,gBAAAC,MAAC,QAAI;AAAA,wBAAc,IAAI;AAAA,UAAE;AAAA,WAAK;AAAA,QAAK,gBAAAD,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,KAAK,WAAW,GAAE;AAAA,QAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,KAAK,SAAS,GAAE;AAAA,QAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAe,0BAAAA,KAAC,YAAQ,UAAAG,OAAM,KAAK,UAAU,GAAE,GAAS;AAAA,WAA9b,KAAK,EAA8b,CAAK,GACxe;AAAA,OAAQ,GAAQ;AAAA,IAChB,gBAAAH,KAAC,SAAI,WAAU,sBAAsB,gBAAM,IAAI,CAAC,SAAS,gBAAAC,MAAC,aAAQ,WAAU,sBAAmC,SAAS,MAAM,eAAe,IAAI,GAAG;AAAA,sBAAAA,MAAC,SAAI,WAAU,qBAAoB;AAAA,wBAAAD,KAAC,SAAI,0BAAAA,KAAC,gBAAa,MAAY,GAAE;AAAA,QAAM,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,qBAAW,KAAK,KAAK,GAAE;AAAA,SAAO;AAAA,MAAM,gBAAAC,MAAC,SAAI,WAAU,uBAAsB;AAAA,wBAAAA,MAAC,UAAK;AAAA,0BAAAD,KAAC,WAAM,iBAAG;AAAA,UAAS,cAAc,IAAI;AAAA,UAAE;AAAA,WAAK;AAAA,QAAO,gBAAAC,MAAC,UAAK;AAAA,0BAAAD,KAAC,WAAM,kBAAI;AAAA,UAASG,OAAM,KAAK,SAAS;AAAA,WAAE;AAAA,QAAO,gBAAAF,MAAC,UAAK;AAAA,0BAAAD,KAAC,WAAM,qBAAO;AAAA,UAAQ,gBAAAA,KAAC,YAAQ,UAAAG,OAAM,KAAK,UAAU,GAAE;AAAA,WAAS;AAAA,SAAO;AAAA,SAA7Z,KAAK,EAA8Z,CAAU,GAAE;AAAA,KACvhB;AACF;AAEO,SAAS,SAAS,OAAoC;AAC3D,QAAM,aAAa;AAAA,IACjB,GAAI,MAAM,eAAe,SAAY,CAAC,IAAI,EAAE,YAAY,MAAM,WAAW;AAAA,IACzE,GAAI,MAAM,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;AAAA,IACtE,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,EAC5D;AACA,SAAO,gBAAAH,KAAC,SAAO,GAAG,YAAY,0BAAAA,KAAC,mBAAiB,GAAG,OAAO,GAAE;AAC9D;AAEA,SAAS,aAAa,EAAE,OAAO,UAAU,sBAAsB,GAAmE;AAChI,QAAM,UAAUI,SAAQ,MAAM,0BAA0B,KAAK,GAAG,CAAC,KAAK,CAAC;AACvE,SAAO,gBAAAH,MAAAF,WAAA,EAAE;AAAA,oBAAAC,KAAC,SAAI,WAAU,eAAc,0BAAAC,MAAC,SAAI;AAAA,sBAAAD,KAAC,QAAI,mBAAQ;AAAA,MAAK,gBAAAA,KAAC,OAAE,WAAU,eAAc,qDAAuC;AAAA,OAAI,GAAM;AAAA,IAAM,gBAAAC,MAAC,SAAI,WAAU,8BAA6B;AAAA,sBAAAA,MAAC,SAAI,WAAU,eAAc;AAAA,wBAAAD,KAAC,UAAK,WAAU,gBAAe,yBAAW;AAAA,QAAO,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,UAAAG,OAAM,QAAQ,WAAW,GAAE;AAAA,SAAO;AAAA,MAAM,gBAAAF,MAAC,SAAI,WAAU,eAAc;AAAA,wBAAAD,KAAC,UAAK,WAAU,gBAAe,wBAAU;AAAA,QAAO,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,kBAAQ,WAAU;AAAA,SAAO;AAAA,MAAM,gBAAAC,MAAC,SAAI,WAAU,eAAc;AAAA,wBAAAD,KAAC,UAAK,WAAU,gBAAe,uBAAS;AAAA,QAAO,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,UAAAG,OAAM,QAAQ,SAAS,GAAE;AAAA,SAAO;AAAA,MAAM,gBAAAF,MAAC,SAAI,WAAU,eAAc;AAAA,wBAAAD,KAAC,UAAK,WAAU,gBAAe,0BAAY;AAAA,QAAO,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,UAAAG,OAAM,QAAQ,WAAW,GAAE;AAAA,SAAO;AAAA,OAAM;AAAA,IAAM,gBAAAH,KAAC,SAAI,WAAU,4BAA4B,kBAAQ,MAAM,IAAI,CAAC,WAAW,gBAAAC,MAAC,SAAI,WAAU,qBAAoC;AAAA,sBAAAD,KAAC,UAAK,WAAU,gBAAgB,iBAAO,OAAM;AAAA,MAAO,gBAAAA,KAAC,YAAQ,UAAAG,OAAM,OAAO,OAAO,GAAE;AAAA,MAAS,gBAAAF,MAAC,UAAM;AAAA,eAAO;AAAA,QAAM;AAAA,QAAM,OAAO,UAAU,IAAI,KAAK;AAAA,SAAI;AAAA,SAA/J,OAAO,EAA+J,CAAM,GAAE;AAAA,KAAM;AACnjC;AAEO,SAAS,iBAAiB,OAA4C;AAC3E,QAAM,aAAa;AAAA,IACjB,GAAI,MAAM,eAAe,SAAY,CAAC,IAAI,EAAE,YAAY,MAAM,WAAW;AAAA,IACzE,GAAI,MAAM,cAAc,SAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;AAAA,IACtE,GAAI,MAAM,UAAU,SAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,EAC5D;AACA,SAAO,gBAAAD,KAAC,SAAO,GAAG,YAAY,0BAAAA,KAAC,gBAAa,OAAO,MAAM,OAAQ,GAAI,MAAM,YAAY,SAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ,GAAI,GAAE;AACzI;AAEO,SAAS,iBAAiB,EAAE,OAAO,UAAU,WAAW,cAAc,8DAA8D,cAAc,gBAAgB,IAAI,eAAe,OAAO,cAAc,OAAO,YAAY,WAAW,MAAM,GAAwC;AAC3R,QAAM,CAAC,QAAQ,SAAS,IAAIK,UAAS,aAAa;AAAG,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,YAAY;AACpG,QAAM,SAASD,SAAQ,MAAM,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AACtH,QAAM,WAAWA,SAAQ,MAAM;AAAE,UAAM,QAAQ,OAAO,KAAK,EAAE,YAAY;AAAG,WAAO,MAAM,OAAO,CAAC,UAAU,UAAU,SAAS,KAAK,UAAU,WAAW,CAAC,SAAS,CAAC,KAAK,YAAY,KAAK,YAAY,KAAK,aAAa,KAAK,aAAa,KAAK,WAAW,KAAK,aAAa,EAAE,KAAK,CAAC,UAAU,OAAO,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,KAAK,CAAC,EAAE;AAAA,EAAG,GAAG,CAAC,OAAO,QAAQ,KAAK,CAAC;AAC5W,QAAM,aAAa;AAAA,IACjB,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,IACjD,GAAI,cAAc,SAAY,CAAC,IAAI,EAAE,UAAU;AAAA,IAC/C,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,EACzC;AACA,QAAM,YAAY,EAAE,OAAO,UAAU,GAAI,iBAAiB,SAAY,CAAC,IAAI,EAAE,aAAa,EAAG;AAC7F,SAAO,gBAAAH,MAAC,SAAO,GAAG,YAAY;AAAA,oBAAAD,KAAC,SAAI,WAAU,eAAc,0BAAAC,MAAC,SAAI;AAAA,sBAAAD,KAAC,QAAI,mBAAQ;AAAA,MAAK,gBAAAA,KAAC,OAAE,WAAU,eAAe,uBAAY;AAAA,OAAI,GAAM;AAAA,IAAM,gBAAAA,KAAC,gBAAa,OAAO,UAAU,SAAQ,eAAc;AAAA,IAAG,cAAc,OAAO,gBAAAC,MAAC,SAAI,WAAU,kBAAiB;AAAA,sBAAAD,KAAC,WAAM,WAAU,kBAAiB,MAAK,UAAS,OAAO,QAAQ,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,KAAK,GAAG,aAAY,+CAAyC,cAAW,gBAAe;AAAA,MAAE,gBAAAC,MAAC,YAAO,WAAU,kBAAiB,OAAO,OAAO,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK,GAAG,cAAW,0BAAyB;AAAA,wBAAAD,KAAC,YAAO,OAAM,OAAM,0BAAY;AAAA,QAAU,OAAO,IAAI,CAAC,SAAS,gBAAAA,KAAC,YAAO,OAAO,MAAkB,qBAAW,IAAI,KAAtB,IAAwB,CAAS;AAAA,SAAE;AAAA,OAAS;AAAA,IAAO,gBAAAA,KAAC,mBAAiB,GAAG,WAAW;AAAA,KAAE;AACnvB;AAEO,SAAS,uBAAuB,OAA+B,UAAkC,UAA8B;AACpI,QAAM,OAAO,oBAAI,IAA8B;AAC/C,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,YAAY,UAAU,KAAK,aAAa,qBAAqB,YAAY,UAAU,gBAAgB,IAAI,IAAI,KAAK;AAC5H,UAAM,QAAQ,YAAY,WAAW,WAAW,GAAG,IAAI,YAAY,UAAW,EAAE,SAAS,kBAAa,SAAS,mBAAc,SAAS,mBAAc,OAAO,WAAW,EAA6B,GAAG,KAAK,MAAM;AACjN,UAAM,MAAM,KAAK,IAAI,GAAG,KAAK,EAAE,KAAK,OAAO,WAAW,GAAG,aAAa,GAAG,WAAW,GAAG,YAAY,EAAE;AACrG,QAAI,aAAa;AAAG,QAAI,eAAe,OAAO,KAAK,eAAe,CAAC;AAAG,QAAI,aAAa,OAAO,KAAK,aAAa,CAAC;AAAG,QAAI,cAAc,OAAO,KAAK,cAAc,CAAC;AAAG,SAAK,IAAI,KAAK,GAAG;AAAA,EACvL;AACA,SAAO,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,cAAc,EAAE,OAAO,QAAW,EAAE,SAAS,KAAK,CAAC,CAAC;AACvG;AAEO,SAAS,sBAAsB,OAA+B,UAAkC,UAAkB;AACvH,QAAM,SAAS,CAAC,UAA2B,IAAI,OAAO,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAClF,SAAO,CAAC,CAAC,SAAS,SAAS,gBAAgB,cAAc,aAAa,EAAE,IAAI,MAAM,EAAE,KAAK,GAAG,GAAG,GAAG,uBAAuB,OAAO,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,WAAW,IAAI,YAAY,QAAQ,CAAC,GAAG,IAAI,UAAU,QAAQ,CAAC,GAAG,IAAI,WAAW,QAAQ,CAAC,CAAC,EAAE,IAAI,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI;AACrS;AAEO,SAAS,cAAc,EAAE,OAAO,UAAU,UAAU,UAAU,kBAAkB,cAAc,yCAAyC,YAAY,WAAW,MAAM,GAAqC;AAC9M,QAAM,OAAOI,SAAQ,MAAM,uBAAuB,OAAO,OAAO,GAAG,CAAC,OAAO,OAAO,CAAC;AAAG,QAAM,QAAQA,SAAQ,MAAM,0BAA0B,KAAK,GAAG,CAAC,KAAK,CAAC;AAC3J,QAAM,aAAa;AAAA,IACjB,GAAI,eAAe,SAAY,CAAC,IAAI,EAAE,WAAW;AAAA,IACjD,WAAW,iBAAiB,aAAa,EAAE,GAAG,KAAK;AAAA,IACnD,GAAI,UAAU,SAAY,CAAC,IAAI,EAAE,MAAM;AAAA,EACzC;AACA,SAAO,gBAAAJ,KAAC,SAAO,GAAG,YAAY,0BAAAC,MAAC,SAAI,WAAU,eAAc;AAAA,oBAAAA,MAAC,SAAI,WAAU,sBAAqB;AAAA,sBAAAA,MAAC,SAAI;AAAA,wBAAAD,KAAC,QAAI,mBAAQ;AAAA,QAAK,gBAAAA,KAAC,OAAE,WAAU,eAAe,uBAAY;AAAA,SAAI;AAAA,MAAM,gBAAAC,MAAC,UAAK,WAAU,gBAAe;AAAA;AAAA,QAAI;AAAA,SAAQ;AAAA,OAAO;AAAA,IAAM,gBAAAD,KAAC,SAAI,WAAU,qBAAoB,0BAAAC,MAAC,WAAM,WAAU,gBAAe;AAAA,sBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,wBAAAD,KAAC,QAAG,mBAAK;AAAA,QAAK,gBAAAA,KAAC,QAAG,mBAAK;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,oBAAM;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,kBAAI;AAAA,QAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAe,qBAAO;AAAA,SAAK,GAAK;AAAA,MAAQ,gBAAAC,MAAC,WAAO;AAAA,aAAK,IAAI,CAAC,QAAQ,gBAAAA,MAAC,QAAiB;AAAA,0BAAAD,KAAC,QAAG,0BAAAA,KAAC,YAAQ,cAAI,OAAM,GAAS;AAAA,UAAK,gBAAAA,KAAC,QAAI,cAAI,WAAU;AAAA,UAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,IAAI,WAAW,GAAE;AAAA,UAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,IAAI,SAAS,GAAE;AAAA,UAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,IAAI,UAAU,GAAE;AAAA,aAA5O,IAAI,GAA6O,CAAK;AAAA,QAAE,gBAAAF,MAAC,QAAG,WAAU,uBAAsB;AAAA,0BAAAD,KAAC,QAAG,mBAAK;AAAA,UAAK,gBAAAA,KAAC,QAAI,gBAAM,OAAM;AAAA,UAAK,gBAAAA,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,MAAM,WAAW,GAAE;AAAA,UAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,MAAM,SAAS,GAAE;AAAA,UAAK,gBAAAH,KAAC,QAAG,WAAU,gBAAgB,UAAAG,OAAM,MAAM,WAAW,GAAE;AAAA,WAAK;AAAA,SAAK;AAAA,OAAQ,GAAQ;AAAA,KAAM,GAAM;AACtgC;;;ACjNA,SAAS,WAAAG,gBAAe;AAkJlB,SAQE,OAAAC,MARF,QAAAC,aAAA;AA1GC,IAAM,4BAAwE;AAAA,EACnF,EAAE,IAAI,WAAW,OAAO,iBAAY;AAAA,EACpC,EAAE,IAAI,SAAS,OAAO,kBAAa;AAAA,EACnC,EAAE,IAAI,SAAS,OAAO,kBAAa;AAAA,EACnC,EAAE,IAAI,OAAO,OAAO,WAAW;AACjC;AAEA,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAMC,SAAQ,CAAC,UAAkB,OAAO,SAAS,CAAC,EAAE,eAAe,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC;AACpH,IAAMC,cAAa,CAAC,UAAkB,MAAM,WAAW,KAAK,GAAG,EAAE,QAAQ,SAAS,CAAC,WAAW,OAAO,YAAY,CAAC;AAElH,IAAM,YAAY,CAAC,OAAe,YAA8D,EAAE,OAAO,QAAQ,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,EAAE;AAE1I,SAAS,2BACd,OACA,aAAuB,qBACvB,MAAM,oBAAI,KAAK,GACY;AAC3B,QAAM,aAAa,IAAI,IAAI,WAAW,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC;AACzF,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAC1E,UAAM,OAAO,WAAW,IAAI,EAAE,YAAY,CAAC,KAAK,WAAW;AAC3D,UAAM,QAAQ,WAAW,IAAI,EAAE,YAAY,CAAC,KAAK,WAAW;AAC5D,WAAO,OAAO,SAAS,EAAE,cAAc,CAAC;AAAA,EAC1C,CAAC;AACD,QAAM,eAAe,0BAA0B,IAAI,CAAC,WAAW,UAAU,OAAO,OAAO,EAAE,CAAC;AAC1F,QAAM,aAAa,UAAU,OAAO,OAAO;AAC3C,QAAM,OAAO,OAAO,IAAI,CAAC,UAAU;AACjC,UAAM,QAAQ,0BAA0B,IAAI,CAAC,WAAW,UAAU,OAAO,OAAO,EAAE,CAAC;AACnF,UAAM,QAAQ,UAAU,OAAO,OAAO;AACtC,WAAO,EAAE,OAAO,OAAOA,YAAW,KAAK,GAAG,OAAO,MAAM;AAAA,EACzD,CAAC;AACD,QAAM,aAAa,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AAC9D,aAAW,QAAQ,OAAO;AACxB,UAAM,MAAM,WAAW,IAAI,KAAK,KAAK;AACrC,UAAM,cAAc,0BAA0B,UAAU,CAAC,WAAW,OAAO,OAAO,gBAAgB,MAAM,GAAG,CAAC;AAC5G,UAAM,UAAU,OAAO,KAAK,cAAc,CAAC;AAC3C,eAAW,QAAQ,CAAC,IAAI,MAAM,WAAW,GAAI,IAAI,OAAO,aAAa,WAAW,GAAI,UAAU,GAAG;AAC/F,WAAK,SAAS;AACd,WAAK,WAAW;AAChB,WAAK,MAAM,KAAK,IAAI;AAAA,IACtB;AAAA,EACF;AACA,SAAO,EAAE,MAAM,cAAc,WAAW;AAC1C;AAEO,SAAS,wBAAwB,OAA+B,YAA+B;AACpG,QAAM,SAAS,2BAA2B,OAAO,UAAU;AAC3D,QAAM,SAAS,CAAC,UAA2B,IAAI,OAAO,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAClF,QAAM,SAAS,CAAC,UAAU,GAAG,0BAA0B,IAAI,CAAC,WAAW,OAAO,KAAK,GAAG,OAAO;AAC7F,QAAM,QAAQ,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO,GAAG,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,IAAI,MAAM,KAAK,CAAC;AAC3G,QAAM,KAAK,CAAC,SAAS,GAAG,OAAO,aAAa,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO,WAAW,KAAK,CAAC;AAC/F,SAAO,CAAC,QAAQ,GAAG,KAAK,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI;AAC/E;AAEA,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBL,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAA6C;AAC3C,QAAM,SAASC,SAAQ,MAAM,2BAA2B,OAAO,UAAU,GAAG,CAAC,OAAO,UAAU,CAAC;AAC/F,QAAM,YAAY,QAAQ,YAAY;AACtC,QAAM,OAAO,CAAC,MAA2B,KAAa,UAAU,UAC9D,gBAAAL,KAAC,QAAa,WAAW,UAAU,kBAAkB,QACnD,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,kBAAgB,aAAa,KAAK,QAAQ;AAAA,MAC1C,SAAS,MAAM,KAAK,QAAQ,KAAK,eAAe,IAAI;AAAA,MACpD,UAAU,CAAC,aAAa,KAAK,UAAU;AAAA,MACvC,cAAY,GAAGE,YAAW,KAAK,KAAK,CAAC,SAAM,KAAK,WAAW,UAAU,aAAa,KAAK,MAAM,KAAK,KAAK,KAAK;AAAA,MAE5G;AAAA,wBAAAH,KAAC,UAAK,WAAW,cAAc,KAAK,UAAU,IAAI,cAAc,EAAE,GAAG,KAAK,GAAI,eAAK,UAAU,IAAI,WAAM,KAAK,OAAM;AAAA,QACjH,gBAAgB,KAAK,QAAQ,IAAI,gBAAAA,KAAC,UAAK,WAAU,gBAAgB,UAAAE,OAAM,KAAK,OAAO,GAAE,IAAU;AAAA;AAAA;AAAA,EAClG,KAXO,GAYT;AAEF,SACE,gBAAAD,MAAC,SAAI,WAAW,QAAQ,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,wBAAwB,UAAU,GAAG,GAAG,MAAM,GACpG;AAAA,oBAAAD,KAAC,WAAO,UAAAI,MAAI;AAAA,IACZ,gBAAAJ,KAAC,SAAI,WAAU,aAAY,0BAAAC,MAAC,SAAI;AAAA,sBAAAD,KAAC,QAAI,mBAAQ;AAAA,MAAK,gBAAAA,KAAC,OAAE,WAAU,aAAa,uBAAY;AAAA,OAAI,GAAM;AAAA,IAClG,gBAAAA,KAAC,SAAI,WAAU,aACb,0BAAAC,MAAC,WAAM,WAAU,cACf;AAAA,sBAAAD,KAAC,WAAM,0BAAAC,MAAC,QAAG;AAAA,wBAAAD,KAAC,QAAG,oBAAM;AAAA,QAAM,0BAA0B,IAAI,CAAC,WAAW,gBAAAA,KAAC,QAAoB,iBAAO,SAAnB,OAAO,EAAkB,CAAK;AAAA,QAAE,gBAAAA,KAAC,QAAG,mBAAK;AAAA,SAAK,GAAK;AAAA,MACjI,gBAAAC,MAAC,WACE;AAAA,eAAO,KAAK,IAAI,CAAC,QAChB,gBAAAA,MAAC,QACC;AAAA,0BAAAD,KAAC,QAAG,0BAAAA,KAAC,UAAK,WAAU,cAAc,cAAI,OAAM,GAAO;AAAA,UAClD,IAAI,MAAM,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,IAAI,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC;AAAA,UACjE,KAAK,IAAI,OAAO,GAAG,IAAI,KAAK,UAAU,IAAI;AAAA,aAHpC,IAAI,KAIb,CACD;AAAA,QACD,gBAAAC,MAAC,QAAG,WAAU,cACZ;AAAA,0BAAAD,KAAC,QAAG,mBAAK;AAAA,UACR,OAAO,aAAa,IAAI,CAAC,SAAS,KAAK,MAAM,OAAO,KAAK,MAAM,EAAE,CAAC;AAAA,UAClE,KAAK,OAAO,YAAY,aAAa,IAAI;AAAA,WAC5C;AAAA,SACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;ACjLA;AAAA,EACE;AAAA,OAKK;AAIP;AAAA,EACE,4BAAAM;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA4FC,SAsFA,YAAAC,WAtFA,OAAAC,MAoBJ,QAAAC,aApBI;AArDR,IAAM,QAA2D;AAAA,EAC/D,QAAQ;AAAA,EACR,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,oBAAoB,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;AAEhF,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCZ,SAAS,WACP,KACA,OACA,WACA,OACA,UACc;AACd,MAAI,QAAQ,KAAK,UAAU;AACzB,WACE,gBAAAF,KAAC,UAAe,WACd,0BAAAA,KAAC,YAAO,MAAK,UAAS,WAAU,aAAY,cAAY,OAAO,SAAS,UAAW,iBAAM,KADhF,GAEX;AAAA,EAEJ;AACA,SAAO,gBAAAA,KAAC,UAAe,WAAW,GAAG,SAAS,GAAG,UAAU,IAAI,eAAe,EAAE,IAAK,mBAAnE,GAAyE;AAC7F;AAEA,SAAS,QAAQ;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKiB;AACf,QAAM,UAAU,IAAI,KAAK,KAAK;AAC9B,SACE,gBAAAC,MAAC,SAAI,WAAU,sBACb;AAAA,oBAAAD,KAAC,UAAK,WAAU,iBAAiB,cAAI,OAAM;AAAA,IAC1C,QAAQ,IAAI,CAAC,QAAQ,UAAU;AAC9B,YAAM,QAAQ,IAAI,OAAO,KAAK,KAAK;AACnC,aAAO;AAAA,QACL,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,GAAG,IAAI,KAAK,SAAM,OAAO,KAAK,KAAK,KAAK;AAAA,QACxC,eACI,MAAM,aAAa,EAAE,WAAW,OAAO,IAAI,IAAI,UAAU,OAAO,IAAI,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,MAAM,CAAC,IACxG;AAAA,MACN;AAAA,IACF,CAAC;AAAA,IACA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,MACA,GAAG,IAAI,KAAK,mBAAgB,IAAI,KAAK;AAAA,MACrC,eACI,MAAM,aAAa,EAAE,WAAW,OAAO,IAAI,IAAI,UAAU,MAAM,MAAM,SAAS,OAAO,IAAI,MAAM,CAAC,IAChG;AAAA,IACN;AAAA,KACF;AAEJ;AAEA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKiB;AACf,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,eAAe,MAAM,QAAQ,IAAI,EAAE;AAAA,MAC5C,cAAY,QAAQ;AAAA,MAEpB;AAAA,wBAAAA,MAAC,SAAI,WAAU,uBACb;AAAA,0BAAAA,MAAC,UAAK,WAAU,cACd;AAAA,4BAAAD,KAAC,OAAE,WAAU,YAAW,eAAY,QAAO;AAAA,YAC3C,gBAAAC,MAAC,UAAK,WAAU,mBACd;AAAA,8BAAAD,KAAC,YAAQ,kBAAQ,OAAM;AAAA,cACvB,gBAAAC,MAAC,UAAK,WAAU,cAAa;AAAA;AAAA,gBAAI,QAAQ;AAAA,iBAAgB;AAAA,eAC3D;AAAA,aACF;AAAA,UACC,QAAQ,IAAI,CAAC,QAAQ,UACpB,gBAAAD;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,OAAO,EAAE,eAAe,kBAAkB,QAAQ,kBAAkB,MAAM,EAAE;AAAA,cAE3E,iBAAO;AAAA;AAAA,YAJH,OAAO;AAAA,UAKd,CACD;AAAA,UACD,gBAAAA,KAAC,UAAK,WAAU,gBAAe,wBAAU;AAAA,WAC3C;AAAA,QACC,QAAQ,QACP,gBAAAA,KAAC,OAAE,WAAU,cAAc,sBAAW,IAEtC,gBAAAC,MAAAF,WAAA,EACG;AAAA,kBAAQ,KAAK,IAAI,CAAC,QACjB,gBAAAC,KAAC,WAAqB,WAAW,QAAQ,IAAI,KAAU,SAAkB,gBAA3D,IAAI,EAAmF,CACtG;AAAA,UACD,gBAAAC,MAAC,SAAI,WAAU,kCACb;AAAA,4BAAAD,KAAC,UAAK,WAAU,iBAAgB,mBAAK;AAAA,YACpC,QAAQ,IAAI,CAAC,QAAQ,UACpB,gBAAAA,KAAC,UAAqB,WAAU,cAAc,kBAAQ,OAAO,KAAK,KAAK,KAA5D,OAAO,EAAuD,CAC1E;AAAA,YACD,gBAAAA,KAAC,UAAK,WAAU,cAAc,kBAAQ,OAAM;AAAA,aAC9C;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAA0C;AACxC,QAAM,UAAU,8BAA8B,QAAQ,MAAM;AAC5D,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,QAAQ,SAAS,GAAG,KAAK;AAAA,MACpC,OAAO,EAAE,GAAG,wBAAwB,UAAU,GAAG,eAAe,SAAS,GAAG,MAAM;AAAA,MAElF;AAAA,wBAAAD,KAAC,WAAO,UAAAE,MAAI;AAAA,QACX,UAAU,gBAAAF,KAAC,SAAI,WAAU,gBAAgB,iBAAO,YAAY,WAAW,gBAAAA,KAAC,QAAI,mBAAQ,IAAQ,SAAQ,IAAS;AAAA,QAC7G,UAAU,gBAAAA,KAAC,SAAI,WAAU,gBAAgB,mBAAQ,IAAS;AAAA,QAC1D,KAAK,SAAS,IAAI,CAAC,YAClB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,UAJK,QAAQ;AAAA,QAKf,CACD;AAAA,QACD,gBAAAA,KAAC,aAAQ,WAAU,yBAAwB,cAAY,iBACrD,0BAAAC,MAAC,SAAI,WAAU,6CACb;AAAA,0BAAAD,KAAC,UAAK,WAAU,iBAAiB,2BAAgB;AAAA,UAChD,QAAQ,IAAI,CAAC,QAAQ,UACpB,gBAAAA,KAAC,UAAqB,WAAU,cAAc,eAAK,YAAY,KAAK,KAAK,KAA9D,OAAO,EAAyD,CAC5E;AAAA,UACD,gBAAAA,KAAC,UAAK,WAAU,cAAc,eAAK,YAAW;AAAA,WAChD,GACF;AAAA,QACC,WAAW,gBAAAA,KAAC,OAAE,WAAU,iBAAiB,oBAAS,IAAO;AAAA;AAAA;AAAA,EAC5D;AAEJ;;;ACvKM,SAGI,YAAAG,WAHJ,OAAAC,MAIM,QAAAC,aAJN;AAzDC,SAAS,mCAAmC,SAAyB;AAC1E,MAAI,uBAAuB,KAAK,OAAO,EAAG,QAAO;AACjD,MAAI,SAAS,KAAK,OAAO,EAAG,QAAO;AACnC,MAAI,WAAW,KAAK,OAAO,EAAG,QAAO;AACrC,MAAI,UAAU,KAAK,OAAO,EAAG,QAAO;AACpC,SAAO;AACT;AAEA,SAAS,WAAW,KAAqB;AACvC,QAAM,SAAS,IAAI,KAAK,GAAG;AAC3B,MAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAG,QAAO;AAC3C,SAAO,IAAI,KAAK,eAAe,SAAS,EAAE,OAAO,WAAW,KAAK,WAAW,MAAM,UAAU,CAAC,EAAE,OAAO,MAAM;AAC9G;AAGO,SAAS,iCAAiC,SAAyD;AACxG,SAAO,QACJ,OAAO,CAAC,UAAU,MAAM,SAAS,YAAY,EAC7C,IAAI,CAAC,WAAW;AAAA,IACf,IAAI,MAAM;AAAA,IACV,OAAO,MAAM;AAAA,IACb,MAAM;AAAA,MACJ,EAAE,OAAO,YAAY,OAAO,mCAAmC,MAAM,OAAO,EAAE;AAAA,MAC9E,EAAE,OAAO,QAAQ,OAAO,WAAW,MAAM,IAAI,EAAE;AAAA,IACjD;AAAA,EACF,EAAE;AACN;AAEA,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeL,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAA6C;AAC3C,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,QAAQ,SAAS,GAAG,KAAK;AAAA,MACpC,OAAO,wBAAwB,YAAY,KAAK;AAAA,MAChD,MAAK;AAAA,MACL,cAAW;AAAA,MAEX;AAAA,wBAAAD,KAAC,WAAO,UAAAE,MAAI;AAAA,QACX,MAAM,IAAI,CAAC,SAAS;AACnB,gBAAM,UACJ,gBAAAD,MAAAF,WAAA,EACE;AAAA,4BAAAE,MAAC,UAAK,WAAU,YACd;AAAA,8BAAAD,KAAC,UAAK,WAAU,cAAc,eAAK,OAAM;AAAA,cACxC,KAAK,QAAQ,gBAAAA,KAAC,UAAK,WAAU,cAAc,eAAK,OAAM,IAAU;AAAA,eACnE;AAAA,YACC,KAAK,MAAM,SACV,gBAAAA,KAAC,UAAK,WAAU,aACb,eAAK,KAAK,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAC1B,gBAAAC,MAAC,UAAsB;AAAA,8BAAAD,KAAC,OAAG,eAAK,OAAM;AAAA,cAAI,gBAAAA,KAAC,OAAG,eAAK,OAAM;AAAA,iBAA9C,KAAK,KAA6C,CAC9D,GACH,IACE;AAAA,aACN;AAEF,iBAAO,KAAK,OACV,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,WAAU;AAAA,cACV,eAAa,QAAQ,KAAK,MAAM;AAAA,cAChC,MAAM,KAAK;AAAA,cACX,MAAK;AAAA,cACL,SAAS,MAAM,WAAW,IAAI;AAAA,cAE7B;AAAA;AAAA,YAPI,KAAK;AAAA,UAQZ,IAEA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,eAAa,QAAQ,KAAK,MAAM;AAAA,cAChC,MAAK;AAAA,cACL,SAAS,MAAM,WAAW,IAAI;AAAA,cAE7B;AAAA;AAAA,YAPI,KAAK;AAAA,UAQZ;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,EACH;AAEJ;;;ACjIA,SAAS,aAAAG,YAAW,YAAAC,iBAAgB;AACpC;AAAA,EACE;AAAA,OAGK;AAMP,SAAS,8BAAAC,mCAAkC;AA+GvC,SACE,OAAAC,OADF,QAAAC,cAAA;AAtFJ,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsCL,SAAS,uBAAuB;AAAA,EACrC,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAA8C;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAoC,IAAI;AACpE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAS,EAAE;AACzC,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,EAAE;AAC/D,QAAM,CAAC,oBAAoB,qBAAqB,IAAIA,UAAS,EAAE;AAC/D,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,EAAE;AACrC,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,EAAE;AACrD,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAS,EAAE;AAGnC,EAAAC,WAAU,MAAM;AACd,UAAM,QAAQ,CAAC,UAAyB;AACtC,UAAI,MAAM,QAAQ,YAAY,CAAC,WAAY,UAAS;AAAA,IACtD;AACA,WAAO,iBAAiB,WAAW,KAAK;AACxC,WAAO,MAAM,OAAO,oBAAoB,WAAW,KAAK;AAAA,EAC1D,GAAG,CAAC,UAAU,UAAU,CAAC;AAEzB,QAAM,OAAO,MAAM;AACjB,QAAI,CAAC,OAAQ;AACb,WAAO;AAAA,MACL;AAAA,MACA,GAAI,QAAQ,KAAK,IAAI,EAAE,SAAS,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACpD,GAAI,mBAAmB,KAAK,IAAI,EAAE,oBAAoB,mBAAmB,KAAK,EAAE,IAAI,CAAC;AAAA,MACrF,GAAI,mBAAmB,KAAK,IAAI,EAAE,oBAAoB,mBAAmB,KAAK,EAAE,IAAI,CAAC;AAAA,MACrF,GAAI,MAAM,KAAK,IAAI,EAAE,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC;AAAA,MAC9C,GAAI,cAAc,KAAK,IAAI,EAAE,eAAe,cAAc,KAAK,EAAE,IAAI,CAAC;AAAA,MACtE,GAAI,KAAK,KAAK,IAAI,EAAE,MAAM,KAAK,KAAK,EAAE,IAAI,CAAC;AAAA,IAC7C,CAAC;AAAA,EACH;AAEA,QAAM,QAAQ,CACZ,OACA,OACA,aAEA,gBAAAH,OAAC,WAAM,WAAU,cACf;AAAA,oBAAAD,MAAC,UAAK,WAAU,cAAc,iBAAM;AAAA,IACpC,gBAAAA,MAAC,WAAM,WAAU,cAAa,OAAc,UAAU,YAAY,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK,GAAG;AAAA,OAFpF,KAGnC;AAGF,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,aAAa,CAAC,UAAU;AAAE,YAAI,MAAM,WAAW,MAAM,iBAAiB,CAAC,WAAY,UAAS;AAAA,MAAG;AAAA,MAE/F;AAAA,wBAAAD,MAAC,WAAO,UAAAE,MAAI;AAAA,QACZ,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,QAAQ,SAAS,GAAG,KAAK;AAAA,YACpC,OAAO,wBAAwB,YAAY,KAAK;AAAA,YAChD,MAAK;AAAA,YACL,cAAW;AAAA,YACX,cAAY,OAAO,UAAU,WAAW,QAAQ;AAAA,YAEhD;AAAA,8BAAAA,OAAC,SAAI,WAAU,aACb;AAAA,gCAAAD,MAAC,QAAG,WAAU,cAAc,iBAAM;AAAA,gBAClC,gBAAAA,MAAC,YAAO,WAAU,cAAa,MAAK,UAAS,cAAW,SAAQ,UAAU,YAAY,SAAS,UAAU,kBAAC;AAAA,iBAC5G;AAAA,cAEC,eAAe,aACd,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,gCAAAD,MAAC,QAAG,yDAA2C;AAAA,gBAC/C,gBAAAA,MAAC,OAAE,WAAU,aAAY,2EAA6D;AAAA,gBACtF,gBAAAC,OAAC,SAAI,WAAU,iBACZ;AAAA,gCACC,gBAAAA,OAAC,SAAI,WAAU,gBACb;AAAA,oCAAAD,MAAC,QAAG,0BAAY;AAAA,oBAChB,gBAAAC,OAAC,QACC;AAAA,sCAAAA,OAAC,SAAI;AAAA,wCAAAD,MAAC,QAAG,kBAAI;AAAA,wBAAK,gBAAAA,MAAC,QAAI,sBAAY,MAAK;AAAA,yBAAK;AAAA,sBAC5C,YAAY,mBAAmB,gBAAAC,OAAC,SAAI;AAAA,wCAAAD,MAAC,QAAG,gCAAkB;AAAA,wBAAK,gBAAAA,MAAC,QAAI,sBAAY,kBAAiB;AAAA,yBAAK,IAAS;AAAA,uBAC9G,YAAY,UAAU,CAAC,GAAG,IAAI,CAAC,UAC/B,gBAAAC,OAAC,SAA0C;AAAA,wCAAAD,MAAC,QAAI,gBAAM,OAAM;AAAA,wBAAK,gBAAAA,MAAC,QAAI,gBAAM,OAAM;AAAA,2BAAxE,GAAG,MAAM,KAAK,IAAI,MAAM,KAAK,EAAgD,CACxF;AAAA,uBACH;AAAA,qBACF,IACE;AAAA,kBACH,aACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,oCAAAD,MAAC,QAAG,yBAAW;AAAA,oBACf,gBAAAC,OAAC,QACC;AAAA,sCAAAA,OAAC,SAAI;AAAA,wCAAAD,MAAC,QAAG,kBAAI;AAAA,wBAAK,gBAAAA,MAAC,QAAI,qBAAW,MAAK;AAAA,yBAAK;AAAA,sBAC3C,WAAW,QAAQ,gBAAAC,OAAC,SAAI;AAAA,wCAAAD,MAAC,QAAG,mBAAK;AAAA,wBAAK,gBAAAA,MAAC,QAAI,qBAAW,OAAM;AAAA,yBAAK,IAAS;AAAA,uBAC7E;AAAA,qBACF,IACE;AAAA,mBACN;AAAA,iBACF,IACE;AAAA,cAEH,UACC,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,gCAAAD,MAAC,QAAG,+CAAiC;AAAA,gBACrC,gBAAAA,MAAC,OAAE,WAAU,aAAY,wGAA0F;AAAA,gBACnH,gBAAAA,MAAC,SAAI,WAAU,gBAAgB,mBAAQ;AAAA,iBACzC,IACE;AAAA,cAEJ,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,gCAAAD,MAAC,QAAG,2CAA6B;AAAA,gBACjC,gBAAAA,MAAC,OAAE,WAAU,aAAY,mFAAqE;AAAA,gBAC9F,gBAAAC,OAAC,SAAI,WAAU,eACb;AAAA,kCAAAD,MAAC,SAAI,WAAU,gBAAe,MAAK,cAAa,cAAW,gCACxD,qCAA2B,IAAI,CAAC,WAC/B,gBAAAC,OAAC,WAAsB,WAAU,eAAc,iBAAe,WAAW,OAAO,IAC9E;AAAA,oCAAAD;AAAA,sBAAC;AAAA;AAAA,wBACC,MAAK;AAAA,wBACL,MAAK;AAAA,wBACL,OAAO,OAAO;AAAA,wBACd,SAAS,WAAW,OAAO;AAAA,wBAC3B,UAAU;AAAA,wBACV,UAAU,MAAM,UAAU,OAAO,EAAE;AAAA;AAAA,oBACrC;AAAA,oBACA,gBAAAC,OAAC,UACC;AAAA,sCAAAD,MAAC,UAAK,WAAU,qBAAqB,iBAAO,OAAM;AAAA,sBAClD,gBAAAA,MAAC,UAAK,WAAU,oBAAoB,iBAAO,aAAY;AAAA,uBACzD;AAAA,uBAZU,OAAO,EAanB,CACD,GACH;AAAA,kBACA,gBAAAC,OAAC,SAAI,WAAU,eACZ;AAAA,0BAAM,WAAW,SAAS,UAAU;AAAA,oBACpC,MAAM,QAAQ,oBAAoB,qBAAqB;AAAA,oBACvD,MAAM,QAAQ,oBAAoB,qBAAqB;AAAA,oBACvD,MAAM,gBAAgB,OAAO,QAAQ;AAAA,oBACrC,MAAM,yBAAyB,eAAe,gBAAgB;AAAA,oBAC/D,gBAAAA,OAAC,WAAM,WAAU,cACf;AAAA,sCAAAD,MAAC,UAAK,WAAU,cAAa,0BAAY;AAAA,sBACzC,gBAAAA,MAAC,cAAS,WAAU,iBAAgB,OAAO,MAAM,UAAU,YAAY,UAAU,CAAC,UAAU,QAAQ,MAAM,OAAO,KAAK,GAAG;AAAA,uBAC3H;AAAA,qBACF;AAAA,mBACF;AAAA,iBACF;AAAA,cAEC,QAAQ,gBAAAA,MAAC,SAAI,WAAU,cAAa,MAAK,SAAS,iBAAM,IAAS;AAAA,cAElE,gBAAAC,OAAC,SAAI,WAAU,gBACb;AAAA,gCAAAD,MAAC,YAAO,WAAU,eAAc,MAAK,UAAS,UAAU,YAAY,SAAS,UAAU,oBAAM;AAAA,gBAC7F,gBAAAA,MAAC,YAAO,WAAU,aAAY,MAAK,UAAS,UAAU,cAAc,CAAC,QAAQ,SAAS,MACnF,uBAAa,iBAAY,QAC5B;AAAA,iBACF;AAAA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;;;AC9OA,SAAS,eAAAK,cAAa,aAAAC,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AAClE;AAAA,EACE;AAAA,OAMK;AAsLH,SAwFM,YAAAC,WAvFJ,OAAAC,OADF,QAAAC,cAAA;AA5JJ,IAAM,QAA8C;AAAA,EAClD,EAAE,IAAI,YAAY,OAAO,qBAAqB;AAAA,EAC9C,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,EACtC,EAAE,IAAI,MAAM,OAAO,MAAM;AAAA,EACzB,EAAE,IAAI,UAAU,OAAO,SAAS;AAClC;AAEA,IAAMC,OAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCZ,IAAM,gBAAgB,OAAkC,EAAE,MAAM,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,WAAW,MAAM;AAE/H,eAAe,aAAa,MAA6B;AACvD,QAAM,SAAS,IAAI,WAAW,MAAM,KAAK,YAAY,CAAC;AACtD,MAAI,SAAS;AACb,aAAW,QAAQ,OAAQ,WAAU,OAAO,aAAa,IAAI;AAC7D,SAAO,KAAK,MAAM;AACpB;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,GAA8C;AAC5C,QAAM,SAA6BC;AAAA,IACjC,MACE,yBAAyB;AAAA,MACvB;AAAA,MACA,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,MACnC,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,IACrC,CAAC;AAAA,IACH,CAAC,iBAAiB,YAAY,UAAU;AAAA,EAC1C;AAEA,QAAM,CAAC,SAAS,UAAU,IAAIC,UAAyC,IAAI;AAC3E,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAwB,IAAI;AAC9D,QAAM,CAAC,MAAM,OAAO,IAAIA,UAAiB,UAAU;AACnD,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,EAAE,MAAM,IAAI,WAAW,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,GAAG,CAAC;AAC9G,QAAM,CAAC,UAAU,WAAW,IAAIA,UAA2C,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,UAAU,gBAAgB,OAAO,IAAI,eAAe,IAAI,aAAa,IAAI,cAAc,IAAI,YAAY,GAAG,CAAC;AACtN,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAsC,CAAC,cAAc,CAAC,CAAC;AACzF,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAsB,IAAI;AACtD,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAS,KAAK;AAC1C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAwB,IAAI;AACtD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAkC,CAAC,CAAC;AACtE,QAAM,iBAAiBC,QAAO,KAAK;AAEnC,QAAM,eAAeC,aAAY,CAAC,SAAkC;AAClE,eAAW,IAAI;AACf,gBAAY,CAAC,aAAa;AAAA,MACxB,MAAM,KAAK,iBAAiB,QAAQ,QAAQ;AAAA,MAC5C,WAAW,KAAK,iBAAiB,aAAa,QAAQ;AAAA,MACtD,OAAO,KAAK,iBAAiB,SAAS,QAAQ;AAAA,MAC9C,KAAK,KAAK,iBAAiB,OAAO,QAAQ;AAAA,MAC1C,OAAO,KAAK,iBAAiB,SAAS,QAAQ;AAAA,MAC9C,OAAO,KAAK,iBAAiB,SAAS,QAAQ;AAAA,IAChD,EAAE;AACF,QAAI,KAAK,iBAAiB,CAAC,EAAG,aAAY,EAAE,UAAU,gBAAgB,GAAG,KAAK,iBAAiB,CAAC,EAAE,CAAC;AACnG,QAAI,KAAK,UAAU,OAAQ,cAAa,KAAK,UAAU,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,EAAE,CAAC;AACnF,QAAI,KAAK,WAAW,YAAY,CAAC,eAAe,SAAS;AACvD,qBAAe,UAAU;AACzB,oBAAc,IAAI;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,EAAAC,WAAU,MAAM;AACd,QAAI,QAAQ;AACZ,WAAO,gBAAgB,EACpB,KAAK,CAAC,SAAS;AAAE,UAAI,OAAO;AAAE,qBAAa,IAAI;AAAG,qBAAa,IAAI;AAAA,MAAG;AAAA,IAAE,CAAC,EACzE,MAAM,CAAC,WAAW;AACjB,UAAI,CAAC,MAAO;AACZ,YAAM,UAAU,kBAAkB,QAAQ,SAAS,IAAI,MAAM,uCAAuC;AACpG,mBAAa,QAAQ,OAAO;AAC5B,gBAAU,OAAO;AAAA,IACnB,CAAC;AACH,WAAO,MAAM;AAAE,cAAQ;AAAA,IAAO;AAAA,EAChC,GAAG,CAAC,QAAQ,cAAc,OAAO,CAAC;AAElC,QAAM,MAAM,OAAO,MAA8C,WAAmB;AAClF,cAAU,IAAI;AACd,aAAS,IAAI;AACb,QAAI;AACF,YAAM,OAAO,MAAM,KAAK;AACxB,mBAAa,IAAI;AACjB,mBAAa,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE;AAC1D,gBAAU,IAAI;AACd,UAAI,YAAY,cAAc;AAC5B,cAAM,QAAkB,CAAC,YAAY,aAAa,MAAM,QAAQ;AAChE,cAAM,WAAW,MAAM,MAAM,QAAQ,MAAM,IAAI,CAAC;AAChD,YAAI,SAAU,SAAQ,QAAQ;AAAA,MAChC;AAAA,IACF,SAAS,QAAQ;AACf,YAAM,UAAU,kBAAkB,QAAQ,SAAS,IAAI,MAAM,gBAAgB;AAC7E,eAAS,QAAQ,OAAO;AACxB,gBAAU,OAAO;AAAA,IACnB,UAAE;AACA,gBAAU,KAAK;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,eAAe,MACnB,IAAI,MACF,OAAO,mBAAmB;AAAA,IACxB,kBAAkB;AAAA,IAClB,GAAI,SAAS,KAAK,KAAK,KAAK,SAAS,MAAM,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC;AAAA,EACjH,CAAC,GAAG,UAAU;AAClB,QAAM,gBAAgB,MACpB,IAAI,MAAM,OAAO,cAAc,UAAU,OAAO,CAAC,SAAS,KAAK,KAAK,KAAK,KAAK,KAAK,OAAO,KAAK,CAAC,CAAC,GAAG,WAAW;AACjH,QAAM,SAAS,MACb,IAAI,YAAY;AACd,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,oCAAoC;AACjE,WAAO,OAAO,OAAO,EAAE,UAAU,OAAO,MAAM,eAAe,MAAM,aAAa,MAAM,EAAE,CAAC;AAAA,EAC3F,GAAG,IAAI;AAET,QAAM,QAAQ,CAAC,OAAe,OAAe,UAAmC,OAAO,OAAO,cAAc,OAC1G,gBAAAN,OAAC,WAAM,WAAW,aAAa,OAAO,eAAe,EAAE,IAAK;AAAA;AAAA,IAC1D,gBAAAD,MAAC,WAAM,OAAc,aAA0B,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK,GAAG,UAAU,QAAQ;AAAA,KACtH;AAGF,QAAM,cAAc,CAAC,OAAe,UAClC,aAAa,CAAC,YAAY,QAAQ,IAAI,CAAC,MAAM,cAAc;AACzD,QAAI,cAAc,MAAO,QAAO,MAAM,YAAY,EAAE,GAAG,MAAM,WAAW,MAAM,IAAI;AAClF,WAAO,EAAE,GAAG,MAAM,GAAG,MAAM;AAAA,EAC7B,CAAC,CAAC;AAEJ,QAAM,kBACJ,gBAAAC,OAAC,SACC;AAAA,oBAAAA,OAAC,SAAI,WAAU,aACZ;AAAA,YAAM,iBAAiB,SAAS,MAAM,CAAC,SAAS,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC;AAAA,MACpF,MAAM,cAAc,SAAS,WAAW,CAAC,cAAc,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU,EAAE,CAAC;AAAA,MAChG,MAAM,gBAAgB,SAAS,OAAO,CAAC,UAAU,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,OAAO,YAAY;AAAA,MAC3G,MAAM,aAAa,SAAS,KAAK,CAAC,QAAQ,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;AAAA,MAC7E,MAAM,SAAS,SAAS,OAAO,CAAC,UAAU,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;AAAA,MAC/E,MAAM,SAAS,SAAS,OAAO,CAAC,UAAU,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;AAAA,OAClF;AAAA,IACA,gBAAAD,MAAC,QAAG,WAAU,gBAAe,uCAAyB;AAAA,IACtD,gBAAAC,OAAC,SAAI,WAAU,aACZ;AAAA,YAAM,yBAAyB,SAAS,MAAM,CAAC,SAAS,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC;AAAA,MAC5F,MAAM,kBAAkB,SAAS,OAAO,CAAC,UAAU,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;AAAA,MACxF,MAAM,eAAe,SAAS,KAAK,CAAC,QAAQ,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC;AAAA,MAC/E,MAAM,iBAAiB,SAAS,SAAS,IAAI,CAAC,UAAU,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC;AAAA,MAC7F,MAAM,UAAU,SAAS,iBAAiB,IAAI,CAAC,kBAAkB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,cAAc,EAAE,GAAG,IAAI;AAAA,MACpH,MAAM,QAAQ,SAAS,eAAe,IAAI,CAAC,gBAAgB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,YAAY,EAAE,CAAC;AAAA,MACtG,MAAM,SAAS,SAAS,gBAAgB,IAAI,CAAC,iBAAiB,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,cAAc,aAAa,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;AAAA,MAClJ,MAAM,OAAO,SAAS,cAAc,IAAI,CAAC,eAAe,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,EAAE,CAAC;AAAA,OACrG;AAAA,IACA,gBAAAA,OAAC,SAAI,WAAU,gBAAe;AAAA,sBAAAD,MAAC,UAAK,WAAU,eAAe,oBAAU,UAAU,IAAI,uBAAuB,mCAAkC;AAAA,MAAO,gBAAAA,MAAC,YAAO,WAAU,aAAY,MAAK,UAAS,UAAU,QAAQ,SAAS,cAAe,mBAAS,iBAAY,iBAAgB;AAAA,OAAS;AAAA,KAC3R;AAGF,QAAM,mBACJ,gBAAAC,OAAC,SACE;AAAA,cAAU,IAAI,CAAC,UAAU,UACxB,gBAAAA,OAAC,SAAI,WAAU,YACZ;AAAA,YAAM,QAAQ,SAAS,MAAM,CAAC,SAAS,YAAY,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,MACnE,MAAM,UAAU,SAAS,QAAQ,CAAC,WAAW,YAAY,OAAO,EAAE,OAAO,CAAC,CAAC;AAAA,MAC3E,MAAM,QAAQ,SAAS,MAAM,CAAC,SAAS,YAAY,OAAO,EAAE,KAAK,CAAC,CAAC;AAAA,MACnE,MAAM,SAAS,SAAS,OAAO,CAAC,UAAU,YAAY,OAAO,EAAE,OAAO,MAAM,YAAY,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;AAAA,MACxG,MAAM,OAAO,SAAS,KAAK,CAAC,QAAQ,YAAY,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,MAChE,gBAAAA,OAAC,WAAM,WAAU,gBAAe;AAAA,wBAAAD,MAAC,WAAM,MAAK,SAAQ,MAAK,gBAAe,SAAS,SAAS,cAAc,MAAM,UAAU,MAAM,YAAY,OAAO,EAAE,WAAW,KAAK,CAAC,GAAG;AAAA,QAAE;AAAA,SAAQ;AAAA,MACjL,gBAAAA,MAAC,YAAO,WAAU,eAAc,MAAK,UAAS,cAAW,mBAAkB,SAAS,MAAM,aAAa,CAAC,YAAY,QAAQ,OAAO,CAAC,GAAG,cAAc,cAAc,KAAK,CAAC,GAAG,kBAAC;AAAA,SAPhJ,SAAS,MAAM,KAQ9C,CACD;AAAA,IACD,gBAAAA,MAAC,YAAO,WAAU,YAAW,MAAK,UAAS,SAAS,MAAM,aAAa,CAAC,YAAY,CAAC,GAAG,SAAS,cAAc,CAAC,CAAC,GAAG,4BAAc;AAAA,IAClI,gBAAAC,OAAC,SAAI,WAAU,gBAAe;AAAA,sBAAAD,MAAC,UAAK,WAAU,eAAe,oBAAU,WAAW,IAAI,uBAAuB,6BAA4B;AAAA,MAAO,gBAAAA,MAAC,YAAO,WAAU,aAAY,MAAK,UAAS,UAAU,QAAQ,SAAS,eAAgB,mBAAS,iBAAY,kBAAiB;AAAA,OAAS;AAAA,KACxR;AAGF,QAAM,YACJ,gBAAAC,OAAC,SACE;AAAA,aAAS,KACR,gBAAAA,OAAC,SAAI,WAAU,mBAAkB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,YAAQ,kBAAQ,GAAG,UAAS;AAAA,QAAS,gBAAAC,OAAC,UAAK;AAAA;AAAA,UAAU,QAAQ,GAAG;AAAA,WAAQ;AAAA,SAAO;AAAA,MAAM,gBAAAD,MAAC,UAAK,+CAAiC;AAAA,OAAO,IACxK;AAAA,IACJ,gBAAAC,OAAC,WAAM,WAAU,aACf;AAAA,sBAAAD,MAAC,WAAM,MAAK,QAAO,QAAO,wBAAuB,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,QAAQ,CAAC,KAAK,IAAI,GAAG;AAAA,MAClH,gBAAAA,MAAC,YAAQ,mBAAS,OAAO,OAAO,SAAS,KAAK,wBAAwB,sDAAqD;AAAA,MAC3H,gBAAAA,MAAC,UAAK,2DAA6C;AAAA,OACrD;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,gBAAe;AAAA,sBAAAD,MAAC,UAAK,WAAU,eAAe,oBAAU,IAAI,IAAI,uBAAuB,IAAG;AAAA,MAAO,gBAAAA,MAAC,YAAO,WAAU,aAAY,MAAK,UAAS,UAAU,UAAU,CAAC,QAAQ,SAAS,QAAS,mBAAS,oBAAe,YAAW;AAAA,OAAS;AAAA,KACzP;AAGF,QAAM,gBACJ,gBAAAC,OAAC,SAAI,WAAU,cACX;AAAA,cAAS,WAAW,aAAa,CAAC,GAAG,IAAI,CAAC,SAC1C,gBAAAA,OAAC,SAAI,WAAU,mBAAgC,iBAAe,KAAK,UACjE;AAAA,sBAAAD,MAAC,OAAG,eAAK,WAAW,WAAM,UAAI;AAAA,MAAI,gBAAAA,MAAC,UAAM,eAAK,OAAM;AAAA,SADhB,KAAK,EAE3C,CACD;AAAA,IACA,SAAS,WAAW,WAAW,gBAAAA,MAAC,OAAE,WAAU,aAAY,kHAA+F,IAAO,gBAAAA,MAAC,OAAE,WAAU,eAAc,uEAAyD;AAAA,KACrP;AAGF,QAAM,WAAyC,EAAE,UAAU,iBAAiB,WAAW,kBAAkB,IAAI,WAAW,QAAQ,cAAc;AAE9I,SACE,gBAAAC,OAAC,SAAI,WAAW,QAAQ,SAAS,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,wBAAwB,UAAU,GAAG,GAAG,MAAM,GACpG;AAAA,oBAAAD,MAAC,WAAO,UAAAE,MAAI;AAAA,IACZ,gBAAAD,OAAC,SAAI,WAAU,aACb;AAAA,sBAAAD,MAAC,SAAI,WAAU,aAAY,0BAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAI,mBAAQ;AAAA,QAAK,gBAAAA,MAAC,OAAE,WAAU,aAAa,uBAAY;AAAA,SAAI,GAAM;AAAA,MACjG,YAAY,gBAAAA,MAAC,SAAI,WAAU,cAAa,MAAK,SAAS,qBAAU,IAAS;AAAA,MACzE,YAAY,eACX,gBAAAC,OAAAF,WAAA,EACE;AAAA,wBAAAC,MAAC,SAAI,WAAU,cACZ,gBAAM,IAAI,CAAC,SACV,gBAAAC,OAAC,YAAO,WAAU,aAAY,MAAK,UAAuB,eAAa,SAAS,KAAK,IAAI,aAAW,QAAQ,UAAU,KAAK,EAAE,CAAC,GAAG,SAAS,MAAM,QAAQ,KAAK,EAAE,GAC7J;AAAA,0BAAAD,MAAC,OAAG,oBAAU,KAAK,EAAE,IAAI,WAAM,IAAG;AAAA,UAAK,KAAK;AAAA,aADG,KAAK,EAEtD,CACD,GACH;AAAA,QACC,SAAS,IAAI;AAAA,SAChB,IAEA,gBAAAC,OAAAF,WAAA,EACG;AAAA;AAAA,QACD,gBAAAC,MAAC,QAAG,WAAU,gBAAe,uBAAS;AAAA,QACrC;AAAA,QACD,gBAAAA,MAAC,QAAG,WAAU,gBAAe,0BAAY;AAAA,QACxC;AAAA,QACD,gBAAAA,MAAC,QAAG,WAAU,gBAAe,uBAAS;AAAA,QACrC;AAAA,SACH;AAAA,MAED,QAAQ,gBAAAA,MAAC,SAAI,WAAU,cAAa,MAAK,SAAS,iBAAM,IAAS;AAAA,OACpE;AAAA,KACF;AAEJ;AAGO,SAAS,gBAAgB,OAAmE;AACjG,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,aAAY;AAAA,MACX,GAAG;AAAA,MACJ,SAAQ;AAAA;AAAA,EACV;AAEJ;;;AC5TA;AAAA,EACE,eAAAQ;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OAGK;AAKP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AA2VI,qBAAAC,WAAsB,OAAAC,OAI3B,QAAAC,cAJK;AAzVX,IAAM,2BAA2B;AAyDjC,eAAe,cACb,UACA,UACgB;AAChB,QAAM,OAAgB,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,IAAI;AAC5D,QAAM,SAAS,QAAQ,OAAO,SAAS,WAClC,KAA+C,UAC5C,KAA6B,QACjC;AACJ,SAAO,IAAI,MAAM,OAAO,WAAW,WAAW,SAAS,QAAQ;AACjE;AAEA,SAAS,eAAe,SAA4C;AAClE,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI,CAAC,QAAQ,UAAW,QAAO;AAC/B,QAAM,YAAY,IAAI,KAAK,QAAQ,SAAS,EAAE,QAAQ;AACtD,SAAO,OAAO,SAAS,SAAS,KAAK,YAAY,KAAK,IAAI,IAAI;AAChE;AAEA,SAAS,iBAAiB,OAAmC;AAC3D,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACA,QAAM,YAAY;AAOlB,QAAM,SAAS,UAAU,WAAW,UAAU;AAC9C,QAAM,UAAU,UAAU,OAAO,WAAW,WACxC,SACA;AACJ,MAAI,OAAO,QAAQ,UAAU,YAAY,QAAQ,MAAM,SAAS,GAAG;AACjE,UAAM,IAAI,MAAM,uEAAuE;AAAA,EACzF;AACA,SAAO;AAAA,IACL,OAAO,QAAQ;AAAA,IACf,GAAI,OAAO,QAAQ,cAAc,WAC7B,EAAE,WAAW,QAAQ,UAAU,IAC/B,CAAC;AAAA,IACL,GAAI,OAAO,QAAQ,eAAe,WAC9B,EAAE,YAAY,QAAQ,WAAW,IACjC,CAAC;AAAA,EACP;AACF;AAEA,SAAS,gBAAgB,OAAgB,QAAgC;AACvE,MAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACvC,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,QAAM,SAAS;AACf,QAAM,UAAU,CAAC,OAAO,aAAa,OAAO,WAAW,OAAO,UAAU;AACxE,MACE,OAAO,OAAO,UAAU,YACrB,QAAQ;AAAA,IACT,CAAC,WAAW,OAAO,WAAW,YAAY,CAAC,OAAO,SAAS,MAAM;AAAA,EACnE,GACA;AACA,UAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AACA,SAAO;AAAA,IACL,QAAQ,OAAO,OAAO,WAAW,WAAW,OAAO,SAAS;AAAA,IAC5D,OAAO,OAAO;AAAA,IACd,cAAc,OAAO,OAAO,iBAAiB,WACzC,OAAO,eACP,OAAO;AAAA,IACX,aAAa,OAAO,OAAO,gBAAgB,WACvC,OAAO,cACP;AAAA,IACJ,WAAW,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAAA,IACrE,WAAW,OAAO,OAAO,cAAc,WAAW,OAAO,YAAY;AAAA,IACrE,aAAa,OAAO;AAAA,IACpB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,EACrB;AACF;AAOO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,EACb,OAAO;AACT,GAA8C;AAC5C,QAAM,UAAU,iBAAiB,WAAW;AAC5C,MAAI,OAAO,YAAY,YAAY;AACjC,UAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AACA,MAAI,UAAoC;AACxC,MAAI,iBAAoD;AAExD,QAAM,cAAc,OAClB,QACA,QAAQ,UACuB;AAC/B,QAAI,CAAC,SAAS,eAAe,OAAO,EAAG,QAAO;AAC9C,QAAI,CAAC,SAAS,eAAgB,QAAO;AAErC,UAAM,UAAU,aACZ,WAAW,EAAE,OAAO,CAAC,IACrB,QAAQ,iBAAiB;AAAA,MACzB,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,MACvB;AAAA,IACF,CAAC,EAAE,KAAK,OAAO,aAAa;AAC1B,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAM;AAAA,UACV;AAAA,UACA;AAAA,QACF;AAAA,MACF;AACA,aAAO,SAAS,KAAK;AAAA,IACvB,CAAC;AAEH,UAAM,UAAU,QAAQ,QAAQ,OAAO,EACpC,KAAK,gBAAgB,EACrB,KAAK,CAAC,gBAAgB;AACrB,gBAAU;AACV,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,UAAI,mBAAmB,QAAS,kBAAiB;AAAA,IACnD,CAAC;AACH,qBAAiB;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,OACpB,gBACA,WACsB;AACtB,UAAM,WAAW,eAAe,cAAc,YAAY,QAAQ,OAAO,EAAE;AAC3E,WAAO,QAAQ,GAAG,OAAO,6BAA6B,mBAAmB,MAAM,CAAC,WAAW;AAAA,MACzF,SAAS,EAAE,eAAe,UAAU,eAAe,KAAK,GAAG;AAAA,MAC3D;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,eAAe;AACb,gBAAU;AACV,uBAAiB;AAAA,IACnB;AAAA,IACA,MAAM,UAAU,gBAAgB;AAC9B,YAAM,aAAa,iBAAiB,OAAO,IAAI,gBAAgB;AAC/D,YAAM,SAAS,kBAAkB,YAAY;AAC7C,UAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,sCAAsC;AACnE,UAAI,iBAAiB,MAAM,YAAY,MAAM;AAC7C,UAAI,WAAW,MAAM,cAAc,gBAAgB,MAAM;AACzD,UAAI,SAAS,WAAW,KAAK;AAC3B,kBAAU;AACV,yBAAiB,MAAM,YAAY,QAAQ,IAAI;AAC/C,mBAAW,MAAM,cAAc,gBAAgB,MAAM;AAAA,MACvD;AACA,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,MAAM,cAAc,UAAU,kCAAkC;AAAA,MACxE;AACA,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,gBAAgB,KAAK,MAAM,MAAM;AAAA,IAC1C;AAAA,EACF;AACF;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA,aAAa;AAAA,EACb,kBAAkB;AAAA,EAClB,UAAU;AAAA,EACV,cAAc;AAAA,EACd,OAAO;AACT,GAA8C;AAC5C,QAAM,SAASC,SAAQ,MAAM,uBAAuB;AAAA,IAClD;AAAA,IACA;AAAA,IACA,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,IACnC;AAAA,IACA,GAAI,gBAAgB,EAAE,OAAO,cAAc,IAAI,CAAC;AAAA,EAClD,CAAC,GAAG,CAAC,YAAY,QAAQ,eAAe,YAAY,eAAe,CAAC;AACpE,QAAM,CAAC,MAAM,OAAO,IAAIC,UAAgC,WAAW;AACnE,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,WAAW,CAAC,WAAW;AAClE,QAAM,CAAC,cAAc,eAAe,IAAIA,UAAS,KAAK;AACtD,QAAM,UAAUC,QAA8B,WAAW;AACzD,QAAM,iBAAiBA,QAA8B,WAAW;AAChE,iBAAe,UAAU;AACzB,QAAM,sBAAsBA,QAA+B,IAAI;AAC/D,QAAM,kBAAkBA,QAAO,CAAC;AAEhC,EAAAC,WAAU,MAAM;AACd,UAAM,OAAO,eAAe;AAC5B,YAAQ,UAAU;AAClB,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,iBAAa,WAAW,CAAC,IAAI;AAC7B,wBAAoB,SAAS,MAAM;AACnC,WAAO,MAAM,oBAAoB,SAAS,MAAM;AAAA,EAClD,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,QAAM,OAAOC,aAAY,YAAY;AACnC,QAAI,CAAC,WAAW,CAAC,OAAQ;AACzB,UAAM,WAAW,EAAE,gBAAgB;AACnC,wBAAoB,SAAS,MAAM;AACnC,UAAM,aAAa,IAAI,gBAAgB;AACvC,wBAAoB,UAAU;AAC9B,QAAI,QAAQ,QAAS,iBAAgB,IAAI;AAAA,QACpC,cAAa,IAAI;AACtB,aAAS,IAAI;AAEb,QAAI;AACF,YAAM,WAAW,MAAM,OAAO,UAAU,WAAW,MAAM;AACzD,UAAI,CAAC,WAAW,OAAO,WAAW,aAAa,gBAAgB,SAAS;AACtE,gBAAQ,UAAU;AAClB,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,SAAS,OAAO;AACd,UAAI,WAAW,OAAO,QAAS;AAC/B,UAAI,aAAa,gBAAgB,SAAS;AACxC;AAAA,UACE,iBAAiB,QACb,QACA,IAAI,MAAM,kCAAkC;AAAA,QAClD;AAAA,MACF;AAAA,IACF,UAAE;AACA,UAAI,oBAAoB,YAAY,YAAY;AAC9C,4BAAoB,UAAU;AAAA,MAChC;AACA,UAAI,CAAC,WAAW,OAAO,WAAW,aAAa,gBAAgB,SAAS;AACtE,qBAAa,KAAK;AAClB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,OAAO,CAAC;AAE5B,EAAAD,WAAU,MAAM;AACd,QAAI,QAAS,MAAK,KAAK;AAAA,EACzB,GAAG,CAAC,SAAS,IAAI,CAAC;AAElB,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,WAAW,mBAAmB,EAAG;AACtC,UAAM,QAAQ,OAAO,YAAY,MAAM,KAAK,KAAK,GAAG,eAAe;AACnE,UAAM,UAAU,MAAM,KAAK,KAAK;AAChC,UAAM,eAAe,MAAM;AACzB,UAAI,SAAS,oBAAoB,UAAW,MAAK,KAAK;AAAA,IACxD;AACA,WAAO,iBAAiB,SAAS,OAAO;AACxC,aAAS,iBAAiB,oBAAoB,YAAY;AAC1D,WAAO,MAAM;AACX,aAAO,cAAc,KAAK;AAC1B,aAAO,oBAAoB,SAAS,OAAO;AAC3C,eAAS,oBAAoB,oBAAoB,YAAY;AAAA,IAC/D;AAAA,EACF,GAAG,CAAC,SAAS,MAAM,eAAe,CAAC;AAEnC,SAAO,EAAE,MAAM,OAAO,WAAW,cAAc,SAAS,KAAK;AAC/D;AAWO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAkD;AAChD,QAAM,SAAS,cAAc,OAAO;AACpC,MAAI,OAAO,aAAa,CAAC,OAAO,MAAM;AACpC,WAAO,gBAAAL,MAAAD,WAAA,EAAG,6BAAmB,gBAAAC,MAAC,SAAI,MAAK,UAAS,uCAAoB,GAAO;AAAA,EAC7E;AACA,MAAI,OAAO,SAAS,CAAC,OAAO,MAAM;AAChC,WAAO,gBAAAA,MAAAD,WAAA,EAAG,0BAAgB,OAAO,OAAO,OAAO,OAAO,KACpD,gBAAAE,OAAC,SAAI,MAAK,SACP;AAAA,aAAO,MAAM;AAAA,MAAS;AAAA,MACvB,gBAAAD,MAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,OAAO,QAAQ,GAAG,mBAAK;AAAA,OACnE,GACA;AAAA,EACJ;AACA,MAAI,CAAC,OAAO,KAAM,QAAO;AACzB,SAAO,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACN,QAAQ,OAAO,KAAK;AAAA,MACpB,aAAa,OAAO,KAAK;AAAA,MACzB,WAAW,OAAO,KAAK;AAAA,MACvB,WAAW,OAAO,KAAK;AAAA,MACvB,aAAa,OAAO,KAAK;AAAA,MACzB,WAAW,OAAO,KAAK;AAAA,MACvB,YAAY,OAAO,KAAK;AAAA,MACvB,GAAI,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC7B,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,MACnC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,MACjC,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA;AAAA,EAC5B;AACF;;;ACnYA,SAAS,YAAAO,kBAAuD;AAkD1D,SAqH6B,YAAAC,YArH7B,OAAAC,OAEE,QAAAC,cAFF;AArBC,SAAS,4BACd,SACA,kBAAkB,OACK;AACvB,SAAO,QAAQ,OAAO,CAAC,WAAW,OAAO,WAAW,eAAe;AACrE;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,QAAM,UAAU,4BAA4B,SAAS,eAAe;AACpE,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,SACE,gBAAAA,OAAC,SAAI,WAAW,QAAQ,wBAAwB,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,gBACxH;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC9B,QAAQ,IAAI,CAAC,WACZ,gBAAAC,OAAC,SAAI,WAAU,uBACb;AAAA,sBAAAD,MAAC,YAAO,MAAK,UAAS,WAAW,OAAO,UAAU,gCAAgC,oBAAoB,UAAU,YAAY,CAAC,OAAO,SAAS,SAAS,MAAM,SAAS,MAAM,GACxK,iBAAO,OACV;AAAA,MACC,CAAC,OAAO,WAAW,OAAO,SAAS,gBAAAA,MAAC,UAAK,WAAU,oBAAoB,iBAAO,QAAO,IAAU;AAAA,SAJxD,OAAO,EAKjD,CACD;AAAA,KACH;AAEJ;AAiBA,IAAM,iBAAyC;AAAA,EAC7C,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,2BAA2B;AAC7B;AAGO,SAAS,uBAAuB,MAAsB;AAC3D,SAAO,eAAe,IAAI,KAAK,KAAK,QAAQ,WAAW,GAAG,EAAE,QAAQ,SAAS,CAAC,cAAc,UAAU,YAAY,CAAC;AACrH;AAEA,SAAS,kBAAkB,WAA2B;AACpD,QAAM,SAAS,IAAI,KAAK,SAAS;AACjC,MAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAG,QAAO;AAC3C,SAAO,IAAI,KAAK,eAAe,QAAW,EAAE,WAAW,UAAU,WAAW,QAAQ,CAAC,EAAE,OAAO,MAAM;AACtG;AAEO,SAAS,qBAAqB,EAAE,QAAQ,aAAa,yBAAyB,YAAY,WAAW,OAAO,aAAa,kBAAkB,GAA4C;AAC5L,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,0BAA0B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,iBAC9H;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,0BAAY;AAAA,MAAS,gBAAAA,MAAC,UAAK,mEAAqD;AAAA,OAAO,GAAM;AAAA,IAChJ,CAAC,OAAO,SAAS,gBAAAA,MAAC,OAAE,WAAU,qBAAqB,sBAAW,IAC7D,gBAAAA,MAAC,QAAG,WAAU,oBACX,iBAAO,IAAI,CAAC,UACX,gBAAAC,OAAC,QAAG,WAAU,oBACZ;AAAA,sBAAAD,MAAC,UAAK,WAAU,sBAAqB,eAAY,QAAO;AAAA,MACxD,gBAAAC,OAAC,SAAI,WAAU,uBACb;AAAA,wBAAAD,MAAC,YAAQ,gBAAM,SAAS,uBAAuB,MAAM,IAAI,GAAE;AAAA,QAC1D,MAAM,cAAc,gBAAAA,MAAC,OAAG,gBAAM,aAAY,IAAO;AAAA,QAClD,gBAAAC,OAAC,UAAM;AAAA,qBAAW,MAAM,SAAS;AAAA,UAAG,MAAM,QAAQ,SAAM,MAAM,KAAK,KAAK;AAAA,WAAG;AAAA,SAC7E;AAAA,SANoC,MAAM,EAO5C,CACD,GACH;AAAA,KAEJ;AAEJ;AAaA,SAAS,YAAY,KAAqB;AACxC,QAAM,SAAS,IAAI,KAAK,GAAG;AAC3B,MAAI,OAAO,MAAM,OAAO,QAAQ,CAAC,EAAG,QAAO;AAC3C,SAAO,IAAI,KAAK,eAAe,SAAS,EAAE,OAAO,WAAW,KAAK,WAAW,MAAM,UAAU,CAAC,EAAE,OAAO,MAAM;AAC9G;AAQO,SAAS,iBAAiB,EAAE,SAAS,aAAa,wBAAwB,YAAY,WAAW,OAAO,aAAa,aAAa,cAAc,eAAe,GAAwC;AAC5M,QAAM,CAAC,UAAU,WAAW,IAAIC,WAAkC,CAAC,CAAC;AACpE,SACE,gBAAAD,OAAC,aAAQ,WAAW,QAAQ,yBAAyB,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,gBAC7H;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,0BAAY;AAAA,MAAS,gBAAAA,MAAC,UAAK,oEAAsD;AAAA,OAAO,GAAM;AAAA,IACjJ,CAAC,QAAQ,SAAS,gBAAAA,MAAC,OAAE,WAAU,qBAAqB,sBAAW,IAC9D,gBAAAC,OAAC,SAAI,WAAU,oBACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,mBAAkB,eAAY,QAAO;AAAA,wBAAAD,MAAC,UAAK,kBAAI;AAAA,QAAO,gBAAAA,MAAC,UAAK,oBAAM;AAAA,QAAO,gBAAAA,MAAC,UAAK,kBAAI;AAAA,QAAO,gBAAAA,MAAC,UAAK,qBAAO;AAAA,SAAO;AAAA,MAC7H,gBAAAA,MAAC,QAAG,WAAU,mBACX,kBAAQ,IAAI,CAAC,UAAU;AACtB,cAAM,aAAa,QAAQ,MAAM,OAAO;AACxC,cAAM,SAAS,cAAc,QAAQ,SAAS,MAAM,EAAE,CAAC;AACvD,cAAM,UAAU,MAAM;AACtB,cAAM,eAAe,gBAAAC,OAAAF,YAAA,EACnB;AAAA,0BAAAC,MAAC,UAAK,WAAU,mBAAmB,qBAAW,MAAM,IAAI,GAAE;AAAA,UAC1D,gBAAAA,MAAC,UAAK,WAAU,qBAAqB,gBAAM,QAAO;AAAA,UAClD,gBAAAA,MAAC,UAAK,WAAU,oBAAoB,gBAAM,SAAS,UAAI;AAAA,UACvD,gBAAAC,OAAC,UAAK,WAAU,sBACb;AAAA,yBAAa,gBAAAD,MAAC,OAAE,WAAW,mBAAmB,SAAS,aAAa,EAAE,IAAI,eAAY,QAAO,IAAK;AAAA,YAClG,MAAM;AAAA,aACT;AAAA,WACF;AACA,eACE,gBAAAC,OAAC,QAAkB,WAAW,qBAAqB,MAAM,IAAI,IAC1D;AAAA,uBAAa,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACb,MAAK;AAAA,cACL,WAAU;AAAA,cACV,iBAAe;AAAA,cACf,SAAS,MAAM,YAAY,CAAC,aAAa,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,EAAE,EAAE,EAAE;AAAA,cACxF;AAAA;AAAA,UAAa,IAAY,gBAAAA,MAAC,SAAI,WAAU,mBAAmB,wBAAa;AAAA,UACzE,UAAU,UACT,gBAAAC,OAAC,SAAI,WAAU,sBACZ;AAAA,oBAAQ,MAAM,SACb,gBAAAD,MAAC,QAAG,WAAU,iBACX,kBAAQ,KAAK,IAAI,CAAC,QACjB,gBAAAC,OAAC,SAAsC;AAAA,8BAAAD,MAAC,QAAI,cAAI,OAAM;AAAA,cAAK,gBAAAA,MAAC,QAAI,cAAI,OAAM;AAAA,iBAAhE,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,EAA4C,CAChF,GACH,IACE;AAAA,YACH,QAAQ,WAAW,SAClB,gBAAAA,MAAC,SAAI,WAAU,iBAAgB,0BAAAC,OAAC,SAAI;AAAA,8BAAAD,MAAC,QAAG,uBAAS;AAAA,cAAK,gBAAAA,MAAC,QACpD,kBAAQ,UAAU,IAAI,CAAC,QAAQ;AAC9B,sBAAM,OAAO,eAAe,GAAG,KAAK;AACpC,uBAAO,OACH,gBAAAA,MAAC,OAAe,WAAU,kBAAiB,MAAY,QAAO,UAAS,KAAI,cAAc,cAAI,YAArF,IAAI,EAA0F,IACtG,iBACE,gBAAAA,MAAC,YAAoB,MAAK,UAAS,WAAU,kBAAiB,SAAS,MAAM,KAAK,eAAe,GAAG,GAAI,cAAI,YAA/F,IAAI,EAAoG,IACvH,gBAAAA,MAAC,UAAkB,WAAU,kBAAkB,cAAI,YAAxC,IAAI,EAA6C;AAAA,cAClE,CAAC,GACH;AAAA,eAAK,GAAM,IACT;AAAA,YACH,QAAQ,OAAO,SACd,gBAAAA,MAAC,QAAG,WAAU,oBACX,kBAAQ,MAAM,IAAI,CAAC,SAClB,gBAAAC,OAAC,SAAoB;AAAA,8BAAAD,MAAC,QAAI,eAAK,MAAK;AAAA,cAAK,gBAAAA,MAAC,QAAI,eAAK,MAAK;AAAA,iBAA9C,KAAK,IAA8C,CAC9D,GACH,IACE;AAAA,YACH,QAAQ,oBAAoB,SAC3B,gBAAAC,OAAC,SAAI,WAAU,kBACb;AAAA,8BAAAD,MAAC,QAAG,kCAAoB;AAAA,cACxB,gBAAAA,MAAC,QACE,kBAAQ,mBAAmB,IAAI,CAAC,QAC/B,gBAAAC,OAAC,SAAoC;AAAA,gCAAAD,MAAC,QAAI,qBAAW,IAAI,IAAI,GAAE;AAAA,gBAAK,gBAAAA,MAAC,QAAI,cAAI,MAAK;AAAA,mBAAxE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAsD,CACxF,GACH;AAAA,eACF,IACE;AAAA,YACH,QAAQ,OAAO,gBAAAA,MAAC,OAAE,WAAU,mBAAmB,kBAAQ,MAAK,IAAO;AAAA,aACtE,IACE;AAAA,aA/CG,MAAM,EAgDf;AAAA,MAEJ,CAAC,GACH;AAAA,OACF;AAAA,KAEJ;AAEJ;AAIA,IAAM,kBAAoE;AAAA,EACxE,EAAE,IAAI,aAAa,OAAO,OAAO;AAAA,EACjC,EAAE,IAAI,YAAY,OAAO,WAAW;AAAA,EACpC,EAAE,IAAI,aAAa,OAAO,YAAY;AAAA,EACtC,EAAE,IAAI,UAAU,OAAO,SAAS;AAClC;AASO,SAAS,mBAAmB,OAAmC;AACpE,QAAM,QAAQ,MAAM,YAAY;AAChC,MAAI,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,aAAa,EAAG,QAAO;AACtE,MAAI,MAAM,SAAS,eAAe,KAAK,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,QAAQ,EAAG,QAAO;AACpG,MAAI,MAAM,SAAS,WAAW,KAAK,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,QAAQ,KAAK,MAAM,SAAS,SAAS,KAAK,MAAM,SAAS,UAAU,KAAK,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,MAAM,EAAG,QAAO;AAC5M,MAAI,MAAM,SAAS,UAAU,EAAG,QAAO;AACvC,SAAO;AACT;AAcO,SAAS,qBAAqB,OAAwB;AAC3D,SAAO,MAAM,YAAY,MAAM;AACjC;AAGO,SAAS,2BAA2B,OAAe,SAA0E;AAClI,MAAI,MAAM,YAAY,MAAM,YAAY;AACtC,WAAO;AAAA,MACL,EAAE,IAAI,aAAa,OAAO,QAAQ,QAAQ,WAAW;AAAA,MACrD,EAAE,IAAI,YAAY,OAAO,YAAY,QAAQ,UAAU;AAAA,IACzD;AAAA,EACF;AAEA,MAAI,SAAS,cAAc,qBAAqB,KAAK,GAAG;AACtD,WAAO;AAAA,MACL,EAAE,IAAI,SAAS,OAAO,SAAS,QAAQ,UAAU;AAAA,MACjD,GAAG,gBAAgB,IAAI,CAAC,WAAW,EAAE,GAAG,OAAO,QAAQ,WAAoB,EAAE;AAAA,IAC/E;AAAA,EACF;AAEA,QAAM,UAAU,mBAAmB,KAAK;AACxC,QAAM,eAAe,gBAAgB,UAAU,CAAC,UAAU,MAAM,OAAO,OAAO;AAC9E,SAAO,gBAAgB,IAAI,CAAC,OAAO,WAAW;AAAA,IAC5C,GAAG;AAAA,IACH,QACE,QAAQ,eACJ,aACA,UAAU,eACR,YACA;AAAA,EACV,EAAE;AACJ;AAGO,SAAS,0BAA0B,OAAe,cAA+B;AACtF,QAAM,QAAQ,MAAM,YAAY;AAChC,MAAI,UAAU,YAAa,QAAO;AAClC,MAAI,UAAU,gBAAiB,QAAO;AACtC,MAAI,UAAU,WAAY,QAAO;AACjC,MAAI,UAAU,SAAU,QAAO;AAC/B,MAAI,UAAU,iBAAkB,QAAO;AACvC,MAAI,UAAU,cAAe,QAAO;AACpC,SAAO,SAAS,SAAS,gBAAgB,WAAW;AACtD;AAWO,SAAS,sBAAsB,EAAE,OAAO,cAAc,aAAa,WAAW,YAAY,YAAY,WAAW,MAAM,GAA6C;AACzK,QAAM,WAAW,MAAM,YAAY,MAAM;AACzC,QAAM,QAAQ,QAAQ,UAAU,KAAK,qBAAqB,KAAK;AAC/D,QAAM,QAAQ,2BAA2B,OAAO,EAAE,YAAY,QAAQ,UAAU,EAAE,CAAC;AACnF,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,yBAAyB,WAAW,iBAAiB,EAAE,IAAI,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,kBAC/J;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAQ,oCAA0B,OAAO,YAAY,GAAE;AAAA,MAAS,gBAAAA,MAAC,UAAM,qBAAW,wCAAwC,QAAQ,iBAAiB,GAAG,cAAc,aAAa,kBAAkB,WAAW,CAAC,KAAK,WAAW,GAAG,OAAO,cAAc,WAAW,SAAM,SAAS,cAAc,EAAE,IAAG;AAAA,OAAO,GAAM;AAAA,IAC9V,gBAAAA,MAAC,QAAG,WAAU,oBAAmB,OAAO,EAAE,qBAAqB,UAAU,MAAM,MAAM,oBAAoB,GACtG,gBAAM,IAAI,CAAC,MAAM,UAChB,gBAAAC,OAAC,QAAiB,WAAW,MAAM,KAAK,MAAM,IAAI,gBAAc,KAAK,WAAW,YAAY,SAAS,QACnG;AAAA,sBAAAD,MAAC,UAAK,eAAY,QAAQ,eAAK,WAAW,aAAa,WAAM,YAAY,KAAK,WAAW,YAAY,MAAM,QAAQ,GAAE;AAAA,MACrH,gBAAAA,MAAC,OAAG,eAAK,OAAM;AAAA,SAFR,KAAK,EAGd,CACD,GACH;AAAA,KACF;AAEJ;AAUO,SAAS,0BAA0B,WAA0B,OAAuB;AACzF,QAAM,OAAO,UAAU,IAAI,qBAAqB;AAChD,QAAM,SAAS,UAAU,QAAQ,KAAK,EAAE,QAAQ,OAAO,EAAE;AACzD,MAAI,CAAC,OAAQ,QAAO,GAAG,KAAK,IAAI,IAAI;AACpC,MAAI,cAAc,KAAK,MAAM,EAAG,QAAO,GAAG,KAAK,kBAAkB,IAAI;AACrE,SAAO,GAAG,KAAK,IAAI,IAAI,gBAAgB,MAAM;AAC/C;AAGO,SAAS,oBAAoB,EAAE,WAAW,QAAQ,mCAA8B,aAAa,YAAY,WAAW,OAAO,aAAa,kBAAkB,GAA2C;AAC1M,QAAM,SAAS,UAAU,QAAQ,SAC7B,UAAU,SACV,CAAC,EAAE,MAAM,UAAU,MAAM,aAAa,UAAU,OAAO,CAAC;AAC5D,QAAM,WAAW,OAAO,KAAK,CAAC,UAAU,QAAQ,MAAM,IAAI,CAAC;AAE3D,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,kCAAkC,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,MAAK,SAAQ,cAAW,0BACnJ;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAC,OAAC,SAAI,WAAU,yBACb;AAAA,sBAAAA,OAAC,YAAO,WAAU,wBAChB;AAAA,wBAAAD,MAAC,UAAK,WAAU,qBAAoB,eAAY,QAAO,eAAC;AAAA,QACxD,gBAAAC,OAAC,SAAI;AAAA,0BAAAD,MAAC,YAAQ,iBAAM;AAAA,UAAS,gBAAAC,OAAC,UAAK;AAAA;AAAA,YAAS,OAAO,WAAW,IAAI,UAAU;AAAA,YAAS;AAAA,aAAsB;AAAA,WAAO;AAAA,SACpH;AAAA,MACA,gBAAAA,OAAC,QAAG,WAAU,yBAAwB,cAAW,qBAC/C;AAAA,wBAAAA,OAAC,QAAG,WAAU,eAAc;AAAA,0BAAAD,MAAC,UAAK,eAAY,QAAO,oBAAC;AAAA,UAAO,gBAAAA,MAAC,OAAE,kBAAI;AAAA,UAAK,cAAc,gBAAAA,MAAC,WAAO,qBAAW,WAAW,GAAE,IAAW;AAAA,WAAK;AAAA,QACvI,gBAAAC,OAAC,QAAG,WAAU,eAAc,gBAAa,QAAO;AAAA,0BAAAD,MAAC,UAAK,eAAY,QAAO,eAAC;AAAA,UAAO,gBAAAA,MAAC,OAAE,sBAAQ;AAAA,UAAK,UAAU,aAAa,gBAAAA,MAAC,WAAO,qBAAW,UAAU,UAAU,GAAE,IAAW;AAAA,WAAK;AAAA,SACnL;AAAA,OACF;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,uBAAsB,cAAW,qBAC9C;AAAA,sBAAAA,OAAC,SAAI,WAAU,+BACb;AAAA,wBAAAA,OAAC,YAAO;AAAA,0BAAAD,MAAC,UAAK,eAAY,QAAO,oBAAC;AAAA,UAAO;AAAA,WAAkB;AAAA,QAC3D,gBAAAA,MAAC,UAAM,oCAA0B,WAAW,OAAO,MAAM,GAAE;AAAA,SAC7D;AAAA,MACA,gBAAAA,MAAC,QAAG,cAAY,GAAG,OAAO,MAAM,cAAc,OAAO,WAAW,IAAI,WAAW,SAAS,IACrF,iBAAO,IAAI,CAAC,OAAO,UAClB,gBAAAC,OAAC,QACC;AAAA,wBAAAD,MAAC,UAAK,WAAU,uBAAsB,eAAY,QAAO;AAAA,QACzD,gBAAAA,MAAC,OAAG,gBAAM,aAAY;AAAA,QACrB,MAAM,OAAO,gBAAAA,MAAC,UAAK,WAAU,qBAAqB,gBAAM,MAAK,IAAU;AAAA,WAHjE,GAAG,MAAM,QAAQ,OAAO,IAAI,KAAK,EAI1C,CACD,GACH;AAAA,MACC,WAAW,gBAAAC,OAAC,OAAE,WAAU,0BAAyB;AAAA,wBAAAD,MAAC,UAAK,eAAY,QAAO,eAAC;AAAA,QAAO;AAAA,SAAiE,IAAO;AAAA,OAC7J;AAAA,KACF;AAEJ;AAIO,SAAS,oBAAoB,EAAE,MAAM,SAAS,QAAQ,UAAU,YAAY,WAAW,MAAM,GAA2C;AAC7I,QAAM,SAAS;AAAA,IACb,CAAC,WAAW,QAAQ,QAAQ,CAAC,QAAQ,WAAW,QAAQ,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;AAAA,IAC3F,CAAC,SAAS,OAAO,eAAe,QAAG;AAAA,IACnC,CAAC,SAAS,SAAS,aAAa,OAAO,mBAAmB,QAAG;AAAA,IAC7D,CAAC,mBAAmB,KAAK,OAAO,QAAG;AAAA,IACnC,CAAC,WAAW,SAAS,KAAK,WAAW,CAAC;AAAA,IACtC,CAAC,WAAW,SAAS,KAAK,UAAU,CAAC;AAAA,EACvC;AACA,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,0BAA0B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,iBAC9H;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,2BAAa;AAAA,MAAS,gBAAAC,OAAC,UAAK;AAAA;AAAA,QAAO,KAAK;AAAA,SAAW;AAAA,OAAO,GAAM;AAAA,IACpH,gBAAAD,MAAC,QAAI,iBAAO,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,gBAAAC,OAAC,SAAgB;AAAA,sBAAAD,MAAC,QAAI,iBAAM;AAAA,MAAK,gBAAAA,MAAC,QAAI,iBAAM;AAAA,SAAlC,KAAuC,CAAM,GAAE;AAAA,KAC/F;AAEJ;AAgBO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,OAAO,SAAS,SAAS,WAAW,CAAC,IAAI;AAC/C,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,4BAA4B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,sCAChI;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,mCAAqB;AAAA,MAAS,gBAAAA,MAAC,UAAK,wDAA0C;AAAA,OAAO,GAAM;AAAA,IAC/I,gBAAAC,OAAC,QAAG,WAAU,kBACZ;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,2BAAa;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,YAAY,GAAE;AAAA,SAAK;AAAA,MACvE,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,2BAAa;AAAA,QAAK,gBAAAA,MAAC,QAAI,qBAAW,uBAAuB,OAAO,WAAM,SAAS,WAAW,kBAAkB,GAAE;AAAA,SAAK;AAAA,MAC5H,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,iCAAmB;AAAA,QAAK,gBAAAA,MAAC,QAAI,qBAAW,sBAAsB,OAAO,WAAM,SAAS,WAAW,iBAAiB,GAAE;AAAA,SAAK;AAAA,MAChI,gBAAAC,OAAC,SAAI,WAAU,cAAa;AAAA,wBAAAD,MAAC,QAAG,yBAAW;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,UAAU,GAAE;AAAA,SAAK;AAAA,MAC1F,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,4BAAc;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,eAAe,GAAE;AAAA,SAAK;AAAA,MAC3E,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,gCAAsB;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,gBAAgB,GAAE;AAAA,SAAK;AAAA,MACpF,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,4BAAc;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,eAAe,GAAE;AAAA,SAAK;AAAA,MAC3E,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,sBAAQ;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,cAAc,GAAE;AAAA,SAAK;AAAA,OACtE;AAAA,IACC,WAAW,eAAe,gBAAAC,OAAC,SAAI,WAAU,aAAY;AAAA,sBAAAD,MAAC,YAAO,2BAAa;AAAA,MAAS,gBAAAA,MAAC,OAAG,qBAAW,cAAa;AAAA,OAAI,IAAS;AAAA,IAC7H,gBAAAA,MAAC,SAAI,WAAU,qBACb,0BAAAC,OAAC,WAAM,WAAU,gBACf;AAAA,sBAAAA,OAAC,WACC;AAAA,wBAAAA,OAAC,QAAG,WAAU,iBAAgB;AAAA,0BAAAD,MAAC,QAAG,SAAS,GAAG,wBAAU;AAAA,UAAK,gBAAAA,MAAC,QAAG,SAAS,GAAG,qCAAuB;AAAA,UAAK,gBAAAA,MAAC,QAAG,SAAS,GAAG,sBAAQ;AAAA,UAAK,gBAAAA,MAAC,QAAG,iBAAG;AAAA,WAAK;AAAA,QAClJ,gBAAAC,OAAC,QAAG;AAAA,0BAAAD,MAAC,QAAG,wBAAU;AAAA,UAAK,gBAAAA,MAAC,QAAG,gCAAkB;AAAA,UAAK,gBAAAA,MAAC,QAAG,4BAAc;AAAA,UAAK,gBAAAA,MAAC,QAAG,uBAAS;AAAA,UAAK,gBAAAA,MAAC,QAAG,4BAAc;AAAA,UAAK,gBAAAA,MAAC,QAAG,2BAAa;AAAA,UAAK,gBAAAA,MAAC,QAAG,0BAAY;AAAA,UAAK,gBAAAA,MAAC,QAAG,uBAAS;AAAA,UAAK,gBAAAA,MAAC,QAAG,oBAAM;AAAA,UAAK,gBAAAA,MAAC,QAAG,sBAAQ;AAAA,WAAK;AAAA,SACjN;AAAA,MACA,gBAAAA,MAAC,WAAO,eAAK,IAAI,CAAC,SAAS,UAAU;AACnC,cAAM,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;AACjC,eAAO,gBAAAC,OAAC,QACN;AAAA,0BAAAA,OAAC,QAAG,cAAW,cAAa;AAAA,4BAAAD,MAAC,YAAO,2BAAa;AAAA,YAAU,cAAc,gBAAAC,OAAC,UAAK;AAAA;AAAA,cAAM,kBAAkB,WAAW;AAAA,eAAE,IAAU;AAAA,aAAK;AAAA,UACnI,gBAAAD,MAAC,QAAG,cAAW,sBAAsB,qBAAW,sBAAsB,OAAO,WAAM,SAAS,WAAW,iBAAiB,GAAE;AAAA,UAC1H,gBAAAA,MAAC,QAAG,cAAW,kBAAkB,oBAAU,SAAS,QAAQ,MAAM,IAAI,UAAI;AAAA,UAC1E,gBAAAA,MAAC,QAAG,cAAW,aAAa,mBAAS,eAAe,UAAI;AAAA,UACxD,gBAAAA,MAAC,QAAG,cAAW,kBAAkB,oBAAU,QAAQ,gBAAgB,QAAQ,eAAe,kBAAkB,QAAQ,QAAQ,IAAI,UAAI;AAAA,UACpI,gBAAAA,MAAC,QAAG,cAAW,iBAAiB,oBAAU,SAAS,QAAQ,MAAM,IAAI,SAAS,CAAC,GAAE;AAAA,UACjF,gBAAAA,MAAC,QAAG,cAAW,gBAAgB,mBAAS,eAAe,gBAAe;AAAA,UACtE,gBAAAA,MAAC,QAAG,cAAW,aAAa,oBAAU,kBAAkB,QAAQ,QAAQ,IAAI,MAAM,kBAAkB,IAAI,OAAO,IAAI,UAAI;AAAA,UACvH,gBAAAA,MAAC,QAAG,cAAW,UAAU,oBAAU,QAAQ,OAAO,YAAY,IAAI,MAAM,QAAQ,UAAI;AAAA,UACpF,gBAAAA,MAAC,QAAG,cAAW,OAAO,iBAAO,YAAY,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,eAAc,SAAS,MAAM,KAAK,UAAU,GAAG,GAAI,cAAI,UAAS,IAAY,KAAK,YAAY,UAAI;AAAA,aAV5J,SAAS,MAAM,SAAS,KAAK,EAW7C;AAAA,MACF,CAAC,GAAE;AAAA,OACL,GACF;AAAA,IACC,KAAK,SAAS,KAAK,SAAS,gBAAAA,MAAC,SAAI,WAAU,oBAAoB,eAAK,MAAM,KAAK,MAAM,EAAE,IAAI,CAAC,QAAQ,gBAAAA,MAAC,YAAO,MAAK,UAAsB,SAAS,MAAM,KAAK,YAAY,GAAG,GAAI,cAAI,YAAnD,IAAI,EAAwD,CAAS,GAAE,IAAS;AAAA,KAClN;AAEJ;AAEO,SAAS,mBAAmB,EAAE,YAAY,YAAY,WAAW,MAAM,GAA0C;AACtH,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,4BAA4B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,sBAChI;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,wBAAU;AAAA,MAAS,gBAAAA,MAAC,UAAK,mEAAqD;AAAA,OAAO,GAAM;AAAA,IAC/I,gBAAAC,OAAC,QACC;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,2BAAa;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,YAAY,GAAE;AAAA,SAAK;AAAA,MACvE,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,sBAAQ;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,cAAc,GAAE;AAAA,SAAK;AAAA,MACpE,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,2BAAa;AAAA,QAAK,gBAAAA,MAAC,QAAI,qBAAW,uBAAuB,OAAO,WAAM,SAAS,WAAW,kBAAkB,GAAE;AAAA,SAAK;AAAA,MAC5H,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,iCAAmB;AAAA,QAAK,gBAAAA,MAAC,QAAI,qBAAW,sBAAsB,OAAO,WAAM,SAAS,WAAW,iBAAiB,GAAE;AAAA,SAAK;AAAA,MAChI,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,4BAAc;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,eAAe,GAAE;AAAA,SAAK;AAAA,MAC3E,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,gCAAsB;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,gBAAgB,GAAE;AAAA,SAAK;AAAA,MACpF,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,4BAAc;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,eAAe,GAAE;AAAA,SAAK;AAAA,MAC3E,gBAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,yBAAW;AAAA,QAAK,gBAAAA,MAAC,QAAI,mBAAS,WAAW,UAAU,GAAE;AAAA,SAAK;AAAA,OACrE;AAAA,IACC,WAAW,eAAe,gBAAAC,OAAC,SAAI,WAAU,aAAY;AAAA,sBAAAD,MAAC,YAAO,2BAAa;AAAA,MAAS,gBAAAA,MAAC,OAAG,qBAAW,cAAa;AAAA,OAAI,IAAS;AAAA,KAC/H;AAEJ;AAIO,SAAS,qBAAqB,EAAE,UAAU,YAAY,WAAW,MAAM,GAAmD;AAC/H,QAAMG,YAAW;AAAA,IACf,SAAS,SAAS,eAAe,CAAC,YAAY,SAAS,SAAS,cAAc,IAAI,IAAI;AAAA,IACtF,SAAS,SAAS,gBAAgB,CAAC,kBAAkB,SAAS,SAAS,eAAe,OAAO,SAAS,SAAS,aAAa,EAAE,IAAI;AAAA,IAClI,SAAS,SAAS,gBAAgB,CAAC,kBAAkB,SAAS,SAAS,eAAe,UAAU,SAAS,SAAS,aAAa,EAAE,IAAI;AAAA,IACrI,SAAS,SAAS,YAAY,CAAC,OAAO,SAAS,SAAS,WAAW,OAAO,SAAS,SAAS,SAAS,EAAE,IAAI;AAAA,IAC3G,SAAS,SAAS,cAAc,CAAC,SAAS,SAAS,SAAS,aAAa,UAAU,SAAS,SAAS,WAAW,EAAE,IAAI;AAAA,IACtH,SAAS,SAAS,iBAAiB,CAAC,QAAQ,SAAS,SAAS,gBAAgB,IAAI,IAAI;AAAA,IACtF,SAAS,SAAS,YAAY,CAAC,UAAU,qBAAqB,SAAS,SAAS,SAAS,IAAI;AAAA,EAC/F,EAAE,OAAO,OAAO;AAChB,MAAI,CAAC,SAAS,aAAa,CAACA,UAAS,OAAQ,QAAO;AACpD,SACE,gBAAAF,OAAC,aAAQ,WAAW,QAAQ,0BAA0B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,6BAC9H;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAQ,mBAAS,aAAa,wBAAuB;AAAA,MAAS,gBAAAA,MAAC,UAAK,6CAA+B;AAAA,OAAO,GAAM;AAAA,IAC5J,CAACG,UAAS,SAAS,gBAAAH,MAAC,OAAE,WAAU,YAAW,qDAAuC,IAAO,gBAAAA,MAAC,QAAI,UAAAG,UAAS,IAAI,CAAC,CAAC,OAAO,OAAO,IAAI,MAAM,gBAAAF,OAAC,SAAgB;AAAA,sBAAAD,MAAC,QAAI,iBAAM;AAAA,MAAK,gBAAAA,MAAC,QAAI,iBAAO,gBAAAA,MAAC,OAAE,MAAY,QAAQ,UAAU,WAAW,WAAW,QAAW,KAAK,UAAU,WAAW,wBAAwB,QAAY,iBAAM,IAAO,OAAM;AAAA,SAAtL,KAA2L,CAAM,GAAE;AAAA,KACrV;AAEJ;AAIO,SAAS,kBAAkB,EAAE,UAAU,YAAY,WAAW,MAAM,GAAyC;AAClH,SACE,gBAAAC,OAAC,aAAQ,WAAW,QAAQ,0BAA0B,SAAS,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAAG,cAAW,kBAC9H;AAAA,oBAAAD,MAAC,WAAO,kCAAuB;AAAA,IAC/B,gBAAAA,MAAC,YAAO,WAAU,sBAAqB,0BAAAC,OAAC,SAAI;AAAA,sBAAAD,MAAC,YAAO,sBAAQ;AAAA,MAAS,gBAAAA,MAAC,UAAK,+CAAiC;AAAA,OAAO,GAAM;AAAA,IACxH,CAAC,SAAS,SAAS,gBAAAA,MAAC,OAAE,WAAU,YAAW,iCAAmB,IAAO,gBAAAA,MAAC,SAAI,WAAU,mBAAmB,mBAAS,IAAI,CAAC,YAAY;AAChI,YAAM,aAAa,QAAQ,aAAa;AACxC,aAAO,gBAAAC,OAAC,aACN;AAAA,wBAAAA,OAAC,SAAI,WAAU,qBAAoB;AAAA,0BAAAD,MAAC,YAAQ,mBAAS,QAAQ,MAAM,GAAE;AAAA,UAAS,gBAAAA,MAAC,UAAK,4BAAc;AAAA,WAAO;AAAA,QACzG,gBAAAC,OAAC,QACC;AAAA,0BAAAA,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,6BAAe;AAAA,YAAK,gBAAAA,MAAC,QAAI,mBAAS,QAAQ,eAAe,GAAE;AAAA,aAAK;AAAA,UACxE,aAAa,IAAI,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,gCAAsB;AAAA,YAAK,gBAAAA,MAAC,QAAI,mBAAS,UAAU,GAAE;AAAA,aAAK,IAAS;AAAA,UAC9F,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,oBAAM;AAAA,YAAK,gBAAAA,MAAC,QAAI,kBAAQ,OAAO,YAAY,GAAE;AAAA,aAAK;AAAA,UAC3D,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,uBAAS;AAAA,YAAK,gBAAAA,MAAC,QAAI,kBAAQ,eAAe,UAAI;AAAA,aAAK;AAAA,UAC5D,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,4BAAc;AAAA,YAAK,gBAAAA,MAAC,QAAI,kBAAQ,gBAAgB,QAAQ,eAAe,kBAAkB,QAAQ,QAAQ,GAAE;AAAA,aAAK;AAAA,UACzH,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,0BAAY;AAAA,YAAK,gBAAAA,MAAC,QAAI,kBAAQ,eAAe,gBAAe;AAAA,aAAK;AAAA,UAC1E,gBAAAC,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,oBAAM;AAAA,YAAK,gBAAAC,OAAC,QAAI;AAAA,gCAAkB,QAAQ,QAAQ;AAAA,cAAE;AAAA,cAAI,QAAQ,OAAO,YAAY;AAAA,eAAE;AAAA,aAAK;AAAA,UACnG,gBAAAA,OAAC,SAAI;AAAA,4BAAAD,MAAC,QAAG,oBAAM;AAAA,YAAK,gBAAAA,MAAC,QAAI,mBAAS,QAAQ,UAAU,QAAQ,GAAE;AAAA,aAAK;AAAA,WACrE;AAAA,QACC,QAAQ,YAAY,gBAAAA,MAAC,OAAG,kBAAQ,WAAU,IAAO;AAAA,QACjD,QAAQ,OAAO,gBAAAA,MAAC,OAAG,kBAAQ,MAAK,IAAO;AAAA,WAbrB,QAAQ,EAc7B;AAAA,IACF,CAAC,GAAE;AAAA,KACL;AAEJ;AAEA,SAAS,QAAQ,MAAc,WAA4B;AACzD,SAAO,CAAC,MAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AACnD;AAEA,SAAS,SAAS,OAAuB;AACvC,SAAO,MAAM,QAAQ,WAAW,GAAG,EAAE,QAAQ,SAAS,CAAC,cAAc,UAAU,YAAY,CAAC;AAC9F;AAEA,SAAS,SAAS,OAAuB;AACvC,SAAO,IAAI,KAAK,aAAa,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,EAAE,OAAO,KAAK;AAC9F;AAEA,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC7jB/B;AAAA,EACE,eAAAI;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OAIK;AACP;AAAA,EACE,wBAAAC;AAAA,EACA,4BAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAeK;AAyBP;AAAA,EACE,iCAAAC;AAAA,EACA;AAAA,EACA,6BAAAC;AAAA,EACA,4BAAAC;AAAA,EACA,wBAAAC;AAAA,OACK;AAgRH,SAqPuC,YAAAC,YApPrC,OAAAC,OADF,QAAAC,cAAA;AA7OJ,IAAMC,4BAA2B;AAiCjC,SAAS,uBAAsC;AAC7C,QAAM,UAAU,OAAO,KAAK,eAAe,QAAQ;AACnD,MAAI,SAAS;AACX,YAAQ,SAAS;AACjB,YAAQ,SAAS,KAAK;AACtB,YAAQ,SAAS,MAAM,yRAAiR;AACxS,YAAQ,SAAS,MAAM;AAAA,EACzB;AACA,SAAO;AACT;AAEA,SAAS,YAAY,MAAY,SAA8B;AAC7D,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,MAAI,QAAS,SAAQ,SAAS,QAAQ,GAAG;AAAA,OACpC;AACH,UAAM,OAAO,SAAS,cAAc,GAAG;AACvC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,MAAM;AACX,SAAK,MAAM;AAAA,EACb;AACA,SAAO,WAAW,MAAM,IAAI,gBAAgB,GAAG,GAAG,IAAS;AAC7D;AAMA,eAAsB,uBAAuB,SAA6C;AACxF,QAAM,UAAU,qBAAqB;AACrC,MAAI;AACF,gBAAY,MAAM,QAAQ,GAAG,OAAO;AAAA,EACtC,SAAS,OAAO;AACd,aAAS,MAAM;AACf,UAAM;AAAA,EACR;AACF;AAEO,SAAS,iBAAiB;AAAA,EAC/B,QAAQ;AAAA,EACR,kBAAkBC;AAAA,EAClB;AAAA,EACA,aAAaC;AAAA,EACb,kBAAkBF;AAAA,EAClB,UAAU;AAAA,EACV,OAAO;AACT,GAAoD;AAClD,QAAM,CAAC,MAAM,OAAO,IAAIG,WAAmC,IAAI;AAC/D,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAuB,IAAI;AACrD,QAAM,CAAC,WAAW,YAAY,IAAIA,WAAS,OAAO;AAClD,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAS,KAAK;AACtD,QAAM,CAAC,YAAY,aAAa,IAAIA,WAAS,KAAK;AAClD,QAAM,UAAUC,QAAO,IAAI;AAC3B,QAAM,SAASC,SAAQ,MAAM,0BAA0B;AAAA,IACrD,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC,GAAG,CAAC,YAAY,eAAe,YAAY,gBAAgB,eAAe,CAAC;AAE5E,EAAAC,WAAU,MAAM;AACd,YAAQ,IAAI;AACZ,aAAS,IAAI;AACb,iBAAa,OAAO;AAAA,EACtB,GAAG,CAAC,SAAS,cAAc,CAAC;AAE5B,EAAAA,WAAU,MAAM;AACd,YAAQ,UAAU;AAClB,WAAO,MAAM;AACX,cAAQ,UAAU;AAClB,aAAO,aAAa;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,UAAUC,aAAY,YAAY;AACtC,QAAI,CAAC,QAAS;AACd,oBAAgB,IAAI;AACpB,QAAI;AACF,YAAM,OAAO,MAAM,OAAO,aAAa;AACvC,UAAI,CAAC,QAAQ,QAAS;AACtB,cAAQ,IAAI;AACZ,eAAS,IAAI;AAAA,IACf,SAAS,OAAO;AACd,UAAI,QAAQ,QAAS,UAAS,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,2BAA2B,CAAC;AAAA,IACvG,UAAE;AACA,UAAI,QAAQ,SAAS;AACnB,qBAAa,KAAK;AAClB,wBAAgB,KAAK;AAAA,MACvB;AAAA,IACF;AAAA,EACF,GAAG,CAAC,QAAQ,OAAO,CAAC;AAEpB,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,QAAS;AACd,SAAK,QAAQ;AACb,UAAM,WAAW,kBAAkB,IAAI,OAAO,YAAY,MAAM,KAAK,QAAQ,GAAG,eAAe,IAAI;AACnG,UAAM,UAAU,MAAM,KAAK,QAAQ;AACnC,WAAO,iBAAiB,SAAS,OAAO;AACxC,WAAO,MAAM;AACX,UAAI,SAAU,QAAO,cAAc,QAAQ;AAC3C,aAAO,oBAAoB,SAAS,OAAO;AAAA,IAC7C;AAAA,EACF,GAAG,CAAC,SAAS,SAAS,eAAe,CAAC;AAEtC,QAAM,SAASC,aAAY,OAAO,SAA2C;AAC3E,kBAAc,IAAI;AAClB,aAAS,IAAI;AACb,QAAI;AACF,YAAM,OAAO,MAAM,KAAK;AACxB,UAAI,QAAQ,QAAS,SAAQ,IAAI;AACjC,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,sDAAsD;AACnH,UAAI,QAAQ,QAAS,UAAS,SAAS;AACvC,YAAM;AAAA,IACR,UAAE;AACA,UAAI,QAAQ,QAAS,eAAc,KAAK;AAAA,IAC1C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAiBA,aAAY,OAAO,eAAiD;AACzF,UAAM,uBAAuB,MAAM,OAAO,cAAc,WAAW,EAAE,CAAC;AAAA,EACxE,GAAG,CAAC,MAAM,CAAC;AACX,QAAM,UAAUA,aAAY,OAAOC,cAA8B;AAC/D,UAAM,uBAAuB,MAAM,OAAO,OAAOA,UAAS,EAAE,CAAC;AAAA,EAC/D,GAAG,CAAC,MAAM,CAAC;AACX,QAAM,iBAAiBD,aAAY,YAAY;AAC7C,aAAS,IAAI;AACb,QAAI;AACF,YAAM,uBAAuB,MAAM,OAAO,UAAU,CAAC;AAAA,IACvD,SAAS,OAAO;AACd,YAAM,YAAY,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,wCAAwC;AACrG,UAAI,QAAQ,QAAS,UAAS,SAAS;AACvC,YAAM;AAAA,IACR;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,4BAA4B,CAAC,OAAO,gBAAgB,OAAO,2BAA2B,OAAO,WAAW;AAAA,IACxG,iCAAiC,CAAC,IAAI,gBAAgB,OAAO,gCAAgC,IAAI,WAAW;AAAA,IAC5G,oBAAoB,MAAM,OAAO,mBAAmB;AAAA,IACpD,eAAe,CAAC,iBAAiB,OAAO,cAAc,YAAY;AAAA,IAClE;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,CAAC,UAAU,OAAO,MAAM,OAAO,UAAU,KAAK,CAAC;AAAA,IAC1D,YAAY,CAAC,UAAU,OAAO,MAAM,OAAO,WAAW,KAAK,CAAC;AAAA,IAC5D,aAAa,CAAC,UAAU,OAAO,MAAM,OAAO,YAAY,KAAK,CAAC;AAAA,IAC9D,oBAAoB,CAAC,UAAU,OAAO,MAAM,OAAO,mBAAmB,KAAK,CAAC;AAAA,IAC5E,cAAc,CAAC,UAAU,OAAO,MAAM,OAAO,aAAa,KAAK,CAAC;AAAA,IAChE,eAAe,CAAC,UAAU,OAAO,MAAM,OAAO,cAAc,KAAK,CAAC;AAAA,IAClE,mBAAmB,CAAC,UAAU,OAAO,MAAM,OAAO,kBAAkB,KAAK,CAAC;AAAA,IAC1E,kBAAkB,CAAC,UAAU,OAAO,MAAM,OAAO,iBAAiB,KAAK,CAAC;AAAA,IACxE,iBAAiB,CAAC,UAAU,OAAO,MAAM,OAAO,gBAAgB,KAAK,CAAC;AAAA,EACxE;AACF;AA0BA,SAAS,gBAAgB,EAAE,UAAU,OAAO,OAAO,OAAO,QAAQ,GAA8F;AAC9J,QAAM,SAASH,QAA8B,IAAI;AACjD,QAAM,aAAaA,QAAO,OAAO;AACjC,aAAW,UAAU;AACrB,EAAAE,WAAU,MAAM;AACd,UAAM,WAAW,SAAS;AAC1B,WAAO,SAAS,MAAM;AACtB,UAAM,YAAY,CAAC,UAAyB,MAAM,QAAQ,YAAY,WAAW,QAAQ;AACzF,aAAS,iBAAiB,WAAW,SAAS;AAC9C,WAAO,MAAM;AACX,eAAS,oBAAoB,WAAW,SAAS;AACjD,gBAAU,MAAM;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,CAAC;AACL,SAAO,gBAAAR,MAAC,SAAI,WAAU,gCAA+B,aAAa,CAAC,UAAU,MAAM,kBAAkB,MAAM,UAAU,QAAQ,GAC3H,0BAAAC,OAAC,SAAI,KAAK,QAAQ,WAAW,CAAC,uBAAuB,OAAO,SAAS,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,MAAK,UAAS,cAAW,QAAO,cAAY,OAAO,UAAU,IAC/J;AAAA,oBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,6BAA4B,cAAW,SAAQ,SAAS,SAAS,kBAAC;AAAA,IAAU;AAAA,KAC9G,GACF;AACF;AAEA,SAAS,uBAAuB,OAA2C;AACzE,SAAQ,+BAAqD,SAAS,KAAK,IACvE,QACA;AACN;AAEA,SAAS,oBAAoB,QAAoD;AAC/E,QAAM,OAAO,oBAAI,IAAY;AAC7B,SAAO,OAAO,QAAQ,CAAC,UAAU;AAC/B,UAAM,UAAU,OAAO,KAAK;AAC5B,QAAI,CAAC,QAAS,QAAO,CAAC;AACtB,UAAM,MAAM,QAAQ,kBAAkB;AACtC,QAAI,KAAK,IAAI,GAAG,EAAG,QAAO,CAAC;AAC3B,SAAK,IAAI,GAAG;AACZ,WAAO,CAAC,OAAO;AAAA,EACjB,CAAC;AACH;AAEA,SAAS,8BAA8B,EAAE,SAAS,GAAqE;AACrH,QAAM,YAAY,SAAS;AAC3B,QAAM,aAAa,WAAW,cAAc,CAAC;AAC7C,QAAM,SAAS,oBAAoB;AAAA,IACjC,SAAS,SAAS;AAAA,IAClB,GAAI,WAAW,oBAAoB,CAAC;AAAA,IACpC,GAAG,WAAW,IAAI,CAAC,YAAY,QAAQ,KAAK;AAAA,EAC9C,CAAC;AACD,QAAM,SAAS,oBAAoB;AAAA,IACjC,SAAS,SAAS;AAAA,IAClB,SAAS,SAAS;AAAA,IAClB,GAAI,WAAW,kBAAkB,CAAC;AAAA,IAClC,GAAG,WAAW,IAAI,CAAC,YAAY,QAAQ,KAAK;AAAA,EAC9C,CAAC;AACD,QAAM,QAAQ,oBAAoB;AAAA,IAChC,SAAS,SAAS;AAAA,IAClB,GAAG,WAAW,IAAI,CAAC,YAAY,QAAQ,GAAG;AAAA,EAC5C,CAAC;AACD,QAAM,UAAU,oBAAoB;AAAA,IAClC,SAAS,SAAS;AAAA,IAClB,GAAI,WAAW,cAAc,CAAC;AAAA,IAC9B,GAAG,WAAW,IAAI,CAAC,YAAY,QAAQ,SAAS;AAAA,IAChD,WAAW;AAAA,EACb,CAAC;AACD,QAAM,mBAAmB,oBAAoB;AAAA,IAC3C,SAAS,SAAS;AAAA,IAClB,IAAI,WAAW,oBAAoB,CAAC,GAAG,IAAI,CAAC,UAAU,MAAM,OAAO;AAAA,IACnE,GAAG,WAAW,IAAI,CAAC,YAAY,QAAQ,OAAO;AAAA,EAChD,CAAC;AACD,QAAM,UAAU;AAAA,IACd,EAAE,OAAO,SAAS,QAAQ,QAAQ,MAAM,CAAC,UAAkB,OAAO,MAAM,QAAQ,WAAW,EAAE,CAAC,GAAG;AAAA,IACjG,EAAE,OAAO,SAAS,QAAQ,QAAQ,MAAM,CAAC,UAAkB,UAAU,KAAK,GAAG;AAAA,IAC7E,EAAE,OAAO,OAAO,QAAQ,MAAM;AAAA,IAC9B,EAAE,OAAO,UAAU,QAAQ,SAAS,MAAM,CAAC,UAAkB,MAAM;AAAA,IACnE,EAAE,OAAO,QAAQ,QAAQ,iBAAiB;AAAA,EAC5C,EAAE,OAAO,CAAC,WAAW,OAAO,OAAO,MAAM;AAEzC,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,SAAO,gBAAAC,OAAC,WAAM,WAAU,mCACtB;AAAA,oBAAAD,MAAC,YAAO,sDAAwC;AAAA,IAChD,gBAAAC,OAAC,UAAK;AAAA;AAAA,MAAS,SAAS;AAAA,MAAU;AAAA,OAA4B;AAAA,IAC9D,gBAAAD,MAAC,QAAI,kBAAQ,IAAI,CAAC,WAAW,gBAAAC,OAAC,SAC5B;AAAA,sBAAAD,MAAC,QAAI,iBAAO,OAAM;AAAA,MAClB,gBAAAA,MAAC,QAAI,iBAAO,OAAO,IAAI,CAAC,OAAO,UAAU,gBAAAC,OAAC,UAAkB;AAAA,gBAAQ,WAAQ;AAAA,QAAI,OAAO,OACnF,gBAAAD,MAAC,OAAE,MAAM,OAAO,KAAK,KAAK,GAAI,GAAI,OAAO,UAAU,WAAW,EAAE,QAAQ,UAAU,KAAK,aAAa,IAAI,CAAC,GAAK,iBAAM,IACpH;AAAA,WAFgD,KAE1C,CAAO,GAAE;AAAA,SAJkB,OAAO,KAK9C,CAAM,GAAE;AAAA,KACV;AACF;AAEA,SAAS,eAAe,MAA8C;AACpE,QAAM,UAAU,KAAK,KAAK,iBAAiB;AAC3C,QAAM,YAAY,KAAK,KAAK,iBAAiB;AAC7C,QAAM,WAAW,KAAK,KAAK,iBAAiB;AAC5C,QAAM,YAAY,KAAK,QAAQ,KAAK,KAAK,EAAE,MAAM,KAAK;AACtD,QAAM,YAAY,KAAK,QAAQ,aAAa,UAAU,CAAC,KAAK;AAC5D,QAAM,WAAW,KAAK,QAAQ,YAAY,UAAU,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK;AAC1E,SAAO;AAAA,IACL,aAAa,KAAK,KAAK;AAAA,IACvB,SAAS;AAAA,MACP;AAAA,MACA,GAAI,KAAK,QAAQ,aAAa,EAAE,YAAY,KAAK,QAAQ,WAAW,IAAI,CAAC;AAAA,MACzE;AAAA,MACA,aAAa,KAAK,QAAQ,OAAO;AAAA,MACjC,GAAI,KAAK,QAAQ,QAAQ,EAAE,OAAO,KAAK,QAAQ,MAAM,IAAI,CAAC;AAAA,MAC1D,SAAS;AAAA,QACP,OAAO,KAAK,QAAQ,SAAS,SAAS;AAAA,QACtC,MAAM,KAAK,QAAQ,SAAS,QAAQ;AAAA,QACpC,OAAO,KAAK,QAAQ,SAAS,SAAS;AAAA,QACtC,YAAY,KAAK,QAAQ,SAAS,cAAc;AAAA,MAClD;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,aAAa,KAAK,OAAO,eAAe;AAAA,MACxC,GAAI,KAAK,OAAO,YAAY,EAAE,WAAW,KAAK,OAAO,UAAU,IAAI,CAAC;AAAA,MACpE,UAAU,KAAK,OAAO,YAAY;AAAA,MAClC,cAAc,KAAK,OAAO,OAAO;AAAA,MACjC,GAAI,KAAK,OAAO,oBAAoB,EAAE,aAAa,KAAK,OAAO,kBAAkB,IAAI,CAAC;AAAA,MACtF,GAAI,KAAK,OAAO,iBAAiB,KAAK,OAAO,kBAAkB;AAAA,QAC7D,qBAAqB,EAAE,IAAI,KAAK,OAAO,eAAe,MAAM,KAAK,OAAO,gBAAgB;AAAA,MAC1F,IAAI,CAAC;AAAA,IACP;AAAA,IACA,SAAS;AAAA,MACP,MAAM,KAAK,KAAK;AAAA,MAChB,GAAI,KAAK,KAAK,WAAW,SAAY,EAAE,SAAS,KAAK,KAAK,OAAO,IAAI,CAAC;AAAA,MACtE,GAAI,KAAK,KAAK,wBAAwB,SAAY,EAAE,qBAAqB,KAAK,KAAK,oBAAoB,IAAI,CAAC;AAAA,IAC9G;AAAA,IACA,GAAI,UAAU,EAAE,iBAAiB;AAAA,MAC/B,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,KAAK,QAAQ;AAAA,MACb,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAChD,SAAS;AAAA,QACP,OAAO,QAAQ,iBAAiB;AAAA,QAChC,MAAM,QAAQ,eAAe;AAAA,QAC7B,OAAO,QAAQ,gBAAgB;AAAA,QAC/B,YAAY,QAAQ,cAAc;AAAA,MACpC;AAAA,IACF,EAAE,IAAI,CAAC;AAAA,IACP,GAAI,YAAY,EAAE,mBAAmB;AAAA,MACnC,MAAM,UAAU;AAAA,MAChB,KAAK,UAAU;AAAA,MACf,GAAI,UAAU,WAAW,EAAE,UAAU,UAAU,SAAS,IAAI,CAAC;AAAA,MAC7D,GAAI,UAAU,YAAY,EAAE,WAAW,UAAU,UAAU,IAAI,CAAC;AAAA,MAChE,GAAI,UAAU,gBAAgB,EAAE,eAAe,UAAU,cAAc,IAAI,CAAC;AAAA,MAC5E,GAAI,UAAU,eAAe,EAAE,cAAc,UAAU,aAAa,IAAI,CAAC;AAAA,MACzE,GAAI,UAAU,UAAU,SAAY,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,MAClE,GAAI,UAAU,UAAU,SAAY,EAAE,OAAO,UAAU,MAAM,IAAI,CAAC;AAAA,IACpE,EAAE,IAAI,CAAC;AAAA,IACP,GAAI,WAAW,EAAE,iBAAiB;AAAA,MAChC,GAAI,SAAS,OAAO,EAAE,MAAM,SAAS,KAAK,IAAI,CAAC;AAAA,MAC/C,SAAS,EAAE,OAAO,SAAS,QAAQ,MAAM,SAAS,MAAM,OAAO,SAAS,OAAO,YAAY,SAAS,IAAI;AAAA,MACxG,GAAI,SAAS,UAAU,EAAE,oBAAoB,SAAS,QAAQ,IAAI,CAAC;AAAA,IACrE,EAAE,IAAI,CAAC;AAAA,IACP,WAAW,KAAK,OAAO,WAAW,IAAI,CAAC,cAAc,UAAU,IAAI,KAC9D,CAAC,GAAI,KAAK,OAAO,kBAAkB,CAAC,CAAE;AAAA,IAC3C,cAAc,KAAK,KAAK,UAAU,IAAI,CAAC,UAAU;AAAA,MAC/C,MAAM,KAAK;AAAA,MACX,WAAW,CAAC,GAAG,KAAK,SAAS;AAAA,MAC7B,OAAO,KAAK;AAAA,MACZ,QAAQ,KAAK;AAAA,MACb,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI,CAAC;AAAA,MAC5D,GAAI,KAAK,mBAAmB,SAAY,EAAE,gBAAgB,KAAK,eAAe,IAAI,CAAC;AAAA,MACnF,GAAI,KAAK,oBAAoB,EAAE,mBAAmB,CAAC,GAAG,KAAK,iBAAiB,EAAE,IAAI,CAAC;AAAA,IACrF,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,QAAgB;AACvB,QAAM,MAAM,oBAAI,KAAK;AACrB,SAAO,IAAI,KAAK,IAAI,QAAQ,IAAI,IAAI,kBAAkB,IAAI,GAAM,EAAE,YAAY,EAAE,MAAM,GAAG,EAAE;AAC7F;AAEA,SAAS,OAAO,SAAyB;AACvC,QAAM,CAAC,MAAM,OAAO,GAAG,IAAI,QAAQ,MAAM,GAAG;AAC5C,SAAO,QAAQ,SAAS,MAAM,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5D;AAEA,SAAS,YAAY,QAAoC;AACvD,MAAI,OAAO,OAAO,WAAY,QAAO;AACrC,MAAI,OAAO,OAAO,kBAAmB,QAAO;AAC5C,MAAI,OAAO,OAAO,gBAAiB,QAAO;AAC1C,MAAI,OAAO,OAAO,eAAgB,QAAO;AACzC,MAAI,OAAO,OAAO,QAAS,QAAO;AAClC,MAAI,OAAO,OAAO,SAAU,QAAO;AACnC,MAAI,OAAO,OAAO,iBAAkB,QAAO;AAC3C,MAAI,OAAO,OAAO,qBAAsB,QAAO;AAC/C,SAAO;AACT;AAEA,SAAS,iBAAiB,OAAwF;AAChH,MAAI,UAAU,YAAa,QAAO;AAAA,IAChC,EAAE,IAAI,YAAY,OAAO,qBAAqB,QAAQ,gDAAgD;AAAA,IACtG,EAAE,IAAI,YAAY,OAAO,qBAAqB,QAAQ,0CAA0C;AAAA,EAClG;AACA,MAAI,UAAU,cAAc,UAAU,gBAAiB,QAAO;AAAA,IAC5D,EAAE,IAAI,aAAa,OAAO,oBAAoB,QAAQ,2DAA2D;AAAA,IACjH,EAAE,IAAI,UAAU,OAAO,gBAAgB,QAAQ,0DAA0D;AAAA,EAC3G;AACA,SAAO,CAAC;AACV;AAEO,SAAS,0BAA0B,aAA+C,UAAU,OAAgB;AACjH,SAAO,WAAW,gBAAgB;AACpC;AAEO,SAAS,uBAAuB,EAAE,YAAY,WAAW,yBAAyB,4BAA4B,kBAAkB,OAAO,WAAW,OAAO,iBAAiB,eAAe,WAAW,GAAG,QAAQ,GAA8C;AAClQ,QAAM,YAAY,iBAAiB,OAAO;AAC1C,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,CAAC,KAAK,MAAM,IAAIK,WAAc,SAAS;AAC7C,QAAM,CAAC,OAAO,QAAQ,IAAIA,WAAgB,EAAE;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAS,EAAE;AACvC,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAS,EAAE;AACvC,QAAM,CAAC,iBAAiB,kBAAkB,IAAIA,WAAS,EAAE;AACzD,QAAM,CAAC,cAAc,eAAe,IAAIA,WAAS,EAAE;AACnD,QAAM,CAAC,SAAS,UAAU,IAAIA,WAA+B,EAAE,QAAQ,GAAG,eAAe,GAAG,gBAAgB,GAAG,QAAQ,SAAS,aAAa,IAAI,aAAa,MAAM,GAAG,MAAM,GAAG,CAAC;AACjL,QAAM,CAAC,QAAQ,SAAS,IAAIA,WAAkC,EAAE,QAAQ,IAAI,yBAAyB,IAAI,gBAAgB,QAAW,eAAe,CAAC,GAAG,OAAO,QAAQ,CAAC;AACvK,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,WAAqC,IAAI;AAC3F,QAAM,CAAC,wBAAwB,yBAAyB,IAAIA,WAAS,EAAE;AACvE,QAAM,QAAQ,WAAW,KAAK,IAAI,EAAE,WAAW,UAAU,KAAK,EAAE,IAAI,CAAC;AACrE,QAAM,WAAWC,QAAiC,IAAI;AACtD,QAAM,wBAAwBC,SAAQ,MAAM,OAAO,eAAe,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AACtF,QAAM,wBAAwBA,SAA0C,MAAM,OAAO,KAAK,KAAK,YAAY,IAAI,CAAC,eAAe;AAC7H,UAAM,eAAe,uBAAuB,WAAW,YAAY;AACnE,UAAM,OAAO,iBAAiB;AAC9B,WAAO;AAAA,MACL,IAAI,WAAW;AAAA,MACf,UAAU,WAAW;AAAA,MACrB;AAAA,MACA,GAAI,WAAW,cAAc,EAAE,aAAa,WAAW,YAAY,IAAI,CAAC;AAAA,MACxE,GAAI,WAAW,aAAa,EAAE,gBAAgB,WAAW,WAAW,IAAI,CAAC;AAAA,MACzE,UAAU,MAAM,UAAU,cAAc,WAAW,EAAE;AAAA,MACrD,GAAI,OAAO,EAAE,cAAc,MAAM,WAAW,MAAM,IAAI,EAAE,WAAW,KAAK;AAAA,IAC1E;AAAA,EACF,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC;AAC1B,QAAM,4BAA4BA,SAAQ,MAAM,MAAM,WAAW,QAC7D,QAAQ,CAAC,UAAU,MAAM,cAAc,CAAC,CAAC,EAC1C,OAAO,CAAC,MAAM,OAAO,WAAW,OAAO,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEhF,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,SAAS,SAAS,QAAS;AACxC,aAAS,UAAU;AACnB,gBAAY,IAAI;AAChB,UAAM,iBAAiB,KAAK,WAAW,sBAAsB,OACzD,KAAK,KAAK,aACV,KAAK,IAAI,GAAG,KAAK,WAAW,oBAAoB,KAAK,WAAW,eAAe;AACnF,eAAW,CAAC,aAAa;AAAA,MACvB,GAAG;AAAA,MACH,QAAQ,QAAQ,SAAS,KAAK,QAAQ,UAAU,KAAK,KAAK,aACtD,QAAQ,SACR,KAAK,IAAI,KAAK,KAAK,YAAY,kBAAkB,KAAK,KAAK,UAAU;AAAA,MACzE,eAAe;AAAA,MACf,gBAAgB;AAAA,IAClB,EAAE;AACF,cAAU,CAAC,aAAa;AAAA,MACtB,GAAG;AAAA,MACH,gBAAgB,QAAQ,kBAAkB,KAAK,KAAK;AAAA,MACpD,eAAe,QAAQ,cAAc,SAAS,QAAQ,cAAc,OAAO,CAAC,OAAO,KAAK,KAAK,YAAY,KAAK,CAACE,cAAaA,UAAS,OAAO,EAAE,CAAC,IAAI,KAAK,KAAK,YAAY,IAAI,CAACA,cAAaA,UAAS,EAAE;AAAA,IACxM,EAAE;AAAA,EACJ,GAAG,CAAC,MAAM,SAAS,CAAC;AAEpB,MAAI,UAAU,aAAa,CAAC,KAAM,QAAO,gBAAAV,MAAAD,YAAA,EAAG,6BAAmB,gBAAAC,MAAC,SAAI,WAAU,wBAAuB,gCAAa,GAAO;AACzH,MAAI,CAAC,MAAM;AACT,UAAM,QAAQ,UAAU,SAAS,IAAI,MAAM,2BAA2B;AACtE,WAAO,gBAAAA,MAAAD,YAAA,EAAG,0BAAgB,OAAO,UAAU,OAAO,KAAK,gBAAAE,OAAC,SAAI,WAAU,sBAAqB,MAAK,SAAQ;AAAA,sBAAAD,MAAC,YAAO,qCAAuB;AAAA,MAAS,gBAAAA,MAAC,UAAM,gBAAM,SAAQ;AAAA,MAAO,gBAAAA,MAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,UAAU,QAAQ,GAAG,uBAAS;AAAA,OAAS,GAAO;AAAA,EACtQ;AAEA,QAAM,WAAW,OAAO,SAAiB,SAAiC;AACxE,cAAU,EAAE;AACZ,QAAI;AACF,YAAM,KAAK;AACX,eAAS,EAAE;AACX,gBAAU,EAAE;AACZ,gBAAU,OAAO;AAAA,IACnB,QAAQ;AAAA,IAER;AAAA,EACF;AACA,QAAM,mBAAmB,OAAO,UAAmC;AACjE,cAAU,EAAE;AACZ,uBAAmB,EAAE;AACrB,QAAI;AACF,YAAM,YAAY,MAAM,+BAA+B;AAAA,QACrD,aAAa;AAAA,QACb,aAAa,MAAM;AAAA,QACnB,8BAA8B,MAAM;AAAA,QACpC,SAAS,MAAM;AAAA,QACf,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAClD,CAAC;AACD,YAAM,UAAU,aAAa;AAAA,QAC3B,MAAM,MAAM;AAAA,QACZ,GAAI,UAAU,SAAS,EAAE,UAAU,IAAI,CAAC;AAAA,QACxC,GAAI,OAAO,KAAK,IAAI,EAAE,QAAQ,OAAO,KAAK,EAAE,IAAI,CAAC;AAAA,QACjD,GAAG;AAAA,MACL,CAAC;AAAA,IACH,SAAS,OAAO;AAId;AAAA,QACE,iBAAiB,SAAS,MAAM,UAC5B,MAAM,UACN;AAAA,MACN;AACA;AAAA,IACF;AACA,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,cAAU,4BAA4B;AAAA,EACxC;AACA,QAAM,wBAAwB,OAAO,UAAmC;AACtE,cAAU,EAAE;AACZ,oBAAgB,EAAE;AAClB,QAAI;AACF,YAAM,YAAY,MAAM,+BAA+B;AAAA,QACrD,aAAa;AAAA,QACb,aAAa,MAAM;AAAA,QACnB,8BAA8B,MAAM;AAAA,QACpC,SAAS,MAAM;AAAA,QACf,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,MAClD,CAAC;AACD,YAAM,UAAU,cAAc;AAAA,QAC5B,MAAM,MAAM;AAAA,QACZ,GAAI,UAAU,SAAS,EAAE,UAAU,IAAI,CAAC;AAAA,QACxC,GAAI,OAAO,KAAK,IAAI,EAAE,QAAQ,OAAO,KAAK,EAAE,IAAI,CAAC;AAAA,QACjD,GAAG;AAAA,MACL,CAA8B;AAAA,IAChC,SAAS,OAAO;AAId;AAAA,QACE,iBAAiB,SAAS,MAAM,UAC5B,MAAM,UACN;AAAA,MACN;AACA;AAAA,IACF;AACA,aAAS,EAAE;AACX,cAAU,EAAE;AACZ,cAAU,qBAAqB;AAAA,EACjC;AACA,QAAM,wBAAwB,MAAM;AAClC,8BAA0B,EAAE;AAC5B,QAAI,kBAAmB;AACvB,cAAU,mBAAmB,EAC1B,KAAK,CAACW,aAAY,qBAAqBA,QAAO,CAAC,EAC/C,MAAM,CAAC,UAAU,0BAA0B,iBAAiB,QAAQ,MAAM,UAAU,uCAAuC,CAAC;AAAA,EACjI;AACA,QAAM,UAAU,KAAK,UAAU,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO,cAAc,OAAO,OAAO;AAClG,QAAM,mBAAmB,oBAAI,IAA+B,CAAC,YAAY,mBAAmB,iBAAiB,gBAAgB,SAAS,UAAU,kBAAkB,oBAAoB,CAAC;AACvL,QAAM,UAAU,KAAK,UAAU,QAAQ,OAAO,CAAC,WAAW,OAAO,WAAW,iBAAiB,IAAI,OAAO,EAAE,CAAC;AAC3G,QAAM,sBAAsB,0BAA0B,KAAK,aAAa,eAAe;AACvF,QAAM,cAAc,sBAAsB,iBAAiB,KAAK,UAAU,KAAK,IAAI,CAAC;AACpF,QAAM,cAAc,KAAK,UAAU,iCAAiC,KAAK,OAAO,IAAI,CAAC;AACrF,QAAM,iBAAiB,yBAAyB,KAAK,QAAQ;AAC7D,QAAM,kBAAkB,KAAK,WAAW,CAAC,GAAG,OAAO,CAAC,UAAU,MAAM,SAAS,gBAAgB,MAAM,SAAS,KAAK;AACjH,QAAM,iBAAiB,qBAAqB,KAAK,IAAI;AAErD,SAAO,gBAAAV,OAAC,aAAQ,WAAW,CAAC,0BAA0B,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAAG,OAAO,wBAAwB,YAAY,KAAK,GAC1I;AAAA,oBAAAD,MAAC,WAAO,sCAA2B;AAAA,IAClC,YAAY,UAAU,IAAI,gBAAAA,MAAC,yBAAsB,OAAO,aAAa,UAAU,MAAM,OAAO,SAAS,GAAI,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,IAAK;AAAA,IACrJ,KAAK,UAAU,MAAM,YAAY,MAAM,cAAc,KAAK,YACvD,gBAAAA,MAAC,uBAAoB,WAAW,KAAK,WAAW,aAAa,KAAK,UAAU,eAAe,MAAO,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,IACzI,gBAAAA,MAAC,yBAAsB,OAAO,KAAK,UAAU,OAAO,cAAc,KAAK,UAAU,cAAc,aAAa,KAAK,UAAU,eAAe,MAAM,WAAW,KAAK,UAAU,aAAa,MAAO,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI;AAAA,IAEzO,gBAAAC,OAAC,YAAO,WAAU,qBAChB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,SAAI,WAAU,sBAAqB,0BAAAC,OAAC,QAAG;AAAA;AAAA,UAAO,KAAK,KAAK;AAAA,WAAW,GAAK;AAAA,QAAM,gBAAAA,OAAC,OAAE;AAAA;AAAA,UAAO,KAAK,OAAO,eAAe;AAAA,UAAK,UAAU,eAAe,2BAAmB;AAAA,WAAG;AAAA,SAAI;AAAA,MACjL,gBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,YAAY,SAAS,MAAM,KAAK,UAAU,eAAe,EAAE,MAAM,MAAM,MAAS,GAAG,6BAAe;AAAA,OACtL;AAAA,IAEA,gBAAAC,OAAC,SAAI,WAAU,qBAAoB,MAAK,WAAU,cAAW,aAC3D;AAAA,sBAAAD,MAAC,YAAO,MAAK,UAAS,MAAK,OAAM,iBAAe,QAAQ,WAAW,SAAS,MAAM,OAAO,SAAS,GAAG,0BAAY;AAAA,MACjH,gBAAAA,MAAC,YAAO,MAAK,UAAS,MAAK,OAAM,iBAAe,QAAQ,WAAW,SAAS,MAAM,OAAO,SAAS,GAAG,0BAAY;AAAA,OACnH;AAAA,IAEC,QAAQ,YAAY,gBAAAC,OAAC,SAAI,WAAU,yBAAwB,MAAK,YAC7D;AAAA,WAAK,KAAK,UAAU,KAAK,SAAS,UAAU,CAAC,aAAa,UAAU,gBAAgB,EAAE,SAAS,KAAK,UAAU,KAAK,IAAK,gBAAAD,MAAC,2BAAwB,YAAY,KAAK,YAAY,MAAM,KAAK,MAAM,UAAU,KAAK,UAAU,aAAa,KAAK,UAAU,eAAe,MAAM,WAAW,UAAU,SAAU,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,IAAK;AAAA,MAErV,sBAAsB,gBAAAC,OAAC,aAAQ,WAAU,0BAAyB,cAAW,+BAA8B;AAAA,wBAAAA,OAAC,SAAI;AAAA,0BAAAD,MAAC,UAAK,mCAAqB;AAAA,UAAO,gBAAAA,MAAC,QAAG,8CAAgC;AAAA,UAAK,gBAAAA,MAAC,OAAE,sIAAwH;AAAA,WAAI;AAAA,QAAO,YAAY,SAAS,gBAAAA,MAAC,SAAI,WAAU,kCAAkC,sBAAY,IAAI,CAAC,aAAa,gBAAAC,OAAC,YAAO,MAAK,UAA2B,UAAU,UAAU,YAAY,SAAS,MAAM,KAAK,SAAS,GAAG,SAAS,KAAK,eAAe,MAAM,UAAU,gBAAgB,EAAE,UAAU,SAAS,GAAG,CAAC,CAAC,GAAG;AAAA,0BAAAD,MAAC,YAAQ,mBAAS,OAAM;AAAA,UAAS,gBAAAA,MAAC,UAAM,mBAAS,QAAO;AAAA,aAA/N,SAAS,EAA6N,CAAS,GAAE,IAAS,gBAAAA,MAAC,OAAE,WAAU,+BAA8B,2GAA6F;AAAA,SAAK,IAAa;AAAA,MAEr1B,gBAAAA,MAAC,oBAAiB,MAAY,kBAAkB,UAAU,gBAAiB,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI;AAAA,OACpH,IAAS,gBAAAA,MAAC,SAAI,WAAU,yBAAwB,MAAK,YAAY,eAAK,SAAS,SAC3E,gBAAAA,MAAC,oBAAiB,SAAS,KAAK,SAAS,gBAAgB,UAAU,gBAAiB,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,IAC3H,gBAAAA,MAAC,wBAAqB,QAAQ,KAAK,UAAW,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,GAAG;AAAA,IAE1F,WAAW,QAAQ,SAAU,gBAAAC,OAAC,WAAM,WAAU,8BAA6B,cAAW,gBACrF;AAAA,iBAAW,KAAK,KAAK,CAAC,IAAI,gBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,KAAK,UAAU,QAAQ,KAAK,KAAK,CAAC,CAAE,EAAE,MAAM,MAAM,MAAS,GAAI,kBAAQ,OAAM,IAAY;AAAA,MAClM,QAAQ,IAAI,CAAC,WAAW,gBAAAA,MAAC,YAAO,MAAK,UAAyB,WAAW,OAAO,UAAU,gCAAgC,iCAAiC,SAAS,MAAM;AACzK,cAAM,OAAO,YAAY,MAAM;AAC/B,YAAI,CAAC,KAAM;AACX,YAAI,SAAS,WAAY,oBAAmB,EAAE;AAC9C,YAAI,SAAS,kBAAmB,iBAAgB,EAAE;AAClD,YAAI,SAAS,iBAAkB,uBAAsB;AACrD,YAAI,SAAS,gBAAiB,WAAU,CAAC,YAAY,QAAQ,OAAO,KAAK,IAAI,UAAU,EAAE,GAAG,SAAS,QAAQ,8BAA8B,CAAC;AAC5I,iBAAS,IAAI;AAAA,MACf,GAAI,iBAAO,SARyC,OAAO,EAQ1C,CAAS;AAAA,OAC5B,IAAW;AAAA,IAEV,UAAU,cAAc,wBAAwB,gBAAAA,MAAC,mBAAgB,OAAM,wBAAuB,MAAI,MAAC,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,2BAA0B;AAAA,sBAAAD,MAAC,YAAO,0BAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,kCAAoB;AAAA,QAAK,gBAAAA,MAAC,OAAE,oIAAsH;AAAA,SAAI,GAAM;AAAA,MAAU,KAAK,gBAAgB,SAAS,gBAAAC,OAAC,SAAI,WAAU,6BAA4B;AAAA,wBAAAD,MAAC,YAAO,2CAA6B;AAAA,QAAS,gBAAAA,MAAC,UAAK,kGAAoF;AAAA,SAAO,IAAS;AAAA,MAAM,KAAK,YAAY,gBAAAC,OAAC,SAAI,WAAU,kCAAiC;AAAA,wBAAAD,MAAC,YAAQ,eAAK,UAAU,QAAO;AAAA,QAAU,KAAK,UAAU,QAAQ,IAAI,CAAC,OAAO,UAAU,gBAAAC,OAAC,UAAgD;AAAA,gBAAM,OAAO,GAAG,MAAM,IAAI,OAAO;AAAA,UAAI,MAAM;AAAA,aAAjF,GAAG,MAAM,QAAQ,OAAO,IAAI,KAAK,EAA4D,CAAO;AAAA,SAAE,IAAS;AAAA,MAAK,gBAAAD,MAAC,iCAA8B,UAAU,KAAK,UAAU;AAAA,MAAE,gBAAAC,OAAC,WAAM,WAAU,gCAA+B;AAAA,wBAAAD,MAAC,UAAK,wCAA0B;AAAA,QAAO,gBAAAA,MAAC,cAAS,OAAO,QAAQ,aAAY,qCAAoC,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,KAAK,GAAG;AAAA,SAAE;AAAA,MAAQ,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACznC,WAAU;AAAA,UACV,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,8BAA8B,UAAU;AAAA,UACxC,mCAAmC,UAAU;AAAA,UAC7C;AAAA,UACC,GAAI,6BAA6B,EAAE,2BAA2B,IAAI,CAAC;AAAA,UACpE,iBAAiB;AAAA,UACjB,kBAAkB,0BAA0B,SAAS,8GAA8G;AAAA,UACnK,aAAa,UAAU,aAAa,uBAAkB;AAAA,UACtD,SAAQ;AAAA,UACR,aAAY;AAAA,UACZ,UAAU,UAAU;AAAA,UACnB,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,UAC/D,GAAI,QAAQ,kBAAkB,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,UAC9E,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,UAC/D,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,UAChD,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA;AAAA,MACtC;AAAA,MAAG,kBAAkB,gBAAAA,MAAC,SAAI,WAAU,8BAA6B,MAAK,SAAS,2BAAgB,IAAS;AAAA,OAAK,GAAU,IAAqB;AAAA,IAE3I,UAAU,qBAAqB,wBAAwB,gBAAAA,MAAC,mBAAgB,OAAM,mBAAkB,MAAI,MAAC,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,2BAA0B;AAAA,sBAAAD,MAAC,YAAO,0BAAAC,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,6BAAe;AAAA,QAAK,gBAAAA,MAAC,OAAE,2LAAwK;AAAA,SAAI,GAAM;AAAA,MAAS,gBAAAC,OAAC,WAAM,WAAU,gCAA+B;AAAA,wBAAAD,MAAC,UAAK,wCAA0B;AAAA,QAAO,gBAAAA,MAAC,cAAS,OAAO,QAAQ,aAAY,sCAAqC,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,KAAK,GAAG;AAAA,SAAE;AAAA,MAAQ,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACjnB,WAAU;AAAA,UACV,aAAa;AAAA,UACb,aAAa;AAAA,UACb,UAAU;AAAA,UACV,8BAA8B,UAAU;AAAA,UACxC,mCAAmC,UAAU;AAAA,UAC7C;AAAA,UACC,GAAI,6BAA6B,EAAE,2BAA2B,IAAI,CAAC;AAAA,UACpE,kBAAiB;AAAA,UACjB,aAAa,UAAU,aAAa,qBAAgB;AAAA,UACpD,SAAQ;AAAA,UACR,aAAY;AAAA,UACZ,UAAU,UAAU;AAAA,UACnB,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,UAC/D,GAAI,QAAQ,kBAAkB,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,UAC9E,GAAI,QAAQ,aAAa,EAAE,YAAY,QAAQ,WAAW,IAAI,CAAC;AAAA,UAC/D,GAAI,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,UAChD,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA;AAAA,MACtC;AAAA,MAAG,eAAe,gBAAAA,MAAC,SAAI,WAAU,8BAA6B,MAAK,SAAS,wBAAa,IAAS;AAAA,OAAK,GAAU,IAAqB;AAAA,IAErI,UAAU,kBAAkB,gBAAAA,MAAC,mBAAgB,OAAM,wBAAuB,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,sBAAqB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,kCAAoB;AAAA,QAAK,gBAAAA,MAAC,OAAE,gGAAkF;AAAA,SAAI;AAAA,MAAO,iBAAiB,gBAAAC,OAAC,OAAE,WAAU,8BAA6B;AAAA;AAAA,QAAyE,OAAO,eAAe,OAAO;AAAA,QAAE;AAAA,QAAY,gBAAAD,MAAC,YAAQ,iBAAO,eAAe,QAAQ,GAAE;AAAA,QAAS;AAAA,SAAC,IAAO;AAAA,MAAK,gBAAAC,OAAC,SAAI,WAAU,2BAA0B;AAAA,wBAAAA,OAAC,WAAM,WAAU,QAAO;AAAA,0BAAAD,MAAC,UAAK,oBAAM;AAAA,UAAO,gBAAAA,MAAC,cAAS,UAAQ,MAAC,OAAO,OAAO,QAAQ,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,wCAA0B;AAAA,UAAO,gBAAAA,MAAC,WAAM,UAAQ,MAAC,OAAO,OAAO,yBAAyB,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,yBAAyB,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,6BAAe;AAAA,UAAO,gBAAAA,MAAC,WAAM,MAAK,UAAS,KAAI,QAAO,MAAK,QAAO,OAAO,OAAO,kBAAkB,IAAI,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,gBAAgB,MAAM,OAAO,QAAQ,OAAO,MAAM,OAAO,KAAK,IAAI,OAAU,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,sBAAQ;AAAA,UAAO,gBAAAC,OAAC,YAAO,OAAO,OAAO,OAAO,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,OAAO,MAAM,OAAO,MAA6B,EAAE,GAAG;AAAA,4BAAAD,MAAC,YAAO,OAAM,SAAQ,oBAAM;AAAA,YAAS,gBAAAA,MAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,YAAS,gBAAAA,MAAC,YAAO,OAAM,QAAO,kBAAI;AAAA,YAAS,gBAAAA,MAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,aAAS;AAAA,WAAS;AAAA,SAAQ;AAAA,MAAM,gBAAAC,OAAC,cAAS,WAAU,uBAAsB;AAAA,wBAAAD,MAAC,YAAO,+BAAiB;AAAA,QAAU,KAAK,KAAK,YAAY,IAAI,CAAC,eAAe,gBAAAC,OAAC,WAA0B;AAAA,0BAAAD,MAAC,WAAM,MAAK,YAAW,SAAS,OAAO,cAAc,SAAS,WAAW,EAAE,GAAG,UAAU,CAAC,UAAU,UAAU,CAAC,aAAa,EAAE,GAAG,SAAS,eAAe,MAAM,OAAO,UAAU,CAAC,GAAG,QAAQ,eAAe,WAAW,EAAE,IAAI,QAAQ,cAAc,OAAO,CAAC,OAAO,OAAO,WAAW,EAAE,EAAE,EAAE,GAAG;AAAA,UAAE,gBAAAC,OAAC,UAAK;AAAA,4BAAAD,MAAC,YAAQ,qBAAW,UAAS;AAAA,YAAS,gBAAAA,MAAC,WAAO,qBAAW,eAAe,WAAW,cAAa;AAAA,aAAQ;AAAA,UAAO,gBAAAA,MAAC,YAAO,MAAK,UAAS,SAAS,MAAM,KAAK,UAAU,eAAe,UAAU,EAAE,MAAM,MAAM,MAAS,GAAG,kBAAI;AAAA,aAA5gB,WAAW,EAA0gB,CAAQ;AAAA,SAAE;AAAA,MAAW,gBAAAC,OAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,cAAc,CAAC,OAAO,OAAO,KAAK,KAAK,CAAC,OAAO,wBAAwB,KAAK,GAAG,SAAS,MAAM,KAAK,SAAS,4BAA4B,MAAM,UAAU,mBAAmB,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,GAAI,oBAAU,aAAa,qBAAgB,wBAAuB;AAAA,SAAS;AAAA,OAAM,GAAU,IAAqB;AAAA,IAE3tF,UAAU,YAAY,gBAAAA,MAAC,mBAAgB,OAAM,gBAAe,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,sBAAqB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,0BAAY;AAAA,QAAK,gBAAAA,MAAC,OAAE,uFAAyE;AAAA,SAAI;AAAA,MAAM,gBAAAC,OAAC,SAAI,WAAU,2BAA0B;AAAA,wBAAAA,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,oCAAsB;AAAA,UAAO,gBAAAA,MAAC,WAAM,MAAK,UAAS,KAAI,QAAO,KAAK,KAAK,KAAK,YAAY,MAAK,QAAO,OAAO,QAAQ,UAAU,IAAI,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,OAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,qBAAO;AAAA,UAAO,gBAAAA,MAAC,WAAM,MAAK,UAAS,KAAI,KAAI,MAAK,QAAO,OAAO,QAAQ,iBAAiB,IAAI,aAAY,QAAO,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,eAAe,OAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,sBAAQ;AAAA,UAAO,gBAAAA,MAAC,WAAM,MAAK,UAAS,KAAI,KAAI,MAAK,QAAO,OAAO,QAAQ,kBAAkB,IAAI,aAAY,QAAO,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,gBAAgB,OAAO,MAAM,OAAO,KAAK,EAAE,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,oBAAM;AAAA,UAAO,gBAAAC,OAAC,YAAO,OAAO,QAAQ,QAAQ,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,QAAQ,MAAM,OAAO,MAAyB,EAAE,GAAG;AAAA,4BAAAD,MAAC,YAAO,OAAM,SAAQ,mBAAK;AAAA,YAAS,gBAAAA,MAAC,YAAO,OAAM,OAAM,iBAAG;AAAA,aAAS;AAAA,WAAS;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAM,kBAAQ,WAAW,UAAU,iBAAiB,iBAAgB;AAAA,UAAO,gBAAAA,MAAC,WAAM,OAAO,QAAQ,aAAa,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM;AAAA,0BAAAD,MAAC,UAAK,0BAAY;AAAA,UAAO,gBAAAA,MAAC,WAAM,UAAQ,MAAC,OAAO,QAAQ,aAAa,aAAY,cAAa,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,aAAa,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,QAAQ,gBAAAC,OAAC,WAAM,WAAU,QAAO;AAAA,0BAAAD,MAAC,UAAK,6BAAe;AAAA,UAAO,gBAAAA,MAAC,WAAM,OAAO,QAAQ,MAAM,UAAU,CAAC,UAAU,WAAW,CAAC,aAAa,EAAE,GAAG,SAAS,MAAM,MAAM,OAAO,MAAM,EAAE,GAAG;AAAA,WAAE;AAAA,SAAQ;AAAA,MAAM,gBAAAC,OAAC,SAAI,WAAU,oBAAmB;AAAA,wBAAAD,MAAC,UAAK,4BAAc;AAAA,QAAO,gBAAAA,MAAC,YAAQ,cAAI,KAAK,aAAa,QAAW,EAAE,OAAO,YAAY,UAAU,MAAM,CAAC,EAAE,OAAO,QAAQ,UAAU,QAAQ,iBAAiB,MAAM,QAAQ,kBAAkB,EAAE,GAAE;AAAA,SAAS;AAAA,MAAM,gBAAAC,OAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,cAAc,QAAQ,UAAU,KAAK,QAAQ,SAAS,KAAK,KAAK,eAAe,QAAQ,iBAAiB,KAAK,MAAM,QAAQ,kBAAkB,KAAK,KAAK,CAAC,QAAQ,aAAa,SAAS,MAAM,KAAK,SAAS,mBAAmB,MAAM,UAAU,YAAY,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,GAAI,oBAAU,aAAa,kBAAa,gBAAe;AAAA,SAAS;AAAA,OAAM,GAAU,IAAqB;AAAA,IAErrF,UAAU,WAAW,UAAU,WAAY,gBAAAA,MAAC,mBAAgB,OAAO,UAAU,UAAU,eAAe,eAAe,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,sBAAqB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAI,oBAAU,UAAU,eAAe,eAAc;AAAA,QAAK,gBAAAA,MAAC,OAAG,oBAAU,UAAU,2DAA2D,iFAAgF;AAAA,SAAI;AAAA,MAAM,gBAAAC,OAAC,WAAM;AAAA,wBAAAD,MAAC,UAAK,oBAAM;AAAA,QAAO,gBAAAA,MAAC,cAAS,UAAQ,MAAC,OAAO,QAAQ,UAAU,CAAC,UAAU,UAAU,MAAM,OAAO,KAAK,GAAG;AAAA,SAAE;AAAA,MAAQ,gBAAAC,OAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAS,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,UAAU,UAAU,cAAc,CAAC,OAAO,KAAK,GAAG,SAAS,MAAM,KAAK,SAAS,UAAU,UAAU,iBAAiB,kBAAkB,MAAM,UAAU,UAAU,UAAU,UAAU,EAAE,QAAQ,GAAG,MAAM,CAA0B,IAAI,UAAU,WAAW,EAAE,QAAQ,GAAG,MAAM,CAA2B,CAAC,GAAI,oBAAU,aAAa,iBAAY,UAAU,UAAU,eAAe,eAAc;AAAA,SAAS;AAAA,OAAM,GAAU,IAAqB;AAAA,IAEvqC,UAAU,mBAAoB,oBAC3B,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACD,OAAM;AAAA,QACN,UAAU;AAAA,QACV,YAAY,UAAU;AAAA,QACtB,OAAO,UAAU,OAAO,WAAW;AAAA,QACnC,UAAU,MAAM,SAAS,EAAE;AAAA,QAC3B,WAAW,CAAC,eAAe,KAAK,SAAS,wBAAwB,MAAM,UAAU,kBAAkB,EAAE,GAAG,YAAY,GAAG,MAAM,CAAC,CAAC;AAAA;AAAA,IACjI,IACE,gBAAAA,MAAC,mBAAgB,OAAM,uBAAsB,SAAS,MAAM,SAAS,EAAE,GAAG,0BAAAC,OAAC,aAAQ,WAAU,sBAAqB;AAAA,sBAAAA,OAAC,SAAI;AAAA,wBAAAD,MAAC,QAAG,iCAAmB;AAAA,QAAK,gBAAAA,MAAC,OAAG,oCAA0B,kCAA4B;AAAA,SAAI;AAAA,MAAM,gBAAAC,OAAC,SAAI,WAAU,8BAA6B;AAAA,wBAAAD,MAAC,YAAO,MAAK,UAAS,WAAU,iCAAgC,SAAS,MAAM,SAAS,EAAE,GAAG,oBAAM;AAAA,QAAU,yBAAyB,gBAAAA,MAAC,YAAO,MAAK,UAAS,WAAU,+BAA8B,SAAS,uBAAuB,uBAAS,IAAY;AAAA,SAAK;AAAA,OAAM,GAAU,IAAsB;AAAA,IAE1iB,UAAU,kBAAkB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QAC3B,GAAI,eAAe,cAAc,EAAE,aAAa,eAAe,YAAY,IAAI,CAAC;AAAA,QAChF,GAAI,eAAe,aAAa,EAAE,YAAY,eAAe,WAAW,IAAI,CAAC;AAAA,QAC7E,GAAI,eAAe,SAAS,EAAE,SAAS,gBAAAA,MAAC,oBAAiB,SAAS,gBAAgB,gBAAgB,UAAU,gBAAiB,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC,GAAI,EAAG,IAAI,CAAC;AAAA,QAC7K,YAAY,UAAU;AAAA,QACtB,OAAO,UAAU,OAAO,WAAW;AAAA,QACnC,UAAU,MAAM,SAAS,EAAE;AAAA,QAC3B,QAAQ,CAAC,UAAU,KAAK,SAAS,yBAAyB,MAAM,UAAU,iBAAiB,EAAE,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC;AAAA,QACjH,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA;AAAA,IACtC,IAAK;AAAA,IAEJ,SAAS,gBAAAA,MAAC,SAAI,WAAU,gCAA+B,MAAK,UAAU,kBAAO,IAAS;AAAA,IACtF,UAAU,QAAQ,gBAAAA,MAAC,SAAI,WAAU,8BAA6B,MAAK,SAAS,oBAAU,MAAM,SAAQ,IAAS;AAAA,KAChH;AACF;AAEA,IAAM,6BAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AhBtwBnC,SAAS,OAAO,SAAiB,OAA0C;AACzE,QAAM,MAAMY,QAA2B,IAAI;AAC3C,QAAM,EAAE,YAAY,gBAAgB,IAAI;AACxC,EAAAC,YAAU,MAAM;AACd,UAAM,UAAU,IAAI;AACpB,QAAI,CAAC,QAAS;AACd,UAAM,cAAc,CAAC,UACnB,aAAa,KAAyC;AACxD,UAAM,cAAc,CAAC,UACnB,kBAAkB,KAAyC;AAC7D,YAAQ,iBAAiB,YAAY,WAAW;AAChD,YAAQ,iBAAiB,kBAAkB,WAAW;AACtD,WAAO,MAAM;AACX,cAAQ,oBAAoB,YAAY,WAAW;AACnD,cAAQ,oBAAoB,kBAAkB,WAAW;AAAA,IAC3D;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,CAAC;AAEhC,SAAO,cAAc,SAAS;AAAA,IAC5B;AAAA,IACA,iBAAiB,MAAM;AAAA,IACvB,aAAa,MAAM;AAAA,IACnB,OAAO,MAAM,YAAY;AAAA,IACzB,gBAAgB,MAAM,YAAY;AAAA,IAClC,oBAAoB,MAAM,YAAY;AAAA,IACtC,iBAAiB,MAAM,YAAY;AAAA,IACnC,cAAc,MAAM,YAAY;AAAA,IAChC,eAAe,MAAM,YAAY;AAAA,IACjC,gBAAgB,MAAM,YAAY;AAAA,IAClC,eAAe,MAAM,YAAY;AAAA,IACjC,iBAAiB,MAAM,YAAY;AAAA,IACnC,QAAQ,MAAM,YAAY;AAAA,IAC1B,OAAO,MAAM;AAAA,IACb,OAAO,MAAM;AAAA,EACf,CAAC;AACH;AAEO,SAAS,qBAAqB,OAA0C;AAC7E,SAAO,OAAO,0BAA0B,KAAK;AAC/C;AACO,SAAS,mBAAmB,OAA0C;AAC3E,SAAO,OAAO,wBAAwB,KAAK;AAC7C;","names":["useEffect","useRef","value","useEffect","useState","jsx","jsxs","money","contacts","useState","useEffect","useEffect","useMemo","useRef","useState","useEffect","useMemo","useState","Fragment","jsx","jsxs","useEffect","useState","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","date","css","Field","useState","useEffect","useMemo","useRef","list","administrator","description","useMemo","useState","Fragment","jsx","jsxs","css","money","useMemo","useState","useMemo","jsx","jsxs","money","stateLabel","css","useMemo","BILL_TASKS_AGING_BUCKETS","Fragment","jsx","jsxs","css","Fragment","jsx","jsxs","css","useEffect","useState","REPORT_BILL_STATUS_OPTIONS","jsx","jsxs","css","useState","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","css","useMemo","useState","useRef","useCallback","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useMemo","useState","useRef","useEffect","useCallback","useState","Fragment","jsx","jsxs","useState","contacts","useCallback","useEffect","useMemo","useRef","useState","DEFAULT_API_BASE_URL","DEFAULT_SESSION_ENDPOINT","SECOND_REVIEW_REASON_TEMPLATE","createBillLifecycleClient","reportBillStatusContacts","secondReviewDeadline","Fragment","jsx","jsxs","DEFAULT_REFRESH_INTERVAL","DEFAULT_SESSION_ENDPOINT","DEFAULT_API_BASE_URL","useState","useRef","useMemo","useEffect","useCallback","document","options","useRef","useEffect"]}
|