formanitor 0.2.6 → 0.2.8
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-MSY4VSQZ.cjs → AddInvestigationWidget-4AZ7HTJY.cjs} +7 -7
- package/dist/{AddInvestigationWidget-MSY4VSQZ.cjs.map → AddInvestigationWidget-4AZ7HTJY.cjs.map} +1 -1
- package/dist/{AddInvestigationWidget-A2JS2ETO.mjs → AddInvestigationWidget-MSW4FUHR.mjs} +3 -3
- package/dist/{AddInvestigationWidget-A2JS2ETO.mjs.map → AddInvestigationWidget-MSW4FUHR.mjs.map} +1 -1
- package/dist/{AddMedicationWidget-B5RXRYBK.mjs → AddMedicationWidget-OEULICY3.mjs} +7 -5
- package/dist/AddMedicationWidget-OEULICY3.mjs.map +1 -0
- package/dist/AddMedicationWidget-UDVVDKHR.cjs +34 -0
- package/dist/AddMedicationWidget-UDVVDKHR.cjs.map +1 -0
- package/dist/{AddProcedureWidget-YW4EV66W.mjs → AddProcedureWidget-7IZ7SY7N.mjs} +3 -3
- package/dist/{AddProcedureWidget-YW4EV66W.mjs.map → AddProcedureWidget-7IZ7SY7N.mjs.map} +1 -1
- package/dist/{AddProcedureWidget-QUNDIZGR.cjs → AddProcedureWidget-NQCN5FBQ.cjs} +6 -6
- package/dist/{AddProcedureWidget-QUNDIZGR.cjs.map → AddProcedureWidget-NQCN5FBQ.cjs.map} +1 -1
- package/dist/{BiometryIolWorkupWidget-FWO3IWTF.cjs → BiometryIolWorkupWidget-NTYCAGGX.cjs} +6 -6
- package/dist/{BiometryIolWorkupWidget-FWO3IWTF.cjs.map → BiometryIolWorkupWidget-NTYCAGGX.cjs.map} +1 -1
- package/dist/{BiometryIolWorkupWidget-5RZP34FF.mjs → BiometryIolWorkupWidget-ZJRUTQZK.mjs} +4 -4
- package/dist/{BiometryIolWorkupWidget-5RZP34FF.mjs.map → BiometryIolWorkupWidget-ZJRUTQZK.mjs.map} +1 -1
- package/dist/BpeChartWidget-OL5WKSQG.mjs +7 -0
- package/dist/{BpeChartWidget-HATASHAC.mjs.map → BpeChartWidget-OL5WKSQG.mjs.map} +1 -1
- package/dist/BpeChartWidget-WYDP2BVS.cjs +28 -0
- package/dist/{BpeChartWidget-VZRH7M7L.cjs.map → BpeChartWidget-WYDP2BVS.cjs.map} +1 -1
- package/dist/{DateTimeWidget-RJ7SATVA.cjs → DateTimeWidget-3E6N4NOK.cjs} +6 -6
- package/dist/{DateTimeWidget-RJ7SATVA.cjs.map → DateTimeWidget-3E6N4NOK.cjs.map} +1 -1
- package/dist/{DateTimeWidget-KRX4O6OD.mjs → DateTimeWidget-TAHCCYCX.mjs} +4 -4
- package/dist/{DateTimeWidget-KRX4O6OD.mjs.map → DateTimeWidget-TAHCCYCX.mjs.map} +1 -1
- package/dist/{DateWidget-JEKDKPNS.mjs → DateWidget-5LFXAWRK.mjs} +4 -4
- package/dist/{DateWidget-JEKDKPNS.mjs.map → DateWidget-5LFXAWRK.mjs.map} +1 -1
- package/dist/{DateWidget-T7IQUWEA.cjs → DateWidget-HIYZ3TY7.cjs} +6 -6
- package/dist/{DateWidget-T7IQUWEA.cjs.map → DateWidget-HIYZ3TY7.cjs.map} +1 -1
- package/dist/{DentalChartWidget-P2YPKAMO.mjs → DentalChartWidget-4ZUVMMRX.mjs} +4 -4
- package/dist/{DentalChartWidget-LYLOFWZU.cjs.map → DentalChartWidget-4ZUVMMRX.mjs.map} +1 -1
- package/dist/DentalChartWidget-J6CHCPWI.cjs +21 -0
- package/dist/{DentalChartWidget-P2YPKAMO.mjs.map → DentalChartWidget-J6CHCPWI.cjs.map} +1 -1
- package/dist/{DiagnosisTextareaWidget-XJ47OZYH.cjs → DiagnosisTextareaWidget-2N5DP2CP.cjs} +7 -7
- package/dist/{DiagnosisTextareaWidget-XJ47OZYH.cjs.map → DiagnosisTextareaWidget-2N5DP2CP.cjs.map} +1 -1
- package/dist/{DiagnosisTextareaWidget-6UCYCCSB.mjs → DiagnosisTextareaWidget-OXOXANMF.mjs} +4 -4
- package/dist/{DiagnosisTextareaWidget-6UCYCCSB.mjs.map → DiagnosisTextareaWidget-OXOXANMF.mjs.map} +1 -1
- package/dist/{DifferentialDiagnosisWidget-XESNHNQQ.cjs → DifferentialDiagnosisWidget-RLGTZFGB.cjs} +4 -4
- package/dist/{DifferentialDiagnosisWidget-XESNHNQQ.cjs.map → DifferentialDiagnosisWidget-RLGTZFGB.cjs.map} +1 -1
- package/dist/{DifferentialDiagnosisWidget-IZEZVW5F.mjs → DifferentialDiagnosisWidget-XY7CJ5OG.mjs} +3 -3
- package/dist/{DifferentialDiagnosisWidget-IZEZVW5F.mjs.map → DifferentialDiagnosisWidget-XY7CJ5OG.mjs.map} +1 -1
- package/dist/{DischargeMedicationOrdersWidget-KA3HANHE.mjs → DischargeMedicationOrdersWidget-JXLQWPCP.mjs} +4 -4
- package/dist/{DischargeMedicationOrdersWidget-KA3HANHE.mjs.map → DischargeMedicationOrdersWidget-JXLQWPCP.mjs.map} +1 -1
- package/dist/{DischargeMedicationOrdersWidget-WRJRYL6F.cjs → DischargeMedicationOrdersWidget-X3ZVW3FP.cjs} +7 -7
- package/dist/{DischargeMedicationOrdersWidget-WRJRYL6F.cjs.map → DischargeMedicationOrdersWidget-X3ZVW3FP.cjs.map} +1 -1
- package/dist/{EditableTable-VZ66IXYI.mjs → EditableTable-ECNOISL3.mjs} +3 -3
- package/dist/{EditableTable-VZ66IXYI.mjs.map → EditableTable-ECNOISL3.mjs.map} +1 -1
- package/dist/{EditableTable-OW5LC6OC.cjs → EditableTable-OFVKAYRA.cjs} +4 -4
- package/dist/{EditableTable-OW5LC6OC.cjs.map → EditableTable-OFVKAYRA.cjs.map} +1 -1
- package/dist/{ExtraOralExamWidget-JVKJ4ZWC.mjs → ExtraOralExamWidget-74G73HGP.mjs} +3 -3
- package/dist/{ExtraOralExamWidget-JVKJ4ZWC.mjs.map → ExtraOralExamWidget-74G73HGP.mjs.map} +1 -1
- package/dist/{ExtraOralExamWidget-ZIOSKMIO.cjs → ExtraOralExamWidget-ETQI25NZ.cjs} +4 -4
- package/dist/{ExtraOralExamWidget-ZIOSKMIO.cjs.map → ExtraOralExamWidget-ETQI25NZ.cjs.map} +1 -1
- package/dist/{FollowupWidget-GCGPWZVY.mjs → FollowupWidget-ENDML2BN.mjs} +3 -3
- package/dist/{FollowupWidget-GCGPWZVY.mjs.map → FollowupWidget-ENDML2BN.mjs.map} +1 -1
- package/dist/{FollowupWidget-2STSJSDY.cjs → FollowupWidget-XMPHTW2M.cjs} +4 -4
- package/dist/{FollowupWidget-2STSJSDY.cjs.map → FollowupWidget-XMPHTW2M.cjs.map} +1 -1
- package/dist/{FunctionalImpairmentScoreWidget-FCA4UKQA.cjs → FunctionalImpairmentScoreWidget-7TACV6EV.cjs} +6 -6
- package/dist/{FunctionalImpairmentScoreWidget-FCA4UKQA.cjs.map → FunctionalImpairmentScoreWidget-7TACV6EV.cjs.map} +1 -1
- package/dist/{FunctionalImpairmentScoreWidget-TKS6KE7K.mjs → FunctionalImpairmentScoreWidget-MGK6K4ZW.mjs} +4 -4
- package/dist/{FunctionalImpairmentScoreWidget-TKS6KE7K.mjs.map → FunctionalImpairmentScoreWidget-MGK6K4ZW.mjs.map} +1 -1
- package/dist/{GsExaminationWidget-ESIEZCP3.mjs → GsExaminationWidget-LCFURWVZ.mjs} +4 -4
- package/dist/{GsExaminationWidget-ESIEZCP3.mjs.map → GsExaminationWidget-LCFURWVZ.mjs.map} +1 -1
- package/dist/{GsExaminationWidget-KKE5I5GX.cjs → GsExaminationWidget-PCPCUJWN.cjs} +10 -10
- package/dist/{GsExaminationWidget-KKE5I5GX.cjs.map → GsExaminationWidget-PCPCUJWN.cjs.map} +1 -1
- package/dist/{GsGradingWidget-HC4MJ4KJ.mjs → GsGradingWidget-2TNN3B3R.mjs} +4 -4
- package/dist/{GsGradingWidget-HC4MJ4KJ.mjs.map → GsGradingWidget-2TNN3B3R.mjs.map} +1 -1
- package/dist/{GsGradingWidget-NGCQQVYA.cjs → GsGradingWidget-OXS65SQJ.cjs} +12 -12
- package/dist/{GsGradingWidget-NGCQQVYA.cjs.map → GsGradingWidget-OXS65SQJ.cjs.map} +1 -1
- package/dist/{GsSmartHistoryWidget-AAB427Q2.cjs → GsSmartHistoryWidget-CCIUZHMN.cjs} +12 -12
- package/dist/{GsSmartHistoryWidget-AAB427Q2.cjs.map → GsSmartHistoryWidget-CCIUZHMN.cjs.map} +1 -1
- package/dist/{GsSmartHistoryWidget-7HYGDU4O.mjs → GsSmartHistoryWidget-G5B3VUHN.mjs} +4 -4
- package/dist/{GsSmartHistoryWidget-7HYGDU4O.mjs.map → GsSmartHistoryWidget-G5B3VUHN.mjs.map} +1 -1
- package/dist/{HiddenVitalsWidget-5GFBDDPT.cjs → HiddenVitalsWidget-DHZOSOQY.cjs} +6 -6
- package/dist/{HiddenVitalsWidget-5GFBDDPT.cjs.map → HiddenVitalsWidget-DHZOSOQY.cjs.map} +1 -1
- package/dist/{HiddenVitalsWidget-CIE3KERT.mjs → HiddenVitalsWidget-QWJHUVRJ.mjs} +4 -4
- package/dist/{HiddenVitalsWidget-CIE3KERT.mjs.map → HiddenVitalsWidget-QWJHUVRJ.mjs.map} +1 -1
- package/dist/{LensAssessmentWidget-SIKJVVAE.cjs → LensAssessmentWidget-6DFZYT5F.cjs} +6 -6
- package/dist/{LensAssessmentWidget-SIKJVVAE.cjs.map → LensAssessmentWidget-6DFZYT5F.cjs.map} +1 -1
- package/dist/{LensAssessmentWidget-B4OMHTOE.mjs → LensAssessmentWidget-P2KHBHM2.mjs} +4 -4
- package/dist/{LensAssessmentWidget-B4OMHTOE.mjs.map → LensAssessmentWidget-P2KHBHM2.mjs.map} +1 -1
- package/dist/{MarMedicationOrdersWidget-767F65K6.cjs → MarMedicationOrdersWidget-QSMTNWR3.cjs} +7 -7
- package/dist/{MarMedicationOrdersWidget-767F65K6.cjs.map → MarMedicationOrdersWidget-QSMTNWR3.cjs.map} +1 -1
- package/dist/{MarMedicationOrdersWidget-LG3WOXN7.mjs → MarMedicationOrdersWidget-XW2YFTTH.mjs} +4 -4
- package/dist/{MarMedicationOrdersWidget-LG3WOXN7.mjs.map → MarMedicationOrdersWidget-XW2YFTTH.mjs.map} +1 -1
- package/dist/{OBGExaminationWidget-MRTGWLXJ.cjs → OBGExaminationWidget-5THYKJI5.cjs} +11 -11
- package/dist/{OBGExaminationWidget-MRTGWLXJ.cjs.map → OBGExaminationWidget-5THYKJI5.cjs.map} +1 -1
- package/dist/{OBGExaminationWidget-HQKTHSOZ.mjs → OBGExaminationWidget-Y2BVJB33.mjs} +4 -4
- package/dist/{OBGExaminationWidget-HQKTHSOZ.mjs.map → OBGExaminationWidget-Y2BVJB33.mjs.map} +1 -1
- package/dist/{OBGPathwayWidget-QJNWUIEM.mjs → OBGPathwayWidget-ALGYLNKZ.mjs} +5 -5
- package/dist/{OBGPathwayWidget-QJNWUIEM.mjs.map → OBGPathwayWidget-ALGYLNKZ.mjs.map} +1 -1
- package/dist/{OBGPathwayWidget-YRU36UL7.cjs → OBGPathwayWidget-FHBZPBPH.cjs} +9 -9
- package/dist/{OBGPathwayWidget-YRU36UL7.cjs.map → OBGPathwayWidget-FHBZPBPH.cjs.map} +1 -1
- package/dist/{ObstetricHistoryWidget-EW6JLNQ7.mjs → ObstetricHistoryWidget-5GDUCYS3.mjs} +4 -4
- package/dist/{ObstetricHistoryWidget-EW6JLNQ7.mjs.map → ObstetricHistoryWidget-5GDUCYS3.mjs.map} +1 -1
- package/dist/{ObstetricHistoryWidget-OOWCVFRB.cjs → ObstetricHistoryWidget-XGZM2HL4.cjs} +7 -7
- package/dist/{ObstetricHistoryWidget-OOWCVFRB.cjs.map → ObstetricHistoryWidget-XGZM2HL4.cjs.map} +1 -1
- package/dist/{OphthalDiagnosisWidget-UXXYGKD5.cjs → OphthalDiagnosisWidget-7WY633CI.cjs} +4 -4
- package/dist/{OphthalDiagnosisWidget-UXXYGKD5.cjs.map → OphthalDiagnosisWidget-7WY633CI.cjs.map} +1 -1
- package/dist/{OphthalDiagnosisWidget-MZYBQTFV.mjs → OphthalDiagnosisWidget-YHEDHIX5.mjs} +3 -3
- package/dist/{OphthalDiagnosisWidget-MZYBQTFV.mjs.map → OphthalDiagnosisWidget-YHEDHIX5.mjs.map} +1 -1
- package/dist/{OphthalmologyWidget-27ZN2E3F.mjs → OphthalmologyWidget-6RWGZHLU.mjs} +3 -3
- package/dist/{OphthalmologyWidget-27ZN2E3F.mjs.map → OphthalmologyWidget-6RWGZHLU.mjs.map} +1 -1
- package/dist/{OphthalmologyWidget-WFSFIHT4.cjs → OphthalmologyWidget-VLW4CM2Q.cjs} +4 -4
- package/dist/{OphthalmologyWidget-WFSFIHT4.cjs.map → OphthalmologyWidget-VLW4CM2Q.cjs.map} +1 -1
- package/dist/{OrthopedicExamWidget-ULZTDFXJ.cjs → OrthopedicExamWidget-4ZNOVW54.cjs} +6 -6
- package/dist/{OrthopedicExamWidget-ULZTDFXJ.cjs.map → OrthopedicExamWidget-4ZNOVW54.cjs.map} +1 -1
- package/dist/{OrthopedicExamWidget-WM55M3Y4.mjs → OrthopedicExamWidget-CWEH3ZY7.mjs} +4 -4
- package/dist/{OrthopedicExamWidget-WM55M3Y4.mjs.map → OrthopedicExamWidget-CWEH3ZY7.mjs.map} +1 -1
- package/dist/{PainScaleFlagsWidget-IFA3RCEL.cjs → PainScaleFlagsWidget-EYYQBSYL.cjs} +8 -8
- package/dist/{PainScaleFlagsWidget-IFA3RCEL.cjs.map → PainScaleFlagsWidget-EYYQBSYL.cjs.map} +1 -1
- package/dist/{PainScaleFlagsWidget-5KN7T4JK.mjs → PainScaleFlagsWidget-XC73ND7X.mjs} +4 -4
- package/dist/{PainScaleFlagsWidget-5KN7T4JK.mjs.map → PainScaleFlagsWidget-XC73ND7X.mjs.map} +1 -1
- package/dist/{PregnancyStatusWidget-U2BEJGBJ.mjs → PregnancyStatusWidget-U6Y3DCDB.mjs} +3 -3
- package/dist/{PregnancyStatusWidget-U2BEJGBJ.mjs.map → PregnancyStatusWidget-U6Y3DCDB.mjs.map} +1 -1
- package/dist/{PregnancyStatusWidget-QTTVFBOE.cjs → PregnancyStatusWidget-YZRYO2WA.cjs} +4 -4
- package/dist/{PregnancyStatusWidget-QTTVFBOE.cjs.map → PregnancyStatusWidget-YZRYO2WA.cjs.map} +1 -1
- package/dist/{ReferralWidget-GU3JYED2.mjs → ReferralWidget-FXJC56AF.mjs} +4 -4
- package/dist/{ReferralWidget-GU3JYED2.mjs.map → ReferralWidget-FXJC56AF.mjs.map} +1 -1
- package/dist/{ReferralWidget-27VGZCOQ.cjs → ReferralWidget-KD36EA74.cjs} +7 -7
- package/dist/{ReferralWidget-27VGZCOQ.cjs.map → ReferralWidget-KD36EA74.cjs.map} +1 -1
- package/dist/RichTextWidget-JG4Y7X66.mjs +11 -0
- package/dist/{RichTextWidget-2KLV65QP.cjs.map → RichTextWidget-JG4Y7X66.mjs.map} +1 -1
- package/dist/{RichTextWidget-2KLV65QP.cjs → RichTextWidget-KKC3P5Z3.cjs} +7 -7
- package/dist/{RichTextWidget-ZBX554ZJ.mjs.map → RichTextWidget-KKC3P5Z3.cjs.map} +1 -1
- package/dist/SmartTextarea-DSM5TP5N.cjs +19 -0
- package/dist/{SmartTextarea-LQDXFCYT.mjs.map → SmartTextarea-DSM5TP5N.cjs.map} +1 -1
- package/dist/SmartTextarea-HDRABZIN.mjs +10 -0
- package/dist/{SmartTextarea-WITNRNDU.cjs.map → SmartTextarea-HDRABZIN.mjs.map} +1 -1
- package/dist/{SuggestionTextareaWidget-UNL3FZRI.mjs → SuggestionTextareaWidget-IKL46SCV.mjs} +7 -7
- package/dist/{SuggestionTextareaWidget-UNL3FZRI.mjs.map → SuggestionTextareaWidget-IKL46SCV.mjs.map} +1 -1
- package/dist/{SuggestionTextareaWidget-FWRZ46MV.cjs → SuggestionTextareaWidget-KABKRNP3.cjs} +18 -18
- package/dist/{SuggestionTextareaWidget-FWRZ46MV.cjs.map → SuggestionTextareaWidget-KABKRNP3.cjs.map} +1 -1
- package/dist/{SurgicalRiskFlagsWidget-OJKCZIWJ.cjs → SurgicalRiskFlagsWidget-DO66VPQC.cjs} +6 -6
- package/dist/{SurgicalRiskFlagsWidget-OJKCZIWJ.cjs.map → SurgicalRiskFlagsWidget-DO66VPQC.cjs.map} +1 -1
- package/dist/{SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs → SurgicalRiskFlagsWidget-NPOHFMIZ.mjs} +4 -4
- package/dist/{SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs.map → SurgicalRiskFlagsWidget-NPOHFMIZ.mjs.map} +1 -1
- package/dist/{TreatmentPlanWidget-665HLKYV.mjs → TreatmentPlanWidget-7XYIVHQO.mjs} +4 -4
- package/dist/{TreatmentPlanWidget-665HLKYV.mjs.map → TreatmentPlanWidget-7XYIVHQO.mjs.map} +1 -1
- package/dist/{TreatmentPlanWidget-TATWSPLY.cjs → TreatmentPlanWidget-ELTSULQ4.cjs} +6 -6
- package/dist/{TreatmentPlanWidget-TATWSPLY.cjs.map → TreatmentPlanWidget-ELTSULQ4.cjs.map} +1 -1
- package/dist/{UrologyExaminationWidget-GRBL2SDG.mjs → UrologyExaminationWidget-OQLZPWVR.mjs} +4 -4
- package/dist/{UrologyExaminationWidget-GRBL2SDG.mjs.map → UrologyExaminationWidget-OQLZPWVR.mjs.map} +1 -1
- package/dist/{UrologyExaminationWidget-GQLMV4FB.cjs → UrologyExaminationWidget-OSNFGBI2.cjs} +12 -12
- package/dist/{UrologyExaminationWidget-GQLMV4FB.cjs.map → UrologyExaminationWidget-OSNFGBI2.cjs.map} +1 -1
- package/dist/{UrologyPathwayWidget-PEO5BVQX.mjs → UrologyPathwayWidget-KE2LAZTZ.mjs} +4 -4
- package/dist/{UrologyPathwayWidget-PEO5BVQX.mjs.map → UrologyPathwayWidget-KE2LAZTZ.mjs.map} +1 -1
- package/dist/{UrologyPathwayWidget-D6EWSOGW.cjs → UrologyPathwayWidget-YPYIX43Z.cjs} +7 -7
- package/dist/{UrologyPathwayWidget-D6EWSOGW.cjs.map → UrologyPathwayWidget-YPYIX43Z.cjs.map} +1 -1
- package/dist/{UrologySmartHistoryWidget-BDKRFBYN.mjs → UrologySmartHistoryWidget-ET6CU36D.mjs} +4 -4
- package/dist/{UrologySmartHistoryWidget-BDKRFBYN.mjs.map → UrologySmartHistoryWidget-ET6CU36D.mjs.map} +1 -1
- package/dist/{UrologySmartHistoryWidget-P3KTQE7L.cjs → UrologySmartHistoryWidget-SLBJALMO.cjs} +15 -15
- package/dist/{UrologySmartHistoryWidget-P3KTQE7L.cjs.map → UrologySmartHistoryWidget-SLBJALMO.cjs.map} +1 -1
- package/dist/{VitalsWidget-MS3OOZSW.cjs → VitalsWidget-MGUUJZP4.cjs} +5 -5
- package/dist/{VitalsWidget-MS3OOZSW.cjs.map → VitalsWidget-MGUUJZP4.cjs.map} +1 -1
- package/dist/{VitalsWidget-63HTXK2M.mjs → VitalsWidget-YI3IXQYN.mjs} +3 -3
- package/dist/{VitalsWidget-63HTXK2M.mjs.map → VitalsWidget-YI3IXQYN.mjs.map} +1 -1
- package/dist/{chunk-5RT3S67O.cjs → chunk-35I4CBEC.cjs} +6 -6
- package/dist/{chunk-5RT3S67O.cjs.map → chunk-35I4CBEC.cjs.map} +1 -1
- package/dist/{chunk-XDUVO3IZ.mjs → chunk-4422KT6O.mjs} +61 -6
- package/dist/chunk-4422KT6O.mjs.map +1 -0
- package/dist/{chunk-BBD3Y37O.cjs → chunk-4KTQ4NEI.cjs} +4 -4
- package/dist/{chunk-BBD3Y37O.cjs.map → chunk-4KTQ4NEI.cjs.map} +1 -1
- package/dist/{chunk-MBZRRYJB.mjs → chunk-7ZRK7ZWY.mjs} +4 -4
- package/dist/{chunk-MBZRRYJB.mjs.map → chunk-7ZRK7ZWY.mjs.map} +1 -1
- package/dist/{chunk-AIZ3XYEZ.cjs → chunk-A2A5EB5R.cjs} +60 -5
- package/dist/chunk-A2A5EB5R.cjs.map +1 -0
- package/dist/{chunk-T3UHPMFX.mjs → chunk-BKZXISZH.mjs} +3 -3
- package/dist/{chunk-T3UHPMFX.mjs.map → chunk-BKZXISZH.mjs.map} +1 -1
- package/dist/{chunk-G6Y4UJPN.mjs → chunk-CC54SKAA.mjs} +5 -5
- package/dist/{chunk-G6Y4UJPN.mjs.map → chunk-CC54SKAA.mjs.map} +1 -1
- package/dist/{chunk-Q66LXMRR.mjs → chunk-FAAMKLBY.mjs} +3 -3
- package/dist/{chunk-Q66LXMRR.mjs.map → chunk-FAAMKLBY.mjs.map} +1 -1
- package/dist/{chunk-TCQQUJCL.cjs → chunk-GQX2UGHH.cjs} +11 -11
- package/dist/{chunk-TCQQUJCL.cjs.map → chunk-GQX2UGHH.cjs.map} +1 -1
- package/dist/{chunk-2BGJZ44Q.mjs → chunk-HKEUAERY.mjs} +9 -4
- package/dist/{chunk-TB33A4PD.cjs.map → chunk-HKEUAERY.mjs.map} +1 -1
- package/dist/{chunk-T2IKWRV2.cjs → chunk-JFZ7XPDM.cjs} +9 -9
- package/dist/{chunk-T2IKWRV2.cjs.map → chunk-JFZ7XPDM.cjs.map} +1 -1
- package/dist/{chunk-TB33A4PD.cjs → chunk-JVIU4OBK.cjs} +9 -3
- package/dist/chunk-JVIU4OBK.cjs.map +1 -0
- package/dist/{chunk-XIUXYHGG.cjs → chunk-L2H5SOAV.cjs} +5 -5
- package/dist/{chunk-XIUXYHGG.cjs.map → chunk-L2H5SOAV.cjs.map} +1 -1
- package/dist/{chunk-XLCTFYFD.mjs → chunk-PNRSJPGV.mjs} +5 -5
- package/dist/{chunk-XLCTFYFD.mjs.map → chunk-PNRSJPGV.mjs.map} +1 -1
- package/dist/{chunk-X4AJCTON.cjs → chunk-PVKHVVFS.cjs} +4 -4
- package/dist/{chunk-X4AJCTON.cjs.map → chunk-PVKHVVFS.cjs.map} +1 -1
- package/dist/{chunk-Q3K646K4.mjs → chunk-QM6UMI2M.mjs} +3 -3
- package/dist/{chunk-Q3K646K4.mjs.map → chunk-QM6UMI2M.mjs.map} +1 -1
- package/dist/{chunk-MQHZ7HD2.mjs → chunk-QQXBHDUF.mjs} +3 -3
- package/dist/{chunk-MQHZ7HD2.mjs.map → chunk-QQXBHDUF.mjs.map} +1 -1
- package/dist/{chunk-UKSP3B3W.mjs → chunk-VAJR2VBK.mjs} +3 -3
- package/dist/{chunk-UKSP3B3W.mjs.map → chunk-VAJR2VBK.mjs.map} +1 -1
- package/dist/{chunk-RZK44P3C.cjs → chunk-WM43XTEK.cjs} +7 -7
- package/dist/{chunk-RZK44P3C.cjs.map → chunk-WM43XTEK.cjs.map} +1 -1
- package/dist/{chunk-7DISRJAB.cjs → chunk-XGO2HG3N.cjs} +4 -4
- package/dist/{chunk-7DISRJAB.cjs.map → chunk-XGO2HG3N.cjs.map} +1 -1
- package/dist/index.cjs +136 -134
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -4
- package/dist/index.d.ts +9 -4
- package/dist/index.mjs +54 -56
- package/dist/index.mjs.map +1 -1
- package/dist/read-only-table.d.cts +1 -1
- package/dist/read-only-table.d.ts +1 -1
- package/dist/rich-text.cjs +5 -5
- package/dist/rich-text.mjs +4 -4
- package/dist/smart.cjs +5 -5
- package/dist/smart.d.cts +1 -1
- package/dist/smart.d.ts +1 -1
- package/dist/smart.mjs +3 -3
- package/dist/{types-BbOnd5IN.d.cts → types-27f9S27N.d.cts} +13 -1
- package/dist/{types-BbOnd5IN.d.ts → types-27f9S27N.d.ts} +13 -1
- package/package.json +1 -1
- package/dist/AddMedicationWidget-45T4XVEL.cjs +0 -32
- package/dist/AddMedicationWidget-45T4XVEL.cjs.map +0 -1
- package/dist/AddMedicationWidget-B5RXRYBK.mjs.map +0 -1
- package/dist/BpeChartWidget-HATASHAC.mjs +0 -7
- package/dist/BpeChartWidget-VZRH7M7L.cjs +0 -28
- package/dist/DentalChartWidget-LYLOFWZU.cjs +0 -21
- package/dist/RichTextWidget-ZBX554ZJ.mjs +0 -11
- package/dist/SmartTextarea-LQDXFCYT.mjs +0 -10
- package/dist/SmartTextarea-WITNRNDU.cjs +0 -19
- package/dist/chunk-2BGJZ44Q.mjs.map +0 -1
- package/dist/chunk-AIZ3XYEZ.cjs.map +0 -1
- package/dist/chunk-XDUVO3IZ.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/campMockData.ts","../src/core/campDateValue.ts","../src/core/validate.ts","../src/core/suggestionTokens.ts","../src/core/rules.ts","../src/core/generalSurgeryPathway.ts","../src/core/urologyPathway.ts","../src/core/painScaleFlags.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/store.ts","../src/react/VoiceContext.tsx","../src/react/FormProvider.tsx","../src/react/useField.ts"],"names":["str","bool","key","wrapped","createContext","useContext","useState","useCallback","jsx","useRef","useEffect"],"mappings":"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","file":"chunk-TB33A4PD.cjs","sourcesContent":["import type { CampDateOption, CampTimeSlotOption } from './types';\n\n/** Temporary mock data until camp dates are loaded from an API or field options. */\nexport const MOCK_CAMP_DATES: CampDateOption[] = [\n {\n id: 'camp-2026-06-14',\n date: '2026-06-14',\n location: 'Wellness Center, Andheri West',\n spotsLeft: 27,\n },\n {\n id: 'camp-2026-06-15',\n date: '2026-06-15',\n location: 'Civic Hall, Bandra',\n spotsLeft: 23,\n },\n {\n id: 'camp-2026-06-21',\n date: '2026-06-21',\n location: 'Community Hub, Powai',\n spotsLeft: 24,\n },\n {\n id: 'camp-2026-06-22',\n date: '2026-06-22',\n location: \"St. Mary's School, Dadar\",\n spotsLeft: 22,\n },\n];\n\n/** Temporary mock time slots until loaded from an API or field options. */\nexport const MOCK_CAMP_TIME_SLOTS: CampTimeSlotOption[] = [\n { id: 'slot-0900', time: '09:00 AM', spotsLeft: 7, capacity: 12 },\n { id: 'slot-1000', time: '10:00 AM', spotsLeft: 8, capacity: 12 },\n { id: 'slot-1100', time: '11:00 AM', spotsLeft: 0, capacity: 12 },\n { id: 'slot-1200', time: '12:00 PM', spotsLeft: 5, capacity: 12 },\n];\n\nexport function findCampById(\n campId: string | null | undefined,\n options?: CampDateOption[],\n): CampDateOption | undefined {\n if (!campId) return undefined;\n const camps = options?.length ? options : MOCK_CAMP_DATES;\n return camps.find((camp) => camp.id === campId);\n}\n","import type { CampDateOption, CampDateSelection } from './types';\nimport { findCampById } from './campMockData';\n\nexport function campDateSelectionFromOption(camp: CampDateOption): CampDateSelection {\n return { id: camp.id, date: camp.date, location: camp.location };\n}\n\nexport function parseCampDateValue(\n value: unknown,\n options?: CampDateOption[],\n): CampDateSelection | null {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const o = value as Record<string, unknown>;\n if (typeof o.id === 'string' && o.id.trim() && typeof o.date === 'string' && o.date.trim()) {\n return {\n id: o.id,\n date: o.date,\n location: typeof o.location === 'string' ? o.location : '',\n };\n }\n }\n if (typeof value === 'string' && value.trim()) {\n const camp = findCampById(value, options);\n return camp ? campDateSelectionFromOption(camp) : null;\n }\n return null;\n}\n","import type { CampDatesFieldDef, FieldDef, SliderFieldDef, OtpInputFieldDef } from './types';\nimport { parseCampDateValue } from './campDateValue';\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 // camp_dates: valid when a camp selection object (or resolvable id) is stored.\n if (field.type === 'camp_dates') {\n if (field.required) {\n const selection = parseCampDateValue(value, (field as CampDatesFieldDef).options);\n if (!selection?.id) {\n return 'Please select a camp date';\n }\n }\n return null;\n }\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","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 { 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 * When false, FormStore skips debounced auto-persist on field changes.\n * Explicit `store.save()` (e.g. submit) still calls `save()`. Defaults to true.\n */\n autoSave?: boolean;\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","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 StoreCampsConfig {\n /**\n * Bearer token sent in the `Authorization` header for camp API requests\n * (instances, availability, book). Falls back to `auth.baseUrl` for the\n * base URL so you only need to set the token here.\n */\n authToken?: 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 /** Camp booking API configuration (instances, availability, book endpoints). */\n camps?: StoreCampsConfig;\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.persistence.autoSave === false) return;\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 { 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"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/campMockData.ts","../src/core/campDateValue.ts","../src/core/validate.ts","../src/core/suggestionTokens.ts","../src/core/rules.ts","../src/core/generalSurgeryPathway.ts","../src/core/urologyPathway.ts","../src/core/painScaleFlags.ts","../src/core/persistence/index.ts","../src/core/prefill.ts","../src/core/store.ts","../src/react/VoiceContext.tsx","../src/react/FormProvider.tsx","../src/react/useField.ts"],"names":["str","bool","key","wrapped","createContext","useContext","jsx","useState","useEffect"],"mappings":"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","file":"chunk-HKEUAERY.mjs","sourcesContent":["import type { CampDateOption, CampTimeSlotOption } from './types';\n\n/** Temporary mock data until camp dates are loaded from an API or field options. */\nexport const MOCK_CAMP_DATES: CampDateOption[] = [\n {\n id: 'camp-2026-06-14',\n date: '2026-06-14',\n location: 'Wellness Center, Andheri West',\n spotsLeft: 27,\n },\n {\n id: 'camp-2026-06-15',\n date: '2026-06-15',\n location: 'Civic Hall, Bandra',\n spotsLeft: 23,\n },\n {\n id: 'camp-2026-06-21',\n date: '2026-06-21',\n location: 'Community Hub, Powai',\n spotsLeft: 24,\n },\n {\n id: 'camp-2026-06-22',\n date: '2026-06-22',\n location: \"St. Mary's School, Dadar\",\n spotsLeft: 22,\n },\n];\n\n/** Temporary mock time slots until loaded from an API or field options. */\nexport const MOCK_CAMP_TIME_SLOTS: CampTimeSlotOption[] = [\n { id: 'slot-0900', time: '09:00 AM', spotsLeft: 7, capacity: 12 },\n { id: 'slot-1000', time: '10:00 AM', spotsLeft: 8, capacity: 12 },\n { id: 'slot-1100', time: '11:00 AM', spotsLeft: 0, capacity: 12 },\n { id: 'slot-1200', time: '12:00 PM', spotsLeft: 5, capacity: 12 },\n];\n\nexport function findCampById(\n campId: string | null | undefined,\n options?: CampDateOption[],\n): CampDateOption | undefined {\n if (!campId) return undefined;\n const camps = options?.length ? options : MOCK_CAMP_DATES;\n return camps.find((camp) => camp.id === campId);\n}\n","import type { CampDateOption, CampDateSelection } from './types';\nimport { findCampById } from './campMockData';\n\nexport function campDateSelectionFromOption(camp: CampDateOption): CampDateSelection {\n return { id: camp.id, date: camp.date, location: camp.location };\n}\n\nexport function parseCampDateValue(\n value: unknown,\n options?: CampDateOption[],\n): CampDateSelection | null {\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const o = value as Record<string, unknown>;\n if (typeof o.id === 'string' && o.id.trim() && typeof o.date === 'string' && o.date.trim()) {\n return {\n id: o.id,\n date: o.date,\n location: typeof o.location === 'string' ? o.location : '',\n };\n }\n }\n if (typeof value === 'string' && value.trim()) {\n const camp = findCampById(value, options);\n return camp ? campDateSelectionFromOption(camp) : null;\n }\n return null;\n}\n","import type { CampDatesFieldDef, FieldDef, SliderFieldDef, OtpInputFieldDef } from './types';\nimport { parseCampDateValue } from './campDateValue';\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 // camp_dates: valid when a camp selection object (or resolvable id) is stored.\n if (field.type === 'camp_dates') {\n if (field.required) {\n const selection = parseCampDateValue(value, (field as CampDatesFieldDef).options);\n if (!selection?.id) {\n return 'Please select a camp date';\n }\n }\n return null;\n }\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","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 { 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 * When false, FormStore skips debounced auto-persist on field changes.\n * Explicit `store.save()` (e.g. submit) still calls `save()`. Defaults to true.\n */\n autoSave?: boolean;\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","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 StoreCampsConfig {\n /**\n * Bearer token sent in the `Authorization` header for camp API requests\n * (instances, availability, book). Falls back to `auth.baseUrl` for the\n * base URL so you only need to set the token here.\n */\n authToken?: 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 /** Camp booking API configuration (instances, availability, book endpoints). */\n camps?: StoreCampsConfig;\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.persistence.autoSave === false) return;\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, MedicationPackage } 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[]>([]);\nconst MedicationPackagesContext = createContext<MedicationPackage[]>([]);\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\nexport function useMedicationPackages(): MedicationPackage[] {\n return useContext(MedicationPackagesContext);\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 medicationPackages?: MedicationPackage[];\n children: React.ReactNode;\n}\n\nexport const FormProvider: React.FC<FormProviderProps> = ({\n schema,\n config,\n fieldHandlers,\n frequentItems,\n packages,\n medicationPackages,\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 <MedicationPackagesContext.Provider value={medicationPackages ?? []}>\n <VoiceContextProvider>\n {children}\n </VoiceContextProvider>\n </MedicationPackagesContext.Provider>\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 { 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"]}
|