formanitor 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs +32 -0
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs.map +1 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs +30 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs.map +1 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs +32 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs.map +1 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs +30 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs.map +1 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs +278 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs.map +1 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs +276 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs +298 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs +300 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs.map +1 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs +61 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs.map +1 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs +59 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs.map +1 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs +72 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs.map +1 -0
- package/dist/DateWidget-SYDMSGWO.cjs +74 -0
- package/dist/DateWidget-SYDMSGWO.cjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs +184 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs +190 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs +15 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs +17 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs +161 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs +163 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map +1 -0
- package/dist/EditableTable-LPAYCK36.mjs +279 -0
- package/dist/EditableTable-LPAYCK36.mjs.map +1 -0
- package/dist/EditableTable-YB4IC3ZK.cjs +281 -0
- package/dist/EditableTable-YB4IC3ZK.cjs.map +1 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs +285 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs.map +1 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs +283 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs +93 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs +91 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs.map +1 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs +528 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs.map +1 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs +526 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs.map +1 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs +90 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs.map +1 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs +92 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs +398 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs +396 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs.map +1 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs +55 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs.map +1 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs +53 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs.map +1 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs +234 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs.map +1 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs +232 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs +74 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs +76 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs.map +1 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs +213 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs.map +1 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs +215 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs.map +1 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs +519 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs.map +1 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs +517 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs.map +1 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs +1115 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs.map +1 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs +1113 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs +91 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs +89 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs.map +1 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs +1329 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs.map +1 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs +1331 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs +368 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs +366 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs.map +1 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs +153 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs.map +1 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs +151 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs.map +1 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs +6 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs.map +1 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs +15 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs.map +1 -0
- package/dist/ReferralWidget-IYTS32TS.mjs +169 -0
- package/dist/ReferralWidget-IYTS32TS.mjs.map +1 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs +171 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs.map +1 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs +11 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs.map +1 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs +24 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs.map +1 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs +19 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs.map +1 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs +10 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs.map +1 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs +226 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs.map +1 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs +215 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs +144 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs +146 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs +273 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs +271 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs +153 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs +155 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs +469 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs +471 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs.map +1 -0
- package/dist/VitalsWidget-44UWQGIF.cjs +208 -0
- package/dist/VitalsWidget-44UWQGIF.cjs.map +1 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs +187 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs.map +1 -0
- package/dist/chunk-4BAKQIPJ.mjs +27 -0
- package/dist/chunk-4BAKQIPJ.mjs.map +1 -0
- package/dist/chunk-4KSZUIJE.cjs +143 -0
- package/dist/chunk-4KSZUIJE.cjs.map +1 -0
- package/dist/chunk-4PMNVBJD.mjs +121 -0
- package/dist/chunk-4PMNVBJD.mjs.map +1 -0
- package/dist/chunk-5E3APMY6.cjs +54 -0
- package/dist/chunk-5E3APMY6.cjs.map +1 -0
- package/dist/chunk-AIZ3XYEZ.cjs +551 -0
- package/dist/chunk-AIZ3XYEZ.cjs.map +1 -0
- package/dist/chunk-AZHTIUOL.mjs +116 -0
- package/dist/chunk-AZHTIUOL.mjs.map +1 -0
- package/dist/chunk-AZSAPO2V.cjs +174 -0
- package/dist/chunk-AZSAPO2V.cjs.map +1 -0
- package/dist/chunk-AZVJU7NZ.mjs +137 -0
- package/dist/chunk-AZVJU7NZ.mjs.map +1 -0
- package/dist/chunk-B3GBIAHZ.mjs +285 -0
- package/dist/chunk-B3GBIAHZ.mjs.map +1 -0
- package/dist/chunk-BMNY7F6H.mjs +148 -0
- package/dist/chunk-BMNY7F6H.mjs.map +1 -0
- package/dist/chunk-BU4ZEAAP.mjs +102 -0
- package/dist/chunk-BU4ZEAAP.mjs.map +1 -0
- package/dist/chunk-CTW65YW2.cjs +388 -0
- package/dist/chunk-CTW65YW2.cjs.map +1 -0
- package/dist/chunk-DE7VZVKR.cjs +140 -0
- package/dist/chunk-DE7VZVKR.cjs.map +1 -0
- package/dist/chunk-DZYV47QC.mjs +54 -0
- package/dist/chunk-DZYV47QC.mjs.map +1 -0
- package/dist/chunk-E7WUDHSA.cjs +127 -0
- package/dist/chunk-E7WUDHSA.cjs.map +1 -0
- package/dist/chunk-FHHISVCH.cjs +13 -0
- package/dist/chunk-FHHISVCH.cjs.map +1 -0
- package/dist/chunk-FZEEWRW3.cjs +77 -0
- package/dist/chunk-FZEEWRW3.cjs.map +1 -0
- package/dist/chunk-GFDE2KZC.mjs +228 -0
- package/dist/chunk-GFDE2KZC.mjs.map +1 -0
- package/dist/chunk-GNZWSVTB.mjs +29 -0
- package/dist/chunk-GNZWSVTB.mjs.map +1 -0
- package/dist/chunk-GXXWMHAA.mjs +49 -0
- package/dist/chunk-GXXWMHAA.mjs.map +1 -0
- package/dist/chunk-GZPCYSJK.mjs +104 -0
- package/dist/chunk-GZPCYSJK.mjs.map +1 -0
- package/dist/chunk-HEFZA2AH.mjs +22 -0
- package/dist/chunk-HEFZA2AH.mjs.map +1 -0
- package/dist/chunk-I4AV6BQF.mjs +10 -0
- package/dist/chunk-I4AV6BQF.mjs.map +1 -0
- package/dist/chunk-IDSBJOFY.cjs +1885 -0
- package/dist/chunk-IDSBJOFY.cjs.map +1 -0
- package/dist/chunk-IFMQKLNW.mjs +39 -0
- package/dist/chunk-IFMQKLNW.mjs.map +1 -0
- package/dist/chunk-IFSKLIS2.cjs +12 -0
- package/dist/chunk-IFSKLIS2.cjs.map +1 -0
- package/dist/chunk-IKAKE7TR.mjs +527 -0
- package/dist/chunk-IKAKE7TR.mjs.map +1 -0
- package/dist/chunk-JE6VXRWW.cjs +86 -0
- package/dist/chunk-JE6VXRWW.cjs.map +1 -0
- package/dist/chunk-JMGUUFOJ.cjs +45 -0
- package/dist/chunk-JMGUUFOJ.cjs.map +1 -0
- package/dist/chunk-JNVSA77L.cjs +236 -0
- package/dist/chunk-JNVSA77L.cjs.map +1 -0
- package/dist/chunk-KJA5BLGX.cjs +31 -0
- package/dist/chunk-KJA5BLGX.cjs.map +1 -0
- package/dist/chunk-KMJOTMUQ.cjs +109 -0
- package/dist/chunk-KMJOTMUQ.cjs.map +1 -0
- package/dist/chunk-KPGTPJDH.cjs +32 -0
- package/dist/chunk-KPGTPJDH.cjs.map +1 -0
- package/dist/chunk-LBWB7MYU.cjs +287 -0
- package/dist/chunk-LBWB7MYU.cjs.map +1 -0
- package/dist/chunk-LGGOBIEA.mjs +61 -0
- package/dist/chunk-LGGOBIEA.mjs.map +1 -0
- package/dist/chunk-LQYWMYEC.mjs +28 -0
- package/dist/chunk-LQYWMYEC.mjs.map +1 -0
- package/dist/chunk-MIUUO4CI.mjs +361 -0
- package/dist/chunk-MIUUO4CI.mjs.map +1 -0
- package/dist/chunk-N4L76SHJ.cjs +65 -0
- package/dist/chunk-N4L76SHJ.cjs.map +1 -0
- package/dist/chunk-NJJTIL3U.cjs +73 -0
- package/dist/chunk-NJJTIL3U.cjs.map +1 -0
- package/dist/chunk-O3VQBPEW.cjs +72 -0
- package/dist/chunk-O3VQBPEW.cjs.map +1 -0
- package/dist/chunk-P62377LB.cjs +27 -0
- package/dist/chunk-P62377LB.cjs.map +1 -0
- package/dist/chunk-PHADAQSH.cjs +49 -0
- package/dist/chunk-PHADAQSH.cjs.map +1 -0
- package/dist/chunk-PZBJYPWW.cjs +52 -0
- package/dist/chunk-PZBJYPWW.cjs.map +1 -0
- package/dist/chunk-QKJ7BQSR.cjs +538 -0
- package/dist/chunk-QKJ7BQSR.cjs.map +1 -0
- package/dist/chunk-QS6WG2XJ.cjs +56 -0
- package/dist/chunk-QS6WG2XJ.cjs.map +1 -0
- package/dist/chunk-S7EMPE2D.cjs +104 -0
- package/dist/chunk-S7EMPE2D.cjs.map +1 -0
- package/dist/chunk-SCMXLRX5.mjs +42 -0
- package/dist/chunk-SCMXLRX5.mjs.map +1 -0
- package/dist/chunk-TJHG5WHX.cjs +47 -0
- package/dist/chunk-TJHG5WHX.cjs.map +1 -0
- package/dist/chunk-UGGUIXUS.cjs +41 -0
- package/dist/chunk-UGGUIXUS.cjs.map +1 -0
- package/dist/chunk-UULLSS4O.mjs +82 -0
- package/dist/chunk-UULLSS4O.mjs.map +1 -0
- package/dist/chunk-VNFBUAZD.mjs +25 -0
- package/dist/chunk-VNFBUAZD.mjs.map +1 -0
- package/dist/chunk-VPU66PI6.mjs +11 -0
- package/dist/chunk-VPU66PI6.mjs.map +1 -0
- package/dist/chunk-WYVXXEZI.mjs +46 -0
- package/dist/chunk-WYVXXEZI.mjs.map +1 -0
- package/dist/chunk-XDUVO3IZ.mjs +547 -0
- package/dist/chunk-XDUVO3IZ.mjs.map +1 -0
- package/dist/chunk-XR2ZM654.mjs +30 -0
- package/dist/chunk-XR2ZM654.mjs.map +1 -0
- package/dist/chunk-Y7TIWH4I.mjs +25 -0
- package/dist/chunk-Y7TIWH4I.mjs.map +1 -0
- package/dist/chunk-YEFM2ERQ.cjs +143 -0
- package/dist/chunk-YEFM2ERQ.cjs.map +1 -0
- package/dist/chunk-YYPMIUDW.mjs +69 -0
- package/dist/chunk-YYPMIUDW.mjs.map +1 -0
- package/dist/chunk-ZGPHTPAN.mjs +1851 -0
- package/dist/chunk-ZGPHTPAN.mjs.map +1 -0
- package/dist/chunk-ZSOIQVB3.mjs +75 -0
- package/dist/chunk-ZSOIQVB3.mjs.map +1 -0
- package/dist/index.cjs +1596 -14537
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -767
- package/dist/index.d.ts +4 -767
- package/dist/index.mjs +1358 -14346
- package/dist/index.mjs.map +1 -1
- package/dist/read-only-table.cjs +15 -0
- package/dist/read-only-table.cjs.map +1 -0
- package/dist/read-only-table.d.cts +10 -0
- package/dist/read-only-table.d.ts +10 -0
- package/dist/read-only-table.mjs +6 -0
- package/dist/read-only-table.mjs.map +1 -0
- package/dist/rich-text.cjs +24 -0
- package/dist/rich-text.cjs.map +1 -0
- package/dist/rich-text.d.cts +8 -0
- package/dist/rich-text.d.ts +8 -0
- package/dist/rich-text.mjs +11 -0
- package/dist/rich-text.mjs.map +1 -0
- package/dist/richTextClassName--8wkuHkW.d.cts +10 -0
- package/dist/richTextClassName--8wkuHkW.d.ts +10 -0
- package/dist/smart.cjs +23 -0
- package/dist/smart.cjs.map +1 -0
- package/dist/smart.d.cts +23 -0
- package/dist/smart.d.ts +23 -0
- package/dist/smart.mjs +10 -0
- package/dist/smart.mjs.map +1 -0
- package/dist/types-D0iYXUOo.d.cts +736 -0
- package/dist/types-D0iYXUOo.d.ts +736 -0
- package/package.json +20 -2
- package/src/styles/index.css +35 -2
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/marMedicationOrdersMeta.ts","../src/core/validate.ts","../src/core/suggestionTokens.ts","../src/core/rules.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/generalSurgeryPathway.ts","../src/core/urologyPathway.ts","../src/core/painScaleFlags.ts","../src/core/store.ts","../src/react/VoiceContext.tsx","../src/react/FormProvider.tsx","../src/react/useForm.ts","../src/react/useField.ts","../src/core/utils.ts","../src/react/VoiceMicButton.tsx","../src/ui/shadcn/input.tsx","../src/ui/shadcn/label.tsx","../src/ui/shadcn/textarea.tsx","../src/ui/themes/textareaThemes.ts","../src/ui/themes/index.ts","../src/react/fieldStyle.tsx","../src/ui/widgets/Text.tsx","../src/ui/shadcn/button.tsx","../src/ui/shadcn/separator.tsx","../src/ui/widgets/RichTextWidget.tsx","../src/ui/shadcn/select.tsx","../src/core/asyncOptions.ts","../src/ui/widgets/Select.tsx","../src/ui/shadcn/checkbox.tsx","../src/ui/widgets/MultiSelect.tsx","../src/ui/shadcn/table.tsx","../src/ui/widgets/Repeatable.tsx","../src/ui/shadcn/calendar.tsx","../src/ui/shadcn/popover.tsx","../src/ui/shadcn/date-picker.tsx","../src/ui/widgets/DateWidget.tsx","../src/ui/shadcn/datetime-picker.tsx","../src/ui/widgets/DateTimeWidget.tsx","../src/ui/widgets/ImageUpload.tsx","../src/ui/widgets/MediaUpload.tsx","../src/ui/widgets/SignatureUpload.tsx","../src/ui/components/Upload.tsx","../src/ui/widgets/FormFileUpload.tsx","../src/ui/widgets/EditableTable.tsx","../src/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/react/AISuggestionsContext.tsx","../src/ui/shadcn/dialog.tsx","../src/ui/widgets/AddEntityDialog.tsx","../src/ui/widgets/AddMedicationField.tsx","../src/ui/widgets/AddMedicationWidget.tsx","../src/ui/widgets/AddInvestigationField.tsx","../src/ui/widgets/AddInvestigationWidget.tsx","../src/ui/widgets/AddProcedureField.tsx","../src/ui/widgets/AddProcedureWidget.tsx","../src/ui/widgets/DifferentialDiagnosis.tsx","../src/ui/widgets/DifferentialDiagnosisWidget.tsx","../src/ui/shadcn/spinner.tsx","../src/ui/widgets/Vitals.tsx","../src/ui/widgets/VitalsWidget.tsx","../src/ui/widgets/HiddenVitalsWidget.tsx","../src/ui/widgets/ReferralWidget.tsx","../src/ui/shadcn/card.tsx","../src/ui/widgets/FollowupWidget.tsx","../src/react/useSmartKeywords.ts","../src/ui/widgets/SmartTextarea.tsx","../src/ui/widgets/DiagnosisTextareaWidget.tsx","../src/ui/shadcn/switch.tsx","../src/core/obgPathway.ts","../src/ui/widgets/_obgPanels.tsx","../src/ui/widgets/_obgSymptomsSync.ts","../src/ui/widgets/AntenatalPanels.tsx","../src/ui/widgets/ObstetricHistoryWidget.tsx","../src/ui/widgets/OphthalmologyWidget.tsx","../src/ui/widgets/OphthalDiagnosisWidget.tsx","../src/ui/shadcn/slider.tsx","../src/ui/widgets/OrthopedicExamWidget.tsx","../src/ui/widgets/MarMedicationOrdersWidget.tsx","../src/ui/widgets/DischargeMedicationOrdersWidget.tsx","../src/ui/widgets/SuggestionTextareaWidget.tsx","../src/ui/widgets/LensAssessmentWidget.tsx","../src/core/functionalImpairmentScore.ts","../src/ui/widgets/FunctionalImpairmentScoreWidget.tsx","../src/ui/widgets/BiometryIolWorkupWidget.tsx","../src/ui/widgets/SurgicalRiskFlagsWidget.tsx","../src/ui/widgets/SliderWidget.tsx","../src/ui/widgets/GsSmartHistoryWidget.tsx","../src/ui/widgets/GsExaminationWidget.tsx","../src/ui/widgets/GsGradingWidget.tsx","../src/ui/widgets/PainScaleFlagsWidget.tsx","../src/ui/widgets/UrologySmartHistoryWidget.tsx","../src/ui/widgets/UrologyExaminationWidget.tsx","../src/ui/widgets/UrologyPathwayWidget.tsx","../src/ui/widgets/OBGExaminationWidget.tsx","../src/ui/widgets/OBGPathwayWidget.tsx","../src/ui/widgets/PhoneInputWidget.tsx","../src/ui/widgets/OtpInputWidget.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/renderSectionChildren.tsx","../src/react/DynamicFormV2.tsx","../src/react/MultiStepForm.tsx","../src/react/SmartForm.tsx","../src/ui/widgets/ReadOnlyText.tsx","../src/ui/widgets/ReadOnlySelect.tsx","../src/ui/widgets/ReadOnlyMultiSelect.tsx","../src/ui/widgets/ReadOnlyRepeatable.tsx","../src/ui/widgets/ReadOnlyDate.tsx","../src/ui/widgets/ReadOnlyImageUpload.tsx","../src/ui/widgets/ReadOnlyMediaUpload.tsx","../src/ui/widgets/ReadOnlySignature.tsx","../src/ui/widgets/ReadOnlyTable.tsx","../src/ui/widgets/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.tsx","../src/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["num","str","bool","key","wrapped","createContext","useContext","jsx","useState","useEffect","useCallback","React4","React5","React6","jsxs","Fragment","cva","React8","React9","UnderlineIcon","TableIcon","React11","React13","Check","Table","TableHeader","TableRow","TableCell","React","Icon","React18","CalendarIcon","React21","format","useRef","error","X","Image","Upload","useMemo","Trash2","UploadIcon","def","React29","React32","ChevronUp","ChevronDown","ChevronRight","Plus","ADD_FEEDBACK_MS","Spinner","React42","React47","days","Loader2","React51","clampDysmenorrhea","ensureValue","React57","DEFAULT_TOKEN_SEPARATOR","DEFAULT_TITLE","parseValue","Panel","CHIEF_CHIPS_FIELD","SYMPTOMS_FIELD","chipList","SOCRATES_KEYS","GENERAL_ROWS","Stepper","urlLooksLikePdf","useReactTable","getCoreRowModel","flexRender","isOptionSelected","normalizeValue","formatDuration"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAR_MEDICATION_ORDERS_META_KEY = 'mar_medication_orders' as const;\n\ntype MarMedicationOrdersMeta = {\n [MAR_MEDICATION_ORDERS_META_KEY]?: boolean;\n};\n\nexport function fieldMetaRequestsMarMedicationOrdersButton(\n meta: Record<string, unknown> | undefined\n): boolean {\n if (!meta || typeof meta !== 'object') return false;\n return (meta as MarMedicationOrdersMeta)[MAR_MEDICATION_ORDERS_META_KEY] === true;\n}\n","import type { FieldDef, SliderFieldDef, OtpInputFieldDef } from './types';\n\nexport const EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\n/**\n * Validate a single field.\n * Pass `allValues` when you need cross-field validation (e.g. otp_input checking the\n * sibling phone field's value).\n */\nexport function validateField(\n value: any,\n field: FieldDef,\n allValues?: Record<string, any>,\n): string | null {\n if (field.hidden || field.disabled) return null;\n\n // otp_input: valid only when the stored value is an OtpVerifiedValue object.\n if (field.type === 'otp_input') {\n if (field.required) {\n if (!value || typeof value !== 'object' || value.verified !== true) {\n return 'Please verify your mobile number with OTP';\n }\n // Cross-field phone match: ensure phone wasn't changed after verification.\n const otpField = field as OtpInputFieldDef;\n const phoneFieldId = otpField.meta?.phoneFieldId ?? 'phone';\n if (allValues) {\n const phoneRaw: string = (allValues[phoneFieldId] as string) ?? '';\n const e164 = phoneRaw.startsWith('+') ? phoneRaw : `+91${phoneRaw}`;\n if (value.phone && value.phone !== e164) {\n return 'Mobile number changed — please re-verify';\n }\n }\n }\n return null;\n }\n\n // Required check\n if (field.required) {\n if (value === null || value === undefined || value === '') {\n return 'This field is required';\n }\n if (Array.isArray(value) && value.length === 0) {\n return 'This field is required';\n }\n if (field.type === 'smart_textarea' && typeof value === 'object' && !Array.isArray(value)) {\n if (!value.text || value.text.trim() === '') {\n return 'This field is required';\n }\n }\n }\n\n // Skip other validations if empty and not required\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n const rules = field.validation;\n if (!rules) return null;\n\n // Number validation\n if (field.type === 'number') {\n const num = Number(value);\n if (isNaN(num)) return 'Must be a valid number';\n \n if (rules.min !== undefined && num < rules.min) {\n return `Must be at least ${rules.min}`;\n }\n if (rules.max !== undefined && num > rules.max) {\n return `Must be at most ${rules.max}`;\n }\n }\n\n if (field.type === 'slider') {\n const num = Number(value);\n if (isNaN(num)) return 'Must be a valid number';\n const s = field as SliderFieldDef;\n const min = s.min ?? 0;\n const max = s.max ?? 10;\n if (num < min) return `Must be at least ${min}`;\n if (num > max) return `Must be at most ${max}`;\n }\n\n // String validation\n if (typeof value === 'string') {\n if (rules.minLength !== undefined && value.length < rules.minLength) {\n return `Must be at least ${rules.minLength} characters`;\n }\n if (rules.maxLength !== undefined && value.length > rules.maxLength) {\n return `Must be at most ${rules.maxLength} characters`;\n }\n if (rules.pattern) {\n const regex = new RegExp(rules.pattern);\n if (!regex.test(value)) {\n return 'Invalid format';\n }\n }\n }\n\n // Custom validation\n if (rules.custom) {\n return rules.custom(value);\n }\n\n return null;\n}\n\nexport function validateForm(values: Record<string, any>, fields: Record<string, FieldDef>): Record<string, string | null> {\n const errors: Record<string, string | null> = {};\n \n for (const [key, field] of Object.entries(fields)) {\n if (field.type === 'static_text') continue;\n const error = validateField(values[key], field, values);\n if (error) {\n errors[key] = error;\n }\n }\n \n return errors;\n}\n\n","/** Comma- or newline-delimited tokens (trimmed), empty parts dropped. */\nexport function getSuggestionTokensFromText(text: string): string[] {\n return text.split(/[,\\n\\r]+/).map((p) => p.trim()).filter(Boolean);\n}\n\nconst DEFAULT_TOKEN_SEPARATOR = ', ';\n\nfunction commaSplitLine(line: string): string[] {\n return line.split(',').map((p) => p.trim()).filter(Boolean);\n}\n\nfunction dedupeChipOrder(chips: string[]): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n for (const c of chips) {\n if (seen.has(c)) continue;\n seen.add(c);\n out.push(c);\n }\n return out;\n}\n\n/**\n * Split textarea value into free-text prose vs chip slugs (those in `allowed`).\n * Trailing lines that are **only** comma-separated chip values form the chip block (one or more\n * lines); prose is everything above (newlines preserved). Otherwise falls back to partitioning\n * all comma/newline tokens.\n */\nexport function parseProseAndChipTokens(\n text: string,\n allowed: ReadonlySet<string>,\n): { prose: string; chips: string[] } {\n const normalized = text.replace(/\\r\\n/g, '\\n');\n let lines = normalized.split('\\n');\n while (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n if (lines.length === 0) return { prose: '', chips: [] };\n\n let chipStart = lines.length;\n for (let i = lines.length - 1; i >= 0; i--) {\n const toks = commaSplitLine(lines[i]);\n if (toks.length === 0) break;\n if (!toks.every((t) => allowed.has(t))) break;\n chipStart = i;\n }\n\n if (chipStart < lines.length) {\n const chipLines = lines.slice(chipStart);\n const prose = lines.slice(0, chipStart).join('\\n');\n const chips = dedupeChipOrder(chipLines.flatMap(commaSplitLine));\n return { prose, chips };\n }\n\n const parts = getSuggestionTokensFromText(normalized);\n const chipsFallback = dedupeChipOrder(parts.filter((t) => allowed.has(t)));\n const proseParts = parts.filter((t) => !allowed.has(t));\n return { prose: proseParts.join(DEFAULT_TOKEN_SEPARATOR), chips: chipsFallback };\n}\n\nexport function composeProseAndChips(\n prose: string,\n chips: string[],\n separator: string = DEFAULT_TOKEN_SEPARATOR,\n): string {\n const chipStr = dedupeChipOrder(chips).join(separator);\n const p = prose.replace(/\\s+$/, '');\n if (p && chipStr) return `${p}\\n${chipStr}`;\n if (chipStr) return chipStr;\n return p;\n}\n\n/**\n * Add/remove a chip slug in the textarea. When `allowedChipValues` is non-empty, chip slugs\n * are written on **trailing line(s)** below prose (each line comma-separated, merged into one chip line on save).\n */\nexport function toggleSuggestionTokenInText(\n current: string,\n token: string,\n separator: string = DEFAULT_TOKEN_SEPARATOR,\n allowedChipValues?: ReadonlySet<string> | null,\n): string {\n const t = String(token).trim();\n if (!t) return current;\n\n if (!allowedChipValues || allowedChipValues.size === 0) {\n const parts = getSuggestionTokensFromText(current);\n const i = parts.findIndex((p) => p === t);\n if (i >= 0) parts.splice(i, 1);\n else parts.push(t);\n return parts.join(separator);\n }\n\n if (!allowedChipValues.has(t)) return current;\n\n let { prose, chips } = parseProseAndChipTokens(current, allowedChipValues);\n const idx = chips.indexOf(t);\n if (idx >= 0) chips.splice(idx, 1);\n else chips.push(t);\n chips = dedupeChipOrder(chips);\n return composeProseAndChips(prose, chips, separator);\n}\n","import type { Rule, FormValues, FieldDef, Condition, RuleAction } from './types';\nimport { getSuggestionTokensFromText } from './suggestionTokens';\n\nfunction tokenListContainsString(text: unknown, needle: unknown): boolean {\n if (typeof text !== 'string') return false;\n const want = String(needle).trim();\n if (!want) return false;\n const parts = getSuggestionTokensFromText(text);\n return parts.includes(want);\n}\n\nfunction evaluateCondition(value: any, condition: Condition): boolean {\n switch (condition.op) {\n case '==': return value == condition.value; // Loose equality for flexibility\n case '!=': return value != condition.value;\n case '>': return Number(value) > Number(condition.value);\n case '<': return Number(value) < Number(condition.value);\n case '>=': return Number(value) >= Number(condition.value);\n case '<=': return Number(value) <= Number(condition.value);\n case 'in': return Array.isArray(condition.value) && condition.value.includes(value);\n case 'contains':\n if (Array.isArray(value)) {\n return value.includes(condition.value);\n }\n if (typeof value === 'string') {\n return tokenListContainsString(value, condition.value);\n }\n return false;\n default: return false;\n }\n}\n\nexport interface RuleResult {\n visibility: Record<string, boolean>; // true = visible\n disabled: Record<string, boolean>; // true = disabled\n required: Record<string, boolean>;\n}\n\nexport function evaluateRules(\n values: FormValues,\n rules: Rule[],\n fields: Record<string, FieldDef>\n): RuleResult {\n // Start with default state from field definitions\n const result: RuleResult = {\n visibility: {},\n disabled: {},\n required: {}\n };\n\n // Initialize defaults\n Object.keys(fields).forEach(key => {\n result.visibility[key] = !fields[key].hidden;\n result.disabled[key] = !!fields[key].disabled;\n result.required[key] = !!fields[key].required;\n });\n\n if (!rules) return result;\n\n rules.forEach(rule => {\n const targetField = rule.if.field;\n if (!targetField) return;\n\n const sourceValue = values[targetField];\n const isMatch = evaluateCondition(sourceValue, rule.if);\n\n if (isMatch) {\n rule.then.forEach(action => {\n applyAction(result, action);\n });\n } else {\n // Optional: logic to revert actions if condition is false?\n // Simple rules engines usually just apply \"true\" conditions.\n // For \"else\", we'd need a specific structure. \n // For now, we assume defaults are set and rules strictly OVERRIDE them when true.\n // If a rule says \"hide\", and it's NOT true, we don't necessarily \"show\" unless the default was visible.\n // However, standard behavior is usually: if rule implies X, !rule implies !X if it's a toggle.\n // But for this MVP, we will stick to: Apply changes if condition is met.\n // To handle \"revert\", we'd need to re-evaluate all rules or define \"else\".\n // A common pattern is to reset to default before evaluating all rules, which we did above.\n // So this is correct: defaults -> apply matches.\n }\n });\n\n return result;\n}\n\nfunction applyAction(result: RuleResult, action: RuleAction) {\n switch (action.action) {\n case 'hide':\n result.visibility[action.target] = false;\n break;\n case 'show':\n result.visibility[action.target] = true;\n break;\n case 'disable':\n result.disabled[action.target] = true;\n break;\n case 'enable':\n result.disabled[action.target] = false;\n break;\n case 'setRequired':\n result.required[action.target] = true;\n break;\n }\n}\n\n","import type { FormValues } from '../types';\n\nexport interface SavedState {\n values: FormValues;\n meta: {\n updatedAt: number; // Timestamp\n workflowState: string;\n version: number;\n };\n}\n\nexport interface PersistenceProvider {\n save(formId: string, state: SavedState): Promise<void>;\n load(formId: string): Promise<SavedState | null>;\n clear(formId: string): Promise<void>;\n}\n\nexport const NO_OP_PROVIDER: PersistenceProvider = {\n save: async () => {},\n load: async () => null,\n clear: async () => {}\n};\n\n","import type { FormValues, FieldDef } from './types';\n\n/**\n * Merges prefill values into current values.\n * Prefill is applied for every field that has a value in prefill (no empty check).\n * Strategy:\n * - Priority 1: Field inline prefill value\n * - Priority 2: Fallback prefilled_data keyed by field ID\n */\nexport function applyPrefill(\n currentValues: FormValues,\n fields: FieldDef[],\n prefilledData: Record<string, any> = {}\n): FormValues {\n const newValues = { ...currentValues };\n\n fields.forEach(field => {\n // Priority 1: Inline prefill value\n if (field.prefill?.value !== undefined) {\n newValues[field.id] = field.prefill.value;\n return;\n }\n\n // Priority 2: Fallback prefilled_data\n if (prefilledData[field.id] !== undefined) {\n newValues[field.id] = prefilledData[field.id];\n return;\n }\n });\n\n return newValues;\n}\n","export type GeneralSurgerySmartHistoryValue = {\n pain: {\n site: string;\n onset: string;\n character: string;\n radiation: string;\n associated: string;\n timing: string;\n exacerbating: string;\n severity: number;\n };\n swelling: {\n duration: string;\n sizeProgression: string;\n painfulPainless: string;\n checks: string[];\n };\n gi: {\n appetite: string;\n weightLoss: string;\n bowelHabits: string;\n checks: string[];\n };\n breast: {\n lumpDuration: string;\n nippleDischarge: string;\n checks: string[];\n };\n ano: { checks: string[] };\n thyroid: { swellingDuration: string; checks: string[] };\n};\n\nexport const defaultGeneralSurgerySmartHistory = (): GeneralSurgerySmartHistoryValue => ({\n pain: {\n site: '',\n onset: '',\n character: '',\n radiation: '',\n associated: '',\n timing: '',\n exacerbating: '',\n severity: 0,\n },\n swelling: { duration: '', sizeProgression: '', painfulPainless: '', checks: [] },\n gi: { appetite: '', weightLoss: '', bowelHabits: '', checks: [] },\n breast: { lumpDuration: '', nippleDischarge: '', checks: [] },\n ano: { checks: [] },\n thyroid: { swellingDuration: '', checks: [] },\n});\n\n/** Breast regional exam: left and right documented independently. */\nexport type GeneralSurgeryBreastExamSide = {\n size: string;\n quadrant: string;\n tenderness: string;\n fixity: string;\n skinInvolvement: string;\n consistency: string;\n axillaryNodes: boolean;\n nippleAreolarComplex: boolean;\n};\n\nexport type GeneralSurgeryBreastExaminationBlock = {\n left: GeneralSurgeryBreastExamSide;\n right: GeneralSurgeryBreastExamSide;\n};\n\nexport const defaultBreastExamSide = (): GeneralSurgeryBreastExamSide => ({\n size: '',\n quadrant: '',\n tenderness: '',\n fixity: '',\n skinInvolvement: '',\n consistency: '',\n axillaryNodes: false,\n nippleAreolarComplex: false,\n});\n\nexport const defaultBreastExaminationBlock = (): GeneralSurgeryBreastExaminationBlock => ({\n left: defaultBreastExamSide(),\n right: defaultBreastExamSide(),\n});\n\nexport type GeneralSurgeryExaminationValue = {\n general: string[];\n regions: string[];\n abdomen: {\n inspection: string[];\n palpation: string[];\n percussion: string[];\n massNotes: string;\n bowelSounds: 'none' | 'normal' | 'up' | 'down' | 'absent';\n };\n hernia: { site: string; reducible: boolean; coughImpulse: boolean; tenderness: boolean };\n breast: GeneralSurgeryBreastExaminationBlock;\n thyroid: {\n size: string;\n mobileDeglutition: boolean;\n nodules: boolean;\n cervicalNodes: boolean;\n };\n anorectal: {\n inspection: string;\n dreDone: boolean;\n proctoscopyDone: boolean;\n notes: string;\n };\n limb: { dilatedVeins: boolean; ulcer: boolean; oedema: boolean };\n};\n\nexport const defaultGeneralSurgeryExamination = (): GeneralSurgeryExaminationValue => ({\n general: [],\n regions: [],\n abdomen: {\n inspection: [],\n palpation: [],\n percussion: [],\n massNotes: '',\n bowelSounds: 'none',\n },\n hernia: { site: '', reducible: false, coughImpulse: false, tenderness: false },\n breast: defaultBreastExaminationBlock(),\n thyroid: { size: '', mobileDeglutition: false, nodules: false, cervicalNodes: false },\n anorectal: { inspection: '', dreDone: false, proctoscopyDone: false, notes: '' },\n limb: { dilatedVeins: false, ulcer: false, oedema: false },\n});\n\nexport type GeneralSurgeryConditionKey =\n | 'hernia'\n | 'appendicitis'\n | 'gallbladder'\n | 'breast'\n | 'thyroid'\n | 'piles'\n | 'varicose'\n | 'ulcer';\n\nexport type GeneralSurgeryGradingValue = Record<GeneralSurgeryConditionKey, number>;\n\nexport const ALL_GS_CONDITIONS: GeneralSurgeryConditionKey[] = [\n 'hernia',\n 'appendicitis',\n 'gallbladder',\n 'breast',\n 'thyroid',\n 'piles',\n 'varicose',\n 'ulcer',\n];\n\nexport const defaultGeneralSurgeryGrading = (): GeneralSurgeryGradingValue => ({\n hernia: 0,\n appendicitis: 0,\n gallbladder: 0,\n breast: 0,\n thyroid: 0,\n piles: 0,\n varicose: 0,\n ulcer: 0,\n});\n\n/** Grade row visibility: chief-complaint chip slugs + examination region keys (Clearsight GradingEngine). */\nexport const GS_CONDITION_TRIGGERS: Record<\n GeneralSurgeryConditionKey,\n { regions: string[]; chips: string[] }\n> = {\n hernia: { regions: ['hernia', 'abdomen'], chips: ['swelling_lump', 'obstruction'] },\n appendicitis: { regions: ['abdomen'], chips: ['pain', 'obstruction'] },\n gallbladder: { regions: ['abdomen'], chips: ['pain'] },\n breast: { regions: ['breast'], chips: ['breast', 'swelling_lump'] },\n thyroid: { regions: ['thyroid'], chips: ['thyroid', 'swelling_lump'] },\n piles: { regions: ['anorectal'], chips: ['anorectal', 'bleeding'] },\n varicose: { regions: ['limb'], chips: ['swelling_lump'] },\n ulcer: { regions: ['limb', 'anorectal'], chips: ['ulcer_wound', 'discharge'] },\n};\n\nexport const GS_CONDITION_LABELS: Record<GeneralSurgeryConditionKey, string> = {\n hernia: 'Hernia',\n appendicitis: 'Appendicitis',\n gallbladder: 'Gallbladder disease',\n breast: 'Breast lump (BIRADS)',\n thyroid: 'Thyroid nodule (TIRADS)',\n piles: 'Haemorrhoids',\n varicose: 'Varicose veins (CEAP)',\n ulcer: 'Ulcer / wound',\n};\n\nexport const GS_GRADE_DESCRIPTIONS: Record<GeneralSurgeryConditionKey, string[]> = {\n hernia: ['—', 'Small reducible', 'Large reducible', 'Irreducible', 'Obstructed', 'Strangulated'],\n appendicitis: ['—', 'Mild (clinical)', 'Confirmed (USG/CT)', 'Complicated (mass)', 'Abscess', 'Perforation'],\n gallbladder: ['—', 'Asymptomatic stones', 'Symptomatic', 'Acute cholecystitis', 'Complicated (CBD stone)', 'Perforation/empyema'],\n breast: ['—', 'BIRADS 1 — Negative', 'BIRADS 2 — Benign', 'BIRADS 3 — Probably benign', 'BIRADS 4 — Suspicious', 'BIRADS 5 — Malignant'],\n thyroid: ['—', 'TIRADS 1 — Normal', 'TIRADS 2 — Benign', 'TIRADS 3 — Indeterminate', 'TIRADS 4 — Suspicious', 'TIRADS 5 — Highly suspicious'],\n piles: ['—', 'Grade 1', 'Grade 2', 'Grade 3', 'Grade 4', 'Grade 5'],\n varicose: ['—', 'C1 telangiectasia', 'C2 varicose', 'C3 oedema', 'C4 skin changes', 'C5-C6 ulcer'],\n ulcer: ['—', 'Superficial', 'Deep', 'Infected', 'Necrotic', 'Gangrene'],\n};\n\nexport function normalizeGeneralSurgerySmartHistory(\n raw: unknown,\n): GeneralSurgerySmartHistoryValue {\n const d = defaultGeneralSurgerySmartHistory();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return d;\n const v = raw as Partial<GeneralSurgerySmartHistoryValue>;\n const painIn = v.pain && typeof v.pain === 'object' ? v.pain : {};\n const sev = Number((painIn as { severity?: unknown }).severity);\n const pain = {\n ...d.pain,\n ...painIn,\n severity: Number.isFinite(sev) ? Math.min(10, Math.max(0, Math.round(sev))) : d.pain.severity,\n };\n const str = (x: unknown) => (typeof x === 'string' ? x : '');\n const strArr = (x: unknown) =>\n Array.isArray(x) ? (x as unknown[]).filter((i): i is string => typeof i === 'string') : [];\n const swell = (v.swelling && typeof v.swelling === 'object' ? v.swelling : {}) as Record<string, unknown>;\n const gi = (v.gi && typeof v.gi === 'object' ? v.gi : {}) as Record<string, unknown>;\n const breast = (v.breast && typeof v.breast === 'object' ? v.breast : {}) as Record<string, unknown>;\n const ano = (v.ano && typeof v.ano === 'object' ? v.ano : {}) as Record<string, unknown>;\n const thy = (v.thyroid && typeof v.thyroid === 'object' ? v.thyroid : {}) as Record<string, unknown>;\n return {\n pain,\n swelling: {\n duration: str(swell.duration),\n sizeProgression: str(swell.sizeProgression),\n painfulPainless: str(swell.painfulPainless),\n checks: strArr(swell.checks),\n },\n gi: {\n appetite: str(gi.appetite),\n weightLoss: str(gi.weightLoss),\n bowelHabits: str(gi.bowelHabits),\n checks: strArr(gi.checks),\n },\n breast: {\n lumpDuration: str(breast.lumpDuration),\n nippleDischarge: str(breast.nippleDischarge),\n checks: strArr(breast.checks),\n },\n ano: { checks: strArr(ano.checks) },\n thyroid: {\n swellingDuration: str(thy.swellingDuration),\n checks: strArr(thy.checks),\n },\n };\n}\n\nfunction normalizeBreastExamSide(partial: unknown): GeneralSurgeryBreastExamSide {\n const e = defaultBreastExamSide();\n const str = (x: unknown) => (typeof x === 'string' ? x : '');\n const bool = (x: unknown) => x === true;\n\n if (!partial || typeof partial !== 'object') return e;\n\n const p = partial as Record<string, unknown>;\n return {\n size: str(p.size),\n quadrant: str(p.quadrant),\n tenderness: str(p.tenderness),\n fixity: str(p.fixity),\n skinInvolvement: str(p.skinInvolvement),\n consistency: str(p.consistency),\n axillaryNodes: bool(p.axillaryNodes),\n nippleAreolarComplex: bool(p.nippleAreolarComplex),\n };\n}\n\nfunction normalizeBreastExaminationBlock(raw: unknown): GeneralSurgeryBreastExaminationBlock {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return defaultBreastExaminationBlock();\n const br = raw as Record<string, unknown>;\n return {\n left: normalizeBreastExamSide(br.left),\n right: normalizeBreastExamSide(br.right),\n };\n}\n\nexport function normalizeGeneralSurgeryExamination(raw: unknown): GeneralSurgeryExaminationValue {\n const d = defaultGeneralSurgeryExamination();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return d;\n const v = raw as Partial<GeneralSurgeryExaminationValue>;\n const strArr = (x: unknown) =>\n Array.isArray(x) ? (x as unknown[]).filter((i): i is string => typeof i === 'string') : [];\n const ab = v.abdomen && typeof v.abdomen === 'object' ? v.abdomen : {};\n const bowel = (ab as { bowelSounds?: unknown }).bowelSounds;\n const bowels: GeneralSurgeryExaminationValue['abdomen']['bowelSounds'] =\n bowel === 'normal' || bowel === 'up' || bowel === 'down' || bowel === 'absent' ? bowel : 'none';\n const hb = v.hernia && typeof v.hernia === 'object' ? v.hernia : {};\n const br = v.breast && typeof v.breast === 'object' ? v.breast : {};\n const th = v.thyroid && typeof v.thyroid === 'object' ? v.thyroid : {};\n const ar = v.anorectal && typeof v.anorectal === 'object' ? v.anorectal : {};\n const lm = v.limb && typeof v.limb === 'object' ? v.limb : {};\n const bool = (x: unknown) => x === true;\n return {\n general: strArr(v.general),\n regions: strArr(v.regions),\n abdomen: {\n inspection: strArr((ab as { inspection?: unknown }).inspection),\n palpation: strArr((ab as { palpation?: unknown }).palpation),\n percussion: strArr((ab as { percussion?: unknown }).percussion),\n massNotes:\n typeof (ab as { massNotes?: unknown }).massNotes === 'string'\n ? ((ab as { massNotes: string }).massNotes)\n : d.abdomen.massNotes,\n bowelSounds: bowels,\n },\n hernia: {\n site: typeof (hb as { site?: unknown }).site === 'string' ? (hb as { site: string }).site : '',\n reducible: bool((hb as { reducible?: unknown }).reducible),\n coughImpulse: bool((hb as { coughImpulse?: unknown }).coughImpulse),\n tenderness: bool((hb as { tenderness?: unknown }).tenderness),\n },\n breast: normalizeBreastExaminationBlock(br),\n thyroid: {\n size: typeof (th as { size?: unknown }).size === 'string' ? (th as { size: string }).size : '',\n mobileDeglutition: bool((th as { mobileDeglutition?: unknown }).mobileDeglutition),\n nodules: bool((th as { nodules?: unknown }).nodules),\n cervicalNodes: bool((th as { cervicalNodes?: unknown }).cervicalNodes),\n },\n anorectal: {\n inspection:\n typeof (ar as { inspection?: unknown }).inspection === 'string'\n ? (ar as { inspection: string }).inspection\n : '',\n dreDone: bool((ar as { dreDone?: unknown }).dreDone),\n proctoscopyDone: bool((ar as { proctoscopyDone?: unknown }).proctoscopyDone),\n notes: typeof (ar as { notes?: unknown }).notes === 'string' ? (ar as { notes: string }).notes : '',\n },\n limb: {\n dilatedVeins: bool((lm as { dilatedVeins?: unknown }).dilatedVeins),\n ulcer: bool((lm as { ulcer?: unknown }).ulcer),\n oedema: bool((lm as { oedema?: unknown }).oedema),\n },\n };\n}\n\nexport function normalizeGeneralSurgeryGrading(raw: unknown): GeneralSurgeryGradingValue {\n const d = defaultGeneralSurgeryGrading();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return d;\n const v = raw as Record<string, unknown>;\n const out = { ...d };\n for (const k of ALL_GS_CONDITIONS) {\n const n = Number(v[k]);\n if (Number.isFinite(n) && n >= 0 && n <= 5) out[k] = Math.round(n);\n }\n return out;\n}\n\nexport function gsGradingRowVisible(\n cond: GeneralSurgeryConditionKey,\n chips: string[],\n regions: string[],\n grade: number,\n): boolean {\n if (grade > 0) return true;\n const t = GS_CONDITION_TRIGGERS[cond];\n if (t.chips.some((c) => chips.includes(c))) return true;\n if (t.regions.some((r) => regions.includes(r))) return true;\n return false;\n}\n\n// --- One-way narrative text (structured smart history / examination → symptoms / clinical_examination) ---\n\nconst SWELLING_OPT_LABELS: Record<string, string> = {\n reducible_hernia: 'Reducible (hernia)',\n cough_impulse: 'Cough impulse',\n skin_changes: 'Skin changes',\n};\n\nconst GI_OPT_LABELS: Record<string, string> = {\n bleeding_pr: 'Bleeding PR',\n vomiting: 'Vomiting',\n haematemesis: 'Haematemesis',\n};\n\nconst BREAST_OPT_LABELS: Record<string, string> = {\n pain: 'Pain',\n fh_ca_breast: 'Family history of Ca breast',\n};\n\nconst ANO_OPT_LABELS: Record<string, string> = {\n pain_defecation: 'Pain during defecation',\n bleeding: 'Bleeding',\n constipation: 'Constipation',\n discharge: 'Discharge',\n};\n\nconst THYROID_OPT_LABELS: Record<string, string> = {\n dysphagia: 'Dysphagia',\n voice_change: 'Voice change',\n thyrotoxicosis: 'Thyrotoxicosis symptoms',\n};\n\nconst SOCRATES_LABELS: Record<string, string> = {\n site: 'Site',\n onset: 'Onset',\n character: 'Character',\n radiation: 'Radiation',\n associated: 'Associated',\n timing: 'Timing',\n exacerbating: 'Exacerbating / relieving',\n};\n\nconst GENERAL_EXAM_LABELS: Record<string, string> = {\n pallor: 'Pallor',\n icterus: 'Icterus',\n cyanosis: 'Cyanosis',\n clubbing: 'Clubbing',\n lymphadenopathy: 'Lymphadenopathy',\n oedema: 'Oedema',\n};\n\nconst REGION_EXAM_LABELS: Record<string, string> = {\n abdomen: 'Abdomen',\n hernia: 'Hernia',\n breast: 'Breast',\n thyroid: 'Thyroid',\n anorectal: 'Anorectal',\n limb: 'Limb / varicose',\n};\n\nconst ABD_INSP_LABELS: Record<string, string> = {\n distension: 'Distension',\n scars: 'Scars',\n visible_peristalsis: 'Visible peristalsis',\n};\n\nconst ABD_PALP_LABELS: Record<string, string> = {\n tenderness: 'Tenderness',\n guarding: 'Guarding',\n rigidity: 'Rigidity',\n mass: 'Palpable mass',\n};\n\nconst ABD_PERC_LABELS: Record<string, string> = {\n tympany: 'Tympany',\n shifting_dullness: 'Shifting dullness',\n};\n\nfunction trimLine(s: string): string {\n return s.replace(/\\s+/g, ' ').trim();\n}\n\nconst SK_ORDER = ['site', 'onset', 'character', 'radiation', 'associated', 'timing', 'exacerbating'] as const;\n\n/** Builds HOPC text from structured smart history; mirrors which panels are visible from chief-complaint chips. */\nexport function formatGeneralSurgerySmartHistoryToNarrative(\n v: GeneralSurgerySmartHistoryValue,\n chips: string[],\n): string {\n const blocks: string[] = [];\n\n const showPain = chips.includes('pain');\n const showSwelling = chips.includes('swelling_lump');\n const showGI = chips.includes('bleeding') || chips.includes('obstruction');\n const showBreast = chips.includes('breast');\n const showAno = chips.includes('anorectal');\n const showThyroid = chips.includes('thyroid');\n\n if (showPain) {\n const painLines: string[] = [];\n for (const key of SK_ORDER) {\n const raw = v.pain[key];\n if (typeof raw === 'string' && raw.trim()) {\n painLines.push(`${SOCRATES_LABELS[key]}: ${trimLine(raw)}`);\n }\n }\n if (v.pain.severity > 0) {\n painLines.push(`Severity (0–10): ${v.pain.severity}`);\n }\n if (painLines.length > 0) {\n blocks.push(['SOCRATES — pain', ...painLines.map((l) => `• ${l}`)].join('\\n'));\n }\n }\n\n if (showSwelling) {\n const parts: string[] = [];\n if (v.swelling.duration.trim()) parts.push(`Duration: ${trimLine(v.swelling.duration)}`);\n if (v.swelling.sizeProgression.trim())\n parts.push(`Size progression: ${trimLine(v.swelling.sizeProgression)}`);\n if (v.swelling.painfulPainless.trim())\n parts.push(`Painful / painless: ${trimLine(v.swelling.painfulPainless)}`);\n for (const c of v.swelling.checks) {\n const lb = SWELLING_OPT_LABELS[c] ?? c;\n parts.push(lb);\n }\n if (parts.length > 0) {\n blocks.push(['Swelling history', ...parts.map((p) => `• ${p}`)].join('\\n'));\n }\n }\n\n if (showGI) {\n const parts: string[] = [];\n if (v.gi.appetite.trim()) parts.push(`Appetite: ${trimLine(v.gi.appetite)}`);\n if (v.gi.weightLoss.trim()) parts.push(`Weight loss: ${trimLine(v.gi.weightLoss)}`);\n if (v.gi.bowelHabits.trim()) parts.push(`Bowel habits: ${trimLine(v.gi.bowelHabits)}`);\n for (const c of v.gi.checks) {\n parts.push(GI_OPT_LABELS[c] ?? c);\n }\n if (parts.length > 0) {\n blocks.push(['GI history', ...parts.map((p) => `• ${p}`)].join('\\n'));\n }\n }\n\n if (showBreast) {\n const parts: string[] = [];\n if (v.breast.lumpDuration.trim()) parts.push(`Lump duration: ${trimLine(v.breast.lumpDuration)}`);\n if (v.breast.nippleDischarge.trim())\n parts.push(`Nipple discharge: ${trimLine(v.breast.nippleDischarge)}`);\n for (const c of v.breast.checks) {\n parts.push(BREAST_OPT_LABELS[c] ?? c);\n }\n if (parts.length > 0) {\n blocks.push(['Breast history', ...parts.map((p) => `• ${p}`)].join('\\n'));\n }\n }\n\n if (showAno) {\n const parts: string[] = [];\n for (const c of v.ano.checks) {\n parts.push(ANO_OPT_LABELS[c] ?? c);\n }\n if (parts.length > 0) {\n blocks.push(['Anorectal history', ...parts.map((p) => `• ${p}`)].join('\\n'));\n }\n }\n\n if (showThyroid) {\n const parts: string[] = [];\n if (v.thyroid.swellingDuration.trim())\n parts.push(`Swelling duration: ${trimLine(v.thyroid.swellingDuration)}`);\n for (const c of v.thyroid.checks) {\n parts.push(THYROID_OPT_LABELS[c] ?? c);\n }\n if (parts.length > 0) {\n blocks.push(['Thyroid history', ...parts.map((p) => `• ${p}`)].join('\\n'));\n }\n }\n\n return blocks.join('\\n\\n');\n}\n\nconst BOWEL_SOUND_LABELS: Record<GeneralSurgeryExaminationValue['abdomen']['bowelSounds'], string> = {\n none: '—',\n normal: 'Normal',\n up: 'Increased (↑)',\n down: 'Decreased (↓)',\n absent: 'Absent',\n};\n\n/** Builds clinical examination narrative from structured examination fields. */\nexport function formatGeneralSurgeryExaminationToNarrative(v: GeneralSurgeryExaminationValue): string {\n const blocks: string[] = [];\n\n const generalPositive = v.general\n .map((k) => GENERAL_EXAM_LABELS[k] ?? k)\n .filter(Boolean);\n if (generalPositive.length > 0) {\n blocks.push(\n ['General examination', ...generalPositive.map((g) => `• ${g}`)].join('\\n'),\n );\n }\n\n if (v.regions.length > 0) {\n const names = v.regions.map((r) => REGION_EXAM_LABELS[r] ?? r);\n blocks.push(`Regional examination: ${names.join(', ')}`);\n }\n\n if (v.regions.includes('abdomen')) {\n const sub: string[] = [];\n const ins = v.abdomen.inspection.map((x) => ABD_INSP_LABELS[x] ?? x);\n const pal = v.abdomen.palpation.map((x) => ABD_PALP_LABELS[x] ?? x);\n const per = v.abdomen.percussion.map((x) => ABD_PERC_LABELS[x] ?? x);\n if (ins.length) sub.push(`Inspection: ${ins.join(', ')}`);\n if (pal.length) sub.push(`Palpation: ${pal.join(', ')}`);\n if (v.abdomen.massNotes.trim()) sub.push(`Mass / mobility: ${trimLine(v.abdomen.massNotes)}`);\n if (per.length) sub.push(`Percussion: ${per.join(', ')}`);\n const bs = BOWEL_SOUND_LABELS[v.abdomen.bowelSounds];\n if (v.abdomen.bowelSounds !== 'none') {\n sub.push(`Bowel sounds: ${bs}`);\n }\n if (sub.length > 0) {\n blocks.push(['Abdomen', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n if (v.regions.includes('hernia')) {\n const sub: string[] = [];\n if (v.hernia.site.trim()) sub.push(`Site: ${trimLine(v.hernia.site)}`);\n if (v.hernia.reducible) sub.push('Reducible');\n if (v.hernia.coughImpulse) sub.push('Cough impulse positive');\n if (v.hernia.tenderness) sub.push('Tenderness');\n if (sub.length > 0) {\n blocks.push(['Hernia', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n if (v.regions.includes('breast')) {\n const sub: string[] = [];\n\n const appendSide = (label: string, s: GeneralSurgeryBreastExamSide) => {\n const lines: string[] = [];\n if (s.size.trim()) lines.push(`Size: ${trimLine(s.size)}`);\n if (s.quadrant.trim()) lines.push(`Quadrant: ${trimLine(s.quadrant)}`);\n if (s.tenderness.trim()) lines.push(`Tenderness: ${trimLine(s.tenderness)}`);\n if (s.fixity.trim()) lines.push(`Fixity: ${trimLine(s.fixity)}`);\n if (s.skinInvolvement.trim()) lines.push(`Skin involvement: ${trimLine(s.skinInvolvement)}`);\n if (s.consistency.trim()) lines.push(`Consistency: ${trimLine(s.consistency)}`);\n if (s.axillaryNodes) lines.push('Axillary nodes');\n if (s.nippleAreolarComplex) lines.push('Nipple-areolar complex');\n if (lines.length > 0) {\n sub.push(`${label}: ${lines.join('; ')}`);\n }\n };\n\n appendSide('Left breast', v.breast.left);\n appendSide('Right breast', v.breast.right);\n\n if (sub.length > 0) {\n blocks.push(['Breast', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n if (v.regions.includes('thyroid')) {\n const sub: string[] = [];\n if (v.thyroid.size.trim()) sub.push(`Size: ${trimLine(v.thyroid.size)}`);\n if (v.thyroid.mobileDeglutition) sub.push('Mobile with deglutition');\n if (v.thyroid.nodules) sub.push('Nodules');\n if (v.thyroid.cervicalNodes) sub.push('Cervical lymph nodes');\n if (sub.length > 0) {\n blocks.push(['Thyroid', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n if (v.regions.includes('anorectal')) {\n const sub: string[] = [];\n if (v.anorectal.inspection.trim())\n sub.push(`Inspection: ${trimLine(v.anorectal.inspection)}`);\n if (v.anorectal.dreDone) sub.push('DRE done');\n if (v.anorectal.proctoscopyDone) sub.push('Proctoscopy done');\n if (v.anorectal.notes.trim()) sub.push(`DRE / proctoscopy notes: ${trimLine(v.anorectal.notes)}`);\n if (sub.length > 0) {\n blocks.push(['Anorectal', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n if (v.regions.includes('limb')) {\n const sub: string[] = [];\n if (v.limb.dilatedVeins) sub.push('Dilated veins');\n if (v.limb.ulcer) sub.push('Ulcer');\n if (v.limb.oedema) sub.push('Oedema');\n if (sub.length > 0) {\n blocks.push(['Limb / varicose', ...sub.map((s) => `• ${s}`)].join('\\n'));\n }\n }\n\n return blocks.join('\\n\\n');\n}\n","/** Urology OPD structured smart history (Forminator + Clearsight parity). */\n\nexport type UrologyIpss = {\n incomplete: number;\n frequency: number;\n intermittency: number;\n urgency: number;\n weakStream: number;\n straining: number;\n nocturia: number;\n};\n\nexport type UrologySmartHistoryValue = {\n socrates: {\n site: string;\n onset: string;\n character: string;\n radiation: string;\n associated: string;\n timing: string;\n exacerbating: string;\n severity: number;\n };\n ipss: UrologyIpss;\n ipssQoL: number;\n haematuria: {\n present: boolean;\n timing: string;\n painful: boolean;\n clots: boolean;\n };\n sexual: {\n erectile: string;\n libido: string;\n ejaculation: string;\n infertilityMonths: number;\n };\n pastNotes: string;\n};\n\nexport type UrologyExaminationValue = {\n regions: string[];\n general: {\n pallor: boolean;\n oedema: boolean;\n icterus: boolean;\n lymphadenopathy: boolean;\n };\n abdomen: {\n distension: boolean;\n scars: boolean;\n mass: boolean;\n kidneyPalpable: boolean;\n bladderPalpable: boolean;\n renalAngleTender: boolean;\n bladderDull: boolean;\n };\n gu: {\n meatusAbnormal: boolean;\n phimosis: boolean;\n lesions: boolean;\n scrotalSwelling: boolean;\n transilluminant: boolean;\n tenderTestis: boolean;\n hydrocele: boolean;\n varicocele: boolean;\n suspiciousMass: boolean;\n };\n dre: {\n done: boolean;\n sizeGrams: number;\n consistency: string;\n medianSulcus: string;\n tenderness: boolean;\n };\n examinationNotes: string;\n};\n\nexport type UrologyPathwayRisk = {\n ckd: boolean;\n diabetes: boolean;\n anticoagulants: boolean;\n activeInfection: boolean;\n};\n\nexport type UrologyPathwayValue = {\n stoneSizeMm: number;\n hydronephrosis: boolean;\n prostateVolumeCc: number;\n psaNgMl: number;\n uroflowQmaxMlSec: number;\n risk: UrologyPathwayRisk;\n};\n\nexport function defaultUrologySmartHistory(): UrologySmartHistoryValue {\n return {\n socrates: {\n site: '',\n onset: '',\n character: '',\n radiation: '',\n associated: '',\n timing: '',\n exacerbating: '',\n severity: 0,\n },\n ipss: {\n incomplete: 0,\n frequency: 0,\n intermittency: 0,\n urgency: 0,\n weakStream: 0,\n straining: 0,\n nocturia: 0,\n },\n ipssQoL: 0,\n haematuria: {\n present: false,\n timing: 'none',\n painful: false,\n clots: false,\n },\n sexual: {\n erectile: 'none',\n libido: 'none',\n ejaculation: 'none',\n infertilityMonths: 0,\n },\n pastNotes: '',\n };\n}\n\nexport function defaultUrologyExamination(): UrologyExaminationValue {\n return {\n regions: [],\n general: {\n pallor: false,\n oedema: false,\n icterus: false,\n lymphadenopathy: false,\n },\n abdomen: {\n distension: false,\n scars: false,\n mass: false,\n kidneyPalpable: false,\n bladderPalpable: false,\n renalAngleTender: false,\n bladderDull: false,\n },\n gu: {\n meatusAbnormal: false,\n phimosis: false,\n lesions: false,\n scrotalSwelling: false,\n transilluminant: false,\n tenderTestis: false,\n hydrocele: false,\n varicocele: false,\n suspiciousMass: false,\n },\n dre: {\n done: false,\n sizeGrams: 0,\n consistency: '',\n medianSulcus: '',\n tenderness: false,\n },\n examinationNotes: '',\n };\n}\n\nexport function defaultUrologyPathway(): UrologyPathwayValue {\n return {\n stoneSizeMm: 0,\n hydronephrosis: false,\n prostateVolumeCc: 0,\n psaNgMl: 0,\n uroflowQmaxMlSec: 0,\n risk: {\n ckd: false,\n diabetes: false,\n anticoagulants: false,\n activeInfection: false,\n },\n };\n}\n\nfunction ipssItem(v: unknown): number {\n const n = Number(v);\n if (!Number.isFinite(n)) return 0;\n return Math.min(5, Math.max(0, Math.round(n)));\n}\n\nexport function urologyIpssSevenTotal(ipss: UrologyIpss): number {\n return (\n ipss.incomplete +\n ipss.frequency +\n ipss.intermittency +\n ipss.urgency +\n ipss.weakStream +\n ipss.straining +\n ipss.nocturia\n );\n}\n\nexport function urologyIpssBand(total: number): string {\n if (total <= 7) return 'Mild';\n if (total <= 19) return 'Moderate';\n return 'Severe';\n}\n\n/** Select / stored values often use `\"none\"` for unset; omit from HoPC narrative. */\nfunction hopcMeaningfulStr(x: unknown): string {\n if (typeof x !== 'string') return '';\n const t = x.trim();\n if (!t || t.toLowerCase() === 'none') return '';\n return t;\n}\n\nfunction hopcNonEmpty(lines: Array<string | undefined | null>): string[] {\n return lines.map((s) => (s ?? '').trim()).filter(Boolean);\n}\n\n/**\n * Smart-history panels → free-text `symptoms` (HoPC), matching `UrologySmartHistoryWidget`\n * visibility flags (chief chips + active syndrome).\n */\nexport function formatUrologySmartHistoryToSymptomsNarrative(\n safe: UrologySmartHistoryValue,\n flags: { showPain: boolean; showLUTS: boolean; showHaem: boolean; showSex: boolean },\n): string {\n const { showPain, showLUTS, showHaem, showSex } = flags;\n const parts: string[] = [];\n\n if (showPain) {\n const s = safe.socrates;\n const painLines = hopcNonEmpty([\n s.site ? `Site: ${s.site}` : '',\n s.onset ? `Onset: ${s.onset}` : '',\n s.character ? `Character: ${s.character}` : '',\n s.radiation ? `Radiation: ${s.radiation}` : '',\n s.associated ? `Associated: ${s.associated}` : '',\n s.timing ? `Timing: ${s.timing}` : '',\n s.exacerbating ? `Exacerbating/relieving: ${s.exacerbating}` : '',\n `Severity: ${s.severity}/10`,\n ]);\n const hasNonDefaultPain =\n painLines.length > 1 || (painLines.length === 1 && painLines[0] !== 'Severity: 0/10');\n if (hasNonDefaultPain) parts.push(`SOCRATES:\\n${painLines.join('\\n')}`);\n }\n\n if (showLUTS) {\n const ip = safe.ipss;\n const any =\n ip.incomplete ||\n ip.frequency ||\n ip.intermittency ||\n ip.urgency ||\n ip.weakStream ||\n ip.straining ||\n ip.nocturia ||\n safe.ipssQoL;\n if (any) {\n const ipssTotal = urologyIpssSevenTotal(safe.ipss);\n const ipssBandLabel = urologyIpssBand(ipssTotal);\n parts.push(`IPSS: ${ipssTotal}/35 (${ipssBandLabel}) · QoL ${safe.ipssQoL}/6`);\n }\n }\n\n if (showHaem) {\n const h = safe.haematuria;\n const timing = hopcMeaningfulStr(h.timing);\n const haemLines = hopcNonEmpty([\n h.present ? 'Haematuria present' : '',\n timing ? `Timing: ${timing}` : '',\n h.painful ? 'Painful' : '',\n h.clots ? 'Clots' : '',\n ]);\n if (haemLines.length) parts.push(`Haematuria:\\n${haemLines.join('\\n')}`);\n }\n\n if (showSex) {\n const sx = safe.sexual;\n const infertility = sx.infertilityMonths;\n const sexLines = hopcNonEmpty([\n hopcMeaningfulStr(sx.erectile) ? `Erectile function: ${hopcMeaningfulStr(sx.erectile)}` : '',\n hopcMeaningfulStr(sx.libido) ? `Libido: ${hopcMeaningfulStr(sx.libido)}` : '',\n hopcMeaningfulStr(sx.ejaculation) ? `Ejaculation: ${hopcMeaningfulStr(sx.ejaculation)}` : '',\n Number.isFinite(infertility) && infertility > 0 ? `Infertility: ${infertility} months` : '',\n ]);\n if (sexLines.length) parts.push(`Sexual/reproductive:\\n${sexLines.join('\\n')}`);\n }\n\n return parts.join('\\n\\n').trim();\n}\n\n/** Structured urology exam → free-text `clinical_examination` (API / read-only parity). */\nexport function formatUrologyExaminationToClinicalExamination(v: UrologyExaminationValue): string {\n const sections: string[] = [];\n\n const generalLabels: Record<keyof UrologyExaminationValue['general'], string> = {\n pallor: 'Pallor (chronic dz)',\n oedema: 'Oedema (renal)',\n icterus: 'Icterus',\n lymphadenopathy: 'Lymphadenopathy',\n };\n const general = (Object.keys(generalLabels) as Array<keyof UrologyExaminationValue['general']>)\n .filter((k) => v.general[k])\n .map((k) => generalLabels[k]);\n if (general.length) sections.push(`General: ${general.join(', ')}`);\n\n const abdLabels: Record<keyof UrologyExaminationValue['abdomen'], string> = {\n distension: 'Distension',\n scars: 'Surgical scars',\n mass: 'Visible mass',\n kidneyPalpable: 'Kidney palpable',\n bladderPalpable: 'Bladder palpable',\n renalAngleTender: 'Renal angle tender',\n bladderDull: 'Bladder dullness (retention)',\n };\n const abd = (Object.keys(abdLabels) as Array<keyof UrologyExaminationValue['abdomen']>)\n .filter((k) => v.abdomen[k])\n .map((k) => abdLabels[k]);\n if (abd.length) sections.push(`Abdomen: ${abd.join(', ')}`);\n\n const guLabels: Record<keyof UrologyExaminationValue['gu'], string> = {\n meatusAbnormal: 'Meatus abnormal (hypospadias?)',\n phimosis: 'Phimosis / paraphimosis',\n lesions: 'Penile lesions / ulcers',\n scrotalSwelling: 'Scrotal swelling',\n transilluminant: 'Transilluminant',\n tenderTestis: 'Tender testis',\n hydrocele: 'Hydrocele',\n varicocele: 'Varicocele',\n suspiciousMass: 'Suspicious mass',\n };\n const gu = (Object.keys(guLabels) as Array<keyof UrologyExaminationValue['gu']>)\n .filter((k) => v.gu[k])\n .map((k) => guLabels[k]);\n if (gu.length) sections.push(`GU: ${gu.join(', ')}`);\n\n const dreBits = hopcNonEmpty([\n v.dre.done ? 'Performed' : '',\n v.dre.sizeGrams > 0 ? `Size ~${v.dre.sizeGrams} g` : '',\n v.dre.consistency ? `Consistency: ${v.dre.consistency}` : '',\n v.dre.medianSulcus ? `Median sulcus: ${v.dre.medianSulcus}` : '',\n v.dre.tenderness ? 'Tenderness' : '',\n ]);\n if (dreBits.length) sections.push(`DRE: ${dreBits.join(', ')}`);\n\n return sections.join('\\n');\n}\n\nfunction str(x: unknown): string {\n return typeof x === 'string' ? x : '';\n}\n\nfunction bool(x: unknown): boolean {\n return x === true;\n}\n\nfunction nonNegInt(x: unknown): number {\n const n = Number(x);\n if (!Number.isFinite(n)) return 0;\n return Math.max(0, Math.round(n));\n}\n\nexport function normalizeUrologySmartHistory(raw: unknown): UrologySmartHistoryValue {\n const base = defaultUrologySmartHistory();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const r = raw as Record<string, unknown>;\n\n const soc = r.socrates && typeof r.socrates === 'object' && !Array.isArray(r.socrates) ? r.socrates : {};\n const socObj = soc as Record<string, unknown>;\n const sev = Number(socObj.severity);\n const socrates = {\n site: str(socObj.site),\n onset: str(socObj.onset),\n character: str(socObj.character),\n radiation: str(socObj.radiation),\n associated: str(socObj.associated),\n timing: str(socObj.timing),\n exacerbating: str(socObj.exacerbating),\n severity: Number.isFinite(sev) ? Math.min(10, Math.max(0, Math.round(sev))) : 0,\n };\n\n const ipRaw = r.ipss && typeof r.ipss === 'object' && !Array.isArray(r.ipss) ? r.ipss : {};\n const ip = ipRaw as Record<string, unknown>;\n const ipss: UrologyIpss = {\n incomplete: ipssItem(ip.incomplete),\n frequency: ipssItem(ip.frequency),\n intermittency: ipssItem(ip.intermittency),\n urgency: ipssItem(ip.urgency),\n weakStream: ipssItem(ip.weakStream ?? ip.weak_stream),\n straining: ipssItem(ip.straining),\n nocturia: ipssItem(ip.nocturia),\n };\n\n const qolRaw = Number(r.ipssQoL);\n const ipssQoL = Number.isFinite(qolRaw) ? Math.min(6, Math.max(0, Math.round(qolRaw))) : 0;\n\n const haRaw = r.haematuria && typeof r.haematuria === 'object' && !Array.isArray(r.haematuria) ? r.haematuria : {};\n const ha = haRaw as Record<string, unknown>;\n const haematuria = {\n present: bool(ha.present),\n timing: str(ha.timing) || 'none',\n painful: bool(ha.painful),\n clots: bool(ha.clots),\n };\n\n const sxRaw = r.sexual && typeof r.sexual === 'object' && !Array.isArray(r.sexual) ? r.sexual : {};\n const sx = sxRaw as Record<string, unknown>;\n const infertilityMonths = nonNegInt(sx.infertilityMonths);\n const sexual = {\n erectile: str(sx.erectile) || 'none',\n libido: str(sx.libido) || 'none',\n ejaculation: str(sx.ejaculation) || 'none',\n infertilityMonths,\n };\n\n const pastNotes = str(r.pastNotes);\n\n return {\n socrates,\n ipss,\n ipssQoL,\n haematuria,\n sexual,\n pastNotes,\n };\n}\n\n/** Map stored select value: empty or literal \"none\" → internal empty string for DRE selects. */\nfunction dreSelectStr(x: unknown): string {\n const t = str(x).trim();\n if (!t || t.toLowerCase() === 'none') return '';\n return t;\n}\n\nexport function normalizeUrologyExamination(raw: unknown): UrologyExaminationValue {\n const base = defaultUrologyExamination();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const r = raw as Record<string, unknown>;\n\n const regions = Array.isArray(r.regions)\n ? (r.regions as unknown[]).filter((x): x is string => typeof x === 'string')\n : [];\n\n const g = r.general && typeof r.general === 'object' && !Array.isArray(r.general) ? r.general : {};\n const gObj = g as Record<string, unknown>;\n const general = {\n pallor: bool(gObj.pallor),\n oedema: bool(gObj.oedema),\n icterus: bool(gObj.icterus),\n lymphadenopathy: bool(gObj.lymphadenopathy),\n };\n\n const ab = r.abdomen && typeof r.abdomen === 'object' && !Array.isArray(r.abdomen) ? r.abdomen : {};\n const abObj = ab as Record<string, unknown>;\n const abdomen = {\n distension: bool(abObj.distension),\n scars: bool(abObj.scars),\n mass: bool(abObj.mass),\n kidneyPalpable: bool(abObj.kidneyPalpable),\n bladderPalpable: bool(abObj.bladderPalpable),\n renalAngleTender: bool(abObj.renalAngleTender),\n bladderDull: bool(abObj.bladderDull),\n };\n\n const guRaw = r.gu && typeof r.gu === 'object' && !Array.isArray(r.gu) ? r.gu : {};\n const guObj = guRaw as Record<string, unknown>;\n const gu = {\n meatusAbnormal: bool(guObj.meatusAbnormal),\n phimosis: bool(guObj.phimosis),\n lesions: bool(guObj.lesions),\n scrotalSwelling: bool(guObj.scrotalSwelling),\n transilluminant: bool(guObj.transilluminant),\n tenderTestis: bool(guObj.tenderTestis),\n hydrocele: bool(guObj.hydrocele),\n varicocele: bool(guObj.varicocele),\n suspiciousMass: bool(guObj.suspiciousMass),\n };\n\n const dr = r.dre && typeof r.dre === 'object' && !Array.isArray(r.dre) ? r.dre : {};\n const drObj = dr as Record<string, unknown>;\n const sizeG = Number(drObj.sizeGrams);\n const dre = {\n done: bool(drObj.done),\n sizeGrams: Number.isFinite(sizeG) && sizeG >= 0 ? Math.round(sizeG) : 0,\n consistency: dreSelectStr(drObj.consistency),\n medianSulcus: dreSelectStr(drObj.medianSulcus),\n tenderness: bool(drObj.tenderness),\n };\n\n const examinationNotes = str(r.examinationNotes);\n\n return {\n regions,\n general,\n abdomen,\n gu,\n dre,\n examinationNotes,\n };\n}\n\nexport function normalizeUrologyPathway(raw: unknown): UrologyPathwayValue {\n const base = defaultUrologyPathway();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const r = raw as Record<string, unknown>;\n\n const stoneSizeMm = nonNegInt(r.stoneSizeMm);\n const hydronephrosis = bool(r.hydronephrosis);\n const prostateVolumeCc = Math.max(0, Number(r.prostateVolumeCc) || 0);\n const psaNgMl = Math.max(0, Number(r.psaNgMl) || 0);\n const uroflowQmaxMlSec = Math.max(0, Number(r.uroflowQmaxMlSec) || 0);\n\n const riskRaw = r.risk && typeof r.risk === 'object' && !Array.isArray(r.risk) ? r.risk : {};\n const rk = riskRaw as Record<string, unknown>;\n const risk: UrologyPathwayRisk = {\n ckd: bool(rk.ckd),\n diabetes: bool(rk.diabetes),\n anticoagulants: bool(rk.anticoagulants),\n activeInfection: bool(rk.activeInfection),\n };\n\n return {\n stoneSizeMm,\n hydronephrosis,\n prostateVolumeCc,\n psaNgMl,\n uroflowQmaxMlSec,\n risk,\n };\n}\n","/** Stored value for `pain_scale_flags` — numeric pain scale + checkbox flags (any specialty). */\nexport type UrinePregnancyTest = '' | 'Positive' | 'Negative' | 'Not done';\n\nexport type PainScaleFlagsValue = {\n pain: number;\n flags: string[];\n /** Optional BP recorded at triage (free text e.g. \"130/86\"). */\n bp?: string;\n /** Optional UPT (urine pregnancy test) outcome. Used by OB/GYN triage. */\n upt?: UrinePregnancyTest;\n};\n\nconst UPT_VALUES: UrinePregnancyTest[] = ['', 'Positive', 'Negative', 'Not done'];\n\nfunction isUpt(x: unknown): x is UrinePregnancyTest {\n return typeof x === 'string' && (UPT_VALUES as string[]).includes(x);\n}\n\nexport function normalizePainScaleFlags(\n raw: unknown,\n bounds?: { min?: number; max?: number },\n): PainScaleFlagsValue {\n const min = bounds?.min ?? 0;\n const max = bounds?.max ?? 10;\n let pain = min;\n let flags: string[] = [];\n let bp = '';\n let upt: UrinePregnancyTest = '';\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const p = Number(o.pain);\n if (Number.isFinite(p)) pain = Math.min(max, Math.max(min, p));\n if (Array.isArray(o.flags)) {\n flags = o.flags.filter((x): x is string => typeof x === 'string');\n }\n if (typeof o.bp === 'string') bp = o.bp;\n if (isUpt(o.upt)) upt = o.upt;\n }\n return { pain, flags, bp, upt };\n}\n","import type {\n FormDef,\n FormState,\n FormValues,\n FieldDef,\n FormulaExpr,\n PainScaleFlagsFieldDef,\n} from './types';\nimport { validateForm } from './validate';\nimport { evaluateRules } from './rules';\nimport type { PersistenceProvider, SavedState } from './persistence';\nimport { NO_OP_PROVIDER } from './persistence';\nimport { applyPrefill } from './prefill';\nimport {\n defaultGeneralSurgeryExamination,\n defaultGeneralSurgeryGrading,\n defaultGeneralSurgerySmartHistory,\n} from './generalSurgeryPathway';\nimport {\n defaultUrologyExamination,\n defaultUrologyPathway,\n defaultUrologySmartHistory,\n} from './urologyPathway';\nimport { normalizePainScaleFlags } from './painScaleFlags';\ntype Listener = (state: FormState) => void;\ntype EventListener = (event: string, payload?: any) => void;\ntype UploadHandler = (file: File | Blob, filename: string) => Promise<string>;\ntype DraftChangeHandler = (payload: SavedState) => void | Promise<void>;\n\nexport interface StoreAuthConfig {\n /**\n * Base URL for OTP API calls. Defaults to `process.env.NEXT_PUBLIC_API_URL` when not set.\n * Set this in the host app to decouple the library from Next.js env vars.\n */\n baseUrl?: string;\n /** Path to send OTP. Defaults to \"/api/auth/otp/send/\". */\n sendPath?: string;\n /** Path to resend OTP. Defaults to \"/api/auth/otp/resend/\". */\n resendPath?: string;\n /** Path to verify OTP. Defaults to \"/api/auth/otp/verify/\". */\n verifyPath?: string;\n /** Country code prefix for phone numbers. Defaults to \"+91\". */\n defaultCountryCode?: string;\n}\n\nexport interface StoreConfig {\n persistence?: PersistenceProvider;\n prefillData?: Record<string, any>; // Data for prefill fallback\n role?: string; // Current user role\n onEvent?: EventListener;\n /** Handler for image, media, and signature uploads; fallback for file upload when `onFileUpload` is omitted. */\n onUpload?: UploadHandler;\n /** Optional handler for `file_upload` fields only (`FormFileUploadWidget`). Uses `onUpload` when not set. */\n onFileUpload?: UploadHandler;\n onDraftChange?: DraftChangeHandler; // Consumer-provided draft submission handler\n /**\n * Auth / OTP configuration. Lets the host app supply the API base URL and\n * paths so the library doesn't depend on Next.js environment variables.\n */\n auth?: StoreAuthConfig;\n /**\n * Voice dictation support. When provided, fields marked with `voice: true`\n * in the schema will display a microphone button.\n * The host app owns all recording logic and supplies two callbacks:\n * - `startRecording` — begin capturing audio\n * - `stopRecording` — stop capturing, transcribe, and return the transcript\n */\n voice?: {\n startRecording: (fieldId?: string) => Promise<void>;\n stopRecording: () => Promise<string>;\n };\n}\n\nexport class FormStore {\n private state: FormState;\n private schema: FormDef;\n private fieldMap: Record<string, FieldDef>;\n private listeners: Set<Listener> = new Set();\n private persistence: PersistenceProvider;\n private prefillData: Record<string, any> = {};\n private config: StoreConfig;\n\n // Widget-owned errors that schema validation cannot express (e.g. \"OTP not sent yet\").\n // Merged on top of validateForm output in evaluate().\n private externalErrors: Record<string, string | null> = {};\n\n // Cache for debounce\n private saveTimeout: any = null;\n private draftCallbackTimeout: any = null;\n\n constructor(schema: FormDef, config: StoreConfig = {}) {\n this.schema = schema;\n this.config = config;\n this.persistence = config.persistence || NO_OP_PROVIDER;\n this.prefillData = config.prefillData || {};\n\n // Create a map for O(1) access\n this.fieldMap = {};\n schema.fields.forEach(f => {\n this.fieldMap[f.id] = f;\n });\n\n // Use the first workflow state if provided, otherwise fall back to a sensible default\n const initialWorkflowState = schema.workflow?.states?.[0] || 'DRAFT';\n\n this.state = {\n values: {},\n errors: {},\n touched: {},\n visibility: {},\n disabled: {},\n workflowState: initialWorkflowState,\n isValid: true,\n isSubmitting: false,\n submitAttempted: false,\n pendingUploads: 0\n };\n\n // Initialize defaults based on schema\n this.initializeDefaults();\n this.evaluate();\n }\n\n private initializeDefaults() {\n const values: FormValues = {};\n this.schema.fields.forEach(field => {\n if (field.type === 'static_text') return; // No value; display-only\n if (field.defaultValue !== undefined) {\n values[field.id] = field.defaultValue;\n } else {\n // Safe defaults\n if (field.type === 'repeatable') values[field.id] = [];\n else if (field.type === 'checkbox' || field.type === 'multiselect') values[field.id] = [];\n else if (field.type === 'smart_textarea') values[field.id] = { text: '', extractedKeywords: [] };\n else if (field.type === 'suggestion_textarea' || field.type === 'complaint_chips') values[field.id] = '';\n else if (field.type === 'lens_assessment')\n values[field.id] = {\n notes: '',\n assessmentKey: undefined,\n locs: {\n OD: { NO: 0, NC: 0, C: 0, PSC: 0 },\n OS: { NO: 0, NC: 0, C: 0, PSC: 0 },\n },\n };\n else if (field.type === 'functional_impairment_score')\n values[field.id] = {\n reading: 0,\n nightDriving: 0,\n glare: 0,\n occupation: 0,\n adl: 0,\n };\n else if (field.type === 'biometry_iol_workup')\n values[field.id] = {\n axialLengthOD: '',\n axialLengthOS: '',\n k1k2AxisOD: '',\n k1k2AxisOS: '',\n anteriorChamberDepthOD: '',\n anteriorChamberDepthOS: '',\n iolPowerOD: '',\n iolPowerOS: '',\n targetRefractionOD: '',\n targetRefractionOS: '',\n formula: 'SRK/T',\n method: 'optical_biometry',\n cornealTopoUploaded: false,\n specularMicroscopyDone: false,\n endothelialCount: '',\n };\n else if (field.type === 'surgical_risk_flags')\n values[field.id] = { OD: [], OS: [] };\n else if (field.type === 'toggle') values[field.id] = false;\n else if (field.type === 'slider') {\n const s = field as { min?: number; defaultValue?: number };\n values[field.id] = s.defaultValue ?? s.min ?? 0;\n } else if (field.type === 'general_surgery_smart_history') {\n values[field.id] = field.defaultValue ?? defaultGeneralSurgerySmartHistory();\n } else if (field.type === 'general_surgery_examination') {\n values[field.id] = field.defaultValue ?? defaultGeneralSurgeryExamination();\n } else if (field.type === 'general_surgery_grading') {\n values[field.id] = field.defaultValue ?? defaultGeneralSurgeryGrading();\n } else if (field.type === 'urology_smart_history') {\n values[field.id] = field.defaultValue ?? defaultUrologySmartHistory();\n } else if (field.type === 'urology_examination') {\n values[field.id] = field.defaultValue ?? defaultUrologyExamination();\n } else if (field.type === 'urology_pathway') {\n values[field.id] = field.defaultValue ?? defaultUrologyPathway();\n } else if (field.type === 'pain_scale_flags') {\n const f = field as PainScaleFlagsFieldDef;\n values[field.id] = normalizePainScaleFlags(\n f.defaultValue ?? { pain: f.min ?? 0, flags: [] },\n { min: f.min, max: f.max },\n );\n } else values[field.id] = null; // or ''\n }\n });\n this.state.values = values;\n }\n\n // --- State Access ---\n\n getState() {\n return this.state;\n }\n\n getFieldState(fieldId: string) {\n return {\n value: this.state.values[fieldId],\n error: this.state.errors[fieldId],\n touched: this.state.touched[fieldId],\n visible: this.state.visibility[fieldId] ?? true,\n disabled: this.state.disabled[fieldId] ?? false,\n };\n }\n\n getSchema() {\n return this.schema;\n }\n\n getConfig(): StoreConfig {\n return this.config;\n }\n\n getFieldDef(fieldId: string): FieldDef | undefined {\n return this.fieldMap[fieldId];\n }\n\n getVoice(): StoreConfig['voice'] {\n return this.config.voice;\n }\n\n hasPersistence(): boolean {\n return this.persistence !== NO_OP_PROVIDER;\n }\n\n // --- Actions ---\n\n setValue(fieldId: string, value: any) {\n if (this.state.values[fieldId] === value) return;\n\n this.state.values = { ...this.state.values, [fieldId]: value };\n this.state.touched = { ...this.state.touched, [fieldId]: true };\n \n // Check field events\n this.checkEvents(fieldId, 'onValueChange', value);\n\n // Re-evaluate everything\n this.evaluate();\n this.notify();\n this.scheduleDraftCallback();\n\n // If a consumer draft handler is provided, prefer that over internal persistence.\n if (!this.config.onDraftChange) {\n this.scheduleSave();\n }\n }\n\n /**\n * Set multiple values at once (e.g. from AI analysis). Only updates keys that\n * exist in the schema. Runs evaluate/notify/save once.\n * @param partial Map of fieldId -> value\n * @param options.touch If false, do not mark fields as touched (e.g. for AI-suggested values)\n */\n setValues(partial: Record<string, any>, options?: { touch?: boolean }) {\n const touch = options?.touch !== false;\n let changed = false;\n const newValues = { ...this.state.values };\n const newTouched = { ...this.state.touched };\n\n for (const [fieldId, value] of Object.entries(partial)) {\n if (!this.fieldMap[fieldId]) continue; // Only apply known fields\n // Intentionally no debug logs here; widgets defensively coerce to arrays.\n if (newValues[fieldId] === value) continue;\n newValues[fieldId] = value;\n if (touch) newTouched[fieldId] = true;\n changed = true;\n }\n\n if (!changed) return;\n\n this.state.values = newValues;\n this.state.touched = newTouched;\n this.evaluate();\n this.notify();\n this.scheduleSave();\n }\n\n /**\n * Let a widget report an error that schema validation cannot express\n * (e.g. \"Send OTP to continue\" until the API call succeeds).\n * Pass `null` to clear a previously set external error.\n */\n setExternalError(fieldId: string, message: string | null) {\n if ((this.externalErrors[fieldId] ?? null) === message) return;\n this.externalErrors = { ...this.externalErrors, [fieldId]: message };\n this.evaluate();\n this.notify();\n }\n\n setTouched(fieldId: string) {\n if (this.state.touched[fieldId]) return;\n this.state.touched = { ...this.state.touched, [fieldId]: true };\n \n this.checkEvents(fieldId, 'onBlur', this.state.values[fieldId]);\n \n this.evaluate();\n this.notify();\n }\n\n setRole(role: string) {\n this.config.role = role;\n this.evaluate(); // Re-eval permissions? (Permissions logic to be added if dynamic)\n this.notify();\n }\n\n // --- Lifecycle ---\n\n async load() {\n // 1. Load from persistence\n const saved = await this.persistence.load(this.schema.id);\n \n let mergedValues = { ...this.state.values };\n let workflowState = this.state.workflowState;\n\n if (saved) {\n console.log('Loaded draft:', saved);\n mergedValues = { ...mergedValues, ...saved.values };\n workflowState = saved.meta.workflowState || workflowState;\n }\n\n // 2. Apply Prefill (uses fields + prefillData)\n // Always try to apply prefill, it will only fill empty fields\n mergedValues = applyPrefill(mergedValues, this.schema.fields, this.prefillData);\n\n this.state.values = mergedValues;\n this.state.workflowState = workflowState;\n\n this.evaluate();\n this.notify();\n }\n\n private scheduleSave() {\n if (this.saveTimeout) clearTimeout(this.saveTimeout);\n this.saveTimeout = setTimeout(() => {\n this.save();\n }, 1000); // 1s debounce\n }\n\n private scheduleDraftCallback() {\n if (!this.config.onDraftChange) return;\n\n if (this.draftCallbackTimeout) {\n clearTimeout(this.draftCallbackTimeout);\n }\n\n this.draftCallbackTimeout = setTimeout(() => {\n const payload: SavedState = {\n // For consumer callbacks, send values in the same\n // serialized shape used for outbound submissions so\n // media/signature fields are wrapped consistently.\n values: this.serializeValuesForSubmission(this.state.values),\n meta: {\n updatedAt: Date.now(),\n workflowState: this.state.workflowState,\n version: this.schema.version,\n },\n };\n\n this.config.onDraftChange?.(payload);\n }, 5000);\n }\n\n async save() {\n const payload: SavedState = {\n values: this.state.values,\n meta: {\n updatedAt: Date.now(),\n workflowState: this.state.workflowState,\n version: this.schema.version\n }\n };\n await this.persistence.save(this.schema.id, payload);\n this.emit('DRAFT_SAVED', payload);\n }\n\n /**\n * Prepare values for outbound submission to the backend.\n * For media-related fields, wrap the raw S3 key in a typed object so the\n * backend can recognise which fields need presigned GET URLs.\n *\n * Example:\n * \"patient_signature\": \"forms/media-uploads/.../signature.svg\"\n * becomes:\n * \"patient_signature\": {\n * _type: \"s3_key\",\n * value: \"forms/media-uploads/.../signature.svg\"\n * }\n */\n getSerializedValuesForSubmission(): FormValues {\n return this.serializeValuesForSubmission(this.state.values);\n }\n\n /**\n * Raw form values as stored internally, without any serialization or\n * transformation. Useful when consumers need access to richer structures\n * (e.g. smart_textarea keyword metadata) alongside the flattened values\n * returned by getSerializedValuesForSubmission.\n */\n getRawValues(): FormValues {\n return { ...this.state.values };\n }\n\n private serializeValuesForSubmission(values: FormValues): FormValues {\n const result: FormValues = { ...values };\n\n this.schema.fields.forEach((field) => {\n if (field.type === 'static_text') {\n delete result[field.id];\n return;\n }\n if (field.type === 'smart_textarea') {\n const raw = values[field.id];\n result[field.id] = raw?.text ?? null;\n return;\n }\n if (field.type === 'diagnosis_textarea') {\n const raw = values[field.id];\n // Preserve legacy string storage; otherwise submit only the text portion.\n result[field.id] =\n typeof raw === 'string'\n ? raw\n : (raw && typeof raw === 'object' ? ((raw as any).text ?? null) : null);\n return;\n }\n if (field.type === 'ophthal_diagnosis') {\n const raw = values[field.id];\n\n const formatEye = (eyeData: unknown, eyeLabel: string): string => {\n if (!eyeData || typeof eyeData !== 'object') return '';\n const entries = Object.entries(eyeData as Record<string, unknown>)\n .filter(([, value]) => typeof value === 'string' && value.trim())\n .map(([key, value]) => `${key}: ${(value as string).trim()}`);\n if (entries.length === 0) return '';\n return [eyeLabel, ...entries].join('\\n');\n };\n\n const rightEyeText = formatEye(\n raw?.right_eye ?? (raw as any)?.rightEye,\n 'Right Eye',\n );\n const leftEyeText = formatEye(\n raw?.left_eye ?? (raw as any)?.leftEye,\n 'Left Eye',\n );\n\n const parts = [rightEyeText, leftEyeText].filter(Boolean);\n result[field.id] = parts.length > 0 ? parts.join('\\n\\n') : null;\n return;\n }\n if (field.type === 'otp_input') {\n const raw = values[field.id];\n if (typeof raw === 'string') {\n result[field.id] = raw;\n return;\n }\n if (\n raw &&\n typeof raw === 'object' &&\n !Array.isArray(raw) &&\n (raw as { verified?: boolean }).verified === true\n ) {\n const code = (raw as { code?: unknown }).code;\n result[field.id] = typeof code === 'string' ? code : null;\n return;\n }\n result[field.id] = null;\n return;\n }\n if (\n field.type === 'image_upload' ||\n field.type === 'media_upload' ||\n field.type === 'signature' ||\n field.type === 'file_upload'\n ) {\n const raw = values[field.id];\n if (raw === undefined || raw === null || raw === '') {\n return;\n }\n\n const wrapKey = (key: unknown) => {\n if (typeof key !== 'string' || !key) return null;\n return { _type: 's3_key' as const, value: key };\n };\n\n if (Array.isArray(raw)) {\n const wrapped = raw\n .map((item) =>\n typeof item === 'string'\n ? wrapKey(item)\n : wrapKey((item as { s3_key?: string; value?: string }).s3_key\n ?? (item as { value?: string }).value)\n )\n .filter(Boolean);\n if (wrapped.length > 0) {\n result[field.id] = wrapped;\n }\n return;\n }\n\n const key =\n typeof raw === 'string'\n ? raw\n : (raw as { s3_key?: string; value?: string }).s3_key\n ?? (raw as { value?: string }).value\n ?? null;\n\n const wrapped = wrapKey(key);\n if (wrapped) {\n result[field.id] = wrapped;\n }\n }\n });\n\n return result;\n }\n\n // --- Core Logic ---\n\n private evaluate() {\n // 0. Computations (Before rules, so rules can act on computed values)\n if (this.schema.computations) {\n this.schema.computations.forEach(comp => {\n if (comp.type === 'sum') {\n const sum = comp.fields.reduce((acc, fieldId) => {\n const raw = this.state.values[fieldId];\n const fieldDef = this.fieldMap[fieldId];\n const options = fieldDef?.type === 'select' || fieldDef?.type === 'multiselect' || fieldDef?.type === 'radio' || fieldDef?.type === 'checkbox'\n ? (fieldDef as { options?: { value: any; score?: number }[] }).options\n : undefined;\n const hasScoreOptions = options?.some((o: { score?: number }) => o.score !== undefined);\n let val: number;\n if (hasScoreOptions && options) {\n const selected = fieldDef?.type === 'multiselect' || fieldDef?.type === 'checkbox'\n ? (Array.isArray(raw) ? raw : [raw]).filter(Boolean)\n : [raw];\n val = selected.reduce((s, v) => {\n const opt = options.find((o: { value: any }) => o.value === v || String(o.value) === String(v));\n return s + (opt && 'score' in opt && typeof opt.score === 'number' ? opt.score : 0);\n }, 0);\n } else {\n val = Number(raw) || 0;\n }\n return acc + val;\n }, 0);\n \n // Only update if changed to avoid loops? \n // Since this is synchronous and linear, simple assignment is fine.\n // But we should check if it actually changes to avoid potential side effects if we had them.\n if (this.state.values[comp.target] !== sum) {\n this.state.values[comp.target] = sum;\n }\n } else if (comp.type === 'score') {\n const val = Number(this.state.values[comp.source]);\n \n if (\n this.state.values[comp.source] !== undefined && \n this.state.values[comp.source] !== null && \n this.state.values[comp.source] !== ''\n ) {\n let score = 0; \n const matched = comp.ranges.find(r => {\n const min = r.min ?? -Infinity;\n const max = r.max ?? Infinity;\n return val >= min && val <= max;\n });\n if (matched) {\n score = matched.value;\n }\n \n if (this.state.values[comp.target] !== score) {\n this.state.values[comp.target] = score;\n }\n } else {\n // Reset if empty, but be careful not to overwrite prefill/default if untouched? \n // For computations, we generally want reactive behavior.\n if (this.state.values[comp.target] !== 0) {\n this.state.values[comp.target] = 0;\n }\n }\n } else if (comp.type === 'formula') {\n const evalExpr = (expr: FormulaExpr): number => {\n if (expr.type === 'field') {\n return Number(this.state.values[expr.field]) || 0;\n }\n if (expr.type === 'number') {\n return expr.value;\n }\n const left = evalExpr(expr.left);\n const right = evalExpr(expr.right);\n switch (expr.op) {\n case '+': return left + right;\n case '-': return left - right;\n case '*': return left * right;\n case '/': return right === 0 ? 0 : left / right;\n case '**': return Math.pow(left, right);\n default: return 0;\n }\n };\n const result = evalExpr(comp.expression);\n const value = Number.isFinite(result) ? Math.round(result * 10) / 10 : '';\n if (this.state.values[comp.target] !== value) {\n this.state.values[comp.target] = value;\n }\n }\n });\n }\n\n // 1. Rules\n // evaluateRules expects Record<string, FieldDef>\n const ruleResult = evaluateRules(this.state.values, this.schema.rules || [], this.fieldMap);\n this.state.visibility = ruleResult.visibility;\n this.state.disabled = ruleResult.disabled;\n\n // TODO: Merge permission logic into disabled/visibility?\n // Current simple logic:\n if (this.config.role) {\n this.schema.fields.forEach(field => {\n if (field.permissions && field.permissions[this.config.role!]) {\n const perm = field.permissions[this.config.role!];\n if (perm === 'hide') this.state.visibility[field.id] = false;\n if (perm === 'view') this.state.disabled[field.id] = true;\n }\n });\n }\n\n // 2. Validation\n // Only validate visible fields\n // We pass all fields, but validator checks visibility if we passed the full def\n // We need to merge dynamic required state from rules\n const effectiveFields: Record<string, FieldDef> = {};\n Object.keys(this.fieldMap).forEach(key => {\n effectiveFields[key] = {\n ...this.fieldMap[key],\n required: ruleResult.required[key] ?? this.fieldMap[key].required,\n hidden: !this.state.visibility[key], // Inject current visibility\n disabled: this.state.disabled[key]\n };\n });\n\n const errors = validateForm(this.state.values, effectiveFields);\n\n // Overlay widget-owned errors on top of schema-validation errors.\n const merged = { ...errors };\n for (const [id, msg] of Object.entries(this.externalErrors)) {\n if (msg) merged[id] = msg;\n }\n this.state.errors = merged;\n this.state.isValid = Object.keys(merged).length === 0;\n }\n\n // --- Workflow ---\n\n getAvailableTransitions() {\n const transitions = this.schema.workflow?.transitions || [];\n const role = this.config.role;\n return transitions.filter(t => \n t.from === this.state.workflowState &&\n (!role || t.allowedRoles.includes(role))\n );\n }\n\n transition(toState: string) {\n const t = this.getAvailableTransitions().find(tr => tr.to === toState);\n if (!t) throw new Error(`Transition from ${this.state.workflowState} to ${toState} not allowed`);\n\n // Update state\n this.state.workflowState = toState;\n \n // Check for webhooks/signals\n if (t.webhookKey) {\n this.emit('FINALISE_REQUESTED', { webhookKey: t.webhookKey, values: this.state.values });\n }\n\n this.save(); // Save new state\n this.notify();\n }\n\n // --- Events ---\n\n private checkEvents(fieldId: string, trigger: string, value: any) {\n const field = this.fieldMap[fieldId];\n if (!field?.events) return;\n\n field.events.forEach(evt => {\n if (evt.trigger === trigger) {\n let match = true;\n if (evt.condition) {\n // Simple condition check\n if (evt.condition.op === '>') match = Number(value) > Number(evt.condition.value);\n // ... expand other ops if needed, reusing evaluateCondition from rules logic ideally\n // For MVP assume simple check or duplicate logic slightly for speed\n }\n \n if (match) {\n this.emit(evt.emit, { fieldId, value });\n }\n }\n });\n }\n\n private emit(event: string, payload?: any) {\n let finalPayload = payload;\n\n // For outbound submission-style events, ensure media fields are wrapped\n // with a type so the backend can decide which fields need presigned URLs.\n if (event === 'FINALISE_REQUESTED' || event === 'DRAFT_SAVED') {\n if (payload && typeof payload === 'object' && 'values' in payload) {\n finalPayload = {\n ...payload,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n values: this.serializeValuesForSubmission(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (payload as any).values ?? {},\n ),\n };\n }\n }\n\n console.log('[Formanitor Event]', event, finalPayload);\n if (this.config.onEvent) {\n this.config.onEvent(event, finalPayload);\n }\n }\n\n /**\n * Update mutable config properties (callbacks, role) without recreating\n * the store. This allows the host app to pass fresh closures (e.g. an\n * upload handler whose auth token was initially undefined) after the\n * initial render.\n */\n updateConfig(next: Partial<StoreConfig>) {\n let needsReeval = false;\n\n if (next.onUpload !== undefined) this.config.onUpload = next.onUpload;\n if (next.onFileUpload !== undefined)\n this.config.onFileUpload = next.onFileUpload;\n if (next.onEvent !== undefined) this.config.onEvent = next.onEvent;\n if (next.onDraftChange !== undefined) this.config.onDraftChange = next.onDraftChange;\n if (next.voice !== undefined) this.config.voice = next.voice;\n\n if (next.role !== undefined && next.role !== this.config.role) {\n this.config.role = next.role;\n needsReeval = true;\n }\n\n if (next.prefillData !== undefined && next.prefillData !== this.prefillData) {\n this.prefillData = next.prefillData;\n this.state.values = applyPrefill(this.state.values, this.schema.fields, this.prefillData);\n needsReeval = true;\n }\n\n if (needsReeval) {\n this.evaluate();\n this.notify();\n }\n }\n\n getUploadHandler(): UploadHandler | undefined {\n return this.config.onUpload;\n }\n\n /** Resolved handler for `file_upload` widgets: `onFileUpload` ?? `onUpload`. */\n getFileUploadHandler(): UploadHandler | undefined {\n return this.config.onFileUpload ?? this.config.onUpload;\n }\n\n private preSubmitHandlers: Map<string, () => Promise<void>> = new Map();\n\n registerPreSubmitHandler(fieldId: string, fn: () => Promise<void>) {\n this.preSubmitHandlers.set(fieldId, fn);\n }\n\n unregisterPreSubmitHandler(fieldId: string) {\n this.preSubmitHandlers.delete(fieldId);\n }\n\n /**\n * Runs all registered pre-submit handlers in parallel.\n * Call this before getSerializedValuesForSubmission() to ensure any\n * unconfirmed signatures (or similar) are uploaded first.\n */\n async flushPendingUploads(): Promise<void> {\n const handlers = Array.from(this.preSubmitHandlers.values());\n await Promise.all(handlers.map(fn => fn()));\n }\n\n incrementPendingUploads() {\n this.state.pendingUploads = (this.state.pendingUploads ?? 0) + 1;\n this.notify();\n }\n\n decrementPendingUploads() {\n this.state.pendingUploads = Math.max(0, (this.state.pendingUploads ?? 0) - 1);\n this.notify();\n }\n\n // Mark that a submit attempt has been made so UI can decide when to show errors\n markSubmitAttempted() {\n if (!this.state.submitAttempted) {\n this.state.submitAttempted = true;\n this.notify();\n }\n }\n\n // --- Subscriptions ---\n\n subscribe(listener: Listener) {\n console.log('[FormStore] subscribe: adding listener. Total before add:', this.listeners.size);\n this.listeners.add(listener);\n return () => {\n console.log('[FormStore] unsubscribe: removing listener. Total before remove:', this.listeners.size);\n this.listeners.delete(listener);\n console.log('[FormStore] unsubscribe: removed listener. Total after remove:', this.listeners.size);\n };\n }\n\n private notify() {\n console.log('[FormStore] notify: listener count', this.listeners.size, 'state snapshot', {\n workflowState: this.state.workflowState,\n isValid: this.state.isValid,\n });\n this.listeners.forEach(l => l(this.state));\n }\n}\n","import React, { createContext, useContext, useState, useCallback } from 'react';\n\ninterface VoiceContextType {\n activeFieldId: string | null;\n setActiveFieldId: (id: string | null) => void;\n}\n\nconst VoiceContext = createContext<VoiceContextType>({\n activeFieldId: null,\n setActiveFieldId: () => {},\n});\n\nexport function useVoiceContext(): VoiceContextType {\n return useContext(VoiceContext);\n}\n\ninterface VoiceContextProviderProps {\n children: React.ReactNode;\n}\n\nexport function VoiceContextProvider({ children }: VoiceContextProviderProps) {\n const [activeFieldId, setActiveFieldIdState] = useState<string | null>(null);\n\n const setActiveFieldId = useCallback((id: string | null) => {\n setActiveFieldIdState(id);\n }, []);\n\n return (\n <VoiceContext.Provider value={{ activeFieldId, setActiveFieldId }}>\n {children}\n </VoiceContext.Provider>\n );\n}\n","import React, { createContext, useContext, useEffect, useRef } from 'react';\nimport { FormStore } from '../core/store';\nimport type { StoreConfig } from '../core/store';\nimport type { FormDef, DoctorFrequentItems, DiagnosticPackage } from '../core/types';\nimport { VoiceContextProvider } from './VoiceContext';\n\nconst FormContext = createContext<FormStore | null>(null);\n\nconst emptyFrequentItems: DoctorFrequentItems = {\n medications: [],\n investigations: [],\n procedures: [],\n};\n\nconst FrequentItemsContext = createContext<DoctorFrequentItems>(emptyFrequentItems);\nconst PackagesContext = createContext<DiagnosticPackage[]>([]);\n\nexport type FieldHandler = {\n onSearch: (query: string) => Promise<any[]>;\n recentlyUsed?: any[];\n /**\n * Called by widgets that display externally-fetched data (e.g. vitals).\n * Invoked once on mount and again when the user hits the refresh button.\n * The resolved value is written directly into the field's form state.\n */\n onFetch?: () => Promise<any>;\n /**\n * Called by the referral widget to load dropdown options. May return\n * { specializations: string[] } or { label: string; value: any }[].\n */\n onFetchOptions?: () => Promise<{ specializations?: string[] } | { label: string; value: any }[]>;\n /**\n * Called by diagnosis_textarea widgets to fetch condition-wise grades\n * from diagnosis text input.\n */\n onFetchDiagnosisGrades?: (query: string) => Promise<any>;\n /**\n * Host opens MAR / medication-orders UI (e.g. IPD discharge). On success the host\n * should update this field's value in form state.\n */\n onOpenMedicationOrders?: () => void | Promise<void>;\n /**\n * Host opens CMDash discharge medication orders slide-over. On save, return the\n * prescription payload so the widget can normalize and store it in form state.\n */\n onOpenDischargeMedicationOrders?: () => Promise<any | null> | any | null;\n};\n\nexport type FieldHandlersMap = Record<string, FieldHandler>;\n\nconst FieldHandlersContext = createContext<FieldHandlersMap>({});\n\nexport function useFieldHandlers(fieldId: string): FieldHandler {\n const map = useContext(FieldHandlersContext);\n return map[fieldId] ?? { onSearch: async () => [], recentlyUsed: [] };\n}\n\nexport function useFrequentItems(): DoctorFrequentItems {\n return useContext(FrequentItemsContext);\n}\n\nexport function usePackages(): DiagnosticPackage[] {\n return useContext(PackagesContext);\n}\n\ninterface FormProviderProps {\n schema: FormDef;\n config?: StoreConfig;\n fieldHandlers?: FieldHandlersMap;\n /**\n * Doctor-scoped frequently used items (e.g. from GET /api/doctor-state/frequent-items/).\n * Consumer fetches and passes this; Forminator flows it to medications, investigations, and procedures widgets.\n */\n frequentItems?: DoctorFrequentItems;\n packages?: DiagnosticPackage[];\n children: React.ReactNode;\n}\n\nexport const FormProvider: React.FC<FormProviderProps> = ({\n schema,\n config,\n fieldHandlers,\n frequentItems,\n packages,\n children,\n}) => {\n const storeRef = useRef<FormStore | null>(null);\n\n if (!storeRef.current) {\n storeRef.current = new FormStore(schema, config);\n }\n\n // Keep mutable config (callbacks, role) in sync across re-renders so the\n // store always uses the latest upload handler / event listener / role.\n useEffect(() => {\n if (storeRef.current && config) {\n storeRef.current.updateConfig(config);\n }\n });\n\n useEffect(() => {\n storeRef.current?.load();\n }, []);\n\n const frequentItemsValue = frequentItems ?? emptyFrequentItems;\n\n return (\n <FormContext.Provider value={storeRef.current}>\n <FieldHandlersContext.Provider value={fieldHandlers ?? {}}>\n <FrequentItemsContext.Provider value={frequentItemsValue}>\n <PackagesContext.Provider value={packages ?? []}>\n <VoiceContextProvider>\n {children}\n </VoiceContextProvider>\n </PackagesContext.Provider>\n </FrequentItemsContext.Provider>\n </FieldHandlersContext.Provider>\n </FormContext.Provider>\n );\n};\n\nexport function useFormStore(): FormStore {\n const context = useContext(FormContext);\n if (!context) {\n throw new Error('useFormStore must be used within a FormProvider');\n }\n return context;\n}\n","import { useState, useEffect } from \"react\";\nimport { useFormStore } from \"./FormProvider\";\nimport type { FormState } from \"../core/types\";\n\nexport function useForm() {\n const store = useFormStore();\n\n const [state, setState] = useState<FormState>(store.getState());\n\n useEffect(() => {\n const unsubscribe = store.subscribe((newState) => {\n setState({ ...newState });\n });\n return unsubscribe;\n }, [store]);\n\n return {\n state,\n store,\n submit: store.save.bind(store), // Draft save for now\n transition: store.transition.bind(store),\n availableTransitions: store.getAvailableTransitions(),\n hasPersistence: store.hasPersistence(),\n getSerializedValues: store.getSerializedValuesForSubmission.bind(store),\n getRawValues: store.getRawValues.bind(store),\n markSubmitAttempted: store.markSubmitAttempted.bind(store),\n flushPendingUploads: store.flushPendingUploads.bind(store),\n };\n}\n","import { useState, useEffect } from 'react';\nimport { useFormStore } from './FormProvider';\nimport type { FieldState, FieldDef } from '../core/types';\n\nexport function useField(fieldId: string) {\n const store = useFormStore();\n const [fieldState, setFieldState] = useState<FieldState>(store.getFieldState(fieldId));\n\n useEffect(() => {\n const unsubscribe = store.subscribe(() => {\n const newState = store.getFieldState(fieldId);\n // Simple shallow check to avoid re-renders if nothing changed for THIS field\n setFieldState(prev => {\n if (\n prev.value === newState.value &&\n prev.error === newState.error &&\n prev.touched === newState.touched &&\n prev.visible === newState.visible &&\n prev.disabled === newState.disabled\n ) {\n return prev;\n }\n return newState;\n });\n });\n return unsubscribe;\n }, [store, fieldId]);\n\n const setValue = (val: any) => store.setValue(fieldId, val);\n const setTouched = () => store.setTouched(fieldId);\n\n // Get definition from schema\n const fieldDef: FieldDef | undefined = store.getFieldDef(fieldId);\n\n return {\n ...fieldState,\n fieldDef,\n setValue,\n setTouched\n };\n}\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import React, { useCallback, useState } from 'react';\nimport { Mic, Loader2 } from 'lucide-react';\nimport { useFormStore } from './FormProvider';\nimport { useVoiceContext } from './VoiceContext';\n\ntype RecordingStatus = 'idle' | 'recording' | 'transcribing';\n\nfunction RecordingWave() {\n const bars = [\n { dur: '0.6s', values: '3;10;3', yValues: '4.5;0;4.5', delay: '0s' },\n { dur: '0.6s', values: '8;3;8', yValues: '2;4.5;2', delay: '0.1s' },\n { dur: '0.6s', values: '5;11;5', yValues: '3.5;0.5;3.5', delay: '0.05s' },\n { dur: '0.6s', values: '10;4;10', yValues: '1;4;1', delay: '0.15s' },\n ];\n return (\n <svg width=\"16\" height=\"12\" viewBox=\"0 0 18 12\" aria-hidden>\n {bars.map((b, i) => (\n <rect key={i} x={i * 4 + 1} width=\"2.5\" rx=\"1.25\" fill=\"currentColor\" y=\"0\" height=\"12\">\n <animate attributeName=\"height\" values={b.values} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n <animate attributeName=\"y\" values={b.yValues} dur={b.dur} begin={b.delay} repeatCount=\"indefinite\" />\n </rect>\n ))}\n </svg>\n );\n}\n\ninterface VoiceMicButtonProps {\n fieldId: string;\n onTranscriptReady: (transcript: string) => void;\n}\n\nexport function VoiceMicButton({ fieldId, onTranscriptReady }: VoiceMicButtonProps) {\n const store = useFormStore();\n const { activeFieldId, setActiveFieldId } = useVoiceContext();\n const [status, setStatus] = useState<RecordingStatus>('idle');\n\n const voice = store.getVoice();\n\n const isActive = activeFieldId === fieldId;\n const isRecording = status === 'recording' && isActive;\n const isTranscribing = status === 'transcribing' && isActive;\n const isBlocked = activeFieldId !== null && !isActive;\n\n const handleClick = useCallback(async () => {\n if (!voice || isBlocked || isTranscribing) return;\n\n if (isRecording) {\n setStatus('transcribing');\n try {\n const transcript = await voice.stopRecording();\n if (transcript) onTranscriptReady(transcript);\n } catch {\n // silently reset on error\n } finally {\n setStatus('idle');\n setActiveFieldId(null);\n }\n } else {\n setActiveFieldId(fieldId);\n setStatus('recording');\n try {\n await voice.startRecording(fieldId);\n } catch {\n setStatus('idle');\n setActiveFieldId(null);\n }\n }\n }, [voice, isBlocked, isTranscribing, isRecording, fieldId, onTranscriptReady, setActiveFieldId]);\n\n const title = isTranscribing\n ? 'Processing…'\n : isRecording\n ? 'Stop recording'\n : 'Dictate this field';\n\n return (\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={isBlocked || isTranscribing}\n title={title}\n className={[\n 'flex items-center gap-1 rounded px-1 py-0.5',\n 'text-[11px] font-medium transition-opacity',\n isBlocked ? 'pointer-events-none opacity-30' : '',\n isTranscribing ? 'cursor-wait opacity-50' : '',\n !isBlocked && !isTranscribing ? 'hover:opacity-70' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {isTranscribing ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin text-slate-400\" />\n ) : isRecording ? (\n <>\n <span className=\"text-rose-400\">\n <RecordingWave />\n </span>\n <span className=\"text-rose-400\">Stop</span>\n </>\n ) : (\n <Mic className=\"h-4 w-4 text-slate-400\" />\n )}\n </button>\n );\n}\n","import * as React from \"react\"\n\nimport { cn } from \"../../core/utils\"\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, ...props }, ref) => {\n return (\n <input\n type={type}\n className={cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n ref={ref}\n {...props}\n />\n )\n }\n)\nInput.displayName = \"Input\"\n\nexport { Input }\n\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../core/utils\"\n\nconst labelVariants = cva(\n \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(labelVariants(), className)}\n {...props}\n />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n\n","import * as React from \"react\";\n\nimport { cn } from \"../../core/utils\";\n\nexport type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement> & {\n /** Height in pixels. If not provided, uses default min height (80px). */\n height?: number;\n};\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, height, style, ...props }, ref) => {\n return (\n <textarea\n spellCheck={false}\n className={cn(\n \"flex w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n height == null && \"min-h-[80px]\",\n className\n )}\n ref={ref}\n style={height != null ? { ...style, height: `${height}px` } : style}\n {...props}\n />\n );\n }\n);\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n","import type { ComponentThemeConfig } from './types';\n\n/**\n * Textarea theme: label in a colored block overlapping the textarea.\n * Label has light pink background (#FEE8EC), rounded top corners only, border;\n * label overlaps the textarea so the textarea's top border radius is hidden.\n * Textarea has white background, rounded bottom corners only, border.\n */\nexport const textareaThemes: Record<string, ComponentThemeConfig> = {\n 'highlight-label': {\n wrapperClassName: 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n labelClassName:\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600',\n inputClassName:\n 'rounded-t-none rounded-b-md border-0 border-t border-[#D0D0D0] text-xs resize-none -mt-1 min-w-0 bg-white text-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-0 focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50',\n },\n};\n","import type { ComponentThemeConfig, FieldTypeForTheme } from './types';\nimport { textareaThemes } from './textareaThemes';\n\nconst themeRegistries: Partial<Record<FieldTypeForTheme, Record<string, ComponentThemeConfig>>> = {\n textarea: textareaThemes,\n text: textareaThemes, // same themes can apply to single-line text if desired\n};\n\n/**\n * Returns theme config for a field type and theme name.\n * Returns undefined if theme is not set or not found (no theme applied).\n */\nexport function getThemeConfig(\n fieldType: FieldTypeForTheme,\n themeName: string | undefined\n): ComponentThemeConfig | undefined {\n if (!themeName) return undefined;\n const registry = themeRegistries[fieldType];\n if (!registry) return undefined;\n return registry[themeName];\n}\n\nexport { textareaThemes } from './textareaThemes';\nexport type { ComponentThemeConfig, FieldTypeForTheme } from './types';\n","/* eslint-disable react-refresh/only-export-components -- shared field presentation helpers and indicator */\nimport type { BaseFieldDef } from \"../core/types\";\nimport { cn } from \"../core/utils\";\n\nexport function isLabelVisible(fieldDef: Pick<BaseFieldDef, \"style\">): boolean {\n return fieldDef.style?.labelVisible !== false;\n}\n\nexport function FieldRequiredIndicator({\n fieldDef,\n}: {\n fieldDef: Pick<BaseFieldDef, \"required\" | \"style\">;\n}) {\n if (!fieldDef.required) return null;\n if (fieldDef.style?.showRequiredAsterisk === false) return null;\n return (\n <span\n className={cn(\n \"text-red-500\",\n fieldDef.style?.classNames?.requiredIndicator,\n )}\n aria-hidden\n >\n *\n </span>\n );\n}\n\nexport function fieldWrapperClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.wrapper);\n}\n\nexport function fieldLabelClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.label);\n}\n\nexport function fieldControlClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n const controlClass = fieldDef.style?.classNames?.control;\n if (fieldDef.style?.fullControl && controlClass) {\n return cn(controlClass);\n }\n return cn(...defaults, fieldDef.style?.classNames?.control);\n}\n\nexport function fieldDescriptionClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.description);\n}\n\nexport function fieldErrorClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.error);\n}\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const TextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const Component = fieldDef.type === 'textarea' ? Textarea : Input;\n const isTextarea = fieldDef.type === 'textarea';\n const height = isTextarea && 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig(\n isTextarea ? 'textarea' : 'text',\n fieldDef.theme\n );\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel\n ? theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n : null;\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n\n return (\n <div\n className={fieldWrapperClass(\n fieldDef,\n wrapperClass,\n isTextarea && 'flex h-full min-h-0 flex-col',\n )}\n >\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n <Component\n id={fieldId}\n value={value || ''}\n onChange={(e) => setValue(fieldDef.type === 'number' ? Number(e.target.value) : e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n type={fieldDef.type === 'number' ? 'number' : 'text'}\n className={fieldControlClass(\n fieldDef,\n inputClass,\n isTextarea && height == null && 'min-h-[80px] flex-1',\n )}\n placeholder={placeholder}\n aria-label={!showLabel ? fieldDef.label : undefined}\n {...(isTextarea && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"../../core/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n\n","import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n\n","import React, { useEffect, useMemo, useReducer } from 'react';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Underline from '@tiptap/extension-underline';\nimport { Table, TableRow, TableHeader, TableCell } from '@tiptap/extension-table';\nimport type { Extensions } from '@tiptap/core';\nimport {\n Bold,\n Italic,\n Underline as UnderlineIcon,\n Strikethrough,\n List,\n ListOrdered,\n Undo,\n Redo,\n Table as TableIcon,\n Rows2,\n Columns2,\n TableRowsSplit,\n TableColumnsSplit,\n Trash2,\n} from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Separator } from '../shadcn/separator';\nimport { cn } from '../../core/utils';\nimport type { Editor } from '@tiptap/core';\nimport type { RichTextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction isEmptyHtml(html: string): boolean {\n const t = html.trim();\n return (\n t === '' ||\n t === '<p></p>' ||\n t === '<p><br></p>' ||\n t === '<p><br class=\"ProseMirror-trailingBreak\"></p>'\n );\n}\n\nfunction buildRichTextExtensions(placeholder: string, tables: boolean): Extensions {\n const base: Extensions = [\n StarterKit.configure({\n // Disable headings entirely so the UI/content can't introduce H2/H3.\n heading: false,\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc pl-6 my-2',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'list-decimal pl-6 my-2',\n },\n },\n listItem: {\n HTMLAttributes: {\n class: 'my-1',\n },\n },\n }),\n Underline,\n Placeholder.configure({\n placeholder,\n }),\n ];\n\n if (!tables) return base;\n\n return [\n ...base,\n Table.configure({\n resizable: false,\n }),\n TableRow,\n TableHeader,\n TableCell,\n ];\n}\n\nfunction RichTextToolbar({\n editor,\n disabled,\n tablesEnabled,\n}: {\n editor: Editor | null;\n disabled: boolean;\n tablesEnabled: boolean;\n}) {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n useEffect(() => {\n if (!editor) return;\n const handler = () => rerender();\n editor.on('selectionUpdate', handler);\n editor.on('transaction', handler);\n return () => {\n editor.off('selectionUpdate', handler);\n editor.off('transaction', handler);\n };\n }, [editor]);\n\n if (!editor) {\n return (\n <div className=\"flex flex-wrap gap-1 border-b border-input bg-muted/30 px-2 py-1.5 min-h-[42px]\" />\n );\n }\n\n const fmtBtn = (active: boolean, onClick: () => void, icon: React.ReactNode, title: string) => (\n <Button\n type=\"button\"\n variant={active ? 'secondary' : 'outline'}\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled}\n title={title}\n onClick={() => {\n if (!disabled) onClick();\n }}\n >\n {icon}\n </Button>\n );\n\n const inTable = tablesEnabled && editor.isActive('table');\n\n return (\n <div\n className=\"flex flex-wrap items-center gap-1 border-b border-input bg-muted/30 px-2 py-1.5\"\n role=\"toolbar\"\n aria-label=\"Rich text formatting\"\n >\n {fmtBtn(\n editor.isActive('bold'),\n () => editor.chain().focus().toggleBold().run(),\n <Bold className=\"h-4 w-4\" />,\n 'Bold',\n )}\n {fmtBtn(\n editor.isActive('italic'),\n () => editor.chain().focus().toggleItalic().run(),\n <Italic className=\"h-4 w-4\" />,\n 'Italic',\n )}\n {fmtBtn(\n editor.isActive('underline'),\n () => editor.chain().focus().toggleUnderline().run(),\n <UnderlineIcon className=\"h-4 w-4\" />,\n 'Underline',\n )}\n {fmtBtn(\n editor.isActive('strike'),\n () => editor.chain().focus().toggleStrike().run(),\n <Strikethrough className=\"h-4 w-4\" />,\n 'Strikethrough',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n {fmtBtn(\n editor.isActive('bulletList'),\n () => editor.chain().focus().toggleBulletList().run(),\n <List className=\"h-4 w-4\" />,\n 'Bullet list',\n )}\n {fmtBtn(\n editor.isActive('orderedList'),\n () => editor.chain().focus().toggleOrderedList().run(),\n <ListOrdered className=\"h-4 w-4\" />,\n 'Numbered list',\n )}\n\n {tablesEnabled && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n {!inTable ? (\n fmtBtn(\n false,\n () =>\n editor\n .chain()\n .focus()\n .insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n .run(),\n <TableIcon className=\"h-4 w-4\" />,\n 'Insert table',\n )\n ) : (\n <>\n {fmtBtn(\n false,\n () => editor.chain().focus().addRowAfter().run(),\n <Rows2 className=\"h-4 w-4\" />,\n 'Add row below',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().addColumnAfter().run(),\n <Columns2 className=\"h-4 w-4\" />,\n 'Add column right',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteRow().run(),\n <TableRowsSplit className=\"h-4 w-4\" />,\n 'Delete row',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteColumn().run(),\n <TableColumnsSplit className=\"h-4 w-4\" />,\n 'Delete column',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteTable().run(),\n <Trash2 className=\"h-4 w-4\" />,\n 'Delete table',\n )}\n </>\n )}\n </>\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().undo()}\n title=\"Undo\"\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().redo()}\n title=\"Redo\"\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport const RichTextWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n const showError = !!error && (touched || state.submitAttempted);\n\n const def = fieldDef as RichTextFieldDef | undefined;\n const placeholder = def?.placeholder ?? 'Start typing…';\n const minHeight = def?.minHeight ?? 160;\n const tablesEnabled = !!def?.tables;\n\n const extensions = useMemo(\n () => buildRichTextExtensions(placeholder, tablesEnabled),\n [placeholder, tablesEnabled],\n );\n\n const stringValue = typeof value === 'string' ? value : '';\n\n const editor = useEditor(\n {\n extensions,\n content: stringValue || '',\n editable: !disabled,\n immediatelyRender: false,\n onUpdate: ({ editor: ed }) => {\n const html = ed.getHTML();\n setValue(isEmptyHtml(html) ? '' : html);\n },\n onBlur: () => setTouched(),\n editorProps: {\n attributes: {\n id: fieldId,\n class: 'tiptap focus:outline-none',\n style: `min-height: ${minHeight}px`,\n },\n },\n },\n [extensions, fieldId],\n );\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!disabled);\n }, [editor, disabled]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n el.style.minHeight = `${minHeight}px`;\n }, [editor, minHeight]);\n\n // Listen for a custom 'insertTranscript' event dispatched by external hooks\n // (e.g. voice recording) so the widget controls its own insertion logic.\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n const handler = (e: Event) => {\n const { text } = (e as CustomEvent<{ text: string }>).detail;\n if (!text) return;\n const currentText = editor.getText();\n const prefix = currentText.length > 0 && !/\\s$/.test(currentText) ? ' ' : '';\n editor.chain().focus().insertContent(prefix + text).run();\n };\n el.addEventListener('insertTranscript', handler);\n return () => el.removeEventListener('insertTranscript', handler);\n }, [editor]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const fromForm = stringValue;\n const fromEditor = editor.getHTML();\n if (isEmptyHtml(fromForm) && isEmptyHtml(fromEditor)) return;\n if (fromForm && fromForm !== fromEditor) {\n editor.commands.setContent(fromForm, { emitUpdate: false });\n }\n if (!fromForm && !isEmptyHtml(fromEditor)) {\n editor.commands.setContent('', { emitUpdate: false });\n }\n }, [stringValue, editor]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n );\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {showLabel ? labelEl : null}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : showLabel ? (\n labelEl\n ) : null}\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background text-sm ring-offset-background overflow-hidden',\n showError && 'border-red-500',\n disabled && 'opacity-60',\n ),\n )}\n >\n <RichTextToolbar\n editor={editor}\n disabled={disabled}\n tablesEnabled={tablesEnabled}\n />\n <div\n className={cn(\n 'px-3 py-2',\n '[&_.ProseMirror]:outline-none',\n '[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-6 [&_.ProseMirror_ul]:my-2',\n '[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-6 [&_.ProseMirror_ol]:my-2',\n '[&_.ProseMirror_li]:list-item',\n '[&_.ProseMirror_blockquote]:border-l-4 [&_.ProseMirror_blockquote]:border-muted-foreground/40 [&_.ProseMirror_blockquote]:pl-3 [&_.ProseMirror_blockquote]:italic [&_.ProseMirror_blockquote]:my-2',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0',\n )}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n/** Tailwind classes for rendering stored richtext HTML (e.g. read-only views). */\nexport function richTextHtmlClassName(): string {\n return cn('richtext-content prose prose-sm max-w-none');\n}\n","import * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { Check, ChevronDown, ChevronUp } from \"lucide-react\";\n\nimport { cn } from \"../../core/utils\";\n\nconst Select = SelectPrimitive.Root;\n\nconst SelectGroup = SelectPrimitive.Group;\n\nconst SelectValue = SelectPrimitive.Value;\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName;\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n));\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn(\n \"flex cursor-default items-center justify-center py-1\",\n className\n )}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n));\nSelectScrollDownButton.displayName =\n SelectPrimitive.ScrollDownButton.displayName;\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = \"popper\", ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n \"relative z-50 max-h-52 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]\"\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n));\nSelectContent.displayName = SelectPrimitive.Content.displayName;\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"py-1.5 pl-8 pr-2 text-sm font-semibold\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = SelectPrimitive.Label.displayName;\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = SelectPrimitive.Item.displayName;\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n));\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName;\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n};\n","// Simple mock for async options for MVP\nexport const mockAsyncOptions: Record<string, { label: string; value: any }[]> = {\n STATIC_SYMPTOMS: [\n { label: 'Headache', value: 'headache' },\n { label: 'Fever', value: 'fever' },\n { label: 'Cough', value: 'cough' },\n { label: 'Nausea', value: 'nausea' },\n { label: 'Fatigue', value: 'fatigue' }\n ],\n PAIN_SCALE_0_10: [\n { label: '0 - No Pain', value: 0 },\n { label: '1', value: 1 },\n { label: '2', value: 2 },\n { label: '3', value: 3 },\n { label: '4', value: 4 },\n { label: '5', value: 5 },\n { label: '6', value: 6 },\n { label: '7', value: 7 },\n { label: '8', value: 8 },\n { label: '9', value: 9 },\n { label: '10 - Worst Pain', value: 10 }\n ],\n NURSE_PROGRESS_NOTES_TEMPLATE: [\n { label: 'Standard Assessment', value: 'standard' },\n { label: 'Post-Op Check', value: 'post_op' },\n { label: 'Routine Check', value: 'routine' }\n ]\n};\n\nexport async function fetchOptions(\n source: string, \n params?: any\n): Promise<{ label: string; value: any }[]> {\n // Simulate network delay\n await new Promise(resolve => setTimeout(resolve, 500));\n \n if (mockAsyncOptions[source]) {\n return mockAsyncOptions[source];\n }\n \n return [];\n}\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; // Cast safe due to Renderer check\n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const schemaPlaceholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : undefined;\n const selectPlaceholder = loading ? 'Loading...' : schemaPlaceholder ?? 'Select...';\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <Select \n disabled={disabled || loading} \n value={value ? String(value) : undefined} \n onValueChange={(val) => {\n // Try to find original value type (number vs string)\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n }}\n >\n <SelectTrigger\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500' : '',\n )}\n >\n <SelectValue placeholder={selectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map(opt => (\n <SelectItem key={String(opt.value)} value={String(opt.value)}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n \n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\"\nimport { Check } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n className={cn(\"flex items-center justify-center text-current\")}\n >\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Checkbox } from '../shadcn/checkbox'; // Need to make sure this exists or use input type=checkbox\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MultiSelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n // Default value to array\n const currentValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; \n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleValue = (val: any) => {\n const newValues = currentValues.includes(val)\n ? currentValues.filter((v: any) => v !== val)\n : [...currentValues, val];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\n {loading && <div className=\"text-sm text-gray-500\">Loading options...</div>}\n \n {!loading && options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <Checkbox \n id={`${fieldId}-${opt.value}`}\n checked={currentValues.includes(opt.value)}\n onCheckedChange={() => toggleValue(opt.value)}\n />\n <label \n htmlFor={`${fieldId}-${opt.value}`} \n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {opt.label}\n </label>\n </div>\n ))}\n </div>\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import * as React from \"react\";\n\nimport { cn } from \"../../core/utils\";\n\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement>\n>(({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn(\"w-full caption-bottom text-sm\", className)}\n {...props}\n />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n));\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody\n ref={ref}\n className={cn(\"[&_tr:last-child]:border-0\", className)}\n {...props}\n />\n));\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn(\n \"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\",\n className\n )}\n {...props}\n />\n));\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<\n HTMLTableRowElement,\n React.HTMLAttributes<HTMLTableRowElement>\n>(({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n \"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\",\n className\n )}\n {...props}\n />\n));\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<\n HTMLTableCellElement,\n React.ThHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n));\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<\n HTMLTableCellElement,\n React.TdHTMLAttributes<HTMLTableCellElement>\n>(({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)}\n {...props}\n />\n));\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption\n ref={ref}\n className={cn(\"mt-4 text-sm text-muted-foreground\", className)}\n {...props}\n />\n));\nTableCaption.displayName = \"TableCaption\";\n\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n};\n","import React from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { Label } from \"../shadcn/label\";\nimport { Button } from \"../shadcn/button\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport type { RepeatableFieldDef } from \"../../core/types\";\n\nexport const RepeatableWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n\n if (!fieldDef || fieldDef.type !== \"repeatable\") return null;\n\n const def = fieldDef as RepeatableFieldDef;\n const rows = Array.isArray(value) ? value : [];\n const [hasInteracted, setHasInteracted] = React.useState(false);\n\n const showError = !!error && (touched || hasInteracted);\n\n const addRow = () => {\n setValue([...rows, {}]);\n setHasInteracted(true);\n };\n\n const removeRow = (index: number) => {\n const newRows = [...rows];\n newRows.splice(index, 1);\n setValue(newRows);\n setHasInteracted(true);\n };\n\n const updateRow = (\n index: number,\n subFieldKey: string,\n val: string | number\n ) => {\n const newRows = [...rows];\n newRows[index] = { ...newRows[index], [subFieldKey]: val };\n setValue(newRows);\n setHasInteracted(true);\n };\n\n return (\n <div className=\"space-y-4 border p-4 rounded-md\">\n <div className=\"flex justify-between items-center\">\n <Label>{def.label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={addRow}\n disabled={disabled}\n >\n + Add Row\n </Button>\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow>\n {def.row.map((subDef) => (\n <TableHead key={subDef.id}>{subDef.label}</TableHead>\n ))}\n <TableHead className=\"w-[50px]\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {def.row.map((subDef) => (\n <TableCell key={subDef.id}>\n {/* Simple rendering based on type - duplicating logic slightly for MVP simplicity */}\n {subDef.type === \"number\" ? (\n <input\n type=\"number\"\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, Number(e.target.value))\n }\n disabled={disabled}\n />\n ) : (\n <input\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, e.target.value)\n }\n disabled={disabled}\n />\n )}\n </TableCell>\n ))}\n <TableCell>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => removeRow(index)}\n disabled={disabled}\n >\n X\n </Button>\n </TableCell>\n </TableRow>\n )\n )}\n {rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={def.row.length + 1}\n className=\"h-24 text-center\"\n >\n No items added.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import * as React from \"react\"\nimport { ChevronLeft, ChevronRight } from \"lucide-react\"\nimport { DayPicker } from \"react-day-picker\"\n\nimport { cn } from \"../../core/utils\"\nimport { buttonVariants } from \"./button\"\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\"\n\nexport type CalendarProps = React.ComponentProps<typeof DayPicker>\n\ntype RdpDropdownOption = {\n value: string | number\n label: string\n disabled?: boolean\n}\n\ntype RdpDropdownProps = {\n options?: RdpDropdownOption[]\n value?: string | number\n onChange?: React.ChangeEventHandler<HTMLSelectElement>\n \"aria-label\"?: string\n}\n\nfunction CalendarDropdown(props: RdpDropdownProps) {\n const { options, value, onChange } = props\n\n const handleValueChange = (newValue: string) => {\n if (!onChange) return\n const syntheticEvent = {\n target: { value: newValue },\n } as unknown as React.ChangeEvent<HTMLSelectElement>\n onChange(syntheticEvent)\n }\n\n return (\n <Select value={value?.toString()} onValueChange={handleValueChange}>\n <SelectTrigger className=\"h-7 px-2 text-sm\" aria-label={props[\"aria-label\"]}>\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {options?.map((option) => (\n <SelectItem\n key={option.value.toString()}\n value={option.value.toString()}\n disabled={option.disabled}\n >\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n}\n\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n ...props\n}: CalendarProps) {\n const captionLayout = props.captionLayout ?? \"dropdown\"\n const isDropdownCaption =\n captionLayout === \"dropdown\" ||\n captionLayout === \"dropdown-months\" ||\n captionLayout === \"dropdown-years\"\n\n // Provide a broad default year range for dropdown captions.\n // Callers can override by passing `startMonth` / `endMonth`.\n const startMonth =\n props.startMonth ?? (isDropdownCaption ? new Date(1900, 0) : undefined)\n const endMonth =\n props.endMonth ?? (isDropdownCaption ? new Date(2100, 11) : undefined)\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n captionLayout={captionLayout}\n hideNavigation={props.hideNavigation ?? isDropdownCaption}\n navLayout={props.navLayout ?? (isDropdownCaption ? \"around\" : undefined)}\n startMonth={startMonth}\n endMonth={endMonth}\n className={cn(\"p-3 relative\", className)}\n classNames={{\n months: \"flex flex-col sm:flex-row space-y-4 sm:space-x-4 sm:space-y-0\",\n month: \"space-y-4\",\n caption: \"flex justify-center pt-1 relative items-center\",\n caption_label: cn(\n \"text-sm font-medium\",\n isDropdownCaption && \"sr-only\"\n ),\n dropdowns: \"flex items-center gap-2\",\n months_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n years_dropdown:\n \"h-7 rounded-md border border-input bg-background px-2 text-sm\",\n nav: \"space-x-1 flex items-center\",\n nav_button: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\"\n ),\n nav_button_previous: isDropdownCaption ? \"\" : \"absolute left-1\",\n nav_button_next: isDropdownCaption ? \"\" : \"absolute right-1\",\n table: \"w-full border-collapse space-y-1\",\n head_row: \"flex\",\n head_cell:\n \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n row: \"flex w-full mt-2\",\n cell: \"h-9 w-9 text-center text-sm p-0 relative [&:has([aria-selected].day-range-end)]:rounded-r-md [&:has([aria-selected].day-outside)]:bg-accent/50 [&:has([aria-selected])]:bg-accent first:[&:has([aria-selected])]:rounded-l-md last:[&:has([aria-selected])]:rounded-r-md focus-within:relative focus-within:z-20\",\n day: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n day_range_end: \"day-range-end\",\n day_selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n day_today: \"bg-accent text-accent-foreground\",\n day_outside:\n \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n day_disabled: \"text-muted-foreground opacity-50\",\n day_range_middle:\n \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n day_hidden: \"invisible\",\n\n // v9 keys with explicit positioning relative to the NEW container\n button_previous: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute left-1 top-3\"\n ),\n button_next: cn(\n buttonVariants({ variant: \"outline\" }),\n \"h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100\",\n isDropdownCaption ? \"\" : \"absolute right-1 top-3\"\n ),\n month_grid: \"w-full border-collapse space-y-1\",\n weekdays: \"flex\",\n weekday: \"text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]\",\n week: \"flex w-full mt-2\",\n day_button: cn(\n buttonVariants({ variant: \"ghost\" }),\n \"h-9 w-9 p-0 font-normal aria-selected:opacity-100\"\n ),\n range_end: \"day-range-end\",\n selected:\n \"bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground\",\n today: \"bg-accent text-accent-foreground\",\n outside: \"day-outside text-muted-foreground opacity-50 aria-selected:bg-accent/50 aria-selected:text-muted-foreground aria-selected:opacity-30\",\n disabled: \"text-muted-foreground opacity-50\",\n range_middle: \"aria-selected:bg-accent aria-selected:text-accent-foreground\",\n hidden: \"invisible\",\n \n ...classNames,\n }}\n components={{\n IconLeft: () => <ChevronLeft className=\"h-4 w-4\" />,\n IconRight: () => <ChevronRight className=\"h-4 w-4\" />,\n // @ts-expect-error react-day-picker v9 component typing differences\n Dropdown: CalendarDropdown,\n // @ts-expect-error react-day-picker v9 component typing differences\n Chevron: ({ orientation }) => {\n const Icon = orientation === 'left' ? ChevronLeft : ChevronRight\n return <Icon className=\"h-4 w-4\" />\n }\n }}\n {...props}\n />\n )\n}\nCalendar.displayName = \"Calendar\"\n\nexport { Calendar }\n","import * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = \"center\", sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent }\n\n","import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\n\nexport interface DatePickerProps {\n date?: Date\n setDate?: (date: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nexport function DatePicker({ date, setDate, className, placeholder = \"Pick a date\" }: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !date && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, \"PPP\") : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={setDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DatePicker } from '../shadcn/date-picker';\nimport { Label } from '../shadcn/label';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const DateWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div onBlur={() => setTouched()}>\n <DatePicker\n date={value ? new Date(value) : undefined}\n setDate={(date) => setValue(date ? date.toISOString() : undefined)}\n placeholder={fieldDef.placeholder}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500 w-full' : 'w-full',\n )}\n />\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport { format } from \"date-fns\"\nimport { Calendar as CalendarIcon, Clock } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\nimport { Input } from \"./input\"\n\nexport interface DateTimePickerProps {\n /**\n * The current value as a Date object.\n */\n dateTime?: Date\n /**\n * Setter for the value. Use undefined to clear.\n */\n setDateTime?: (value: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nfunction parseTimeString(value: string): { hours: number; minutes: number } | null {\n if (!value) return null\n const [h, m] = value.split(\":\").map((v) => Number(v))\n if (\n Number.isNaN(h) ||\n Number.isNaN(m) ||\n h < 0 ||\n h > 23 ||\n m < 0 ||\n m > 59\n ) {\n return null\n }\n return { hours: h, minutes: m }\n}\n\nexport function DateTimePicker({\n dateTime,\n setDateTime,\n className,\n placeholder = \"Pick date & time\",\n}: DateTimePickerProps) {\n const [internalDate, setInternalDate] = React.useState<Date | undefined>(dateTime)\n const [timeString, setTimeString] = React.useState<string>(() => {\n if (!dateTime) return \"\"\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n return `${hours}:${minutes}`\n })\n\n React.useEffect(() => {\n setInternalDate(dateTime)\n if (!dateTime) {\n setTimeString(\"\")\n } else {\n const hours = dateTime.getHours().toString().padStart(2, \"0\")\n const minutes = dateTime.getMinutes().toString().padStart(2, \"0\")\n setTimeString(`${hours}:${minutes}`)\n }\n }, [dateTime])\n\n const handleDateSelect = (date: Date | undefined) => {\n setInternalDate(date)\n if (!setDateTime) return\n if (!date) {\n setDateTime(undefined)\n return\n }\n\n const parsed = parseTimeString(timeString)\n const next = new Date(date)\n if (parsed) {\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n }\n setDateTime(next)\n }\n\n const handleTimeChange: React.ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value\n setTimeString(value)\n if (!setDateTime) return\n\n const parsed = parseTimeString(value)\n if (!parsed) {\n // Don't propagate invalid time, just keep local string\n return\n }\n\n const base = internalDate ?? new Date()\n const next = new Date(base)\n next.setHours(parsed.hours, parsed.minutes, 0, 0)\n setInternalDate(next)\n setDateTime(next)\n }\n\n const hasValue = !!dateTime\n\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !hasValue && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {hasValue ? (\n <span className=\"flex items-center gap-1\">\n {format(dateTime as Date, \"PPP\")}\n <span className=\"text-muted-foreground\">•</span>\n <span className=\"inline-flex items-center gap-1\">\n <Clock className=\"h-3 w-3\" />\n {format(dateTime as Date, \"HH:mm\")}\n </span>\n </span>\n ) : (\n <span>{placeholder}</span>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <div className=\"flex flex-col md:flex-row\">\n <Calendar\n mode=\"single\"\n selected={internalDate}\n onSelect={handleDateSelect}\n initialFocus\n />\n <div className=\"border-t md:border-t-0 md:border-l p-3 flex flex-col gap-2 min-w-[220px]\">\n <label className=\"text-xs font-medium text-muted-foreground\">\n Time (24h)\n </label>\n <Input\n type=\"time\"\n value={timeString}\n onChange={handleTimeChange}\n className=\"w-full\"\n />\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DateTimePicker } from '../shadcn/datetime-picker';\nimport { Label } from '../shadcn/label';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const DateTimeWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const currentDate = value ? new Date(value) : undefined;\n const showLabel = isLabelVisible(fieldDef);\n\n const handleChange = (date: Date | undefined) => {\n if (!date) {\n setValue(undefined);\n return;\n }\n setValue(date.toISOString());\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div\n onBlur={() => setTouched()}\n className={disabled ? 'opacity-60 pointer-events-none' : undefined}\n >\n <DateTimePicker\n dateTime={currentDate}\n setDateTime={handleChange}\n placeholder={fieldDef.placeholder}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500 w-full' : 'w-full',\n )}\n />\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Upload, X, Image } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/** Browser-loadable URL only — plain S3 keys are not valid <img src>. */\nfunction extractImageDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\n\nexport const ImageUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [isUploading, setIsUploading] = useState(false);\n const [preview, setPreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** Tracks blob: URLs we created so we can revoke them. */\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Please provide an onUpload function in FormProvider config.\n </p>\n </div>\n </div>\n );\n }\n\n React.useEffect(() => {\n const displayUrl = extractImageDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n setPreview(null);\n return;\n }\n // Opaque key or non-displayable value: keep existing preview (e.g. in-flight blob).\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Please select an image file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\n if (file.size > maxSize) {\n alert('File size must be less than 10MB');\n return;\n }\n\n setIsUploading(true);\n setTouched();\n store.incrementPendingUploads();\n\n revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n setValue(s3Key);\n } catch (error) {\n console.error('Upload failed:', error);\n const errorMessage = error instanceof Error ? error.message : 'Upload failed. Please try again.';\n alert(errorMessage);\n revokeTrackedBlob();\n setPreview(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n revokeTrackedBlob();\n setValue(null);\n setPreview(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n setTouched();\n };\n\n const handleUploadClick = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\n {preview ? (\n <div className=\"relative\">\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={handleRemove}\n disabled={disabled || isUploading}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <Image className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <p className=\"text-sm text-gray-600 mb-4\">\n Click to upload an image or drag and drop\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleUploadClick}\n disabled={disabled || isUploading}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {isUploading ? 'Uploading...' : 'Choose Image'}\n </Button>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled || isUploading}\n />\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Upload, X, Image } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nfunction isAcceptedMediaFile(file: File): boolean {\n if (file.type.startsWith('image/')) return true;\n if (file.type === 'application/pdf') return true;\n if (file.name.toLowerCase().endsWith('.pdf')) return true;\n return false;\n}\n\n/** Browser-loadable URL only — opaque S3 keys are not valid iframe/img src. */\nfunction extractMediaDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\n\nexport const MediaUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [isUploading, setIsUploading] = useState(false);\n const [preview, setPreview] = useState<string | null>(null);\n const [previewIsPdf, setPreviewIsPdf] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** When the stored value is an opaque key (no extension), keep image vs PDF from the last upload. */\n const pendingPreviewKindRef = useRef<'image' | 'pdf' | null>(null);\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Please provide an onUpload function in FormProvider config.\n </p>\n </div>\n </div>\n );\n }\n\n React.useEffect(() => {\n const displayUrl = extractMediaDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(displayUrl));\n }\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n pendingPreviewKindRef.current = null;\n setPreview(null);\n setPreviewIsPdf(false);\n return;\n }\n // Opaque key: keep blob preview from in-flight upload.\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!isAcceptedMediaFile(file)) {\n alert('Please select an image or PDF file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\n if (file.size > maxSize) {\n alert('File size must be less than 10MB');\n return;\n }\n\n const isPdf =\n file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf');\n\n setIsUploading(true);\n setTouched();\n store.incrementPendingUploads();\n\n revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n setPreviewIsPdf(isPdf);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\n setValue(s3Key);\n } catch (error) {\n console.error('Upload failed:', error);\n const errorMessage = error instanceof Error ? error.message : 'Upload failed. Please try again.';\n alert(errorMessage);\n pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\n setPreview(null);\n setPreviewIsPdf(false);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\n setValue(null);\n setPreview(null);\n setPreviewIsPdf(false);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n setTouched();\n };\n\n const handleUploadClick = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\n {preview ? (\n <div className=\"relative\">\n {previewIsPdf ? (\n <iframe\n src={preview}\n title=\"Uploaded PDF\"\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\n )}\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={handleRemove}\n disabled={disabled || isUploading}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <Image className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <p className=\"text-sm text-gray-600 mb-4\">\n Click to upload an image or PDF, or drag and drop\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleUploadClick}\n disabled={disabled || isUploading}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {isUploading ? 'Uploading...' : 'Choose Image'}\n </Button>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*,application/pdf\"\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled || isUploading}\n />\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Check, Trash2 } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/* ---------------- utils ---------------- */\n\nconst distance = (a: { x: number; y: number }, b: { x: number; y: number }) =>\n Math.hypot(a.x - b.x, a.y - b.y);\n\nconst smoothPoint = (\n prev: { x: number; y: number } | null,\n curr: { x: number; y: number },\n smoothing = 0.75\n) => {\n if (!prev) return curr;\n return {\n x: prev.x * smoothing + curr.x * (1 - smoothing),\n y: prev.y * smoothing + curr.y * (1 - smoothing),\n };\n};\n\n/**\n * Extract a browser-displayable URL from the field value.\n *\n * The value stored in the form can be:\n * - null/undefined → no signature\n * - plain string (S3 key) → NOT displayable by a browser\n * - object { presigned_url, … } → displayable via presigned_url\n *\n * We only return a URL when the backend has resolved a presigned_url.\n * This avoids ever trying to render an S3 key as an <img src>.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractDisplayUrl(value: any): string | null {\n if (!value || typeof value !== 'object') return null;\n if (typeof value.presigned_url === 'string' && value.presigned_url) {\n return value.presigned_url;\n }\n return null;\n}\n\n/* ---------------- component ---------------- */\n\nexport const SignatureUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, setValue, setTouched, error, disabled, touched, value } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const pathRef = useRef<string>('');\n const lastPointRef = useRef<{ x: number; y: number } | null>(null);\n const lastTimeRef = useRef<number | null>(null);\n const lastWidthRef = useRef<number>(2);\n\n const [isDrawing, setIsDrawing] = useState(false);\n const [hasDrawing, setHasDrawing] = useState(false); // canvas has strokes\n const [isUploading, setIsUploading] = useState(false);\n const [isConfirmed, setIsConfirmed] = useState(false); // signature was uploaded\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n // Stable ref so the pre-submit handler always calls the latest closure\n // without needing to re-register on every render.\n const confirmSignatureRef = useRef<(() => Promise<void>) | null>(null);\n\n // Register/deregister with the store whenever pending-confirm state changes.\n useEffect(() => {\n if (hasDrawing && !isConfirmed) {\n store.registerPreSubmitHandler(fieldId, async () => {\n if (confirmSignatureRef.current) {\n await confirmSignatureRef.current();\n }\n });\n } else {\n store.unregisterPreSubmitHandler(fieldId);\n }\n return () => {\n store.unregisterPreSubmitHandler(fieldId);\n };\n }, [hasDrawing, isConfirmed, fieldId, store]);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n // ── Derived state ──────────────────────────────────────────────\n // Only objects with presigned_url (from backend/prefill) are displayable.\n // Plain S3 keys stored after upload are NOT displayable, so this returns\n // null and the component stays in canvas mode naturally.\n const displayUrl = useMemo(() => extractDisplayUrl(value), [value]);\n const showPreview = displayUrl !== null;\n\n // ── Canvas setup ───────────────────────────────────────────────\n // Runs whenever the canvas enters the DOM (when switching from preview → canvas).\n useEffect(() => {\n if (showPreview) return; // canvas not in DOM\n\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const dpr = window.devicePixelRatio || 1;\n const width = 400;\n const height = 200;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n ctx.scale(dpr, dpr);\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#000';\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, width, height);\n }, [showPreview]);\n\n // ── Early exits (after all hooks) ─────────────────────────────\n const uploadHandler = store.getUploadHandler();\n if (!fieldDef || !uploadHandler) return null;\n\n /* ---------------- helpers ---------------- */\n\n const getPoint = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current!;\n const rect = canvas.getBoundingClientRect();\n const e = 'touches' in event ? event.touches[0] : event;\n return {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n };\n\n /* ---------------- drawing ---------------- */\n\n const startDrawing = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (disabled) return;\n\n setIsDrawing(true);\n setIsConfirmed(false); // reset if user starts re-drawing\n setUploadError(null);\n setTouched();\n\n const ctx = canvasRef.current?.getContext('2d');\n if (!ctx) return;\n\n const point = getPoint(event);\n\n ctx.beginPath();\n ctx.moveTo(point.x, point.y);\n\n pathRef.current += `M${point.x},${point.y}`;\n\n lastPointRef.current = point;\n lastTimeRef.current = performance.now();\n lastWidthRef.current = 2;\n };\n\n const draw = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing || disabled) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (!canvas || !ctx) return;\n\n const rawPoint = getPoint(event);\n const lastPoint = lastPointRef.current;\n if (!lastPoint) return;\n\n const smoothed = smoothPoint(lastPoint, rawPoint, 0.75);\n\n // Ignore tiny jitter\n if (distance(lastPoint, smoothed) < 0.7) return;\n\n const now = performance.now();\n const dt = now - (lastTimeRef.current || now);\n const dist = distance(lastPoint, smoothed);\n const velocity = dist / Math.max(dt, 1);\n\n // Velocity → stroke width\n const minWidth = 1.2;\n const maxWidth = 3.5;\n const targetWidth = Math.max(\n minWidth,\n Math.min(maxWidth, maxWidth - velocity * 6)\n );\n\n const width =\n lastWidthRef.current * 0.7 + targetWidth * 0.3;\n\n ctx.lineWidth = width;\n\n // Smooth quadratic curve\n const midX = (lastPoint.x + smoothed.x) / 2;\n const midY = (lastPoint.y + smoothed.y) / 2;\n\n ctx.quadraticCurveTo(lastPoint.x, lastPoint.y, midX, midY);\n ctx.stroke();\n\n pathRef.current += ` Q${lastPoint.x},${lastPoint.y} ${midX},${midY}`;\n\n lastPointRef.current = smoothed;\n lastTimeRef.current = now;\n lastWidthRef.current = width;\n\n setHasDrawing(true);\n };\n\n const stopDrawing = () => {\n setIsDrawing(false);\n lastPointRef.current = null;\n lastTimeRef.current = null;\n };\n\n /* ---------------- actions ---------------- */\n\n const clearSignature = () => {\n if (showPreview) {\n // Delete existing backend signature → value becomes null →\n // displayUrl becomes null → showPreview flips to false →\n // canvas mounts automatically via the conditional render.\n setValue(null);\n setTouched();\n return;\n }\n\n // Clear the drawing canvas\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (canvas && ctx) {\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, 400, 200);\n }\n\n pathRef.current = '';\n lastPointRef.current = null;\n setHasDrawing(false);\n setIsConfirmed(false);\n setValue(null);\n setTouched();\n };\n\n const generateSVG = () => `\n<svg width=\"400\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n <path d=\"${pathRef.current}\"\n stroke=\"black\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n fill=\"none\"/>\n</svg>`.trim();\n\n const confirmSignature = async () => {\n if (!hasDrawing) return;\n\n setIsUploading(true);\n setUploadError(null);\n setTouched();\n store.incrementPendingUploads();\n\n try {\n const svg = generateSVG();\n const blob = new Blob([svg], { type: 'image/svg+xml' });\n const filename = `signature_${Date.now()}.svg`;\n const key = await uploadHandler(blob, filename);\n\n // Store the S3 key. This is NOT a displayable URL, so\n // extractDisplayUrl returns null → showPreview stays false →\n // canvas remains visible with the user's drawing intact.\n setValue(key);\n setIsConfirmed(true);\n setHasDrawing(false); // disable confirm button\n } catch (err) {\n console.error('[SignatureUpload] Upload failed:', err);\n setUploadError(\n err instanceof Error ? err.message : 'Signature upload failed. Please try again.'\n );\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n confirmSignatureRef.current = confirmSignature;\n\n // Whether the trash button should be enabled\n const canClear = showPreview ? !disabled : (hasDrawing || isConfirmed);\n\n /* ---------------- UI ---------------- */\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div\n className={fieldControlClass(\n fieldDef,\n 'border border-gray-200 rounded bg-white flex items-center justify-start p-2',\n )}\n >\n <img\n src={displayUrl}\n alt=\"Signature\"\n className=\"object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80 hover:bg-red-50\"\n onClick={clearSignature}\n disabled={!canClear}\n title=\"Delete signature and draw a new one\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n /* ── Canvas mode: drawing / confirmed ── */\n <>\n <div className=\"relative\">\n <canvas\n ref={canvasRef}\n className={fieldControlClass(\n fieldDef,\n `border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`,\n )}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n />\n\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80\"\n onClick={clearSignature}\n disabled={!canClear}\n title={isConfirmed ? 'Clear saved signature' : 'Clear canvas'}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {isConfirmed ? (\n <div className=\"flex items-center gap-2 text-sm text-green-600\">\n <Check className=\"h-4 w-4\" />\n <span>Signature saved</span>\n </div>\n ) : (\n <>\n <Button\n type=\"button\"\n onClick={confirmSignature}\n disabled={!hasDrawing || isUploading}\n className=\"text-xs\"\n >\n <Check className=\"h-4 w-4 mr-1\" />\n {isUploading ? 'Saving…' : 'Confirm'}\n </Button>\n {uploadError && (\n <p className=\"text-xs text-red-500 mt-1\">{uploadError}</p>\n )}\n </>\n )}\n </>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Upload as UploadIcon } from \"lucide-react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface UploadProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n value?: FileList | File[] | null;\n onChange: (files: FileList | null) => void;\n className?: string;\n /** Shown under placeholder, e.g. \"PDF, PNG, JPG\" */\n formatsLabel?: string;\n placeholder?: string;\n beforeUploadContent?: React.ReactNode;\n id?: string;\n /**\n * When true, do not show \"N files selected\" in the drop zone; parent can render file rows.\n */\n listLayout?: boolean;\n}\n\nexport function Upload({\n value,\n accept,\n multiple,\n disabled,\n onChange,\n className,\n formatsLabel,\n placeholder = \"Upload File\",\n beforeUploadContent,\n id: idProp,\n listLayout = false,\n}: UploadProps) {\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const generatedId = React.useId();\n const inputId = idProp ?? generatedId;\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.files ?? null);\n };\n\n React.useEffect(() => {\n if (!value && inputRef.current) {\n inputRef.current.value = \"\";\n }\n }, [value]);\n\n const count = value?.length ?? 0;\n const formatsText = formatsLabel ?? accept;\n\n return (\n <div\n className={cn(\n \"border border-dashed bg-[#F7F7F7] border-gray-200 rounded-lg py-5 px-4 flex items-center justify-center text-[#989898]\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n type=\"file\"\n ref={inputRef}\n accept={accept}\n id={inputId}\n className=\"hidden\"\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n />\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer w-full\",\n disabled && \"cursor-not-allowed\",\n )}\n >\n <div>\n {count > 0 && !listLayout ? (\n <div className=\"text-center text-sm font-semibold text-gray-700\">\n {count} file{count === 1 ? \"\" : \"s\"} selected\n </div>\n ) : beforeUploadContent ? (\n beforeUploadContent\n ) : (\n <div className=\"flex flex-col items-center justify-center\">\n <div className=\"text-sm text-black font-normal leading-[120%] tracking-[-0.28px] text-center\">\n Upload your surgery prescription\n <br />\n and medical records\n </div>\n <UploadIcon size={20} className=\"text-[#727272] mt-4\" />\n <div className=\"text-xs mt-1 text-text-shades-2\">\n {placeholder}\n </div>\n <div className=\"mt-2 text-10px leading-[140%] text-[#989898]\">\n Supported formats - {formatsText}\n </div>\n </div>\n )}\n </div>\n </label>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { X } from \"lucide-react\";\nimport { useField } from \"../../react/useField\";\nimport { useFormStore } from \"../../react/FormProvider\";\nimport { useForm } from \"../../react/useForm\";\nimport { Label } from \"../shadcn/label\";\nimport { Upload } from \"../components/Upload\";\nimport type { FileUploadFieldDef } from \"../../core/types\";\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from \"../../react/fieldStyle\";\n\nfunction fileListFromArray(files: File[]): FileList {\n const dt = new DataTransfer();\n files.forEach((f) => dt.items.add(f));\n return dt.files;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept === \"*/*\") return true;\n const tokens = accept.split(\",\").map((t) => t.trim().toLowerCase());\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token.startsWith(\".\")) return name.endsWith(token);\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1);\n return type.startsWith(prefix);\n }\n return type === token;\n });\n}\n\nfunction basenameKey(key: string): string {\n const parts = key.split(\"/\");\n return parts[parts.length - 1] || key;\n}\n\nfunction fileRows(\n listLayout: boolean,\n localFiles: FileList | null,\n value: unknown,\n): { label: string; index: number }[] {\n if (!listLayout) return [];\n if (localFiles && localFiles.length > 0) {\n return Array.from(localFiles).map((f, i) => ({ label: f.name, index: i }));\n }\n if (Array.isArray(value) && value.length > 0) {\n return value.map((k, i) => ({\n label: basenameKey(String(k)),\n index: i,\n }));\n }\n if (value !== null && value !== undefined && value !== \"\") {\n return [{ label: basenameKey(String(value)), index: 0 }];\n }\n return [];\n}\n\nexport const FormFileUploadWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } =\n useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [localFiles, setLocalFiles] = useState<FileList | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const listLayout =\n fieldDef?.type === \"file_upload\" &&\n (fieldDef as FileUploadFieldDef).list === true;\n\n const rows = useMemo(\n () => fileRows(listLayout, localFiles, value),\n [listLayout, localFiles, value],\n );\n\n if (!fieldDef || fieldDef.type !== \"file_upload\") return null;\n\n const def = fieldDef as FileUploadFieldDef;\n const accept = def.accept ?? \"*/*\";\n const maxSize = def.maxSize ?? 10 * 1024 * 1024;\n const allowMultiple = def.multiple === true;\n\n const uploadHandler = store.getFileUploadHandler();\n const showLabel = isLabelVisible(fieldDef);\n\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Provide `config.onFileUpload` or\n `config.onUpload` on FormProvider.\n </p>\n </div>\n </div>\n );\n }\n\n const hasStoredValue =\n value !== null &&\n value !== undefined &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0);\n\n const removeFileAt = (index: number) => {\n setTouched();\n if (disabled || isUploading) return;\n\n const hadLocal = localFiles != null && localFiles.length > 0;\n\n if (hadLocal) {\n const next = Array.from(localFiles!).filter((_, i) => i !== index);\n if (next.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n setLocalFiles(fileListFromArray(next));\n if (allowMultiple && Array.isArray(value)) {\n setValue(value.filter((_, i) => i !== index));\n } else {\n setValue(null);\n }\n return;\n }\n\n if (allowMultiple && Array.isArray(value)) {\n const next = value.filter((_, i) => i !== index);\n if (next.length === 0) store.setExternalError(fieldId, null);\n setValue(next.length ? next : null);\n return;\n }\n store.setExternalError(fieldId, null);\n setValue(null);\n };\n\n const handleChange = async (files: FileList | null) => {\n setTouched();\n\n if (!files || files.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n\n const selected = Array.from(files);\n for (const file of selected) {\n if (!matchesAccept(file, accept)) {\n setLocalFiles(null);\n store.setExternalError(fieldId, `File type not allowed: ${file.name}`);\n return;\n }\n if (file.size > maxSize) {\n setLocalFiles(null);\n store.setExternalError(\n fieldId,\n `File must be less than ${Math.round(maxSize / (1024 * 1024))}MB: ${file.name}`,\n );\n return;\n }\n }\n\n store.setExternalError(fieldId, null);\n\n const toUpload = allowMultiple ? selected : [selected[0]];\n setLocalFiles(fileListFromArray(toUpload));\n\n setIsUploading(true);\n store.incrementPendingUploads();\n\n try {\n if (allowMultiple) {\n const keys: string[] = [];\n for (const file of toUpload) {\n keys.push(await uploadHandler(file, file.name));\n }\n setValue(keys);\n } else {\n const key = await uploadHandler(toUpload[0], toUpload[0].name);\n setValue(key);\n }\n store.setExternalError(fieldId, null);\n } catch (err) {\n console.error(\"[FormFileUpload] Upload failed:\", err);\n const message =\n err instanceof Error ? err.message : \"Upload failed. Please try again.\";\n store.setExternalError(fieldId, message);\n setLocalFiles(null);\n setValue(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <Upload\n accept={accept}\n multiple={allowMultiple}\n value={localFiles}\n onChange={handleChange}\n disabled={disabled || isUploading}\n listLayout={listLayout}\n placeholder={\n isUploading\n ? \"Uploading...\"\n : (def.uploadPlaceholder ?? \"Upload File\")\n }\n formatsLabel={def.uploadFormats}\n className={fieldControlClass(\n fieldDef,\n isUploading ? \"opacity-70\" : undefined,\n )}\n />\n\n {listLayout && rows.length > 0 ? (\n <ul className=\"flex flex-col gap-2 !mt-5 list-none p-0 mb-0 mx-0\">\n {rows.map((row) => (\n <li\n key={`${row.index}-${row.label}`}\n className=\"flex items-center justify-between rounded-md bg-white/50 px-3 py-2.5 text-sm text-[#191919] font-normal tracking-[-0.28px]\"\n >\n <span className=\"truncate pr-2\">{row.label}</span>\n <button\n type=\"button\"\n disabled={disabled || isUploading}\n aria-label={`Remove ${row.label}`}\n onClick={() => removeFileAt(row.index)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-400 text-white hover:bg-gray-500 disabled:opacity-50\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {hasStoredValue && !listLayout ? (\n <p className=\"text-xs text-green-600\">\n {allowMultiple && Array.isArray(value)\n ? `${value.length} file(s) uploaded`\n : \"File uploaded\"}\n </p>\n ) : null}\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, \"text-xs text-gray-500\")}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, \"text-xs text-red-500\")}>\n {error}\n </p>\n )}\n </div>\n );\n};\n","import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\n * }>\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumnFromText = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => {\n const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n };\n });\n\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { RadioGroup, RadioGroupItem } from '../shadcn/radio-group';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const RadioWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as RadioFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const handleChange = (val: string) => {\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n };\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <RadioGroup\n value={value != null ? String(value) : undefined}\n onValueChange={handleChange}\n disabled={disabled || loading}\n className=\"flex flex-col gap-2\"\n >\n {options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <RadioGroupItem\n id={`${fieldId}-${String(opt.value)}`}\n value={String(opt.value)}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n\n {loading && (\n <p className=\"text-xs text-muted-foreground\">Loading options...</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Checkbox as CheckboxPrimitive } from '../shadcn/checkbox';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const CheckboxWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as CheckboxFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleOption = (optValue: any) => {\n const isSelected = isOptionSelected(selectedValues, optValue);\n const newValues = isSelected\n ? selectedValues.filter((v) => v !== optValue && String(v) !== String(optValue))\n : [...selectedValues, optValue];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\n {loading && (\n <div className=\"text-sm text-muted-foreground\">Loading options...</div>\n )}\n {!loading &&\n options.map((opt) => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <CheckboxPrimitive\n id={`${fieldId}-${String(opt.value)}`}\n checked={isOptionSelected(selectedValues, opt.value)}\n onCheckedChange={() => toggleOption(opt.value)}\n disabled={disabled}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import { createContext, useContext } from 'react';\n\n/** Shape of a medication as returned by AI analysis */\nexport type AIMedication = {\n id: string | number;\n brand_name: string;\n generic_name: string;\n form?: string;\n strength?: string;\n reason?: string;\n};\n\nexport type AISuggestions = {\n medications?: AIMedication[];\n};\n\nconst AISuggestionsContext = createContext<AISuggestions>({});\n\nexport function useAISuggestions(): AISuggestions {\n return useContext(AISuggestionsContext);\n}\n\nexport const AISuggestionsProvider = AISuggestionsContext.Provider;\n","import * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n \"fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n \"fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg\",\n className\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col space-y-1.5 text-center sm:text-left\",\n className\n )}\n {...props}\n />\n)\nDialogHeader.displayName = \"DialogHeader\"\n\nconst DialogFooter = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn(\n \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n className\n )}\n {...props}\n />\n)\nDialogFooter.displayName = \"DialogFooter\"\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn(\n \"text-lg font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogClose,\n DialogTrigger,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n\n","import React from 'react';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n} from '../shadcn/dialog';\n\ntype ChipSection = {\n label: string;\n content: React.ReactNode;\n};\n\ntype AddEntityDialogProps = {\n open: boolean;\n onClose: () => void;\n title: string;\n /** Multiple chip sections (e.g. Frequently Used, Packages). Replaces recentlyUsedSlot. */\n chipSections?: ChipSection[];\n /** @deprecated Use chipSections instead */\n recentlyUsedSlot?: React.ReactNode;\n /** @deprecated Use chipSections instead */\n chipSectionLabel?: string;\n children: React.ReactNode;\n actionSlot?: React.ReactNode;\n};\n\nexport const AddEntityDialog: React.FC<AddEntityDialogProps> = ({\n open,\n onClose,\n title,\n chipSections,\n recentlyUsedSlot,\n chipSectionLabel = 'Recently Used',\n children,\n actionSlot,\n}) => {\n const sections: ChipSection[] = chipSections ??\n (recentlyUsedSlot ? [{ label: chipSectionLabel, content: recentlyUsedSlot }] : []);\n\n return (\n <Dialog open={open} onOpenChange={(o) => !o && onClose()}>\n <DialogContent className=\"max-w-4xl w-full p-0 gap-0 flex flex-col max-h-[90vh] overflow-hidden\">\n {/* Fixed header */}\n <DialogHeader className=\"px-6 pt-6 pb-4 shrink-0\">\n <DialogTitle className=\"text-lg font-semibold\">{title}</DialogTitle>\n </DialogHeader>\n\n {/* Scrollable body */}\n <div className=\"px-6 flex flex-col gap-4 overflow-y-auto flex-1 min-h-0 pb-4\">\n {sections.map((section) => (\n <div key={section.label}>\n <p className=\"text-xs text-muted-foreground mb-2\">{section.label}</p>\n <div className=\"flex flex-wrap gap-2\">{section.content}</div>\n </div>\n ))}\n\n {children}\n </div>\n\n {/* Fixed footer */}\n {actionSlot != null && (\n <div className=\"px-6 py-4 flex justify-end shrink-0 border-t border-border bg-background\">\n {actionSlot}\n </div>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { Trash2, ChevronUp, ChevronDown, ChevronRight, Plus, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { AIMedication } from '../../react/AISuggestionsContext';\nimport type { MedicationFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nconst BEFORE_AFTER_OPTIONS = [\n { label: 'Blank', value: '' },\n { label: 'AFTER FOOD', value: 'AFTER FOOD' },\n { label: 'BEFORE FOOD', value: 'BEFORE FOOD' },\n { label: 'WITH FOOD', value: 'WITH FOOD' },\n { label: 'SINGLE DOSE', value: 'SINGLE DOSE' },\n { label: 'BED TIME', value: 'BED TIME' },\n { label: 'EMPTY STOMACH', value: 'EMPTY STOMACH' },\n { label: 'LOCAL APPLICATION', value: 'LOCAL APPLICATION' },\n { label: 'STAT', value: 'STAT' },\n { label: 'INHALATION', value: 'INHALATION' },\n] as const;\n\ntype BeforeAfterOption = (typeof BEFORE_AFTER_OPTIONS)[number]['value'];\n\nconst BEFORE_AFTER_NORMALIZATION_MAP: Record<string, BeforeAfterOption> = {\n AF: 'AFTER FOOD',\n BF: 'BEFORE FOOD',\n};\n\nexport type MedicationSearchResult = {\n id: string;\n name: string;\n generic_name?: string;\n manufacturer?: string;\n score?: number;\n};\n\n\nconst ROUTE_OPTIONS = [\n { label: 'Select route', value: '' },\n { label: 'Per Os', value: 'Per Os' },\n { label: 'Intravenous', value: 'Intravenous' },\n { label: 'Intramuscular', value: 'Intramuscular' },\n { label: 'Subcutaneous', value: 'Subcutaneous' },\n { label: 'Sublingual', value: 'Sublingual' },\n { label: 'Intranasal', value: 'Intranasal' },\n { label: 'Topical', value: 'Topical' },\n { label: 'Per Rectum', value: 'Per Rectum' },\n { label: 'Inhalation', value: 'Inhalation' },\n { label: 'ID Intradermal', value: 'ID Intradermal' },\n] as const;\n\nexport type Medication = {\n id: string;\n brand_name: string;\n generic_name: string;\n frequency: string;\n is_custom: boolean;\n duration_value: string;\n duration_unit: 'days' | 'weeks' | 'months';\n before_after: BeforeAfterOption;\n route: string;\n morning: string;\n afternoon: string;\n night: string;\n notes: string;\n};\n\nexport type AddMedicationFieldProps = {\n label?: string;\n value: Medication[];\n onChange: (items: Medication[]) => void;\n onSearch: (query: string) => Promise<MedicationSearchResult[]>;\n recentlyUsed?: MedicationSearchResult[];\n /** Doctor-scoped frequently used medications (from FormProvider frequentItems) */\n frequentItems?: MedicationFrequentItem[];\n /** AI-suggested medications shown as badges; clicking adds to value */\n suggestedMedications?: AIMedication[];\n};\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToMedication(result: MedicationSearchResult): Medication {\n return {\n id: result.id,\n brand_name: result.name,\n generic_name: result.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\nfunction mapAIMedicationToMedication(ai: AIMedication): Medication {\n const id = ai.id != null ? String(ai.id) : '';\n return {\n id,\n brand_name: ai.brand_name ?? '',\n generic_name: ai.generic_name ?? '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '1',\n afternoon: '0',\n night: '1',\n notes: ai.reason ?? '',\n };\n}\n\nfunction createCustomMedication(name: string, customId: number): Medication {\n return {\n id: String(customId),\n brand_name: name.trim(),\n generic_name: '',\n frequency: 'custom',\n is_custom: false,\n duration_value: '3',\n duration_unit: 'days',\n before_after: 'AFTER FOOD',\n route: '',\n morning: '0',\n afternoon: '0',\n night: '0',\n notes: '',\n };\n}\n\n/** Parse duration string like \"5 days\" or \"2 weeks\" into value + unit */\nfunction parseDuration(duration?: string): { value: string; unit: 'days' | 'weeks' | 'months' } {\n if (!duration || !duration.trim()) return { value: '3', unit: 'days' };\n const lower = duration.trim().toLowerCase();\n const match = lower.match(/^(\\d+)\\s*(day|days|week|weeks|month|months)?$/);\n if (!match) return { value: '3', unit: 'days' };\n const value = match[1] ?? '3';\n const unitWord = match[2] ?? 'days';\n const unit: 'days' | 'weeks' | 'months' =\n unitWord.startsWith('month') ? 'months' : unitWord.startsWith('week') ? 'weeks' : 'days';\n return { value, unit };\n}\n\nfunction mapFrequentItemToMedication(item: MedicationFrequentItem): Medication {\n const parsed = parseDuration(item.duration);\n const duration_value = item.duration_value ?? parsed.value;\n const duration_unit =\n (item.duration_unit as Medication['duration_unit'] | undefined) ?? parsed.unit;\n\n const before_after: Medication['before_after'] = normalizeBeforeAfter(item.before_after);\n\n const routeNote = item.route ? `Route: ${item.route}` : '';\n const baseNotes = item.notes?.trim() || '';\n const combinedNotes =\n [baseNotes, routeNote.trim()].filter((part) => part.length > 0).join(' — ');\n\n return {\n id: item.id,\n brand_name: item.brand_name ?? item.name,\n generic_name: item.short_name ?? '',\n frequency: item.frequency ?? 'custom',\n is_custom: false,\n duration_value,\n duration_unit,\n before_after,\n route: item.route ?? '',\n morning: item.morning ?? '0',\n afternoon: item.afternoon ?? '0',\n night: item.night ?? '0',\n notes: combinedNotes,\n };\n}\n\nfunction normalizeBeforeAfter(value?: string): BeforeAfterOption {\n if (value == null) return 'AFTER FOOD';\n const mapped = BEFORE_AFTER_NORMALIZATION_MAP[value];\n if (mapped) return mapped;\n const validValues = BEFORE_AFTER_OPTIONS.map((option) => option.value);\n return validValues.includes(value as BeforeAfterOption) ? (value as BeforeAfterOption) : 'AFTER FOOD';\n}\n\nfunction Spinner({\n value,\n onChange,\n}: {\n value: string;\n onChange: (v: string) => void;\n}) {\n const num = parseInt(value, 10) || 0;\n return (\n <div className=\"flex flex-col items-center\">\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(num + 1))}\n >\n <ChevronUp className=\"h-3 w-3\" />\n </button>\n <span className=\"text-sm w-4 text-center leading-none\">{num}</span>\n <button\n type=\"button\"\n className=\"text-muted-foreground hover:text-foreground cursor-pointer\"\n onClick={() => onChange(String(Math.max(0, num - 1)))}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </button>\n </div>\n );\n}\n\n// ─── Medication card (added item) ─────────────────────────────────────────────\n\nfunction MedicationCard({\n med,\n onUpdate,\n onRemove,\n}: {\n med: Medication;\n onUpdate: (updated: Medication) => void;\n onRemove: () => void;\n}) {\n const [notesOpen, setNotesOpen] = useState(false);\n\n function set<K extends keyof Medication>(key: K, val: Medication[K]) {\n onUpdate({ ...med, [key]: val });\n }\n\n return (\n <div className=\"bg-gray-50 rounded-lg p-3 space-y-2\">\n {/* Row 1: drug name, frequency dropdown, morning/afternoon/night labels, delete */}\n <div className=\"flex items-center gap-2 flex-wrap\">\n <span className=\"font-semibold text-sm flex-1 min-w-0 truncate\">{med.brand_name}</span>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={med.frequency}\n onChange={(e) => set('frequency', e.target.value)}\n >\n <option value=\"custom\">select frequency</option>\n <option value=\"qid\">4 times a day (QID)</option>\n <option value=\"alternate_day\">Alternate day</option>\n <option value=\"once_weekly\">Once weekly</option>\n <option value=\"once_monthly\">Once monthly</option>\n <option value=\"as_needed\">As needed</option>\n <option value=\"fort_night\">Fort night</option>\n <option value=\"at_bed_time\">At Bed time</option>\n <option value=\"sos\">SOS only</option>\n <option value=\"biweekly\">Biweekly</option>\n <option value=\"stat\">STAT</option>\n </select>\n <div className=\"flex gap-4 items-center shrink-0\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <span\n key={slot}\n className=\"text-[10px] font-semibold uppercase text-muted-foreground tracking-wide\"\n >\n {slot === 'afternoon' ? 'AFTERNOON' : slot === 'morning' ? 'MORNING' : 'NIGHT'}\n </span>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"text-red-400 hover:text-red-600 shrink-0 p-1 cursor-pointer\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n </div>\n\n {/* Row 2: duration (value + unit) on left; 3 dose spinners in middle; AF/BF on right */}\n <div className=\"flex items-center gap-3 flex-wrap\">\n <div className=\"flex items-center gap-1 shrink-0\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n className=\"w-11 text-sm border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_value}\n onChange={(e) => {\n const v = e.target.value.replace(/\\D/g, '');\n set('duration_value', v === '' ? '' : v);\n }}\n />\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white\"\n value={med.duration_unit}\n onChange={(e) => set('duration_unit', e.target.value as Medication['duration_unit'])}\n >\n <option value=\"days\">days</option>\n <option value=\"weeks\">weeks</option>\n <option value=\"months\">months</option>\n </select>\n </div>\n <div className=\"flex gap-2 items-center flex-1 min-w-0 justify-end\">\n {(['morning', 'afternoon', 'night'] as const).map((slot) => (\n <div key={slot} className=\"flex flex-col items-center gap-0.5\">\n <Spinner value={med[slot]} onChange={(v) => set(slot, v)} />\n </div>\n ))}\n </div>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={normalizeBeforeAfter(med.before_after)}\n onChange={(e) => set('before_after', e.target.value as Medication['before_after'])}\n >\n {BEFORE_AFTER_OPTIONS.map((option) => (\n <option key={option.label} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <select\n className=\"text-xs border border-border rounded px-2 py-1 bg-white shrink-0\"\n value={med.route ?? ''}\n onChange={(e) => set('route', e.target.value)}\n >\n {ROUTE_OPTIONS.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n </div>\n\n {/* Row 3: medicine notes — full-width div as hit area (chevron + text), cursor-pointer */}\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => setNotesOpen((o) => !o)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n setNotesOpen((o) => !o);\n }\n }}\n className={cn(\n 'flex items-center gap-2 w-full text-left text-xs text-muted-foreground hover:text-foreground',\n 'cursor-pointer py-2 px-2 rounded border border-transparent hover:bg-gray-100/80 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3 w-3 shrink-0 transition-transform', notesOpen && 'rotate-90')}\n />\n <span>Medicine Notes</span>\n </div>\n {notesOpen && (\n <div className=\"relative z-10 mt-0.5\">\n <textarea\n className=\"block w-full text-xs border border-border rounded px-2 py-1 resize-none bg-white min-h-0\"\n rows={2}\n placeholder=\"Add notes...\"\n value={med.notes}\n onChange={(e) => set('notes', e.target.value)}\n />\n </div>\n )}\n </div>\n );\n}\n\n// ─── Search result card ────────────────────────────────────────────────────────\n\nconst ADD_FEEDBACK_MS = 320;\n\nfunction SearchResultCard({\n result,\n isAdding,\n onSelect,\n}: {\n result: MedicationSearchResult;\n isAdding: boolean;\n onSelect: () => void;\n}) {\n return (\n <button\n type=\"button\"\n onClick={onSelect}\n className={cn(\n 'w-full text-left border rounded-lg px-3 py-2 transition-all duration-300 ease-out cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'border-green-400 bg-green-50 scale-[0.98]'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n <div className=\"min-w-0 flex-1 text-left\">\n <p className=\"text-sm font-semibold leading-tight truncate\">{result.name}</p>\n {result.generic_name && (\n <p className=\"text-xs text-muted-foreground mt-0.5 truncate\">\n Generic: {result.generic_name}\n </p>\n )}\n </div>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddMedicationField: React.FC<AddMedicationFieldProps> = ({\n label = 'Medications',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n suggestedMedications = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<MedicationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingResultId, setAddingResultId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const customIdRef = useRef(-1);\n const valueRef = useRef<Medication[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue = Array.isArray(value) ? value : [];\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((m) => String(m.id)));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingResultId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function handleRecentlyUsedToggle(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(result.id)));\n } else {\n onChange([...safeValue, mapToMedication(result)]);\n }\n }\n\n function handleFrequentItemToggle(item: MedicationFrequentItem) {\n if (addedIds.has(String(item.id))) {\n onChange(safeValue.filter((m) => String(m.id) !== String(item.id)));\n } else {\n onChange([...safeValue, mapFrequentItemToMedication(item)]);\n }\n }\n\n function handleResultClick(result: MedicationSearchResult) {\n if (addedIds.has(String(result.id))) return;\n setAddingResultId(result.id);\n setTimeout(() => {\n onChange([...valueRef.current, mapToMedication(result)]);\n setAddingResultId(null);\n setQuery('');\n setResults([]);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function handleSave() {\n const trimmed = query.trim();\n if (!trimmed) return;\n const customId = customIdRef.current--;\n onChange([...safeValue, createCustomMedication(trimmed, customId)]);\n setQuery('');\n setResults([]);\n }\n\n function handleAddSuggestion(ai: AIMedication) {\n if (addedIds.has(String(ai.id))) return;\n onChange([...safeValue, mapAIMedicationToMedication(ai)]);\n }\n\n function updateMed(index: number, updated: Medication) {\n const next = [...safeValue];\n next[index] = updated;\n onChange(next);\n }\n\n function removeMed(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(String(r.id));\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const isAdded = addedIds.has(String(item.id));\n return (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-[11px] px-2 py-0.5 transition-colors cursor-pointer',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {item.brand_name ?? item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col border bg-white border-[#D0D0D0] space-y-3 p-3 h-fit\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added medications */}\n <div className=\"space-y-2\">\n {safeValue.map((med, i) => (\n <MedicationCard\n key={med.id}\n med={med}\n onUpdate={(u) => updateMed(i, u)}\n onRemove={() => removeMed(i)}\n />\n ))}\n </div>\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Medication\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={!query.trim()}\n onClick={handleSave}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n !query.trim() && 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Medicine\n </button>\n }\n >\n <div className=\"space-y-3\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search medicines...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* AI-suggested medications as clickable badges (inside dialog) */}\n {suggestedMedications.length > 0 && (\n <div className=\"flex flex-wrap gap-1.5 items-center\">\n <span className=\"text-xs text-muted-foreground mr-1\">Suggestions:</span>\n {suggestedMedications\n .filter((s) => !addedIds.has(String(s.id)))\n .slice(0, 25)\n .map((s) => (\n <button\n key={String(s.id)}\n type=\"button\"\n onClick={() => handleAddSuggestion(s)}\n className=\"inline-flex items-center gap-1 rounded-full border border-dashed border-purple-300 bg-purple-50/80 text-purple-800 text-[11px] px-2 py-0.5 hover:bg-purple-100 transition-colors cursor-pointer\"\n >\n <Plus className=\"h-3 w-3\" />\n {s.brand_name || s.generic_name || String(s.id)}\n </button>\n ))}\n </div>\n )}\n\n {/* Results grid */}\n {loading && (\n <p className=\"text-xs text-muted-foreground text-center py-2\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"grid grid-cols-2 gap-2 max-h-64 overflow-y-auto\">\n {results.map((r) => (\n <SearchResultCard\n key={r.id}\n result={r}\n isAdding={addingResultId === r.id}\n onSelect={() => handleResultClick(r)}\n />\n ))}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { useAISuggestions } from '../../react/AISuggestionsContext';\nimport { AddMedicationField } from './AddMedicationField';\nimport type { Medication, MedicationSearchResult } from './AddMedicationField';\n\nexport const AddMedicationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { medications: suggestedMedications } = useAISuggestions();\n const { medications: frequentMedications } = useFrequentItems();\n\n const safeValue: Medication[] = Array.isArray(value) ? (value as Medication[]) : [];\n\n return (\n <AddMedicationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<MedicationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as MedicationSearchResult[] | undefined}\n frequentItems={frequentMedications}\n suggestedMedications={suggestedMedications}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { InvestigationFrequentItem, DiagnosticPackage } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type InvestigationSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n categories?: string[];\n synonyms?: string[];\n sample_type?: string;\n method?: string;\n reference_range?: string;\n sample_unit?: string;\n sample_qty?: number;\n turnaround_time?: number;\n preparation?: string;\n service_type?: string;\n department?: string;\n is_vip_enabled?: boolean;\n is_pacs_enabled?: boolean;\n score?: number;\n};\n\nexport type Investigation = InvestigationSearchResult & {\n label: string;\n is_custom: boolean;\n fromAI: boolean;\n};\n\nexport type AddInvestigationFieldProps = {\n label?: string;\n value: Investigation[];\n onChange: (items: Investigation[]) => void;\n onSearch: (query: string) => Promise<InvestigationSearchResult[]>;\n recentlyUsed?: InvestigationSearchResult[];\n frequentItems?: InvestigationFrequentItem[];\n packages?: DiagnosticPackage[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToInvestigation(result: InvestigationSearchResult): Investigation {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\n// function mapFrequentItemToInvestigation(item: InvestigationFrequentItem): Investigation {\n// return {\n// id: String(item.id),\n// name: item.name,\n// code: item.code ?? undefined,\n// label: item.name,\n// is_custom: false,\n// fromAI: false,\n// };\n// }\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddInvestigationField: React.FC<AddInvestigationFieldProps> = ({\n label = 'Investigations',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n packages = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<InvestigationSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Investigation[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n // tracks which test IDs were added by each package: packageId → testId[]\n const addedByPackage = useRef<Map<string, string[]>>(new Map());\n // drives re-renders for package chip selected state\n const [selectedPackageIds, setSelectedPackageIds] = useState<Set<string>>(new Set());\n\n const safeValue: Investigation[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(safeValue.map((inv) => inv.id));\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addInvestigation(result: InvestigationSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToInvestigation(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addInvestigation(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeInvestigation(id: string) {\n onChange(safeValue.filter((inv) => inv.id !== id));\n }\n\n function handleRecentlyUsedToggle(result: InvestigationSearchResult) {\n if (addedIds.has(result.id)) {\n removeInvestigation(result.id);\n } else {\n addInvestigation(result);\n }\n }\n\n async function handleFrequentItemToggle(item: InvestigationFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((inv) => inv.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeInvestigation(id);\n else onChange(safeValue.filter((inv) => inv.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((inv) => inv.id === first.id)) {\n onChange([...valueRef.current, mapToInvestigation(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n function handlePackageToggle(pkg: DiagnosticPackage) {\n const alreadyAdded = addedByPackage.current.has(pkg.id);\n if (alreadyAdded) {\n const idsToRemove = new Set(addedByPackage.current.get(pkg.id) ?? []);\n onChange(valueRef.current.filter((inv) => !idsToRemove.has(inv.id)));\n addedByPackage.current.delete(pkg.id);\n setSelectedPackageIds((prev) => {\n const next = new Set(prev);\n next.delete(pkg.id);\n return next;\n });\n } else {\n const currentIds = new Set(valueRef.current.map((inv) => inv.id));\n const newTests = pkg.tests\n .filter((t) => !currentIds.has(t.id))\n .map((t) => mapToInvestigation(t));\n if (newTests.length > 0) {\n onChange([...valueRef.current, ...newTests]);\n }\n addedByPackage.current.set(pkg.id, newTests.map((t) => t.id));\n setSelectedPackageIds((prev) => new Set(prev).add(pkg.id));\n }\n }\n\n // ─── Chip builders ────────────────────────────────────────────────────────\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded = safeValue.some((inv) => inv.id === id) || safeValue.some((inv) => inv.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n const packageChips = packages.map((pkg) => {\n const isAdded = selectedPackageIds.has(pkg.id);\n return (\n <button\n key={pkg.id}\n type=\"button\"\n onClick={() => handlePackageToggle(pkg)}\n className={cn(\n 'rounded-full border text-xs px-4 py-1.5 transition-colors flex items-center gap-2',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span>✓</span>}\n <span className=\"font-semibold\">{pkg.name}</span>\n <span className={cn(\n 'rounded-full px-1.5 py-0.5 text-[10px] font-medium',\n isAdded ? 'bg-green-100 text-green-600' : 'bg-purple-100 text-purple-600'\n )}>\n {pkg.tests.length}\n </span>\n </button>\n );\n });\n\n // ─── Build chip sections ──────────────────────────────────────────────────\n\n const chipSections = [];\n if (frequentItemChips.length > 0) {\n chipSections.push({ label: 'Frequently used', content: <>{frequentItemChips}</> });\n } else if (recentlyUsedChips.length > 0) {\n chipSections.push({ label: 'Recently Used', content: <>{recentlyUsedChips}</> });\n }\n if (packageChips.length > 0) {\n chipSections.push({ label: 'Packages', content: <>{packageChips}</> });\n }\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added investigations — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((inv) => (\n <div\n key={inv.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{inv.name}</span>\n <button\n type=\"button\"\n onClick={() => removeInvestigation(inv.id)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Investigation\"\n chipSections={chipSections.length > 0 ? chipSections : undefined}\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for an investigation...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems, usePackages } from '../../react/FormProvider';\nimport { AddInvestigationField } from './AddInvestigationField';\nimport type { Investigation, InvestigationSearchResult } from './AddInvestigationField';\n\nexport const AddInvestigationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { investigations: frequentInvestigations } = useFrequentItems();\n const packages = usePackages();\n\n const safeValue: Investigation[] = Array.isArray(value) ? (value as Investigation[]) : [];\n\n return (\n <AddInvestigationField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<InvestigationSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as InvestigationSearchResult[] | undefined}\n frequentItems={frequentInvestigations}\n packages={packages}\n />\n );\n};\n","import React, { useState, useRef, useEffect } from 'react';\nimport { X, Check } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Input } from '../shadcn/input';\nimport { AddEntityDialog } from './AddEntityDialog';\nimport type { ProcedureFrequentItem } from '../../core/types';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n// Matches search API response.results[] shape\n\nexport type ProcedureSearchResult = {\n id: string;\n name: string;\n code?: string;\n description?: string;\n specialization?: string;\n score?: number;\n};\n\n/** Master row from search / frequent resolution — full metadata. */\nexport type MasterProcedure = ProcedureSearchResult & {\n label: string;\n is_custom: false;\n fromAI: boolean;\n};\n\n/** Custom free-text row — only `name` and `is_custom` (no extra keys). */\nexport type CustomProcedure = {\n name: string;\n is_custom: true;\n};\n\nexport type Procedure = MasterProcedure | CustomProcedure;\n\nexport type AddProcedureFieldProps = {\n label?: string;\n value: Procedure[];\n onChange: (items: Procedure[]) => void;\n onSearch: (query: string) => Promise<ProcedureSearchResult[]>;\n recentlyUsed?: ProcedureSearchResult[];\n /** Doctor-scoped frequently used procedures (from FormProvider frequentItems) */\n frequentItems?: ProcedureFrequentItem[];\n};\n\nconst ADD_FEEDBACK_MS = 320;\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction mapToProcedure(result: ProcedureSearchResult): MasterProcedure {\n return {\n ...result,\n label: result.name,\n is_custom: false,\n fromAI: false,\n };\n}\n\nfunction createCustomProcedure(trimmedName: string): CustomProcedure {\n return { name: trimmedName.trim(), is_custom: true };\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const AddProcedureField: React.FC<AddProcedureFieldProps> = ({\n label = 'Procedures',\n value,\n onChange,\n onSearch,\n recentlyUsed = [],\n frequentItems = [],\n}) => {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<ProcedureSearchResult[]>([]);\n const [loading, setLoading] = useState(false);\n const [addingId, setAddingId] = useState<string | null>(null);\n const [addingFrequentId, setAddingFrequentId] = useState<string | null>(null);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const valueRef = useRef<Procedure[]>([]);\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n const safeValue: Procedure[] = Array.isArray(value) ? value : [];\n\n valueRef.current = safeValue;\n const addedIds = new Set(\n safeValue.filter((proc): proc is MasterProcedure => !proc.is_custom).map((proc) => proc.id),\n );\n\n useEffect(() => {\n if (!open) {\n setQuery('');\n setResults([]);\n setAddingId(null);\n setAddingFrequentId(null);\n }\n }, [open]);\n\n function handleQueryChange(q: string) {\n setQuery(q);\n if (debounceRef.current) clearTimeout(debounceRef.current);\n if (!q.trim()) {\n setResults([]);\n return;\n }\n debounceRef.current = setTimeout(async () => {\n setLoading(true);\n try {\n const res = await onSearch(q);\n setResults(res);\n } finally {\n setLoading(false);\n }\n }, 500);\n }\n\n function addProcedure(result: ProcedureSearchResult) {\n if (!addedIds.has(result.id)) {\n onChange([...valueRef.current, mapToProcedure(result)]);\n }\n setQuery('');\n setResults([]);\n }\n\n function handleResultClick(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) return;\n setAddingId(result.id);\n setTimeout(() => {\n addProcedure(result);\n setAddingId(null);\n setTimeout(() => searchInputRef.current?.focus(), 0);\n }, ADD_FEEDBACK_MS);\n }\n\n function removeAt(index: number) {\n onChange(safeValue.filter((_, i) => i !== index));\n }\n\n function removeBySearchId(id: string) {\n onChange(safeValue.filter((proc) => proc.is_custom || proc.id !== id));\n }\n\n function handleAddCustom() {\n const trimmed = query.trim();\n if (!trimmed) return;\n if (valueRef.current.some((p) => p.is_custom && p.name === trimmed)) return;\n onChange([...valueRef.current, createCustomProcedure(trimmed)]);\n setQuery('');\n setResults([]);\n }\n\n function handleRecentlyUsedToggle(result: ProcedureSearchResult) {\n if (addedIds.has(result.id)) {\n removeBySearchId(result.id);\n } else {\n addProcedure(result);\n }\n }\n\n async function handleFrequentItemToggle(item: ProcedureFrequentItem) {\n const id = String(item.id);\n const addedById = addedIds.has(id);\n const addedByName = safeValue.some((proc) => proc.name === item.name);\n if (addedById || addedByName) {\n if (addedById) removeBySearchId(id);\n else onChange(safeValue.filter((proc) => proc.name !== item.name));\n return;\n }\n setAddingFrequentId(id);\n try {\n const searchResults = await onSearch(item.name);\n const first = searchResults?.[0];\n if (first && !valueRef.current.some((proc) => !proc.is_custom && proc.id === first.id)) {\n onChange([...valueRef.current, mapToProcedure(first)]);\n }\n } finally {\n setAddingFrequentId(null);\n }\n }\n\n const recentlyUsedChips = recentlyUsed.map((r) => {\n const isAdded = addedIds.has(r.id);\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleRecentlyUsedToggle(r)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {r.name}\n </button>\n );\n });\n\n const limitedFrequentItems = frequentItems.slice(0, 25);\n\n const frequentItemChips =\n limitedFrequentItems.length > 0\n ? limitedFrequentItems.map((item) => {\n const id = String(item.id);\n const isAdded =\n safeValue.some((proc) => !proc.is_custom && proc.id === id) ||\n safeValue.some((proc) => proc.name === item.name);\n const isAdding = addingFrequentId === id;\n return (\n <button\n key={item.id}\n type=\"button\"\n disabled={isAdding}\n onClick={() => handleFrequentItemToggle(item)}\n className={cn(\n 'rounded-full border text-xs px-3 py-1 transition-colors',\n isAdded\n ? 'border-green-300 bg-green-50 text-green-700'\n : 'border-border bg-white hover:bg-gray-50',\n isAdding && 'opacity-70 pointer-events-none'\n )}\n >\n {isAdded && <span className=\"mr-1\">✓</span>}\n {isAdding ? '…' : item.name}\n </button>\n );\n })\n : [];\n\n return (\n <div className=\"rounded-md overflow-hidden flex flex-col bg-white border border-[#D0D0D0] space-y-3 p-3 h-fit\">\n <div className=\"flex items-center justify-between mb-3\">\n <span className=\"text-sm font-semibold\">{label}</span>\n <button\n type=\"button\"\n onClick={() => setOpen(true)}\n className=\"text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer\"\n >\n ADD\n </button>\n </div>\n\n {/* Added procedures — one row each */}\n {safeValue.length > 0 && (\n <div className=\"divide-y divide-border rounded-lg border border-border overflow-hidden\">\n {safeValue.map((proc, index) => (\n <div\n key={proc.is_custom ? `custom-${index}` : proc.id}\n className=\"flex items-center justify-between px-3 py-2 bg-white hover:bg-gray-50\"\n >\n <span className=\"text-sm\">{proc.name}</span>\n <button\n type=\"button\"\n onClick={() => removeAt(index)}\n className=\"text-muted-foreground hover:text-red-500 transition-colors cursor-pointer\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n ))}\n </div>\n )}\n\n {/* Dialog */}\n <AddEntityDialog\n open={open}\n onClose={() => setOpen(false)}\n title=\"Add Procedure\"\n recentlyUsedSlot={\n frequentItemChips.length > 0\n ? frequentItemChips\n : recentlyUsedChips.length > 0\n ? recentlyUsedChips\n : undefined\n }\n chipSectionLabel={frequentItemChips.length > 0 ? 'Frequently used' : undefined}\n actionSlot={\n <button\n type=\"button\"\n disabled={\n !query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())\n }\n onClick={handleAddCustom}\n className={cn(\n 'rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer',\n (!query.trim() ||\n valueRef.current.some((p) => p.is_custom && p.name === query.trim())) &&\n 'opacity-40 cursor-not-allowed'\n )}\n >\n Save Procedure\n </button>\n }\n >\n <div className=\"space-y-2\">\n <Input\n ref={searchInputRef}\n value={query}\n onChange={(e) => handleQueryChange(e.target.value)}\n placeholder=\"Search for a procedure...\"\n className=\"border border-border rounded-md focus-visible:ring-0\"\n />\n\n {/* Inline results — no absolute positioning to avoid overflow-clip */}\n {loading && (\n <p className=\"text-xs text-muted-foreground py-1\">Searching…</p>\n )}\n {!loading && results.length > 0 && (\n <div className=\"border border-border rounded-md overflow-hidden\">\n {results.map((r) => {\n const isAdding = addingId === r.id;\n return (\n <button\n key={r.id}\n type=\"button\"\n onClick={() => handleResultClick(r)}\n className={cn(\n 'w-full text-left px-3 py-2 text-sm transition-all duration-300 ease-out border-b border-border last:border-b-0 cursor-pointer flex items-center justify-between gap-2',\n isAdding\n ? 'bg-green-50 border-green-200'\n : 'hover:bg-gray-50'\n )}\n >\n <span className=\"truncate\">{r.name}</span>\n {isAdding && <Check className=\"h-4 w-4 shrink-0 text-green-600\" />}\n </button>\n );\n })}\n </div>\n )}\n </div>\n </AddEntityDialog>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers, useFrequentItems } from '../../react/FormProvider';\nimport { AddProcedureField } from './AddProcedureField';\nimport type { Procedure, ProcedureSearchResult } from './AddProcedureField';\n\nexport const AddProcedureWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const { procedures: frequentProcedures } = useFrequentItems();\n\n const safeValue: Procedure[] = Array.isArray(value) ? (value as Procedure[]) : [];\n\n return (\n <AddProcedureField\n value={safeValue}\n onChange={setValue}\n onSearch={handlers.onSearch as (query: string) => Promise<ProcedureSearchResult[]>}\n recentlyUsed={handlers.recentlyUsed as ProcedureSearchResult[] | undefined}\n frequentItems={frequentProcedures}\n />\n );\n};\n","import React, { useState } from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type DifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nexport type DifferentialDiagnosisProps = {\n differentialDiagnosis: DifferentialDiagnosisItem[];\n className?: string;\n height?: string;\n};\n\n// ─── Helpers ────────────────────────────────────────────────────────────────────\n\nfunction getStatusBasedClass(status: string): string {\n switch ((status || '').toLowerCase()) {\n case 'high':\n return 'bg-red-100 text-red-500';\n case 'medium':\n return 'bg-yellow-100 text-yellow-600';\n case 'low':\n return 'bg-green-100 text-green-600';\n default:\n return 'bg-gray-200 text-gray-600';\n }\n}\n\n// ─── Diagnosis card (accordion) ─────────────────────────────────────────────────\n\nfunction DiagnosisCard({ item, defaultOpen = false }: { item: DifferentialDiagnosisItem; defaultOpen?: boolean }) {\n const [open, setOpen] = useState(defaultOpen);\n\n return (\n <div className=\"border border-gray-200 rounded-lg bg-[#F2F2F2] mb-2 last:mb-0 overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'w-full text-left flex items-center gap-2 py-2 px-3 rounded-lg',\n 'cursor-pointer hover:bg-gray-200/60 transition-colors'\n )}\n >\n <ChevronRight\n className={cn('h-3.5 w-3.5 shrink-0 text-muted-foreground transition-transform', open && 'rotate-90')}\n />\n <div className=\"flex-1 min-w-0\">\n <div className=\"text-xs text-gray-500 font-medium\">\n {item.category.charAt(0).toUpperCase() + item.category.slice(1)}\n </div>\n <div className=\"text-sm text-black font-semibold mt-0.5 leading-tight\">{item.condition}</div>\n </div>\n </button>\n\n {open && (\n <div className=\"flex flex-col gap-2 px-3 pb-3 pt-0 pl-9\">\n <div className=\"flex justify-between text-xs font-semibold text-gray-500\">\n <span>LIKELIHOOD</span>\n <span>SEVERITY</span>\n <span>TREATABILITY</span>\n </div>\n <div className=\"flex justify-between gap-2\">\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.likelihood))}>\n {item.likelihood}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.severity))}>\n {item.severity}\n </span>\n <span className={cn('px-2.5 py-0.5 rounded-full text-xs font-bold shrink-0', getStatusBasedClass(item.treatability))}>\n {item.treatability}\n </span>\n </div>\n\n {item.keyFeatures && item.keyFeatures.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Key Features</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.keyFeatures.map((feature, i) => (\n <li key={i}>{feature}</li>\n ))}\n </ul>\n </div>\n )}\n\n {item.nextSteps && item.nextSteps.length > 0 && (\n <div className=\"pt-1\">\n <div className=\"text-xs font-semibold text-gray-500 mb-0.5 uppercase tracking-wider\">Next Steps</div>\n <ul className=\"list-disc pl-4 text-xs text-gray-700 space-y-0.5\">\n {item.nextSteps.map((step, i) => (\n <li key={i}>{step}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\n/**\n * - Outer: rounded border [#D0D0D0], highlight label strip (#FEE8EC)\n * - Body: scrollable list of diagnosis cards with accordion expand/collapse\n */\nexport const DifferentialDiagnosis: React.FC<DifferentialDiagnosisProps> = ({\n differentialDiagnosis,\n className = '',\n height = '300px',\n}) => {\n const hasItems = Array.isArray(differentialDiagnosis) && differentialDiagnosis.length > 0;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]',\n className\n )}\n >\n {/* Header: highlight-label style */}\n <div className=\"rounded-t-md bg-[#FEE8EC] px-3 py-1.5 text-xs shrink-0 z-[1] text-slate-600 flex items-center font-semibold\">\n <span>Differential Diagnosis</span>\n </div>\n\n {/* Body: scrollable list */}\n <div\n className={cn(\n 'relative bg-white rounded-b-md border-t border-[#D0D0D0] overflow-y-auto p-3',\n 'focus-visible:outline-none'\n )}\n style={{ minHeight: height, maxHeight: height }}\n >\n {hasItems ? (\n differentialDiagnosis.map((item, idx) => (\n <DiagnosisCard key={idx} item={item} defaultOpen={idx === 0} />\n ))\n ) : (\n <p className=\"text-xs text-muted-foreground\">No differential diagnosis yet.</p>\n )}\n\n {/* Progressive blur-style overlay at bottom (30% height) */}\n <div className=\"pointer-events-none absolute inset-x-0 bottom-0 h-[30%] bg-gradient-to-t from-white via-white/80 to-transparent\" />\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { DifferentialDiagnosis } from './DifferentialDiagnosis';\nimport type { DifferentialDiagnosisItem } from './DifferentialDiagnosis';\n\nexport const DifferentialDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value } = useField(fieldId);\n\n const items: DifferentialDiagnosisItem[] = Array.isArray(value)\n ? (value as DifferentialDiagnosisItem[])\n : [];\n\n return <DifferentialDiagnosis differentialDiagnosis={items} />;\n};\n\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SpinnerProps extends React.HTMLAttributes<HTMLDivElement> {\n size?: \"sm\" | \"md\" | \"lg\";\n}\n\nconst Spinner = React.forwardRef<HTMLDivElement, SpinnerProps>(\n ({ className, size = \"md\", ...props }, ref) => {\n const sizeClasses = {\n sm: \"h-4 w-4 border-2\",\n md: \"h-6 w-6 border-2\",\n lg: \"h-8 w-8 border-3\",\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n \"animate-spin rounded-full border-primary border-t-transparent\",\n sizeClasses[size],\n className\n )}\n {...props}\n >\n <span className=\"sr-only\">Loading...</span>\n </div>\n );\n }\n);\nSpinner.displayName = \"Spinner\";\n\nexport { Spinner };\n","import React from 'react';\nimport { RefreshCw } from 'lucide-react';\nimport { cn } from '../../core/utils';\nimport { Spinner } from '../shadcn/spinner';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type VitalsData = {\n temperature?: number | null;\n height?: number | null;\n weight?: number | null;\n bmi?: number | null;\n blood_sugar?: number | null;\n notes?: string | null;\n circumference_of_head_in_cms?: number | null;\n circumference_of_waist_in_cms?: number | null;\n blood_pressure_systolic?: number | null;\n blood_pressure_diastolic?: number | null;\n heart_rate?: number | null;\n respiratory_rate?: number | null;\n oxygen_saturation?: number | null;\n recorded_at?: string | null;\n};\n\nexport type VitalsProps = {\n label?: string;\n data: VitalsData | null;\n loading?: boolean;\n error?: string | null;\n onRefresh?: () => void;\n className?: string;\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype VitalItem = { label: string; value: string };\n\nfunction buildItems(data: VitalsData): VitalItem[] {\n const items: VitalItem[] = [];\n\n const hasBP =\n data.blood_pressure_systolic != null || data.blood_pressure_diastolic != null;\n if (hasBP) {\n const sys = data.blood_pressure_systolic ?? '–';\n const dia = data.blood_pressure_diastolic ?? '–';\n items.push({ label: 'BP', value: `${sys}/${dia}` });\n }\n\n if (data.heart_rate != null)\n items.push({ label: 'Heart Rate', value: `${data.heart_rate} bpm` });\n\n if (data.respiratory_rate != null)\n items.push({ label: 'Resp. Rate', value: `${data.respiratory_rate}/min` });\n\n if (data.oxygen_saturation != null)\n items.push({ label: 'SpO\\u2082', value: `${data.oxygen_saturation}%` });\n\n if (data.temperature != null)\n items.push({ label: 'Temp', value: `${data.temperature} \\u00b0F` });\n\n if (data.height != null)\n items.push({ label: 'Height', value: `${data.height} cm` });\n\n if (data.weight != null)\n items.push({ label: 'Weight', value: `${data.weight} kg` });\n\n if (data.bmi != null)\n items.push({ label: 'BMI', value: `${data.bmi}` });\n\n if (data.blood_sugar != null)\n items.push({ label: 'Blood Sugar', value: `${data.blood_sugar} mg/dL` });\n\n if (data.circumference_of_head_in_cms != null)\n items.push({ label: 'Head Circ.', value: `${data.circumference_of_head_in_cms} cm` });\n\n if (data.circumference_of_waist_in_cms != null)\n items.push({ label: 'Waist Circ.', value: `${data.circumference_of_waist_in_cms} cm` });\n\n return items;\n}\n\nfunction formatRecordedAt(iso: string | null | undefined): string {\n if (!iso) return '';\n try {\n return new Date(iso).toLocaleString(undefined, {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\n// ─── Vital chip ───────────────────────────────────────────────────────────────\n\nfunction VitalChip({ label, value }: VitalItem) {\n return (\n <div className=\"flex flex-col gap-0 rounded-md min-w-fit px-1.5\">\n <span className=\"text-[10px] font-sm text-gray-500 uppercase tracking-wide leading-none\">\n {label}\n </span>\n <span className=\"text-xs text-gray-900 leading-tight\">{value}</span>\n </div>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Vitals: React.FC<VitalsProps> = ({\n data,\n loading = false,\n error = null,\n onRefresh,\n className,\n}) => {\n const items = data ? buildItems(data) : [];\n const hasItems = items.length > 0;\n const recordedAt = data?.recorded_at ? formatRecordedAt(data.recorded_at) : null;\n const notes = data?.notes?.trim() || null;\n\n return (\n <div\n className={cn(\n 'rounded-md overflow-hidden border border-[#D0D0D0] bg-white px-2 py-2',\n className\n )}\n >\n {loading && !hasItems ? (\n <div className=\"flex items-center gap-1.5 py-1\">\n <Spinner size=\"sm\" />\n <span className=\"text-xs text-muted-foreground\">Loading vitals…</span>\n </div>\n ) : error ? (\n <p className=\"text-xs text-red-500 py-1\">{error}</p>\n ) : hasItems ? (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-wrap items-center justify-between gap-x-3 gap-y-1\">\n <div className=\"flex flex-wrap gap-x-2 gap-y-0.5\">\n {items.map(item => (\n <VitalChip key={item.label} {...item} />\n ))}\n </div>\n <div className=\"flex flex-col items-end gap-0.5 shrink-0\">\n {recordedAt && (\n <span className=\"text-[10px] text-slate-500\">{recordedAt}</span>\n )}\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 cursor-pointer'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n </div>\n {notes && (\n <p className=\"text-xs text-gray-600 pt-1.5 mt-0.5\">\n {notes}\n </p>\n )}\n </div>\n ) : (\n <div className=\"flex items-center justify-between gap-2 py-1\">\n <p className=\"text-xs text-muted-foreground\">No vitals recorded.</p>\n {onRefresh && (\n <button\n type=\"button\"\n onClick={onRefresh}\n disabled={loading}\n className={cn(\n 'flex items-center gap-0.5 text-[10px] font-medium text-slate-600',\n 'hover:text-slate-900 transition-colors disabled:opacity-50 shrink-0'\n )}\n aria-label=\"Refresh vitals\"\n >\n <RefreshCw className={cn('h-2.5 w-2.5', loading && 'animate-spin')} />\n <span>Refresh</span>\n </button>\n )}\n </div>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Vitals, type VitalsData } from './Vitals';\n\nexport const VitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value, setValue, fieldDef } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n console.log('[VitalsWidget] fieldId:', fieldId, '| onFetch present:', !!handlers.onFetch, '| value:', value);\n\n const fetchVitals = useCallback(async () => {\n if (!handlers.onFetch) return;\n setLoading(true);\n setError(null);\n try {\n const data = await handlers.onFetch();\n console.log('[VitalsWidget] fetched data:', data);\n setValue(data);\n } catch {\n setError('Failed to load vitals. Please try again.');\n } finally {\n setLoading(false);\n }\n }, [handlers, setValue]);\n\n // Fetch once on mount if a handler is provided\n useEffect(() => {\n fetchVitals();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Vitals\n label={fieldDef?.label ?? 'Vitals'}\n data={(value as VitalsData | null) ?? null}\n loading={loading}\n error={error}\n onRefresh={handlers.onFetch ? fetchVitals : undefined}\n />\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\n/**\n * Hidden Vitals: same as a textarea (styling, behavior, form state) but visually\n * hidden in the UI. State is still saved in the background.\n */\nexport const HiddenVitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const height = 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n\n const wrapperClass = cn(theme?.wrapperClassName ?? 'space-y-2', 'sr-only');\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n return (\n <div\n className={fieldWrapperClass(fieldDef, wrapperClass)}\n aria-hidden=\"true\"\n >\n {theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )}\n <Textarea\n id={fieldId}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={fieldControlClass(fieldDef, inputClass)}\n {...(height != null && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\nfunction normalizeOptions(\n response: { specializations?: string[] } | { label: string; value: any }[]\n): { label: string; value: string }[] {\n if (Array.isArray(response)) {\n return response.map((o) => ({ label: String(o.label), value: String(o.value) }));\n }\n if (response?.specializations?.length) {\n return response.specializations.map((s) => ({ label: s, value: s }));\n }\n return [];\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n const s = (item as ReferralItem).specialization;\n const u = (item as ReferralItem).is_urgent;\n return { specialization: String(s), is_urgent: Boolean(u) };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReferralWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [options, setOptions] = useState<{ label: string; value: string }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedItems = normalizeValue(value);\n const availableOptions = options.filter(\n (opt) => !selectedItems.some((item) => item.specialization === opt.value)\n );\n\n const loadOptions = useCallback(async () => {\n if (handlers.onFetchOptions) {\n setLoading(true);\n try {\n const res = await handlers.onFetchOptions();\n setOptions(normalizeOptions(res));\n } finally {\n setLoading(false);\n }\n return;\n }\n const def = fieldDef as ReferralFieldDef | undefined;\n if (def?.options?.length) {\n setOptions(def.options.map((o) => ({ label: String(o.label), value: String(o.value) })));\n } else if (def?.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts.map((o) => ({ label: String(o.label), value: String(o.value) }))))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [fieldDef, handlers]);\n\n useEffect(() => {\n if (!fieldDef) return;\n loadOptions();\n }, [fieldDef, loadOptions]);\n\n const handleAdd = useCallback(\n (specialization: string) => {\n const next = [...selectedItems, { specialization, is_urgent: false }];\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleRemove = useCallback(\n (specialization: string) => {\n const next = selectedItems.filter((item) => item.specialization !== specialization);\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleToggleUrgent = useCallback(\n (specialization: string) => {\n const next = selectedItems.map((item) =>\n item.specialization === specialization\n ? { ...item, is_urgent: !item.is_urgent }\n : item\n );\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n if (!fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n Referral to <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n\n {loading && <p className=\"text-xs text-muted-foreground\">Loading...</p>}\n\n {!loading && (\n <>\n <Select\n key={`referral-${selectedItems.map((i) => i.specialization).join(',')}`}\n disabled={disabled}\n value=\"\"\n onValueChange={(val) => {\n if (val) {\n handleAdd(val);\n }\n }}\n >\n <SelectTrigger\n id={fieldId}\n className={fieldControlClass(fieldDef, showError ? 'border-red-500' : '')}\n >\n <SelectValue placeholder=\"Select specializations...\" />\n </SelectTrigger>\n <SelectContent>\n {availableOptions.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n {availableOptions.length === 0 && (\n <div className=\"py-2 px-2 text-sm text-muted-foreground\">\n All specializations selected\n </div>\n )}\n </SelectContent>\n </Select>\n\n {selectedItems.length > 0 && (\n <div className=\"mt-1.5 flex h-12 flex-wrap content-start gap-1.5 overflow-y-auto pr-1\">\n {selectedItems.map((item) => {\n const isUrgent = item.is_urgent;\n const chipClass = isUrgent\n ? 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs max-w-full cursor-pointer hover:bg-red-200 transition-colors'\n : 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs max-w-full cursor-pointer hover:bg-blue-200 transition-colors';\n return (\n <div\n key={item.specialization}\n className={chipClass}\n onClick={(e) => {\n if (e.target instanceof HTMLElement && e.target.closest('button')) return;\n handleToggleUrgent(item.specialization);\n }}\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded mr-1\">\n U\n </span>\n )}\n <span className=\"truncate max-w-[120px]\">{item.specialization}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.specialization);\n }}\n className=\"ml-0.5 text-blue-600 hover:text-blue-800 focus:outline-none flex-shrink-0 text-sm leading-none\"\n aria-label={`Remove ${item.specialization}`}\n >\n ×\n </button>\n </div>\n );\n })}\n </div>\n )}\n\n {selectedItems.length === 0 && (\n <p className=\"text-xs text-muted-foreground mt-1\">No specializations selected</p>\n )}\n\n {selectedItems.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n Click a chip to mark as urgent\n </p>\n )}\n </>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import * as React from \"react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Card = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"rounded-lg border bg-card text-card-foreground shadow-sm\",\n className\n )}\n {...props}\n />\n))\nCard.displayName = \"Card\"\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex flex-col space-y-1.5 p-6\", className)}\n {...props}\n />\n))\nCardHeader.displayName = \"CardHeader\"\n\nconst CardTitle = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h3\n ref={ref}\n className={cn(\n \"text-2xl font-semibold leading-none tracking-tight\",\n className\n )}\n {...props}\n />\n))\nCardTitle.displayName = \"CardTitle\"\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n))\nCardDescription.displayName = \"CardDescription\"\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"p-6 pt-0\", className)} {...props} />\n))\nCardContent.displayName = \"CardContent\"\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\"flex items-center p-6 pt-0\", className)}\n {...props}\n />\n))\nCardFooter.displayName = \"CardFooter\"\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }\n\n","import React, { useCallback, useState } from 'react';\nimport { format, parseISO, differenceInCalendarDays, addDays, addWeeks } from 'date-fns';\nimport { Calendar as CalendarIcon } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent } from '../shadcn/card';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { Calendar } from '../shadcn/calendar';\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcn/popover';\nimport { Button } from '../shadcn/button';\nimport { cn } from '../../core/utils';\nimport type { FollowupValue } from '../../core/types';\n\nconst FOLLOWUP_TYPE_OPTIONS = [\n { value: 'no followup', label: 'No Follow-up' },\n { value: 'one time', label: 'One Time' },\n] as const;\n\nconst UNIT_OPTIONS = [\n { value: 'days', label: 'Days' },\n { value: 'weeks', label: 'Weeks' },\n { value: 'months', label: 'Months' },\n] as const;\n\nconst DAYS_PER_MONTH = 30;\n\n/** Convert duration (value + unit) to number of days from today. */\nfunction durationToDays(valueNum: number, unit: 'days' | 'weeks' | 'months'): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n let target: Date;\n if (unit === 'days') target = addDays(today, valueNum);\n else if (unit === 'weeks') target = addWeeks(today, valueNum);\n else target = addDays(today, valueNum * DAYS_PER_MONTH);\n return Math.max(0, differenceInCalendarDays(target, today));\n}\n\nfunction daysToDisplayCount(daysNum: number, unit: 'days' | 'weeks' | 'months'): number {\n if (unit === 'days') return Math.max(0, daysNum);\n if (unit === 'weeks') return Math.round(daysNum / 7) || 1;\n return Math.round(daysNum / DAYS_PER_MONTH) || 1;\n}\n\n/** Convert a future date to number of days from today. */\nfunction dateToDays(date: Date): number {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n const d = new Date(date);\n d.setHours(0, 0, 0, 0);\n return Math.max(0, differenceInCalendarDays(d, today));\n}\n\n/** Days → date for display (today + days). */\nfunction daysToDate(days: number): Date {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n return addDays(today, days);\n}\n\nfunction normalizeFollowup(value: unknown): false | FollowupValue {\n if (value === false || value === null || value === undefined) return false;\n if (typeof value !== 'object') return false;\n const o = value as Record<string, unknown>;\n if (o.followupType !== 'one time') return false;\n // New shape: { followupType, value, unit: 'days' }\n if (typeof o.value === 'string' && o.unit === 'days') {\n return { followupType: 'one time', value: o.value, unit: 'days' };\n }\n // Legacy: mode + date or mode + value/unit → convert to days\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n if (o.mode === 'date' && typeof o.date === 'string') {\n const d = parseLocalDate(o.date);\n if (d) {\n const days = dateToDays(d);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n }\n }\n const val = o.value != null ? Number(String(o.value)) : 7;\n const u = (o.unit === 'weeks' || o.unit === 'months' ? o.unit : 'days') as 'days' | 'weeks' | 'months';\n const days = durationToDays(Number.isNaN(val) ? 7 : val, u);\n return { followupType: 'one time', value: String(days), unit: 'days' };\n}\n\nfunction getDefaultDate(): Date {\n const d = new Date();\n d.setDate(d.getDate() + 7);\n return d;\n}\n\nfunction parseLocalDate(dateString: string | null | undefined): Date | null {\n if (!dateString) return null;\n try {\n return parseISO(dateString);\n } catch {\n const parts = dateString.split('-');\n if (parts.length === 3) {\n const y = parseInt(parts[0], 10);\n const m = parseInt(parts[1], 10) - 1;\n const d = parseInt(parts[2], 10);\n if (!Number.isNaN(y) && !Number.isNaN(m) && !Number.isNaN(d)) {\n return new Date(y, m, d);\n }\n }\n return null;\n }\n}\n\nexport const FollowupWidget: React.FC<{ fieldId: string; showIcon?: boolean }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, visible } = useField(fieldId);\n const followup = normalizeFollowup(value);\n const [calendarOpen, setCalendarOpen] = useState(false);\n\n const currentFollowupType = followup ? followup.followupType : 'no followup';\n const hasFollowup = followup !== false;\n const [displayMode, setDisplayMode] = useState<'duration' | 'date'>('duration');\n const [displayUnit, setDisplayUnit] = useState<'days' | 'weeks' | 'months'>('days');\n const daysNum = hasFollowup ? parseInt(followup.value, 10) || 7 : 7;\n const currentDate = hasFollowup ? daysToDate(daysNum) : null;\n const followupMode = displayMode;\n const currentValue = hasFollowup ? String(daysToDisplayCount(daysNum, displayUnit)) : '7';\n const currentUnit = displayUnit;\n\n const handleFollowupTypeChange = useCallback(\n (newType: 'no followup' | 'one time') => {\n setTouched();\n if (newType === 'no followup') {\n setValue(false);\n setCalendarOpen(false);\n return;\n }\n setValue({\n followupType: 'one time',\n value: hasFollowup ? followup.value : '7',\n unit: 'days',\n });\n },\n [followup, hasFollowup, setValue, setTouched]\n );\n\n const handleModeChange = useCallback((newMode: 'duration' | 'date') => {\n setDisplayMode(newMode);\n if (newMode === 'date') setCalendarOpen(false);\n }, []);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n setTouched();\n const num = parseInt(newValue, 10);\n const min = displayUnit === 'days' ? 0 : 1;\n const valid = (Number.isNaN(num) ? min : num) >= min || newValue === '';\n if (!valid && newValue !== '') {\n setValue({ followupType: 'one time', value: String(displayUnit === 'days' ? 0 : durationToDays(1, displayUnit)), unit: 'days' });\n return;\n }\n const days = durationToDays(Number.isNaN(num) ? (displayUnit === 'days' ? 0 : 1) : num, displayUnit);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [displayUnit, setValue, setTouched]\n );\n\n const handleUnitChange = useCallback(\n (newUnit: 'days' | 'weeks' | 'months') => {\n if (newUnit === displayUnit) return;\n const n = daysToDisplayCount(daysNum, displayUnit);\n setDisplayUnit(newUnit);\n if (!hasFollowup) return;\n setTouched();\n const newDays = durationToDays(n, newUnit);\n setValue({ followupType: 'one time', value: String(newDays), unit: 'days' });\n },\n [displayUnit, daysNum, hasFollowup, setValue, setTouched]\n );\n\n const handleDateSelect = useCallback(\n (selected: Date | undefined) => {\n setTouched();\n setCalendarOpen(false);\n if (!selected) return;\n const days = dateToDays(selected);\n setValue({ followupType: 'one time', value: String(days), unit: 'days' });\n },\n [setValue, setTouched]\n );\n\n if (!visible || !fieldDef) return null;\n\n const minDate = new Date();\n minDate.setHours(0, 0, 0, 0);\n const selectedDate = currentDate || getDefaultDate();\n\n return (\n <Card className={cn(error && 'border-destructive')}>\n {/* <CardHeader className=\"flex flex-row items-center space-y-0\">\n {showIcon && (\n <img\n alt=\"Follow-up\"\n className=\"h-5 w-5\"\n src=\"/icons/star_png.png\"\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none';\n }}\n />\n )}\n <Label className=\"text-base font-semibold\">{fieldDef.label}</Label>\n </CardHeader> */}\n <CardContent className=\"space-y-1 p-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center flex-shrink-0 gap-2\">\n <Label className=\"text-xs font-semibold text-muted-foreground\">Follow-up</Label>\n <Select\n value={currentFollowupType}\n onValueChange={(v) => handleFollowupTypeChange(v as 'no followup' | 'one time')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[140px] border-none bg-muted/50 text-xs py-1 focus:outline-none focus:ring-0 focus:ring-offset-0\">\n <SelectValue/>\n </SelectTrigger>\n <SelectContent>\n {FOLLOWUP_TYPE_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n {currentFollowupType !== 'no followup' && (\n <>\n <div className=\"flex items-center gap-4\">\n <Label className=\"text-xs font-medium text-muted-foreground\">Schedule by:</Label>\n <div className=\"flex items-center gap-3\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"duration\"\n checked={followupMode === 'duration'}\n onChange={() => handleModeChange('duration')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Duration</span>\n </label>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"radio\"\n name={`followup-mode-${fieldId}`}\n value=\"date\"\n checked={followupMode === 'date'}\n onChange={() => handleModeChange('date')}\n className=\"h-4 w-4 text-primary focus:ring-primary\"\n disabled={disabled}\n />\n <span className=\"text-xs text-muted-foreground\">Date</span>\n </label>\n </div>\n </div>\n\n {followupMode === 'duration' && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs font-semibold text-muted-foreground\">In</span>\n <input\n type=\"number\"\n min={currentUnit === 'days' ? 0 : 1}\n value={currentValue}\n onChange={(e) => handleValueChange(e.target.value)}\n disabled={disabled}\n className=\"w-16 py-1.5 px-2 border border-input rounded-md text-center text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n placeholder=\"7\"\n />\n <Select\n value={currentUnit}\n onValueChange={(v) => handleUnitChange(v as 'days' | 'weeks' | 'months')}\n disabled={disabled}\n >\n <SelectTrigger className=\"w-[100px] h-8 text-xs\">\n <SelectValue className='text-xs'/>\n </SelectTrigger>\n <SelectContent>\n {UNIT_OPTIONS.map((opt) => (\n <SelectItem key={opt.value} value={opt.value} className=\"text-xs\">\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )}\n\n {followupMode === 'date' && (\n <Popover open={calendarOpen} onOpenChange={setCalendarOpen}>\n <PopoverTrigger asChild>\n <Button\n type=\"button\"\n variant=\"outline\"\n className=\"w-full justify-start text-left font-normal h-9\"\n disabled={disabled}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">\n {hasFollowup && currentDate\n ? format(currentDate, 'MMM d, yyyy')\n : 'Select date'}\n </span>\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\" align=\"start\">\n <Calendar\n mode=\"single\"\n selected={selectedDate}\n onSelect={handleDateSelect}\n disabled={(date) => date < minDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )}\n\n <p className=\"text-xs text-muted-foreground\">\n One-time appointment{' '}\n {followupMode === 'duration'\n ? `in ${currentValue} ${currentUnit}`\n : hasFollowup && currentDate\n ? `on ${format(currentDate, 'MMM d, yyyy')}`\n : 'date to be selected'}\n </p>\n </>\n )}\n\n {error && <p className=\"text-xs text-destructive\">{error}</p>}\n </CardContent>\n </Card>\n );\n};\n","import { useState, useEffect, useRef, useCallback } from 'react';\nimport nlp from 'compromise';\nimport type { ExtractedKeywordMatch, MatchedCondition } from '../core/types';\n\nexport interface SmartKeywordsResult {\n extractedNouns: string[];\n matchedConditions: ExtractedKeywordMatch[];\n isProcessing: boolean;\n error: string | null;\n}\n\n/**\n * Extracts noun phrases from `text` using compromise, deduplicates, then\n * searches each noun against a backend master table via `onSearch`. Returns\n * the flattened list of keyword-to-master-record matches.\n *\n * All NLP runs client-side; the backend only receives simple query strings.\n */\nexport function useSmartKeywords(\n text: string,\n onSearch: (query: string) => Promise<any[]>,\n debounceDelay = 1000,\n): SmartKeywordsResult {\n // High-level debug of hook usage on each render\n console.log('[useSmartKeywords] render', {\n textLength: text?.length ?? 0,\n hasOnSearch: typeof onSearch === 'function',\n debounceDelay,\n });\n\n const [extractedNouns, setExtractedNouns] = useState<string[]>([]);\n const [matchedConditions, setMatchedConditions] = useState<ExtractedKeywordMatch[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const abortRef = useRef(0);\n\n const processText = useCallback(\n async (input: string, runId: number) => {\n if (!input || input.trim().length === 0) {\n console.log('[useSmartKeywords] skip empty input', {\n runId,\n inputLength: input?.length ?? 0,\n });\n setExtractedNouns([]);\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n console.log('[useSmartKeywords] processText start', {\n runId,\n inputLength: input.length,\n });\n\n setIsProcessing(true);\n setError(null);\n\n try {\n const nouns = extractNouns(input);\n const uniqueNouns = Array.from(new Set(nouns));\n\n console.log('[useSmartKeywords] extracted nouns', {\n runId,\n nouns,\n uniqueNouns,\n });\n\n if (runId !== abortRef.current) return;\n setExtractedNouns(uniqueNouns);\n\n if (uniqueNouns.length === 0) {\n console.log('[useSmartKeywords] no nouns, skipping search', { runId });\n setMatchedConditions([]);\n setIsProcessing(false);\n return;\n }\n\n const searchResults = await Promise.all(\n uniqueNouns.map(async (noun) => {\n // Normalise the keyword before hitting the backend:\n // - remove newlines\n // - strip leading bullet characters like \"- \"\n // - collapse internal whitespace to single spaces\n const normalised = noun\n .replace(/\\s+/g, ' ')\n .replace(/^[\\s-]+/, '')\n .trim();\n\n try {\n console.log('[useSmartKeywords] onSearch call', { runId, noun, normalised });\n const results: MatchedCondition[] = await onSearch(normalised);\n console.log('[useSmartKeywords] onSearch result', {\n runId,\n noun,\n normalised,\n count: Array.isArray(results) ? results.length : 0,\n });\n // Only keep the first result per noun\n const first = Array.isArray(results) && results.length > 0 ? [results[0]] : [];\n return { keyword: normalised, matches: first };\n } catch (err) {\n console.error('[useSmartKeywords] onSearch error', { runId, noun, err });\n return { keyword: normalised || noun, matches: [] as MatchedCondition[] };\n }\n }),\n );\n\n if (runId !== abortRef.current) return;\n\n const allMatches: ExtractedKeywordMatch[] = searchResults.flatMap(\n ({ keyword, matches }) =>\n matches.map((record) => ({\n extractedKeyword: keyword,\n matchedCondition: {\n id: record.id,\n name: record.name,\n created_at: record.created_at,\n updated_at: record.updated_at,\n },\n })),\n );\n\n console.log('[useSmartKeywords] allMatches computed', {\n runId,\n matchesCount: allMatches.length,\n });\n\n setMatchedConditions(allMatches);\n } catch (err) {\n if (runId !== abortRef.current) return;\n console.error('[useSmartKeywords] processText error', { runId, err });\n setError(err instanceof Error ? err.message : 'Keyword extraction failed');\n } finally {\n if (runId === abortRef.current) {\n console.log('[useSmartKeywords] processText end', { runId });\n setIsProcessing(false);\n }\n }\n },\n [onSearch],\n );\n\n useEffect(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n\n const runId = ++abortRef.current;\n console.log('[useSmartKeywords] schedule debounce', {\n runId,\n debounceDelay,\n textLength: text?.length ?? 0,\n });\n\n timerRef.current = setTimeout(() => {\n console.log('[useSmartKeywords] debounce fired', { runId });\n processText(text, runId);\n }, debounceDelay);\n\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n };\n }, [text, debounceDelay, processText]);\n\n return { extractedNouns, matchedConditions, isProcessing, error };\n}\n\nfunction extractNouns(text: string): string[] {\n const doc = nlp(text);\n const rawNouns: string[] = doc.nouns().out('array');\n\n const cleaned = rawNouns\n .map((n) => n.replace(/[^\\w\\s-]/g, '').trim().toLowerCase())\n .filter((n) => n.length > 2);\n\n console.log('[useSmartKeywords] extractNouns', {\n inputLength: text?.length ?? 0,\n rawNouns,\n cleaned,\n });\n\n return cleaned;\n}\n","import React, { useCallback, useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { useSmartKeywords } from '../../react/useSmartKeywords';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SmartTextareaFieldDef, SmartTextareaValue, ExtractedKeywordMatch } from '../../core/types';\nimport { Loader2 } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SmartTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n\n const def = fieldDef as SmartTextareaFieldDef | undefined;\n const structured = value as SmartTextareaValue | null | undefined;\n const textValue = structured?.text ?? '';\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onSearch = useCallback(\n (query: string) => handler.onSearch(query),\n [handler],\n );\n\n const { matchedConditions, isProcessing } = useSmartKeywords(\n textValue,\n onSearch,\n def?.debounceDelay ?? 1000,\n );\n\n const currentKeywords = structured?.extractedKeywords ?? [];\n\n const nextKeywords = useMemo(() => {\n if (matchedConditions.length === 0 && currentKeywords.length === 0) return currentKeywords;\n if (\n matchedConditions.length === currentKeywords.length &&\n matchedConditions.every(\n (m, i) =>\n m.matchedCondition.id === currentKeywords[i]?.matchedCondition.id &&\n m.extractedKeyword === currentKeywords[i]?.extractedKeyword,\n )\n ) {\n return currentKeywords;\n }\n return matchedConditions;\n }, [matchedConditions, currentKeywords]);\n\n const writeValue = useCallback(\n (text: string, keywords: ExtractedKeywordMatch[]) => {\n const next: SmartTextareaValue = { text, extractedKeywords: keywords };\n setValue(next);\n },\n [setValue],\n );\n\n React.useEffect(() => {\n if (nextKeywords !== currentKeywords) {\n writeValue(textValue, nextKeywords);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nextKeywords]);\n\n const handleTextChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n writeValue(e.target.value, currentKeywords);\n },\n [writeValue, currentKeywords],\n );\n\n if (!def) return null;\n\n const height = def.height;\n const theme = getThemeConfig('textarea', def.theme);\n\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const showLabel = isLabelVisible(def);\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n {isProcessing && (\n <Loader2 className=\"inline-block ml-1.5 h-3 w-3 animate-spin text-muted-foreground\" />\n )}\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(def, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(def)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n return (\n <div\n className={fieldWrapperClass(\n def,\n wrapperClass,\n )}\n >\n {labelEl}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={handleTextChange}\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={fieldControlClass(def, inputClass)}\n aria-label={!showLabel ? def.label : undefined}\n {...(height != null ? { height } : {})}\n />\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { DiagnosisTextareaFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype DiagnosisGradeGroup = {\n condition: string;\n grades: string[];\n};\n\ntype DiagnosisGradeSelection = {\n condition: string;\n grade: string;\n};\n\ntype DiagnosisTextareaValue =\n | string\n | {\n text?: unknown;\n selectedGrade?: unknown; // legacy single-selection\n selectedGradesByCondition?: unknown; // new multi-condition single-select\n }\n | null\n | undefined;\n\ntype DiagnosisGradesArrayResponse = {\n diagnosisGrades?: Array<{\n condition?: unknown;\n grades?: unknown;\n }>;\n};\n\ntype DiagnosisMapResponse = {\n field?: unknown;\n value?: unknown;\n};\n\nfunction normalizeDiagnosisGrades(payload: unknown): DiagnosisGradeGroup[] {\n const result: DiagnosisGradeGroup[] = [];\n\n const pushGroup = (conditionRaw: unknown, gradesRaw: unknown) => {\n const condition = typeof conditionRaw === 'string' ? conditionRaw.trim() : '';\n if (!condition) return;\n if (!Array.isArray(gradesRaw)) return;\n\n const grades = Array.from(\n new Set(\n gradesRaw\n .map((grade) => (typeof grade === 'string' ? grade.trim() : ''))\n .filter(Boolean),\n ),\n );\n\n if (grades.length === 0) return;\n result.push({ condition, grades });\n };\n\n const asArrayResponse = payload as DiagnosisGradesArrayResponse;\n if (Array.isArray(asArrayResponse?.diagnosisGrades)) {\n asArrayResponse.diagnosisGrades.forEach((item) => {\n pushGroup(item?.condition, item?.grades);\n });\n return result;\n }\n\n const asMapResponse = payload as DiagnosisMapResponse;\n const mapLike =\n asMapResponse?.field === 'diagnosisgrade' && asMapResponse?.value && typeof asMapResponse.value === 'object'\n ? (asMapResponse.value as Record<string, unknown>)\n : null;\n\n if (mapLike) {\n Object.entries(mapLike).forEach(([condition, grades]) => {\n pushGroup(condition, grades);\n });\n }\n\n return result;\n}\n\nexport const DiagnosisTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n const def = fieldDef as DiagnosisTextareaFieldDef | undefined;\n\n const [gradeGroups, setGradeGroups] = React.useState<DiagnosisGradeGroup[]>([]);\n const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);\n\n const normalized = React.useMemo(() => {\n const raw = value as DiagnosisTextareaValue;\n if (typeof raw === 'string') {\n return { text: raw, selectedGradesByCondition: {} as Record<string, string> };\n }\n if (!raw || typeof raw !== 'object') {\n return { text: '', selectedGradesByCondition: {} as Record<string, string> };\n }\n\n const text = typeof (raw as any).text === 'string' ? ((raw as any).text as string) : '';\n\n // Prefer new map shape.\n const mapRaw = (raw as any).selectedGradesByCondition;\n let selectedGradesByCondition: Record<string, string> = {};\n if (mapRaw && typeof mapRaw === 'object' && !Array.isArray(mapRaw)) {\n const entries = Object.entries(mapRaw as Record<string, unknown>);\n for (const [condition, gradeRaw] of entries) {\n if (typeof condition !== 'string') continue;\n if (typeof gradeRaw === 'string' && gradeRaw.trim()) {\n selectedGradesByCondition[condition] = gradeRaw;\n }\n }\n }\n\n // Backward-compat: if legacy single selection exists and no map entry yet, seed it.\n const sg = (raw as any).selectedGrade;\n if (\n sg &&\n typeof sg === 'object' &&\n typeof (sg as any).condition === 'string' &&\n typeof (sg as any).grade === 'string'\n ) {\n const condition = (sg as any).condition.trim();\n const grade = (sg as any).grade.trim();\n if (condition && grade && !selectedGradesByCondition[condition]) {\n selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };\n }\n }\n\n return { text, selectedGradesByCondition };\n }, [value]);\n\n const textValue = normalized.text;\n const showError = !!error && (touched || state.submitAttempted);\n\n React.useEffect(() => {\n const query = textValue.trim();\n const fetchGrades = handler.onFetchDiagnosisGrades;\n const debounceMs = def?.debounceDelay ?? 1000;\n\n if (!query || !fetchGrades) {\n setGradeGroups([]);\n setIsLoadingGrades(false);\n return;\n }\n\n let isActive = true;\n const timer = window.setTimeout(async () => {\n setIsLoadingGrades(true);\n try {\n const response = await fetchGrades(query);\n if (!isActive) return;\n setGradeGroups(normalizeDiagnosisGrades(response));\n } catch {\n if (!isActive) return;\n setGradeGroups([]);\n } finally {\n if (isActive) setIsLoadingGrades(false);\n }\n }, debounceMs);\n\n return () => {\n isActive = false;\n window.clearTimeout(timer);\n };\n }, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);\n\n if (!def) return null;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const toggleSelectedGrade = (condition: string, grade: string) => {\n if (disabled) return;\n const current = normalized.selectedGradesByCondition[condition];\n const nextForCondition = current === grade ? '' : grade;\n const nextMap: Record<string, string> = { ...normalized.selectedGradesByCondition };\n if (!nextForCondition) {\n delete nextMap[condition];\n } else {\n nextMap[condition] = nextForCondition;\n }\n setValue({ text: normalized.text, selectedGradesByCondition: nextMap });\n setTouched();\n };\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const showLabel = isLabelVisible(def);\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(def, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(def)}>\n {labelContent}\n </Label>\n )\n ) : null}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) =>\n setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition })\n }\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={fieldControlClass(def, inputClass)}\n aria-label={!showLabel ? def.label : undefined}\n {...(def.height != null ? { height: def.height } : {})}\n />\n\n {isLoadingGrades && (\n <p className=\"mt-2 text-xs text-muted-foreground\">Checking diagnosis grades...</p>\n )}\n\n {!isLoadingGrades && gradeGroups.length > 0 && (\n <div\n className=\"mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3\"\n role=\"group\"\n aria-label=\"Diagnosis grade options\"\n >\n {gradeGroups.map((group) => (\n <div key={group.condition} className=\"flex flex-col gap-1.5\">\n <span className=\"text-xs font-medium leading-none text-muted-foreground\">\n {group.condition}:\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.grades.map((grade) => (\n <button\n key={`${group.condition}-${grade}`}\n type=\"button\"\n onClick={() => toggleSelectedGrade(group.condition, grade)}\n disabled={disabled}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n normalized.selectedGradesByCondition[group.condition] === grade\n ? 'border-primary bg-primary/15 text-primary shadow-sm'\n : 'border-border/80 bg-background text-foreground hover:bg-muted/80',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {grade}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SwitchProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ className, checked, onCheckedChange, disabled, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n ref={ref}\n onClick={() => {\n if (!disabled && onCheckedChange) {\n onCheckedChange(!checked);\n }\n }}\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n >\n <span\n data-state={checked ? \"checked\" : \"unchecked\"}\n className=\"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform\"\n style={{ transform: checked ? 'translateX(1rem)' : 'translateX(0)' }}\n />\n </button>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","/** OB/GYN OPD pathway: structured examination, menstrual history, antenatal, gynae, infertility, post-op. */\n\n// ─── Examination ──────────────────────────────────────────────────────────────\n\nexport type ObgExaminationGeneral = {\n pallor: boolean;\n oedema: boolean;\n thyroid: boolean;\n hirsutism: boolean;\n acanthosis: boolean;\n};\n\nexport type ObgExaminationAbdomen = {\n surgicalScars: boolean;\n massTenderness: boolean;\n};\n\nexport type ObgExaminationBreast = {\n lump: boolean;\n nippleDischarge: boolean;\n skinChanges: boolean;\n axillaryNodes: boolean;\n};\n\nexport type ObgExaminationPelvic = {\n speculumDone: boolean;\n discharge: boolean;\n cervicalErosion: boolean;\n cervicalGrowth: boolean;\n activeBleeding: boolean;\n bimanualDone: boolean;\n adnexalMass: boolean;\n cmt: boolean;\n};\n\nexport type ObgUterusSize = '' | 'Normal' | 'Bulky' | 'Enlarged';\n\nexport type ObgExaminationValue = {\n general: ObgExaminationGeneral;\n abdomen: ObgExaminationAbdomen;\n breast: ObgExaminationBreast;\n pelvic: ObgExaminationPelvic;\n uterusSize: ObgUterusSize;\n examinationNotes: string;\n};\n\nconst UTERUS_SIZES: ObgUterusSize[] = ['', 'Normal', 'Bulky', 'Enlarged'];\n\nfunction bool(x: unknown): boolean {\n return x === true;\n}\n\nfunction str(x: unknown): string {\n return typeof x === 'string' ? x : '';\n}\n\nexport function defaultObgExamination(): ObgExaminationValue {\n return {\n general: {\n pallor: false,\n oedema: false,\n thyroid: false,\n hirsutism: false,\n acanthosis: false,\n },\n abdomen: { surgicalScars: false, massTenderness: false },\n breast: { lump: false, nippleDischarge: false, skinChanges: false, axillaryNodes: false },\n pelvic: {\n speculumDone: false,\n discharge: false,\n cervicalErosion: false,\n cervicalGrowth: false,\n activeBleeding: false,\n bimanualDone: false,\n adnexalMass: false,\n cmt: false,\n },\n uterusSize: '',\n examinationNotes: '',\n };\n}\n\nexport function normalizeObgExamination(raw: unknown): ObgExaminationValue {\n const base = defaultObgExamination();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const o = raw as Record<string, unknown>;\n const g = (o.general && typeof o.general === 'object' ? o.general : {}) as Record<string, unknown>;\n const a = (o.abdomen && typeof o.abdomen === 'object' ? o.abdomen : {}) as Record<string, unknown>;\n const b = (o.breast && typeof o.breast === 'object' ? o.breast : {}) as Record<string, unknown>;\n const p = (o.pelvic && typeof o.pelvic === 'object' ? o.pelvic : {}) as Record<string, unknown>;\n const us = str(o.uterusSize) as ObgUterusSize;\n return {\n general: {\n pallor: bool(g.pallor),\n oedema: bool(g.oedema),\n thyroid: bool(g.thyroid),\n hirsutism: bool(g.hirsutism),\n acanthosis: bool(g.acanthosis),\n },\n abdomen: {\n surgicalScars: bool(a.surgicalScars),\n massTenderness: bool(a.massTenderness),\n },\n breast: {\n lump: bool(b.lump),\n nippleDischarge: bool(b.nippleDischarge),\n skinChanges: bool(b.skinChanges),\n axillaryNodes: bool(b.axillaryNodes),\n },\n pelvic: {\n speculumDone: bool(p.speculumDone),\n discharge: bool(p.discharge),\n cervicalErosion: bool(p.cervicalErosion),\n cervicalGrowth: bool(p.cervicalGrowth),\n activeBleeding: bool(p.activeBleeding),\n bimanualDone: bool(p.bimanualDone),\n adnexalMass: bool(p.adnexalMass),\n cmt: bool(p.cmt),\n },\n uterusSize: UTERUS_SIZES.includes(us) ? us : '',\n examinationNotes: str(o.examinationNotes),\n };\n}\n\nconst GENERAL_LABELS: Record<keyof ObgExaminationGeneral, string> = {\n pallor: 'Pallor',\n oedema: 'Oedema',\n thyroid: 'Thyroid',\n hirsutism: 'Hirsutism',\n acanthosis: 'Acanthosis',\n};\n\nconst ABDOMEN_LABELS: Record<keyof ObgExaminationAbdomen, string> = {\n surgicalScars: 'Surgical scars',\n massTenderness: 'Mass / tenderness',\n};\n\nconst BREAST_LABELS: Record<keyof ObgExaminationBreast, string> = {\n lump: 'Lump',\n nippleDischarge: 'Nipple discharge',\n skinChanges: 'Skin changes',\n axillaryNodes: 'Axillary nodes',\n};\n\nconst PELVIC_LABELS: Record<keyof ObgExaminationPelvic, string> = {\n speculumDone: 'Speculum done',\n discharge: 'Discharge',\n cervicalErosion: 'Cervical erosion',\n cervicalGrowth: 'Cervical growth',\n activeBleeding: 'Active bleeding',\n bimanualDone: 'Bimanual done',\n adnexalMass: 'Adnexal mass',\n cmt: 'Cervical motion tenderness',\n};\n\nfunction pickLabels<T extends Record<string, boolean>>(\n group: T,\n labels: Record<keyof T, string>,\n): string[] {\n return (Object.keys(labels) as Array<keyof T>).filter((k) => group[k]).map((k) => labels[k]);\n}\n\nexport function formatObgExaminationToClinicalExamination(v: ObgExaminationValue): string {\n const lines: string[] = [];\n const general = pickLabels(v.general, GENERAL_LABELS);\n if (general.length) lines.push(`General: ${general.join(', ')}`);\n\n const abd = pickLabels(v.abdomen, ABDOMEN_LABELS);\n if (abd.length) lines.push(`Abdomen: ${abd.join(', ')}`);\n\n const breast = pickLabels(v.breast, BREAST_LABELS);\n if (breast.length) lines.push(`Breast: ${breast.join(', ')}`);\n\n const pelvic = pickLabels(v.pelvic, PELVIC_LABELS);\n let pelvicLine = pelvic.length ? `Pelvic: ${pelvic.join(', ')}` : '';\n if (v.pelvic.bimanualDone && v.uterusSize) {\n pelvicLine = pelvicLine\n ? `${pelvicLine} — uterus ${v.uterusSize.toLowerCase()}`\n : `Pelvic: uterus ${v.uterusSize.toLowerCase()}`;\n }\n if (pelvicLine) lines.push(pelvicLine);\n\n return lines.join('\\n');\n}\n\nconst UTERUS_CHIP_LABELS: Record<Exclude<ObgUterusSize, ''>, string> = {\n Normal: 'Uterus normal',\n Bulky: 'Uterus bulky',\n Enlarged: 'Uterus enlarged',\n};\n\ntype ExamChipInfo =\n | { kind: 'general'; key: keyof ObgExaminationGeneral }\n | { kind: 'abdomen'; key: keyof ObgExaminationAbdomen }\n | { kind: 'breast'; key: keyof ObgExaminationBreast }\n | { kind: 'pelvic'; key: keyof ObgExaminationPelvic }\n | { kind: 'uterus'; size: Exclude<ObgUterusSize, ''> };\n\nconst OBG_EXAM_LABEL_TO_INFO: Record<string, ExamChipInfo> = (() => {\n const m: Record<string, ExamChipInfo> = {};\n (Object.keys(GENERAL_LABELS) as Array<keyof ObgExaminationGeneral>).forEach((k) => {\n m[GENERAL_LABELS[k]] = { kind: 'general', key: k };\n });\n (Object.keys(ABDOMEN_LABELS) as Array<keyof ObgExaminationAbdomen>).forEach((k) => {\n m[ABDOMEN_LABELS[k]] = { kind: 'abdomen', key: k };\n });\n (Object.keys(BREAST_LABELS) as Array<keyof ObgExaminationBreast>).forEach((k) => {\n m[BREAST_LABELS[k]] = { kind: 'breast', key: k };\n });\n (Object.keys(PELVIC_LABELS) as Array<keyof ObgExaminationPelvic>).forEach((k) => {\n m[PELVIC_LABELS[k]] = { kind: 'pelvic', key: k };\n });\n (Object.keys(UTERUS_CHIP_LABELS) as Array<Exclude<ObgUterusSize, ''>>).forEach((s) => {\n m[UTERUS_CHIP_LABELS[s]] = { kind: 'uterus', size: s };\n });\n return m;\n})();\n\nexport const OBG_EXAM_ALLOWED_CHIP_LABELS: ReadonlySet<string> = new Set(\n Object.keys(OBG_EXAM_LABEL_TO_INFO),\n);\n\nexport function obgExaminationChipLabels(v: ObgExaminationValue): string[] {\n const out: string[] = [];\n (Object.keys(GENERAL_LABELS) as Array<keyof ObgExaminationGeneral>).forEach((k) => {\n if (v.general[k]) out.push(GENERAL_LABELS[k]);\n });\n (Object.keys(ABDOMEN_LABELS) as Array<keyof ObgExaminationAbdomen>).forEach((k) => {\n if (v.abdomen[k]) out.push(ABDOMEN_LABELS[k]);\n });\n (Object.keys(BREAST_LABELS) as Array<keyof ObgExaminationBreast>).forEach((k) => {\n if (v.breast[k]) out.push(BREAST_LABELS[k]);\n });\n (Object.keys(PELVIC_LABELS) as Array<keyof ObgExaminationPelvic>).forEach((k) => {\n if (v.pelvic[k]) out.push(PELVIC_LABELS[k]);\n });\n if (v.pelvic.bimanualDone && v.uterusSize) {\n out.push(UTERUS_CHIP_LABELS[v.uterusSize]);\n }\n return out;\n}\n\n/** Rebuild a structured exam value from a list of chip labels (others reset). `examinationNotes` is preserved by the caller. */\nexport function obgExaminationFromChipLabels(\n labels: ReadonlyArray<string>,\n prevNotes = '',\n): ObgExaminationValue {\n const out = defaultObgExamination();\n out.examinationNotes = prevNotes;\n for (const raw of labels) {\n const info = OBG_EXAM_LABEL_TO_INFO[raw];\n if (!info) continue;\n switch (info.kind) {\n case 'general':\n out.general[info.key] = true;\n break;\n case 'abdomen':\n out.abdomen[info.key] = true;\n break;\n case 'breast':\n out.breast[info.key] = true;\n break;\n case 'pelvic':\n out.pelvic[info.key] = true;\n break;\n case 'uterus':\n out.pelvic.bimanualDone = true;\n out.uterusSize = info.size;\n break;\n }\n }\n return out;\n}\n\n// ─── Pathway / Consultant zone ────────────────────────────────────────────────\n\nexport type ObgZone =\n | 'menstrual_reproductive'\n | 'antenatal'\n | 'gynaecological'\n | 'infertility'\n | 'postoperative';\n\nexport const OBG_ZONE_ORDER: readonly ObgZone[] = [\n 'menstrual_reproductive',\n 'antenatal',\n 'gynaecological',\n 'infertility',\n 'postoperative',\n];\n\nconst OBG_ZONE_SET = new Set<string>(OBG_ZONE_ORDER);\n\nexport type ObgMenstrual = {\n menarcheAge: number;\n cycleLength: number;\n flowDays: number;\n cycleRegular: boolean;\n /** 0 = none, 1 = mild, 2 = moderate, 3 = severe. */\n dysmenorrhea: 0 | 1 | 2 | 3;\n amount: '' | 'Scanty' | 'Normal' | 'Heavy';\n lmp: string;\n menopauseStatus: '' | 'Pre' | 'Peri' | 'Post';\n};\n\nexport type ObgAntenatal = {\n gravida: number;\n gaWeeksLmp: number;\n gaDaysLmp: number;\n gaWeeksUsg: number;\n gaDaysUsg: number;\n edd: string;\n riskCategory: '' | 'Low' | 'High';\n symptoms: {\n nauseaVomiting: boolean;\n bleedingPV: boolean;\n painAbdomen: boolean;\n decreasedFetalMovements: boolean;\n };\n exam: {\n weightKg: number;\n heightCm: number;\n bmi: number;\n bp: string;\n pallor: boolean;\n oedema: boolean;\n fundalHeightCm: number;\n fhrBpm: number;\n presentation: '' | 'Cephalic' | 'Breech' | 'Other';\n lie: '' | 'Longitudinal' | 'Transverse' | 'Oblique';\n };\n investigations: {\n bloodGroup: string;\n cbc: '' | 'Done' | 'Pending' | 'Abnormal';\n tsh: '' | 'Done' | 'Pending' | 'Abnormal';\n rbsOgtt: '' | 'Done' | 'Pending' | 'Abnormal';\n serology: '' | 'Done' | 'Pending' | 'Abnormal'; // HIV/HBsAg/VDRL\n urine: '' | 'Done' | 'Pending' | 'Abnormal';\n usg: '' | 'Dating' | 'NT' | 'Anomaly' | 'Growth' | 'Pending';\n };\n};\n\nexport type ObgGynae = {\n symptoms: {\n aub: boolean;\n whiteDischarge: boolean;\n pelvicPain: boolean;\n dyspareunia: boolean;\n urinaryComplaints: boolean;\n prolapse: boolean;\n };\n};\n\nexport type ObgInfertility = {\n type: '' | 'Primary' | 'Secondary';\n durationMonths: number;\n previousTreatments: string;\n female: {\n ovulation: '' | 'Ovulatory' | 'Anovulatory' | 'Unknown';\n pcosFeatures: boolean;\n endometriosisSuspicion: boolean;\n };\n male: {\n age: number;\n semenAnalysis: '' | 'Normal' | 'Abnormal' | 'Pending';\n };\n investigations: {\n amh: string;\n fshLh: string;\n prolactin: string;\n tsh: string;\n tvs: string;\n hsg: string;\n };\n};\n\nexport type ObgPostOp = {\n surgeryDate: string;\n procedure: string;\n histopathology: string;\n woundStatus: '' | 'Healthy' | 'Erythema' | 'Discharge' | 'Dehisced';\n painScore: number;\n complications: string;\n};\n\nexport type ObgPathwayValue = {\n /** Selected primary concerns (chips); empty array = none chosen yet. */\n zones: ObgZone[];\n menstrual: ObgMenstrual;\n antenatal: ObgAntenatal;\n gynae: ObgGynae;\n infertility: ObgInfertility;\n postop: ObgPostOp;\n};\n\nfunction coerceZones(raw: unknown): ObgZone[] {\n const list: ObgZone[] = [];\n const push = (x: unknown) => {\n if (typeof x === 'string' && OBG_ZONE_SET.has(x) && !list.includes(x as ObgZone)) {\n list.push(x as ObgZone);\n }\n };\n if (Array.isArray(raw)) raw.forEach(push);\n else push(raw);\n return list.sort((a, b) => OBG_ZONE_ORDER.indexOf(a) - OBG_ZONE_ORDER.indexOf(b));\n}\n\nfunction num(x: unknown, fallback = 0): number {\n const n = Number(x);\n return Number.isFinite(n) ? n : fallback;\n}\n\nfunction clampDysmenorrhea(x: unknown): 0 | 1 | 2 | 3 {\n const n = Math.round(num(x, 0));\n if (n <= 0) return 0;\n if (n >= 3) return 3;\n return n as 1 | 2;\n}\n\nexport function defaultObgPathway(): ObgPathwayValue {\n return {\n zones: [],\n menstrual: {\n menarcheAge: 13,\n cycleLength: 28,\n flowDays: 4,\n cycleRegular: true,\n dysmenorrhea: 0,\n amount: '',\n lmp: '',\n menopauseStatus: '',\n },\n antenatal: {\n gravida: 0,\n gaWeeksLmp: 0,\n gaDaysLmp: 0,\n gaWeeksUsg: 0,\n gaDaysUsg: 0,\n edd: '',\n riskCategory: '',\n symptoms: {\n nauseaVomiting: false,\n bleedingPV: false,\n painAbdomen: false,\n decreasedFetalMovements: false,\n },\n exam: {\n weightKg: 0,\n heightCm: 0,\n bmi: 0,\n bp: '',\n pallor: false,\n oedema: false,\n fundalHeightCm: 0,\n fhrBpm: 0,\n presentation: '',\n lie: '',\n },\n investigations: {\n bloodGroup: '',\n cbc: '',\n tsh: '',\n rbsOgtt: '',\n serology: '',\n urine: '',\n usg: '',\n },\n },\n gynae: {\n symptoms: {\n aub: false,\n whiteDischarge: false,\n pelvicPain: false,\n dyspareunia: false,\n urinaryComplaints: false,\n prolapse: false,\n },\n },\n infertility: {\n type: '',\n durationMonths: 0,\n previousTreatments: '',\n female: { ovulation: '', pcosFeatures: false, endometriosisSuspicion: false },\n male: { age: 0, semenAnalysis: '' },\n investigations: { amh: '', fshLh: '', prolactin: '', tsh: '', tvs: '', hsg: '' },\n },\n postop: {\n surgeryDate: '',\n procedure: '',\n histopathology: '',\n woundStatus: '',\n painScore: 0,\n complications: '',\n },\n };\n}\n\nexport function normalizeObgPathway(raw: unknown): ObgPathwayValue {\n const base = defaultObgPathway();\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const o = raw as Record<string, unknown>;\n\n // Accept new array shape, legacy single-string `zone`, or hidden chip mirror.\n const zones = coerceZones(o.zones ?? o.zone);\n\n const m = (o.menstrual && typeof o.menstrual === 'object' ? o.menstrual : {}) as Record<string, unknown>;\n const a = (o.antenatal && typeof o.antenatal === 'object' ? o.antenatal : {}) as Record<string, unknown>;\n const aSym = (a.symptoms && typeof a.symptoms === 'object' ? a.symptoms : {}) as Record<string, unknown>;\n const aExam = (a.exam && typeof a.exam === 'object' ? a.exam : {}) as Record<string, unknown>;\n const aInv = (a.investigations && typeof a.investigations === 'object' ? a.investigations : {}) as Record<string, unknown>;\n const g = (o.gynae && typeof o.gynae === 'object' ? o.gynae : {}) as Record<string, unknown>;\n const gSym = (g.symptoms && typeof g.symptoms === 'object' ? g.symptoms : {}) as Record<string, unknown>;\n const inf = (o.infertility && typeof o.infertility === 'object' ? o.infertility : {}) as Record<string, unknown>;\n const infF = (inf.female && typeof inf.female === 'object' ? inf.female : {}) as Record<string, unknown>;\n const infM = (inf.male && typeof inf.male === 'object' ? inf.male : {}) as Record<string, unknown>;\n const infInv = (inf.investigations && typeof inf.investigations === 'object' ? inf.investigations : {}) as Record<string, unknown>;\n const po = (o.postop && typeof o.postop === 'object' ? o.postop : {}) as Record<string, unknown>;\n\n return {\n zones,\n menstrual: {\n menarcheAge: num(m.menarcheAge, base.menstrual.menarcheAge),\n cycleLength: num(m.cycleLength, base.menstrual.cycleLength),\n flowDays: num(m.flowDays, base.menstrual.flowDays),\n cycleRegular: m.cycleRegular === undefined ? base.menstrual.cycleRegular : bool(m.cycleRegular),\n dysmenorrhea: clampDysmenorrhea(m.dysmenorrhea),\n amount: ['', 'Scanty', 'Normal', 'Heavy'].includes(str(m.amount))\n ? (str(m.amount) as ObgMenstrual['amount'])\n : '',\n lmp: str(m.lmp),\n menopauseStatus: ['', 'Pre', 'Peri', 'Post'].includes(str(m.menopauseStatus))\n ? (str(m.menopauseStatus) as ObgMenstrual['menopauseStatus'])\n : '',\n },\n antenatal: {\n gravida: num(a.gravida),\n gaWeeksLmp: num(a.gaWeeksLmp),\n gaDaysLmp: num(a.gaDaysLmp),\n gaWeeksUsg: num(a.gaWeeksUsg),\n gaDaysUsg: num(a.gaDaysUsg),\n edd: str(a.edd),\n riskCategory: ['', 'Low', 'High'].includes(str(a.riskCategory))\n ? (str(a.riskCategory) as ObgAntenatal['riskCategory'])\n : '',\n symptoms: {\n nauseaVomiting: bool(aSym.nauseaVomiting),\n bleedingPV: bool(aSym.bleedingPV),\n painAbdomen: bool(aSym.painAbdomen),\n decreasedFetalMovements: bool(aSym.decreasedFetalMovements),\n },\n exam: {\n weightKg: num(aExam.weightKg),\n heightCm: num(aExam.heightCm),\n bmi: num(aExam.bmi),\n bp: str(aExam.bp),\n pallor: bool(aExam.pallor),\n oedema: bool(aExam.oedema),\n fundalHeightCm: num(aExam.fundalHeightCm),\n fhrBpm: num(aExam.fhrBpm),\n presentation: ['', 'Cephalic', 'Breech', 'Other'].includes(str(aExam.presentation))\n ? (str(aExam.presentation) as ObgAntenatal['exam']['presentation'])\n : '',\n lie: ['', 'Longitudinal', 'Transverse', 'Oblique'].includes(str(aExam.lie))\n ? (str(aExam.lie) as ObgAntenatal['exam']['lie'])\n : '',\n },\n investigations: {\n bloodGroup: str(aInv.bloodGroup),\n cbc: ['', 'Done', 'Pending', 'Abnormal'].includes(str(aInv.cbc))\n ? (str(aInv.cbc) as ObgAntenatal['investigations']['cbc'])\n : '',\n tsh: ['', 'Done', 'Pending', 'Abnormal'].includes(str(aInv.tsh))\n ? (str(aInv.tsh) as ObgAntenatal['investigations']['tsh'])\n : '',\n rbsOgtt: ['', 'Done', 'Pending', 'Abnormal'].includes(str(aInv.rbsOgtt))\n ? (str(aInv.rbsOgtt) as ObgAntenatal['investigations']['rbsOgtt'])\n : '',\n serology: ['', 'Done', 'Pending', 'Abnormal'].includes(str(aInv.serology))\n ? (str(aInv.serology) as ObgAntenatal['investigations']['serology'])\n : '',\n urine: ['', 'Done', 'Pending', 'Abnormal'].includes(str(aInv.urine))\n ? (str(aInv.urine) as ObgAntenatal['investigations']['urine'])\n : '',\n usg: ['', 'Dating', 'NT', 'Anomaly', 'Growth', 'Pending'].includes(str(aInv.usg))\n ? (str(aInv.usg) as ObgAntenatal['investigations']['usg'])\n : '',\n },\n },\n gynae: {\n symptoms: {\n aub: bool(gSym.aub),\n whiteDischarge: bool(gSym.whiteDischarge),\n pelvicPain: bool(gSym.pelvicPain),\n dyspareunia: bool(gSym.dyspareunia),\n urinaryComplaints: bool(gSym.urinaryComplaints),\n prolapse: bool(gSym.prolapse),\n },\n },\n infertility: {\n type: ['', 'Primary', 'Secondary'].includes(str(inf.type))\n ? (str(inf.type) as ObgInfertility['type'])\n : '',\n durationMonths: num(inf.durationMonths),\n previousTreatments: str(inf.previousTreatments),\n female: {\n ovulation: ['', 'Ovulatory', 'Anovulatory', 'Unknown'].includes(str(infF.ovulation))\n ? (str(infF.ovulation) as ObgInfertility['female']['ovulation'])\n : '',\n pcosFeatures: bool(infF.pcosFeatures),\n endometriosisSuspicion: bool(infF.endometriosisSuspicion),\n },\n male: {\n age: num(infM.age),\n semenAnalysis: ['', 'Normal', 'Abnormal', 'Pending'].includes(str(infM.semenAnalysis))\n ? (str(infM.semenAnalysis) as ObgInfertility['male']['semenAnalysis'])\n : '',\n },\n investigations: {\n amh: str(infInv.amh),\n fshLh: str(infInv.fshLh),\n prolactin: str(infInv.prolactin),\n tsh: str(infInv.tsh),\n tvs: str(infInv.tvs),\n hsg: str(infInv.hsg),\n },\n },\n postop: {\n surgeryDate: str(po.surgeryDate),\n procedure: str(po.procedure),\n histopathology: str(po.histopathology),\n woundStatus: ['', 'Healthy', 'Erythema', 'Discharge', 'Dehisced'].includes(str(po.woundStatus))\n ? (str(po.woundStatus) as ObgPostOp['woundStatus'])\n : '',\n painScore: Math.max(0, Math.min(10, num(po.painScore))),\n complications: str(po.complications),\n },\n };\n}\n\nconst ZONE_LABELS: Record<ObgZone, string> = {\n menstrual_reproductive: 'Menstrual & reproductive',\n antenatal: 'Antenatal',\n gynaecological: 'Gynaecological',\n infertility: 'Infertility',\n postoperative: 'Post-operative',\n};\n\nexport function obgZoneLabel(zone: ObgZone): string {\n return ZONE_LABELS[zone];\n}\n\nfunction nonEmpty(parts: Array<string | undefined | null>): string[] {\n return parts.map((s) => (s ?? '').trim()).filter(Boolean);\n}\n\nfunction formatMenstrualBlock(m: ObgMenstrual): string {\n const bits = nonEmpty([\n m.menarcheAge ? `menarche ${m.menarcheAge}y` : '',\n m.cycleLength ? `cycle ${m.cycleLength}d` : '',\n m.flowDays ? `flow ${m.flowDays}d` : '',\n m.cycleRegular ? 'regular' : 'irregular',\n m.amount ? `flow ${m.amount.toLowerCase()}` : '',\n m.dysmenorrhea ? `dysmenorrhea grade ${m.dysmenorrhea}` : '',\n m.lmp ? `LMP ${m.lmp}` : '',\n m.menopauseStatus ? `${m.menopauseStatus.toLowerCase()}menopausal` : '',\n ]);\n return bits.length ? `Menstrual: ${bits.join(', ')}` : '';\n}\n\nfunction formatAntenatalBlock(a: ObgAntenatal): string {\n const lines: string[] = [];\n\n const head = nonEmpty([\n a.gravida ? `G${a.gravida}` : '',\n a.gaWeeksLmp || a.gaDaysLmp ? `GA(LMP) ${a.gaWeeksLmp}w ${a.gaDaysLmp}d` : '',\n a.gaWeeksUsg || a.gaDaysUsg ? `GA(USG) ${a.gaWeeksUsg}w ${a.gaDaysUsg}d` : '',\n a.edd ? `EDD ${a.edd}` : '',\n a.riskCategory ? `${a.riskCategory} risk` : '',\n ]);\n if (head.length) lines.push(`Antenatal: ${head.join(', ')}`);\n\n const sym = nonEmpty([\n a.symptoms.nauseaVomiting ? 'nausea/vomiting' : '',\n a.symptoms.bleedingPV ? 'bleeding PV' : '',\n a.symptoms.painAbdomen ? 'pain abdomen' : '',\n a.symptoms.decreasedFetalMovements ? 'decreased fetal movements' : '',\n ]);\n if (sym.length) lines.push(`Antenatal symptoms: ${sym.join(', ')}`);\n\n const exam = nonEmpty([\n a.exam.weightKg ? `wt ${a.exam.weightKg}kg` : '',\n a.exam.heightCm ? `ht ${a.exam.heightCm}cm` : '',\n a.exam.bmi ? `BMI ${a.exam.bmi}` : '',\n a.exam.bp ? `BP ${a.exam.bp}` : '',\n a.exam.pallor ? 'pallor' : '',\n a.exam.oedema ? 'oedema' : '',\n a.exam.fundalHeightCm ? `fundal ht ${a.exam.fundalHeightCm}cm` : '',\n a.exam.fhrBpm ? `FHR ${a.exam.fhrBpm}bpm` : '',\n a.exam.presentation ? a.exam.presentation.toLowerCase() : '',\n a.exam.lie ? `${a.exam.lie.toLowerCase()} lie` : '',\n ]);\n if (exam.length) lines.push(`Antenatal exam: ${exam.join(', ')}`);\n\n const i = a.investigations;\n const inv = nonEmpty([\n i.bloodGroup ? `BG ${i.bloodGroup}` : '',\n i.cbc ? `CBC ${i.cbc.toLowerCase()}` : '',\n i.tsh ? `TSH ${i.tsh.toLowerCase()}` : '',\n i.rbsOgtt ? `RBS/OGTT ${i.rbsOgtt.toLowerCase()}` : '',\n i.serology ? `serology ${i.serology.toLowerCase()}` : '',\n i.urine ? `urine ${i.urine.toLowerCase()}` : '',\n i.usg ? `USG ${i.usg.toLowerCase()}` : '',\n ]);\n if (inv.length) lines.push(`Antenatal Ix: ${inv.join(', ')}`);\n\n return lines.join('\\n');\n}\n\nfunction formatGynaeBlock(g: ObgGynae): string {\n const sym = nonEmpty([\n g.symptoms.aub ? 'AUB' : '',\n g.symptoms.whiteDischarge ? 'white discharge' : '',\n g.symptoms.pelvicPain ? 'pelvic pain' : '',\n g.symptoms.dyspareunia ? 'dyspareunia' : '',\n g.symptoms.urinaryComplaints ? 'urinary complaints' : '',\n g.symptoms.prolapse ? 'prolapse' : '',\n ]);\n return sym.length ? `Gynae symptoms: ${sym.join(', ')}` : '';\n}\n\nfunction formatInfertilityBlock(i: ObgInfertility): string {\n const bits = nonEmpty([\n i.type ? `${i.type} infertility` : '',\n i.durationMonths ? `${i.durationMonths} months` : '',\n i.female.pcosFeatures ? 'PCOS features' : '',\n i.female.endometriosisSuspicion ? 'endometriosis suspicion' : '',\n i.female.ovulation ? `ovulation: ${i.female.ovulation}` : '',\n i.male.semenAnalysis ? `semen: ${i.male.semenAnalysis}` : '',\n ]);\n return bits.length ? `Infertility: ${bits.join(', ')}` : '';\n}\n\nfunction formatPostOpBlock(p: ObgPostOp): string {\n const bits = nonEmpty([\n p.surgeryDate ? `op ${p.surgeryDate}` : '',\n p.procedure || '',\n p.woundStatus ? `wound ${p.woundStatus.toLowerCase()}` : '',\n p.painScore ? `pain ${p.painScore}/10` : '',\n p.complications ? `complications: ${p.complications}` : '',\n ]);\n return bits.length ? `Post-op: ${bits.join(', ')}` : '';\n}\n\nconst ZONE_FORMATTERS: Record<ObgZone, (v: ObgPathwayValue) => string> = {\n menstrual_reproductive: (v) => formatMenstrualBlock(v.menstrual),\n antenatal: (v) => formatAntenatalBlock(v.antenatal),\n gynaecological: (v) => formatGynaeBlock(v.gynae),\n infertility: (v) => formatInfertilityBlock(v.infertility),\n postoperative: (v) => formatPostOpBlock(v.postop),\n};\n\nexport function formatObgPathwayToSymptomsNarrative(v: ObgPathwayValue): string {\n if (!v.zones.length) return '';\n const sections: string[] = [`Pathway: ${v.zones.map(obgZoneLabel).join(', ')}`];\n for (const z of v.zones) {\n const block = ZONE_FORMATTERS[z](v).trim();\n if (block) sections.push(block);\n }\n return sections.join('\\n\\n');\n}\n\n/** Pathway prose without the `Pathway: …` header (which is mirrored as chip tokens). */\nexport function formatObgPathwayProse(v: ObgPathwayValue): string {\n if (!v.zones.length) return '';\n const blocks: string[] = [];\n for (const z of v.zones) {\n const block = ZONE_FORMATTERS[z](v).trim();\n if (block) blocks.push(block);\n }\n return blocks.join('\\n\\n');\n}\n\nconst OBG_ZONE_LABEL_TO_ZONE: Record<string, ObgZone> = (() => {\n const m: Record<string, ObgZone> = {};\n for (const z of OBG_ZONE_ORDER) m[obgZoneLabel(z)] = z;\n return m;\n})();\n\nexport const OBG_ZONE_ALLOWED_CHIP_LABELS: ReadonlySet<string> = new Set(\n Object.keys(OBG_ZONE_LABEL_TO_ZONE),\n);\n\nexport function obgZonesFromChipLabels(labels: ReadonlyArray<string>): ObgZone[] {\n const out: ObgZone[] = [];\n const seen = new Set<ObgZone>();\n for (const raw of labels) {\n const z = OBG_ZONE_LABEL_TO_ZONE[raw];\n if (!z || seen.has(z)) continue;\n seen.add(z);\n out.push(z);\n }\n return out.sort((a, b) => OBG_ZONE_ORDER.indexOf(a) - OBG_ZONE_ORDER.indexOf(b));\n}\n","import React from 'react';\nimport { cn } from '../../core/utils';\n\nexport function Panel({\n title,\n right,\n children,\n}: {\n title: string;\n right?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"flex items-center justify-between border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5\">\n <span className=\"text-xs font-semibold text-slate-700\">{title}</span>\n {right}\n </div>\n <div className=\"p-3 text-xs\">{children}</div>\n </div>\n );\n}\n\nexport function ChipRow({\n options,\n selected,\n onToggle,\n disabled,\n}: {\n options: { key: string; label: string }[];\n selected: Record<string, boolean>;\n onToggle: (key: string) => void;\n disabled?: boolean;\n}) {\n return (\n <div className=\"flex flex-wrap gap-2\">\n {options.map((o) => {\n const on = !!selected[o.key];\n return (\n <button\n key={o.key}\n type=\"button\"\n onClick={() => onToggle(o.key)}\n disabled={disabled}\n className={cn(\n 'rounded-full border px-3 py-1 text-[11px] transition-colors',\n on\n ? 'border-rose-500 bg-rose-50 text-rose-700'\n : 'border-slate-300 bg-white text-slate-600 hover:bg-slate-50',\n )}\n >\n {o.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useField } from '../../react/useField';\nimport {\n formatObgPathwayProse,\n obgZoneLabel,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n type ObgPathwayValue,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst SYMPTOMS_FIELD = 'symptoms';\n\n/**\n * Mirror an OBG pathway value into the `symptoms` (HOPC) textarea as\n * prose + chips. Multiple widgets (OBGPathwayWidget, AntenatalPanels) write\n * through this hook simultaneously, so the \"is current prose user-owned?\"\n * check is stateless: we compare the current prose against the prose that\n * the *previous* pathway value would have generated. If they match, the\n * textarea is still auto-owned and may be refreshed; otherwise the user has\n * edited prose and we preserve it (only the chip line is kept in sync).\n *\n * Because `formatObgPathwayProse` is deterministic, this approach is\n * correct across multiple writers and across remounts without any shared\n * ref — a previous `lastAutoProseRef`-based design fought itself when\n * OBGPathwayWidget and AntenatalPanels both wrote on the same tick.\n */\nexport function useObgSymptomsSync() {\n const symptomsField = useField(SYMPTOMS_FIELD);\n\n const writeSymptoms = (\n prev: ObgPathwayValue,\n next: ObgPathwayValue,\n overrideProse?: string,\n ) => {\n if (symptomsField.disabled) return;\n const cur =\n typeof symptomsField.value === 'string' ? symptomsField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(\n cur,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n );\n\n const prevProse = formatObgPathwayProse(prev);\n const generatedProse = formatObgPathwayProse(next);\n const isAutoOwned = curProse === '' || curProse === prevProse;\n\n const proseInput =\n overrideProse !== undefined\n ? overrideProse\n : isAutoOwned\n ? generatedProse\n : curProse;\n\n const chipLabels = next.zones.map(obgZoneLabel);\n const composed = composeProseAndChips(proseInput, chipLabels);\n if (composed !== cur) symptomsField.setValue(composed);\n };\n\n return { writeSymptoms, symptomsField };\n}\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Input } from '../shadcn/input';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport {\n normalizeObgPathway,\n type ObgAntenatal,\n type ObgPathwayValue,\n} from '../../core/obgPathway';\nimport { ChipRow, Panel } from './_obgPanels';\nimport { useObgSymptomsSync } from './_obgSymptomsSync';\n\nconst OBG_PATHWAY_FIELD = 'obg_pathway';\n\n/**\n * Antenatal-specific panels (current pregnancy, symptoms, examination,\n * investigations) that live on the `obg_pathway` field but render under the\n * Obstetric-history widget when the antenatal zone is active. Designed to be\n * embedded into ObstetricHistoryWidget so that pregnancy-related capture lives\n * in one visual block.\n *\n * The component mirrors the antenatal subtree of `obg_pathway` into local\n * state so inputs update immediately on keystroke, even though `useField`'s\n * external-store subscription can lag re-renders for sibling components in\n * React 18 concurrent mode. Writes flow through to the form store on the same\n * tick.\n */\nexport const AntenatalPanels: React.FC = () => {\n const pathwayField = useField(OBG_PATHWAY_FIELD);\n const { writeSymptoms } = useObgSymptomsSync();\n\n // If the form has no obg_pathway field (non-OBG templates), render nothing.\n const hasField = !!pathwayField.fieldDef;\n\n const safe = useMemo<ObgPathwayValue>(\n () => normalizeObgPathway(pathwayField.value),\n [pathwayField.value],\n );\n\n // Local mirror of the antenatal subtree. Inputs read from this; writes both\n // update local state (for an instant re-render) and the form store.\n const [ant, setAnt] = useState<ObgAntenatal>(() => safe.antenatal);\n\n // Track the last antenatal we wrote to the store so we can ignore the\n // resulting \"echo\" snapshot from the subscription and only resync local\n // state when the antenatal subtree changes from outside (AI prefill, reset,\n // chip toggle that only changes zones, …).\n const lastWrittenRef = useRef<ObgAntenatal>(safe.antenatal);\n\n useEffect(() => {\n if (safe.antenatal === lastWrittenRef.current) return;\n if (JSON.stringify(safe.antenatal) === JSON.stringify(lastWrittenRef.current)) return;\n setAnt(safe.antenatal);\n lastWrittenRef.current = safe.antenatal;\n }, [safe.antenatal]);\n\n if (!hasField) return null;\n if (!safe.zones.includes('antenatal')) return null;\n\n const disabled = pathwayField.disabled;\n\n const commit = (nextAnt: ObgAntenatal) => {\n // Build `prev` from local `ant` (always up-to-date with our last commit)\n // rather than `safe` (which can lag if the field-store subscription hasn't\n // propagated yet). This keeps the prev/next prose check correct across\n // rapid keystrokes so HOPC stays in sync without ever mis-classifying our\n // own previous auto-write as user-typed prose.\n const prev: ObgPathwayValue = { ...safe, antenatal: ant };\n const nextPathway: ObgPathwayValue = { ...safe, antenatal: nextAnt };\n setAnt(nextAnt);\n lastWrittenRef.current = nextAnt;\n pathwayField.setValue(nextPathway);\n pathwayField.setTouched();\n writeSymptoms(prev, nextPathway);\n };\n\n const a = ant;\n const setAntenatal = (patch: Partial<ObgAntenatal>) => commit({ ...a, ...patch });\n const setAntenatalSymptom = (key: keyof ObgAntenatal['symptoms']) =>\n commit({ ...a, symptoms: { ...a.symptoms, [key]: !a.symptoms[key] } });\n const setAntenatalExam = (patch: Partial<ObgAntenatal['exam']>) =>\n commit({ ...a, exam: { ...a.exam, ...patch } });\n const setAntenatalInv = (patch: Partial<ObgAntenatal['investigations']>) =>\n commit({ ...a, investigations: { ...a.investigations, ...patch } });\n\n return (\n <div className=\"space-y-3 text-xs\">\n <Panel title=\"Current pregnancy details\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Gravida</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={a.gravida}\n onChange={(e) => setAntenatal({ gravida: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <div className=\"space-y-1\">\n <span className=\"block font-medium\">GA (LMP) — w / d</span>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={0}\n max={45}\n className=\"h-8 text-xs\"\n value={a.gaWeeksLmp}\n onChange={(e) => setAntenatal({ gaWeeksLmp: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">w</span>\n <Input\n type=\"number\"\n min={0}\n max={6}\n className=\"h-8 text-xs\"\n value={a.gaDaysLmp}\n onChange={(e) => setAntenatal({ gaDaysLmp: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">d</span>\n </div>\n </div>\n <div className=\"space-y-1\">\n <span className=\"block font-medium\">GA (USG) — w / d</span>\n <div className=\"flex items-center gap-1\">\n <Input\n type=\"number\"\n min={0}\n max={45}\n className=\"h-8 text-xs\"\n value={a.gaWeeksUsg}\n onChange={(e) => setAntenatal({ gaWeeksUsg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">w</span>\n <Input\n type=\"number\"\n min={0}\n max={6}\n className=\"h-8 text-xs\"\n value={a.gaDaysUsg}\n onChange={(e) => setAntenatal({ gaDaysUsg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n <span className=\"text-[10px] text-muted-foreground\">d</span>\n </div>\n </div>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">EDD</span>\n <Input\n type=\"date\"\n className=\"h-8 text-xs\"\n value={a.edd}\n onChange={(e) => setAntenatal({ edd: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-2\">\n <span className=\"block font-medium\">Risk category</span>\n <Select\n value={a.riskCategory === '' ? 'none' : a.riskCategory}\n onValueChange={(v) =>\n setAntenatal({\n riskCategory: v === 'none' ? '' : (v as typeof a.riskCategory),\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Low\">Low</SelectItem>\n <SelectItem value=\"High\">High</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Antenatal symptoms\">\n <ChipRow\n options={[\n { key: 'nauseaVomiting', label: 'Nausea / vomiting' },\n { key: 'bleedingPV', label: 'Bleeding PV' },\n { key: 'painAbdomen', label: 'Pain abdomen' },\n { key: 'decreasedFetalMovements', label: 'Decreased fetal movements' },\n ]}\n selected={a.symptoms as unknown as Record<string, boolean>}\n onToggle={(k) => setAntenatalSymptom(k as keyof typeof a.symptoms)}\n disabled={disabled}\n />\n </Panel>\n\n <Panel title=\"Antenatal examination\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Weight (kg)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.weightKg}\n onChange={(e) => setAntenatalExam({ weightKg: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Height (cm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.heightCm}\n onChange={(e) => setAntenatalExam({ heightCm: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">BMI</span>\n <Input\n type=\"number\"\n step={0.1}\n className=\"h-8 text-xs\"\n value={a.exam.bmi}\n onChange={(e) => setAntenatalExam({ bmi: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">BP</span>\n <Input\n placeholder=\"e.g. 120/80\"\n className=\"h-8 text-xs\"\n value={a.exam.bp}\n onChange={(e) => setAntenatalExam({ bp: e.target.value })}\n disabled={disabled}\n />\n </label>\n\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={a.exam.pallor}\n onCheckedChange={(c) => setAntenatalExam({ pallor: c === true })}\n disabled={disabled}\n />\n <span>Pallor</span>\n </label>\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={a.exam.oedema}\n onCheckedChange={(c) => setAntenatalExam({ oedema: c === true })}\n disabled={disabled}\n />\n <span>Oedema</span>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Fundal height (cm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.fundalHeightCm}\n onChange={(e) =>\n setAntenatalExam({ fundalHeightCm: Number(e.target.value) || 0 })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">FHR (bpm)</span>\n <Input\n type=\"number\"\n className=\"h-8 text-xs\"\n value={a.exam.fhrBpm}\n onChange={(e) => setAntenatalExam({ fhrBpm: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Presentation</span>\n <Select\n value={a.exam.presentation === '' ? 'none' : a.exam.presentation}\n onValueChange={(v) =>\n setAntenatalExam({\n presentation: v === 'none' ? '' : (v as typeof a.exam.presentation),\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Cephalic\">Cephalic</SelectItem>\n <SelectItem value=\"Breech\">Breech</SelectItem>\n <SelectItem value=\"Other\">Other</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Lie</span>\n <Select\n value={a.exam.lie === '' ? 'none' : a.exam.lie}\n onValueChange={(v) =>\n setAntenatalExam({ lie: v === 'none' ? '' : (v as typeof a.exam.lie) })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Longitudinal\">Longitudinal</SelectItem>\n <SelectItem value=\"Transverse\">Transverse</SelectItem>\n <SelectItem value=\"Oblique\">Oblique</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Investigations tracker\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Blood Group / Rh</span>\n <Input\n className=\"h-8 text-xs\"\n placeholder=\"e.g. O+ve\"\n value={a.investigations.bloodGroup}\n onChange={(e) => setAntenatalInv({ bloodGroup: e.target.value })}\n disabled={disabled}\n />\n </label>\n {(\n [\n { key: 'cbc', label: 'CBC' },\n { key: 'tsh', label: 'TSH' },\n { key: 'rbsOgtt', label: 'RBS / OGTT' },\n { key: 'serology', label: 'HIV / HBsAg / VDRL' },\n { key: 'urine', label: 'Urine routine' },\n ] as const\n ).map((row) => (\n <label key={row.key} className=\"space-y-1\">\n <span className=\"block font-medium\">{row.label}</span>\n <Select\n value={a.investigations[row.key] === '' ? 'none' : a.investigations[row.key]}\n onValueChange={(v) =>\n setAntenatalInv({\n [row.key]: v === 'none' ? '' : v,\n } as Partial<typeof a.investigations>)\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Done\">Done</SelectItem>\n <SelectItem value=\"Pending\">Pending</SelectItem>\n <SelectItem value=\"Abnormal\">Abnormal</SelectItem>\n </SelectContent>\n </Select>\n </label>\n ))}\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">USG</span>\n <Select\n value={a.investigations.usg === '' ? 'none' : a.investigations.usg}\n onValueChange={(v) =>\n setAntenatalInv({\n usg: (v === 'none' ? '' : v) as typeof a.investigations.usg,\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Dating\">Dating</SelectItem>\n <SelectItem value=\"NT\">NT</SelectItem>\n <SelectItem value=\"Anomaly\">Anomaly</SelectItem>\n <SelectItem value=\"Growth\">Growth</SelectItem>\n <SelectItem value=\"Pending\">Pending</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { Card, CardContent, CardHeader, CardTitle } from '../shadcn/card';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\nimport { AntenatalPanels } from './AntenatalPanels';\n\ntype BasedOn = 'lmp' | 'usg';\ntype OutcomeType = '' | 'delivery' | 'cesarean' | 'abortion' | 'miscarriage' | 'stillbirth';\ntype PregnancyStatus = 'not_pregnant' | 'pregnant' | 'unknown';\ntype Dysmenorrhea = 0 | 1 | 2 | 3;\n\ntype GestationalAge = {\n weeks: number;\n days: number;\n totalDays: number;\n basedOn: BasedOn;\n};\n\ntype Outcome = {\n type: OutcomeType;\n date: string; // yyyy-mm-dd (or '' while incomplete)\n notes: string;\n is_final: boolean;\n};\n\ntype StoredMenstrual = {\n menarche_age: number;\n cycle_length: number;\n flow_days: number;\n cycle_regular: boolean;\n dysmenorrhea: Dysmenorrhea;\n};\n\ntype StoredObgHistory = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string | null; // yyyy-mm-dd\n /** @deprecated Use `pregnancy_status`. Kept for backward compatibility (true === 'pregnant'). */\n is_pregnant: boolean;\n pregnancy_status: PregnancyStatus;\n edd: { lmp: string | null; usg: string | null; primary: BasedOn } | null;\n gestationalAge: GestationalAge | null;\n trimester: 1 | 2 | 3 | null;\n complications: string | null;\n outcome: Outcome | null;\n menstrual: StoredMenstrual;\n};\n\ntype Draft = {\n gpal: { G: number; P: number; A: number; L: number };\n lmp: string; // '' or yyyy-mm-dd\n pregnancy_status: PregnancyStatus;\n eddUSG: string; // '' or yyyy-mm-dd\n primaryEDD: BasedOn;\n complications: string;\n outcome: Outcome | null;\n menstrual: StoredMenstrual;\n};\n\nconst DEFAULT_MENSTRUAL: StoredMenstrual = {\n menarche_age: 13,\n cycle_length: 28,\n flow_days: 4,\n cycle_regular: true,\n dysmenorrhea: 0,\n};\n\nconst DEFAULT_DRAFT: Draft = {\n gpal: { G: 0, P: 0, A: 0, L: 0 },\n lmp: '',\n pregnancy_status: 'not_pregnant',\n eddUSG: '',\n primaryEDD: 'lmp',\n complications: '',\n outcome: null,\n menstrual: { ...DEFAULT_MENSTRUAL },\n};\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, '0');\n}\n\nfunction formatDdMmYyyy(iso: string): string {\n // expects yyyy-mm-dd\n const [y, m, d] = iso.split('-');\n if (!y || !m || !d) return iso;\n return `${pad2(Number(d))}/${pad2(Number(m))}/${y}`;\n}\n\nfunction todayIso(): string {\n const d = new Date();\n const y = d.getFullYear();\n const m = pad2(d.getMonth() + 1);\n const day = pad2(d.getDate());\n return `${y}-${m}-${day}`;\n}\n\nfunction isValidIsoDate(val: string): boolean {\n if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(val)) return false;\n const dt = new Date(`${val}T00:00:00.000Z`);\n return !Number.isNaN(dt.getTime());\n}\n\nfunction safeJsonParse(val: string): any | null {\n try {\n return JSON.parse(val);\n } catch {\n return null;\n }\n}\n\nfunction clampInt(val: number, min: number, max: number): number {\n if (!Number.isFinite(val)) return min;\n return Math.max(min, Math.min(max, Math.trunc(val)));\n}\n\nfunction clampDysmenorrhea(val: unknown): Dysmenorrhea {\n const n = Math.round(Number(val));\n if (!Number.isFinite(n)) return 0;\n if (n <= 0) return 0;\n if (n >= 3) return 3;\n return n as 1 | 2;\n}\n\nfunction isPregnancyStatus(x: unknown): x is PregnancyStatus {\n return x === 'not_pregnant' || x === 'pregnant' || x === 'unknown';\n}\n\nfunction normalizeMenstrual(raw: unknown): StoredMenstrual {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {\n return { ...DEFAULT_MENSTRUAL };\n }\n const o = raw as Record<string, unknown>;\n const num = (v: unknown, fb: number) => {\n const n = Number(v);\n return Number.isFinite(n) ? n : fb;\n };\n return {\n menarche_age: num(o.menarche_age, DEFAULT_MENSTRUAL.menarche_age),\n cycle_length: num(o.cycle_length, DEFAULT_MENSTRUAL.cycle_length),\n flow_days: num(o.flow_days, DEFAULT_MENSTRUAL.flow_days),\n cycle_regular:\n typeof o.cycle_regular === 'boolean' ? o.cycle_regular : DEFAULT_MENSTRUAL.cycle_regular,\n dysmenorrhea: clampDysmenorrhea(o.dysmenorrhea),\n };\n}\n\nfunction parseLegacyString(input: string): Partial<Draft> {\n const result: Partial<Draft> = {};\n const gpalMatch = input.match(/G(\\d+)\\s*P(\\d+)\\s*A(\\d+)\\s*L(\\d+)/i);\n if (gpalMatch) {\n const [, g, p, a, l] = gpalMatch;\n result.gpal = {\n G: clampInt(Number(g), 0, 20),\n P: clampInt(Number(p), 0, 20),\n A: clampInt(Number(a), 0, 20),\n L: clampInt(Number(l), 0, 20),\n };\n }\n\n const lmpMatch = input.match(/LMP:\\s*([^\\n]+)/i);\n if (lmpMatch?.[1]) result.lmp = lmpMatch[1].trim();\n\n const eddUsgMatch = input.match(/EDD\\s*\\(USG\\):\\s*([^\\n]+)/i);\n if (eddUsgMatch?.[1]) result.eddUSG = eddUsgMatch[1].trim();\n\n const primaryMatch = input.match(/Primary\\s*EDD:\\s*(lmp|usg)/i);\n if (primaryMatch?.[1]) result.primaryEDD = primaryMatch[1].toLowerCase() as BasedOn;\n\n const compMatch = input.match(/Complications:\\s*([^\\n]+)/i);\n if (compMatch?.[1]) result.complications = compMatch[1].trim();\n\n return result;\n}\n\nfunction normalizeToDraft(value: unknown): { draft: Draft; isNewEntry: boolean } {\n if (!value) return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n\n let parsed: any = value;\n if (typeof value === 'string') {\n const json = safeJsonParse(value);\n parsed = json ?? value;\n }\n\n const resolvePregnancyStatus = (o: any): PregnancyStatus => {\n if (isPregnancyStatus(o?.pregnancy_status)) return o.pregnancy_status;\n if (typeof o?.is_pregnant === 'boolean') return o.is_pregnant ? 'pregnant' : 'not_pregnant';\n return 'not_pregnant';\n };\n\n // New JSON format: has gpal object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed) && 'gpal' in parsed && parsed.gpal && typeof parsed.gpal === 'object') {\n const gpal = parsed.gpal ?? {};\n const edd = parsed.edd ?? null;\n const eddUSG = (edd && typeof edd === 'object' ? edd.usg : undefined) ?? parsed.eddUSG ?? '';\n const primaryEDD = (edd && typeof edd === 'object' ? edd.primary : undefined) ?? parsed.primaryEDD ?? 'lmp';\n const lmp = parsed.lmp ?? '';\n const complications = parsed.complications ?? '';\n const outcome = parsed.outcome ?? null;\n return {\n isNewEntry: false,\n draft: {\n gpal: {\n G: clampInt(Number(gpal.G ?? 0), 0, 20),\n P: clampInt(Number(gpal.P ?? 0), 0, 20),\n A: clampInt(Number(gpal.A ?? 0), 0, 20),\n L: clampInt(Number(gpal.L ?? 0), 0, 20),\n },\n lmp: typeof lmp === 'string' ? lmp : '',\n pregnancy_status: resolvePregnancyStatus(parsed),\n eddUSG: typeof eddUSG === 'string' ? eddUSG : '',\n primaryEDD: primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof complications === 'string' ? complications : '',\n outcome: outcome && typeof outcome === 'object'\n ? {\n type: (outcome.type ?? '') as OutcomeType,\n date: typeof outcome.date === 'string' ? outcome.date : '',\n notes: typeof outcome.notes === 'string' ? outcome.notes : '',\n is_final: !!outcome.is_final,\n }\n : null,\n menstrual: normalizeMenstrual(parsed.menstrual),\n },\n };\n }\n\n // Legacy flat JSON object\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const gpalFromFlat = {\n G: clampInt(Number((parsed as any).G ?? (parsed as any).g ?? 0), 0, 20),\n P: clampInt(Number((parsed as any).P ?? (parsed as any).p ?? 0), 0, 20),\n A: clampInt(Number((parsed as any).A ?? (parsed as any).a ?? 0), 0, 20),\n L: clampInt(Number((parsed as any).L ?? (parsed as any).l ?? 0), 0, 20),\n };\n return {\n isNewEntry: false,\n draft: {\n ...DEFAULT_DRAFT,\n gpal: gpalFromFlat,\n lmp: typeof (parsed as any).lmp === 'string' ? (parsed as any).lmp : '',\n eddUSG: typeof (parsed as any).eddUSG === 'string' ? (parsed as any).eddUSG : '',\n primaryEDD: (parsed as any).primaryEDD === 'usg' ? 'usg' : 'lmp',\n complications: typeof (parsed as any).complications === 'string' ? (parsed as any).complications : '',\n outcome: (parsed as any).outcome && typeof (parsed as any).outcome === 'object'\n ? {\n type: ((parsed as any).outcome.type ?? '') as OutcomeType,\n date: typeof (parsed as any).outcome.date === 'string' ? (parsed as any).outcome.date : '',\n notes: typeof (parsed as any).outcome.notes === 'string' ? (parsed as any).outcome.notes : '',\n is_final: !!(parsed as any).outcome.is_final,\n }\n : null,\n pregnancy_status: resolvePregnancyStatus(parsed),\n menstrual: normalizeMenstrual((parsed as any).menstrual),\n },\n };\n }\n\n // Legacy human-readable string\n if (typeof parsed === 'string') {\n const legacy = parseLegacyString(parsed);\n return { isNewEntry: false, draft: { ...DEFAULT_DRAFT, ...legacy } as Draft };\n }\n\n return { draft: { ...DEFAULT_DRAFT }, isNewEntry: true };\n}\n\nfunction computeEddFromLmp(lmpIso: string): string | null {\n if (!isValidIsoDate(lmpIso)) return null;\n const base = new Date(`${lmpIso}T00:00:00.000Z`);\n base.setUTCDate(base.getUTCDate() + 280);\n const y = base.getUTCFullYear();\n const m = pad2(base.getUTCMonth() + 1);\n const d = pad2(base.getUTCDate());\n return `${y}-${m}-${d}`;\n}\n\nfunction diffDaysUtc(fromIso: string, toIso: string): number | null {\n if (!isValidIsoDate(fromIso) || !isValidIsoDate(toIso)) return null;\n const a = new Date(`${fromIso}T00:00:00.000Z`).getTime();\n const b = new Date(`${toIso}T00:00:00.000Z`).getTime();\n return Math.floor((b - a) / (1000 * 60 * 60 * 24));\n}\n\nfunction computeGestationalAgeFromLmp(lmpIso: string, today: string): GestationalAge | null {\n const days = diffDaysUtc(lmpIso, today);\n if (days == null || days < 0) return null;\n const weeks = Math.floor(days / 7);\n const rem = days % 7;\n return { weeks, days: rem, totalDays: days, basedOn: 'lmp' };\n}\n\nfunction computeGestationalAgeFromUsgEdd(eddUsgIso: string, today: string): GestationalAge | null {\n const daysToEdd = diffDaysUtc(today, eddUsgIso);\n if (daysToEdd == null) return null;\n const daysElapsed = 280 - daysToEdd;\n if (daysElapsed < 0) return null;\n const weeks = Math.floor(daysElapsed / 7);\n const rem = daysElapsed % 7;\n return { weeks, days: rem, totalDays: daysElapsed, basedOn: 'usg' };\n}\n\nfunction computeTrimester(ga: GestationalAge | null): 1 | 2 | 3 | null {\n if (!ga) return null;\n if (ga.weeks < 13) return 1;\n if (ga.weeks < 27) return 2;\n if (ga.weeks < 42) return 3;\n return null;\n}\n\nfunction buildStored(draft: Draft, today: string): StoredObgHistory {\n const lmpIso = isValidIsoDate(draft.lmp) ? draft.lmp : null;\n const eddUsgIso = isValidIsoDate(draft.eddUSG) ? draft.eddUSG : null;\n\n if (draft.pregnancy_status !== 'pregnant') {\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: false,\n pregnancy_status: draft.pregnancy_status,\n edd: null,\n gestationalAge: null,\n trimester: null,\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n menstrual: { ...draft.menstrual },\n };\n }\n\n const eddFromLmp = lmpIso ? computeEddFromLmp(lmpIso) : null;\n const gaFromLmp = lmpIso ? computeGestationalAgeFromLmp(lmpIso, today) : null;\n const gaFromUsg = eddUsgIso ? computeGestationalAgeFromUsgEdd(eddUsgIso, today) : null;\n\n const primary = draft.primaryEDD;\n const gaPrimary = primary === 'usg' && gaFromUsg ? gaFromUsg : gaFromLmp ? gaFromLmp : null;\n\n return {\n gpal: draft.gpal,\n lmp: lmpIso,\n is_pregnant: true,\n pregnancy_status: 'pregnant',\n edd: { lmp: eddFromLmp, usg: eddUsgIso, primary },\n gestationalAge: gaPrimary,\n trimester: computeTrimester(gaPrimary),\n complications: draft.complications.trim() ? draft.complications : null,\n outcome: draft.outcome,\n menstrual: { ...draft.menstrual },\n };\n}\n\nfunction stripGpalSuffix(label: string): string {\n return label.replace(/\\s*\\(G-P-A-L\\)\\s*$/i, '').trim();\n}\n\nfunction useDebouncedCommit(commit: (next: Draft) => void, delayMs: number) {\n const timeoutRef = useRef<number | null>(null);\n const latestCommit = useRef(commit);\n latestCommit.current = commit;\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return (next: Draft) => {\n if (timeoutRef.current != null) window.clearTimeout(timeoutRef.current);\n timeoutRef.current = window.setTimeout(() => latestCommit.current(next), delayMs);\n };\n}\n\nexport const ObstetricHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const [{ draft, isNewEntry }, setDraftState] = useState(() => normalizeToDraft(value));\n const [lmpError, setLmpError] = useState<string | null>(null);\n const [primaryEddError, setPrimaryEddError] = useState<string | null>(null);\n const [activeGpalKey, setActiveGpalKey] = useState<keyof Draft['gpal'] | null>(null);\n\n const refs = {\n G: useRef<HTMLInputElement | null>(null),\n P: useRef<HTMLInputElement | null>(null),\n A: useRef<HTMLInputElement | null>(null),\n L: useRef<HTMLInputElement | null>(null),\n } as const;\n\n const today = useMemo(() => todayIso(), []);\n\n // Keep local draft in sync with external updates (AI, reset, initial load).\n useEffect(() => {\n const next = normalizeToDraft(value);\n const currStr = JSON.stringify(buildStored(draft, today));\n const nextStr = JSON.stringify(buildStored(next.draft, today));\n if (currStr !== nextStr) setDraftState(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n const commitImmediate = (nextDraft: Draft) => {\n const stored = buildStored(nextDraft, today);\n setValue(JSON.stringify(stored));\n };\n const commitDebounced = useDebouncedCommit(commitImmediate, 500);\n\n const storedComputed = useMemo(() => buildStored(draft, today), [draft, today]);\n\n const isPregnant = draft.pregnancy_status === 'pregnant';\n const rightPanelEnabled = isPregnant && (!!storedComputed.lmp || !!(storedComputed.edd?.usg));\n const headerLabel = fieldDef?.label ? stripGpalSuffix(fieldDef.label) : 'Obstetric History';\n\n const setDraft = (updater: (prev: Draft) => Draft, persist: 'debounce' | 'immediate') => {\n setDraftState((prev) => {\n const nextDraft = updater(prev.draft);\n const nextState = { ...prev, draft: nextDraft };\n if (persist === 'immediate') commitImmediate(nextDraft);\n else commitDebounced(nextDraft);\n return nextState;\n });\n };\n\n const sanitizeGpalInput = (raw: string): number => {\n const digits = raw.replace(/[^\\d]/g, '').slice(0, 2);\n if (!digits) return 0;\n return clampInt(Number(digits), 0, 20);\n };\n\n const handleGpalChange = (key: keyof Draft['gpal'], raw: string) => {\n const prevWasEmpty = draft.gpal[key] === 0 && (activeGpalKey === key);\n const val = sanitizeGpalInput(raw);\n setDraft((prev) => ({ ...prev, gpal: { ...prev.gpal, [key]: val } }), 'debounce');\n\n const digitsOnly = raw.replace(/[^\\d]/g, '');\n const shouldAutoTab = digitsOnly.length === 1 && (prevWasEmpty || String(draft.gpal[key]).length >= 1);\n if (shouldAutoTab) {\n const order: (keyof Draft['gpal'])[] = ['G', 'P', 'A', 'L'];\n const idx = order.indexOf(key);\n const nextKey = order[idx + 1];\n if (nextKey) refs[nextKey].current?.focus();\n }\n };\n\n const handleLmpChange = (nextIso: string) => {\n setPrimaryEddError(null);\n if (nextIso && nextIso > today) {\n setLmpError('LMP cannot be in the future');\n return;\n }\n setLmpError(null);\n setDraft((prev) => ({ ...prev, lmp: nextIso }), 'debounce');\n };\n\n const handlePregStatus = (status: PregnancyStatus) => {\n setLmpError(null);\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, pregnancy_status: status }), 'immediate');\n };\n\n const setMenstrualPatch = (patch: Partial<StoredMenstrual>) => {\n setDraft((prev) => ({ ...prev, menstrual: { ...prev.menstrual, ...patch } }), 'debounce');\n };\n\n const handleEddUsgChange = (nextIso: string) => {\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, eddUSG: nextIso }), 'debounce');\n };\n\n const handlePrimaryEdd = (next: BasedOn) => {\n if (next === 'usg' && !isValidIsoDate(draft.eddUSG)) {\n setPrimaryEddError('Please enter EDD from USG first');\n return;\n }\n setPrimaryEddError(null);\n setDraft((prev) => ({ ...prev, primaryEDD: next }), 'immediate');\n };\n\n const ensureOutcome = () => {\n if (draft.outcome) return;\n setDraft(\n (prev) => ({\n ...prev,\n outcome: { type: '', date: '', notes: '', is_final: false },\n }),\n 'immediate'\n );\n };\n\n const clearOutcome = () => {\n setDraft((prev) => ({ ...prev, outcome: null }), 'immediate');\n };\n\n const updateOutcomeImmediate = (updater: (o: Outcome) => Outcome) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: updater(o) };\n },\n 'immediate'\n );\n };\n\n const updateOutcomeNotesDebounced = (notes: string) => {\n setDraft(\n (prev) => {\n const o = prev.outcome ?? { type: '', date: '', notes: '', is_final: false };\n return { ...prev, outcome: { ...o, notes } };\n },\n 'debounce'\n );\n };\n\n return (\n <Card className={cn('w-full', disabled && 'opacity-70 pointer-events-none')}>\n <CardHeader className=\"pb-3\">\n <CardTitle className=\"text-base font-semibold\">{headerLabel}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n {isNewEntry && (\n <div className=\"rounded-md border border-blue-200 bg-blue-50 px-3 py-2 text-xs text-blue-900\">\n No previous maternity episode found. Please fill obstetric details to start tracking.\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 items-start\">\n {/* Left panel */}\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-2\">G-P-A-L</div>\n <div className=\"grid grid-cols-4 gap-3\">\n {(['G', 'P', 'A', 'L'] as const).map((k) => (\n <div key={k} className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-gpal-${k}`} className=\"text-[11px] text-muted-foreground\">\n {k}\n </Label>\n <Input\n ref={refs[k]}\n id={`${fieldId}-gpal-${k}`}\n inputMode=\"numeric\"\n pattern=\"\\d*\"\n maxLength={2}\n value={String(draft.gpal[k] ?? 0)}\n onFocus={() => {\n setActiveGpalKey(k);\n const el = refs[k].current;\n if (el) el.select();\n }}\n onChange={(e) => handleGpalChange(k, e.target.value)}\n onKeyDown={(e) => {\n const allowed = ['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Home', 'End'];\n if (allowed.includes(e.key)) return;\n if (/^\\d$/.test(e.key)) return;\n e.preventDefault();\n }}\n className=\"text-center text-base\"\n />\n </div>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3\">\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-lmp`} className={cn('text-sm', lmpError && 'text-red-600')}>\n Last Menstrual Period (LMP)\n </Label>\n <Input\n id={`${fieldId}-lmp`}\n type=\"date\"\n max={today}\n value={draft.lmp}\n onChange={(e) => handleLmpChange(e.target.value)}\n className={cn(lmpError && 'border-red-500')}\n />\n {lmpError && <p className=\"text-xs text-red-600\">{lmpError}</p>}\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4 min-w-0\">\n <div className=\"text-sm font-medium\">Pregnancy Status</div>\n <div className=\"flex min-w-0 flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePregStatus('not_pregnant')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'not_pregnant'\n ? 'border-green-600 bg-green-600 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Not Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus('pregnant')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'pregnant'\n ? 'border-green-600 bg-green-600 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Pregnant\n </button>\n <button\n type=\"button\"\n onClick={() => handlePregStatus('unknown')}\n className={cn(\n 'shrink-0 rounded-full border px-3 py-1.5 text-[11px] font-medium transition-colors',\n draft.pregnancy_status === 'unknown'\n ? 'border-amber-500 bg-amber-500 text-white'\n : 'border-slate-300 bg-white text-slate-700 hover:bg-slate-50',\n )}\n >\n Unknown\n </button>\n </div>\n </div>\n </div>\n\n <div className=\"rounded-lg border bg-white p-4\">\n <div className=\"text-xs font-medium text-muted-foreground mb-3\">Menstrual</div>\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-menarche`} className=\"text-[11px] text-muted-foreground\">\n Menarche (age)\n </Label>\n <Input\n id={`${fieldId}-menarche`}\n type=\"number\"\n min={5}\n max={25}\n value={draft.menstrual.menarche_age}\n onChange={(e) => setMenstrualPatch({ menarche_age: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-cycle-length`} className=\"text-[11px] text-muted-foreground\">\n Cycle (days)\n </Label>\n <Input\n id={`${fieldId}-cycle-length`}\n type=\"number\"\n min={0}\n max={120}\n value={draft.menstrual.cycle_length}\n onChange={(e) => setMenstrualPatch({ cycle_length: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-flow-days`} className=\"text-[11px] text-muted-foreground\">\n Flow (days)\n </Label>\n <Input\n id={`${fieldId}-flow-days`}\n type=\"number\"\n min={0}\n max={30}\n value={draft.menstrual.flow_days}\n onChange={(e) => setMenstrualPatch({ flow_days: Number(e.target.value) || 0 })}\n />\n </label>\n <label className=\"space-y-1\">\n <Label className=\"text-[11px] text-muted-foreground\">Dysmenorrhea</Label>\n <select\n className=\"h-9 w-full rounded-md border border-input bg-background px-2 text-sm\"\n value={String(draft.menstrual.dysmenorrhea)}\n onChange={(e) =>\n setMenstrualPatch({\n dysmenorrhea: clampDysmenorrhea(Number(e.target.value)),\n })\n }\n >\n <option value=\"0\">0 — none</option>\n <option value=\"1\">1 — mild</option>\n <option value=\"2\">2 — moderate</option>\n <option value=\"3\">3 — severe</option>\n </select>\n </label>\n </div>\n <label className=\"mt-3 flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={draft.menstrual.cycle_regular}\n onChange={(e) => setMenstrualPatch({ cycle_regular: e.target.checked })}\n />\n Regular cycle\n </label>\n </div>\n\n <div className=\"space-y-2 rounded-lg border bg-white p-4\">\n <Label htmlFor={`${fieldId}-complications`} className=\"text-sm\">\n Previous Pregnancy Complications\n </Label>\n <Textarea\n id={`${fieldId}-complications`}\n placeholder=\"e.g. Pre-eclampsia, Gestational diabetes, C-section, etc.\"\n value={draft.complications}\n onChange={(e) => setDraft((prev) => ({ ...prev, complications: e.target.value }), 'debounce')}\n className=\"min-h-[140px]\"\n />\n </div>\n </div>\n\n {/* Right panel */}\n <div className=\"rounded-lg border bg-white p-4 min-h-[260px]\">\n {!isPregnant && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n {draft.pregnancy_status === 'unknown'\n ? 'Pregnancy status unknown — confirm with UPT/USG to enable gestational age and EDD.'\n : 'Only for \"Pregnant Women\" and enter LMP to calculate gestational age and EDD'}\n </div>\n )}\n\n {isPregnant && !rightPanelEnabled && (\n <div className=\"h-full flex items-center justify-center text-center text-sm text-muted-foreground px-6 py-10\">\n Enter LMP and/or EDD (USG) to enable gestational age and EDD calculations.\n </div>\n )}\n\n {isPregnant && rightPanelEnabled && (\n <div className=\"space-y-4\">\n <div className=\"rounded-lg border p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold text-blue-700\">Expected Delivery Date (EDD)</div>\n {storedComputed.gestationalAge?.basedOn && (\n <span className=\"rounded-full bg-blue-100 px-2 py-1 text-[11px] text-blue-700\">\n Based on {storedComputed.gestationalAge.basedOn.toUpperCase()}\n </span>\n )}\n </div>\n <div className=\"mt-3\">\n <div className=\"text-xs text-muted-foreground\">Gestational Age:</div>\n <div className=\"text-lg font-semibold\">\n {storedComputed.gestationalAge\n ? `${storedComputed.gestationalAge.weeks} weeks ${storedComputed.gestationalAge.days} days`\n : '—'}\n </div>\n <div className=\"text-xs text-muted-foreground mt-1\">\n {storedComputed.trimester ? `Trimester ${storedComputed.trimester}` : 'Trimester —'}\n </div>\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs text-muted-foreground\">EDD (from LMP):</div>\n <div className=\"rounded-md border bg-muted/20 px-3 py-2 text-sm font-semibold\">\n {storedComputed.edd?.lmp ? formatDdMmYyyy(storedComputed.edd.lmp) : '—'}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-edd-usg`} className=\"text-sm\">\n EDD (from USG):\n </Label>\n <Input\n id={`${fieldId}-edd-usg`}\n type=\"date\"\n value={draft.eddUSG}\n onChange={(e) => handleEddUsgChange(e.target.value)}\n />\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-sm font-medium\">Primary EDD:</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('lmp')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'lmp' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n LMP\n </button>\n <button\n type=\"button\"\n onClick={() => handlePrimaryEdd('usg')}\n className={cn(\n 'flex-1 rounded-md border px-3 py-2 text-sm',\n draft.primaryEDD === 'usg' ? 'bg-blue-600 text-white border-blue-600' : 'bg-white'\n )}\n >\n USG\n </button>\n </div>\n {primaryEddError && <p className=\"text-xs text-red-600\">{primaryEddError}</p>}\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Antenatal panels (full width of the card) */}\n <AntenatalPanels />\n\n {/* Outcome section */}\n <div className=\"rounded-lg border bg-yellow-50/60 p-4\">\n <div className=\"flex items-center justify-between\">\n <div className=\"text-sm font-semibold\">\n Pregnancy Outcome (Optional - To Close Episode)\n </div>\n {draft.outcome && (\n <button type=\"button\" className=\"text-sm text-red-600 hover:underline\" onClick={clearOutcome}>\n Clear\n </button>\n )}\n </div>\n\n {!draft.outcome && (\n <button\n type=\"button\"\n onClick={ensureOutcome}\n className=\"mt-3 w-full rounded-md border border-yellow-300 bg-yellow-100 px-3 py-2 text-sm font-medium\"\n >\n + Add Pregnancy Outcome\n </button>\n )}\n\n {draft.outcome && (\n <div className=\"mt-4 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-sm\">\n Outcome Type <span className=\"text-red-500\">*</span>\n </Label>\n <select\n className=\"w-full rounded-md border px-3 py-2 text-sm bg-white\"\n value={draft.outcome.type}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, type: e.target.value as OutcomeType }))}\n >\n <option value=\"\">Select outcome...</option>\n <option value=\"delivery\">Normal Delivery</option>\n <option value=\"cesarean\">Cesarean Section</option>\n <option value=\"abortion\">Abortion</option>\n <option value=\"miscarriage\">Miscarriage</option>\n <option value=\"stillbirth\">Stillbirth</option>\n </select>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-date`} className=\"text-sm\">\n Date <span className=\"text-red-500\">*</span>\n </Label>\n <Input\n id={`${fieldId}-outcome-date`}\n type=\"date\"\n max={today}\n value={draft.outcome.date}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, date: e.target.value }))}\n />\n {draft.outcome.date && (\n <p className=\"text-xs text-muted-foreground\">\n Selected: {formatDdMmYyyy(draft.outcome.date)}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor={`${fieldId}-outcome-notes`} className=\"text-sm\">\n Notes\n </Label>\n <Textarea\n id={`${fieldId}-outcome-notes`}\n placeholder=\"e.g. Normal vaginal delivery, healthy baby boy, 3.2kg\"\n value={draft.outcome.notes}\n onChange={(e) => updateOutcomeNotesDebounced(e.target.value)}\n className=\"min-h-[90px]\"\n />\n </div>\n\n <div className=\"rounded-md border bg-white p-3\">\n <label className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"checkbox\"\n checked={!!draft.outcome.is_final}\n onChange={(e) => updateOutcomeImmediate((o) => ({ ...o, is_final: e.target.checked }))}\n />\n Close this pregnancy episode\n </label>\n {draft.outcome.is_final && (\n <div className=\"mt-3 rounded-md border border-red-300 bg-red-50 px-3 py-2 text-xs text-red-800\">\n Checking this will mark the pregnancy as completed and is intended to close the maternity episode.\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n </CardContent>\n </Card>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype VaOptions = '' | '6/6' | '6/9' | '6/12' | '6/18' | '6/24' | '6/36' | '6/60' | 'CF' | 'PL';\ntype NearVaOptions =\n | ''\n | 'N4'\n | 'N5'\n | 'N6'\n | 'N8'\n | 'N10'\n | 'N12'\n | 'N14'\n | 'N18'\n | 'N24'\n | 'N36'\n | '<N36';\n\ntype PinholeOptions =\n | ''\n | 'PL−'\n | 'PL+'\n | 'FL'\n | 'HM'\n | 'CCFCF'\n | 'FC'\n | '1/60'\n | '2/60'\n | '3/60'\n | '4/60'\n | '5/60'\n | '6/60'\n | '6/36'\n | '6/24'\n | '6/18'\n | '6/12'\n | '6/9'\n | '6/7.5'\n | '6/6';\n\ntype PatientInformation = {\n systemic_history: string;\n ocular_history: string;\n chief_complaints: string;\n};\n\ntype UnaidedEyeVa = {\n ucva: VaOptions;\n pinhole_va: PinholeOptions;\n nv: NearVaOptions;\n};\n\ntype UnaidedVisualAcuity = {\n right_eye: UnaidedEyeVa;\n left_eye: UnaidedEyeVa;\n};\n\ntype RefractionEye = {\n sph: number | null;\n cyl: number | null;\n axis: number | null;\n va: VaOptions;\n pd?: number | null;\n prism?: number | null;\n};\n\ntype AddPowers = {\n right: number | null;\n left: number | null;\n};\n\ntype Refraction = {\n right_eye: RefractionEye;\n left_eye: RefractionEye;\n add: AddPowers;\n};\n\ntype IopEye = {\n iop: number | null;\n cct: number | null;\n};\n\ntype IopPachyCct = {\n method: '' | 'NCT' | 'Goldmann' | 'Tonopen' | 'iCare';\n time: string;\n right_eye: IopEye;\n left_eye: IopEye;\n};\n\ntype OphthalmologyValue = {\n patient_information: PatientInformation;\n unaided_visual_acuity: UnaidedVisualAcuity;\n current_glass_prescription: Refraction;\n iop_pachy_cct: IopPachyCct;\n refraction: Refraction;\n dilated_refraction: Refraction;\n glass_power_prescription: Refraction;\n notes: string;\n};\n\nconst UCVA_OPTIONS: VaOptions[] = ['', '6/6', '6/9', '6/12', '6/18', '6/24', '6/36', '6/60', 'CF', 'PL'];\n\nconst NEAR_VA_OPTIONS: NearVaOptions[] = ['', 'N4', 'N5', 'N6', 'N8', 'N10', 'N12', 'N14', 'N18', 'N24', 'N36', '<N36'];\n\nconst PINHOLE_OPTIONS: PinholeOptions[] = [\n '',\n 'PL−',\n 'PL+',\n 'FL',\n 'HM',\n 'CCFCF',\n 'FC',\n '1/60',\n '2/60',\n '3/60',\n '4/60',\n '5/60',\n '6/60',\n '6/36',\n '6/24',\n '6/18',\n '6/12',\n '6/9',\n '6/7.5',\n '6/6',\n];\n\nconst VA_OPTIONS: VaOptions[] = UCVA_OPTIONS;\n\nconst IOP_METHOD_OPTIONS: IopPachyCct['method'][] = ['', 'NCT', 'Goldmann', 'Tonopen', 'iCare'];\n\nfunction parseFloatOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseFloat(trimmed);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction parseIntOrNull(value: string): number | null {\n const trimmed = value.trim();\n if (!trimmed) return null;\n const parsed = Number.parseInt(trimmed, 10);\n return Number.isFinite(parsed) ? parsed : null;\n}\n\nfunction ensureRefractionEye(raw: any): RefractionEye {\n return {\n sph: raw?.sph ?? null,\n cyl: raw?.cyl ?? null,\n axis: raw?.axis ?? null,\n va: (raw?.va as VaOptions) ?? '',\n pd: raw?.pd ?? null,\n prism: raw?.prism ?? null,\n };\n}\n\nfunction ensureAddPowers(raw: any): AddPowers {\n return {\n right: raw?.right ?? null,\n left: raw?.left ?? null,\n };\n}\n\nfunction ensureRefraction(raw: any): Refraction {\n return {\n right_eye: ensureRefractionEye(raw?.right_eye),\n left_eye: ensureRefractionEye(raw?.left_eye),\n add: ensureAddPowers(raw?.add),\n };\n}\n\nfunction ensureUnaidedEyeVa(raw: any): UnaidedEyeVa {\n return {\n ucva: (raw?.ucva as VaOptions) ?? '',\n pinhole_va: (raw?.pinhole_va as PinholeOptions) ?? '',\n nv: (raw?.nv as NearVaOptions) ?? '',\n };\n}\n\nfunction ensureIopEye(raw: any): IopEye {\n return {\n iop: raw?.iop ?? null,\n cct: raw?.cct ?? null,\n };\n}\n\nfunction ensureValue(raw: unknown): OphthalmologyValue {\n const v = (raw || {}) as any;\n return {\n patient_information: {\n systemic_history: v.patient_information?.systemic_history ?? '',\n ocular_history: v.patient_information?.ocular_history ?? '',\n chief_complaints: v.patient_information?.chief_complaints ?? '',\n },\n unaided_visual_acuity: {\n right_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.right_eye),\n left_eye: ensureUnaidedEyeVa(v.unaided_visual_acuity?.left_eye),\n },\n current_glass_prescription: ensureRefraction(v.current_glass_prescription),\n iop_pachy_cct: {\n method: (v.iop_pachy_cct?.method as IopPachyCct['method']) ?? '',\n time: v.iop_pachy_cct?.time ?? '',\n right_eye: ensureIopEye(v.iop_pachy_cct?.right_eye),\n left_eye: ensureIopEye(v.iop_pachy_cct?.left_eye),\n },\n refraction: ensureRefraction(v.refraction),\n dilated_refraction: ensureRefraction(v.dilated_refraction),\n glass_power_prescription: ensureRefraction(v.glass_power_prescription),\n notes: v.notes ?? '',\n };\n}\n\nconst sectionWrapperClass =\n 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0] bg-white';\n\n// Match the \"highlight-label\" textarea theme header (used for Patient notes)\nconst sectionHeaderClass =\n 'rounded-t-md bg-[#FEE8EC] px-3 py-1 text-sm shrink-0 z-[1] text-slate-600 font-medium';\n\nconst sectionBodyClass =\n 'rounded-b-md border-t border-[#D0D0D0] bg-white p-3 space-y-3';\n\nconst tableBaseClass = 'w-full border-collapse text-xs';\n\nconst tableHeaderCellClass =\n 'border border-[#E0E0E0] bg-[#F7F7F7] px-2 py-1 text-center font-semibold';\n\nconst tableCellClass = 'border border-[#E0E0E0] px-1.5 py-1 text-center align-middle';\n\nconst selectClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\nconst numberInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs text-right focus-visible:outline-none focus-visible:ring-0';\n\nconst textInputClass =\n 'w-full border border-[#D0D0D0] rounded-md bg-white px-2 py-1 text-xs focus-visible:outline-none focus-visible:ring-0';\n\n/** Refraction / glass grids: fixed layout, thin numeric cols, wider V/A & P/D; inputs flush to cell edges */\nconst refractionTableClass = 'w-full table-fixed border-collapse text-xs';\n\nconst refractionHeaderCellClass =\n 'border border-[#E0E0E0] bg-[#F7F7F7] px-1 py-1 text-center font-semibold text-[11px]';\n\nconst refractionDataCellClass =\n 'border border-[#E0E0E0] p-0 text-center align-middle min-w-0';\n\nconst refractionLabelCellClass =\n 'border border-[#E0E0E0] px-2 py-1 text-left align-middle font-semibold whitespace-nowrap';\n\nconst refractionInputClass =\n 'h-7 w-full min-w-0 border-0 rounded-none bg-transparent px-1 py-0.5 text-xs text-right shadow-none ring-0 focus-visible:ring-0 focus-visible:ring-offset-0 disabled:opacity-50';\n\nconst refractionSelectClass =\n 'box-border h-7 w-full min-w-0 max-w-full cursor-pointer border-0 rounded-none bg-transparent px-1 py-0.5 pr-6 text-xs shadow-none focus-visible:outline-none focus-visible:ring-0 disabled:opacity-50';\n\nexport const OphthalmologyWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const update = (updater: (current: OphthalmologyValue) => OphthalmologyValue) => {\n if (disabled) return;\n setValue(updater(ensureValue(value)));\n };\n\n const setPatientInfo = (key: keyof PatientInformation, next: string) => {\n update((current) => ({\n ...current,\n patient_information: { ...current.patient_information, [key]: next },\n }));\n };\n\n const setUnaided = (\n side: EyeSide,\n key: keyof UnaidedEyeVa,\n next: VaOptions | NearVaOptions | PinholeOptions,\n ) => {\n update((current) => ({\n ...current,\n unaided_visual_acuity: {\n ...current.unaided_visual_acuity,\n [side]: { ...current.unaided_visual_acuity[side], [key]: next } as UnaidedEyeVa,\n },\n }));\n };\n\n const setRefractionField = (\n section:\n | 'current_glass_prescription'\n | 'refraction'\n | 'dilated_refraction'\n | 'glass_power_prescription',\n side: EyeSide,\n key: keyof RefractionEye,\n next: string,\n mode: 'float' | 'int' | 'select',\n ) => {\n update((current) => {\n const base = current[section];\n const eye = base[side];\n let val: number | null | VaOptions;\n if (mode === 'select') {\n val = next as VaOptions;\n } else if (mode === 'float') {\n val = parseFloatOrNull(next);\n } else {\n val = parseIntOrNull(next);\n }\n return {\n ...current,\n [section]: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setRefractionAdd = (\n section: 'refraction' | 'dilated_refraction' | 'glass_power_prescription' | 'current_glass_prescription',\n side: 'right' | 'left',\n next: string,\n ) => {\n update((current) => {\n const base = current[section];\n const add = base.add;\n const val = parseFloatOrNull(next);\n return {\n ...current,\n [section]: {\n ...base,\n add: {\n ...add,\n [side]: val,\n },\n },\n };\n });\n };\n\n const setIopField = (side: EyeSide, key: keyof IopEye, next: string) => {\n update((current) => {\n const base = current.iop_pachy_cct;\n const eye = base[side];\n const val = parseIntOrNull(next);\n return {\n ...current,\n iop_pachy_cct: {\n ...base,\n [side]: {\n ...eye,\n [key]: val,\n },\n },\n };\n });\n };\n\n const setIopMeta = (key: keyof IopPachyCct, next: string) => {\n update((current) => ({\n ...current,\n iop_pachy_cct: {\n ...current.iop_pachy_cct,\n [key]: next,\n },\n }));\n };\n\n const setNotes = (next: string) => {\n update((current) => ({\n ...current,\n notes: next,\n }));\n };\n\n return (\n <div className={cn('space-y-4', disabled && 'opacity-70 pointer-events-none')}>\n <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>\n\n {/* Patient Information */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Patient Information</span>\n </div>\n <div className={cn(sectionBodyClass, 'grid gap-3 md:grid-cols-3')}>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Systemic History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.systemic_history}\n onChange={(e) => setPatientInfo('systemic_history', e.target.value)}\n placeholder=\"Enter systemic history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Ocular History</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.ocular_history}\n onChange={(e) => setPatientInfo('ocular_history', e.target.value)}\n placeholder=\"Enter ocular history...\"\n />\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Chief Complaints</span>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"min-h-[100px] text-xs\"\n value={safe.patient_information.chief_complaints}\n onChange={(e) => setPatientInfo('chief_complaints', e.target.value)}\n placeholder=\"Enter chief complaints...\"\n />\n </div>\n </div>\n </section>\n\n {/* Unaided Visual Acuity */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Unaided Visual Acuity</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={3}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n <th className={tableHeaderCellClass}>UCVA</th>\n <th className={tableHeaderCellClass}>Pinhole V/A</th>\n <th className={tableHeaderCellClass}>N/V</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>Unaided</td>\n {/* Right */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.ucva}\n onChange={(e) =>\n setUnaided('right_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('right_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.right_eye.nv}\n onChange={(e) =>\n setUnaided('right_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.ucva}\n onChange={(e) =>\n setUnaided('left_eye', 'ucva', e.target.value as VaOptions)\n }\n >\n {UCVA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.pinhole_va}\n onChange={(e) =>\n setUnaided('left_eye', 'pinhole_va', e.target.value as PinholeOptions)\n }\n >\n {PINHOLE_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={tableCellClass}>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.unaided_visual_acuity.left_eye.nv}\n onChange={(e) =>\n setUnaided('left_eye', 'nv', e.target.value as NearVaOptions)\n }\n >\n {NEAR_VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Current Glass Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Current Glass Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[25%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[25%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={4}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={4}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={`${refractionLabelCellClass} whitespace-normal`}>\n <span className=\"block leading-tight\">\n Current\n <br />\n Glass\n </span>\n </td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.right_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.current_glass_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.sph ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.cyl ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={\n safe.current_glass_prescription.left_eye.axis ??\n ''\n }\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.current_glass_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'current_glass_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* IOP / Pachy / CCT Detail */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>IOP / Pachy / CCT Detail</span>\n </div>\n <div className={sectionBodyClass}>\n <div className=\"grid gap-3 md:grid-cols-[2fr,1fr] mb-3\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Method</span>\n <select\n disabled={disabled}\n className={selectClass}\n value={safe.iop_pachy_cct.method}\n onChange={(e) =>\n setIopMeta('method', e.target.value as IopPachyCct['method'])\n }\n >\n {IOP_METHOD_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt || 'Select Method'}\n </option>\n ))}\n </select>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-xs font-medium text-slate-700\">Time</span>\n <Input\n disabled={disabled}\n placeholder=\"HH:MM\"\n className={textInputClass}\n value={safe.iop_pachy_cct.time}\n onChange={(e) => setIopMeta('time', e.target.value)}\n />\n </div>\n </div>\n\n <table className={tableBaseClass}>\n <thead>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Right Eye\n </th>\n <th className={tableHeaderCellClass} colSpan={2}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={tableHeaderCellClass}></th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n <th className={tableHeaderCellClass}>IOP</th>\n <th className={tableHeaderCellClass}>CCT</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={cn(tableCellClass, 'font-semibold text-left px-2')}>\n Values\n </td>\n {/* Right */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.iop ?? ''}\n onChange={(e) => setIopField('right_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.right_eye.cct ?? ''}\n onChange={(e) => setIopField('right_eye', 'cct', e.target.value)}\n />\n </td>\n {/* Left */}\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.iop ?? ''}\n onChange={(e) => setIopField('left_eye', 'iop', e.target.value)}\n />\n </td>\n <td className={tableCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={numberInputClass}\n value={safe.iop_pachy_cct.left_eye.cct ?? ''}\n onChange={(e) => setIopField('left_eye', 'cct', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Refraction (Distance) */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Refraction (Distance)</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[13%]\" />\n <col className=\"w-[12%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[13%]\" />\n <col className=\"w-[12%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>BCVA</th>\n <th className={refractionHeaderCellClass}>P/D</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>BCVA</th>\n <th className={refractionHeaderCellClass}>P/D</th>\n </tr>\n </thead>\n <tbody>\n {/* Distance row */}\n <tr>\n <td className={refractionLabelCellClass}>Distance</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={refractionInputClass}\n value={safe.refraction.right_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'right_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n min={10}\n max={45}\n step=\"1\"\n className={refractionInputClass}\n value={safe.refraction.left_eye.pd ?? ''}\n onChange={(e) =>\n setRefractionField('refraction', 'left_eye', 'pd', e.target.value, 'int')\n }\n />\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.add.right ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'right', e.target.value)}\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.refraction.add.left ?? ''}\n onChange={(e) => setRefractionAdd('refraction', 'left', e.target.value)}\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Dilated Refraction */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Dilated Refraction</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Dilated row */}\n <tr>\n <td className={refractionLabelCellClass}>Dilated</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.dilated_refraction.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.dilated_refraction.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'dilated_refraction',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'right', e.target.value)\n }\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.dilated_refraction.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('dilated_refraction', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Glass Power Prescription */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Glass Power Prescription</span>\n </div>\n <div className={sectionBodyClass}>\n <table className={refractionTableClass}>\n <colgroup>\n <col className=\"w-[10%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[7%]\" />\n <col className=\"w-[6%]\" />\n <col className=\"w-[8%]\" />\n <col className=\"w-[17%]\" />\n </colgroup>\n <thead>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Right Eye\n </th>\n <th className={refractionHeaderCellClass} colSpan={5}>\n Left Eye\n </th>\n </tr>\n <tr>\n <th className={refractionHeaderCellClass}></th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n <th className={refractionHeaderCellClass}>Sph</th>\n <th className={refractionHeaderCellClass}>Cyl</th>\n <th className={refractionHeaderCellClass}>Axis</th>\n <th className={refractionHeaderCellClass}>Prism</th>\n <th className={refractionHeaderCellClass}>V/A</th>\n </tr>\n </thead>\n <tbody>\n {/* Glass power row */}\n <tr>\n <td className={refractionLabelCellClass}>Glass Power</td>\n {/* Right */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.right_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.glass_power_prescription.right_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'right_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n {/* Left */}\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.sph ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'sph',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.cyl ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'cyl',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.axis ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'axis',\n e.target.value,\n 'int',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.left_eye.prism ?? ''}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'prism',\n e.target.value,\n 'float',\n )\n }\n />\n </td>\n <td className={refractionDataCellClass}>\n <select\n disabled={disabled}\n className={refractionSelectClass}\n value={safe.glass_power_prescription.left_eye.va}\n onChange={(e) =>\n setRefractionField(\n 'glass_power_prescription',\n 'left_eye',\n 'va',\n e.target.value,\n 'select',\n )\n }\n >\n {VA_OPTIONS.map((opt) => (\n <option key={opt || 'blank'} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n {/* Add row */}\n <tr>\n <td className={refractionLabelCellClass}>Add</td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.add.right ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'right', e.target.value)\n }\n />\n </td>\n <td className={refractionDataCellClass} colSpan={5}>\n <Input\n disabled={disabled}\n type=\"number\"\n step=\"0.25\"\n className={refractionInputClass}\n value={safe.glass_power_prescription.add.left ?? ''}\n onChange={(e) =>\n setRefractionAdd('glass_power_prescription', 'left', e.target.value)\n }\n />\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </section>\n\n {/* Notes */}\n <section className={sectionWrapperClass}>\n <div className={sectionHeaderClass}>\n <span>Notes</span>\n </div>\n <div className={sectionBodyClass}>\n <Textarea\n disabled={disabled}\n rows={4}\n className=\"w-full text-xs min-h-[100px]\"\n placeholder=\"Enter additional notes...\"\n value={safe.notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n </div>\n </section>\n </div>\n );\n};\n\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { Textarea } from '../shadcn/textarea';\nimport { cn } from '../../core/utils';\n\ntype EyeSide = 'right_eye' | 'left_eye';\n\ntype EyeDiagnosis = Record<string, string>;\n\ntype OphthalDiagnosisValue = {\n right_eye: EyeDiagnosis;\n left_eye: EyeDiagnosis;\n};\n\nconst DIAGNOSIS_FIELDS: string[] = [\n 'INJURY',\n 'APPENDAGES',\n 'CONJUNCTIVA',\n 'SCLERA',\n 'CORNEA',\n 'ANTERIOR CHAMBER (AC)',\n 'PUPIL',\n 'IRIS',\n 'LENS',\n 'EXTRAOCULAR MOVEMENTS & SQUINT',\n 'INTRAOCULAR PRESSURE (IOP)',\n 'GONIOSCOPY',\n 'FUNDUS',\n];\n\nfunction ensureValue(raw: unknown): OphthalDiagnosisValue {\n const v = (raw || {}) as Partial<OphthalDiagnosisValue>;\n return {\n right_eye: v.right_eye ?? {},\n left_eye: v.left_eye ?? {},\n };\n}\n\nconst containerClass =\n 'rounded-md bg-white overflow-hidden flex flex-col';\n\nconst headerClass = 'px-3 py-2 text-sm font-medium text-slate-800 border-b border-slate-200';\n\nconst tableClass = 'w-full text-xs';\n\nconst headerCellClass =\n 'border border-slate-200 px-2 py-1 text-center font-semibold align-middle';\n\nconst cellClass = 'border border-slate-200 px-2 py-1 align-top';\n\nexport const OphthalDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n\n const safe = useMemo(() => ensureValue(value), [value]);\n\n const label = fieldDef?.label || '';\n\n const updateEyeField = (eye: EyeSide, fieldLabel: string, next: string) => {\n if (disabled) return;\n const prev = ensureValue(value);\n setValue({\n ...prev,\n [eye]: {\n ...prev[eye],\n [fieldLabel]: next,\n },\n });\n };\n\n return (\n <div className={cn('space-y-2', disabled && 'opacity-70 pointer-events-none')}>\n {label && <h3 className=\"text-base font-semibold text-slate-800\">{label}</h3>}\n\n <section className={containerClass}>\n <div className={headerClass}>\n <span className=\"text-sm\">Diagnosis</span>\n </div>\n <div className=\"overflow-x-auto\">\n <table className={tableClass}>\n <thead>\n <tr>\n <th className={cn(headerCellClass, 'text-left px-3')}>Field</th>\n <th className={headerCellClass}>Right Eye</th>\n <th className={headerCellClass}>Left Eye</th>\n </tr>\n </thead>\n <tbody>\n {DIAGNOSIS_FIELDS.map((fieldLabel) => (\n <tr key={fieldLabel}>\n <td className={cn(cellClass, 'text-left font-semibold px-3')}>{fieldLabel}</td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.right_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('right_eye', fieldLabel, e.target.value)}\n />\n </td>\n <td className={cellClass}>\n <Textarea\n disabled={disabled}\n rows={2}\n className=\"w-full text-xs min-h-[60px] resize-none\"\n value={safe.left_eye[fieldLabel] ?? ''}\n onChange={(e) => updateEyeField('left_eye', fieldLabel, e.target.value)}\n />\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n </div>\n );\n};\n\n","import * as React from \"react\"\nimport * as SliderPrimitive from \"@radix-ui/react-slider\"\n\nimport { cn } from \"../../core/utils\"\n\ntype SliderProps = React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> & {\n trackClassName?: string;\n thumbClassName?: string;\n};\n\nconst Slider = React.forwardRef<\n React.ElementRef<typeof SliderPrimitive.Root>,\n SliderProps\n>(({ className, trackClassName, thumbClassName, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex w-full touch-none select-none items-center\",\n className\n )}\n {...props}\n >\n <SliderPrimitive.Track\n className={cn(\n \"relative h-2 w-full grow overflow-hidden rounded-full bg-gray-200\",\n trackClassName\n )}\n >\n <SliderPrimitive.Range className=\"absolute h-full bg-primary\" />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb\n className={cn(\n \"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n thumbClassName\n )}\n />\n </SliderPrimitive.Root>\n))\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { useForm } from \"../../react/useForm\";\nimport { Button } from \"../shadcn/button\";\nimport { Card } from \"../shadcn/card\";\nimport { Label } from \"../shadcn/label\";\nimport { Slider } from \"../shadcn/slider\";\nimport { Textarea } from \"../shadcn/textarea\";\nimport { FieldRequiredIndicator } from \"../../react/fieldStyle\";\n\ntype Side = \"left\" | \"right\" | \"both\";\n\ntype ConcernId =\n | \"knee\"\n | \"shoulder\"\n | \"spine\"\n | \"musculoskeletal_pain\"\n | \"hip\"\n | \"trauma\"\n | \"other\";\n\nexport type OrthopedicExamValue = {\n concerns: ConcernId[];\n sides: Partial<Record<\"knee\" | \"shoulder\" | \"hip\", Side>>;\n painScore: number; // 0–10\n physicalExam: {\n inspection: string;\n palpation: string;\n rangeOfMotion: string;\n };\n reminders: {\n dismissed: boolean;\n position?: { top: number; right: number };\n };\n};\n\nconst CONCERNS: { id: ConcernId; label: string }[] = [\n { id: \"knee\", label: \"Knee\" },\n { id: \"shoulder\", label: \"Shoulder\" },\n { id: \"spine\", label: \"Spine\" },\n { id: \"musculoskeletal_pain\", label: \"Musculoskeletal pain\" },\n { id: \"hip\", label: \"Hip\" },\n { id: \"trauma\", label: \"Trauma\" },\n { id: \"other\", label: \"Other\" },\n];\n\nconst SIDE_PARTS: Array<\"knee\" | \"shoulder\" | \"hip\"> = [\"knee\", \"shoulder\", \"hip\"];\n\nconst REMINDERS: Record<ConcernId, string[]> = {\n knee: [\n \"Inspect for swelling, deformity, scars.\",\n \"Palpate joint line, patella, and ligaments.\",\n \"Assess active/passive flexion and extension.\",\n \"Check stability (ACL/PCL/MCL/LCL) if appropriate.\",\n ],\n shoulder: [\n \"Inspect for asymmetry, wasting, deformity.\",\n \"Palpate AC joint, bicipital groove, cuff insertions.\",\n \"Assess active/passive ROM (flex/abd/ER/IR).\",\n \"Consider impingement/cuff tests if indicated.\",\n ],\n hip: [\n \"Inspect gait and standing alignment.\",\n \"Palpate greater trochanter and groin tenderness.\",\n \"Assess ROM (flex/ext/abd/add/IR/ER).\",\n \"Consider special tests (FABER/FADIR) if indicated.\",\n ],\n spine: [\n \"Inspect posture and spinal alignment.\",\n \"Palpate spinous/paraspinal tenderness.\",\n \"Assess ROM (flex/ext/lat bend/rotation).\",\n \"Document neuro screen if radicular symptoms.\",\n ],\n musculoskeletal_pain: [\n \"Localize pain and radiation; identify triggers/relievers.\",\n \"Inspect for swelling, erythema, deformity.\",\n \"Assess function and weight-bearing/ADLs impact.\",\n ],\n trauma: [\n \"Inspect for deformity, wounds, bruising.\",\n \"Check distal neurovascular status.\",\n \"Assess joint stability only if safe.\",\n ],\n other: [\n \"Clarify the concern and affected region.\",\n \"Document red flags (night pain, fever, weight loss).\",\n ],\n};\n\nconst defaultValue = (): OrthopedicExamValue => ({\n concerns: [],\n sides: {},\n painScore: 0,\n physicalExam: { inspection: \"\", palpation: \"\", rangeOfMotion: \"\" },\n reminders: { dismissed: false, position: { top: 96, right: 24 } },\n});\n\nexport const OrthopedicExamWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safeValue: OrthopedicExamValue = useMemo(() => {\n if (!value || typeof value !== \"object\") return defaultValue();\n const v = value as Partial<OrthopedicExamValue>;\n const concerns = Array.isArray(v.concerns) ? (v.concerns as ConcernId[]) : [];\n const painScore = typeof v.painScore === \"number\" ? v.painScore : 0;\n const physicalExam = v.physicalExam ?? defaultValue().physicalExam;\n const reminders = v.reminders ?? defaultValue().reminders;\n return {\n concerns,\n sides: v.sides ?? {},\n painScore: Math.min(10, Math.max(0, Math.round(painScore))),\n physicalExam: {\n inspection: physicalExam.inspection ?? \"\",\n palpation: physicalExam.palpation ?? \"\",\n rangeOfMotion: physicalExam.rangeOfMotion ?? \"\",\n },\n reminders: {\n dismissed: !!reminders.dismissed,\n position: reminders.position ?? { top: 96, right: 24 },\n },\n };\n }, [value]);\n\n const [panelOpen, setPanelOpen] = useState(false);\n const draggingRef = useRef<{\n startX: number;\n startY: number;\n startTop: number;\n startRight: number;\n } | null>(null);\n const prevConcernsLengthRef = useRef(safeValue.concerns.length);\n\n const reminderSections = useMemo(() => {\n return safeValue.concerns\n .map((id) => ({\n id,\n label: CONCERNS.find((c) => c.id === id)?.label ?? id,\n points: REMINDERS[id] ?? [],\n }))\n .filter((s) => s.points.length > 0);\n }, [safeValue.concerns]);\n\n const hasReminders = reminderSections.length > 0;\n\n // Reminders auto-open only when concerns go from 0 to non-zero; close stays collapsed until chip is clicked\n useEffect(() => {\n const prevLen = prevConcernsLengthRef.current;\n const currLen = safeValue.concerns.length;\n prevConcernsLengthRef.current = currLen;\n\n if (currLen === 0) {\n if (safeValue.reminders.dismissed) {\n setValue({ ...safeValue, reminders: { ...safeValue.reminders, dismissed: false } });\n }\n setPanelOpen(false);\n return;\n }\n\n if (prevLen === 0 && currLen > 0 && !safeValue.reminders.dismissed) {\n setPanelOpen(true);\n }\n }, [safeValue, setValue]);\n\n // Window drag listeners\n useEffect(() => {\n const onMove = (e: MouseEvent) => {\n if (!draggingRef.current) return;\n const { startX, startY, startTop, startRight } = draggingRef.current;\n const dx = e.clientX - startX;\n const dy = e.clientY - startY;\n const nextPos = { top: startTop + dy, right: startRight - dx };\n setValue({\n ...safeValue,\n reminders: {\n ...safeValue.reminders,\n position: nextPos,\n },\n });\n };\n const onUp = () => {\n draggingRef.current = null;\n };\n\n window.addEventListener(\"mousemove\", onMove);\n window.addEventListener(\"mouseup\", onUp);\n return () => {\n window.removeEventListener(\"mousemove\", onMove);\n window.removeEventListener(\"mouseup\", onUp);\n };\n }, [safeValue, setValue]);\n\n const update = (next: OrthopedicExamValue) => {\n setValue(next);\n setTouched();\n };\n\n const toggleConcern = (id: ConcernId) => {\n const selected = safeValue.concerns.includes(id);\n const nextConcerns = selected\n ? safeValue.concerns.filter((c) => c !== id)\n : [...safeValue.concerns, id];\n\n const nextSides = { ...safeValue.sides };\n if (!nextConcerns.includes(\"knee\")) delete nextSides.knee;\n if (!nextConcerns.includes(\"shoulder\")) delete nextSides.shoulder;\n if (!nextConcerns.includes(\"hip\")) delete nextSides.hip;\n\n update({ ...safeValue, concerns: nextConcerns, sides: nextSides });\n };\n\n const toggleSide = (part: \"knee\" | \"shoulder\" | \"hip\", side: Side) => {\n const current = safeValue.sides?.[part];\n const nextSides = { ...safeValue.sides };\n if (current === side) {\n delete nextSides[part];\n } else {\n nextSides[part] = side;\n }\n update({ ...safeValue, sides: nextSides });\n };\n\n const setPainScore = (score: number) => {\n update({ ...safeValue, painScore: Math.min(10, Math.max(0, Math.round(score))) });\n };\n\n const setPhysicalExam = (key: keyof OrthopedicExamValue[\"physicalExam\"], text: string) => {\n update({\n ...safeValue,\n physicalExam: {\n ...safeValue.physicalExam,\n [key]: text,\n },\n });\n };\n\n const showSidePanel = SIDE_PARTS.some((p) => safeValue.concerns.includes(p));\n\n if (!fieldDef) return null;\n\n return (\n <div className={`space-y-4 relative ${disabled ? \"opacity-60 pointer-events-none\" : \"\"}`}>\n <div className=\"flex items-center justify-between\">\n <Label className=\"text-sm font-medium\">\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n </div>\n\n <div className=\"space-y-2\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Concern</div>\n <div className=\"flex flex-wrap gap-2\">\n {CONCERNS.map((c) => {\n const active = safeValue.concerns.includes(c.id);\n return (\n <Button\n key={c.id}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"h-6 rounded-full px-3 py-1 text-xs\"\n onClick={() => toggleConcern(c.id)}\n >\n {c.label}\n </Button>\n );\n })}\n </div>\n </div>\n\n {showSidePanel ? (\n <Card className=\"p-3 space-y-3 border-dashed\">\n <div className=\"text-xs font-semibold text-muted-foreground\">Side (Left / Right / Both)</div>\n {SIDE_PARTS.map((part) => {\n if (!safeValue.concerns.includes(part)) return null;\n const current = safeValue.sides?.[part];\n return (\n <div key={part} className=\"flex items-center justify-between\">\n <span className=\"text-xs font-medium capitalize\">{part}</span>\n <div className=\"flex gap-1\">\n {([\"left\", \"right\", \"both\"] as const).map((s) => {\n const active = current === s;\n return (\n <Button\n key={s}\n type=\"button\"\n size=\"sm\"\n variant={active ? \"default\" : \"outline\"}\n className=\"text-[11px] px-2 py-1 h-7\"\n onClick={() => toggleSide(part, s)}\n >\n {s.charAt(0).toUpperCase() + s.slice(1)}\n </Button>\n );\n })}\n </div>\n </div>\n );\n })}\n </Card>\n ) : null}\n\n <div className=\"space-y-2\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-xs font-semibold text-muted-foreground\">Pain score</span>\n <span className=\"text-xs font-mono\">{safeValue.painScore} / 10</span>\n </div>\n <Slider\n min={0}\n max={10}\n step={1}\n value={[safeValue.painScore]}\n onValueChange={(v) => setPainScore(v[0] ?? 0)}\n trackClassName=\"!bg-gray-400\"\n thumbClassName=\"!bg-white !border-white\"\n />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-3\">\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Inspection</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.inspection}\n onChange={(e) => setPhysicalExam(\"inspection\", e.target.value)}\n placeholder=\"Gait, posture, deformity, swelling, scars...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Palpation</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.palpation}\n onChange={(e) => setPhysicalExam(\"palpation\", e.target.value)}\n placeholder=\"Tenderness, warmth, crepitus, effusion...\"\n className=\"text-xs\"\n />\n </div>\n <div className=\"space-y-1\">\n <Label className=\"text-xs\">Range of motion</Label>\n <Textarea\n rows={4}\n value={safeValue.physicalExam.rangeOfMotion}\n onChange={(e) => setPhysicalExam(\"rangeOfMotion\", e.target.value)}\n placeholder=\"Flexion/extension, rotation, abduction/adduction...\"\n className=\"text-xs\"\n />\n </div>\n </div>\n\n {showError ? <p className=\"text-xs text-red-500\">{error}</p> : null}\n\n {safeValue.concerns.length > 0 && hasReminders ? (\n panelOpen ? (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Card className=\"w-80 shadow-lg border-primary/30 bg-background/95 backdrop-blur-sm\">\n <div\n className=\"flex items-center justify-between px-3 py-2 border-b cursor-move bg-primary/5\"\n onMouseDown={(e) => {\n e.preventDefault();\n draggingRef.current = {\n startX: e.clientX,\n startY: e.clientY,\n startTop: safeValue.reminders.position?.top ?? 96,\n startRight: safeValue.reminders.position?.right ?? 24,\n };\n }}\n >\n <span className=\"text-xs font-semibold text-primary\">Exam reminders</span>\n <button\n type=\"button\"\n className=\"text-[10px] uppercase tracking-wide text-muted-foreground hover:text-destructive\"\n onMouseDown={(e) => e.stopPropagation()}\n onClick={() => setPanelOpen(false)}\n >\n Close\n </button>\n </div>\n <div className=\"px-3 py-2 max-h-64 overflow-auto space-y-3\">\n {reminderSections.map(({ id, label, points }) => (\n <div key={id}>\n <div className=\"text-xs font-semibold text-primary mb-1\">{label}</div>\n <ul className=\"list-disc list-inside space-y-1 text-[11px] text-muted-foreground\">\n {points.map((p) => (\n <li key={p}>{p}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </Card>\n </div>\n ) : (\n <div\n style={{\n position: \"fixed\",\n top: safeValue.reminders.position?.top ?? 96,\n right: safeValue.reminders.position?.right ?? 24,\n zIndex: 40,\n }}\n >\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"rounded-full px-3 py-1 text-xs border-primary/30 bg-background/95 backdrop-blur-sm shadow-md\"\n onClick={() => setPanelOpen(true)}\n >\n Exam reminders\n </Button>\n </div>\n )\n ) : null}\n </div>\n );\n};","import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={fieldWrapperClass(fieldDef, wrapperClass)}>\n {labelEl}\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground',\n ),\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label className={fieldLabelClass(fieldDef, 'text-sm font-medium')}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n\n {orders.length === 0 ? (\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500',\n ),\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport { cn } from '../../core/utils';\nimport type { SelectOption, SuggestionTextareaFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\nimport { TextWidget } from './Text';\nimport { SelectWidget } from './Select';\n\nimport { getSuggestionTokensFromText, toggleSuggestionTokenInText } from '../../core/suggestionTokens';\n\nexport { getSuggestionTokensFromText, toggleSuggestionTokenInText };\n\nconst DEFAULT_TOKEN_SEPARATOR = ', ';\n\nfunction getAppendSeparator(def: SuggestionTextareaFieldDef): string {\n const raw = def.meta && typeof (def.meta as { appendSeparator?: unknown }).appendSeparator === 'string'\n ? (def.meta as { appendSeparator: string }).appendSeparator\n : DEFAULT_TOKEN_SEPARATOR;\n return raw;\n}\n\nfunction isTokenSelected(text: string, optionValue: unknown): boolean {\n const t = String(optionValue).trim();\n if (!t) return false;\n return getSuggestionTokensFromText(text).some((p) => p === t);\n}\n\n/**\n * Chip option values present in `text` as comma-separated tokens (same typing as schema `options[].value`).\n * Order follows left-to-right token order; duplicates in text only appear once.\n */\nexport function deriveKnownSuggestionChipValues(text: string, options: SelectOption[]): unknown[] {\n if (!options.length) return [];\n const allowed = new Map<string, unknown>(options.map((o) => [String(o.value), o.value] as const));\n const tokens = getSuggestionTokensFromText(text);\n const out: unknown[] = [];\n const seen = new Set<string>();\n for (const t of tokens) {\n if (!allowed.has(t) || seen.has(t)) continue;\n seen.add(t);\n out.push(allowed.get(t)!);\n }\n return out;\n}\n\nfunction parallelChipArraysEqual(a: unknown, b: unknown): boolean {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction isSuggestionField(type: string | undefined): type is SuggestionTextareaFieldDef['type'] {\n return type === 'suggestion_textarea' || type === 'complaint_chips';\n}\n\n/**\n * Renders a sibling schema field inside the suggestion textarea shell. Uses concrete widgets\n * (not FieldRenderer) so `hidden` layout fields still render here without circular imports.\n * Supported: text, number, textarea, select.\n */\nfunction EmbeddedSchemaField({ fieldId }: { fieldId: string }) {\n const store = useFormStore();\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n case 'textarea':\n return <TextWidget fieldId={fieldId} />;\n case 'select':\n return <SelectWidget fieldId={fieldId} />;\n default:\n return null;\n }\n}\n\n/**\n * Reusable textarea with schema-driven **suggestion chips** inside the input area (same white\n * shell as the textarea). The field value is a **single string**: clicking a chip **appends**\n * that option’s `value` or **removes** it if already selected. When chip options are loaded,\n * slugs are kept on the **last line** (comma + space by default), with prose above separated by\n * a newline. Optional `meta.parallelChipFieldId` mirrors chip selections into a sibling\n * **`multiselect`** array. Free typing is still allowed.\n */\nexport const SuggestionTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const [options, setOptions] = useState<SelectOption[]>([]);\n const [loading, setLoading] = useState(false);\n const showError = !!error && (touched || state.submitAttempted);\n\n const def =\n fieldDef && isSuggestionField(fieldDef.type) ? (fieldDef as SuggestionTextareaFieldDef) : undefined;\n\n const textValue = value == null || typeof value === 'string' ? value || '' : String(value);\n\n const parallelChipFieldId =\n def?.meta &&\n typeof (def.meta as { parallelChipFieldId?: unknown }).parallelChipFieldId === 'string'\n ? (def.meta as { parallelChipFieldId: string }).parallelChipFieldId.trim()\n : undefined;\n\n const embeddedFieldIds = useMemo(() => {\n const raw = def?.meta && Array.isArray((def.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? (def.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds\n : [];\n return raw\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n .filter((id) => store.getFieldDef(id));\n }, [def?.meta, store]);\n\n useEffect(() => {\n if (!def) {\n setOptions([]);\n return;\n }\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts as SelectOption[]))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [def]);\n\n const chipAllowedSet = useMemo(\n () => new Set(options.map((o) => String(o.value).trim()).filter(Boolean)),\n [options],\n );\n\n useEffect(() => {\n const parallelDef = store.getFieldDef(parallelChipFieldId);\n if (!parallelDef || parallelDef.type !== 'multiselect') return;\n const next = deriveKnownSuggestionChipValues(textValue, options);\n const prev = store.getFieldState(parallelChipFieldId).value;\n if (parallelChipArraysEqual(prev, next)) return;\n store.setValues({ [parallelChipFieldId]: next }, { touch: false });\n }, [def, parallelChipFieldId, textValue, options, store]);\n\n if (!def) {\n return null;\n }\n\n const appendSeparator = getAppendSeparator(def);\n const suggestionsAria =\n def.meta && typeof (def.meta as { suggestionsAriaLabel?: string }).suggestionsAriaLabel === 'string'\n ? (def.meta as { suggestionsAriaLabel: string }).suggestionsAriaLabel\n : 'Quick suggestions';\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const inputWithStyle = fieldControlClass(def, inputClass);\n const height =\n def.height != null\n ? typeof def.height === 'string'\n ? Number(def.height) || undefined\n : def.height\n : undefined;\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const showLabel = isLabelVisible(def);\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n const onChipClick = (optValue: unknown) => {\n if (disabled) return;\n setValue(toggleSuggestionTokenInText(textValue, String(optValue), appendSeparator, chipAllowedSet));\n };\n\n const hasSuggestions = options.length > 0;\n const hasEmbedded = embeddedFieldIds.length > 0;\n const hasShell = hasSuggestions || hasEmbedded;\n const isHighlightLabel = def.theme === 'highlight-label';\n\n const suggestionShellClass = cn(\n 'flex min-w-0 flex-col overflow-hidden',\n hasShell &&\n (isHighlightLabel\n ? '-mt-1 rounded-b-md border-[#D0D0D0] bg-white'\n : 'rounded-md border border-input bg-background'),\n );\n\n const chipsRowClass = cn(\n 'flex flex-wrap gap-2 px-3 pb-2 pt-3',\n hasSuggestions &&\n (isHighlightLabel ? '' : 'border-b border-input/70'),\n disabled && 'pointer-events-none opacity-50',\n );\n\n const embeddedRowClass = cn(\n 'grid gap-3 px-3 sm:grid-cols-3',\n hasEmbedded &&\n (hasSuggestions\n ? cn('py-2', isHighlightLabel && 'border-t border-input/70')\n : 'border-b border-input/70 py-3'),\n disabled && 'pointer-events-none opacity-50',\n );\n\n const textareaShellClass = cn(\n inputWithStyle,\n hasShell &&\n cn(\n 'mt-0 rounded-t-none rounded-b-md border-0 shadow-none focus-visible:ring-offset-0',\n isHighlightLabel ? 'border-t-0' : 'min-h-[80px]',\n ),\n );\n\n const suggestionButtons =\n loading ? (\n <span className=\"text-xs text-muted-foreground\">Loading suggestions…</span>\n ) : (\n options.map((opt) => {\n const on = isTokenSelected(textValue, opt.value);\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n onClick={() => onChipClick(opt.value)}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-muted-foreground/30 bg-background hover:bg-muted/60',\n )}\n >\n {opt.label}\n </button>\n );\n })\n );\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n\n {def.description && (\n <p className={fieldDescriptionClass(def, 'text-xs text-muted-foreground')}>\n {def.description}\n </p>\n )}\n\n {hasShell ? (\n <div className={suggestionShellClass}>\n {hasSuggestions && (\n <div className={chipsRowClass} role=\"group\" aria-label={suggestionsAria}>\n {suggestionButtons}\n </div>\n )}\n {hasEmbedded && (\n <div className={embeddedRowClass}>\n {embeddedFieldIds.map((id) => (\n <EmbeddedSchemaField key={id} fieldId={id} />\n ))}\n </div>\n )}\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={textareaShellClass}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n aria-label={!showLabel ? def.label : undefined}\n />\n </div>\n ) : (\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={inputWithStyle}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n aria-label={!showLabel ? def.label : undefined}\n />\n )}\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n/** @deprecated Use `SuggestionTextareaWidget`. Kept for schema compatibility. */\nexport const ComplaintChipsWidget = SuggestionTextareaWidget;\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import type { FunctionalImpairmentScoreValue } from './types';\n\nexport function clampFunctionalScore03(n: unknown): number {\n const v = typeof n === 'number' ? n : Number(n);\n if (!Number.isFinite(v)) return 0;\n return Math.max(0, Math.min(3, Math.trunc(v)));\n}\n\nexport function parseFunctionalImpairmentScore(raw: unknown): FunctionalImpairmentScoreValue {\n const base: FunctionalImpairmentScoreValue = {\n reading: 0,\n nightDriving: 0,\n glare: 0,\n occupation: 0,\n adl: 0,\n };\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return base;\n const o = raw as Record<string, unknown>;\n for (const k of Object.keys(base) as (keyof FunctionalImpairmentScoreValue)[]) {\n base[k] = clampFunctionalScore03(o[k]);\n }\n return base;\n}\n\nexport function functionalImpairmentTotal(v: FunctionalImpairmentScoreValue): number {\n return v.reading + v.nightDriving + v.glare + v.occupation + v.adl;\n}\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n FunctionalImpairmentDimension,\n FunctionalImpairmentScoreFieldDef,\n} from '../../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../../core/functionalImpairmentScore';\n\nconst ITEMS: { key: FunctionalImpairmentDimension; label: string }[] = [\n { key: 'reading', label: 'Difficulty reading' },\n { key: 'nightDriving', label: 'Night driving difficulty' },\n { key: 'glare', label: 'Glare sensitivity' },\n { key: 'occupation', label: 'Occupational impact' },\n { key: 'adl', label: 'ADL limitation' },\n];\n\nconst SCALE_LABELS = ['None', 'Mild', 'Moderate', 'Severe'] as const;\n\nconst DEFAULT_TITLE = 'Functional Impairment Score (Stage 5)';\n\n/**\n * Two columns when the card fits two compact cells (~22rem + gap);\n * one column below that. Low min so side columns still get 2-up.\n */\nconst ITEMS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(min(100%, 8rem), 1fr))',\n columnGap: '0.5rem',\n rowGap: '0.5rem',\n width: '100%',\n minWidth: 0,\n};\n\nfunction clamp03(n: unknown): number {\n const v = typeof n === 'number' ? n : Number(n);\n if (!Number.isFinite(v)) return 0;\n return Math.max(0, Math.min(3, Math.trunc(v)));\n}\n\n/**\n * Stage-5 functional impairment: five 0–3 items and total /15.\n */\nexport const FunctionalImpairmentScoreWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'functional_impairment_score') {\n return null;\n }\n\n const def = fieldDef as FunctionalImpairmentScoreFieldDef;\n const v = parseFunctionalImpairmentScore(value);\n const total = functionalImpairmentTotal(v);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setDim = (key: FunctionalImpairmentDimension, n: number) => {\n setValue({ ...v, [key]: clamp03(n) });\n };\n\n return (\n <div\n id={`functional-impairment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-2 text-xs font-semibold leading-tight text-foreground sm:text-[13px]\">\n {title}\n </h3>\n\n <div style={ITEMS_GRID_STYLE}>\n {ITEMS.map((it) => (\n <div key={it.key} className=\"flex min-w-0 flex-col gap-1\">\n <div className=\"text-[10px] font-medium leading-snug text-foreground sm:text-[11px]\">\n {it.label}\n </div>\n <div className=\"flex w-fit max-w-full shrink-0 gap-0.5\">\n {[0, 1, 2, 3].map((score) => (\n <button\n key={score}\n type=\"button\"\n title={SCALE_LABELS[score]}\n disabled={disabled}\n onClick={() => setDim(it.key, score)}\n className={cn(\n 'h-6 w-7 shrink-0 rounded border text-[10px] transition-colors sm:text-[11px]',\n v[it.key] === score\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-input hover:bg-muted',\n disabled && 'pointer-events-none opacity-50',\n )}\n >\n {score}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n <div className=\"mt-2 flex flex-col gap-1.5 border-t border-border pt-2 sm:flex-row sm:items-center sm:justify-between sm:gap-2\">\n <div className=\"text-[10px] leading-snug text-muted-foreground sm:text-[11px]\">\n Score scale: 0 = none, 3 = severe (each item)\n </div>\n <div className=\"flex flex-wrap items-center gap-1.5 sm:justify-end\">\n <span className=\"text-[10px] text-muted-foreground sm:text-[11px]\">Total</span>\n <span className=\"text-sm font-bold tabular-nums sm:text-[15px]\">\n {total}\n <span className=\"font-normal text-muted-foreground\">/15</span>\n </span>\n </div>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport type { BiometryIolWorkupFieldDef, BiometryIolWorkupValue, BiometryMethod } from '../../core/types';\n\nconst FORMULA_OPTIONS = [\n 'SRK/T',\n 'Barrett Universal II',\n 'Hoffer Q',\n 'Haigis',\n 'Holladay 1',\n 'Holladay 2',\n 'Kane',\n] as const;\n\nconst METHODS: { value: BiometryMethod; label: string }[] = [\n { value: 'optical_biometry', label: 'Optical biometry (IOL Master)' },\n { value: 'ascan_immersion', label: 'A-scan (immersion)' },\n { value: 'ascan_contact', label: 'A-scan (contact)' },\n];\n\nconst EMPTY: BiometryIolWorkupValue = {\n axialLengthOD: '',\n axialLengthOS: '',\n k1k2AxisOD: '',\n k1k2AxisOS: '',\n anteriorChamberDepthOD: '',\n anteriorChamberDepthOS: '',\n iolPowerOD: '',\n iolPowerOS: '',\n targetRefractionOD: '',\n targetRefractionOS: '',\n formula: 'SRK/T',\n method: 'optical_biometry',\n cornealTopoUploaded: false,\n specularMicroscopyDone: false,\n endothelialCount: '',\n};\n\nfunction str(x: unknown): string {\n return typeof x === 'string' ? x : '';\n}\n\nfunction parseValue(raw: unknown): BiometryIolWorkupValue {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return { ...EMPTY };\n const o = raw as Record<string, unknown>;\n const m = o.method;\n const method: BiometryMethod =\n m === 'ascan_immersion' || m === 'ascan_contact' || m === 'optical_biometry' ? m : 'optical_biometry';\n const formula = str(o.formula);\n return {\n ...EMPTY,\n axialLengthOD: str(o.axialLengthOD),\n axialLengthOS: str(o.axialLengthOS),\n k1k2AxisOD: str(o.k1k2AxisOD),\n k1k2AxisOS: str(o.k1k2AxisOS),\n anteriorChamberDepthOD: str(o.anteriorChamberDepthOD),\n anteriorChamberDepthOS: str(o.anteriorChamberDepthOS),\n iolPowerOD: str(o.iolPowerOD),\n iolPowerOS: str(o.iolPowerOS),\n targetRefractionOD: str(o.targetRefractionOD),\n targetRefractionOS: str(o.targetRefractionOS),\n formula: formula || 'SRK/T',\n method,\n cornealTopoUploaded: o.cornealTopoUploaded === true,\n specularMicroscopyDone: o.specularMicroscopyDone === true,\n endothelialCount: str(o.endothelialCount),\n };\n}\n\n/** Row padding — use the same `py-*` on paramCell, eyeTh, eye `td`s, and colspan `td`s (Tailwind must see literals; not from index.css). */\nconst paramCell =\n 'emr-biometry-param text-[11px] font-semibold leading-snug text-foreground sm:text-xs py-2';\nconst eyeTh =\n 'emr-biometry-eye text-center text-[11px] font-semibold sm:text-xs py-2';\n\nfunction Inp({\n value,\n onChange,\n disabled,\n placeholder,\n}: {\n value: string;\n onChange: (s: string) => void;\n disabled?: boolean;\n placeholder?: string;\n}) {\n return (\n <input\n value={value}\n disabled={disabled}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n className=\"box-border w-full min-w-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n />\n );\n}\n\nconst DEFAULT_TITLE = 'Biometry & IOL Workup (Stage 7)';\n\nexport const BiometryIolWorkupWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'biometry_iol_workup') {\n return null;\n }\n\n const def = fieldDef as BiometryIolWorkupFieldDef;\n const v = parseValue(value);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const patch = (p: Partial<BiometryIolWorkupValue>) => setValue({ ...v, ...p });\n\n return (\n <div\n id={`biometry-iol-${fieldId}`}\n className=\"w-full min-w-0 max-w-full self-stretch rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-2.5 text-sm font-semibold leading-tight text-foreground\">{title}</h3>\n\n <div className=\"w-full min-w-0 overflow-x-auto\">\n <table className=\"emr-table emr-table--biometry min-w-full\">\n <colgroup>\n <col style={{ width: '32%' }} />\n <col style={{ width: '34%' }} />\n <col style={{ width: '34%' }} />\n </colgroup>\n <thead>\n <tr>\n <th scope=\"col\" className={paramCell}>\n Parameter\n </th>\n <th scope=\"col\" className={eyeTh}>\n Right Eye\n </th>\n <th scope=\"col\" className={eyeTh}>\n Left Eye\n </th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td className={paramCell}>Axial Length (mm)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.axialLengthOD}\n disabled={disabled}\n placeholder=\"e.g. 23.45\"\n onChange={(s) => patch({ axialLengthOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.axialLengthOS}\n disabled={disabled}\n placeholder=\"e.g. 23.45\"\n onChange={(s) => patch({ axialLengthOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>K1 / K2 / Axis</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.k1k2AxisOD}\n disabled={disabled}\n placeholder=\"44.0 / 44.5 / 90\"\n onChange={(s) => patch({ k1k2AxisOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.k1k2AxisOS}\n disabled={disabled}\n placeholder=\"44.0 / 44.5 / 90\"\n onChange={(s) => patch({ k1k2AxisOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} whitespace-nowrap`}>Anterior Chamber Depth (mm)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.anteriorChamberDepthOD}\n disabled={disabled}\n onChange={(s) => patch({ anteriorChamberDepthOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.anteriorChamberDepthOS}\n disabled={disabled}\n onChange={(s) => patch({ anteriorChamberDepthOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>IOL Power (D)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp value={v.iolPowerOD} disabled={disabled} onChange={(s) => patch({ iolPowerOD: s })} />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp value={v.iolPowerOS} disabled={disabled} onChange={(s) => patch({ iolPowerOS: s })} />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>Target Refraction (D)</td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.targetRefractionOD}\n disabled={disabled}\n placeholder=\"e.g. -0.25\"\n onChange={(s) => patch({ targetRefractionOD: s })}\n />\n </td>\n <td className=\"emr-biometry-eye min-w-0 px-2 py-2\">\n <Inp\n value={v.targetRefractionOS}\n disabled={disabled}\n placeholder=\"e.g. -0.25\"\n onChange={(s) => patch({ targetRefractionOS: s })}\n />\n </td>\n </tr>\n <tr>\n <td className={paramCell}>Formula</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <select\n value={v.formula}\n disabled={disabled}\n onChange={(e) => patch({ formula: e.target.value })}\n className=\"box-border w-full min-w-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n >\n {FORMULA_OPTIONS.map((opt) => (\n <option key={opt} value={opt}>\n {opt}\n </option>\n ))}\n </select>\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} align-top`}>Method</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <div\n role=\"radiogroup\"\n aria-label=\"Biometry method\"\n className=\"flex w-full flex-wrap items-center justify-center gap-x-3 gap-y-2 text-[11px] sm:gap-x-4 sm:text-xs\"\n >\n {METHODS.map(({ value: mv, label }) => (\n <label key={mv} className=\"flex min-w-0 shrink-0 cursor-pointer items-center gap-1.5\">\n <input\n type=\"radio\"\n name={`${fieldId}-biom-method`}\n value={mv}\n checked={v.method === mv}\n disabled={disabled}\n onChange={() => patch({ method: mv })}\n className=\"shrink-0\"\n />\n <span className=\"min-w-0 whitespace-nowrap leading-tight\">{label}</span>\n </label>\n ))}\n </div>\n </td>\n </tr>\n <tr>\n <td className={`${paramCell} align-top text-muted-foreground`}>Optional workup</td>\n <td className=\"min-w-0 px-2 py-2 align-middle\" colSpan={2}>\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex flex-wrap items-center justify-center gap-x-4 gap-y-2 sm:justify-between\">\n <label className=\"inline-flex min-w-0 cursor-pointer items-center gap-1.5 text-[11px] leading-snug sm:text-xs\">\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={v.cornealTopoUploaded}\n disabled={disabled}\n onChange={(e) => patch({ cornealTopoUploaded: e.target.checked })}\n />\n <span>Corneal topography uploaded</span>\n </label>\n <label className=\"inline-flex min-w-0 cursor-pointer items-center gap-1.5 text-[11px] leading-snug sm:text-xs\">\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={v.specularMicroscopyDone}\n disabled={disabled}\n onChange={(e) => patch({ specularMicroscopyDone: e.target.checked })}\n />\n <span>Specular microscopy done</span>\n </label>\n </div>\n <div className=\"flex flex-wrap items-center justify-end gap-2 text-[11px] sm:text-xs\">\n <span className=\"shrink-0 text-muted-foreground\">Endothelial count:</span>\n <input\n value={v.endothelialCount}\n disabled={disabled}\n placeholder=\"cells/mm²\"\n onChange={(e) => patch({ endothelialCount: e.target.value })}\n className=\"box-border w-[5.5rem] min-w-0 shrink-0 rounded border border-input bg-background px-2 py-1 text-[11px] sm:text-xs\"\n />\n </div>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n {def.description && <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type { SurgicalRiskFlagsFieldDef, SurgicalRiskFlagsValue } from '../../core/types';\n\nconst RISKS = [\n 'Small pupil',\n 'Pseudoexfoliation',\n 'Diabetes',\n 'Shallow AC',\n 'Previous ocular surgery',\n 'Zonular weakness',\n 'Mature/white cataract',\n] as const;\n\ntype Eye = 'OD' | 'OS';\n\nconst DIABETES = 'Diabetes';\n\nfunction parseValue(raw: unknown): SurgicalRiskFlagsValue {\n const empty: SurgicalRiskFlagsValue = { OD: [], OS: [] };\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return empty;\n const o = raw as Record<string, unknown>;\n const arr = (x: unknown): string[] =>\n Array.isArray(x) ? x.filter((i): i is string => typeof i === 'string') : [];\n let OD = arr(o.OD);\n let OS = arr(o.OS);\n const odD = OD.includes(DIABETES);\n const osD = OS.includes(DIABETES);\n if (odD !== osD) {\n if (odD && !osD) OS = [...OS, DIABETES];\n else if (osD && !odD) OD = [...OD, DIABETES];\n }\n return { OD, OS };\n}\n\n/** Heuristic tier from number of flags checked for that eye. */\nfunction riskTierForCount(n: number): 'High' | 'Moderate' | 'Low' {\n if (n === 0) return 'Low';\n if (n <= 2) return 'Moderate';\n return 'High';\n}\n\nfunction tierBadgeClass(tier: 'High' | 'Moderate' | 'Low'): string {\n if (tier === 'High') return 'bg-red-600 text-white';\n if (tier === 'Moderate') return 'bg-amber-500 text-white';\n return 'bg-emerald-600 text-white';\n}\n\nconst DEFAULT_TITLE = 'Surgical Risk Flags (Stage 11)';\n\nfunction RiskCol({\n eye,\n value,\n disabled,\n onToggle,\n}: {\n eye: Eye;\n value: SurgicalRiskFlagsValue;\n disabled?: boolean;\n onToggle: (eye: Eye, risk: string) => void;\n}) {\n const selected = new Set(value[eye]);\n const tier = riskTierForCount(selected.size);\n\n return (\n <div className=\"min-w-0 flex-1\">\n <div className=\"mb-2 flex items-center justify-between gap-2\">\n <div className=\"text-xs font-semibold text-foreground\">\n {eye === 'OD' ? 'Right Eye (OD)' : 'Left Eye (OS)'}\n </div>\n <span\n className={cn(\n 'whitespace-nowrap rounded-full px-2 py-0.5 text-[11px] font-medium',\n tierBadgeClass(tier),\n )}\n >\n {tier} risk\n </span>\n </div>\n <div className=\"space-y-1.5\">\n {RISKS.map((r) => (\n <label\n key={r}\n className=\"flex cursor-pointer items-center gap-2 rounded px-2 py-1 text-xs hover:bg-muted/50\"\n >\n <input\n type=\"checkbox\"\n className=\"shrink-0\"\n checked={selected.has(r)}\n disabled={disabled}\n onChange={() => onToggle(eye, r)}\n />\n <span>{r}</span>\n </label>\n ))}\n </div>\n </div>\n );\n}\n\nexport const SurgicalRiskFlagsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'surgical_risk_flags') {\n return null;\n }\n\n const def = fieldDef as SurgicalRiskFlagsFieldDef;\n const v = parseValue(value);\n const title =\n (def.meta?.cardTitle as string | undefined)?.trim() ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const toggleRisk = (eye: Eye, risk: string) => {\n const next: SurgicalRiskFlagsValue = {\n OD: [...v.OD],\n OS: [...v.OS],\n };\n\n if (risk === DIABETES) {\n const had = next.OD.includes(DIABETES) || next.OS.includes(DIABETES);\n if (had) {\n next.OD = next.OD.filter((x) => x !== DIABETES);\n next.OS = next.OS.filter((x) => x !== DIABETES);\n } else {\n if (!next.OD.includes(DIABETES)) next.OD.push(DIABETES);\n if (!next.OS.includes(DIABETES)) next.OS.push(DIABETES);\n }\n setValue(next);\n return;\n }\n\n const list = next[eye];\n const i = list.indexOf(risk);\n if (i === -1) list.push(risk);\n else list.splice(i, 1);\n setValue(next);\n };\n\n return (\n <div\n id={`surgical-risk-flags-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-3 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold leading-tight text-foreground\">{title}</h3>\n\n <div className=\"flex gap-6\">\n <RiskCol eye=\"OD\" value={v} disabled={disabled} onToggle={toggleRisk} />\n <div className=\"w-px shrink-0 bg-border\" aria-hidden />\n <RiskCol eye=\"OS\" value={v} disabled={disabled} onToggle={toggleRisk} />\n </div>\n\n {def.description && <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Slider } from '../shadcn/slider';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SliderFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SliderWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'slider') return null;\n\n const def = fieldDef as SliderFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const step = def.step ?? 1;\n\n const raw = value == null || value === '' ? min : Number(value);\n const num = Number.isFinite(raw) ? Math.min(max, Math.max(min, raw)) : min;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(def);\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n <span className=\"ml-2 text-muted-foreground font-normal tabular-nums\">\n {num}/{max}\n </span>\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {labelEl}\n <Slider\n className={fieldControlClass(\n def,\n cn('py-1', showError && 'opacity-90 ring-1 ring-red-500 rounded'),\n )}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n value={[num]}\n onValueChange={(v) => {\n const n = v[0] ?? min;\n setValue(n);\n setTouched();\n }}\n aria-label={!showLabel ? `${def.label} ${num}/${max}` : undefined}\n />\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport type { GeneralSurgerySmartHistoryValue } from '../../core/generalSurgeryPathway';\nimport {\n formatGeneralSurgerySmartHistoryToNarrative,\n normalizeGeneralSurgerySmartHistory,\n} from '../../core/generalSurgeryPathway';\n\nconst CHIEF_CHIPS_FIELD = 'chief_complaints_chips';\n\n/** Free-text HOPC narrative; field id must match template `symptoms`. */\nconst GS_SYMPTOMS_FIELD = 'symptoms';\n\nconst SWELLING_OPTS: { value: string; label: string }[] = [\n { value: 'reducible_hernia', label: 'Reducible (hernia)' },\n { value: 'cough_impulse', label: 'Cough impulse' },\n { value: 'skin_changes', label: 'Skin changes' },\n];\n\nconst GI_OPTS: { value: string; label: string }[] = [\n { value: 'bleeding_pr', label: 'Bleeding PR' },\n { value: 'vomiting', label: 'Vomiting' },\n { value: 'haematemesis', label: 'Haematemesis' },\n];\n\nconst BREAST_OPTS: { value: string; label: string }[] = [\n { value: 'pain', label: 'Pain' },\n { value: 'fh_ca_breast', label: 'Family history of Ca breast' },\n];\n\nconst ANO_OPTS: { value: string; label: string }[] = [\n { value: 'pain_defecation', label: 'Pain during defecation' },\n { value: 'bleeding', label: 'Bleeding' },\n { value: 'constipation', label: 'Constipation' },\n { value: 'discharge', label: 'Discharge' },\n];\n\nconst THYROID_OPTS: { value: string; label: string }[] = [\n { value: 'dysphagia', label: 'Dysphagia' },\n { value: 'voice_change', label: 'Voice change' },\n { value: 'thyrotoxicosis', label: 'Thyrotoxicosis symptoms' },\n];\n\nconst SOCRATES_KEYS = [\n 'site',\n 'onset',\n 'character',\n 'radiation',\n 'associated',\n 'timing',\n 'exacerbating',\n] as const;\n\nfunction Panel({ title, children }: { title: string; children: React.ReactNode }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5 text-xs font-semibold text-slate-700\">\n {title}\n </div>\n <div className=\"p-3\">{children}</div>\n </div>\n );\n}\n\nfunction chipListFromRaw(raw: unknown): string[] {\n return Array.isArray(raw) ? raw.filter((x): x is string => typeof x === 'string') : [];\n}\n\nexport const GsSmartHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const hopcField = useField(GS_SYMPTOMS_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeGeneralSurgerySmartHistory(value), [value]);\n\n const chiefChipsRaw = state.values[CHIEF_CHIPS_FIELD];\n const chips = useMemo(() => chipListFromRaw(chiefChipsRaw), [chiefChipsRaw]);\n\n const [hopcNarrativeLocked, setHopcNarrativeLocked] = useState(false);\n\n useEffect(() => {\n if (hopcNarrativeLocked) return;\n const next = formatGeneralSurgerySmartHistoryToNarrative(\n normalizeGeneralSurgerySmartHistory(value),\n chips,\n );\n hopcField.setValue(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, chips, hopcNarrativeLocked]);\n\n const showPain = chips.includes('pain');\n const showSwelling = chips.includes('swelling_lump');\n const showGI = chips.includes('bleeding') || chips.includes('obstruction');\n const showBreast = chips.includes('breast');\n const showAno = chips.includes('anorectal');\n const showThyroid = chips.includes('thyroid');\n\n const update = (next: GeneralSurgerySmartHistoryValue) => {\n setValue(next);\n setTouched();\n };\n\n const setPain = (key: (typeof SOCRATES_KEYS)[number] | 'severity', v: string | number) => {\n if (key === 'severity') {\n const n = typeof v === 'number' ? v : Number(v);\n const sev = Number.isFinite(n) ? Math.min(10, Math.max(0, Math.round(n))) : 0;\n update({ ...safe, pain: { ...safe.pain, severity: sev } });\n return;\n }\n update({ ...safe, pain: { ...safe.pain, [key]: String(v) } });\n };\n\n const toggleArr = (section: 'swelling' | 'gi' | 'breast' | 'ano' | 'thyroid', val: string) => {\n if (section === 'swelling') {\n const a = safe.swelling.checks;\n const next = a.includes(val) ? a.filter((x) => x !== val) : [...a, val];\n update({ ...safe, swelling: { ...safe.swelling, checks: next } });\n } else if (section === 'gi') {\n const a = safe.gi.checks;\n const next = a.includes(val) ? a.filter((x) => x !== val) : [...a, val];\n update({ ...safe, gi: { ...safe.gi, checks: next } });\n } else if (section === 'breast') {\n const a = safe.breast.checks;\n const next = a.includes(val) ? a.filter((x) => x !== val) : [...a, val];\n update({ ...safe, breast: { ...safe.breast, checks: next } });\n } else if (section === 'ano') {\n const a = safe.ano.checks;\n const next = a.includes(val) ? a.filter((x) => x !== val) : [...a, val];\n update({ ...safe, ano: { ...safe.ano, checks: next } });\n } else {\n const a = safe.thyroid.checks;\n const next = a.includes(val) ? a.filter((x) => x !== val) : [...a, val];\n update({ ...safe, thyroid: { ...safe.thyroid, checks: next } });\n }\n };\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n\n <div className={bodyClass}>\n {showPain ? (\n <Panel title=\"SOCRATES — pain\">\n <div className=\"grid grid-cols-2 gap-2 md:grid-cols-4\">\n {SOCRATES_KEYS.map((k) => (\n <div key={k} className=\"space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {k}\n </span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.pain[k]}\n onChange={(e) => setPain(k, e.target.value)}\n disabled={disabled}\n />\n </div>\n ))}\n <div className=\"space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Severity 0–10\n </span>\n <Input\n type=\"number\"\n min={0}\n max={10}\n className=\"h-8 text-xs\"\n value={safe.pain.severity}\n onChange={(e) => setPain('severity', e.target.value)}\n disabled={disabled}\n />\n </div>\n </div>\n </Panel>\n ) : null}\n\n {showSwelling ? (\n <Panel title=\"Swelling history\">\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-3\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Duration</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.swelling.duration}\n onChange={(e) =>\n update({ ...safe, swelling: { ...safe.swelling, duration: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Size progression</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.swelling.sizeProgression}\n onChange={(e) =>\n update({ ...safe, swelling: { ...safe.swelling, sizeProgression: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Painful / painless</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.swelling.painfulPainless}\n onChange={(e) =>\n update({ ...safe, swelling: { ...safe.swelling, painfulPainless: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2\">\n {SWELLING_OPTS.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.swelling.checks.includes(o.value)}\n onCheckedChange={() => toggleArr('swelling', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </div>\n </Panel>\n ) : null}\n\n {showGI ? (\n <Panel title=\"GI history\">\n <div className=\"grid grid-cols-1 gap-2 text-xs md:grid-cols-3\">\n <label className=\"flex flex-col gap-1\">\n Appetite\n <Input\n className=\"h-8 text-xs\"\n value={safe.gi.appetite}\n onChange={(e) => update({ ...safe, gi: { ...safe.gi, appetite: e.target.value } })}\n disabled={disabled}\n />\n </label>\n <label className=\"flex flex-col gap-1\">\n Weight loss\n <Input\n className=\"h-8 text-xs\"\n value={safe.gi.weightLoss}\n onChange={(e) => update({ ...safe, gi: { ...safe.gi, weightLoss: e.target.value } })}\n disabled={disabled}\n />\n </label>\n <label className=\"flex flex-col gap-1\">\n Bowel habits\n <Input\n className=\"h-8 text-xs\"\n value={safe.gi.bowelHabits}\n onChange={(e) => update({ ...safe, gi: { ...safe.gi, bowelHabits: e.target.value } })}\n disabled={disabled}\n />\n </label>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2\">\n {GI_OPTS.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.gi.checks.includes(o.value)}\n onCheckedChange={() => toggleArr('gi', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </div>\n </Panel>\n ) : null}\n\n {showBreast ? (\n <Panel title=\"Breast history\">\n <div className=\"grid grid-cols-1 gap-2 text-xs md:grid-cols-2\">\n <label className=\"flex flex-col gap-1\">\n Lump duration\n <Input\n className=\"h-8 text-xs\"\n value={safe.breast.lumpDuration}\n onChange={(e) =>\n update({ ...safe, breast: { ...safe.breast, lumpDuration: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"flex flex-col gap-1\">\n Nipple discharge\n <Input\n className=\"h-8 text-xs\"\n value={safe.breast.nippleDischarge}\n onChange={(e) =>\n update({ ...safe, breast: { ...safe.breast, nippleDischarge: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2\">\n {BREAST_OPTS.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.breast.checks.includes(o.value)}\n onCheckedChange={() => toggleArr('breast', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </div>\n </Panel>\n ) : null}\n\n {showAno ? (\n <Panel title=\"Anorectal history\">\n <div className=\"grid grid-cols-1 gap-2 text-xs md:grid-cols-2\">\n {ANO_OPTS.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.ano.checks.includes(o.value)}\n onCheckedChange={() => toggleArr('ano', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </div>\n </Panel>\n ) : null}\n\n {showThyroid ? (\n <Panel title=\"Thyroid history\">\n <div className=\"grid grid-cols-1 gap-2 text-xs md:grid-cols-2\">\n <label className=\"flex flex-col gap-1 md:col-span-2\">\n Swelling duration\n <Input\n className=\"h-8 text-xs\"\n value={safe.thyroid.swellingDuration}\n onChange={(e) =>\n update({ ...safe, thyroid: { ...safe.thyroid, swellingDuration: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n </div>\n <div className=\"mt-3 flex flex-wrap gap-x-4 gap-y-2\">\n {THYROID_OPTS.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.thyroid.checks.includes(o.value)}\n onCheckedChange={() => toggleArr('thyroid', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </div>\n </Panel>\n ) : null}\n\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <Label className=\"text-xs font-semibold text-slate-700\">\n {hopcField.fieldDef?.label ?? 'History of presenting complaint'}\n </Label>\n <div className=\"flex items-center gap-2\">\n {hopcNarrativeLocked ? (\n <span className=\"rounded bg-amber-50 px-1.5 py-0.5 text-[10px] font-medium text-amber-900 ring-1 ring-amber-200/80\">\n You edited this summary. Use{\" \"}\n <span className=\"italic\">'Regenerate'</span>{\" \"}\n to update it from the form.\n </span>\n ) : null}\n {hopcNarrativeLocked ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 px-2 text-xs\"\n disabled={disabled || hopcField.disabled}\n onClick={() => {\n setHopcNarrativeLocked(false);\n hopcField.setValue(\n formatGeneralSurgerySmartHistoryToNarrative(\n normalizeGeneralSurgerySmartHistory(value),\n chips,\n ),\n );\n }}\n >\n Regenerate\n </Button>\n ) : null}\n </div>\n </div>\n {hopcNarrativeLocked ? (\n <p className=\"text-[10px] text-muted-foreground\">\n Edit this box anytime. Use Regenerate to replace with fresh text from the structured fields.\n </p>\n ) : null}\n <Textarea\n className=\"min-h-[88px] rounded-md border border-input bg-white text-sm\"\n placeholder=\"Onset, progression, associated symptoms, relevant negatives…\"\n value={\n typeof hopcField.value === 'string'\n ? hopcField.value\n : hopcField.value == null\n ? ''\n : String(hopcField.value)\n }\n onChange={(e) => {\n setHopcNarrativeLocked(true);\n hopcField.setValue(e.target.value);\n hopcField.setTouched();\n }}\n disabled={disabled || hopcField.disabled}\n />\n </div>\n\n </div>\n\n {showError ? <p className=\"px-3 pb-2 text-xs text-red-500\">{error}</p> : null}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { Button } from '../shadcn/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport type { GeneralSurgeryBreastExamSide, GeneralSurgeryExaminationValue } from '../../core/generalSurgeryPathway';\nimport {\n formatGeneralSurgeryExaminationToNarrative,\n normalizeGeneralSurgeryExamination,\n} from '../../core/generalSurgeryPathway';\n\n/** Free-text exam narrative; field id must match template `clinical_examination`. */\nconst GS_CLINICAL_EXAMINATION_FIELD = 'clinical_examination';\n\nconst GENERAL: { value: string; label: string }[] = [\n { value: 'pallor', label: 'Pallor' },\n { value: 'icterus', label: 'Icterus' },\n { value: 'cyanosis', label: 'Cyanosis' },\n { value: 'clubbing', label: 'Clubbing' },\n { value: 'lymphadenopathy', label: 'Lymphadenopathy' },\n { value: 'oedema', label: 'Oedema' },\n];\n\nconst REGIONS: { key: string; label: string }[] = [\n { key: 'abdomen', label: 'Abdomen' },\n { key: 'hernia', label: 'Hernia' },\n { key: 'breast', label: 'Breast' },\n { key: 'thyroid', label: 'Thyroid' },\n { key: 'anorectal', label: 'Anorectal' },\n { key: 'limb', label: 'Limb / varicose' },\n];\n\nconst ABD_INSP: { value: string; label: string }[] = [\n { value: 'distension', label: 'Distension' },\n { value: 'scars', label: 'Scars' },\n { value: 'visible_peristalsis', label: 'Visible peristalsis' },\n];\n\nconst ABD_PALP: { value: string; label: string }[] = [\n { value: 'tenderness', label: 'Tenderness' },\n { value: 'guarding', label: 'Guarding' },\n { value: 'rigidity', label: 'Rigidity' },\n { value: 'mass', label: 'Palpable mass' },\n];\n\nconst ABD_PERC: { value: string; label: string }[] = [\n { value: 'tympany', label: 'Tympany' },\n { value: 'shifting_dullness', label: 'Shifting dullness' },\n];\n\nfunction SubGroup({ title, children }: { title: string; children: React.ReactNode }) {\n return (\n <div className=\"space-y-2\">\n <p className=\"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground\">{title}</p>\n <div className=\"space-y-2\">{children}</div>\n </div>\n );\n}\n\nfunction RegionCard({ title, children }: { title: string; children: React.ReactNode }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5 text-xs font-semibold text-slate-700\">\n {title}\n </div>\n <div className=\"p-3\">{children}</div>\n </div>\n );\n}\n\nconst BREAST_TEXT_KEYS: { key: keyof Pick<\n GeneralSurgeryBreastExamSide,\n 'size' | 'quadrant' | 'tenderness' | 'fixity' | 'skinInvolvement' | 'consistency'\n>; label: string }[] = [\n { key: 'size', label: 'Size' },\n { key: 'quadrant', label: 'Quadrant' },\n { key: 'tenderness', label: 'Tenderness' },\n { key: 'fixity', label: 'Fixity' },\n { key: 'skinInvolvement', label: 'Skin involvement' },\n { key: 'consistency', label: 'Consistency' },\n];\n\nfunction BreastLumpColumn({\n title,\n data,\n onChange,\n disabled,\n}: {\n title: string;\n data: GeneralSurgeryBreastExamSide;\n onChange: (p: Partial<GeneralSurgeryBreastExamSide>) => void;\n disabled?: boolean;\n}) {\n return (\n <div className=\"space-y-2 rounded-md border border-[#D0D0D0] bg-slate-50/50 p-3\">\n <p className=\"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground\">{title}</p>\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {BREAST_TEXT_KEYS.map(({ key, label }) => (\n <label key={key} className=\"block\">\n <span className=\"mb-1 block font-medium\">{label}</span>\n <Input\n className=\"h-8 text-xs\"\n value={data[key]}\n onChange={(e) => onChange({ [key]: e.target.value })}\n disabled={disabled}\n />\n </label>\n ))}\n </div>\n <div className=\"flex flex-wrap gap-x-4 gap-y-2 pt-1\">\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={data.axillaryNodes}\n onCheckedChange={(c) => onChange({ axillaryNodes: c === true })}\n disabled={disabled}\n />\n Axillary nodes\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={data.nippleAreolarComplex}\n onCheckedChange={(c) => onChange({ nippleAreolarComplex: c === true })}\n disabled={disabled}\n />\n Nipple-areolar complex\n </label>\n </div>\n </div>\n );\n}\n\nexport const GsExaminationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const clinicalField = useField(GS_CLINICAL_EXAMINATION_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeGeneralSurgeryExamination(value), [value]);\n\n const [clinicalNarrativeLocked, setClinicalNarrativeLocked] = useState(false);\n\n useEffect(() => {\n if (clinicalNarrativeLocked) return;\n const next = formatGeneralSurgeryExaminationToNarrative(normalizeGeneralSurgeryExamination(value));\n clinicalField.setValue(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, clinicalNarrativeLocked]);\n\n const update = (next: GeneralSurgeryExaminationValue) => {\n setValue(next);\n setTouched();\n };\n\n const toggleIn = (arr: string[], val: string) =>\n arr.includes(val) ? arr.filter((x) => x !== val) : [...arr, val];\n\n const toggleGeneral = (val: string) => {\n update({ ...safe, general: toggleIn(safe.general, val) });\n };\n\n const toggleRegion = (key: string) => {\n update({ ...safe, regions: toggleIn(safe.regions, key) });\n };\n\n const toggleAbd = (key: 'inspection' | 'palpation' | 'percussion', val: string) => {\n update({\n ...safe,\n abdomen: { ...safe.abdomen, [key]: toggleIn(safe.abdomen[key], val) },\n });\n };\n\n if (!fieldDef) return null;\n\n const has = (r: string) => safe.regions.includes(r);\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n\n <div className={bodyClass}>\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5 text-xs font-semibold text-slate-700\">\n General examination\n </div>\n <div className=\"p-3\">\n <div className=\"grid grid-cols-2 gap-2 text-xs md:grid-cols-3 lg:grid-cols-6\">\n {GENERAL.map((g) => (\n <label key={g.value} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.general.includes(g.value)}\n onCheckedChange={() => toggleGeneral(g.value)}\n disabled={disabled}\n />\n {g.label}\n </label>\n ))}\n </div>\n </div>\n </div>\n\n <div>\n <p className=\"mb-2 text-xs font-semibold text-slate-700\">Regional examination — select region(s)</p>\n <div className=\"flex flex-wrap gap-2\">\n {REGIONS.map((r) => {\n const on = safe.regions.includes(r.key);\n return (\n <Button\n key={r.key}\n type=\"button\"\n size=\"sm\"\n variant={on ? 'default' : 'outline'}\n className=\"h-7 rounded-full px-3 text-xs\"\n onClick={() => toggleRegion(r.key)}\n disabled={disabled}\n >\n {r.label}\n </Button>\n );\n })}\n </div>\n </div>\n\n <div className=\"space-y-3\">\n {has('abdomen') ? (\n <RegionCard title=\"Abdomen — inspection · palpation · percussion · auscultation\">\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4\">\n <SubGroup title=\"Inspection\">\n {ABD_INSP.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.abdomen.inspection.includes(o.value)}\n onCheckedChange={() => toggleAbd('inspection', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </SubGroup>\n <SubGroup title=\"Palpation\">\n {ABD_PALP.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.abdomen.palpation.includes(o.value)}\n onCheckedChange={() => toggleAbd('palpation', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n <label className=\"mt-2 block text-xs\">\n <span className=\"mb-1 block font-medium\">Mass size / mobility</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.abdomen.massNotes}\n onChange={(e) =>\n update({ ...safe, abdomen: { ...safe.abdomen, massNotes: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n </SubGroup>\n <SubGroup title=\"Percussion\">\n {ABD_PERC.map((o) => (\n <label key={o.value} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.abdomen.percussion.includes(o.value)}\n onCheckedChange={() => toggleAbd('percussion', o.value)}\n disabled={disabled}\n />\n {o.label}\n </label>\n ))}\n </SubGroup>\n <SubGroup title=\"Auscultation\">\n <span className=\"mb-1 block text-xs font-medium\">Bowel sounds</span>\n <Select\n value={safe.abdomen.bowelSounds}\n onValueChange={(val) =>\n update({\n ...safe,\n abdomen: {\n ...safe.abdomen,\n bowelSounds: val as GeneralSurgeryExaminationValue['abdomen']['bowelSounds'],\n },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"Select…\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"normal\">Normal</SelectItem>\n <SelectItem value=\"up\">↑</SelectItem>\n <SelectItem value=\"down\">↓</SelectItem>\n <SelectItem value=\"absent\">Absent</SelectItem>\n </SelectContent>\n </Select>\n </SubGroup>\n </div>\n </RegionCard>\n ) : null}\n\n {has('hernia') ? (\n <RegionCard title=\"Hernia exam\">\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-4\">\n <label className=\"block\">\n <span className=\"mb-1 block font-medium\">Site</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.hernia.site}\n onChange={(e) => update({ ...safe, hernia: { ...safe.hernia, site: e.target.value } })}\n disabled={disabled}\n />\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.hernia.reducible}\n onCheckedChange={(c) =>\n update({ ...safe, hernia: { ...safe.hernia, reducible: c === true } })\n }\n disabled={disabled}\n />\n Reducible\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.hernia.coughImpulse}\n onCheckedChange={(c) =>\n update({ ...safe, hernia: { ...safe.hernia, coughImpulse: c === true } })\n }\n disabled={disabled}\n />\n Cough impulse\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.hernia.tenderness}\n onCheckedChange={(c) =>\n update({ ...safe, hernia: { ...safe.hernia, tenderness: c === true } })\n }\n disabled={disabled}\n />\n Tenderness\n </label>\n </div>\n </RegionCard>\n ) : null}\n\n {has('breast') ? (\n <RegionCard title=\"Breast exam\">\n <div className=\"grid grid-cols-1 gap-4 text-xs md:grid-cols-2\">\n <BreastLumpColumn\n title=\"Left breast\"\n data={safe.breast.left}\n onChange={(p) =>\n update({\n ...safe,\n breast: { ...safe.breast, left: { ...safe.breast.left, ...p } },\n })\n }\n disabled={disabled}\n />\n <BreastLumpColumn\n title=\"Right breast\"\n data={safe.breast.right}\n onChange={(p) =>\n update({\n ...safe,\n breast: { ...safe.breast, right: { ...safe.breast.right, ...p } },\n })\n }\n disabled={disabled}\n />\n </div>\n </RegionCard>\n ) : null}\n\n {has('thyroid') ? (\n <RegionCard title=\"Thyroid exam\">\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-4\">\n <label className=\"block\">\n <span className=\"mb-1 block font-medium\">Size</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.thyroid.size}\n onChange={(e) => update({ ...safe, thyroid: { ...safe.thyroid, size: e.target.value } })}\n disabled={disabled}\n />\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.thyroid.mobileDeglutition}\n onCheckedChange={(c) =>\n update({ ...safe, thyroid: { ...safe.thyroid, mobileDeglutition: c === true } })\n }\n disabled={disabled}\n />\n Mobile with deglutition\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.thyroid.nodules}\n onCheckedChange={(c) =>\n update({ ...safe, thyroid: { ...safe.thyroid, nodules: c === true } })\n }\n disabled={disabled}\n />\n Nodules\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.thyroid.cervicalNodes}\n onCheckedChange={(c) =>\n update({ ...safe, thyroid: { ...safe.thyroid, cervicalNodes: c === true } })\n }\n disabled={disabled}\n />\n Cervical lymph nodes\n </label>\n </div>\n </RegionCard>\n ) : null}\n\n {has('anorectal') ? (\n <RegionCard title=\"Anorectal exam\">\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-3\">\n <label className=\"block md:col-span-3\">\n <span className=\"mb-1 block font-medium\">Inspection findings</span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.anorectal.inspection}\n onChange={(e) =>\n update({ ...safe, anorectal: { ...safe.anorectal, inspection: e.target.value } })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.anorectal.dreDone}\n onCheckedChange={(c) =>\n update({ ...safe, anorectal: { ...safe.anorectal, dreDone: c === true } })\n }\n disabled={disabled}\n />\n DRE done\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.anorectal.proctoscopyDone}\n onCheckedChange={(c) =>\n update({ ...safe, anorectal: { ...safe.anorectal, proctoscopyDone: c === true } })\n }\n disabled={disabled}\n />\n Proctoscopy done\n </label>\n <div className=\"md:col-span-3\">\n <Label className=\"text-xs font-semibold\">DRE / proctoscopy notes</Label>\n <Textarea\n className=\"mt-1 min-h-[64px] text-sm\"\n placeholder=\"Sphincter tone, masses, prostate, bleeding…\"\n value={safe.anorectal.notes}\n onChange={(e) =>\n update({ ...safe, anorectal: { ...safe.anorectal, notes: e.target.value } })\n }\n disabled={disabled}\n />\n </div>\n </div>\n </RegionCard>\n ) : null}\n\n {has('limb') ? (\n <RegionCard title=\"Limb / varicose veins\">\n <div className=\"flex flex-wrap gap-x-4 gap-y-2 text-xs\">\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.limb.dilatedVeins}\n onCheckedChange={(c) =>\n update({ ...safe, limb: { ...safe.limb, dilatedVeins: c === true } })\n }\n disabled={disabled}\n />\n Dilated veins\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.limb.ulcer}\n onCheckedChange={(c) => update({ ...safe, limb: { ...safe.limb, ulcer: c === true } })}\n disabled={disabled}\n />\n Ulcer\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.limb.oedema}\n onCheckedChange={(c) => update({ ...safe, limb: { ...safe.limb, oedema: c === true } })}\n disabled={disabled}\n />\n Oedema\n </label>\n </div>\n </RegionCard>\n ) : null}\n </div>\n\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <Label className=\"text-xs font-semibold text-slate-700\">\n {clinicalField.fieldDef?.label ?? 'Clinical examination'}\n </Label>\n <div className=\"flex items-center gap-2\">\n {clinicalNarrativeLocked ? (\n <span className=\"rounded bg-amber-50 px-1.5 py-0.5 text-[10px] font-medium text-amber-900 ring-1 ring-amber-200/80\">\n You edited this summary. Use{\" \"}\n <span className=\"italic\">'Regenerate'</span>{\" \"}\n to update it from the form.\n </span>\n ) : null}\n {clinicalNarrativeLocked ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 px-2 text-xs\"\n disabled={disabled || clinicalField.disabled}\n onClick={() => {\n setClinicalNarrativeLocked(false);\n clinicalField.setValue(\n formatGeneralSurgeryExaminationToNarrative(normalizeGeneralSurgeryExamination(value)),\n );\n }}\n >\n Regenerate\n </Button>\n ) : null}\n </div>\n </div>\n {clinicalNarrativeLocked ? (\n <p className=\"text-[10px] text-muted-foreground\">\n Edit this box anytime. Use Regenerate to replace with fresh text from the structured examination.\n </p>\n ) : null}\n <Textarea\n className=\"min-h-[88px] rounded-md border border-input bg-white text-sm\"\n value={\n typeof clinicalField.value === 'string'\n ? clinicalField.value\n : clinicalField.value == null\n ? ''\n : String(clinicalField.value)\n }\n onChange={(e) => {\n setClinicalNarrativeLocked(true);\n clinicalField.setValue(e.target.value);\n clinicalField.setTouched();\n }}\n disabled={disabled || clinicalField.disabled}\n />\n </div>\n </div>\n\n {showError ? <p className=\"px-3 pb-2 text-xs text-red-500\">{error}</p> : null}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport {\n ALL_GS_CONDITIONS,\n GS_CONDITION_LABELS,\n GS_GRADE_DESCRIPTIONS,\n gsGradingRowVisible,\n normalizeGeneralSurgeryExamination,\n normalizeGeneralSurgeryGrading,\n type GeneralSurgeryConditionKey,\n type GeneralSurgeryGradingValue,\n} from '../../core/generalSurgeryPathway';\n\nconst CHIEF_CHIPS_FIELD = 'chief_complaints_chips';\n/** Examination field id on the GS template (regions drive grading unlock). */\nconst GS_EXAMINATION_FIELD = 'gs_examination';\n\nfunction chipList(state: { values: Record<string, unknown> }): string[] {\n const raw = state.values[CHIEF_CHIPS_FIELD];\n return Array.isArray(raw) ? raw.filter((x): x is string => typeof x === 'string') : [];\n}\n\nfunction regionList(state: { values: Record<string, unknown> }): string[] {\n const raw = state.values[GS_EXAMINATION_FIELD];\n const ex = normalizeGeneralSurgeryExamination(raw);\n return ex.regions;\n}\n\nexport const GsGradingWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeGeneralSurgeryGrading(value), [value]);\n\n const chips = useMemo(() => chipList(state), [state]);\n const regions = useMemo(() => regionList(state), [state]);\n\n const visibleRows = useMemo(() => {\n return ALL_GS_CONDITIONS.filter((c) =>\n gsGradingRowVisible(c, chips, regions, safe[c] ?? 0),\n );\n }, [chips, regions, safe]);\n\n const update = (next: GeneralSurgeryGradingValue) => {\n setValue(next);\n setTouched();\n };\n\n const setGrade = (cond: GeneralSurgeryConditionKey, gradeStr: string) => {\n const n = Math.min(5, Math.max(0, Math.round(Number(gradeStr)) || 0));\n update({ ...safe, [cond]: n });\n };\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n\n <div className={bodyClass}>\n {visibleRows.length === 0 ? (\n <div className=\"rounded-md border border-dashed border-[#D0D0D0] bg-white p-6 text-center text-xs text-muted-foreground\">\n No conditions to grade yet. Select a chief complaint category or pick an examination region.\n </div>\n ) : (\n <div className=\"overflow-x-auto rounded-md border border-[#D0D0D0]\">\n <table className=\"w-full min-w-[520px] border-collapse text-xs\">\n <thead>\n <tr className=\"border-b border-[#D0D0D0] bg-[#FEE8EC]/50\">\n <th className=\"px-3 py-2 text-left font-semibold text-slate-700\">Condition</th>\n <th className=\"w-24 px-2 py-2 font-semibold text-slate-700\">Grade</th>\n <th className=\"px-3 py-2 text-left font-semibold text-slate-700\">Description</th>\n </tr>\n </thead>\n <tbody className=\"bg-white\">\n {visibleRows.map((c) => {\n const g = safe[c] ?? 0;\n const desc = GS_GRADE_DESCRIPTIONS[c][g] ?? '—';\n return (\n <tr key={c} className=\"border-b border-[#D0D0D0]/80 last:border-0\">\n <td className=\"px-3 py-2 font-medium\">{GS_CONDITION_LABELS[c]}</td>\n <td className=\"px-2 py-1.5 align-middle\">\n <Select\n value={String(g)}\n onValueChange={(v) => setGrade(c, v)}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {[0, 1, 2, 3, 4, 5].map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n === 0 ? '—' : String(n)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </td>\n <td className=\"px-3 py-2 text-muted-foreground\">{desc}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n\n {showError ? <p className=\"px-3 pb-2 text-xs text-red-500\">{error}</p> : null}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Slider } from '../shadcn/slider';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { Input } from '../shadcn/input';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { PainScaleFlagsFieldDef, SelectOption } from '../../core/types';\nimport { normalizePainScaleFlags, type UrinePregnancyTest } from '../../core/painScaleFlags';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction isFlagSelected(selected: string[], optValue: unknown): boolean {\n return selected.some((v) => v === optValue || String(v) === String(optValue));\n}\n\nexport const PainScaleFlagsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'pain_scale_flags') return null;\n\n const def = fieldDef as PainScaleFlagsFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const step = def.step ?? 1;\n const flagOptions: SelectOption[] = def.options ?? [];\n\n const safe = useMemo(\n () => normalizePainScaleFlags(value, { min, max }),\n [value, min, max],\n );\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(def);\n\n const update = (next: { pain: number; flags: string[]; bp?: string; upt?: UrinePregnancyTest }) => {\n setValue(normalizePainScaleFlags(next, { min, max }));\n setTouched();\n };\n\n const toggleFlag = (optValue: unknown) => {\n const sel = safe.flags;\n const isSelected = isFlagSelected(sel, optValue);\n const nextFlags = isSelected\n ? sel.filter((v) => v !== optValue && String(v) !== String(optValue))\n : [...sel, String(optValue)];\n update({ pain: safe.pain, flags: nextFlags, bp: safe.bp, upt: safe.upt });\n };\n\n const setBp = (bp: string) => update({ pain: safe.pain, flags: safe.flags, bp, upt: safe.upt });\n const setUpt = (upt: UrinePregnancyTest) =>\n update({ pain: safe.pain, flags: safe.flags, bp: safe.bp, upt });\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={fieldWrapperClass(def, cn(wrapperClass, 'h-full min-h-0 flex flex-col'))}>\n {labelEl}\n {def.description && (\n <p className={fieldDescriptionClass(def, 'text-xs text-muted-foreground')}>\n {def.description}\n </p>\n )}\n\n <div className={cn(bodyClass, 'min-h-0 flex-1')}>\n <div className=\"min-w-0 space-y-3\">\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-slate-700\">\n Pain score (VAS)\n <span className=\"ml-2 font-normal tabular-nums text-muted-foreground\">\n {safe.pain}/{max}\n </span>\n </Label>\n <Slider\n className={cn('py-1', showError && 'rounded opacity-90 ring-1 ring-red-500')}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n value={[safe.pain]}\n onValueChange={(v) => {\n const n = v[0] ?? min;\n update({ pain: n, flags: safe.flags, bp: safe.bp, upt: safe.upt });\n }}\n />\n </div>\n\n {flagOptions.length > 0 ? (\n <div className=\"min-w-0 space-y-1.5\">\n <Label className=\"text-sm font-medium text-slate-700\">Triage flags</Label>\n <div className=\"flex flex-wrap gap-x-4 gap-y-2\">\n {flagOptions.map((opt) => (\n <div key={String(opt.value)} className=\"flex items-center gap-2\">\n <Checkbox\n id={`${fieldId}-flag-${String(opt.value)}`}\n checked={isFlagSelected(safe.flags, opt.value)}\n onCheckedChange={() => toggleFlag(opt.value)}\n disabled={disabled}\n />\n <Label\n htmlFor={`${fieldId}-flag-${String(opt.value)}`}\n className=\"cursor-pointer text-sm font-normal leading-none\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </div>\n </div>\n ) : null}\n\n {(def.showBp || def.showUpt) ? (\n <div className=\"grid grid-cols-1 gap-3 pt-1 sm:grid-cols-2\">\n {def.showBp ? (\n <div className=\"space-y-1\">\n <Label htmlFor={`${fieldId}-bp`} className=\"text-sm font-medium text-slate-700\">\n BP recorded\n </Label>\n <Input\n id={`${fieldId}-bp`}\n value={safe.bp ?? ''}\n onChange={(e) => setBp(e.target.value)}\n placeholder=\"e.g. 130/86\"\n disabled={disabled}\n className=\"h-8 text-xs\"\n />\n </div>\n ) : null}\n {def.showUpt ? (\n <div className=\"space-y-1\">\n <Label className=\"text-sm font-medium text-slate-700\">\n UPT (if reproductive age)\n </Label>\n <Select\n value={safe.upt ? safe.upt : 'none'}\n onValueChange={(val) =>\n setUpt(val === 'none' ? '' : (val as UrinePregnancyTest))\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Positive\">Positive</SelectItem>\n <SelectItem value=\"Negative\">Negative</SelectItem>\n <SelectItem value=\"Not done\">Not done</SelectItem>\n </SelectContent>\n </Select>\n </div>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { Button } from '../shadcn/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport type { UrologySmartHistoryValue } from '../../core/urologyPathway';\nimport {\n formatUrologySmartHistoryToSymptomsNarrative,\n normalizeUrologySmartHistory,\n urologyIpssBand,\n urologyIpssSevenTotal,\n} from '../../core/urologyPathway';\n\nconst CHIEF_CHIPS_FIELD = 'chief_complaints_chips';\nconst ACTIVE_SYNDROME_FIELD = 'uro_active_syndrome';\nconst CHIEF_TEXT_FIELD = 'chief_complaints';\nconst SYMPTOMS_FIELD = 'symptoms';\nconst DIAGNOSIS_FIELD = 'diagnosis';\nconst URO_DURATION_FIELD = 'uro_chief_duration';\nconst URO_ONSET_FIELD = 'uro_chief_onset';\nconst URO_PROGRESSION_FIELD = 'uro_chief_progression';\n\nconst SYNDROME_LABELS: Record<string, string> = {\n luts: 'LUTS / BPH',\n stone: 'Urolithiasis (stone)',\n haematuria: 'Haematuria',\n scrotal: 'Scrotal swelling',\n retention: 'Acute retention',\n ed_infertility: 'ED / Infertility',\n uti: 'UTI / infection',\n};\n\nfunction chipList(state: { values: Record<string, unknown> }): string[] {\n const raw = state.values[CHIEF_CHIPS_FIELD];\n return Array.isArray(raw) ? raw.filter((x): x is string => typeof x === 'string') : [];\n}\n\nfunction str(x: unknown): string {\n return typeof x === 'string' ? x : '';\n}\n\n/** Embedded chief fields often use `value: \"none\"` for \"—\"; do not merge that into `chief_complaints`. */\nfunction chiefOptionalFieldDisplay(x: unknown): string {\n const s = str(x).trim();\n if (!s || s.toLowerCase() === 'none') return '';\n return s;\n}\n\nfunction nonEmptyLines(lines: Array<string | undefined | null>): string[] {\n return lines.map((s) => (s ?? '').trim()).filter(Boolean);\n}\n\nconst IPSS_LABELS: Record<keyof UrologySmartHistoryValue['ipss'], string> = {\n incomplete: 'Incomplete emptying',\n frequency: 'Frequency (<2h)',\n intermittency: 'Intermittency',\n urgency: 'Urgency',\n weakStream: 'Weak stream',\n straining: 'Straining',\n nocturia: 'Nocturia (×/night)',\n};\n\nconst SOCRATES_KEYS = [\n 'site',\n 'onset',\n 'character',\n 'radiation',\n 'associated',\n 'timing',\n 'exacerbating',\n] as const;\n\nfunction Panel({\n title,\n right,\n children,\n}: {\n title: string;\n right?: React.ReactNode;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"overflow-hidden rounded-md border border-[#D0D0D0] bg-white\">\n <div className=\"flex items-center justify-between border-b border-[#D0D0D0] bg-[#FEE8EC]/50 px-3 py-1.5\">\n <span className=\"text-xs font-semibold text-slate-700\">{title}</span>\n {right}\n </div>\n <div className=\"p-3\">{children}</div>\n </div>\n );\n}\n\nexport const UrologySmartHistoryWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const hopcField = useField(SYMPTOMS_FIELD);\n const syndromeField = useField(ACTIVE_SYNDROME_FIELD);\n const { state } = useForm();\n const store = useFormStore();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeUrologySmartHistory(value), [value]);\n const chips = useMemo(() => chipList(state), [state]);\n\n const rawSyndrome = syndromeField.value ?? state.values[ACTIVE_SYNDROME_FIELD];\n const syndrome =\n typeof rawSyndrome === 'string' && rawSyndrome !== '' && rawSyndrome !== 'none'\n ? rawSyndrome\n : 'none';\n\n const showPain =\n chips.includes('pain abdomen flank') ||\n chips.includes('scrotal swelling pain') ||\n syndrome === 'stone' ||\n syndrome === 'scrotal';\n\n const showLUTS =\n syndrome === 'luts' ||\n syndrome === 'retention' ||\n chips.includes('frequency urgency') ||\n chips.includes('poor stream') ||\n chips.includes('acute retention');\n\n const showHaem = syndrome === 'haematuria' || chips.includes('haematuria');\n\n const showSex =\n syndrome === 'ed_infertility' ||\n chips.includes('erectile dysfunction') ||\n chips.includes('infertility concern');\n\n const update = (next: UrologySmartHistoryValue) => {\n setValue(next);\n setTouched();\n };\n\n const ipssTotal = urologyIpssSevenTotal(safe.ipss);\n const ipssBandLabel = urologyIpssBand(ipssTotal);\n const bandClass =\n ipssBandLabel === 'Severe'\n ? 'bg-red-500/15 text-red-700'\n : ipssBandLabel === 'Moderate'\n ? 'bg-amber-500/15 text-amber-800'\n : 'bg-emerald-500/15 text-emerald-800';\n\n const setSocrates = (key: (typeof SOCRATES_KEYS)[number] | 'severity', v: string | number) => {\n if (key === 'severity') {\n const n = typeof v === 'number' ? v : Number(v);\n const sev = Number.isFinite(n) ? Math.min(10, Math.max(0, Math.round(n))) : 0;\n update({ ...safe, socrates: { ...safe.socrates, severity: sev } });\n return;\n }\n update({ ...safe, socrates: { ...safe.socrates, [key]: String(v) } });\n };\n\n const setIpss = (key: keyof UrologySmartHistoryValue['ipss'], v: number) => {\n update({ ...safe, ipss: { ...safe.ipss, [key]: v } });\n };\n\n const [hopcNarrativeLocked, setHopcNarrativeLocked] = useState(false);\n\n useEffect(() => {\n if (hopcNarrativeLocked || disabled) return;\n const next = formatUrologySmartHistoryToSymptomsNarrative(normalizeUrologySmartHistory(value), {\n showPain,\n showLUTS,\n showHaem,\n showSex,\n });\n hopcField.setValue(next);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, hopcNarrativeLocked, showPain, showLUTS, showHaem, showSex, disabled]);\n\n useEffect(() => {\n if (disabled) return;\n const label = syndrome && syndrome !== 'none' ? SYNDROME_LABELS[syndrome] ?? syndrome : '';\n const prev = store.getFieldState(DIAGNOSIS_FIELD)?.value;\n const prevText = typeof prev === 'string' ? prev : '';\n\n const syndromeLabels = new Set(Object.values(SYNDROME_LABELS));\n const keptLines = prevText\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean)\n .filter((l) => !syndromeLabels.has(l));\n\n const nextLines = label ? [...keptLines, label] : keptLines;\n const next = nextLines.join('\\n');\n if (prevText.trim() === next.trim()) return;\n store.setValues({ [DIAGNOSIS_FIELD]: next }, { touch: false });\n }, [disabled, store, syndrome]);\n\n useEffect(() => {\n if (disabled) return;\n const duration = chiefOptionalFieldDisplay(state.values[URO_DURATION_FIELD]);\n const onset = chiefOptionalFieldDisplay(state.values[URO_ONSET_FIELD]);\n const progression = chiefOptionalFieldDisplay(state.values[URO_PROGRESSION_FIELD]);\n\n const prev = store.getFieldState(CHIEF_TEXT_FIELD)?.value;\n const prevText = typeof prev === 'string' ? prev : '';\n\n // `chief_complaints` is a chip-driven suggestion textarea (comma-separated tokens).\n // Keep it comma-delimited so chip toggling keeps working.\n const kept = prevText\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean)\n .filter((t) => {\n const lower = t.toLowerCase();\n return (\n !lower.startsWith('duration:') &&\n !lower.startsWith('onset:') &&\n !lower.startsWith('progression:')\n );\n });\n\n const extra = nonEmptyLines([\n duration ? `Duration: ${duration}` : '',\n onset ? `Onset: ${onset}` : '',\n progression ? `Progression: ${progression}` : '',\n ]);\n\n const next = [...kept, ...extra].join(', ').trim();\n if (prevText.trim() === next.trim()) return;\n store.setValues({ [CHIEF_TEXT_FIELD]: next }, { touch: false });\n }, [\n disabled,\n state.values[URO_DURATION_FIELD],\n state.values[URO_ONSET_FIELD],\n state.values[URO_PROGRESSION_FIELD],\n store,\n ]);\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n\n <div className={bodyClass}>\n <p className=\"text-[11px] text-muted-foreground\">\n Panels follow chief complaint chips and active syndrome (Clearsight SmartHistoryUro).\n </p>\n\n {showPain ? (\n <Panel title=\"SOCRATES — Pain (flank / suprapubic / testicular)\">\n <div className=\"grid grid-cols-2 gap-2 md:grid-cols-4\">\n {SOCRATES_KEYS.map((k) => (\n <div key={k} className=\"space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n {k}\n </span>\n <Input\n className=\"h-8 text-xs\"\n value={safe.socrates[k]}\n onChange={(e) => setSocrates(k, e.target.value)}\n placeholder={\n k === 'radiation'\n ? 'e.g. groin → ureteric'\n : k === 'character'\n ? 'colicky / dull'\n : ''\n }\n disabled={disabled}\n />\n </div>\n ))}\n <div className=\"space-y-1\">\n <span className=\"text-[10px] font-medium uppercase tracking-wide text-muted-foreground\">\n Severity 0–10\n </span>\n <Input\n type=\"number\"\n min={0}\n max={10}\n className=\"h-8 text-xs\"\n value={safe.socrates.severity}\n onChange={(e) => setSocrates('severity', e.target.value)}\n disabled={disabled}\n />\n </div>\n </div>\n </Panel>\n ) : null}\n\n {showLUTS ? (\n <Panel\n title=\"IPSS — International Prostate Symptom Score\"\n right={\n <span className={`rounded-full px-2 py-0.5 text-[10px] font-medium ${bandClass}`}>\n {ipssTotal}/35 — {ipssBandLabel}\n </span>\n }\n >\n <div className=\"grid grid-cols-2 gap-2 md:grid-cols-4\">\n {(Object.keys(IPSS_LABELS) as Array<keyof UrologySmartHistoryValue['ipss']>).map((k) => (\n <div key={k} className=\"space-y-1\">\n <span className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n {IPSS_LABELS[k]}\n </span>\n <Select\n value={String(safe.ipss[k])}\n onValueChange={(val) => setIpss(k, Number(val))}\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {[0, 1, 2, 3, 4, 5].map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ))}\n <div className=\"space-y-1\">\n <span className=\"text-[10px] uppercase tracking-wide text-muted-foreground\">\n QoL (0–6)\n </span>\n <Select\n value={String(safe.ipssQoL)}\n onValueChange={(val) =>\n update({ ...safe, ipssQoL: Math.min(6, Math.max(0, Number(val))) })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {[0, 1, 2, 3, 4, 5, 6].map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <p className=\"mt-2 text-[10px] text-muted-foreground\">\n Bands: 0–7 mild · 8–19 moderate · 20–35 severe.{' '}\n <span className=\"font-semibold text-foreground\">IPSS ≥ 20 → consider surgical intervention.</span>\n </p>\n </Panel>\n ) : null}\n\n {showHaem ? (\n <Panel title=\"Haematuria profile\">\n <div className=\"grid grid-cols-2 gap-3 text-xs md:grid-cols-4\">\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.haematuria.present}\n onCheckedChange={(c) =>\n update({\n ...safe,\n haematuria: { ...safe.haematuria, present: c === true },\n })\n }\n disabled={disabled}\n />\n Present\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Timing</span>\n <Select\n value={safe.haematuria.timing || 'none'}\n onValueChange={(val) =>\n update({\n ...safe,\n haematuria: { ...safe.haematuria, timing: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Initial\">Initial</SelectItem>\n <SelectItem value=\"Terminal\">Terminal</SelectItem>\n <SelectItem value=\"Total\">Total</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.haematuria.painful}\n onCheckedChange={(c) =>\n update({ ...safe, haematuria: { ...safe.haematuria, painful: c === true } })\n }\n disabled={disabled}\n />\n Painful\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.haematuria.clots}\n onCheckedChange={(c) =>\n update({ ...safe, haematuria: { ...safe.haematuria, clots: c === true } })\n }\n disabled={disabled}\n />\n Clots\n </label>\n </div>\n <p className=\"mt-2 text-[10px] text-red-600\">\n Painless haematuria = malignancy until proven otherwise.\n </p>\n </Panel>\n ) : null}\n\n {showSex ? (\n <Panel title=\"Sexual & reproductive history\">\n <div className=\"grid grid-cols-2 gap-3 text-xs md:grid-cols-4\">\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Erectile function</span>\n <Select\n value={safe.sexual.erectile || 'none'}\n onValueChange={(val) =>\n update({\n ...safe,\n sexual: { ...safe.sexual, erectile: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Normal\">Normal</SelectItem>\n <SelectItem value=\"Mild\">Mild</SelectItem>\n <SelectItem value=\"Moderate\">Moderate</SelectItem>\n <SelectItem value=\"Severe\">Severe</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Libido</span>\n <Select\n value={safe.sexual.libido || 'none'}\n onValueChange={(val) =>\n update({\n ...safe,\n sexual: { ...safe.sexual, libido: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Normal\">Normal</SelectItem>\n <SelectItem value=\"Reduced\">Reduced</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Ejaculation</span>\n <Select\n value={safe.sexual.ejaculation || 'none'}\n onValueChange={(val) =>\n update({\n ...safe,\n sexual: { ...safe.sexual, ejaculation: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Normal\">Normal</SelectItem>\n <SelectItem value=\"Premature\">Premature</SelectItem>\n <SelectItem value=\"Retrograde\">Retrograde</SelectItem>\n <SelectItem value=\"Anejaculation\">Anejaculation</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex flex-col gap-1\">\n <span className=\"font-medium\">Infertility (months)</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={safe.sexual.infertilityMonths}\n onChange={(e) =>\n update({\n ...safe,\n sexual: {\n ...safe.sexual,\n infertilityMonths: Math.max(0, Math.round(Number(e.target.value)) || 0),\n },\n })\n }\n disabled={disabled}\n />\n </label>\n </div>\n </Panel>\n ) : null}\n\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <Label className=\"text-xs font-semibold text-slate-700\">\n {hopcField.fieldDef?.label ?? 'History of presenting complaint'}\n </Label>\n <div className=\"flex items-center gap-2\">\n {hopcNarrativeLocked ? (\n <span className=\"rounded bg-amber-50 px-1.5 py-0.5 text-[10px] font-medium text-amber-900 ring-1 ring-amber-200/80\">\n You edited this summary. Use{' '}\n <span className=\"italic\">'Regenerate'</span> to update it from the form.\n </span>\n ) : null}\n {hopcNarrativeLocked ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 px-2 text-xs\"\n disabled={disabled || hopcField.disabled}\n onClick={() => {\n setHopcNarrativeLocked(false);\n hopcField.setValue(\n formatUrologySmartHistoryToSymptomsNarrative(\n normalizeUrologySmartHistory(value),\n { showPain, showLUTS, showHaem, showSex },\n ),\n );\n }}\n >\n Regenerate\n </Button>\n ) : null}\n </div>\n </div>\n {hopcNarrativeLocked ? (\n <p className=\"text-[10px] text-muted-foreground\">\n Edit this box anytime. Use Regenerate to replace with fresh text from the structured fields.\n </p>\n ) : null}\n <Textarea\n className=\"min-h-[88px] rounded-md border border-input bg-white text-sm\"\n placeholder=\"Auto-filled from chief complaints + smart history…\"\n value={\n typeof hopcField.value === 'string'\n ? hopcField.value\n : hopcField.value == null\n ? ''\n : String(hopcField.value)\n }\n onChange={(e) => {\n setHopcNarrativeLocked(true);\n hopcField.setValue(e.target.value);\n hopcField.setTouched();\n }}\n disabled={disabled || hopcField.disabled}\n />\n </div>\n </div>\n\n {showError ? <p className=\"px-3 pb-2 text-xs text-red-500\">{error}</p> : null}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { Button } from '../shadcn/button';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport type { UrologyExaminationValue } from '../../core/urologyPathway';\nimport {\n formatUrologyExaminationToClinicalExamination,\n normalizeUrologyExamination,\n} from '../../core/urologyPathway';\n\n/** Free-text exam narrative; field id must match template `clinical_examination`. */\nconst URO_CLINICAL_EXAMINATION_FIELD = 'clinical_examination';\n\ntype GeneralKey = keyof UrologyExaminationValue['general'];\ntype AbdomenKey = keyof UrologyExaminationValue['abdomen'];\ntype GuKey = keyof UrologyExaminationValue['gu'];\n\nconst GENERAL_ROWS: { key: GeneralKey; label: string }[] = [\n { key: 'pallor', label: 'Pallor (chronic dz)' },\n { key: 'oedema', label: 'Oedema (renal)' },\n { key: 'icterus', label: 'Icterus' },\n { key: 'lymphadenopathy', label: 'Lymphadenopathy' },\n];\n\nconst ABD_ROWS: { key: AbdomenKey; label: string }[] = [\n { key: 'distension', label: 'Distension' },\n { key: 'scars', label: 'Surgical scars' },\n { key: 'mass', label: 'Visible mass' },\n { key: 'kidneyPalpable', label: 'Kidney palpable' },\n { key: 'bladderPalpable', label: 'Bladder palpable' },\n { key: 'renalAngleTender', label: 'Renal angle tender' },\n { key: 'bladderDull', label: 'Bladder dullness (retention)' },\n];\n\nconst GU_ROWS: { key: GuKey; label: string }[] = [\n { key: 'meatusAbnormal', label: 'Meatus abnormal (hypospadias?)' },\n { key: 'phimosis', label: 'Phimosis / paraphimosis' },\n { key: 'lesions', label: 'Penile lesions / ulcers' },\n { key: 'scrotalSwelling', label: 'Scrotal swelling' },\n { key: 'transilluminant', label: 'Transilluminant' },\n { key: 'tenderTestis', label: 'Tender testis' },\n { key: 'hydrocele', label: 'Hydrocele' },\n { key: 'varicocele', label: 'Varicocele' },\n { key: 'suspiciousMass', label: 'Suspicious mass' },\n];\n\nconst DRE_CONSISTENCY = ['none', 'Soft (benign)', 'Firm', 'Hard / nodular (malignancy?)'] as const;\nconst DRE_SULCUS = ['none', 'Preserved', 'Obliterated'] as const;\n\nexport const UrologyExaminationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const clinicalField = useField(URO_CLINICAL_EXAMINATION_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeUrologyExamination(value), [value]);\n\n const [clinicalNarrativeLocked, setClinicalNarrativeLocked] = useState(false);\n\n useEffect(() => {\n if (clinicalNarrativeLocked || disabled) return;\n const norm = normalizeUrologyExamination(value);\n const next = formatUrologyExaminationToClinicalExamination(norm);\n clinicalField.setValue(next);\n if (norm.examinationNotes !== next) {\n setValue({ ...norm, examinationNotes: next });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, clinicalNarrativeLocked, disabled]);\n\n const bump = (next: UrologyExaminationValue) => {\n setValue(next);\n setTouched();\n };\n\n const toggleGeneral = (key: GeneralKey) => {\n bump({ ...safe, general: { ...safe.general, [key]: !safe.general[key] } });\n };\n\n const toggleAbdomen = (key: AbdomenKey) => {\n bump({ ...safe, abdomen: { ...safe.abdomen, [key]: !safe.abdomen[key] } });\n };\n\n const toggleGu = (key: GuKey) => {\n bump({ ...safe, gu: { ...safe.gu, [key]: !safe.gu[key] } });\n };\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n\n <div className={bodyClass}>\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-2 xl:grid-cols-4\">\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">General</p>\n {GENERAL_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.general[r.key]}\n onCheckedChange={() => toggleGeneral(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Abdomen</p>\n {ABD_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.abdomen[r.key]}\n onCheckedChange={() => toggleAbdomen(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">External genitalia / scrotum</p>\n {GU_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.gu[r.key]}\n onCheckedChange={() => toggleGu(r.key)}\n disabled={disabled}\n />\n {r.key === 'suspiciousMass' ? (\n <span className=\"font-medium text-red-600\">{r.label}</span>\n ) : (\n r.label\n )}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">DRE — Prostate</p>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.dre.done}\n onCheckedChange={(c) =>\n bump({ ...safe, dre: { ...safe.dre, done: c === true } })\n }\n disabled={disabled}\n />\n DRE performed\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block font-medium\">Estimated size (g)</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={safe.dre.sizeGrams}\n onChange={(e) => {\n const n = Number(e.target.value);\n bump({\n ...safe,\n dre: {\n ...safe.dre,\n sizeGrams: Number.isFinite(n) && n >= 0 ? Math.round(n) : 0,\n },\n });\n }}\n disabled={disabled}\n />\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block font-medium\">Consistency</span>\n <Select\n value={safe.dre.consistency || 'none'}\n onValueChange={(val) =>\n bump({\n ...safe,\n dre: { ...safe.dre, consistency: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n {DRE_CONSISTENCY.map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt === 'none' ? '—' : opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"block\">\n <span className=\"mb-1 block font-medium\">Median sulcus</span>\n <Select\n value={safe.dre.medianSulcus || 'none'}\n onValueChange={(val) =>\n bump({\n ...safe,\n dre: { ...safe.dre, medianSulcus: val === 'none' ? '' : val },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n {DRE_SULCUS.map((opt) => (\n <SelectItem key={opt} value={opt}>\n {opt === 'none' ? '—' : opt}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.dre.tenderness}\n onCheckedChange={(c) =>\n bump({ ...safe, dre: { ...safe.dre, tenderness: c === true } })\n }\n disabled={disabled}\n />\n Tender (prostatitis?)\n </label>\n </div>\n </div>\n\n <div className=\"space-y-1\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <Label className=\"text-xs font-semibold text-slate-700\">\n {clinicalField.fieldDef?.label ?? 'Clinical examination'}\n </Label>\n <div className=\"flex items-center gap-2\">\n {clinicalNarrativeLocked ? (\n <span className=\"rounded bg-amber-50 px-1.5 py-0.5 text-[10px] font-medium text-amber-900 ring-1 ring-amber-200/80\">\n You edited this summary. Use{' '}\n <span className=\"italic\">'Regenerate'</span> to update it from the form.\n </span>\n ) : null}\n {clinicalNarrativeLocked ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className=\"h-7 shrink-0 px-2 text-xs\"\n disabled={disabled || clinicalField.disabled}\n onClick={() => {\n setClinicalNarrativeLocked(false);\n const norm = normalizeUrologyExamination(value);\n clinicalField.setValue(formatUrologyExaminationToClinicalExamination(norm));\n }}\n >\n Regenerate\n </Button>\n ) : null}\n </div>\n </div>\n {clinicalNarrativeLocked ? (\n <p className=\"text-[10px] text-muted-foreground\">\n Edit this box anytime. Use Regenerate to replace with fresh text from the structured\n examination.\n </p>\n ) : null}\n <Textarea\n className=\"min-h-[88px] rounded-md border border-input bg-white text-sm\"\n placeholder=\"Auto-filled from selections above…\"\n value={\n typeof clinicalField.value === 'string'\n ? clinicalField.value\n : clinicalField.value == null\n ? ''\n : String(clinicalField.value)\n }\n onChange={(e) => {\n setClinicalNarrativeLocked(true);\n const t = e.target.value;\n clinicalField.setValue(t);\n clinicalField.setTouched();\n setValue({ ...safe, examinationNotes: t });\n setTouched();\n }}\n disabled={disabled || clinicalField.disabled}\n />\n </div>\n </div>\n\n {showError ? <p className=\"px-3 pb-2 text-xs text-red-500\">{error}</p> : null}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Checkbox } from '../shadcn/checkbox';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport type { UrologyPathwayRisk, UrologyPathwayValue } from '../../core/urologyPathway';\nimport { normalizeUrologyPathway } from '../../core/urologyPathway';\n\nconst RISK_ROWS: { key: keyof UrologyPathwayRisk; label: string }[] = [\n { key: 'ckd', label: 'Chronic kidney disease' },\n { key: 'diabetes', label: 'Diabetes' },\n { key: 'anticoagulants', label: 'Anticoagulants' },\n { key: 'activeInfection', label: 'Active infection' },\n];\n\nexport const UrologyPathwayWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeUrologyPathway(value), [value]);\n\n const update = (next: UrologyPathwayValue) => {\n setValue(next);\n setTouched();\n };\n\n const setNum = (key: keyof Pick<UrologyPathwayValue, 'stoneSizeMm' | 'prostateVolumeCc' | 'psaNgMl' | 'uroflowQmaxMlSec'>, raw: string) => {\n const n = Number(raw);\n const v = Number.isFinite(n) && n >= 0 ? n : 0;\n if (key === 'stoneSizeMm') {\n update({ ...safe, stoneSizeMm: Math.round(v) });\n return;\n }\n update({ ...safe, [key]: v });\n };\n\n const toggleRisk = (key: keyof UrologyPathwayRisk) => {\n update({\n ...safe,\n risk: { ...safe.risk, [key]: !safe.risk[key] },\n });\n };\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const subtitle =\n fieldDef.meta && typeof fieldDef.meta === 'object' && fieldDef.meta !== null\n ? String((fieldDef.meta as { subtitle?: unknown }).subtitle ?? '')\n : '';\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-4 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n {subtitle ? (\n <p className=\"px-3 pt-2 text-[11px] text-muted-foreground\">{subtitle}</p>\n ) : null}\n\n <div className={bodyClass}>\n {showError ? <p className=\"text-xs text-red-600\">{error}</p> : null}\n\n <div className=\"grid grid-cols-1 gap-3 md:grid-cols-2\">\n <label className=\"block space-y-1 text-xs\">\n <span className=\"font-medium\">Stone size (mm)</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={safe.stoneSizeMm}\n onChange={(e) => setNum('stoneSizeMm', e.target.value)}\n disabled={disabled}\n />\n </label>\n <label className=\"flex items-center gap-2 pt-6 text-xs\">\n <Checkbox\n checked={safe.hydronephrosis}\n onCheckedChange={(c) => update({ ...safe, hydronephrosis: c === true })}\n disabled={disabled}\n />\n Hydronephrosis on imaging\n </label>\n <label className=\"block space-y-1 text-xs\">\n <span className=\"font-medium\">Prostate volume (cc)</span>\n <Input\n type=\"number\"\n min={0}\n step={0.1}\n className=\"h-8 text-xs\"\n value={safe.prostateVolumeCc}\n onChange={(e) => setNum('prostateVolumeCc', e.target.value)}\n disabled={disabled}\n />\n </label>\n <label className=\"block space-y-1 text-xs\">\n <span className=\"font-medium\">PSA (ng/mL)</span>\n <Input\n type=\"number\"\n min={0}\n step={0.01}\n className=\"h-8 text-xs\"\n value={safe.psaNgMl}\n onChange={(e) => setNum('psaNgMl', e.target.value)}\n disabled={disabled}\n />\n </label>\n <label className=\"block space-y-1 text-xs md:col-span-2\">\n <span className=\"font-medium\">Uroflow Qmax (mL/s)</span>\n <Input\n type=\"number\"\n min={0}\n step={0.1}\n className=\"h-8 text-xs\"\n value={safe.uroflowQmaxMlSec}\n onChange={(e) => setNum('uroflowQmaxMlSec', e.target.value)}\n disabled={disabled}\n />\n </label>\n </div>\n\n <div className=\"space-y-2 border-t border-muted-foreground/20 pt-3\">\n <p className=\"text-xs font-semibold text-slate-800\">Risk stratification</p>\n <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n {RISK_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2 text-xs\">\n <Checkbox\n checked={safe.risk[r.key]}\n onCheckedChange={() => toggleRisk(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport {\n normalizeObgExamination,\n obgExaminationChipLabels,\n obgExaminationFromChipLabels,\n OBG_EXAM_ALLOWED_CHIP_LABELS,\n type ObgExaminationValue,\n type ObgUterusSize,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst CLINICAL_EXAMINATION_FIELD = 'clinical_examination';\n\ntype GeneralKey = keyof ObgExaminationValue['general'];\ntype AbdomenKey = keyof ObgExaminationValue['abdomen'];\ntype BreastKey = keyof ObgExaminationValue['breast'];\ntype PelvicKey = keyof ObgExaminationValue['pelvic'];\n\nconst GENERAL_ROWS: { key: GeneralKey; label: string }[] = [\n { key: 'pallor', label: 'Pallor' },\n { key: 'oedema', label: 'Oedema' },\n { key: 'thyroid', label: 'Thyroid' },\n { key: 'hirsutism', label: 'Hirsutism' },\n { key: 'acanthosis', label: 'Acanthosis' },\n];\n\nconst ABDOMEN_ROWS: { key: AbdomenKey; label: string }[] = [\n { key: 'surgicalScars', label: 'Surgical scars' },\n { key: 'massTenderness', label: 'Mass / tenderness' },\n];\n\nconst BREAST_ROWS: { key: BreastKey; label: string }[] = [\n { key: 'lump', label: 'Lump' },\n { key: 'nippleDischarge', label: 'Nipple discharge' },\n { key: 'skinChanges', label: 'Skin changes' },\n { key: 'axillaryNodes', label: 'Axillary nodes' },\n];\n\nconst PELVIC_ROWS: { key: PelvicKey; label: string }[] = [\n { key: 'speculumDone', label: 'Speculum done' },\n { key: 'discharge', label: 'Discharge' },\n { key: 'cervicalErosion', label: 'Cervical erosion' },\n { key: 'cervicalGrowth', label: 'Cervical growth' },\n { key: 'activeBleeding', label: 'Active bleeding' },\n { key: 'bimanualDone', label: 'Bimanual done' },\n { key: 'adnexalMass', label: 'Adnexal mass' },\n { key: 'cmt', label: 'Cervical motion tenderness' },\n];\n\nconst UTERUS_OPTIONS: { value: ObgUterusSize; label: string }[] = [\n { value: '', label: '—' },\n { value: 'Normal', label: 'Normal' },\n { value: 'Bulky', label: 'Bulky' },\n { value: 'Enlarged', label: 'Enlarged' },\n];\n\nexport const OBGExaminationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const clinicalField = useField(CLINICAL_EXAMINATION_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeObgExamination(value), [value]);\n\n // Tracks user-owned prose (anything above the chip line). When the prose\n // matches what we last auto-wrote (or is empty), structured updates may\n // refresh it. Once the user types, prose is preserved and only the chip\n // line is kept in sync.\n const lastAutoProseRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (lastAutoProseRef.current !== null) return;\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n if (prose === '') lastAutoProseRef.current = '';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const writeClinical = (next: ObgExaminationValue) => {\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const lastAutoProse = lastAutoProseRef.current;\n const proseInput =\n curProse === '' || curProse === lastAutoProse ? '' : curProse;\n const composed = composeProseAndChips(proseInput, obgExaminationChipLabels(next));\n if (composed !== cur) clinicalField.setValue(composed);\n if (proseInput === '' || proseInput === lastAutoProse) {\n lastAutoProseRef.current = '';\n }\n return composed;\n };\n\n const bump = (next: ObgExaminationValue) => {\n if (disabled) {\n setValue(next);\n setTouched();\n return;\n }\n const composed = writeClinical(next);\n setValue({ ...next, examinationNotes: composed });\n setTouched();\n };\n\n const onClinicalChange = (raw: string) => {\n clinicalField.setValue(raw);\n clinicalField.setTouched();\n if (disabled) return;\n const { prose, chips } = parseProseAndChipTokens(raw, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const rebuilt = obgExaminationFromChipLabels(chips, raw);\n setValue(rebuilt);\n setTouched();\n lastAutoProseRef.current = prose === '' ? '' : '\\u0000USER\\u0000';\n };\n\n const toggleGeneral = (key: GeneralKey) =>\n bump({ ...safe, general: { ...safe.general, [key]: !safe.general[key] } });\n const toggleAbdomen = (key: AbdomenKey) =>\n bump({ ...safe, abdomen: { ...safe.abdomen, [key]: !safe.abdomen[key] } });\n const toggleBreast = (key: BreastKey) =>\n bump({ ...safe, breast: { ...safe.breast, [key]: !safe.breast[key] } });\n const togglePelvic = (key: PelvicKey) => {\n const nextPelvic = { ...safe.pelvic, [key]: !safe.pelvic[key] };\n const nextUterus: ObgUterusSize = !nextPelvic.bimanualDone ? '' : safe.uterusSize;\n bump({ ...safe, pelvic: nextPelvic, uterusSize: nextUterus });\n };\n const setUterusSize = (val: ObgUterusSize) => bump({ ...safe, uterusSize: val });\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n {fieldDef.description ? (\n <p className=\"px-3 pt-2 text-[11px] text-muted-foreground\">{fieldDef.description}</p>\n ) : null}\n\n <div className={bodyClass}>\n {showError ? <p className=\"text-xs text-red-600\">{error}</p> : null}\n\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-2 xl:grid-cols-4\">\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">General</p>\n {GENERAL_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.general[r.key]}\n onCheckedChange={() => toggleGeneral(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Abdomen</p>\n {ABDOMEN_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.abdomen[r.key]}\n onCheckedChange={() => toggleAbdomen(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n <p className=\"text-[10px] text-muted-foreground\">\n Pregnancy → fundal ht / FHR / lie captured in Antenatal pathway.\n </p>\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Breast</p>\n {BREAST_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.breast[r.key]}\n onCheckedChange={() => toggleBreast(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Pelvic (consent applied)</p>\n {PELVIC_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.pelvic[r.key]}\n onCheckedChange={() => togglePelvic(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n {safe.pelvic.bimanualDone ? (\n <label className=\"block pt-1\">\n <span className=\"mb-1 block font-medium\">Uterus size (on bimanual)</span>\n <Select\n value={safe.uterusSize === '' ? 'none' : safe.uterusSize}\n onValueChange={(v) =>\n setUterusSize(v === 'none' ? '' : (v as ObgUterusSize))\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n {UTERUS_OPTIONS.map((opt) => (\n <SelectItem key={opt.value || 'none'} value={opt.value === '' ? 'none' : opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n </div>\n </div>\n\n <div className=\"space-y-1 border-t border-[#D0D0D0] pt-3\">\n <Label className=\"text-sm font-medium\">\n {clinicalField.fieldDef?.label ?? 'Clinical examination'}\n </Label>\n <Textarea\n className=\"min-h-[80px] text-xs\"\n placeholder=\"Free text on top lines; ticked findings appear as comma-separated chips on the last line. Removing a chip unticks it.\"\n value={\n typeof clinicalField.value === 'string'\n ? clinicalField.value\n : clinicalField.value == null\n ? ''\n : String(clinicalField.value)\n }\n onChange={(e) => onClinicalChange(e.target.value)}\n disabled={disabled || clinicalField.disabled}\n />\n </div>\n </div>\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Input } from '../shadcn/input';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport {\n normalizeObgPathway,\n obgZonesFromChipLabels,\n OBG_ZONE_ALLOWED_CHIP_LABELS,\n OBG_ZONE_ORDER,\n obgZoneLabel,\n type ObgPathwayValue,\n type ObgZone,\n} from '../../core/obgPathway';\nimport { parseProseAndChipTokens } from '../../core/suggestionTokens';\nimport { ChipRow, Panel } from './_obgPanels';\nimport { useObgSymptomsSync } from './_obgSymptomsSync';\n\nexport const OBGPathwayWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const { writeSymptoms, symptomsField } = useObgSymptomsSync();\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeObgPathway(value), [value]);\n\n const update = (next: ObgPathwayValue) => {\n const prev = safe;\n setValue(next);\n setTouched();\n writeSymptoms(prev, next);\n };\n\n const onSymptomsChange = (raw: string) => {\n symptomsField.setValue(raw);\n symptomsField.setTouched();\n if (disabled) return;\n const { chips } = parseProseAndChipTokens(raw, OBG_ZONE_ALLOWED_CHIP_LABELS);\n const nextZones = obgZonesFromChipLabels(chips);\n const sameZones =\n nextZones.length === safe.zones.length &&\n nextZones.every((z, i) => safe.zones[i] === z);\n if (!sameZones) {\n const nextValue: ObgPathwayValue = { ...safe, zones: nextZones };\n setValue(nextValue);\n setTouched();\n }\n };\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n const hasZone = (z: ObgZone) => safe.zones.includes(z);\n const toggleZone = (z: ObgZone) =>\n update({\n ...safe,\n zones: hasZone(z)\n ? safe.zones.filter((x) => x !== z)\n : OBG_ZONE_ORDER.filter((x) => x === z || hasZone(x)),\n });\n\n // ── Menstrual ──\n const m = safe.menstrual;\n const setMenstrual = (patch: Partial<typeof m>) =>\n update({ ...safe, menstrual: { ...m, ...patch } });\n\n // ── Gynae ──\n const gSym = safe.gynae.symptoms;\n const toggleGynae = (key: keyof typeof gSym) =>\n update({ ...safe, gynae: { symptoms: { ...gSym, [key]: !gSym[key] } } });\n\n // ── Infertility ──\n const inf = safe.infertility;\n const setInfertility = (patch: Partial<typeof inf>) =>\n update({ ...safe, infertility: { ...inf, ...patch } });\n\n // ── Post-op ──\n const po = safe.postop;\n const setPostop = (patch: Partial<typeof po>) =>\n update({ ...safe, postop: { ...po, ...patch } });\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n {fieldDef.description ? (\n <p className=\"px-3 pt-2 text-[11px] text-muted-foreground\">{fieldDef.description}</p>\n ) : null}\n\n <div className={bodyClass}>\n {showError ? <p className=\"text-xs text-red-600\">{error}</p> : null}\n\n <div className=\"space-y-1\">\n <Label className=\"text-sm font-medium\">\n Primary concern (Consultant zone — multi-select)\n </Label>\n <div className=\"flex flex-wrap gap-2\">\n {OBG_ZONE_ORDER.map((z) => {\n const on = hasZone(z);\n return (\n <button\n key={z}\n type=\"button\"\n onClick={() => toggleZone(z)}\n disabled={disabled}\n aria-pressed={on}\n className={cn(\n 'rounded-full border px-3 py-1 text-[11px] transition-colors',\n on\n ? 'border-rose-500 bg-rose-50 text-rose-700'\n : 'border-slate-300 bg-white text-slate-600 hover:bg-slate-50',\n )}\n >\n {obgZoneLabel(z)}\n </button>\n );\n })}\n </div>\n </div>\n\n {/* MENSTRUAL */}\n {hasZone('menstrual_reproductive') ? (\n <Panel title=\"Menstrual & reproductive history\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-4\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Menarche (age)</span>\n <Input\n type=\"number\"\n min={5}\n max={25}\n className=\"h-8 text-xs\"\n value={m.menarcheAge}\n onChange={(e) => setMenstrual({ menarcheAge: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Cycle (days)</span>\n <Input\n type=\"number\"\n min={0}\n max={120}\n className=\"h-8 text-xs\"\n value={m.cycleLength}\n onChange={(e) => setMenstrual({ cycleLength: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Flow (days)</span>\n <Input\n type=\"number\"\n min={0}\n max={30}\n className=\"h-8 text-xs\"\n value={m.flowDays}\n onChange={(e) => setMenstrual({ flowDays: Number(e.target.value) || 0 })}\n disabled={disabled}\n />\n </label>\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={m.cycleRegular}\n onCheckedChange={(c) => setMenstrual({ cycleRegular: c === true })}\n disabled={disabled}\n />\n <span>Regular cycle</span>\n </label>\n\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Amount of flow</span>\n <Select\n value={m.amount === '' ? 'none' : m.amount}\n onValueChange={(v) =>\n setMenstrual({ amount: v === 'none' ? '' : (v as typeof m.amount) })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Scanty\">Scanty</SelectItem>\n <SelectItem value=\"Normal\">Normal</SelectItem>\n <SelectItem value=\"Heavy\">Heavy</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Dysmenorrhea</span>\n <Select\n value={String(m.dysmenorrhea)}\n onValueChange={(v) =>\n setMenstrual({ dysmenorrhea: (Number(v) as 0 | 1 | 2 | 3) ?? 0 })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"0\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"0\">0 — none</SelectItem>\n <SelectItem value=\"1\">1 — mild</SelectItem>\n <SelectItem value=\"2\">2 — moderate</SelectItem>\n <SelectItem value=\"3\">3 — severe</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">LMP</span>\n <Input\n type=\"date\"\n className=\"h-8 text-xs\"\n value={m.lmp}\n onChange={(e) => setMenstrual({ lmp: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Menopause status</span>\n <Select\n value={m.menopauseStatus === '' ? 'none' : m.menopauseStatus}\n onValueChange={(v) =>\n setMenstrual({\n menopauseStatus: v === 'none' ? '' : (v as typeof m.menopauseStatus),\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Pre\">Pre</SelectItem>\n <SelectItem value=\"Peri\">Peri</SelectItem>\n <SelectItem value=\"Post\">Post</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n ) : null}\n\n {/* GYNAE */}\n {hasZone('gynaecological') ? (\n <Panel title=\"Gynaecological symptoms\">\n <ChipRow\n options={[\n { key: 'aub', label: 'Abnormal uterine bleeding' },\n { key: 'whiteDischarge', label: 'White discharge' },\n { key: 'pelvicPain', label: 'Pelvic pain' },\n { key: 'dyspareunia', label: 'Dyspareunia' },\n { key: 'urinaryComplaints', label: 'Urinary complaints' },\n { key: 'prolapse', label: 'Prolapse' },\n ]}\n selected={gSym as unknown as Record<string, boolean>}\n onToggle={(k) => toggleGynae(k as keyof typeof gSym)}\n disabled={disabled}\n />\n </Panel>\n ) : null}\n\n {/* INFERTILITY */}\n {hasZone('infertility') ? (\n <div className=\"space-y-3\">\n <Panel title=\"Infertility profile\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Type</span>\n <Select\n value={inf.type === '' ? 'none' : inf.type}\n onValueChange={(v) =>\n setInfertility({ type: v === 'none' ? '' : (v as typeof inf.type) })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Primary\">Primary</SelectItem>\n <SelectItem value=\"Secondary\">Secondary</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Duration (months)</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={inf.durationMonths}\n onChange={(e) =>\n setInfertility({ durationMonths: Number(e.target.value) || 0 })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-1\">\n <span className=\"block font-medium\">Previous treatments</span>\n <Input\n className=\"h-8 text-xs\"\n placeholder=\"IUI ×2, OI cycles…\"\n value={inf.previousTreatments}\n onChange={(e) => setInfertility({ previousTreatments: e.target.value })}\n disabled={disabled}\n />\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Female partner evaluation\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Ovulation status</span>\n <Select\n value={inf.female.ovulation === '' ? 'none' : inf.female.ovulation}\n onValueChange={(v) =>\n setInfertility({\n female: {\n ...inf.female,\n ovulation: (v === 'none' ? '' : v) as typeof inf.female.ovulation,\n },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Ovulatory\">Ovulatory</SelectItem>\n <SelectItem value=\"Anovulatory\">Anovulatory</SelectItem>\n <SelectItem value=\"Unknown\">Unknown</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={inf.female.pcosFeatures}\n onCheckedChange={(c) =>\n setInfertility({\n female: { ...inf.female, pcosFeatures: c === true },\n })\n }\n disabled={disabled}\n />\n <span>PCOS features</span>\n </label>\n <label className=\"flex items-end gap-2 pb-1\">\n <Checkbox\n checked={inf.female.endometriosisSuspicion}\n onCheckedChange={(c) =>\n setInfertility({\n female: { ...inf.female, endometriosisSuspicion: c === true },\n })\n }\n disabled={disabled}\n />\n <span>Endometriosis suspicion</span>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Male partner details\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Age</span>\n <Input\n type=\"number\"\n min={0}\n className=\"h-8 text-xs\"\n value={inf.male.age}\n onChange={(e) =>\n setInfertility({ male: { ...inf.male, age: Number(e.target.value) || 0 } })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Semen analysis</span>\n <Select\n value={inf.male.semenAnalysis === '' ? 'none' : inf.male.semenAnalysis}\n onValueChange={(v) =>\n setInfertility({\n male: {\n ...inf.male,\n semenAnalysis: (v === 'none' ? '' : v) as typeof inf.male.semenAnalysis,\n },\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Normal\">Normal</SelectItem>\n <SelectItem value=\"Abnormal\">Abnormal</SelectItem>\n <SelectItem value=\"Pending\">Pending</SelectItem>\n </SelectContent>\n </Select>\n </label>\n </div>\n </Panel>\n\n <Panel title=\"Investigations\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n {(\n [\n { key: 'amh', label: 'AMH' },\n { key: 'fshLh', label: 'FSH / LH' },\n { key: 'prolactin', label: 'Prolactin' },\n { key: 'tsh', label: 'TSH' },\n { key: 'tvs', label: 'TVS findings' },\n { key: 'hsg', label: 'HSG findings' },\n ] as const\n ).map((row) => (\n <label key={row.key} className=\"space-y-1\">\n <span className=\"block font-medium\">{row.label}</span>\n <Input\n className=\"h-8 text-xs\"\n value={inf.investigations[row.key]}\n onChange={(e) =>\n setInfertility({\n investigations: { ...inf.investigations, [row.key]: e.target.value },\n })\n }\n disabled={disabled}\n />\n </label>\n ))}\n </div>\n </Panel>\n </div>\n ) : null}\n\n {/* POST-OP */}\n {hasZone('postoperative') ? (\n <Panel title=\"Post-operative follow-up\">\n <div className=\"grid grid-cols-2 gap-3 md:grid-cols-3\">\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Date of surgery</span>\n <Input\n type=\"date\"\n className=\"h-8 text-xs\"\n value={po.surgeryDate}\n onChange={(e) => setPostop({ surgeryDate: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-2\">\n <span className=\"block font-medium\">Procedure performed</span>\n <Input\n className=\"h-8 text-xs\"\n value={po.procedure}\n onChange={(e) => setPostop({ procedure: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-2\">\n <span className=\"block font-medium\">Histopathology result</span>\n <Input\n className=\"h-8 text-xs\"\n value={po.histopathology}\n onChange={(e) => setPostop({ histopathology: e.target.value })}\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Wound status</span>\n <Select\n value={po.woundStatus === '' ? 'none' : po.woundStatus}\n onValueChange={(v) =>\n setPostop({\n woundStatus: (v === 'none' ? '' : v) as typeof po.woundStatus,\n })\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">—</SelectItem>\n <SelectItem value=\"Healthy\">Healthy</SelectItem>\n <SelectItem value=\"Erythema\">Erythema</SelectItem>\n <SelectItem value=\"Discharge\">Discharge</SelectItem>\n <SelectItem value=\"Dehisced\">Dehisced</SelectItem>\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1\">\n <span className=\"block font-medium\">Pain score (0-10)</span>\n <Input\n type=\"number\"\n min={0}\n max={10}\n className=\"h-8 text-xs\"\n value={po.painScore}\n onChange={(e) =>\n setPostop({\n painScore: Math.max(0, Math.min(10, Number(e.target.value) || 0)),\n })\n }\n disabled={disabled}\n />\n </label>\n <label className=\"space-y-1 md:col-span-3\">\n <span className=\"block font-medium\">Complications</span>\n <Textarea\n className=\"min-h-[60px] text-xs\"\n value={po.complications}\n onChange={(e) => setPostop({ complications: e.target.value })}\n disabled={disabled}\n />\n </label>\n </div>\n </Panel>\n ) : null}\n\n <div className=\"space-y-1 border-t border-[#D0D0D0] pt-3\">\n <Label className=\"text-sm font-medium\">\n {symptomsField.fieldDef?.label ?? 'History of Presenting Complaint'}\n </Label>\n <Textarea\n className=\"min-h-[70px] text-xs\"\n placeholder={\n safe.zones.length > 0\n ? 'Free text on top lines; selected zones appear as comma-separated chips on the last line. Removing a chip closes its panel.'\n : 'Free-text history, or select pathway zones above to add chips on the last line.'\n }\n value={\n typeof symptomsField.value === 'string'\n ? symptomsField.value\n : symptomsField.value == null\n ? ''\n : String(symptomsField.value)\n }\n onChange={(e) => onSymptomsChange(e.target.value)}\n disabled={disabled || symptomsField.disabled}\n />\n </div>\n </div>\n </div>\n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype SendStatus = 'idle' | 'sending' | 'sent' | 'error';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\nexport const PhoneInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled, value: fieldValue } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Drive the input directly from the store so the value survives remounts\n // (e.g. completed step collapsing into an accordion and re-expanding).\n const rawPhone = (fieldValue as string) ?? '';\n\n // On remount (step collapses then re-expands), local state resets to defaults.\n // Seed from the store: 10 digits + no error means OTP was already sent successfully.\n const wasAlreadySent = rawPhone.length === 10 && !error;\n\n const [status, setStatus] = useState<SendStatus>(wasAlreadySent ? 'sent' : 'idle');\n const [resendCooldown, setResendCooldown] = useState(0);\n const [resendError, setResendError] = useState('');\n\n const hasSentRef = useRef(wasAlreadySent);\n const sentPhoneRef = useRef(wasAlreadySent ? rawPhone : '');\n const isSendingRef = useRef(false);\n const isResendingRef = useRef(false);\n\n // Suppress \"Sending OTP...\" from appearing as a red error; show spinner instead.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'sending' &&\n status !== 'sent';\n\n // Resend cooldown tick.\n useEffect(() => {\n if (resendCooldown <= 0) return;\n const t = setTimeout(() => setResendCooldown((c) => Math.max(0, c - 1)), 1000);\n return () => clearTimeout(t);\n }, [resendCooldown]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 10-digit mobile number';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 10);\n\n // If user edits after a successful send, re-lock step 1 and clear any verified OTP.\n if (hasSentRef.current && digits !== sentPhoneRef.current) {\n hasSentRef.current = false;\n sentPhoneRef.current = '';\n setStatus('idle');\n setResendCooldown(0);\n setResendError('');\n store.setExternalError(fieldId, 'Send OTP to continue');\n\n // Clear the linked OTP field so a stale verified value can't survive a phone change.\n const otpFieldId = (fieldDef.meta as any)?.otpFieldId as string | undefined;\n if (otpFieldId) {\n store.setValue(otpFieldId, '');\n store.setExternalError(otpFieldId, 'Verify OTP to continue');\n }\n }\n\n store.setValue(fieldId, digits);\n\n if (digits.length === 10 && !hasSentRef.current && !isSendingRef.current) {\n sendOtp(digits);\n }\n };\n\n const sendOtp = async (phone: string) => {\n if (isSendingRef.current) return;\n isSendingRef.current = true;\n setStatus('sending');\n store.setExternalError(fieldId, 'Sending OTP...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const sendPath = authCfg?.sendPath ?? '/api/auth/otp/send/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${sendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${phone}` }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n hasSentRef.current = true;\n sentPhoneRef.current = phone;\n setStatus('sent');\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n store.setExternalError(fieldId, null);\n } else {\n setStatus('error');\n store.setExternalError(fieldId, data.error ?? 'Failed to send OTP. Please try again.');\n }\n } catch {\n setStatus('error');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n } finally {\n isSendingRef.current = false;\n }\n };\n\n const handleResend = async () => {\n if (isResendingRef.current || resendCooldown > 0) return;\n isResendingRef.current = true;\n setResendError('');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const resendPath = authCfg?.resendPath ?? '/api/auth/otp/resend/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${resendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${rawPhone}`, retrytype: 'text' }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n setResendError('');\n } else {\n setResendError(data.error ?? 'Failed to resend OTP. Please try again.');\n }\n } catch {\n setResendError('Network error. Please try again.');\n } finally {\n isResendingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={rawPhone}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'sending'}\n placeholder={placeholder}\n maxLength={10}\n className={fieldControlClass(\n fieldDef,\n cn(\n showError && 'border-red-500',\n status === 'sent' && 'border-green-500 pr-9',\n status === 'sending' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'sending' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'sent' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'sent' && (\n <p className=\"text-xs text-green-600\">OTP sent to +91{rawPhone}</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n\n {status === 'sent' && (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>Didn't receive it?</span>\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={resendCooldown > 0}\n className={cn(\n 'underline transition-colors',\n resendCooldown > 0\n ? 'opacity-40 cursor-not-allowed'\n : 'text-primary hover:text-primary/80 cursor-pointer',\n )}\n >\n {resendCooldown > 0 ? `Resend in ${resendCooldown}s` : 'Resend OTP'}\n </button>\n </div>\n )}\n\n {resendError && (\n <p className=\"text-xs text-red-500\">{resendError}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype VerifyStatus = 'idle' | 'verifying' | 'verified' | 'failed';\n\nexport const OtpInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Resolve which field holds the phone number (via meta or default \"phone\").\n const phoneFieldId: string =\n (fieldDef?.meta as any)?.phoneFieldId ?? 'phone';\n\n // Subscribe to phone field reactively — needed for verify API call.\n const { value: phoneValue } = useField(phoneFieldId);\n const phone = (phoneValue as string) ?? '';\n\n // Always send E.164 to the API regardless of what's stored in the form.\n const e164Phone = phone.startsWith('+') ? phone : `+91${phone}`;\n\n const [otp, setOtp] = useState('');\n const [status, setStatus] = useState<VerifyStatus>('idle');\n\n const isVerifyingRef = useRef(false);\n\n // Suppress \"Verifying...\" from showing as a red error — spinner handles that.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'verifying' &&\n status !== 'verified';\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 4-digit OTP';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 4);\n\n // Reset to idle if user re-enters after a failed attempt.\n if (status === 'failed') {\n setStatus('idle');\n store.setExternalError(fieldId, null);\n }\n\n setOtp(digits);\n store.setValue(fieldId, digits);\n\n if (digits.length === 4 && !isVerifyingRef.current) {\n verifyOtp(digits);\n }\n };\n\n const verifyOtp = async (code: string) => {\n if (isVerifyingRef.current) return;\n isVerifyingRef.current = true;\n setStatus('verifying');\n store.setExternalError(fieldId, 'Verifying...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const verifyPath = authCfg?.verifyPath ?? '/api/auth/otp/verify/';\n const res = await fetch(`${base}${verifyPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: e164Phone, otp_code: code }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setStatus('verified');\n store.setExternalError(fieldId, null);\n store.setValue(fieldId, {\n verified: true as const,\n phone: e164Phone,\n code,\n ...(data?.verification_token ? { token: data.verification_token } : {}),\n });\n } else {\n setStatus('failed');\n const msg = data.error ?? 'Invalid OTP. Please try again.';\n store.setExternalError(fieldId, msg);\n setOtp('');\n store.setValue(fieldId, '');\n }\n } catch {\n setStatus('failed');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n setOtp('');\n store.setValue(fieldId, '');\n } finally {\n isVerifyingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={otp}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'verifying' || status === 'verified'}\n placeholder={placeholder}\n maxLength={4}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'tracking-widest text-center text-lg',\n showError && 'border-red-500',\n status === 'verified' && 'border-green-500 pr-9',\n status === 'verifying' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'verifying' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'verified' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'verified' && (\n <p className=\"text-xs text-green-600\">Mobile number verified successfully</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { cn } from '../core/utils';\nimport { useField } from './useField';\nimport { TextWidget } from '../ui/widgets/Text';\nimport { RichTextWidget } from '../ui/widgets/RichTextWidget';\nimport { SelectWidget } from '../ui/widgets/Select';\nimport { MultiSelectWidget } from '../ui/widgets/MultiSelect';\nimport { RepeatableWidget } from '../ui/widgets/Repeatable';\nimport { DateWidget } from '../ui/widgets/DateWidget';\nimport { DateTimeWidget } from '../ui/widgets/DateTimeWidget';\nimport { ImageUploadWidget } from '../ui/widgets/ImageUpload';\nimport { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { FormFileUploadWidget } from '../ui/widgets/FormFileUpload';\nimport { EditableTableWidget } from '../ui/widgets/EditableTable';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { AddMedicationWidget } from '../ui/widgets/AddMedicationWidget';\nimport { AddInvestigationWidget } from '../ui/widgets/AddInvestigationWidget';\nimport { AddProcedureWidget } from '../ui/widgets/AddProcedureWidget';\nimport { DifferentialDiagnosisWidget } from '../ui/widgets/DifferentialDiagnosisWidget';\nimport { VitalsWidget } from '../ui/widgets/VitalsWidget';\nimport { HiddenVitalsWidget } from '../ui/widgets/HiddenVitalsWidget';\nimport { ReferralWidget } from '../ui/widgets/ReferralWidget';\nimport { FollowupWidget } from '../ui/widgets/FollowupWidget';\nimport { SmartTextareaWidget } from '../ui/widgets/SmartTextarea';\nimport { DiagnosisTextareaWidget } from '../ui/widgets/DiagnosisTextareaWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { ObstetricHistoryWidget } from '../ui/widgets/ObstetricHistoryWidget';\nimport { OphthalmologyWidget } from '../ui/widgets/OphthalmologyWidget';\nimport { OphthalDiagnosisWidget } from '../ui/widgets/OphthalDiagnosisWidget';\nimport { OrthopedicExamWidget } from '../ui/widgets/OrthopedicExamWidget';\nimport { MarMedicationOrdersWidget } from '../ui/widgets/MarMedicationOrdersWidget';\nimport { DischargeMedicationOrdersWidget } from '../ui/widgets/DischargeMedicationOrdersWidget';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\nimport { SuggestionTextareaWidget } from '../ui/widgets/SuggestionTextareaWidget';\nimport { LensAssessmentWidget } from '../ui/widgets/LensAssessmentWidget';\nimport { FunctionalImpairmentScoreWidget } from '../ui/widgets/FunctionalImpairmentScoreWidget';\nimport { BiometryIolWorkupWidget } from '../ui/widgets/BiometryIolWorkupWidget';\nimport { SurgicalRiskFlagsWidget } from '../ui/widgets/SurgicalRiskFlagsWidget';\nimport { SliderWidget } from '../ui/widgets/SliderWidget';\nimport { GsSmartHistoryWidget } from '../ui/widgets/GsSmartHistoryWidget';\nimport { GsExaminationWidget } from '../ui/widgets/GsExaminationWidget';\nimport { GsGradingWidget } from '../ui/widgets/GsGradingWidget';\nimport { PainScaleFlagsWidget } from '../ui/widgets/PainScaleFlagsWidget';\nimport { UrologySmartHistoryWidget } from '../ui/widgets/UrologySmartHistoryWidget';\nimport { UrologyExaminationWidget } from '../ui/widgets/UrologyExaminationWidget';\nimport { UrologyPathwayWidget } from '../ui/widgets/UrologyPathwayWidget';\nimport { OBGExaminationWidget } from '../ui/widgets/OBGExaminationWidget';\nimport { OBGPathwayWidget } from '../ui/widgets/OBGPathwayWidget';\nimport { PhoneInputWidget } from '../ui/widgets/PhoneInputWidget';\nimport { OtpInputWidget } from '../ui/widgets/OtpInputWidget';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from './fieldStyle';\n\ninterface FieldRendererProps {\n fieldId: string;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({ fieldId }) => {\n const { fieldDef, visible } = useField(fieldId);\n\n if (!visible || !fieldDef) {\n return null;\n }\n\n return renderWidget(fieldId, fieldDef);\n};\n\nfunction renderWidget(fieldId: string, fieldDef: FieldDef) {\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n return <TextWidget fieldId={fieldId} />;\n\n case 'slider':\n return <SliderWidget fieldId={fieldId} />;\n \n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return <MarMedicationOrdersWidget fieldId={fieldId} />;\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return <RichTextWidget fieldId={fieldId} />;\n \n case 'date':\n return <DateWidget fieldId={fieldId} />;\n \n case 'datetime':\n return <DateTimeWidget fieldId={fieldId} />;\n \n case 'select':\n return <SelectWidget fieldId={fieldId} />;\n \n case 'radio':\n return <RadioWidget fieldId={fieldId} />;\n \n case 'checkbox':\n return <CheckboxWidget fieldId={fieldId} />;\n \n case 'multiselect':\n return <MultiSelectWidget fieldId={fieldId} />;\n \n case 'repeatable':\n return <RepeatableWidget fieldId={fieldId} />;\n \n case 'image_upload':\n return <ImageUploadWidget fieldId={fieldId} />;\n\n case 'media_upload':\n return <MediaUploadWidget fieldId={fieldId} />;\n\n case 'file_upload':\n return <FormFileUploadWidget fieldId={fieldId} />;\n \n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return <EditableTableWidget fieldId={fieldId} />;\n\n case 'medications':\n return <AddMedicationWidget fieldId={fieldId} />;\n\n case 'discharge_medication_orders':\n return <DischargeMedicationOrdersWidget fieldId={fieldId} />;\n\n case 'investigations':\n return <AddInvestigationWidget fieldId={fieldId} />;\n\n case 'procedures':\n return <AddProcedureWidget fieldId={fieldId} />;\n\n case 'differential_diagnosis':\n return <DifferentialDiagnosisWidget fieldId={fieldId} />;\n\n case 'vitals':\n return <VitalsWidget fieldId={fieldId} />;\n\n case 'hidden_vitals':\n return <HiddenVitalsWidget fieldId={fieldId} />;\n\n case 'referral':\n return <ReferralWidget fieldId={fieldId} />;\n\n case 'followup':\n return <FollowupWidget fieldId={fieldId} />;\n\n case 'smart_textarea':\n return <SmartTextareaWidget fieldId={fieldId} />;\n\n case 'diagnosis_textarea':\n return <DiagnosisTextareaWidget fieldId={fieldId} />;\n\n case 'obstetric_history':\n return <ObstetricHistoryWidget fieldId={fieldId} />;\n\n case 'eye_prescription':\n return <OphthalmologyWidget fieldId={fieldId} />;\n\n case 'ophthal_diagnosis':\n return <OphthalDiagnosisWidget fieldId={fieldId} />;\n case 'orthopedic_exam':\n return <OrthopedicExamWidget fieldId={fieldId} />;\n\n case 'general_surgery_smart_history':\n return <GsSmartHistoryWidget fieldId={fieldId} />;\n\n case 'general_surgery_examination':\n return <GsExaminationWidget fieldId={fieldId} />;\n\n case 'general_surgery_grading':\n return <GsGradingWidget fieldId={fieldId} />;\n\n case 'pain_scale_flags':\n return <PainScaleFlagsWidget fieldId={fieldId} />;\n\n case 'urology_smart_history':\n return <UrologySmartHistoryWidget fieldId={fieldId} />;\n\n case 'urology_examination':\n return <UrologyExaminationWidget fieldId={fieldId} />;\n\n case 'urology_pathway':\n return <UrologyPathwayWidget fieldId={fieldId} />;\n\n case 'obg_examination':\n return <OBGExaminationWidget fieldId={fieldId} />;\n\n case 'obg_pathway':\n return <OBGPathwayWidget fieldId={fieldId} />;\n\n case 'phone_input':\n return <PhoneInputWidget fieldId={fieldId} />;\n\n case 'otp_input':\n return <OtpInputWidget fieldId={fieldId} />;\n\n case 'toggle': {\n const { value, setValue, setTouched, disabled } = useField(fieldId);\n const store = useFormStore();\n const excludes = (fieldDef as ToggleFieldDef).excludes ?? [];\n const showLabel = isLabelVisible(fieldDef);\n return (\n <div className={fieldWrapperClass(fieldDef, 'flex items-center gap-3')}>\n <Switch\n checked={value === true}\n disabled={disabled}\n onCheckedChange={(checked) => {\n setValue(checked);\n setTouched();\n if (checked) excludes.forEach((id) => store.setValue(id, false));\n }}\n />\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n 'text-sm font-medium leading-none cursor-pointer select-none',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n </div>\n );\n }\n case 'suggestion_textarea':\n case 'complaint_chips':\n return <SuggestionTextareaWidget fieldId={fieldId} />;\n\n case 'lens_assessment':\n return <LensAssessmentWidget fieldId={fieldId} />;\n\n case 'functional_impairment_score':\n return <FunctionalImpairmentScoreWidget fieldId={fieldId} />;\n\n case 'biometry_iol_workup':\n return <BiometryIolWorkupWidget fieldId={fieldId} />;\n\n case 'surgical_risk_flags':\n return <SurgicalRiskFlagsWidget fieldId={fieldId} />;\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div\n className={fieldWrapperClass(\n def,\n cn(labelClass, 'text-muted-foreground'),\n )}\n >\n {def.label}\n {def.description && (\n <p className={fieldDescriptionClass(def, cn('mt-1', descClass, 'opacity-90'))}>\n {def.description}\n </p>\n )}\n </div>\n );\n }\n\n default:\n return <div className=\"text-red-500\">Unknown field type: {fieldDef.type}</div>;\n }\n};\n","import React, { useState } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\ninterface SectionProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport const Section: React.FC<SectionProps> = ({ title, children }) => {\n const [expanded, setExpanded] = useState(true);\n\n const handleToggle = () => setExpanded((prev) => !prev);\n\n const contentClassName = cn(\n 'overflow-hidden transition-[height] duration-200 ease-in-out',\n !expanded && 'hidden'\n );\n\n return (\n <div className=\"mb-6 border rounded-lg bg-white shadow-sm overflow-hidden\">\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center justify-between gap-2 p-4 text-left border-b hover:bg-gray-50/80 transition-colors\"\n >\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <span className=\"flex-shrink-0 text-muted-foreground\" aria-hidden>\n {expanded ? (\n <ChevronDown className=\"h-5 w-5\" />\n ) : (\n <ChevronRight className=\"h-5 w-5\" />\n )}\n </span>\n </button>\n <div className={contentClassName}>\n <div className=\"p-4 pt-4 space-y-4 border-t-0\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface ColumnLayoutProps {\n /** Number of columns. Children take equal width. */\n columns: number;\n /** Optional label shown above the row of fields. */\n label?: string;\n children: React.ReactNode;\n}\n\nexport const ColumnLayout: React.FC<ColumnLayoutProps> = ({\n columns,\n label,\n children,\n}) => {\n const gridCols = Math.max(1, Math.min(columns, 12));\n const gridClass = `grid gap-4 w-full`;\n const style = {\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n };\n\n return (\n <div className=\"mb-6\">\n {label != null && label !== '' && (\n <div className=\"mb-2 text-sm font-medium text-gray-700\">{label}</div>\n )}\n <div className={gridClass} style={style}>\n {children}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { useFormStore } from \"./FormProvider\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\n\nexport const DynamicForm: React.FC = () => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n // Memoize layout rendering to avoid unnecessary checks?\n // Actually we need to react to visibility changes which might hide sections?\n // For MVP, just render.\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n\n {schema.layout.map((node) => {\n if (node.type === \"section\") {\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) =>\n typeof child === \"string\" ? (\n <FieldRenderer key={child} fieldId={child} />\n ) : child.type === \"column_layout\" ? (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n ) : (\n <React.Fragment key={child.id ?? index} />\n ),\n )}\n </Section>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport type { SectionChild } from \"../core/types\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\n\nexport function renderSectionChildren(children: SectionChild[]) {\n return children.map((child, index) => {\n if (typeof child === \"string\") {\n return <FieldRenderer key={child} fieldId={child} />;\n }\n if (child.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={index} />;\n });\n}\n","import React from \"react\";\nimport type { LayoutNode } from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\nexport type DynamicFormV2SectionMode = \"accordion\" | \"plain\";\n\nexport interface DynamicFormV2Props {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n /**\n * `accordion` — bordered collapsible sections (same as DynamicForm).\n * `plain` — simple vertical stack, no card/accordion chrome.\n */\n sectionMode?: DynamicFormV2SectionMode;\n /** In `plain` mode, show the section title above fields. Default true. Ignored for accordion. */\n showSectionTitles?: boolean;\n className?: string;\n}\n\nfunction PlainSection({\n title,\n showHeading,\n children,\n}: {\n title: string;\n showHeading: boolean;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"mb-6 space-y-4\">\n {showHeading ? (\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n ) : null}\n {children}\n </div>\n );\n}\n\n/**\n * Alternate layout shell for alternative designs (e.g. marketing / minimal flows).\n * Same schema traversal as {@link DynamicForm}; configurable title and section chrome.\n */\nexport const DynamicFormV2: React.FC<DynamicFormV2Props> = ({\n showTitle = true,\n sectionMode = \"plain\",\n showSectionTitles = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle ? (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n ) : null}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"section\") {\n if (sectionMode === \"accordion\") {\n return (\n <Section key={node.id} title={node.title}>\n {renderSectionChildren(node.children)}\n </Section>\n );\n }\n return (\n <PlainSection\n key={node.id}\n title={node.title}\n showHeading={showSectionTitles}\n >\n {renderSectionChildren(node.children)}\n </PlainSection>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { Check } from \"lucide-react\";\nimport type {\n FormState,\n LayoutNode,\n MultiStepLayoutNode,\n MultiStepNode,\n FieldDef,\n} from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction flattenStepFieldIds(step: MultiStepNode): string[] {\n const ids: string[] = [];\n for (const child of step.children) {\n if (typeof child === \"string\") {\n ids.push(child);\n } else if (child.type === \"column_layout\") {\n ids.push(...child.children);\n }\n }\n return ids;\n}\n\nfunction isFieldComplete(\n id: string,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n if (state.visibility[id] === false) return true; // hidden fields don't block\n if (state.errors[id]) return false;\n const def = fieldMap[id];\n if (def?.required) {\n const v = state.values[id];\n if (v === null || v === undefined || v === \"\") return false;\n if (Array.isArray(v) && v.length === 0) return false;\n }\n return true;\n}\n\nfunction isStepComplete(\n step: MultiStepNode,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n return flattenStepFieldIds(step).every((id) =>\n isFieldComplete(id, state, fieldMap)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stepper header\n// ---------------------------------------------------------------------------\n\ntype StepStatus = \"complete\" | \"active\" | \"locked\";\n\ninterface StepperProps {\n steps: MultiStepNode[];\n statuses: StepStatus[];\n variant: \"numbered\" | \"dots\" | \"labels\";\n}\n\nconst Stepper: React.FC<StepperProps> = ({ steps, statuses, variant }) => {\n if (variant === \"dots\") {\n return (\n <div className=\"flex items-center gap-2 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div\n className={cn(\n \"h-2.5 w-2.5 rounded-full transition-colors\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary ring-2 ring-primary/30\",\n status === \"locked\" && \"bg-muted\"\n )}\n title={step.title}\n />\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n if (variant === \"labels\") {\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cn(\n \"h-2 w-2 rounded-full\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary\",\n status === \"locked\" && \"bg-muted\"\n )}\n />\n <span\n className={cn(\n \"text-xs whitespace-nowrap\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mb-4 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n // numbered (default)\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold border-2 transition-colors\",\n status === \"complete\" &&\n \"border-primary bg-primary text-primary-foreground\",\n status === \"active\" &&\n \"border-primary bg-background text-primary\",\n status === \"locked\" &&\n \"border-border bg-background text-muted-foreground\"\n )}\n >\n {status === \"complete\" ? (\n <Check className=\"h-3.5 w-3.5\" />\n ) : (\n i + 1\n )}\n </div>\n <span\n className={cn(\n \"text-sm font-medium hidden sm:block\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mx-3 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Active step shell — plain section, visually prominent\n// ---------------------------------------------------------------------------\n\nconst ActiveStep: React.FC<{ title: string; children: React.ReactNode }> = ({\n title,\n children,\n}) => (\n <div className=\"mb-4 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n {children}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Wizard — handles one multi_step layout node\n// ---------------------------------------------------------------------------\n\ninterface WizardProps {\n node: MultiStepLayoutNode;\n}\n\nconst Wizard: React.FC<WizardProps> = ({ node }) => {\n const store = useFormStore();\n // Spread into a new object on every store notification so React sees a\n // changed reference and actually re-renders. The store mutates nested\n // properties (values, errors, visibility) but keeps `this.state` as the\n // same object, so passing it directly would cause React to bail out.\n const [formState, setFormState] = useState<FormState>(() => ({\n ...store.getState(),\n }));\n\n useEffect(() => {\n return store.subscribe((state) => {\n console.log(\"[MultiStepForm] store update →\", {\n values: state.values,\n errors: state.errors,\n visibility: state.visibility,\n });\n setFormState({ ...state });\n });\n }, [store]);\n\n const schema = store.getSchema();\n const fieldMap: Record<string, FieldDef> = {};\n schema.fields.forEach((f) => {\n fieldMap[f.id] = f;\n });\n\n const { steps, meta } = node;\n const showStepper = meta?.showStepper !== false;\n const variant = meta?.stepperVariant ?? \"numbered\";\n const collapseCompleted = meta?.collapseCompleted !== false;\n\n // Compute per-step status\n const stepComplete = steps.map((s) => {\n const fieldIds = flattenStepFieldIds(s);\n const complete = isStepComplete(s, formState, fieldMap);\n console.log(`[MultiStepForm] step \"${s.id}\" fieldIds=${JSON.stringify(fieldIds)} complete=${complete}`, {\n errors: fieldIds.map((id) => ({ id, error: formState.errors[id] })),\n values: fieldIds.map((id) => ({ id, value: formState.values[id] })),\n });\n return complete;\n });\n\n // First incomplete step is active; steps before it are complete; steps after are locked.\n const activeIndex =\n stepComplete.findIndex((c) => !c) === -1\n ? steps.length // all complete\n : stepComplete.findIndex((c) => !c);\n\n console.log(`[MultiStepForm] activeIndex=${activeIndex} stepComplete=${JSON.stringify(stepComplete)}`);\n\n const statuses: StepStatus[] = steps.map((_, i) => {\n if (i < activeIndex) return \"complete\";\n if (i === activeIndex) return \"active\";\n return \"locked\";\n });\n\n return (\n <div>\n {node.title && (\n <h2 className=\"text-lg font-semibold mb-4\">{node.title}</h2>\n )}\n {showStepper && (\n <Stepper steps={steps} statuses={statuses} variant={variant} />\n )}\n <div className=\"space-y-2\">\n {steps.map((step, i) => {\n const status = statuses[i];\n\n // Locked steps are not mounted at all — this is the \"unlock\" behaviour.\n if (status === \"locked\") return null;\n\n const children = renderSectionChildren(step.children);\n\n if (status === \"complete\") {\n // Completed steps are shown as a collapsible accordion when collapseCompleted.\n // When collapseCompleted is false, render them open but visually muted.\n if (collapseCompleted) {\n return (\n <Section key={step.id} title={step.title}>\n {children}\n </Section>\n );\n }\n return (\n <div\n key={step.id}\n className=\"mb-4 opacity-60 pointer-events-none select-none space-y-4\"\n >\n <h2 className=\"text-base font-medium text-foreground\">\n {step.title}\n </h2>\n {children}\n </div>\n );\n }\n\n // Active step\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n })}\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface MultiStepFormProps {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n className?: string;\n}\n\n/**\n * Renders a form schema that may contain `multi_step` layout nodes in addition\n * to the standard `section` / `column_layout` nodes.\n *\n * Multi-step groups unlock steps linearly: a step becomes visible only when\n * all fields in the previous step are valid (no errors, required fields filled).\n */\nexport const MultiStepForm: React.FC<MultiStepFormProps> = ({\n showTitle = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle && (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n )}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"multi_step\") {\n return <Wizard key={node.id} node={node} />;\n }\n if (node.type === \"section\") {\n return (\n <div key={node.id} className=\"mb-6 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">\n {node.title}\n </h2>\n {renderSectionChildren(node.children)}\n </div>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { cn } from '../core/utils';\nimport { AISuggestionsProvider, type AIMedication } from './AISuggestionsContext';\nimport type { LayoutNode, SectionChild } from '../core/types';\n\n/** Field keys that should be shown as suggestions (badges) instead of applied to form state */\nconst SUGGESTION_KEYS = new Set(['medications', 'investigations', 'procedures']);\n\n/** Shape of one differential diagnosis item from AI (must match form field value) */\nexport type AIDifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nfunction shallowEqualKeys(a: Record<string, any>, b: Record<string, any>): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const k of keysA) {\n if (!keysB.includes(k) || a[k] !== b[k]) return false;\n }\n return true;\n}\n\nfunction normalizeAIMedications(arr: unknown): AIMedication[] {\n let parsed: unknown = arr;\n if (typeof arr === 'string') {\n try {\n parsed = JSON.parse(arr);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((item): item is AIMedication => item != null && typeof item === 'object' && 'id' in item && 'brand_name' in item);\n}\n\nfunction normalizeDifferentialDiagnosis(val: unknown): AIDifferentialDiagnosisItem[] {\n let parsed: unknown = val;\n if (typeof val === 'string') {\n try {\n parsed = JSON.parse(val);\n } catch {\n return [];\n }\n }\n // Shape 1: object keyed by category, each with { conditions: [...] }\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const result: AIDifferentialDiagnosisItem[] = [];\n for (const [category, group] of Object.entries(parsed as Record<string, any>)) {\n if (!group || typeof group !== 'object') continue;\n const conditions = Array.isArray((group as any).conditions) ? (group as any).conditions : [];\n for (const cond of conditions) {\n if (!cond || typeof cond !== 'object') continue;\n const {\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures,\n nextSteps,\n } = cond as any;\n if (!condition || !likelihood || !severity || !treatability) continue;\n result.push({\n category,\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures: Array.isArray(keyFeatures) ? keyFeatures : undefined,\n nextSteps: Array.isArray(nextSteps) ? nextSteps : undefined,\n });\n }\n }\n return result;\n }\n\n // Shape 2: already a flat array of items\n if (!Array.isArray(parsed)) return [];\n return parsed.filter(\n (item): item is AIDifferentialDiagnosisItem =>\n item != null &&\n typeof item === 'object' &&\n 'category' in item &&\n 'condition' in item &&\n 'likelihood' in item &&\n 'severity' in item &&\n 'treatability' in item\n );\n}\n\nexport interface SmartFormProps {\n /**\n * Structured result from AI analysis (e.g. patient-doctor conversation).\n * When this is set or updated, values are applied to the form by field ID.\n * Only keys that exist in the form schema are applied; unknown keys are ignored.\n * Fields are not marked as \"touched\" so you can distinguish AI-suggested vs user-edited if needed.\n * Listens to both reference and content changes (e.g. streaming updates to the same object).\n */\n aiAnalysisResult?: Record<string, any> | null;\n}\n\n/**\n * Form view that supports applying AI analysis results after load. Use inside\n * FormProvider like DynamicForm. When aiAnalysisResult is provided (e.g. when\n * AI finishes analyzing conversation), its values are applied to the form in\n * one batch without marking fields as touched. Re-applies when the result\n * reference or content changes (e.g. streaming or incremental AI updates).\n */\nexport const SmartForm: React.FC<SmartFormProps> = ({\n aiAnalysisResult,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n const prevAiResultRef = useRef<Record<string, any> | null | undefined>(undefined);\n\n const aiSuggestions = useMemo(() => {\n if (aiAnalysisResult == null) return { medications: [] };\n const medications = normalizeAIMedications(aiAnalysisResult.medications);\n return { medications };\n }, [aiAnalysisResult]);\n\n useEffect(() => {\n if (aiAnalysisResult == null || Object.keys(aiAnalysisResult).length === 0) return;\n const prev = prevAiResultRef.current;\n if (prev != null && prev === aiAnalysisResult && shallowEqualKeys(prev, aiAnalysisResult)) return;\n // Store a shallow copy so mutation of the same object reference is detected\n // on the next render (shallowEqualKeys will see different key sets).\n prevAiResultRef.current = { ...aiAnalysisResult };\n const DD_KEYS = new Set(['differentialDiagnosis', 'differentialdiagnosis']);\n const toApply: Record<string, any> = {};\n for (const [key, val] of Object.entries(aiAnalysisResult)) {\n if (!SUGGESTION_KEYS.has(key) && !DD_KEYS.has(key)) toApply[key] = val;\n }\n const rawDd =\n aiAnalysisResult.differentialDiagnosis ??\n aiAnalysisResult.differentialdiagnosis;\n if (rawDd != null) {\n toApply.differentialdiagnosis = normalizeDifferentialDiagnosis(rawDd);\n }\n if (Object.keys(toApply).length > 0) store.setValues(toApply, { touch: false });\n }, [store, aiAnalysisResult]);\n\n // Flatten layout: no section titles or accordions; just ordered field ids\n const fieldIds: string[] = [];\n function collect(child: SectionChild | string) {\n if (typeof child === 'string') {\n fieldIds.push(child);\n } else if (child.type === 'column_layout') {\n child.children.forEach(id => fieldIds.push(id));\n }\n }\n schema.layout.forEach((node: LayoutNode) => {\n if (node.type === 'section') {\n node.children.forEach(collect);\n } else if (node.type === 'column_layout') {\n node.children.forEach(id => fieldIds.push(id));\n }\n });\n\n return (\n <AISuggestionsProvider value={aiSuggestions}>\n <div className=\"grid grid-cols-4 gap-2 w-full items-start\">\n {/* Left column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'left') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n\n {/* Center column: 50% (2 of 4 grid cols), internally split 25-25 */}\n <div className=\"col-span-2 grid grid-cols-2 gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'center') return null;\n\n const colSpanRaw = (fieldDef as any).colSpan ?? 1;\n const colSpan = colSpanRaw === 2 ? 2 : 1;\n\n return (\n <div\n key={fieldId}\n className={cn(\n 'min-h-0 flex flex-col',\n colSpan === 2 ? 'col-span-2' : 'col-span-1 h-full',\n )}\n >\n <FieldRenderer fieldId={fieldId} />\n </div>\n );\n })}\n </div>\n\n {/* Right column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'right') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n </div>\n </AISuggestionsProvider>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport type { FieldDef } from '../../core/types';\nimport { richTextHtmlClassName } from './RichTextWidget';\n\ninterface ReadOnlyTextProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyText: React.FC<ReadOnlyTextProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const displayValue = value ?? '';\n const isRichText = fieldDef.type === 'richtext';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {isRichText ? (\n <div\n className={cn(\n richTextHtmlClassName(),\n 'text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50',\n )}\n dangerouslySetInnerHTML={{ __html: displayValue }}\n />\n ) : (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {displayValue || <span className=\"text-gray-400 italic\">No value</span>}\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlySelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlySelect: React.FC<ReadOnlySelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const selectedOption = options.find(opt => {\n // Handle both string and number comparisons\n return String(opt.value) === String(value) || opt.value === value;\n });\n\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = !value && value !== 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n displayValue\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlyMultiSelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlyMultiSelect: React.FC<ReadOnlyMultiSelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const currentValues = Array.isArray(value) ? value : [];\n const selectedLabels = currentValues\n .map(val => {\n const option = options.find(opt => {\n return String(opt.value) === String(val) || opt.value === val;\n });\n return option ? option.label : String(val);\n })\n .filter(Boolean);\n\n const isEmpty = selectedLabels.length === 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No values selected</span>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {selectedLabels.map((label, idx) => (\n <span\n key={idx}\n className=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800\"\n >\n {label}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../shadcn/table';\nimport type { RepeatableFieldDef } from '../../core/types';\n\ninterface ReadOnlyRepeatableProps {\n fieldDef: RepeatableFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRepeatable: React.FC<ReadOnlyRepeatableProps> = ({ fieldDef, value }) => {\n if (!fieldDef || fieldDef.type !== 'repeatable') return null;\n\n const rows = Array.isArray(value) ? value : [];\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n \n {rows.length === 0 ? (\n <div className=\"text-gray-400 italic border border-gray-200 rounded-md p-4 bg-gray-50 text-center\">\n No items\n </div>\n ) : (\n <div className=\"rounded-md border border-gray-200 overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {fieldDef.row.map((subDef) => (\n <TableHead key={subDef.id} className=\"bg-gray-50\">{subDef.label}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {fieldDef.row.map((subDef) => (\n <TableCell key={subDef.id} className=\"text-gray-900\">\n {row[subDef.id] ?? <span className=\"text-gray-400 italic\">—</span>}\n </TableCell>\n ))}\n </TableRow>\n )\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDate: React.FC<ReadOnlyDateProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleDateString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || <span className=\"text-gray-400 italic\">No date selected</span>}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { Image } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlyImageUploadProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain URL/string key or a typed object\n // from the backend that includes a presigned_url.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyImageUpload: React.FC<ReadOnlyImageUploadProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-4\">\n <Image className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No image uploaded</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={(e) => {\n // Fallback if image fails to load\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const parent = target.parentElement;\n if (parent) {\n parent.innerHTML = `\n <div class=\"text-center py-4\">\n <div class=\"text-gray-400 mb-2\">📷</div>\n <p class=\"text-sm text-gray-500\">Image not available</p>\n <p class=\"text-xs text-gray-400\">${url ?? ''}</p>\n </div>\n `;\n }\n }}\n />\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\n};","import React, { useState, useEffect } from 'react';\nimport { Label } from '../shadcn/label';\nimport { Image } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlyMediaUploadProps {\n fieldDef: BaseFieldDef;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nexport const ReadOnlyMediaUpload: React.FC<ReadOnlyMediaUploadProps> = ({\n fieldDef,\n value,\n}) => {\n const [useIframe, setUseIframe] = useState(false);\n\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n useEffect(() => {\n setUseIframe(false);\n }, [url]);\n\n const showAsPdf = url && (urlLooksLikePdf(url) || useIframe);\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-4\">\n <Image className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No file uploaded</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n {showAsPdf ? (\n <iframe\n src={url}\n title={`${fieldDef.label} PDF`}\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={() => setUseIframe(true)}\n />\n )}\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { PenTool } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlySignatureProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain string or a typed object\n // with a presigned_url from the backend.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlySignature: React.FC<ReadOnlySignatureProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-8\">\n <PenTool className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No signature provided</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n <div className=\"flex items-center justify-start\">\n <img\n src={url}\n alt=\"Signature\"\n className=\"border border-gray-200 rounded bg-white object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n </div>\n );\n};","import React, { useMemo } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport type { BaseFieldDef } from \"../../core/types\";\n\ninterface TableColumn {\n id: string;\n label: string;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface ReadOnlyTableProps {\n fieldDef: BaseFieldDef;\n // Value may be the stored table data { columns, rows } or undefined\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyTable: React.FC<ReadOnlyTableProps> = ({\n fieldDef,\n value,\n}) => {\n const tableData: TableData = useMemo(() => {\n if (\n value &&\n typeof value === \"object\" &&\n \"columns\" in value &&\n \"rows\" in value &&\n Array.isArray(value.columns) &&\n Array.isArray(value.rows)\n ) {\n return value as TableData;\n }\n return { columns: [], rows: [] };\n }, [value]);\n\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n return tableData.columns.map((col) => ({\n accessorKey: col.id,\n header: col.label,\n cell: (info: { getValue: () => unknown }) =>\n (info.getValue() as string) ?? \"\",\n }));\n }, [tableData.columns]);\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id}>\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-2\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-16 text-center text-muted-foreground\"\n >\n No data\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateTimeProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDateTime: React.FC<ReadOnlyDateTimeProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">\n {fieldDef.label}\n </Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || (\n <span className=\"text-gray-400 italic\">No date & time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\ninterface ReadOnlyRadioProps {\n fieldDef: RadioFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRadio: React.FC<ReadOnlyRadioProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedOption = options.find(opt =>\n String(opt.value) === String(value) || opt.value === value\n );\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = value == null || value === '';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n displayValue\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\n\ninterface ReadOnlyCheckboxProps {\n fieldDef: CheckboxFieldDef;\n value: any;\n}\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n if (!Array.isArray(selected)) return false;\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const ReadOnlyCheckbox: React.FC<ReadOnlyCheckboxProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedValues = Array.isArray(value) ? value : [];\n const selectedLabels = options\n .filter((opt) => isOptionSelected(selectedValues, opt.value))\n .map((opt) => opt.label);\n const displayText = selectedLabels.length\n ? selectedLabels.join(', ')\n : '—';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : (\n displayText\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\n\ninterface ReadOnlyReferralProps {\n fieldDef: ReferralFieldDef;\n value: unknown;\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n return {\n specialization: String((item as ReferralItem).specialization),\n is_urgent: Boolean((item as ReferralItem).is_urgent),\n };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReadOnlyReferral: React.FC<ReadOnlyReferralProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const items = normalizeValue(value);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {items.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No value</span>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.map((item, i) => {\n const isUrgent = item.is_urgent;\n return (\n <span\n key={i}\n className={\n isUrgent\n ? 'inline-flex items-center gap-1 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs font-medium'\n : 'inline-flex items-center gap-1 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium'\n }\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded\">\n U\n </span>\n )}\n {item.specialization}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ntype DischargeMedicationOrder = {\n id: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n};\n\nfunction parseOrders(value: unknown): DischargeMedicationOrder[] {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(\n (v) => v != null && typeof v === 'object' && typeof (v as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? v.orders : [];\n return orders.filter(\n (o) => o != null && typeof o === 'object' && typeof (o as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n return [];\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const ReadOnlyDischargeMedicationOrders: React.FC<{\n fieldDef: FieldDef;\n value: unknown;\n}> = ({ fieldDef, value }) => {\n const orders = useMemo(() => parseOrders(value), [value]);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {orders.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No medicines added</span>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o) => {\n const duration = formatDuration(o.start_date, o.end_date);\n const header = o.item_name ?? 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-gray-200 bg-gray-50 p-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate text-gray-900\">{header}</div>\n {sub && <div className=\"text-xs text-gray-500 mt-0.5 truncate\">{sub}</div>}\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-gray-600\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-gray-800/90\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\nimport { ReadOnlySignature } from '../ui/widgets/ReadOnlySignature';\nimport { ReadOnlyTable } from '../ui/widgets/ReadOnlyTable';\nimport { ReadOnlyDateTime } from '../ui/widgets/ReadOnlyDateTime';\nimport { ReadOnlyRadio } from '../ui/widgets/ReadOnlyRadio';\nimport { ReadOnlyCheckbox } from '../ui/widgets/ReadOnlyCheckbox';\nimport { ReadOnlyReferral } from '../ui/widgets/ReadOnlyReferral';\nimport { ReadOnlyDischargeMedicationOrders } from '../ui/widgets/ReadOnlyDischargeMedicationOrders';\nimport type {\n CheckboxFieldDef,\n FieldDef,\n PainScaleFlagsFieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../core/functionalImpairmentScore';\nimport { normalizePainScaleFlags } from '../core/painScaleFlags';\nimport { normalizeGeneralSurgerySmartHistory } from '../core/generalSurgeryPathway';\nimport { normalizeObgPathway } from '../core/obgPathway';\nimport { normalizeUrologySmartHistory } from '../core/urologyPathway';\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\n /**\n * Full form values; required for `suggestion_textarea` with `meta.embeddedFieldIds` so embedded\n * fields can be shown in read-only view.\n */\n allValues?: Record<string, unknown>;\n /** Resolve embedded field definitions by id (e.g. `schema.fields` map). */\n resolveFieldDef?: (fieldId: string) => FieldDef | undefined;\n}\n\nexport const ReadOnlyFieldRenderer: React.FC<ReadOnlyFieldRendererProps> = ({\n fieldDef,\n value,\n allValues,\n resolveFieldDef,\n}) => {\n if (!fieldDef) return null;\n\n // Check visibility (for now, we'll show all fields in read-only mode)\n // You could add logic here to hide fields based on rules if needed\n\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n case 'slider':\n case 'textarea':\n case 'richtext':\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n \n case 'date':\n return <ReadOnlyDate fieldDef={fieldDef} value={value} />;\n \n case 'datetime':\n return <ReadOnlyDateTime fieldDef={fieldDef} value={value} />;\n \n case 'select':\n return <ReadOnlySelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as RadioFieldDef} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox fieldDef={fieldDef as CheckboxFieldDef} value={value} />;\n \n case 'multiselect':\n return <ReadOnlyMultiSelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'repeatable':\n return <ReadOnlyRepeatable fieldDef={fieldDef as RepeatableFieldDef} value={value} />;\n \n case 'image_upload':\n return <ReadOnlyImageUpload fieldDef={fieldDef} value={value} />;\n\n case 'media_upload':\n return <ReadOnlyMediaUpload fieldDef={fieldDef} value={value} />;\n\n case 'file_upload':\n return <ReadOnlyMediaUpload fieldDef={fieldDef} value={value} />;\n \n case 'signature':\n return <ReadOnlySignature fieldDef={fieldDef} value={value} />;\n\n case 'editable_table':\n return <ReadOnlyTable fieldDef={fieldDef} value={value} />;\n\n case 'referral':\n return <ReadOnlyReferral fieldDef={fieldDef as ReferralFieldDef} value={value} />;\n\n case 'discharge_medication_orders':\n return <ReadOnlyDischargeMedicationOrders fieldDef={fieldDef} value={value} />;\n\n case 'toggle': {\n const isOn = value === true;\n return (\n <div className=\"space-y-1\">\n <p className=\"text-xs text-muted-foreground\">{fieldDef.label}</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${isOn ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-600'}`}>\n {isOn ? 'Yes' : 'No'}\n </span>\n </div>\n );\n }\n\n case 'suggestion_textarea':\n case 'complaint_chips': {\n const embeddedIds =\n fieldDef.meta &&\n Array.isArray((fieldDef.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? ((fieldDef.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds as unknown[])\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n : [];\n const showEmbedded =\n embeddedIds.length > 0 && resolveFieldDef && allValues && typeof allValues === 'object';\n\n if (!showEmbedded) {\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n\n return (\n <div className=\"space-y-3\">\n <ReadOnlyText fieldDef={fieldDef} value={value} />\n <div className=\"grid gap-3 border-t border-muted-foreground/20 pt-3 sm:grid-cols-3\">\n {embeddedIds.map((id) => {\n const fd = resolveFieldDef(id);\n if (!fd) return null;\n return (\n <ReadOnlyFieldRenderer\n key={id}\n fieldDef={fd}\n value={allValues[id]}\n allValues={allValues}\n resolveFieldDef={resolveFieldDef}\n />\n );\n })}\n </div>\n </div>\n );\n }\n\n case 'lens_assessment': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as {\n notes?: unknown;\n assessmentKey?: unknown;\n locs?: unknown;\n })\n : null;\n const notes = typeof v?.notes === 'string' ? v.notes : '';\n const key = typeof v?.assessmentKey === 'string' ? v.assessmentKey : null;\n const locs = v?.locs;\n const locsRecord =\n locs != null &&\n typeof locs === 'object' &&\n !Array.isArray(locs)\n ? (locs as Record<string, unknown>)\n : null;\n const eyeLine = (label: string, g: Record<string, unknown> | undefined) => {\n if (!g || typeof g !== 'object') return null;\n const num = (k: string) => (typeof g[k] === 'number' ? g[k] : '—');\n return (\n <p className=\"text-xs text-foreground\">\n {label}: NO {String(num('NO'))}, NC {String(num('NC'))}, C {String(num('C'))}, PSC{' '}\n {String(num('PSC'))}\n </p>\n );\n };\n return (\n <div className=\"space-y-2 rounded-md border p-3 text-sm\">\n {fieldDef.label && (\n <p className=\"font-medium text-foreground\">{fieldDef.label}</p>\n )}\n {locsRecord ? (\n <div className=\"space-y-1 border-l-2 border-muted pl-2\">\n {eyeLine('Right (OD)', locsRecord.OD as Record<string, unknown> | undefined)}\n {eyeLine('Left (OS)', locsRecord.OS as Record<string, unknown> | undefined)}\n </div>\n ) : null}\n {key && (\n <p className=\"text-xs text-muted-foreground\">\n Assessment (legacy): {key}\n </p>\n )}\n {notes && <p className=\"whitespace-pre-wrap text-foreground\">{notes}</p>}\n </div>\n );\n }\n\n case 'functional_impairment_score': {\n const v = parseFunctionalImpairmentScore(value);\n const total = functionalImpairmentTotal(v);\n const lines = [\n `Reading: ${v.reading}`,\n `Night driving: ${v.nightDriving}`,\n `Glare: ${v.glare}`,\n `Occupation: ${v.occupation}`,\n `ADL: ${v.adl}`,\n `Total: ${total}/15`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'biometry_iol_workup': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n const s = (k: string) => (typeof v[k] === 'string' ? (v[k] as string) : '');\n const b = (k: string) => v[k] === true;\n const method =\n v.method === 'ascan_immersion'\n ? 'A-scan (immersion)'\n : v.method === 'ascan_contact'\n ? 'A-scan (contact)'\n : 'Optical biometry (IOL Master)';\n const lines = [\n `Axial length OD/OS (mm): ${s('axialLengthOD')} / ${s('axialLengthOS')}`,\n `K1/K2/Axis OD/OS: ${s('k1k2AxisOD')} / ${s('k1k2AxisOS')}`,\n `AC depth OD/OS (mm): ${s('anteriorChamberDepthOD')} / ${s('anteriorChamberDepthOS')}`,\n `IOL power (D) OD/OS: ${s('iolPowerOD')} / ${s('iolPowerOS')}`,\n `Target refraction (D) OD/OS: ${s('targetRefractionOD')} / ${s('targetRefractionOS')}`,\n `Formula: ${s('formula') || '—'}`,\n `Method: ${method}`,\n `Corneal topography uploaded: ${b('cornealTopoUploaded') ? 'Yes' : 'No'}`,\n `Specular microscopy: ${b('specularMicroscopyDone') ? 'Yes' : 'No'}`,\n `Endothelial count: ${s('endothelialCount') || '—'}`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'surgical_risk_flags': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as { OD?: unknown; OS?: unknown })\n : null;\n const list = (x: unknown) =>\n Array.isArray(x) ? x.filter((i): i is string => typeof i === 'string').join(', ') : '—';\n const od = list(v?.OD);\n const os = list(v?.OS);\n const lines = [`Right eye (OD): ${od}`, `Left eye (OS): ${os}`].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'pain_scale_flags': {\n const def = fieldDef as PainScaleFlagsFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const safe = normalizePainScaleFlags(value, { min, max });\n const opts = def.options ?? [];\n const flagLabels = safe.flags.map((fv) => {\n const o = opts.find((x) => x.value === fv || String(x.value) === String(fv));\n return o?.label ?? fv;\n });\n const lines = [\n `Pain score (VAS): ${safe.pain}/${max}`,\n flagLabels.length > 0 ? `Triage flags: ${flagLabels.join(', ')}` : 'Triage flags: —',\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'urology_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeUrologySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_pathway':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeGeneralSurgerySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'general_surgery_grading':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_pathway': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeObgPathway(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\n\n default:\n // Fallback for unknown types - just display as text\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n};\n","import React from 'react';\nimport { ReadOnlyFieldRenderer } from './ReadOnlyFieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport { ColumnLayout } from '../ui/layouts/ColumnLayout';\nimport type { FormDef } from '../core/types';\nimport type { SubmissionData } from '../core/submissionTypes';\n\ninterface ReadOnlyFormProps {\n schema: FormDef;\n submission: SubmissionData;\n}\n\nexport const ReadOnlyForm: React.FC<ReadOnlyFormProps> = ({ schema, submission }) => {\n const formData = submission.data || {};\n const fieldMap = new Map(schema.fields.map(f => [f.id, f]));\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n <div className=\"text-sm text-gray-500 mt-1\">\n Version: {schema.version} | Status: {submission.status}\n {submission.context?.created_by_name && \n <span> | {submission.context.created_by_name}</span>\n }\n </div>\n {submission.created_at && (\n <div className=\"text-xs text-gray-400 mt-1\">\n Created: {new Date(submission.created_at).toLocaleString()} | \n Updated: {new Date(submission.updated_at).toLocaleString()}\n </div>\n )}\n </div>\n\n {schema.layout.map(node => {\n if (node.type === 'section') {\n const renderSectionChild = (child: string | { type: string; id: string; columns?: number; label?: string; children: string[] }, index: number): React.ReactNode => {\n if (typeof child === 'string') {\n const fieldDef = fieldMap.get(child);\n return fieldDef ? (\n <ReadOnlyFieldRenderer\n key={child}\n fieldDef={fieldDef}\n value={formData[child]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ) : null;\n }\n if (child.type === 'column_layout' && child.children) {\n const visibleFields = child.children\n .map(fieldId => {\n const fieldDef = fieldMap.get(fieldId);\n return fieldDef ? { fieldId, fieldDef } : null;\n })\n .filter((f): f is { fieldId: string; fieldDef: NonNullable<ReturnType<typeof fieldMap.get>> } => f !== null);\n return (\n <ColumnLayout\n key={child.id}\n columns={child.columns ?? 1}\n label={child.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={child.id ?? index} />;\n };\n\n const hasContent = node.children.some(child =>\n typeof child === 'string' ? fieldMap.has(child) : (child.type === 'column_layout' && child.children?.some(id => fieldMap.has(id)))\n );\n if (!hasContent) return null;\n\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) => renderSectionChild(child, index))}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\n const visibleFields = node.children\n .map(fieldId => {\n const fieldDef = fieldMap.get(fieldId);\n return fieldDef ? { fieldId, fieldDef } : null;\n })\n .filter((f): f is { fieldId: string; fieldDef: NonNullable<ReturnType<typeof fieldMap.get>> } => f !== null);\n\n if (visibleFields.length === 0) return null;\n\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { useForm } from \"./useForm\";\nimport { cn } from \"../core/utils\";\nimport { Button } from \"../ui/shadcn/button\";\n\nexport interface FormControlsProps {\n className?: string;\n containerStyle?: React.CSSProperties;\n /**\n * When false, hides workflow state + valid/invalid text. Buttons stay right-aligned unless\n * `actionsFullWidth` is used. Default true (existing behaviour).\n */\n showWorkflowStatus?: boolean;\n statusClassName?: string;\n statusStyle?: React.CSSProperties;\n /** Classes for the buttons row wrapper. */\n actionsClassName?: string;\n actionsStyle?: React.CSSProperties;\n /**\n * When workflow status is hidden, make action buttons stretch (column on small screens;\n * on `sm+` submit row grows with flex). Ignored while `showWorkflowStatus` is true.\n */\n actionsFullWidth?: boolean;\n /** Applied to both Save Draft and Submit buttons. */\n buttonClassName?: string;\n onSaveDraft?: () => void;\n onSubmit?: (to: string) => void;\n /** Override the label on the submit/transition button. Defaults to \"Submit\". */\n submitLabel?: string;\n}\n\nexport const FormControls: React.FC<FormControlsProps> = ({\n className,\n containerStyle,\n showWorkflowStatus = true,\n statusClassName,\n statusStyle,\n actionsClassName,\n actionsStyle,\n actionsFullWidth = false,\n buttonClassName,\n onSaveDraft,\n onSubmit,\n submitLabel,\n}) => {\n const {\n state,\n availableTransitions,\n submit,\n transition,\n hasPersistence,\n markSubmitAttempted,\n } = useForm();\n\n const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\n\n const draftAvailable = onSaveDraft || (hasPersistence && submit);\n const submitAvailable =\n onSubmit || (availableTransitions.length > 0 && transition);\n\n if (!draftAvailable && !submitAvailable) {\n return null;\n }\n\n const useWideActions = !showWorkflowStatus && actionsFullWidth;\n const buttonCn = cn(\n buttonClassName,\n useWideActions && \"w-full sm:flex-1 min-w-0\",\n );\n\n return (\n <div\n className={cn(\n \"flex gap-4 border-t p-4 items-center\",\n showWorkflowStatus\n ? \"justify-between\"\n : useWideActions\n ? \"flex-col sm:flex-row sm:justify-stretch sm:gap-4\"\n : \"justify-end\",\n className,\n )}\n style={containerStyle}\n >\n {showWorkflowStatus ? (\n <div\n className={cn(\"flex items-center gap-4\", statusClassName)}\n style={statusStyle}\n >\n <span className=\"font-bold text-sm text-gray-700\">\n State: {state.workflowState}\n </span>\n <span\n className={cn(\n \"text-sm\",\n state.isValid ? \"text-green-600\" : \"text-red-600\",\n )}\n >\n {state.isValid ? \"Valid\" : \"Invalid\"}\n </span>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex gap-2\",\n useWideActions\n ? \"w-full flex-col sm:flex-row sm:flex-1 sm:justify-end sm:max-w-none\"\n : \"flex-shrink-0\",\n actionsClassName,\n )}\n style={actionsStyle}\n >\n {draftAvailable && (\n <Button\n onClick={onSaveDraft || submit}\n variant=\"outline\"\n size=\"sm\"\n disabled={hasUploadsInFlight}\n className={buttonCn}\n >\n {hasUploadsInFlight ? \"Upload in progress…\" : \"Save Draft\"}\n </Button>\n )}\n\n {submitAvailable && (\n <>\n {availableTransitions.length > 0 ? (\n availableTransitions.map((t) => (\n <Button\n key={t.to}\n onClick={() => {\n markSubmitAttempted();\n if (onSubmit) {\n onSubmit(t.to);\n } else {\n transition(t.to);\n }\n }}\n disabled={!state.isValid || hasUploadsInFlight}\n size=\"sm\"\n className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : availableTransitions.length > 1\n ? `Submit to ${t.to}`\n : (submitLabel ?? \"Submit\")}\n </Button>\n ))\n ) : onSubmit ? (\n <Button\n onClick={() => {\n markSubmitAttempted();\n onSubmit(state.workflowState || \"submit\");\n }}\n disabled={!state.isValid || hasUploadsInFlight}\n size=\"sm\"\n className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : (submitLabel ?? \"Submit\")}\n </Button>\n ) : null}\n </>\n )}\n </div>\n </div>\n );\n};\n","export interface PresignedUploadResponse {\n presigned_url: string;\n s3_key: string;\n expires_in: number;\n content_type: string;\n upload_method: 'PUT' | 'POST';\n}\n\nexport interface CreateUploadHandlerOptions {\n /** Data server origin (no trailing slash), e.g. `https://dataserver.example.com`. */\n apiBaseUrl: string;\n headers?: Record<string, string>; // For auth headers, etc.\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n return apiBaseUrl.replace(/\\/+$/, '');\n}\n\nasync function uploadViaPresignedEndpoint(\n options: CreateUploadHandlerOptions,\n presignPath: string,\n file: File | Blob,\n filename: string,\n): Promise<string> {\n const { apiBaseUrl, headers = {} } = options;\n const base = normalizeBaseUrl(apiBaseUrl);\n const path =\n presignPath.startsWith('/') ? presignPath : `/${presignPath}`;\n const response = await fetch(`${base}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: JSON.stringify({ filename }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get presigned URL: ${response.statusText}`);\n }\n\n const presignedData: PresignedUploadResponse = await response.json();\n\n const uploadResponse = await fetch(presignedData.presigned_url, {\n method: presignedData.upload_method,\n headers: {\n 'Content-Type': presignedData.content_type,\n },\n body: file,\n });\n\n if (!uploadResponse.ok) {\n throw new Error(`Failed to upload file: ${uploadResponse.statusText}`);\n }\n\n return presignedData.s3_key;\n}\n\n/**\n * Presigned upload handler: `POST …/api/forms/media-upload/` then PUT/POST file\n * to `presigned_url`. Use as `config.onUpload` on `FormProvider`; `file_upload`\n * fields use the same handler unless you set `config.onFileUpload`.\n */\nexport function createUploadHandler(options: CreateUploadHandlerOptions) {\n return async (file: File | Blob, filename: string): Promise<string> =>\n uploadViaPresignedEndpoint(\n options,\n '/api/forms/media-upload/',\n file,\n filename,\n );\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/marMedicationOrdersMeta.ts","../src/ui/widgets/MultiSelect.tsx","../src/ui/widgets/Repeatable.tsx","../src/ui/widgets/ImageUpload.tsx","../src/ui/widgets/MediaUpload.tsx","../src/ui/widgets/SignatureUpload.tsx","../src/ui/components/Upload.tsx","../src/ui/widgets/FormFileUpload.tsx","../src/ui/shadcn/radio-group.tsx","../src/ui/widgets/Radio.tsx","../src/ui/widgets/Checkbox.tsx","../src/ui/widgets/SliderWidget.tsx","../src/ui/widgets/PhoneInputWidget.tsx","../src/ui/widgets/OtpInputWidget.tsx","../src/ui/shadcn/switch.tsx","../src/react/FieldRenderer.tsx","../src/ui/layouts/Section.tsx","../src/ui/layouts/ColumnLayout.tsx","../src/react/DynamicForm.tsx","../src/react/renderSectionChildren.tsx","../src/react/DynamicFormV2.tsx","../src/react/MultiStepForm.tsx","../src/react/SmartForm.tsx","../src/ui/widgets/ReadOnlyText.tsx","../src/ui/widgets/ReadOnlySelect.tsx","../src/ui/widgets/ReadOnlyMultiSelect.tsx","../src/ui/widgets/ReadOnlyRepeatable.tsx","../src/ui/widgets/ReadOnlyDate.tsx","../src/ui/widgets/ReadOnlyImageUpload.tsx","../src/ui/widgets/ReadOnlyMediaUpload.tsx","../src/ui/widgets/ReadOnlySignature.tsx","../src/ui/widgets/ReadOnlyDateTime.tsx","../src/ui/widgets/ReadOnlyRadio.tsx","../src/ui/widgets/ReadOnlyCheckbox.tsx","../src/ui/widgets/ReadOnlyReferral.tsx","../src/ui/widgets/ReadOnlyDischargeMedicationOrders.tsx","../src/react/ReadOnlyFieldRenderer.tsx","../src/react/ReadOnlyForm.tsx","../src/react/FormControls.tsx","../src/utils/createUploadHandler.ts"],"names":["React","jsxs","jsx","useState","error","useRef","X","Image","Upload","useEffect","UploadIcon","useMemo","React8","Fragment","React14","Check","urlLooksLikePdf","isOptionSelected"],"mappings":"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","file":"index.mjs","sourcesContent":["export const MAR_MEDICATION_ORDERS_META_KEY = 'mar_medication_orders' as const;\n\ntype MarMedicationOrdersMeta = {\n [MAR_MEDICATION_ORDERS_META_KEY]?: boolean;\n};\n\nexport function fieldMetaRequestsMarMedicationOrdersButton(\n meta: Record<string, unknown> | undefined\n): boolean {\n if (!meta || typeof meta !== 'object') return false;\n return (meta as MarMedicationOrdersMeta)[MAR_MEDICATION_ORDERS_META_KEY] === true;\n}\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Checkbox } from '../shadcn/checkbox'; // Need to make sure this exists or use input type=checkbox\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MultiSelectWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n // Default value to array\n const currentValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as SelectFieldDef; \n\n if (def.options) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleValue = (val: any) => {\n const newValues = currentValues.includes(val)\n ? currentValues.filter((v: any) => v !== val)\n : [...currentValues, val];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\n {loading && <div className=\"text-sm text-gray-500\">Loading options...</div>}\n \n {!loading && options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <Checkbox \n id={`${fieldId}-${opt.value}`}\n checked={currentValues.includes(opt.value)}\n onCheckedChange={() => toggleValue(opt.value)}\n />\n <label \n htmlFor={`${fieldId}-${opt.value}`} \n className=\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n >\n {opt.label}\n </label>\n </div>\n ))}\n </div>\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n","import React from \"react\";\nimport { useField } from \"../../react/useField\";\nimport { Label } from \"../shadcn/label\";\nimport { Button } from \"../shadcn/button\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport type { RepeatableFieldDef } from \"../../core/types\";\n\nexport const RepeatableWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n\n if (!fieldDef || fieldDef.type !== \"repeatable\") return null;\n\n const def = fieldDef as RepeatableFieldDef;\n const rows = Array.isArray(value) ? value : [];\n const [hasInteracted, setHasInteracted] = React.useState(false);\n\n const showError = !!error && (touched || hasInteracted);\n\n const addRow = () => {\n setValue([...rows, {}]);\n setHasInteracted(true);\n };\n\n const removeRow = (index: number) => {\n const newRows = [...rows];\n newRows.splice(index, 1);\n setValue(newRows);\n setHasInteracted(true);\n };\n\n const updateRow = (\n index: number,\n subFieldKey: string,\n val: string | number\n ) => {\n const newRows = [...rows];\n newRows[index] = { ...newRows[index], [subFieldKey]: val };\n setValue(newRows);\n setHasInteracted(true);\n };\n\n return (\n <div className=\"space-y-4 border p-4 rounded-md\">\n <div className=\"flex justify-between items-center\">\n <Label>{def.label}</Label>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={addRow}\n disabled={disabled}\n >\n + Add Row\n </Button>\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n <TableRow>\n {def.row.map((subDef) => (\n <TableHead key={subDef.id}>{subDef.label}</TableHead>\n ))}\n <TableHead className=\"w-[50px]\"></TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {def.row.map((subDef) => (\n <TableCell key={subDef.id}>\n {/* Simple rendering based on type - duplicating logic slightly for MVP simplicity */}\n {subDef.type === \"number\" ? (\n <input\n type=\"number\"\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, Number(e.target.value))\n }\n disabled={disabled}\n />\n ) : (\n <input\n className=\"flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring\"\n value={row[subDef.id] || \"\"}\n onChange={(e) =>\n updateRow(index, subDef.id, e.target.value)\n }\n disabled={disabled}\n />\n )}\n </TableCell>\n ))}\n <TableCell>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"h-8 w-8 text-destructive hover:text-destructive\"\n onClick={() => removeRow(index)}\n disabled={disabled}\n >\n X\n </Button>\n </TableCell>\n </TableRow>\n )\n )}\n {rows.length === 0 && (\n <TableRow>\n <TableCell\n colSpan={def.row.length + 1}\n className=\"h-24 text-center\"\n >\n No items added.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {showError && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Upload, X, Image } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/** Browser-loadable URL only — plain S3 keys are not valid <img src>. */\nfunction extractImageDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\n\nexport const ImageUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [isUploading, setIsUploading] = useState(false);\n const [preview, setPreview] = useState<string | null>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** Tracks blob: URLs we created so we can revoke them. */\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Please provide an onUpload function in FormProvider config.\n </p>\n </div>\n </div>\n );\n }\n\n React.useEffect(() => {\n const displayUrl = extractImageDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n setPreview(null);\n return;\n }\n // Opaque key or non-displayable value: keep existing preview (e.g. in-flight blob).\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!file.type.startsWith('image/')) {\n alert('Please select an image file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\n if (file.size > maxSize) {\n alert('File size must be less than 10MB');\n return;\n }\n\n setIsUploading(true);\n setTouched();\n store.incrementPendingUploads();\n\n revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n setValue(s3Key);\n } catch (error) {\n console.error('Upload failed:', error);\n const errorMessage = error instanceof Error ? error.message : 'Upload failed. Please try again.';\n alert(errorMessage);\n revokeTrackedBlob();\n setPreview(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n revokeTrackedBlob();\n setValue(null);\n setPreview(null);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n setTouched();\n };\n\n const handleUploadClick = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\n {preview ? (\n <div className=\"relative\">\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={handleRemove}\n disabled={disabled || isUploading}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <Image className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <p className=\"text-sm text-gray-600 mb-4\">\n Click to upload an image or drag and drop\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleUploadClick}\n disabled={disabled || isUploading}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {isUploading ? 'Uploading...' : 'Choose Image'}\n </Button>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled || isUploading}\n />\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Upload, X, Image } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nfunction isAcceptedMediaFile(file: File): boolean {\n if (file.type.startsWith('image/')) return true;\n if (file.type === 'application/pdf') return true;\n if (file.name.toLowerCase().endsWith('.pdf')) return true;\n return false;\n}\n\n/** Browser-loadable URL only — opaque S3 keys are not valid iframe/img src. */\nfunction extractMediaDisplayUrl(value: unknown): string | null {\n if (value == null) return null;\n if (typeof value === 'string') {\n return /^https?:\\/\\//i.test(value) ? value : null;\n }\n if (typeof value === 'object') {\n const o = value as { presigned_url?: string; value?: string };\n const u = o.presigned_url || o.value;\n if (typeof u === 'string' && /^https?:\\/\\//i.test(u)) return u;\n }\n return null;\n}\n\nexport const MediaUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [isUploading, setIsUploading] = useState(false);\n const [preview, setPreview] = useState<string | null>(null);\n const [previewIsPdf, setPreviewIsPdf] = useState(false);\n const fileInputRef = useRef<HTMLInputElement>(null);\n /** When the stored value is an opaque key (no extension), keep image vs PDF from the last upload. */\n const pendingPreviewKindRef = useRef<'image' | 'pdf' | null>(null);\n const blobUrlRef = useRef<string | null>(null);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const revokeTrackedBlob = () => {\n if (blobUrlRef.current) {\n URL.revokeObjectURL(blobUrlRef.current);\n blobUrlRef.current = null;\n }\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const uploadHandler = store.getUploadHandler();\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Please provide an onUpload function in FormProvider config.\n </p>\n </div>\n </div>\n );\n }\n\n React.useEffect(() => {\n const displayUrl = extractMediaDisplayUrl(value);\n if (displayUrl) {\n revokeTrackedBlob();\n setPreview(displayUrl);\n if (pendingPreviewKindRef.current) {\n setPreviewIsPdf(pendingPreviewKindRef.current === 'pdf');\n pendingPreviewKindRef.current = null;\n } else {\n setPreviewIsPdf(urlLooksLikePdf(displayUrl));\n }\n return;\n }\n if (value === null || value === undefined || value === '') {\n revokeTrackedBlob();\n pendingPreviewKindRef.current = null;\n setPreview(null);\n setPreviewIsPdf(false);\n return;\n }\n // Opaque key: keep blob preview from in-flight upload.\n }, [value]);\n\n React.useEffect(\n () => () => {\n revokeTrackedBlob();\n },\n []\n );\n\n const handleFileSelect = async (event: React.ChangeEvent<HTMLInputElement>) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (!isAcceptedMediaFile(file)) {\n alert('Please select an image or PDF file');\n return;\n }\n\n const maxSize = 10 * 1024 * 1024;\n if (file.size > maxSize) {\n alert('File size must be less than 10MB');\n return;\n }\n\n const isPdf =\n file.type === 'application/pdf' || file.name.toLowerCase().endsWith('.pdf');\n\n setIsUploading(true);\n setTouched();\n store.incrementPendingUploads();\n\n revokeTrackedBlob();\n const previewUrl = URL.createObjectURL(file);\n blobUrlRef.current = previewUrl;\n setPreview(previewUrl);\n setPreviewIsPdf(isPdf);\n\n try {\n const s3Key = await uploadHandler(file, file.name);\n\n pendingPreviewKindRef.current = isPdf ? 'pdf' : 'image';\n setValue(s3Key);\n } catch (error) {\n console.error('Upload failed:', error);\n const errorMessage = error instanceof Error ? error.message : 'Upload failed. Please try again.';\n alert(errorMessage);\n pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\n setPreview(null);\n setPreviewIsPdf(false);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n const handleRemove = () => {\n pendingPreviewKindRef.current = null;\n revokeTrackedBlob();\n setValue(null);\n setPreview(null);\n setPreviewIsPdf(false);\n if (fileInputRef.current) {\n fileInputRef.current.value = '';\n }\n setTouched();\n };\n\n const handleUploadClick = () => {\n fileInputRef.current?.click();\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n 'border-2 border-dashed border-gray-300 rounded-lg p-4',\n )}\n >\n {preview ? (\n <div className=\"relative\">\n {previewIsPdf ? (\n <iframe\n src={preview}\n title=\"Uploaded PDF\"\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={preview}\n alt=\"Uploaded image\"\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n />\n )}\n <Button\n type=\"button\"\n variant=\"destructive\"\n size=\"sm\"\n className=\"absolute top-2 right-2\"\n onClick={handleRemove}\n disabled={disabled || isUploading}\n >\n <X className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n <div className=\"text-center py-8\">\n <Image className=\"h-12 w-12 mx-auto text-gray-400 mb-4\" />\n <p className=\"text-sm text-gray-600 mb-4\">\n Click to upload an image or PDF, or drag and drop\n </p>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleUploadClick}\n disabled={disabled || isUploading}\n >\n <Upload className=\"h-4 w-4 mr-2\" />\n {isUploading ? 'Uploading...' : 'Choose Image'}\n </Button>\n </div>\n )}\n </div>\n\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*,application/pdf\"\n onChange={handleFileSelect}\n className=\"hidden\"\n disabled={disabled || isUploading}\n />\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-gray-500')}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFormStore } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { Check, Trash2 } from 'lucide-react';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\n/* ---------------- utils ---------------- */\n\nconst distance = (a: { x: number; y: number }, b: { x: number; y: number }) =>\n Math.hypot(a.x - b.x, a.y - b.y);\n\nconst smoothPoint = (\n prev: { x: number; y: number } | null,\n curr: { x: number; y: number },\n smoothing = 0.75\n) => {\n if (!prev) return curr;\n return {\n x: prev.x * smoothing + curr.x * (1 - smoothing),\n y: prev.y * smoothing + curr.y * (1 - smoothing),\n };\n};\n\n/**\n * Extract a browser-displayable URL from the field value.\n *\n * The value stored in the form can be:\n * - null/undefined → no signature\n * - plain string (S3 key) → NOT displayable by a browser\n * - object { presigned_url, … } → displayable via presigned_url\n *\n * We only return a URL when the backend has resolved a presigned_url.\n * This avoids ever trying to render an S3 key as an <img src>.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction extractDisplayUrl(value: any): string | null {\n if (!value || typeof value !== 'object') return null;\n if (typeof value.presigned_url === 'string' && value.presigned_url) {\n return value.presigned_url;\n }\n return null;\n}\n\n/* ---------------- component ---------------- */\n\nexport const SignatureUploadWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, setValue, setTouched, error, disabled, touched, value } = useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const pathRef = useRef<string>('');\n const lastPointRef = useRef<{ x: number; y: number } | null>(null);\n const lastTimeRef = useRef<number | null>(null);\n const lastWidthRef = useRef<number>(2);\n\n const [isDrawing, setIsDrawing] = useState(false);\n const [hasDrawing, setHasDrawing] = useState(false); // canvas has strokes\n const [isUploading, setIsUploading] = useState(false);\n const [isConfirmed, setIsConfirmed] = useState(false); // signature was uploaded\n const [uploadError, setUploadError] = useState<string | null>(null);\n\n // Stable ref so the pre-submit handler always calls the latest closure\n // without needing to re-register on every render.\n const confirmSignatureRef = useRef<(() => Promise<void>) | null>(null);\n\n // Register/deregister with the store whenever pending-confirm state changes.\n useEffect(() => {\n if (hasDrawing && !isConfirmed) {\n store.registerPreSubmitHandler(fieldId, async () => {\n if (confirmSignatureRef.current) {\n await confirmSignatureRef.current();\n }\n });\n } else {\n store.unregisterPreSubmitHandler(fieldId);\n }\n return () => {\n store.unregisterPreSubmitHandler(fieldId);\n };\n }, [hasDrawing, isConfirmed, fieldId, store]);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n // ── Derived state ──────────────────────────────────────────────\n // Only objects with presigned_url (from backend/prefill) are displayable.\n // Plain S3 keys stored after upload are NOT displayable, so this returns\n // null and the component stays in canvas mode naturally.\n const displayUrl = useMemo(() => extractDisplayUrl(value), [value]);\n const showPreview = displayUrl !== null;\n\n // ── Canvas setup ───────────────────────────────────────────────\n // Runs whenever the canvas enters the DOM (when switching from preview → canvas).\n useEffect(() => {\n if (showPreview) return; // canvas not in DOM\n\n const canvas = canvasRef.current;\n if (!canvas) return;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const dpr = window.devicePixelRatio || 1;\n const width = 400;\n const height = 200;\n\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n\n ctx.scale(dpr, dpr);\n ctx.lineCap = 'round';\n ctx.lineJoin = 'round';\n ctx.strokeStyle = '#000';\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, width, height);\n }, [showPreview]);\n\n // ── Early exits (after all hooks) ─────────────────────────────\n const uploadHandler = store.getUploadHandler();\n if (!fieldDef || !uploadHandler) return null;\n\n /* ---------------- helpers ---------------- */\n\n const getPoint = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n const canvas = canvasRef.current!;\n const rect = canvas.getBoundingClientRect();\n const e = 'touches' in event ? event.touches[0] : event;\n return {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n };\n\n /* ---------------- drawing ---------------- */\n\n const startDrawing = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (disabled) return;\n\n setIsDrawing(true);\n setIsConfirmed(false); // reset if user starts re-drawing\n setUploadError(null);\n setTouched();\n\n const ctx = canvasRef.current?.getContext('2d');\n if (!ctx) return;\n\n const point = getPoint(event);\n\n ctx.beginPath();\n ctx.moveTo(point.x, point.y);\n\n pathRef.current += `M${point.x},${point.y}`;\n\n lastPointRef.current = point;\n lastTimeRef.current = performance.now();\n lastWidthRef.current = 2;\n };\n\n const draw = (\n event: React.MouseEvent<HTMLCanvasElement> | React.TouchEvent<HTMLCanvasElement>\n ) => {\n if (!isDrawing || disabled) return;\n\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (!canvas || !ctx) return;\n\n const rawPoint = getPoint(event);\n const lastPoint = lastPointRef.current;\n if (!lastPoint) return;\n\n const smoothed = smoothPoint(lastPoint, rawPoint, 0.75);\n\n // Ignore tiny jitter\n if (distance(lastPoint, smoothed) < 0.7) return;\n\n const now = performance.now();\n const dt = now - (lastTimeRef.current || now);\n const dist = distance(lastPoint, smoothed);\n const velocity = dist / Math.max(dt, 1);\n\n // Velocity → stroke width\n const minWidth = 1.2;\n const maxWidth = 3.5;\n const targetWidth = Math.max(\n minWidth,\n Math.min(maxWidth, maxWidth - velocity * 6)\n );\n\n const width =\n lastWidthRef.current * 0.7 + targetWidth * 0.3;\n\n ctx.lineWidth = width;\n\n // Smooth quadratic curve\n const midX = (lastPoint.x + smoothed.x) / 2;\n const midY = (lastPoint.y + smoothed.y) / 2;\n\n ctx.quadraticCurveTo(lastPoint.x, lastPoint.y, midX, midY);\n ctx.stroke();\n\n pathRef.current += ` Q${lastPoint.x},${lastPoint.y} ${midX},${midY}`;\n\n lastPointRef.current = smoothed;\n lastTimeRef.current = now;\n lastWidthRef.current = width;\n\n setHasDrawing(true);\n };\n\n const stopDrawing = () => {\n setIsDrawing(false);\n lastPointRef.current = null;\n lastTimeRef.current = null;\n };\n\n /* ---------------- actions ---------------- */\n\n const clearSignature = () => {\n if (showPreview) {\n // Delete existing backend signature → value becomes null →\n // displayUrl becomes null → showPreview flips to false →\n // canvas mounts automatically via the conditional render.\n setValue(null);\n setTouched();\n return;\n }\n\n // Clear the drawing canvas\n const canvas = canvasRef.current;\n const ctx = canvas?.getContext('2d');\n if (canvas && ctx) {\n ctx.fillStyle = '#fff';\n ctx.fillRect(0, 0, 400, 200);\n }\n\n pathRef.current = '';\n lastPointRef.current = null;\n setHasDrawing(false);\n setIsConfirmed(false);\n setValue(null);\n setTouched();\n };\n\n const generateSVG = () => `\n<svg width=\"400\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n <path d=\"${pathRef.current}\"\n stroke=\"black\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n fill=\"none\"/>\n</svg>`.trim();\n\n const confirmSignature = async () => {\n if (!hasDrawing) return;\n\n setIsUploading(true);\n setUploadError(null);\n setTouched();\n store.incrementPendingUploads();\n\n try {\n const svg = generateSVG();\n const blob = new Blob([svg], { type: 'image/svg+xml' });\n const filename = `signature_${Date.now()}.svg`;\n const key = await uploadHandler(blob, filename);\n\n // Store the S3 key. This is NOT a displayable URL, so\n // extractDisplayUrl returns null → showPreview stays false →\n // canvas remains visible with the user's drawing intact.\n setValue(key);\n setIsConfirmed(true);\n setHasDrawing(false); // disable confirm button\n } catch (err) {\n console.error('[SignatureUpload] Upload failed:', err);\n setUploadError(\n err instanceof Error ? err.message : 'Signature upload failed. Please try again.'\n );\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n confirmSignatureRef.current = confirmSignature;\n\n // Whether the trash button should be enabled\n const canClear = showPreview ? !disabled : (hasDrawing || isConfirmed);\n\n /* ---------------- UI ---------------- */\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n {showPreview ? (\n /* ── Preview mode: existing signature from backend ── */\n <div className=\"relative\">\n <div\n className={fieldControlClass(\n fieldDef,\n 'border border-gray-200 rounded bg-white flex items-center justify-start p-2',\n )}\n >\n <img\n src={displayUrl}\n alt=\"Signature\"\n className=\"object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80 hover:bg-red-50\"\n onClick={clearSignature}\n disabled={!canClear}\n title=\"Delete signature and draw a new one\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n ) : (\n /* ── Canvas mode: drawing / confirmed ── */\n <>\n <div className=\"relative\">\n <canvas\n ref={canvasRef}\n className={fieldControlClass(\n fieldDef,\n `border rounded touch-none ${\n isConfirmed\n ? 'border-green-300 cursor-default'\n : 'border-gray-200 cursor-crosshair'\n }`,\n )}\n onMouseDown={startDrawing}\n onMouseMove={draw}\n onMouseUp={stopDrawing}\n onMouseLeave={stopDrawing}\n onTouchStart={startDrawing}\n onTouchMove={draw}\n onTouchEnd={stopDrawing}\n />\n\n <Button\n type=\"button\"\n size=\"icon\"\n variant=\"ghost\"\n className=\"absolute top-2 left-2 bg-white/80\"\n onClick={clearSignature}\n disabled={!canClear}\n title={isConfirmed ? 'Clear saved signature' : 'Clear canvas'}\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n\n {isConfirmed ? (\n <div className=\"flex items-center gap-2 text-sm text-green-600\">\n <Check className=\"h-4 w-4\" />\n <span>Signature saved</span>\n </div>\n ) : (\n <>\n <Button\n type=\"button\"\n onClick={confirmSignature}\n disabled={!hasDrawing || isUploading}\n className=\"text-xs\"\n >\n <Check className=\"h-4 w-4 mr-1\" />\n {isUploading ? 'Saving…' : 'Confirm'}\n </Button>\n {uploadError && (\n <p className=\"text-xs text-red-500 mt-1\">{uploadError}</p>\n )}\n </>\n )}\n </>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from \"react\";\nimport { Upload as UploadIcon } from \"lucide-react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface UploadProps {\n accept?: string;\n multiple?: boolean;\n disabled?: boolean;\n value?: FileList | File[] | null;\n onChange: (files: FileList | null) => void;\n className?: string;\n /** Shown under placeholder, e.g. \"PDF, PNG, JPG\" */\n formatsLabel?: string;\n placeholder?: string;\n beforeUploadContent?: React.ReactNode;\n id?: string;\n /**\n * When true, do not show \"N files selected\" in the drop zone; parent can render file rows.\n */\n listLayout?: boolean;\n}\n\nexport function Upload({\n value,\n accept,\n multiple,\n disabled,\n onChange,\n className,\n formatsLabel,\n placeholder = \"Upload File\",\n beforeUploadContent,\n id: idProp,\n listLayout = false,\n}: UploadProps) {\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const generatedId = React.useId();\n const inputId = idProp ?? generatedId;\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.files ?? null);\n };\n\n React.useEffect(() => {\n if (!value && inputRef.current) {\n inputRef.current.value = \"\";\n }\n }, [value]);\n\n const count = value?.length ?? 0;\n const formatsText = formatsLabel ?? accept;\n\n return (\n <div\n className={cn(\n \"border border-dashed bg-[#F7F7F7] border-gray-200 rounded-lg py-5 px-4 flex items-center justify-center text-[#989898]\",\n disabled && \"opacity-50 pointer-events-none\",\n className,\n )}\n >\n <input\n type=\"file\"\n ref={inputRef}\n accept={accept}\n id={inputId}\n className=\"hidden\"\n multiple={multiple}\n disabled={disabled}\n onChange={handleFileChange}\n />\n <label\n htmlFor={inputId}\n className={cn(\n \"cursor-pointer w-full\",\n disabled && \"cursor-not-allowed\",\n )}\n >\n <div>\n {count > 0 && !listLayout ? (\n <div className=\"text-center text-sm font-semibold text-gray-700\">\n {count} file{count === 1 ? \"\" : \"s\"} selected\n </div>\n ) : beforeUploadContent ? (\n beforeUploadContent\n ) : (\n <div className=\"flex flex-col items-center justify-center\">\n <div className=\"text-sm text-black font-normal leading-[120%] tracking-[-0.28px] text-center\">\n Upload your surgery prescription\n <br />\n and medical records\n </div>\n <UploadIcon size={20} className=\"text-[#727272] mt-4\" />\n <div className=\"text-xs mt-1 text-text-shades-2\">\n {placeholder}\n </div>\n <div className=\"mt-2 text-10px leading-[140%] text-[#989898]\">\n Supported formats - {formatsText}\n </div>\n </div>\n )}\n </div>\n </label>\n </div>\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { X } from \"lucide-react\";\nimport { useField } from \"../../react/useField\";\nimport { useFormStore } from \"../../react/FormProvider\";\nimport { useForm } from \"../../react/useForm\";\nimport { Label } from \"../shadcn/label\";\nimport { Upload } from \"../components/Upload\";\nimport type { FileUploadFieldDef } from \"../../core/types\";\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from \"../../react/fieldStyle\";\n\nfunction fileListFromArray(files: File[]): FileList {\n const dt = new DataTransfer();\n files.forEach((f) => dt.items.add(f));\n return dt.files;\n}\n\nfunction matchesAccept(file: File, accept?: string): boolean {\n if (!accept || accept === \"*/*\") return true;\n const tokens = accept.split(\",\").map((t) => t.trim().toLowerCase());\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return tokens.some((token) => {\n if (token.startsWith(\".\")) return name.endsWith(token);\n if (token.endsWith(\"/*\")) {\n const prefix = token.slice(0, -1);\n return type.startsWith(prefix);\n }\n return type === token;\n });\n}\n\nfunction basenameKey(key: string): string {\n const parts = key.split(\"/\");\n return parts[parts.length - 1] || key;\n}\n\nfunction fileRows(\n listLayout: boolean,\n localFiles: FileList | null,\n value: unknown,\n): { label: string; index: number }[] {\n if (!listLayout) return [];\n if (localFiles && localFiles.length > 0) {\n return Array.from(localFiles).map((f, i) => ({ label: f.name, index: i }));\n }\n if (Array.isArray(value) && value.length > 0) {\n return value.map((k, i) => ({\n label: basenameKey(String(k)),\n index: i,\n }));\n }\n if (value !== null && value !== undefined && value !== \"\") {\n return [{ label: basenameKey(String(value)), index: 0 }];\n }\n return [];\n}\n\nexport const FormFileUploadWidget: React.FC<{ fieldId: string }> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } =\n useField(fieldId);\n const store = useFormStore();\n const { state } = useForm();\n const [localFiles, setLocalFiles] = useState<FileList | null>(null);\n const [isUploading, setIsUploading] = useState(false);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const listLayout =\n fieldDef?.type === \"file_upload\" &&\n (fieldDef as FileUploadFieldDef).list === true;\n\n const rows = useMemo(\n () => fileRows(listLayout, localFiles, value),\n [listLayout, localFiles, value],\n );\n\n if (!fieldDef || fieldDef.type !== \"file_upload\") return null;\n\n const def = fieldDef as FileUploadFieldDef;\n const accept = def.accept ?? \"*/*\";\n const maxSize = def.maxSize ?? 10 * 1024 * 1024;\n const allowMultiple = def.multiple === true;\n\n const uploadHandler = store.getFileUploadHandler();\n const showLabel = isLabelVisible(fieldDef);\n\n if (!uploadHandler) {\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div className=\"border-2 border-red-300 rounded-lg p-4 bg-red-50\">\n <p className=\"text-sm text-red-600\">\n Upload handler not configured. Provide `config.onFileUpload` or\n `config.onUpload` on FormProvider.\n </p>\n </div>\n </div>\n );\n }\n\n const hasStoredValue =\n value !== null &&\n value !== undefined &&\n value !== \"\" &&\n !(Array.isArray(value) && value.length === 0);\n\n const removeFileAt = (index: number) => {\n setTouched();\n if (disabled || isUploading) return;\n\n const hadLocal = localFiles != null && localFiles.length > 0;\n\n if (hadLocal) {\n const next = Array.from(localFiles!).filter((_, i) => i !== index);\n if (next.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n setLocalFiles(fileListFromArray(next));\n if (allowMultiple && Array.isArray(value)) {\n setValue(value.filter((_, i) => i !== index));\n } else {\n setValue(null);\n }\n return;\n }\n\n if (allowMultiple && Array.isArray(value)) {\n const next = value.filter((_, i) => i !== index);\n if (next.length === 0) store.setExternalError(fieldId, null);\n setValue(next.length ? next : null);\n return;\n }\n store.setExternalError(fieldId, null);\n setValue(null);\n };\n\n const handleChange = async (files: FileList | null) => {\n setTouched();\n\n if (!files || files.length === 0) {\n store.setExternalError(fieldId, null);\n setLocalFiles(null);\n setValue(null);\n return;\n }\n\n const selected = Array.from(files);\n for (const file of selected) {\n if (!matchesAccept(file, accept)) {\n setLocalFiles(null);\n store.setExternalError(fieldId, `File type not allowed: ${file.name}`);\n return;\n }\n if (file.size > maxSize) {\n setLocalFiles(null);\n store.setExternalError(\n fieldId,\n `File must be less than ${Math.round(maxSize / (1024 * 1024))}MB: ${file.name}`,\n );\n return;\n }\n }\n\n store.setExternalError(fieldId, null);\n\n const toUpload = allowMultiple ? selected : [selected[0]];\n setLocalFiles(fileListFromArray(toUpload));\n\n setIsUploading(true);\n store.incrementPendingUploads();\n\n try {\n if (allowMultiple) {\n const keys: string[] = [];\n for (const file of toUpload) {\n keys.push(await uploadHandler(file, file.name));\n }\n setValue(keys);\n } else {\n const key = await uploadHandler(toUpload[0], toUpload[0].name);\n setValue(key);\n }\n store.setExternalError(fieldId, null);\n } catch (err) {\n console.error(\"[FormFileUpload] Upload failed:\", err);\n const message =\n err instanceof Error ? err.message : \"Upload failed. Please try again.\";\n store.setExternalError(fieldId, message);\n setLocalFiles(null);\n setValue(null);\n } finally {\n setIsUploading(false);\n store.decrementPendingUploads();\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, \"space-y-2\")}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <Upload\n accept={accept}\n multiple={allowMultiple}\n value={localFiles}\n onChange={handleChange}\n disabled={disabled || isUploading}\n listLayout={listLayout}\n placeholder={\n isUploading\n ? \"Uploading...\"\n : (def.uploadPlaceholder ?? \"Upload File\")\n }\n formatsLabel={def.uploadFormats}\n className={fieldControlClass(\n fieldDef,\n isUploading ? \"opacity-70\" : undefined,\n )}\n />\n\n {listLayout && rows.length > 0 ? (\n <ul className=\"flex flex-col gap-2 !mt-5 list-none p-0 mb-0 mx-0\">\n {rows.map((row) => (\n <li\n key={`${row.index}-${row.label}`}\n className=\"flex items-center justify-between rounded-md bg-white/50 px-3 py-2.5 text-sm text-[#191919] font-normal tracking-[-0.28px]\"\n >\n <span className=\"truncate pr-2\">{row.label}</span>\n <button\n type=\"button\"\n disabled={disabled || isUploading}\n aria-label={`Remove ${row.label}`}\n onClick={() => removeFileAt(row.index)}\n className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-400 text-white hover:bg-gray-500 disabled:opacity-50\"\n >\n <X size={14} strokeWidth={2.5} />\n </button>\n </li>\n ))}\n </ul>\n ) : null}\n\n {hasStoredValue && !listLayout ? (\n <p className=\"text-xs text-green-600\">\n {allowMultiple && Array.isArray(value)\n ? `${value.length} file(s) uploaded`\n : \"File uploaded\"}\n </p>\n ) : null}\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, \"text-xs text-gray-500\")}>\n {fieldDef.description}\n </p>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, \"text-xs text-red-500\")}>\n {error}\n </p>\n )}\n </div>\n );\n};\n","import * as React from \"react\"\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\"\nimport { Circle } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Root\n className={cn(\"grid gap-2\", className)}\n {...props}\n ref={ref}\n />\n )\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n \"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { RadioGroup, RadioGroupItem } from '../shadcn/radio-group';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const RadioWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as RadioFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const handleChange = (val: string) => {\n const opt = options.find(o => String(o.value) === val);\n setValue(opt ? opt.value : val);\n setTouched();\n };\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <RadioGroup\n value={value != null ? String(value) : undefined}\n onValueChange={handleChange}\n disabled={disabled || loading}\n className=\"flex flex-col gap-2\"\n >\n {options.map(opt => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <RadioGroupItem\n id={`${fieldId}-${String(opt.value)}`}\n value={String(opt.value)}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </RadioGroup>\n\n {loading && (\n <p className=\"text-xs text-muted-foreground\">Loading options...</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Checkbox as CheckboxPrimitive } from '../shadcn/checkbox';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const CheckboxWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedValues = Array.isArray(value) ? value : [];\n\n useEffect(() => {\n if (!fieldDef) return;\n const def = fieldDef as CheckboxFieldDef;\n\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const toggleOption = (optValue: any) => {\n const isSelected = isOptionSelected(selectedValues, optValue);\n const newValues = isSelected\n ? selectedValues.filter((v) => v !== optValue && String(v) !== String(optValue))\n : [...selectedValues, optValue];\n setValue(newValues);\n setTouched();\n };\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n showError ? 'text-red-600' : '',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div\n className={fieldControlClass(\n fieldDef,\n `border rounded-md p-3 space-y-2 ${showError ? 'border-red-500' : ''} ${disabled || loading ? 'opacity-50 pointer-events-none' : ''}`,\n )}\n >\n {loading && (\n <div className=\"text-sm text-muted-foreground\">Loading options...</div>\n )}\n {!loading &&\n options.map((opt) => (\n <div key={String(opt.value)} className=\"flex items-center space-x-2\">\n <CheckboxPrimitive\n id={`${fieldId}-${String(opt.value)}`}\n checked={isOptionSelected(selectedValues, opt.value)}\n onCheckedChange={() => toggleOption(opt.value)}\n disabled={disabled}\n />\n <Label\n htmlFor={`${fieldId}-${String(opt.value)}`}\n className=\"font-normal cursor-pointer\"\n >\n {opt.label}\n </Label>\n </div>\n ))}\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-xs text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Slider } from '../shadcn/slider';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { SliderFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const SliderWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'slider') return null;\n\n const def = fieldDef as SliderFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const step = def.step ?? 1;\n\n const raw = value == null || value === '' ? min : Number(value);\n const num = Number.isFinite(raw) ? Math.min(max, Math.max(min, raw)) : min;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(def);\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n <span className=\"ml-2 text-muted-foreground font-normal tabular-nums\">\n {num}/{max}\n </span>\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {labelEl}\n <Slider\n className={fieldControlClass(\n def,\n cn('py-1', showError && 'opacity-90 ring-1 ring-red-500 rounded'),\n )}\n disabled={disabled}\n min={min}\n max={max}\n step={step}\n value={[num]}\n onValueChange={(v) => {\n const n = v[0] ?? min;\n setValue(n);\n setTouched();\n }}\n aria-label={!showLabel ? `${def.label} ${num}/${max}` : undefined}\n />\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype SendStatus = 'idle' | 'sending' | 'sent' | 'error';\n\nconst RESEND_COOLDOWN_SECONDS = 30;\n\nexport const PhoneInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled, value: fieldValue } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Drive the input directly from the store so the value survives remounts\n // (e.g. completed step collapsing into an accordion and re-expanding).\n const rawPhone = (fieldValue as string) ?? '';\n\n // On remount (step collapses then re-expands), local state resets to defaults.\n // Seed from the store: 10 digits + no error means OTP was already sent successfully.\n const wasAlreadySent = rawPhone.length === 10 && !error;\n\n const [status, setStatus] = useState<SendStatus>(wasAlreadySent ? 'sent' : 'idle');\n const [resendCooldown, setResendCooldown] = useState(0);\n const [resendError, setResendError] = useState('');\n\n const hasSentRef = useRef(wasAlreadySent);\n const sentPhoneRef = useRef(wasAlreadySent ? rawPhone : '');\n const isSendingRef = useRef(false);\n const isResendingRef = useRef(false);\n\n // Suppress \"Sending OTP...\" from appearing as a red error; show spinner instead.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'sending' &&\n status !== 'sent';\n\n // Resend cooldown tick.\n useEffect(() => {\n if (resendCooldown <= 0) return;\n const t = setTimeout(() => setResendCooldown((c) => Math.max(0, c - 1)), 1000);\n return () => clearTimeout(t);\n }, [resendCooldown]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 10-digit mobile number';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 10);\n\n // If user edits after a successful send, re-lock step 1 and clear any verified OTP.\n if (hasSentRef.current && digits !== sentPhoneRef.current) {\n hasSentRef.current = false;\n sentPhoneRef.current = '';\n setStatus('idle');\n setResendCooldown(0);\n setResendError('');\n store.setExternalError(fieldId, 'Send OTP to continue');\n\n // Clear the linked OTP field so a stale verified value can't survive a phone change.\n const otpFieldId = (fieldDef.meta as any)?.otpFieldId as string | undefined;\n if (otpFieldId) {\n store.setValue(otpFieldId, '');\n store.setExternalError(otpFieldId, 'Verify OTP to continue');\n }\n }\n\n store.setValue(fieldId, digits);\n\n if (digits.length === 10 && !hasSentRef.current && !isSendingRef.current) {\n sendOtp(digits);\n }\n };\n\n const sendOtp = async (phone: string) => {\n if (isSendingRef.current) return;\n isSendingRef.current = true;\n setStatus('sending');\n store.setExternalError(fieldId, 'Sending OTP...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const sendPath = authCfg?.sendPath ?? '/api/auth/otp/send/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${sendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${phone}` }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n hasSentRef.current = true;\n sentPhoneRef.current = phone;\n setStatus('sent');\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n store.setExternalError(fieldId, null);\n } else {\n setStatus('error');\n store.setExternalError(fieldId, data.error ?? 'Failed to send OTP. Please try again.');\n }\n } catch {\n setStatus('error');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n } finally {\n isSendingRef.current = false;\n }\n };\n\n const handleResend = async () => {\n if (isResendingRef.current || resendCooldown > 0) return;\n isResendingRef.current = true;\n setResendError('');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const resendPath = authCfg?.resendPath ?? '/api/auth/otp/resend/';\n const countryCode = authCfg?.defaultCountryCode ?? '+91';\n const res = await fetch(`${base}${resendPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: `${countryCode}${rawPhone}`, retrytype: 'text' }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setResendCooldown(RESEND_COOLDOWN_SECONDS);\n setResendError('');\n } else {\n setResendError(data.error ?? 'Failed to resend OTP. Please try again.');\n }\n } catch {\n setResendError('Network error. Please try again.');\n } finally {\n isResendingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={rawPhone}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'sending'}\n placeholder={placeholder}\n maxLength={10}\n className={fieldControlClass(\n fieldDef,\n cn(\n showError && 'border-red-500',\n status === 'sent' && 'border-green-500 pr-9',\n status === 'sending' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'sending' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'sent' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'sent' && (\n <p className=\"text-xs text-green-600\">OTP sent to +91{rawPhone}</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n\n {status === 'sent' && (\n <div className=\"flex items-center gap-1 text-xs text-muted-foreground\">\n <span>Didn't receive it?</span>\n <button\n type=\"button\"\n onClick={handleResend}\n disabled={resendCooldown > 0}\n className={cn(\n 'underline transition-colors',\n resendCooldown > 0\n ? 'opacity-40 cursor-not-allowed'\n : 'text-primary hover:text-primary/80 cursor-pointer',\n )}\n >\n {resendCooldown > 0 ? `Resend in ${resendCooldown}s` : 'Resend OTP'}\n </button>\n </div>\n )}\n\n {resendError && (\n <p className=\"text-xs text-red-500\">{resendError}</p>\n )}\n </div>\n );\n};\n","import React, { useState, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { Input } from '../shadcn/input';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype VerifyStatus = 'idle' | 'verifying' | 'verified' | 'failed';\n\nexport const OtpInputWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, error, touched, disabled } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n\n // Resolve which field holds the phone number (via meta or default \"phone\").\n const phoneFieldId: string =\n (fieldDef?.meta as any)?.phoneFieldId ?? 'phone';\n\n // Subscribe to phone field reactively — needed for verify API call.\n const { value: phoneValue } = useField(phoneFieldId);\n const phone = (phoneValue as string) ?? '';\n\n // Always send E.164 to the API regardless of what's stored in the form.\n const e164Phone = phone.startsWith('+') ? phone : `+91${phone}`;\n\n const [otp, setOtp] = useState('');\n const [status, setStatus] = useState<VerifyStatus>('idle');\n\n const isVerifyingRef = useRef(false);\n\n // Suppress \"Verifying...\" from showing as a red error — spinner handles that.\n const showError =\n !!error &&\n (touched || state.submitAttempted) &&\n status !== 'verifying' &&\n status !== 'verified';\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const placeholder =\n typeof fieldDef.placeholder === 'string' && fieldDef.placeholder.trim()\n ? fieldDef.placeholder\n : 'Enter 4-digit OTP';\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const digits = e.target.value.replace(/\\D/g, '').slice(0, 4);\n\n // Reset to idle if user re-enters after a failed attempt.\n if (status === 'failed') {\n setStatus('idle');\n store.setExternalError(fieldId, null);\n }\n\n setOtp(digits);\n store.setValue(fieldId, digits);\n\n if (digits.length === 4 && !isVerifyingRef.current) {\n verifyOtp(digits);\n }\n };\n\n const verifyOtp = async (code: string) => {\n if (isVerifyingRef.current) return;\n isVerifyingRef.current = true;\n setStatus('verifying');\n store.setExternalError(fieldId, 'Verifying...');\n\n try {\n const authCfg = store.getConfig().auth;\n const base = authCfg?.baseUrl ?? ((typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ?? '');\n const verifyPath = authCfg?.verifyPath ?? '/api/auth/otp/verify/';\n const res = await fetch(`${base}${verifyPath}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ mobile_number: e164Phone, otp_code: code }),\n });\n\n const data = await res.json().catch(() => ({}));\n\n if (res.ok) {\n setStatus('verified');\n store.setExternalError(fieldId, null);\n store.setValue(fieldId, {\n verified: true as const,\n phone: e164Phone,\n code,\n ...(data?.verification_token ? { token: data.verification_token } : {}),\n });\n } else {\n setStatus('failed');\n const msg = data.error ?? 'Invalid OTP. Please try again.';\n store.setExternalError(fieldId, msg);\n setOtp('');\n store.setValue(fieldId, '');\n }\n } catch {\n setStatus('failed');\n store.setExternalError(fieldId, 'Network error. Please try again.');\n setOtp('');\n store.setValue(fieldId, '');\n } finally {\n isVerifyingRef.current = false;\n }\n };\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n\n <div className=\"relative\">\n <Input\n id={fieldId}\n type=\"tel\"\n inputMode=\"numeric\"\n value={otp}\n onChange={handleChange}\n onBlur={() => store.setTouched(fieldId)}\n disabled={disabled || status === 'verifying' || status === 'verified'}\n placeholder={placeholder}\n maxLength={4}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'tracking-widest text-center text-lg',\n showError && 'border-red-500',\n status === 'verified' && 'border-green-500 pr-9',\n status === 'verifying' && 'pr-9',\n ),\n )}\n aria-label={!showLabel ? fieldDef.label : undefined}\n />\n\n {status === 'verifying' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"animate-spin h-4 w-4 text-muted-foreground\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v8H4z\"\n />\n </svg>\n </div>\n )}\n\n {status === 'verified' && (\n <div className=\"absolute inset-y-0 right-3 flex items-center pointer-events-none\">\n <svg\n className=\"h-4 w-4 text-green-500\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n )}\n </div>\n\n {status === 'verified' && (\n <p className=\"text-xs text-green-600\">Mobile number verified successfully</p>\n )}\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n","import * as React from \"react\";\nimport { cn } from \"../../core/utils\";\n\nexport interface SwitchProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(\n ({ className, checked, onCheckedChange, disabled, ...props }, ref) => {\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n data-state={checked ? \"checked\" : \"unchecked\"}\n disabled={disabled}\n ref={ref}\n onClick={() => {\n if (!disabled && onCheckedChange) {\n onCheckedChange(!checked);\n }\n }}\n className={cn(\n \"peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input\",\n className\n )}\n {...props}\n >\n <span\n data-state={checked ? \"checked\" : \"unchecked\"}\n className=\"pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform\"\n style={{ transform: checked ? 'translateX(1rem)' : 'translateX(0)' }}\n />\n </button>\n );\n }\n);\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n","import React from 'react';\nimport type { StaticTextFieldDef, FieldDef } from '../core/types';\nimport { cn } from '../core/utils';\nimport { useField } from './useField';\n// Lightweight widgets kept eager: they only depend on Radix + native inputs and\n// are common in simple forms, so loading them behind Suspense would add a flash\n// for no real byte savings.\nimport { TextWidget } from '../ui/widgets/Text';\nimport { SelectWidget } from '../ui/widgets/Select';\nimport { MultiSelectWidget } from '../ui/widgets/MultiSelect';\nimport { RepeatableWidget } from '../ui/widgets/Repeatable';\nimport { ImageUploadWidget } from '../ui/widgets/ImageUpload';\nimport { MediaUploadWidget } from '../ui/widgets/MediaUpload';\nimport { SignatureUploadWidget } from '../ui/widgets/SignatureUpload';\nimport { FormFileUploadWidget } from '../ui/widgets/FormFileUpload';\nimport { RadioWidget } from '../ui/widgets/Radio';\nimport { CheckboxWidget } from '../ui/widgets/Checkbox';\nimport { SliderWidget } from '../ui/widgets/SliderWidget';\nimport { PhoneInputWidget } from '../ui/widgets/PhoneInputWidget';\nimport { OtpInputWidget } from '../ui/widgets/OtpInputWidget';\nimport { Switch } from '../ui/shadcn/switch';\nimport { Label } from '../ui/shadcn/label';\nimport { useFormStore } from './FormProvider';\nimport type { ToggleFieldDef } from '../core/types';\nimport { fieldMetaRequestsMarMedicationOrdersButton } from '../core/marMedicationOrdersMeta';\nimport {\n FieldRequiredIndicator,\n fieldDescriptionClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from './fieldStyle';\n\ntype WidgetComponent = React.ComponentType<{ fieldId: string }>;\n\n// Heavy / specialty widgets are loaded on demand so simple forms never ship\n// their dependencies. Each becomes its own async chunk, fetched only when a\n// form actually renders that field type. The big wins:\n// - richtext -> TipTap + ProseMirror\n// - date / datetime -> react-day-picker\n// - smart_textarea -> compromise (NLP)\n// - editable_table -> @tanstack/react-table\n// The specialty medical widgets are large and rarely used in lead forms.\nfunction lazyNamed(\n loader: () => Promise<Record<string, unknown>>,\n name: string,\n): React.LazyExoticComponent<WidgetComponent> {\n return React.lazy(async () => ({ default: (await loader())[name] as WidgetComponent }));\n}\n\nconst RichTextWidget = lazyNamed(() => import('../ui/widgets/RichTextWidget'), 'RichTextWidget');\nconst DateWidget = lazyNamed(() => import('../ui/widgets/DateWidget'), 'DateWidget');\nconst DateTimeWidget = lazyNamed(() => import('../ui/widgets/DateTimeWidget'), 'DateTimeWidget');\nconst EditableTableWidget = lazyNamed(() => import('../ui/widgets/EditableTable'), 'EditableTableWidget');\nconst AddMedicationWidget = lazyNamed(() => import('../ui/widgets/AddMedicationWidget'), 'AddMedicationWidget');\nconst DischargeMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/DischargeMedicationOrdersWidget'), 'DischargeMedicationOrdersWidget');\nconst AddInvestigationWidget = lazyNamed(() => import('../ui/widgets/AddInvestigationWidget'), 'AddInvestigationWidget');\nconst AddProcedureWidget = lazyNamed(() => import('../ui/widgets/AddProcedureWidget'), 'AddProcedureWidget');\nconst DifferentialDiagnosisWidget = lazyNamed(() => import('../ui/widgets/DifferentialDiagnosisWidget'), 'DifferentialDiagnosisWidget');\nconst VitalsWidget = lazyNamed(() => import('../ui/widgets/VitalsWidget'), 'VitalsWidget');\nconst HiddenVitalsWidget = lazyNamed(() => import('../ui/widgets/HiddenVitalsWidget'), 'HiddenVitalsWidget');\nconst ReferralWidget = lazyNamed(() => import('../ui/widgets/ReferralWidget'), 'ReferralWidget');\nconst FollowupWidget = lazyNamed(() => import('../ui/widgets/FollowupWidget'), 'FollowupWidget');\nconst SmartTextareaWidget = lazyNamed(() => import('../ui/widgets/SmartTextarea'), 'SmartTextareaWidget');\nconst DiagnosisTextareaWidget = lazyNamed(() => import('../ui/widgets/DiagnosisTextareaWidget'), 'DiagnosisTextareaWidget');\nconst ObstetricHistoryWidget = lazyNamed(() => import('../ui/widgets/ObstetricHistoryWidget'), 'ObstetricHistoryWidget');\nconst OphthalmologyWidget = lazyNamed(() => import('../ui/widgets/OphthalmologyWidget'), 'OphthalmologyWidget');\nconst OphthalDiagnosisWidget = lazyNamed(() => import('../ui/widgets/OphthalDiagnosisWidget'), 'OphthalDiagnosisWidget');\nconst OrthopedicExamWidget = lazyNamed(() => import('../ui/widgets/OrthopedicExamWidget'), 'OrthopedicExamWidget');\nconst MarMedicationOrdersWidget = lazyNamed(() => import('../ui/widgets/MarMedicationOrdersWidget'), 'MarMedicationOrdersWidget');\nconst SuggestionTextareaWidget = lazyNamed(() => import('../ui/widgets/SuggestionTextareaWidget'), 'SuggestionTextareaWidget');\nconst LensAssessmentWidget = lazyNamed(() => import('../ui/widgets/LensAssessmentWidget'), 'LensAssessmentWidget');\nconst FunctionalImpairmentScoreWidget = lazyNamed(() => import('../ui/widgets/FunctionalImpairmentScoreWidget'), 'FunctionalImpairmentScoreWidget');\nconst BiometryIolWorkupWidget = lazyNamed(() => import('../ui/widgets/BiometryIolWorkupWidget'), 'BiometryIolWorkupWidget');\nconst SurgicalRiskFlagsWidget = lazyNamed(() => import('../ui/widgets/SurgicalRiskFlagsWidget'), 'SurgicalRiskFlagsWidget');\nconst GsSmartHistoryWidget = lazyNamed(() => import('../ui/widgets/GsSmartHistoryWidget'), 'GsSmartHistoryWidget');\nconst GsExaminationWidget = lazyNamed(() => import('../ui/widgets/GsExaminationWidget'), 'GsExaminationWidget');\nconst GsGradingWidget = lazyNamed(() => import('../ui/widgets/GsGradingWidget'), 'GsGradingWidget');\nconst PainScaleFlagsWidget = lazyNamed(() => import('../ui/widgets/PainScaleFlagsWidget'), 'PainScaleFlagsWidget');\nconst UrologySmartHistoryWidget = lazyNamed(() => import('../ui/widgets/UrologySmartHistoryWidget'), 'UrologySmartHistoryWidget');\nconst UrologyExaminationWidget = lazyNamed(() => import('../ui/widgets/UrologyExaminationWidget'), 'UrologyExaminationWidget');\nconst UrologyPathwayWidget = lazyNamed(() => import('../ui/widgets/UrologyPathwayWidget'), 'UrologyPathwayWidget');\nconst OBGExaminationWidget = lazyNamed(() => import('../ui/widgets/OBGExaminationWidget'), 'OBGExaminationWidget');\nconst OBGPathwayWidget = lazyNamed(() => import('../ui/widgets/OBGPathwayWidget'), 'OBGPathwayWidget');\n\n// Wraps a lazily-loaded widget in a Suspense boundary. fallback is null to\n// avoid layout shift; the same field type shares one chunk, fetched once.\nfunction lazyWidget(node: React.ReactNode) {\n return <React.Suspense fallback={null}>{node}</React.Suspense>;\n}\n\ninterface FieldRendererProps {\n fieldId: string;\n}\n\nexport const FieldRenderer: React.FC<FieldRendererProps> = ({ fieldId }) => {\n const { fieldDef, visible } = useField(fieldId);\n\n if (!visible || !fieldDef) {\n return null;\n }\n\n return renderWidget(fieldId, fieldDef);\n};\n\nfunction renderWidget(fieldId: string, fieldDef: FieldDef) {\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n return <TextWidget fieldId={fieldId} />;\n\n case 'slider':\n return <SliderWidget fieldId={fieldId} />;\n\n case 'textarea':\n if (fieldMetaRequestsMarMedicationOrdersButton(fieldDef.meta)) {\n return lazyWidget(<MarMedicationOrdersWidget fieldId={fieldId} />);\n }\n return <TextWidget fieldId={fieldId} />;\n\n case 'richtext':\n return lazyWidget(<RichTextWidget fieldId={fieldId} />);\n\n case 'date':\n return lazyWidget(<DateWidget fieldId={fieldId} />);\n\n case 'datetime':\n return lazyWidget(<DateTimeWidget fieldId={fieldId} />);\n\n case 'select':\n return <SelectWidget fieldId={fieldId} />;\n\n case 'radio':\n return <RadioWidget fieldId={fieldId} />;\n\n case 'checkbox':\n return <CheckboxWidget fieldId={fieldId} />;\n\n case 'multiselect':\n return <MultiSelectWidget fieldId={fieldId} />;\n\n case 'repeatable':\n return <RepeatableWidget fieldId={fieldId} />;\n\n case 'image_upload':\n return <ImageUploadWidget fieldId={fieldId} />;\n\n case 'media_upload':\n return <MediaUploadWidget fieldId={fieldId} />;\n\n case 'file_upload':\n return <FormFileUploadWidget fieldId={fieldId} />;\n\n case 'signature':\n return <SignatureUploadWidget fieldId={fieldId} />;\n\n case 'editable_table':\n return lazyWidget(<EditableTableWidget fieldId={fieldId} />);\n\n case 'medications':\n return lazyWidget(<AddMedicationWidget fieldId={fieldId} />);\n\n case 'discharge_medication_orders':\n return lazyWidget(<DischargeMedicationOrdersWidget fieldId={fieldId} />);\n\n case 'investigations':\n return lazyWidget(<AddInvestigationWidget fieldId={fieldId} />);\n\n case 'procedures':\n return lazyWidget(<AddProcedureWidget fieldId={fieldId} />);\n\n case 'differential_diagnosis':\n return lazyWidget(<DifferentialDiagnosisWidget fieldId={fieldId} />);\n\n case 'vitals':\n return lazyWidget(<VitalsWidget fieldId={fieldId} />);\n\n case 'hidden_vitals':\n return lazyWidget(<HiddenVitalsWidget fieldId={fieldId} />);\n\n case 'referral':\n return lazyWidget(<ReferralWidget fieldId={fieldId} />);\n\n case 'followup':\n return lazyWidget(<FollowupWidget fieldId={fieldId} />);\n\n case 'smart_textarea':\n return lazyWidget(<SmartTextareaWidget fieldId={fieldId} />);\n\n case 'diagnosis_textarea':\n return lazyWidget(<DiagnosisTextareaWidget fieldId={fieldId} />);\n\n case 'obstetric_history':\n return lazyWidget(<ObstetricHistoryWidget fieldId={fieldId} />);\n\n case 'eye_prescription':\n return lazyWidget(<OphthalmologyWidget fieldId={fieldId} />);\n\n case 'ophthal_diagnosis':\n return lazyWidget(<OphthalDiagnosisWidget fieldId={fieldId} />);\n case 'orthopedic_exam':\n return lazyWidget(<OrthopedicExamWidget fieldId={fieldId} />);\n\n case 'general_surgery_smart_history':\n return lazyWidget(<GsSmartHistoryWidget fieldId={fieldId} />);\n\n case 'general_surgery_examination':\n return lazyWidget(<GsExaminationWidget fieldId={fieldId} />);\n\n case 'general_surgery_grading':\n return lazyWidget(<GsGradingWidget fieldId={fieldId} />);\n\n case 'pain_scale_flags':\n return lazyWidget(<PainScaleFlagsWidget fieldId={fieldId} />);\n\n case 'urology_smart_history':\n return lazyWidget(<UrologySmartHistoryWidget fieldId={fieldId} />);\n\n case 'urology_examination':\n return lazyWidget(<UrologyExaminationWidget fieldId={fieldId} />);\n\n case 'urology_pathway':\n return lazyWidget(<UrologyPathwayWidget fieldId={fieldId} />);\n\n case 'obg_examination':\n return lazyWidget(<OBGExaminationWidget fieldId={fieldId} />);\n\n case 'obg_pathway':\n return lazyWidget(<OBGPathwayWidget fieldId={fieldId} />);\n\n case 'phone_input':\n return <PhoneInputWidget fieldId={fieldId} />;\n\n case 'otp_input':\n return <OtpInputWidget fieldId={fieldId} />;\n\n case 'toggle': {\n const { value, setValue, setTouched, disabled } = useField(fieldId);\n const store = useFormStore();\n const excludes = (fieldDef as ToggleFieldDef).excludes ?? [];\n const showLabel = isLabelVisible(fieldDef);\n return (\n <div className={fieldWrapperClass(fieldDef, 'flex items-center gap-3')}>\n <Switch\n checked={value === true}\n disabled={disabled}\n onCheckedChange={(checked) => {\n setValue(checked);\n setTouched();\n if (checked) excludes.forEach((id) => store.setValue(id, false));\n }}\n />\n {showLabel ? (\n <Label\n className={fieldLabelClass(\n fieldDef,\n 'text-sm font-medium leading-none cursor-pointer select-none',\n )}\n >\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n </div>\n );\n }\n case 'suggestion_textarea':\n case 'complaint_chips':\n return lazyWidget(<SuggestionTextareaWidget fieldId={fieldId} />);\n\n case 'lens_assessment':\n return lazyWidget(<LensAssessmentWidget fieldId={fieldId} />);\n\n case 'functional_impairment_score':\n return lazyWidget(<FunctionalImpairmentScoreWidget fieldId={fieldId} />);\n\n case 'biometry_iol_workup':\n return lazyWidget(<BiometryIolWorkupWidget fieldId={fieldId} />);\n\n case 'surgical_risk_flags':\n return lazyWidget(<SurgicalRiskFlagsWidget fieldId={fieldId} />);\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div\n className={fieldWrapperClass(\n def,\n cn(labelClass, 'text-muted-foreground'),\n )}\n >\n {def.label}\n {def.description && (\n <p className={fieldDescriptionClass(def, cn('mt-1', descClass, 'opacity-90'))}>\n {def.description}\n </p>\n )}\n </div>\n );\n }\n\n default:\n return <div className=\"text-red-500\">Unknown field type: {fieldDef.type}</div>;\n }\n};\n","import React, { useState } from 'react';\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport { cn } from '../../core/utils';\n\ninterface SectionProps {\n title: string;\n children: React.ReactNode;\n}\n\nexport const Section: React.FC<SectionProps> = ({ title, children }) => {\n const [expanded, setExpanded] = useState(true);\n\n const handleToggle = () => setExpanded((prev) => !prev);\n\n const contentClassName = cn(\n 'overflow-hidden transition-[height] duration-200 ease-in-out',\n !expanded && 'hidden'\n );\n\n return (\n <div className=\"mb-6 border rounded-lg bg-white shadow-sm overflow-hidden\">\n <button\n type=\"button\"\n onClick={handleToggle}\n className=\"w-full flex items-center justify-between gap-2 p-4 text-left border-b hover:bg-gray-50/80 transition-colors\"\n >\n <h3 className=\"text-lg font-medium\">{title}</h3>\n <span className=\"flex-shrink-0 text-muted-foreground\" aria-hidden>\n {expanded ? (\n <ChevronDown className=\"h-5 w-5\" />\n ) : (\n <ChevronRight className=\"h-5 w-5\" />\n )}\n </span>\n </button>\n <div className={contentClassName}>\n <div className=\"p-4 pt-4 space-y-4 border-t-0\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n","import React from 'react';\n\ninterface ColumnLayoutProps {\n /** Number of columns. Children take equal width. */\n columns: number;\n /** Optional label shown above the row of fields. */\n label?: string;\n children: React.ReactNode;\n}\n\nexport const ColumnLayout: React.FC<ColumnLayoutProps> = ({\n columns,\n label,\n children,\n}) => {\n const gridCols = Math.max(1, Math.min(columns, 12));\n const gridClass = `grid gap-4 w-full`;\n const style = {\n gridTemplateColumns: `repeat(${gridCols}, minmax(0, 1fr))`,\n };\n\n return (\n <div className=\"mb-6\">\n {label != null && label !== '' && (\n <div className=\"mb-2 text-sm font-medium text-gray-700\">{label}</div>\n )}\n <div className={gridClass} style={style}>\n {children}\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { useFormStore } from \"./FormProvider\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\n\nexport const DynamicForm: React.FC = () => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n // Memoize layout rendering to avoid unnecessary checks?\n // Actually we need to react to visibility changes which might hide sections?\n // For MVP, just render.\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n\n {schema.layout.map((node) => {\n if (node.type === \"section\") {\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) =>\n typeof child === \"string\" ? (\n <FieldRenderer key={child} fieldId={child} />\n ) : child.type === \"column_layout\" ? (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n ) : (\n <React.Fragment key={child.id ?? index} />\n ),\n )}\n </Section>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport type { SectionChild } from \"../core/types\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\n\nexport function renderSectionChildren(children: SectionChild[]) {\n return children.map((child, index) => {\n if (typeof child === \"string\") {\n return <FieldRenderer key={child} fieldId={child} />;\n }\n if (child.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={child.id}\n columns={child.columns}\n label={child.label}\n >\n {child.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={index} />;\n });\n}\n","import React from \"react\";\nimport type { LayoutNode } from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\nexport type DynamicFormV2SectionMode = \"accordion\" | \"plain\";\n\nexport interface DynamicFormV2Props {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n /**\n * `accordion` — bordered collapsible sections (same as DynamicForm).\n * `plain` — simple vertical stack, no card/accordion chrome.\n */\n sectionMode?: DynamicFormV2SectionMode;\n /** In `plain` mode, show the section title above fields. Default true. Ignored for accordion. */\n showSectionTitles?: boolean;\n className?: string;\n}\n\nfunction PlainSection({\n title,\n showHeading,\n children,\n}: {\n title: string;\n showHeading: boolean;\n children: React.ReactNode;\n}) {\n return (\n <div className=\"mb-6 space-y-4\">\n {showHeading ? (\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n ) : null}\n {children}\n </div>\n );\n}\n\n/**\n * Alternate layout shell for alternative designs (e.g. marketing / minimal flows).\n * Same schema traversal as {@link DynamicForm}; configurable title and section chrome.\n */\nexport const DynamicFormV2: React.FC<DynamicFormV2Props> = ({\n showTitle = true,\n sectionMode = \"plain\",\n showSectionTitles = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle ? (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n ) : null}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"section\") {\n if (sectionMode === \"accordion\") {\n return (\n <Section key={node.id} title={node.title}>\n {renderSectionChildren(node.children)}\n </Section>\n );\n }\n return (\n <PlainSection\n key={node.id}\n title={node.title}\n showHeading={showSectionTitles}\n >\n {renderSectionChildren(node.children)}\n </PlainSection>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React, { useState, useEffect } from \"react\";\nimport { Check } from \"lucide-react\";\nimport type {\n FormState,\n LayoutNode,\n MultiStepLayoutNode,\n MultiStepNode,\n FieldDef,\n} from \"../core/types\";\nimport { cn } from \"../core/utils\";\nimport { useFormStore } from \"./FormProvider\";\nimport { Section } from \"../ui/layouts/Section\";\nimport { ColumnLayout } from \"../ui/layouts/ColumnLayout\";\nimport { FieldRenderer } from \"./FieldRenderer\";\nimport { renderSectionChildren } from \"./renderSectionChildren\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction flattenStepFieldIds(step: MultiStepNode): string[] {\n const ids: string[] = [];\n for (const child of step.children) {\n if (typeof child === \"string\") {\n ids.push(child);\n } else if (child.type === \"column_layout\") {\n ids.push(...child.children);\n }\n }\n return ids;\n}\n\nfunction isFieldComplete(\n id: string,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n if (state.visibility[id] === false) return true; // hidden fields don't block\n if (state.errors[id]) return false;\n const def = fieldMap[id];\n if (def?.required) {\n const v = state.values[id];\n if (v === null || v === undefined || v === \"\") return false;\n if (Array.isArray(v) && v.length === 0) return false;\n }\n return true;\n}\n\nfunction isStepComplete(\n step: MultiStepNode,\n state: FormState,\n fieldMap: Record<string, FieldDef>\n): boolean {\n return flattenStepFieldIds(step).every((id) =>\n isFieldComplete(id, state, fieldMap)\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stepper header\n// ---------------------------------------------------------------------------\n\ntype StepStatus = \"complete\" | \"active\" | \"locked\";\n\ninterface StepperProps {\n steps: MultiStepNode[];\n statuses: StepStatus[];\n variant: \"numbered\" | \"dots\" | \"labels\";\n}\n\nconst Stepper: React.FC<StepperProps> = ({ steps, statuses, variant }) => {\n if (variant === \"dots\") {\n return (\n <div className=\"flex items-center gap-2 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div\n className={cn(\n \"h-2.5 w-2.5 rounded-full transition-colors\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary ring-2 ring-primary/30\",\n status === \"locked\" && \"bg-muted\"\n )}\n title={step.title}\n />\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n if (variant === \"labels\") {\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex flex-col items-center gap-1\">\n <div\n className={cn(\n \"h-2 w-2 rounded-full\",\n status === \"complete\" && \"bg-primary\",\n status === \"active\" && \"bg-primary\",\n status === \"locked\" && \"bg-muted\"\n )}\n />\n <span\n className={cn(\n \"text-xs whitespace-nowrap\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mb-4 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n }\n\n // numbered (default)\n return (\n <div className=\"flex items-center gap-0 mb-6\">\n {steps.map((step, i) => {\n const status = statuses[i];\n return (\n <React.Fragment key={step.id}>\n <div className=\"flex items-center gap-2\">\n <div\n className={cn(\n \"flex h-7 w-7 items-center justify-center rounded-full text-xs font-semibold border-2 transition-colors\",\n status === \"complete\" &&\n \"border-primary bg-primary text-primary-foreground\",\n status === \"active\" &&\n \"border-primary bg-background text-primary\",\n status === \"locked\" &&\n \"border-border bg-background text-muted-foreground\"\n )}\n >\n {status === \"complete\" ? (\n <Check className=\"h-3.5 w-3.5\" />\n ) : (\n i + 1\n )}\n </div>\n <span\n className={cn(\n \"text-sm font-medium hidden sm:block\",\n status === \"locked\"\n ? \"text-muted-foreground\"\n : \"text-foreground\"\n )}\n >\n {step.title}\n </span>\n </div>\n {i < steps.length - 1 && (\n <div\n className={cn(\n \"flex-1 h-px mx-3 transition-colors\",\n status === \"complete\" ? \"bg-primary\" : \"bg-border\"\n )}\n />\n )}\n </React.Fragment>\n );\n })}\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Active step shell — plain section, visually prominent\n// ---------------------------------------------------------------------------\n\nconst ActiveStep: React.FC<{ title: string; children: React.ReactNode }> = ({\n title,\n children,\n}) => (\n <div className=\"mb-4 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">{title}</h2>\n {children}\n </div>\n);\n\n// ---------------------------------------------------------------------------\n// Wizard — handles one multi_step layout node\n// ---------------------------------------------------------------------------\n\ninterface WizardProps {\n node: MultiStepLayoutNode;\n}\n\nconst Wizard: React.FC<WizardProps> = ({ node }) => {\n const store = useFormStore();\n // Spread into a new object on every store notification so React sees a\n // changed reference and actually re-renders. The store mutates nested\n // properties (values, errors, visibility) but keeps `this.state` as the\n // same object, so passing it directly would cause React to bail out.\n const [formState, setFormState] = useState<FormState>(() => ({\n ...store.getState(),\n }));\n\n useEffect(() => {\n return store.subscribe((state) => {\n console.log(\"[MultiStepForm] store update →\", {\n values: state.values,\n errors: state.errors,\n visibility: state.visibility,\n });\n setFormState({ ...state });\n });\n }, [store]);\n\n const schema = store.getSchema();\n const fieldMap: Record<string, FieldDef> = {};\n schema.fields.forEach((f) => {\n fieldMap[f.id] = f;\n });\n\n const { steps, meta } = node;\n const showStepper = meta?.showStepper !== false;\n const variant = meta?.stepperVariant ?? \"numbered\";\n const collapseCompleted = meta?.collapseCompleted !== false;\n\n // Compute per-step status\n const stepComplete = steps.map((s) => {\n const fieldIds = flattenStepFieldIds(s);\n const complete = isStepComplete(s, formState, fieldMap);\n console.log(`[MultiStepForm] step \"${s.id}\" fieldIds=${JSON.stringify(fieldIds)} complete=${complete}`, {\n errors: fieldIds.map((id) => ({ id, error: formState.errors[id] })),\n values: fieldIds.map((id) => ({ id, value: formState.values[id] })),\n });\n return complete;\n });\n\n // First incomplete step is active; steps before it are complete; steps after are locked.\n const activeIndex =\n stepComplete.findIndex((c) => !c) === -1\n ? steps.length // all complete\n : stepComplete.findIndex((c) => !c);\n\n console.log(`[MultiStepForm] activeIndex=${activeIndex} stepComplete=${JSON.stringify(stepComplete)}`);\n\n const statuses: StepStatus[] = steps.map((_, i) => {\n if (i < activeIndex) return \"complete\";\n if (i === activeIndex) return \"active\";\n return \"locked\";\n });\n\n return (\n <div>\n {node.title && (\n <h2 className=\"text-lg font-semibold mb-4\">{node.title}</h2>\n )}\n {showStepper && (\n <Stepper steps={steps} statuses={statuses} variant={variant} />\n )}\n <div className=\"space-y-2\">\n {steps.map((step, i) => {\n const status = statuses[i];\n\n // Locked steps are not mounted at all — this is the \"unlock\" behaviour.\n if (status === \"locked\") return null;\n\n const children = renderSectionChildren(step.children);\n\n if (status === \"complete\") {\n // Completed steps are shown as a collapsible accordion when collapseCompleted.\n // When collapseCompleted is false, render them open but visually muted.\n if (collapseCompleted) {\n return (\n <Section key={step.id} title={step.title}>\n {children}\n </Section>\n );\n }\n return (\n <div\n key={step.id}\n className=\"mb-4 opacity-60 pointer-events-none select-none space-y-4\"\n >\n <h2 className=\"text-base font-medium text-foreground\">\n {step.title}\n </h2>\n {children}\n </div>\n );\n }\n\n // Active step\n return (\n <ActiveStep key={step.id} title={step.title}>\n {children}\n </ActiveStep>\n );\n })}\n </div>\n </div>\n );\n};\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\nexport interface MultiStepFormProps {\n /** When true, renders `schema.title` as the page heading. Default true. */\n showTitle?: boolean;\n className?: string;\n}\n\n/**\n * Renders a form schema that may contain `multi_step` layout nodes in addition\n * to the standard `section` / `column_layout` nodes.\n *\n * Multi-step groups unlock steps linearly: a step becomes visible only when\n * all fields in the previous step are valid (no errors, required fields filled).\n */\nexport const MultiStepForm: React.FC<MultiStepFormProps> = ({\n showTitle = true,\n className,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n\n return (\n <div className={cn(\"space-y-6\", className)}>\n {showTitle && (\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n </div>\n )}\n\n {schema.layout.map((node: LayoutNode) => {\n if (node.type === \"multi_step\") {\n return <Wizard key={node.id} node={node} />;\n }\n if (node.type === \"section\") {\n return (\n <div key={node.id} className=\"mb-6 space-y-4\">\n <h2 className=\"text-base font-medium text-foreground\">\n {node.title}\n </h2>\n {renderSectionChildren(node.children)}\n </div>\n );\n }\n if (node.type === \"column_layout\") {\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {node.children.map((fieldId) => (\n <FieldRenderer key={fieldId} fieldId={fieldId} />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useRef } from 'react';\nimport { useFormStore } from './FormProvider';\nimport { FieldRenderer } from './FieldRenderer';\nimport { cn } from '../core/utils';\nimport { AISuggestionsProvider, type AIMedication } from './AISuggestionsContext';\nimport type { LayoutNode, SectionChild } from '../core/types';\n\n/** Field keys that should be shown as suggestions (badges) instead of applied to form state */\nconst SUGGESTION_KEYS = new Set(['medications', 'investigations', 'procedures']);\n\n/** Shape of one differential diagnosis item from AI (must match form field value) */\nexport type AIDifferentialDiagnosisItem = {\n category: string;\n condition: string;\n likelihood: string;\n severity: string;\n treatability: string;\n keyFeatures?: string[];\n nextSteps?: string[];\n};\n\nfunction shallowEqualKeys(a: Record<string, any>, b: Record<string, any>): boolean {\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const k of keysA) {\n if (!keysB.includes(k) || a[k] !== b[k]) return false;\n }\n return true;\n}\n\nfunction normalizeAIMedications(arr: unknown): AIMedication[] {\n let parsed: unknown = arr;\n if (typeof arr === 'string') {\n try {\n parsed = JSON.parse(arr);\n } catch {\n return [];\n }\n }\n if (!Array.isArray(parsed)) return [];\n return parsed.filter((item): item is AIMedication => item != null && typeof item === 'object' && 'id' in item && 'brand_name' in item);\n}\n\nfunction normalizeDifferentialDiagnosis(val: unknown): AIDifferentialDiagnosisItem[] {\n let parsed: unknown = val;\n if (typeof val === 'string') {\n try {\n parsed = JSON.parse(val);\n } catch {\n return [];\n }\n }\n // Shape 1: object keyed by category, each with { conditions: [...] }\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n const result: AIDifferentialDiagnosisItem[] = [];\n for (const [category, group] of Object.entries(parsed as Record<string, any>)) {\n if (!group || typeof group !== 'object') continue;\n const conditions = Array.isArray((group as any).conditions) ? (group as any).conditions : [];\n for (const cond of conditions) {\n if (!cond || typeof cond !== 'object') continue;\n const {\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures,\n nextSteps,\n } = cond as any;\n if (!condition || !likelihood || !severity || !treatability) continue;\n result.push({\n category,\n condition,\n likelihood,\n severity,\n treatability,\n keyFeatures: Array.isArray(keyFeatures) ? keyFeatures : undefined,\n nextSteps: Array.isArray(nextSteps) ? nextSteps : undefined,\n });\n }\n }\n return result;\n }\n\n // Shape 2: already a flat array of items\n if (!Array.isArray(parsed)) return [];\n return parsed.filter(\n (item): item is AIDifferentialDiagnosisItem =>\n item != null &&\n typeof item === 'object' &&\n 'category' in item &&\n 'condition' in item &&\n 'likelihood' in item &&\n 'severity' in item &&\n 'treatability' in item\n );\n}\n\nexport interface SmartFormProps {\n /**\n * Structured result from AI analysis (e.g. patient-doctor conversation).\n * When this is set or updated, values are applied to the form by field ID.\n * Only keys that exist in the form schema are applied; unknown keys are ignored.\n * Fields are not marked as \"touched\" so you can distinguish AI-suggested vs user-edited if needed.\n * Listens to both reference and content changes (e.g. streaming updates to the same object).\n */\n aiAnalysisResult?: Record<string, any> | null;\n}\n\n/**\n * Form view that supports applying AI analysis results after load. Use inside\n * FormProvider like DynamicForm. When aiAnalysisResult is provided (e.g. when\n * AI finishes analyzing conversation), its values are applied to the form in\n * one batch without marking fields as touched. Re-applies when the result\n * reference or content changes (e.g. streaming or incremental AI updates).\n */\nexport const SmartForm: React.FC<SmartFormProps> = ({\n aiAnalysisResult,\n}) => {\n const store = useFormStore();\n const schema = store.getSchema();\n const prevAiResultRef = useRef<Record<string, any> | null | undefined>(undefined);\n\n const aiSuggestions = useMemo(() => {\n if (aiAnalysisResult == null) return { medications: [] };\n const medications = normalizeAIMedications(aiAnalysisResult.medications);\n return { medications };\n }, [aiAnalysisResult]);\n\n useEffect(() => {\n if (aiAnalysisResult == null || Object.keys(aiAnalysisResult).length === 0) return;\n const prev = prevAiResultRef.current;\n if (prev != null && prev === aiAnalysisResult && shallowEqualKeys(prev, aiAnalysisResult)) return;\n // Store a shallow copy so mutation of the same object reference is detected\n // on the next render (shallowEqualKeys will see different key sets).\n prevAiResultRef.current = { ...aiAnalysisResult };\n const DD_KEYS = new Set(['differentialDiagnosis', 'differentialdiagnosis']);\n const toApply: Record<string, any> = {};\n for (const [key, val] of Object.entries(aiAnalysisResult)) {\n if (!SUGGESTION_KEYS.has(key) && !DD_KEYS.has(key)) toApply[key] = val;\n }\n const rawDd =\n aiAnalysisResult.differentialDiagnosis ??\n aiAnalysisResult.differentialdiagnosis;\n if (rawDd != null) {\n toApply.differentialdiagnosis = normalizeDifferentialDiagnosis(rawDd);\n }\n if (Object.keys(toApply).length > 0) store.setValues(toApply, { touch: false });\n }, [store, aiAnalysisResult]);\n\n // Flatten layout: no section titles or accordions; just ordered field ids\n const fieldIds: string[] = [];\n function collect(child: SectionChild | string) {\n if (typeof child === 'string') {\n fieldIds.push(child);\n } else if (child.type === 'column_layout') {\n child.children.forEach(id => fieldIds.push(id));\n }\n }\n schema.layout.forEach((node: LayoutNode) => {\n if (node.type === 'section') {\n node.children.forEach(collect);\n } else if (node.type === 'column_layout') {\n node.children.forEach(id => fieldIds.push(id));\n }\n });\n\n return (\n <AISuggestionsProvider value={aiSuggestions}>\n <div className=\"grid grid-cols-4 gap-2 w-full items-start\">\n {/* Left column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'left') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n\n {/* Center column: 50% (2 of 4 grid cols), internally split 25-25 */}\n <div className=\"col-span-2 grid grid-cols-2 gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'center') return null;\n\n const colSpanRaw = (fieldDef as any).colSpan ?? 1;\n const colSpan = colSpanRaw === 2 ? 2 : 1;\n\n return (\n <div\n key={fieldId}\n className={cn(\n 'min-h-0 flex flex-col',\n colSpan === 2 ? 'col-span-2' : 'col-span-1 h-full',\n )}\n >\n <FieldRenderer fieldId={fieldId} />\n </div>\n );\n })}\n </div>\n\n {/* Right column: 25% */}\n <div className=\"col-span-1 flex flex-col gap-2\">\n {fieldIds.map((fieldId) => {\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n const position = (fieldDef as any).position ?? 'center';\n if (position !== 'right') return null;\n return <FieldRenderer key={fieldId} fieldId={fieldId} />;\n })}\n </div>\n </div>\n </AISuggestionsProvider>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport type { FieldDef } from '../../core/types';\nimport { richTextHtmlClassName } from './richTextClassName';\n\ninterface ReadOnlyTextProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyText: React.FC<ReadOnlyTextProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const displayValue = value ?? '';\n const isRichText = fieldDef.type === 'richtext';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {isRichText ? (\n <div\n className={cn(\n richTextHtmlClassName(),\n 'text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50',\n )}\n dangerouslySetInnerHTML={{ __html: displayValue }}\n />\n ) : (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {displayValue || <span className=\"text-gray-400 italic\">No value</span>}\n </div>\n )}\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlySelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlySelect: React.FC<ReadOnlySelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const selectedOption = options.find(opt => {\n // Handle both string and number comparisons\n return String(opt.value) === String(value) || opt.value === value;\n });\n\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = !value && value !== 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n displayValue\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { SelectFieldDef } from '../../core/types';\n\ninterface ReadOnlyMultiSelectProps {\n fieldDef: SelectFieldDef;\n value: any;\n}\n\nexport const ReadOnlyMultiSelect: React.FC<ReadOnlyMultiSelectProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => {\n setOptions(opts);\n })\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n if (!fieldDef) return null;\n\n const currentValues = Array.isArray(value) ? value : [];\n const selectedLabels = currentValues\n .map(val => {\n const option = options.find(opt => {\n return String(opt.value) === String(val) || opt.value === val;\n });\n return option ? option.label : String(val);\n })\n .filter(Boolean);\n\n const isEmpty = selectedLabels.length === 0;\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No values selected</span>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {selectedLabels.map((label, idx) => (\n <span\n key={idx}\n className=\"inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-blue-100 text-blue-800\"\n >\n {label}\n </span>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from '../shadcn/table';\nimport type { RepeatableFieldDef } from '../../core/types';\n\ninterface ReadOnlyRepeatableProps {\n fieldDef: RepeatableFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRepeatable: React.FC<ReadOnlyRepeatableProps> = ({ fieldDef, value }) => {\n if (!fieldDef || fieldDef.type !== 'repeatable') return null;\n\n const rows = Array.isArray(value) ? value : [];\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n \n {rows.length === 0 ? (\n <div className=\"text-gray-400 italic border border-gray-200 rounded-md p-4 bg-gray-50 text-center\">\n No items\n </div>\n ) : (\n <div className=\"rounded-md border border-gray-200 overflow-hidden\">\n <Table>\n <TableHeader>\n <TableRow>\n {fieldDef.row.map((subDef) => (\n <TableHead key={subDef.id} className=\"bg-gray-50\">{subDef.label}</TableHead>\n ))}\n </TableRow>\n </TableHeader>\n <TableBody>\n {rows.map(\n (\n row: Record<string, string | number | undefined>,\n index: number\n ) => (\n <TableRow key={index}>\n {fieldDef.row.map((subDef) => (\n <TableCell key={subDef.id} className=\"text-gray-900\">\n {row[subDef.id] ?? <span className=\"text-gray-400 italic\">—</span>}\n </TableCell>\n ))}\n </TableRow>\n )\n )}\n </TableBody>\n </Table>\n </div>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDate: React.FC<ReadOnlyDateProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleDateString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || <span className=\"text-gray-400 italic\">No date selected</span>}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { Image } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlyImageUploadProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain URL/string key or a typed object\n // from the backend that includes a presigned_url.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlyImageUpload: React.FC<ReadOnlyImageUploadProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-4\">\n <Image className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No image uploaded</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={(e) => {\n // Fallback if image fails to load\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const parent = target.parentElement;\n if (parent) {\n parent.innerHTML = `\n <div class=\"text-center py-4\">\n <div class=\"text-gray-400 mb-2\">📷</div>\n <p class=\"text-sm text-gray-500\">Image not available</p>\n <p class=\"text-xs text-gray-400\">${url ?? ''}</p>\n </div>\n `;\n }\n }}\n />\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\n};","import React, { useState, useEffect } from 'react';\nimport { Label } from '../shadcn/label';\nimport { Image } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlyMediaUploadProps {\n fieldDef: BaseFieldDef;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nfunction urlLooksLikePdf(url: string): boolean {\n return /\\.pdf($|\\?)/i.test(url) || url.toLowerCase().includes('application/pdf');\n}\n\nexport const ReadOnlyMediaUpload: React.FC<ReadOnlyMediaUploadProps> = ({\n fieldDef,\n value,\n}) => {\n const [useIframe, setUseIframe] = useState(false);\n\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n useEffect(() => {\n setUseIframe(false);\n }, [url]);\n\n const showAsPdf = url && (urlLooksLikePdf(url) || useIframe);\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-4\">\n <Image className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No file uploaded</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-white\">\n {showAsPdf ? (\n <iframe\n src={url}\n title={`${fieldDef.label} PDF`}\n className=\"w-full max-h-48 min-h-36 rounded-lg border border-gray-200 bg-white\"\n />\n ) : (\n <img\n src={url}\n alt={`${fieldDef.label} upload`}\n className=\"max-w-full max-h-48 mx-auto rounded-lg\"\n onError={() => setUseIframe(true)}\n />\n )}\n </div>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport { PenTool } from 'lucide-react';\nimport type { BaseFieldDef } from '../../core/types';\n\ninterface TypedMediaValue {\n _type?: string;\n value?: string;\n s3_key?: string;\n presigned_url?: string;\n}\n\ninterface ReadOnlySignatureProps {\n fieldDef: BaseFieldDef;\n // In read-only mode we may receive either a plain string or a typed object\n // with a presigned_url from the backend.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n value: any;\n}\n\nexport const ReadOnlySignature: React.FC<ReadOnlySignatureProps> = ({\n fieldDef,\n value,\n}) => {\n let url: string | null = null;\n\n if (typeof value === 'string') {\n url = value;\n } else if (value && typeof value === 'object') {\n const typed = value as TypedMediaValue;\n url = typed.presigned_url || typed.value || typed.s3_key || null;\n }\n\n if (!url) {\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n <div className=\"border border-gray-200 rounded-lg p-4 bg-gray-50\">\n <div className=\"text-center py-8\">\n <PenTool className=\"h-8 w-8 mx-auto text-gray-400 mb-2\" />\n <p className=\"text-sm text-gray-500\">No signature provided</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-xs text-gray-500\">{fieldDef.description}</p>\n )}\n <div className=\"flex items-center justify-start\">\n <img\n src={url}\n alt=\"Signature\"\n className=\"border border-gray-200 rounded bg-white object-contain max-w-full\"\n style={{ width: 400, height: 200 }}\n />\n </div>\n </div>\n );\n};","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ninterface ReadOnlyDateTimeProps {\n fieldDef: FieldDef;\n value: any;\n}\n\nexport const ReadOnlyDateTime: React.FC<ReadOnlyDateTimeProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n let displayValue = '';\n if (value) {\n try {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n displayValue = date.toLocaleString();\n } else {\n displayValue = String(value);\n }\n } catch {\n displayValue = String(value);\n }\n }\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">\n {fieldDef.label}\n </Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {displayValue || (\n <span className=\"text-gray-400 italic\">No date & time selected</span>\n )}\n </div>\n </div>\n );\n};\n\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { RadioFieldDef } from '../../core/types';\n\ninterface ReadOnlyRadioProps {\n fieldDef: RadioFieldDef;\n value: any;\n}\n\nexport const ReadOnlyRadio: React.FC<ReadOnlyRadioProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then(opts => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedOption = options.find(opt =>\n String(opt.value) === String(value) || opt.value === value\n );\n const displayValue = selectedOption ? selectedOption.label : (value ?? '');\n const isEmpty = value == null || value === '';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : isEmpty ? (\n <span className=\"text-gray-400 italic\">No value</span>\n ) : (\n displayValue\n )}\n </div>\n </div>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { Label } from '../shadcn/label';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { CheckboxFieldDef } from '../../core/types';\n\ninterface ReadOnlyCheckboxProps {\n fieldDef: CheckboxFieldDef;\n value: any;\n}\n\nfunction isOptionSelected(selected: any[], optValue: any): boolean {\n if (!Array.isArray(selected)) return false;\n return selected.some(\n (v) => v === optValue || String(v) === String(optValue)\n );\n}\n\nexport const ReadOnlyCheckbox: React.FC<ReadOnlyCheckboxProps> = ({ fieldDef, value }) => {\n const [options, setOptions] = useState<{ label: string; value: any }[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (fieldDef.options?.length) {\n setOptions(fieldDef.options);\n } else if (fieldDef.dataSource) {\n setLoading(true);\n fetchOptions(fieldDef.dataSource.source, fieldDef.dataSource.params)\n .then((opts) => setOptions(opts))\n .finally(() => setLoading(false));\n }\n }, [fieldDef]);\n\n const selectedValues = Array.isArray(value) ? value : [];\n const selectedLabels = options\n .filter((opt) => isOptionSelected(selectedValues, opt.value))\n .map((opt) => opt.label);\n const displayText = selectedLabels.length\n ? selectedLabels.join(', ')\n : '—';\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] flex items-center\">\n {loading ? (\n <span className=\"text-gray-400 italic\">Loading...</span>\n ) : (\n displayText\n )}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport { Label } from '../shadcn/label';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\n\ninterface ReadOnlyReferralProps {\n fieldDef: ReferralFieldDef;\n value: unknown;\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n return {\n specialization: String((item as ReferralItem).specialization),\n is_urgent: Boolean((item as ReferralItem).is_urgent),\n };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReadOnlyReferral: React.FC<ReadOnlyReferralProps> = ({ fieldDef, value }) => {\n if (!fieldDef) return null;\n\n const items = normalizeValue(value);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {items.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No value</span>\n </div>\n ) : (\n <div className=\"flex flex-wrap gap-1.5\">\n {items.map((item, i) => {\n const isUrgent = item.is_urgent;\n return (\n <span\n key={i}\n className={\n isUrgent\n ? 'inline-flex items-center gap-1 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs font-medium'\n : 'inline-flex items-center gap-1 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs font-medium'\n }\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded\">\n U\n </span>\n )}\n {item.specialization}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","import React, { useMemo } from 'react';\nimport { Label } from '../shadcn/label';\nimport type { FieldDef } from '../../core/types';\n\ntype DischargeMedicationOrder = {\n id: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n};\n\nfunction parseOrders(value: unknown): DischargeMedicationOrder[] {\n if (value == null) return [];\n if (Array.isArray(value)) {\n return value.filter(\n (v) => v != null && typeof v === 'object' && typeof (v as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? v.orders : [];\n return orders.filter(\n (o) => o != null && typeof o === 'object' && typeof (o as { id?: unknown }).id === 'string',\n ) as DischargeMedicationOrder[];\n }\n return [];\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const ReadOnlyDischargeMedicationOrders: React.FC<{\n fieldDef: FieldDef;\n value: unknown;\n}> = ({ fieldDef, value }) => {\n const orders = useMemo(() => parseOrders(value), [value]);\n\n return (\n <div className=\"space-y-2\">\n <Label className=\"text-sm font-medium text-gray-700\">{fieldDef.label}</Label>\n {orders.length === 0 ? (\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem]\">\n <span className=\"text-gray-400 italic\">No medicines added</span>\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o) => {\n const duration = formatDuration(o.start_date, o.end_date);\n const header = o.item_name ?? 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-gray-200 bg-gray-50 p-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate text-gray-900\">{header}</div>\n {sub && <div className=\"text-xs text-gray-500 mt-0.5 truncate\">{sub}</div>}\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-gray-600\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-gray-800/90\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\n","import React from 'react';\nimport { ReadOnlyText } from '../ui/widgets/ReadOnlyText';\nimport { ReadOnlySelect } from '../ui/widgets/ReadOnlySelect';\nimport { ReadOnlyMultiSelect } from '../ui/widgets/ReadOnlyMultiSelect';\nimport { ReadOnlyRepeatable } from '../ui/widgets/ReadOnlyRepeatable';\nimport { ReadOnlyDate } from '../ui/widgets/ReadOnlyDate';\nimport { ReadOnlyImageUpload } from '../ui/widgets/ReadOnlyImageUpload';\nimport { ReadOnlyMediaUpload } from '../ui/widgets/ReadOnlyMediaUpload';\nimport { ReadOnlySignature } from '../ui/widgets/ReadOnlySignature';\nimport { ReadOnlyDateTime } from '../ui/widgets/ReadOnlyDateTime';\nimport { ReadOnlyRadio } from '../ui/widgets/ReadOnlyRadio';\nimport { ReadOnlyCheckbox } from '../ui/widgets/ReadOnlyCheckbox';\nimport { ReadOnlyReferral } from '../ui/widgets/ReadOnlyReferral';\nimport { ReadOnlyDischargeMedicationOrders } from '../ui/widgets/ReadOnlyDischargeMedicationOrders';\nimport type {\n CheckboxFieldDef,\n FieldDef,\n PainScaleFlagsFieldDef,\n RadioFieldDef,\n ReferralFieldDef,\n RepeatableFieldDef,\n SelectFieldDef,\n StaticTextFieldDef,\n} from '../core/types';\nimport {\n functionalImpairmentTotal,\n parseFunctionalImpairmentScore,\n} from '../core/functionalImpairmentScore';\nimport { normalizePainScaleFlags } from '../core/painScaleFlags';\nimport { normalizeGeneralSurgerySmartHistory } from '../core/generalSurgeryPathway';\nimport { normalizeObgPathway } from '../core/obgPathway';\nimport { normalizeUrologySmartHistory } from '../core/urologyPathway';\n\n// ReadOnlyTable renders via @tanstack/react-table; load it on demand so the\n// read-only form path doesn't ship the table library unless a table is shown.\nconst ReadOnlyTable = React.lazy(() =>\n import('../ui/widgets/ReadOnlyTable').then((m) => ({ default: m.ReadOnlyTable })),\n);\n\ninterface ReadOnlyFieldRendererProps {\n fieldDef: FieldDef;\n value: unknown;\n /**\n * Full form values; required for `suggestion_textarea` with `meta.embeddedFieldIds` so embedded\n * fields can be shown in read-only view.\n */\n allValues?: Record<string, unknown>;\n /** Resolve embedded field definitions by id (e.g. `schema.fields` map). */\n resolveFieldDef?: (fieldId: string) => FieldDef | undefined;\n}\n\nexport const ReadOnlyFieldRenderer: React.FC<ReadOnlyFieldRendererProps> = ({\n fieldDef,\n value,\n allValues,\n resolveFieldDef,\n}) => {\n if (!fieldDef) return null;\n\n // Check visibility (for now, we'll show all fields in read-only mode)\n // You could add logic here to hide fields based on rules if needed\n\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n case 'slider':\n case 'textarea':\n case 'richtext':\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n \n case 'date':\n return <ReadOnlyDate fieldDef={fieldDef} value={value} />;\n \n case 'datetime':\n return <ReadOnlyDateTime fieldDef={fieldDef} value={value} />;\n \n case 'select':\n return <ReadOnlySelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'radio':\n return <ReadOnlyRadio fieldDef={fieldDef as RadioFieldDef} value={value} />;\n \n case 'checkbox':\n return <ReadOnlyCheckbox fieldDef={fieldDef as CheckboxFieldDef} value={value} />;\n \n case 'multiselect':\n return <ReadOnlyMultiSelect fieldDef={fieldDef as SelectFieldDef} value={value} />;\n \n case 'repeatable':\n return <ReadOnlyRepeatable fieldDef={fieldDef as RepeatableFieldDef} value={value} />;\n \n case 'image_upload':\n return <ReadOnlyImageUpload fieldDef={fieldDef} value={value} />;\n\n case 'media_upload':\n return <ReadOnlyMediaUpload fieldDef={fieldDef} value={value} />;\n\n case 'file_upload':\n return <ReadOnlyMediaUpload fieldDef={fieldDef} value={value} />;\n \n case 'signature':\n return <ReadOnlySignature fieldDef={fieldDef} value={value} />;\n\n case 'editable_table':\n return (\n <React.Suspense fallback={null}>\n <ReadOnlyTable fieldDef={fieldDef} value={value} />\n </React.Suspense>\n );\n\n case 'referral':\n return <ReadOnlyReferral fieldDef={fieldDef as ReferralFieldDef} value={value} />;\n\n case 'discharge_medication_orders':\n return <ReadOnlyDischargeMedicationOrders fieldDef={fieldDef} value={value} />;\n\n case 'toggle': {\n const isOn = value === true;\n return (\n <div className=\"space-y-1\">\n <p className=\"text-xs text-muted-foreground\">{fieldDef.label}</p>\n <span className={`inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium ${isOn ? 'bg-green-100 text-green-800' : 'bg-gray-100 text-gray-600'}`}>\n {isOn ? 'Yes' : 'No'}\n </span>\n </div>\n );\n }\n\n case 'suggestion_textarea':\n case 'complaint_chips': {\n const embeddedIds =\n fieldDef.meta &&\n Array.isArray((fieldDef.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? ((fieldDef.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds as unknown[])\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n : [];\n const showEmbedded =\n embeddedIds.length > 0 && resolveFieldDef && allValues && typeof allValues === 'object';\n\n if (!showEmbedded) {\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n\n return (\n <div className=\"space-y-3\">\n <ReadOnlyText fieldDef={fieldDef} value={value} />\n <div className=\"grid gap-3 border-t border-muted-foreground/20 pt-3 sm:grid-cols-3\">\n {embeddedIds.map((id) => {\n const fd = resolveFieldDef(id);\n if (!fd) return null;\n return (\n <ReadOnlyFieldRenderer\n key={id}\n fieldDef={fd}\n value={allValues[id]}\n allValues={allValues}\n resolveFieldDef={resolveFieldDef}\n />\n );\n })}\n </div>\n </div>\n );\n }\n\n case 'lens_assessment': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as {\n notes?: unknown;\n assessmentKey?: unknown;\n locs?: unknown;\n })\n : null;\n const notes = typeof v?.notes === 'string' ? v.notes : '';\n const key = typeof v?.assessmentKey === 'string' ? v.assessmentKey : null;\n const locs = v?.locs;\n const locsRecord =\n locs != null &&\n typeof locs === 'object' &&\n !Array.isArray(locs)\n ? (locs as Record<string, unknown>)\n : null;\n const eyeLine = (label: string, g: Record<string, unknown> | undefined) => {\n if (!g || typeof g !== 'object') return null;\n const num = (k: string) => (typeof g[k] === 'number' ? g[k] : '—');\n return (\n <p className=\"text-xs text-foreground\">\n {label}: NO {String(num('NO'))}, NC {String(num('NC'))}, C {String(num('C'))}, PSC{' '}\n {String(num('PSC'))}\n </p>\n );\n };\n return (\n <div className=\"space-y-2 rounded-md border p-3 text-sm\">\n {fieldDef.label && (\n <p className=\"font-medium text-foreground\">{fieldDef.label}</p>\n )}\n {locsRecord ? (\n <div className=\"space-y-1 border-l-2 border-muted pl-2\">\n {eyeLine('Right (OD)', locsRecord.OD as Record<string, unknown> | undefined)}\n {eyeLine('Left (OS)', locsRecord.OS as Record<string, unknown> | undefined)}\n </div>\n ) : null}\n {key && (\n <p className=\"text-xs text-muted-foreground\">\n Assessment (legacy): {key}\n </p>\n )}\n {notes && <p className=\"whitespace-pre-wrap text-foreground\">{notes}</p>}\n </div>\n );\n }\n\n case 'functional_impairment_score': {\n const v = parseFunctionalImpairmentScore(value);\n const total = functionalImpairmentTotal(v);\n const lines = [\n `Reading: ${v.reading}`,\n `Night driving: ${v.nightDriving}`,\n `Glare: ${v.glare}`,\n `Occupation: ${v.occupation}`,\n `ADL: ${v.adl}`,\n `Total: ${total}/15`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'biometry_iol_workup': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n const s = (k: string) => (typeof v[k] === 'string' ? (v[k] as string) : '');\n const b = (k: string) => v[k] === true;\n const method =\n v.method === 'ascan_immersion'\n ? 'A-scan (immersion)'\n : v.method === 'ascan_contact'\n ? 'A-scan (contact)'\n : 'Optical biometry (IOL Master)';\n const lines = [\n `Axial length OD/OS (mm): ${s('axialLengthOD')} / ${s('axialLengthOS')}`,\n `K1/K2/Axis OD/OS: ${s('k1k2AxisOD')} / ${s('k1k2AxisOS')}`,\n `AC depth OD/OS (mm): ${s('anteriorChamberDepthOD')} / ${s('anteriorChamberDepthOS')}`,\n `IOL power (D) OD/OS: ${s('iolPowerOD')} / ${s('iolPowerOS')}`,\n `Target refraction (D) OD/OS: ${s('targetRefractionOD')} / ${s('targetRefractionOS')}`,\n `Formula: ${s('formula') || '—'}`,\n `Method: ${method}`,\n `Corneal topography uploaded: ${b('cornealTopoUploaded') ? 'Yes' : 'No'}`,\n `Specular microscopy: ${b('specularMicroscopyDone') ? 'Yes' : 'No'}`,\n `Endothelial count: ${s('endothelialCount') || '—'}`,\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'surgical_risk_flags': {\n const v =\n value && typeof value === 'object' && !Array.isArray(value)\n ? (value as { OD?: unknown; OS?: unknown })\n : null;\n const list = (x: unknown) =>\n Array.isArray(x) ? x.filter((i): i is string => typeof i === 'string').join(', ') : '—';\n const od = list(v?.OD);\n const os = list(v?.OS);\n const lines = [`Right eye (OD): ${od}`, `Left eye (OS): ${os}`].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'pain_scale_flags': {\n const def = fieldDef as PainScaleFlagsFieldDef;\n const min = def.min ?? 0;\n const max = def.max ?? 10;\n const safe = normalizePainScaleFlags(value, { min, max });\n const opts = def.options ?? [];\n const flagLabels = safe.flags.map((fv) => {\n const o = opts.find((x) => x.value === fv || String(x.value) === String(fv));\n return o?.label ?? fv;\n });\n const lines = [\n `Pain score (VAS): ${safe.pain}/${max}`,\n flagLabels.length > 0 ? `Triage flags: ${flagLabels.join(', ')}` : 'Triage flags: —',\n ].join('\\n');\n return <ReadOnlyText fieldDef={fieldDef} value={lines} />;\n }\n\n case 'urology_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeUrologySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'urology_pathway':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_smart_history': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeGeneralSurgerySmartHistory(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'general_surgery_grading':\n return (\n <ReadOnlyText\n fieldDef={fieldDef}\n value={\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value)\n }\n />\n );\n\n case 'general_surgery_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_pathway': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(normalizeObgPathway(value), null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const hopcDef = resolveFieldDef?.('symptoms');\n const hopcRaw = allValues?.['symptoms'];\n const hopcStr =\n typeof hopcRaw === 'string'\n ? hopcRaw\n : hopcRaw != null && hopcRaw !== ''\n ? String(hopcRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {hopcDef ? (\n <ReadOnlyText fieldDef={hopcDef} value={hopcStr} />\n ) : hopcStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">History of presenting complaint</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {hopcStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'obg_examination': {\n const structuredDisplay =\n value && typeof value === 'object'\n ? JSON.stringify(value, null, 2)\n : value == null || value === ''\n ? '—'\n : String(value);\n const clinicalDef = resolveFieldDef?.('clinical_examination');\n const clinicalRaw = allValues?.['clinical_examination'];\n const clinicalStr =\n typeof clinicalRaw === 'string'\n ? clinicalRaw\n : clinicalRaw != null && clinicalRaw !== ''\n ? String(clinicalRaw)\n : '';\n return (\n <div className=\"space-y-4\">\n <ReadOnlyText fieldDef={fieldDef} value={structuredDisplay} />\n {clinicalDef ? (\n <ReadOnlyText fieldDef={clinicalDef} value={clinicalStr} />\n ) : clinicalStr ? (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-gray-700\">Clinical examination</p>\n <div className=\"text-gray-900 border border-gray-200 rounded-md p-3 bg-gray-50 min-h-[2.5rem] whitespace-pre-wrap\">\n {clinicalStr}\n </div>\n </div>\n ) : null}\n </div>\n );\n }\n\n case 'static_text': {\n const def = fieldDef as StaticTextFieldDef;\n const size = def.size ?? 'regular';\n const labelClass = size === 'large' ? 'text-base' : 'text-sm';\n const descClass = size === 'large' ? 'text-sm' : 'text-xs';\n return (\n <div className={`${labelClass} text-muted-foreground`}>\n {def.label}\n {def.description && (\n <p className={`mt-1 ${descClass} opacity-90`}>{def.description}</p>\n )}\n </div>\n );\n }\n\n default:\n // Fallback for unknown types - just display as text\n return <ReadOnlyText fieldDef={fieldDef} value={value} />;\n }\n};\n","import React from 'react';\nimport { ReadOnlyFieldRenderer } from './ReadOnlyFieldRenderer';\nimport { Section } from '../ui/layouts/Section';\nimport { ColumnLayout } from '../ui/layouts/ColumnLayout';\nimport type { FormDef } from '../core/types';\nimport type { SubmissionData } from '../core/submissionTypes';\n\ninterface ReadOnlyFormProps {\n schema: FormDef;\n submission: SubmissionData;\n}\n\nexport const ReadOnlyForm: React.FC<ReadOnlyFormProps> = ({ schema, submission }) => {\n const formData = submission.data || {};\n const fieldMap = new Map(schema.fields.map(f => [f.id, f]));\n\n return (\n <div className=\"space-y-6\">\n <div className=\"mb-4\">\n <h1 className=\"text-2xl font-bold\">{schema.title}</h1>\n <div className=\"text-sm text-gray-500 mt-1\">\n Version: {schema.version} | Status: {submission.status}\n {submission.context?.created_by_name && \n <span> | {submission.context.created_by_name}</span>\n }\n </div>\n {submission.created_at && (\n <div className=\"text-xs text-gray-400 mt-1\">\n Created: {new Date(submission.created_at).toLocaleString()} | \n Updated: {new Date(submission.updated_at).toLocaleString()}\n </div>\n )}\n </div>\n\n {schema.layout.map(node => {\n if (node.type === 'section') {\n const renderSectionChild = (child: string | { type: string; id: string; columns?: number; label?: string; children: string[] }, index: number): React.ReactNode => {\n if (typeof child === 'string') {\n const fieldDef = fieldMap.get(child);\n return fieldDef ? (\n <ReadOnlyFieldRenderer\n key={child}\n fieldDef={fieldDef}\n value={formData[child]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ) : null;\n }\n if (child.type === 'column_layout' && child.children) {\n const visibleFields = child.children\n .map(fieldId => {\n const fieldDef = fieldMap.get(fieldId);\n return fieldDef ? { fieldId, fieldDef } : null;\n })\n .filter((f): f is { fieldId: string; fieldDef: NonNullable<ReturnType<typeof fieldMap.get>> } => f !== null);\n return (\n <ColumnLayout\n key={child.id}\n columns={child.columns ?? 1}\n label={child.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return <React.Fragment key={child.id ?? index} />;\n };\n\n const hasContent = node.children.some(child =>\n typeof child === 'string' ? fieldMap.has(child) : (child.type === 'column_layout' && child.children?.some(id => fieldMap.has(id)))\n );\n if (!hasContent) return null;\n\n return (\n <Section key={node.id} title={node.title}>\n {node.children.map((child, index) => renderSectionChild(child, index))}\n </Section>\n );\n }\n if (node.type === 'column_layout') {\n const visibleFields = node.children\n .map(fieldId => {\n const fieldDef = fieldMap.get(fieldId);\n return fieldDef ? { fieldId, fieldDef } : null;\n })\n .filter((f): f is { fieldId: string; fieldDef: NonNullable<ReturnType<typeof fieldMap.get>> } => f !== null);\n\n if (visibleFields.length === 0) return null;\n\n return (\n <ColumnLayout\n key={node.id}\n columns={node.columns}\n label={node.label}\n >\n {visibleFields.map(({ fieldId, fieldDef }) => (\n <ReadOnlyFieldRenderer\n key={fieldId}\n fieldDef={fieldDef}\n value={formData[fieldId]}\n allValues={formData}\n resolveFieldDef={(id) => fieldMap.get(id)}\n />\n ))}\n </ColumnLayout>\n );\n }\n return null;\n })}\n </div>\n );\n};\n","import React from \"react\";\nimport { useForm } from \"./useForm\";\nimport { cn } from \"../core/utils\";\nimport { Button } from \"../ui/shadcn/button\";\n\nexport interface FormControlsProps {\n className?: string;\n containerStyle?: React.CSSProperties;\n /**\n * When false, hides workflow state + valid/invalid text. Buttons stay right-aligned unless\n * `actionsFullWidth` is used. Default true (existing behaviour).\n */\n showWorkflowStatus?: boolean;\n statusClassName?: string;\n statusStyle?: React.CSSProperties;\n /** Classes for the buttons row wrapper. */\n actionsClassName?: string;\n actionsStyle?: React.CSSProperties;\n /**\n * When workflow status is hidden, make action buttons stretch (column on small screens;\n * on `sm+` submit row grows with flex). Ignored while `showWorkflowStatus` is true.\n */\n actionsFullWidth?: boolean;\n /** Applied to both Save Draft and Submit buttons. */\n buttonClassName?: string;\n onSaveDraft?: () => void;\n onSubmit?: (to: string) => void;\n /** Override the label on the submit/transition button. Defaults to \"Submit\". */\n submitLabel?: string;\n}\n\nexport const FormControls: React.FC<FormControlsProps> = ({\n className,\n containerStyle,\n showWorkflowStatus = true,\n statusClassName,\n statusStyle,\n actionsClassName,\n actionsStyle,\n actionsFullWidth = false,\n buttonClassName,\n onSaveDraft,\n onSubmit,\n submitLabel,\n}) => {\n const {\n state,\n availableTransitions,\n submit,\n transition,\n hasPersistence,\n markSubmitAttempted,\n } = useForm();\n\n const hasUploadsInFlight = (state.pendingUploads ?? 0) > 0;\n\n const draftAvailable = onSaveDraft || (hasPersistence && submit);\n const submitAvailable =\n onSubmit || (availableTransitions.length > 0 && transition);\n\n if (!draftAvailable && !submitAvailable) {\n return null;\n }\n\n const useWideActions = !showWorkflowStatus && actionsFullWidth;\n const buttonCn = cn(\n buttonClassName,\n useWideActions && \"w-full sm:flex-1 min-w-0\",\n );\n\n return (\n <div\n className={cn(\n \"flex gap-4 border-t p-4 items-center\",\n showWorkflowStatus\n ? \"justify-between\"\n : useWideActions\n ? \"flex-col sm:flex-row sm:justify-stretch sm:gap-4\"\n : \"justify-end\",\n className,\n )}\n style={containerStyle}\n >\n {showWorkflowStatus ? (\n <div\n className={cn(\"flex items-center gap-4\", statusClassName)}\n style={statusStyle}\n >\n <span className=\"font-bold text-sm text-gray-700\">\n State: {state.workflowState}\n </span>\n <span\n className={cn(\n \"text-sm\",\n state.isValid ? \"text-green-600\" : \"text-red-600\",\n )}\n >\n {state.isValid ? \"Valid\" : \"Invalid\"}\n </span>\n </div>\n ) : null}\n\n <div\n className={cn(\n \"flex gap-2\",\n useWideActions\n ? \"w-full flex-col sm:flex-row sm:flex-1 sm:justify-end sm:max-w-none\"\n : \"flex-shrink-0\",\n actionsClassName,\n )}\n style={actionsStyle}\n >\n {draftAvailable && (\n <Button\n onClick={onSaveDraft || submit}\n variant=\"outline\"\n size=\"sm\"\n disabled={hasUploadsInFlight}\n className={buttonCn}\n >\n {hasUploadsInFlight ? \"Upload in progress…\" : \"Save Draft\"}\n </Button>\n )}\n\n {submitAvailable && (\n <>\n {availableTransitions.length > 0 ? (\n availableTransitions.map((t) => (\n <Button\n key={t.to}\n onClick={() => {\n markSubmitAttempted();\n if (onSubmit) {\n onSubmit(t.to);\n } else {\n transition(t.to);\n }\n }}\n disabled={!state.isValid || hasUploadsInFlight}\n size=\"sm\"\n className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : availableTransitions.length > 1\n ? `Submit to ${t.to}`\n : (submitLabel ?? \"Submit\")}\n </Button>\n ))\n ) : onSubmit ? (\n <Button\n onClick={() => {\n markSubmitAttempted();\n onSubmit(state.workflowState || \"submit\");\n }}\n disabled={!state.isValid || hasUploadsInFlight}\n size=\"sm\"\n className={buttonCn}\n >\n {hasUploadsInFlight\n ? \"Upload in progress…\"\n : (submitLabel ?? \"Submit\")}\n </Button>\n ) : null}\n </>\n )}\n </div>\n </div>\n );\n};\n","export interface PresignedUploadResponse {\n presigned_url: string;\n s3_key: string;\n expires_in: number;\n content_type: string;\n upload_method: 'PUT' | 'POST';\n}\n\nexport interface CreateUploadHandlerOptions {\n /** Data server origin (no trailing slash), e.g. `https://dataserver.example.com`. */\n apiBaseUrl: string;\n headers?: Record<string, string>; // For auth headers, etc.\n}\n\nfunction normalizeBaseUrl(apiBaseUrl: string): string {\n return apiBaseUrl.replace(/\\/+$/, '');\n}\n\nasync function uploadViaPresignedEndpoint(\n options: CreateUploadHandlerOptions,\n presignPath: string,\n file: File | Blob,\n filename: string,\n): Promise<string> {\n const { apiBaseUrl, headers = {} } = options;\n const base = normalizeBaseUrl(apiBaseUrl);\n const path =\n presignPath.startsWith('/') ? presignPath : `/${presignPath}`;\n const response = await fetch(`${base}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n body: JSON.stringify({ filename }),\n });\n\n if (!response.ok) {\n throw new Error(`Failed to get presigned URL: ${response.statusText}`);\n }\n\n const presignedData: PresignedUploadResponse = await response.json();\n\n const uploadResponse = await fetch(presignedData.presigned_url, {\n method: presignedData.upload_method,\n headers: {\n 'Content-Type': presignedData.content_type,\n },\n body: file,\n });\n\n if (!uploadResponse.ok) {\n throw new Error(`Failed to upload file: ${uploadResponse.statusText}`);\n }\n\n return presignedData.s3_key;\n}\n\n/**\n * Presigned upload handler: `POST …/api/forms/media-upload/` then PUT/POST file\n * to `presigned_url`. Use as `config.onUpload` on `FormProvider`; `file_upload`\n * fields use the same handler unless you set `config.onFileUpload`.\n */\nexport function createUploadHandler(options: CreateUploadHandlerOptions) {\n return async (file: File | Blob, filename: string): Promise<string> =>\n uploadViaPresignedEndpoint(\n options,\n '/api/forms/media-upload/',\n file,\n filename,\n );\n}"]}
|