formanitor 0.2.7 → 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.
Files changed (223) hide show
  1. package/dist/{AddInvestigationWidget-MSY4VSQZ.cjs → AddInvestigationWidget-4AZ7HTJY.cjs} +7 -7
  2. package/dist/{AddInvestigationWidget-MSY4VSQZ.cjs.map → AddInvestigationWidget-4AZ7HTJY.cjs.map} +1 -1
  3. package/dist/{AddInvestigationWidget-A2JS2ETO.mjs → AddInvestigationWidget-MSW4FUHR.mjs} +3 -3
  4. package/dist/{AddInvestigationWidget-A2JS2ETO.mjs.map → AddInvestigationWidget-MSW4FUHR.mjs.map} +1 -1
  5. package/dist/{AddMedicationWidget-B5RXRYBK.mjs → AddMedicationWidget-OEULICY3.mjs} +7 -5
  6. package/dist/AddMedicationWidget-OEULICY3.mjs.map +1 -0
  7. package/dist/AddMedicationWidget-UDVVDKHR.cjs +34 -0
  8. package/dist/AddMedicationWidget-UDVVDKHR.cjs.map +1 -0
  9. package/dist/{AddProcedureWidget-YW4EV66W.mjs → AddProcedureWidget-7IZ7SY7N.mjs} +3 -3
  10. package/dist/{AddProcedureWidget-YW4EV66W.mjs.map → AddProcedureWidget-7IZ7SY7N.mjs.map} +1 -1
  11. package/dist/{AddProcedureWidget-QUNDIZGR.cjs → AddProcedureWidget-NQCN5FBQ.cjs} +6 -6
  12. package/dist/{AddProcedureWidget-QUNDIZGR.cjs.map → AddProcedureWidget-NQCN5FBQ.cjs.map} +1 -1
  13. package/dist/{BiometryIolWorkupWidget-FWO3IWTF.cjs → BiometryIolWorkupWidget-NTYCAGGX.cjs} +6 -6
  14. package/dist/{BiometryIolWorkupWidget-FWO3IWTF.cjs.map → BiometryIolWorkupWidget-NTYCAGGX.cjs.map} +1 -1
  15. package/dist/{BiometryIolWorkupWidget-5RZP34FF.mjs → BiometryIolWorkupWidget-ZJRUTQZK.mjs} +4 -4
  16. package/dist/{BiometryIolWorkupWidget-5RZP34FF.mjs.map → BiometryIolWorkupWidget-ZJRUTQZK.mjs.map} +1 -1
  17. package/dist/BpeChartWidget-OL5WKSQG.mjs +7 -0
  18. package/dist/{BpeChartWidget-HATASHAC.mjs.map → BpeChartWidget-OL5WKSQG.mjs.map} +1 -1
  19. package/dist/BpeChartWidget-WYDP2BVS.cjs +28 -0
  20. package/dist/{BpeChartWidget-VZRH7M7L.cjs.map → BpeChartWidget-WYDP2BVS.cjs.map} +1 -1
  21. package/dist/{DateTimeWidget-RJ7SATVA.cjs → DateTimeWidget-3E6N4NOK.cjs} +6 -6
  22. package/dist/{DateTimeWidget-RJ7SATVA.cjs.map → DateTimeWidget-3E6N4NOK.cjs.map} +1 -1
  23. package/dist/{DateTimeWidget-KRX4O6OD.mjs → DateTimeWidget-TAHCCYCX.mjs} +4 -4
  24. package/dist/{DateTimeWidget-KRX4O6OD.mjs.map → DateTimeWidget-TAHCCYCX.mjs.map} +1 -1
  25. package/dist/{DateWidget-JEKDKPNS.mjs → DateWidget-5LFXAWRK.mjs} +4 -4
  26. package/dist/{DateWidget-JEKDKPNS.mjs.map → DateWidget-5LFXAWRK.mjs.map} +1 -1
  27. package/dist/{DateWidget-T7IQUWEA.cjs → DateWidget-HIYZ3TY7.cjs} +6 -6
  28. package/dist/{DateWidget-T7IQUWEA.cjs.map → DateWidget-HIYZ3TY7.cjs.map} +1 -1
  29. package/dist/{DentalChartWidget-P2YPKAMO.mjs → DentalChartWidget-4ZUVMMRX.mjs} +4 -4
  30. package/dist/{DentalChartWidget-LYLOFWZU.cjs.map → DentalChartWidget-4ZUVMMRX.mjs.map} +1 -1
  31. package/dist/DentalChartWidget-J6CHCPWI.cjs +21 -0
  32. package/dist/{DentalChartWidget-P2YPKAMO.mjs.map → DentalChartWidget-J6CHCPWI.cjs.map} +1 -1
  33. package/dist/{DiagnosisTextareaWidget-XJ47OZYH.cjs → DiagnosisTextareaWidget-2N5DP2CP.cjs} +7 -7
  34. package/dist/{DiagnosisTextareaWidget-XJ47OZYH.cjs.map → DiagnosisTextareaWidget-2N5DP2CP.cjs.map} +1 -1
  35. package/dist/{DiagnosisTextareaWidget-6UCYCCSB.mjs → DiagnosisTextareaWidget-OXOXANMF.mjs} +4 -4
  36. package/dist/{DiagnosisTextareaWidget-6UCYCCSB.mjs.map → DiagnosisTextareaWidget-OXOXANMF.mjs.map} +1 -1
  37. package/dist/{DifferentialDiagnosisWidget-XESNHNQQ.cjs → DifferentialDiagnosisWidget-RLGTZFGB.cjs} +4 -4
  38. package/dist/{DifferentialDiagnosisWidget-XESNHNQQ.cjs.map → DifferentialDiagnosisWidget-RLGTZFGB.cjs.map} +1 -1
  39. package/dist/{DifferentialDiagnosisWidget-IZEZVW5F.mjs → DifferentialDiagnosisWidget-XY7CJ5OG.mjs} +3 -3
  40. package/dist/{DifferentialDiagnosisWidget-IZEZVW5F.mjs.map → DifferentialDiagnosisWidget-XY7CJ5OG.mjs.map} +1 -1
  41. package/dist/{DischargeMedicationOrdersWidget-KA3HANHE.mjs → DischargeMedicationOrdersWidget-JXLQWPCP.mjs} +4 -4
  42. package/dist/{DischargeMedicationOrdersWidget-KA3HANHE.mjs.map → DischargeMedicationOrdersWidget-JXLQWPCP.mjs.map} +1 -1
  43. package/dist/{DischargeMedicationOrdersWidget-WRJRYL6F.cjs → DischargeMedicationOrdersWidget-X3ZVW3FP.cjs} +7 -7
  44. package/dist/{DischargeMedicationOrdersWidget-WRJRYL6F.cjs.map → DischargeMedicationOrdersWidget-X3ZVW3FP.cjs.map} +1 -1
  45. package/dist/{EditableTable-VZ66IXYI.mjs → EditableTable-ECNOISL3.mjs} +3 -3
  46. package/dist/{EditableTable-VZ66IXYI.mjs.map → EditableTable-ECNOISL3.mjs.map} +1 -1
  47. package/dist/{EditableTable-OW5LC6OC.cjs → EditableTable-OFVKAYRA.cjs} +4 -4
  48. package/dist/{EditableTable-OW5LC6OC.cjs.map → EditableTable-OFVKAYRA.cjs.map} +1 -1
  49. package/dist/{ExtraOralExamWidget-JVKJ4ZWC.mjs → ExtraOralExamWidget-74G73HGP.mjs} +3 -3
  50. package/dist/{ExtraOralExamWidget-JVKJ4ZWC.mjs.map → ExtraOralExamWidget-74G73HGP.mjs.map} +1 -1
  51. package/dist/{ExtraOralExamWidget-ZIOSKMIO.cjs → ExtraOralExamWidget-ETQI25NZ.cjs} +4 -4
  52. package/dist/{ExtraOralExamWidget-ZIOSKMIO.cjs.map → ExtraOralExamWidget-ETQI25NZ.cjs.map} +1 -1
  53. package/dist/{FollowupWidget-GCGPWZVY.mjs → FollowupWidget-ENDML2BN.mjs} +3 -3
  54. package/dist/{FollowupWidget-GCGPWZVY.mjs.map → FollowupWidget-ENDML2BN.mjs.map} +1 -1
  55. package/dist/{FollowupWidget-2STSJSDY.cjs → FollowupWidget-XMPHTW2M.cjs} +4 -4
  56. package/dist/{FollowupWidget-2STSJSDY.cjs.map → FollowupWidget-XMPHTW2M.cjs.map} +1 -1
  57. package/dist/{FunctionalImpairmentScoreWidget-FCA4UKQA.cjs → FunctionalImpairmentScoreWidget-7TACV6EV.cjs} +6 -6
  58. package/dist/{FunctionalImpairmentScoreWidget-FCA4UKQA.cjs.map → FunctionalImpairmentScoreWidget-7TACV6EV.cjs.map} +1 -1
  59. package/dist/{FunctionalImpairmentScoreWidget-TKS6KE7K.mjs → FunctionalImpairmentScoreWidget-MGK6K4ZW.mjs} +4 -4
  60. package/dist/{FunctionalImpairmentScoreWidget-TKS6KE7K.mjs.map → FunctionalImpairmentScoreWidget-MGK6K4ZW.mjs.map} +1 -1
  61. package/dist/{GsExaminationWidget-ESIEZCP3.mjs → GsExaminationWidget-LCFURWVZ.mjs} +4 -4
  62. package/dist/{GsExaminationWidget-ESIEZCP3.mjs.map → GsExaminationWidget-LCFURWVZ.mjs.map} +1 -1
  63. package/dist/{GsExaminationWidget-KKE5I5GX.cjs → GsExaminationWidget-PCPCUJWN.cjs} +10 -10
  64. package/dist/{GsExaminationWidget-KKE5I5GX.cjs.map → GsExaminationWidget-PCPCUJWN.cjs.map} +1 -1
  65. package/dist/{GsGradingWidget-HC4MJ4KJ.mjs → GsGradingWidget-2TNN3B3R.mjs} +4 -4
  66. package/dist/{GsGradingWidget-HC4MJ4KJ.mjs.map → GsGradingWidget-2TNN3B3R.mjs.map} +1 -1
  67. package/dist/{GsGradingWidget-NGCQQVYA.cjs → GsGradingWidget-OXS65SQJ.cjs} +12 -12
  68. package/dist/{GsGradingWidget-NGCQQVYA.cjs.map → GsGradingWidget-OXS65SQJ.cjs.map} +1 -1
  69. package/dist/{GsSmartHistoryWidget-AAB427Q2.cjs → GsSmartHistoryWidget-CCIUZHMN.cjs} +12 -12
  70. package/dist/{GsSmartHistoryWidget-AAB427Q2.cjs.map → GsSmartHistoryWidget-CCIUZHMN.cjs.map} +1 -1
  71. package/dist/{GsSmartHistoryWidget-7HYGDU4O.mjs → GsSmartHistoryWidget-G5B3VUHN.mjs} +4 -4
  72. package/dist/{GsSmartHistoryWidget-7HYGDU4O.mjs.map → GsSmartHistoryWidget-G5B3VUHN.mjs.map} +1 -1
  73. package/dist/{HiddenVitalsWidget-5GFBDDPT.cjs → HiddenVitalsWidget-DHZOSOQY.cjs} +6 -6
  74. package/dist/{HiddenVitalsWidget-5GFBDDPT.cjs.map → HiddenVitalsWidget-DHZOSOQY.cjs.map} +1 -1
  75. package/dist/{HiddenVitalsWidget-CIE3KERT.mjs → HiddenVitalsWidget-QWJHUVRJ.mjs} +4 -4
  76. package/dist/{HiddenVitalsWidget-CIE3KERT.mjs.map → HiddenVitalsWidget-QWJHUVRJ.mjs.map} +1 -1
  77. package/dist/{LensAssessmentWidget-SIKJVVAE.cjs → LensAssessmentWidget-6DFZYT5F.cjs} +6 -6
  78. package/dist/{LensAssessmentWidget-SIKJVVAE.cjs.map → LensAssessmentWidget-6DFZYT5F.cjs.map} +1 -1
  79. package/dist/{LensAssessmentWidget-B4OMHTOE.mjs → LensAssessmentWidget-P2KHBHM2.mjs} +4 -4
  80. package/dist/{LensAssessmentWidget-B4OMHTOE.mjs.map → LensAssessmentWidget-P2KHBHM2.mjs.map} +1 -1
  81. package/dist/{MarMedicationOrdersWidget-767F65K6.cjs → MarMedicationOrdersWidget-QSMTNWR3.cjs} +7 -7
  82. package/dist/{MarMedicationOrdersWidget-767F65K6.cjs.map → MarMedicationOrdersWidget-QSMTNWR3.cjs.map} +1 -1
  83. package/dist/{MarMedicationOrdersWidget-LG3WOXN7.mjs → MarMedicationOrdersWidget-XW2YFTTH.mjs} +4 -4
  84. package/dist/{MarMedicationOrdersWidget-LG3WOXN7.mjs.map → MarMedicationOrdersWidget-XW2YFTTH.mjs.map} +1 -1
  85. package/dist/{OBGExaminationWidget-MRTGWLXJ.cjs → OBGExaminationWidget-5THYKJI5.cjs} +11 -11
  86. package/dist/{OBGExaminationWidget-MRTGWLXJ.cjs.map → OBGExaminationWidget-5THYKJI5.cjs.map} +1 -1
  87. package/dist/{OBGExaminationWidget-HQKTHSOZ.mjs → OBGExaminationWidget-Y2BVJB33.mjs} +4 -4
  88. package/dist/{OBGExaminationWidget-HQKTHSOZ.mjs.map → OBGExaminationWidget-Y2BVJB33.mjs.map} +1 -1
  89. package/dist/{OBGPathwayWidget-QJNWUIEM.mjs → OBGPathwayWidget-ALGYLNKZ.mjs} +5 -5
  90. package/dist/{OBGPathwayWidget-QJNWUIEM.mjs.map → OBGPathwayWidget-ALGYLNKZ.mjs.map} +1 -1
  91. package/dist/{OBGPathwayWidget-YRU36UL7.cjs → OBGPathwayWidget-FHBZPBPH.cjs} +9 -9
  92. package/dist/{OBGPathwayWidget-YRU36UL7.cjs.map → OBGPathwayWidget-FHBZPBPH.cjs.map} +1 -1
  93. package/dist/{ObstetricHistoryWidget-EW6JLNQ7.mjs → ObstetricHistoryWidget-5GDUCYS3.mjs} +4 -4
  94. package/dist/{ObstetricHistoryWidget-EW6JLNQ7.mjs.map → ObstetricHistoryWidget-5GDUCYS3.mjs.map} +1 -1
  95. package/dist/{ObstetricHistoryWidget-OOWCVFRB.cjs → ObstetricHistoryWidget-XGZM2HL4.cjs} +7 -7
  96. package/dist/{ObstetricHistoryWidget-OOWCVFRB.cjs.map → ObstetricHistoryWidget-XGZM2HL4.cjs.map} +1 -1
  97. package/dist/{OphthalDiagnosisWidget-UXXYGKD5.cjs → OphthalDiagnosisWidget-7WY633CI.cjs} +4 -4
  98. package/dist/{OphthalDiagnosisWidget-UXXYGKD5.cjs.map → OphthalDiagnosisWidget-7WY633CI.cjs.map} +1 -1
  99. package/dist/{OphthalDiagnosisWidget-MZYBQTFV.mjs → OphthalDiagnosisWidget-YHEDHIX5.mjs} +3 -3
  100. package/dist/{OphthalDiagnosisWidget-MZYBQTFV.mjs.map → OphthalDiagnosisWidget-YHEDHIX5.mjs.map} +1 -1
  101. package/dist/{OphthalmologyWidget-27ZN2E3F.mjs → OphthalmologyWidget-6RWGZHLU.mjs} +3 -3
  102. package/dist/{OphthalmologyWidget-27ZN2E3F.mjs.map → OphthalmologyWidget-6RWGZHLU.mjs.map} +1 -1
  103. package/dist/{OphthalmologyWidget-WFSFIHT4.cjs → OphthalmologyWidget-VLW4CM2Q.cjs} +4 -4
  104. package/dist/{OphthalmologyWidget-WFSFIHT4.cjs.map → OphthalmologyWidget-VLW4CM2Q.cjs.map} +1 -1
  105. package/dist/{OrthopedicExamWidget-ULZTDFXJ.cjs → OrthopedicExamWidget-4ZNOVW54.cjs} +6 -6
  106. package/dist/{OrthopedicExamWidget-ULZTDFXJ.cjs.map → OrthopedicExamWidget-4ZNOVW54.cjs.map} +1 -1
  107. package/dist/{OrthopedicExamWidget-WM55M3Y4.mjs → OrthopedicExamWidget-CWEH3ZY7.mjs} +4 -4
  108. package/dist/{OrthopedicExamWidget-WM55M3Y4.mjs.map → OrthopedicExamWidget-CWEH3ZY7.mjs.map} +1 -1
  109. package/dist/{PainScaleFlagsWidget-IFA3RCEL.cjs → PainScaleFlagsWidget-EYYQBSYL.cjs} +8 -8
  110. package/dist/{PainScaleFlagsWidget-IFA3RCEL.cjs.map → PainScaleFlagsWidget-EYYQBSYL.cjs.map} +1 -1
  111. package/dist/{PainScaleFlagsWidget-5KN7T4JK.mjs → PainScaleFlagsWidget-XC73ND7X.mjs} +4 -4
  112. package/dist/{PainScaleFlagsWidget-5KN7T4JK.mjs.map → PainScaleFlagsWidget-XC73ND7X.mjs.map} +1 -1
  113. package/dist/{PregnancyStatusWidget-U2BEJGBJ.mjs → PregnancyStatusWidget-U6Y3DCDB.mjs} +3 -3
  114. package/dist/{PregnancyStatusWidget-U2BEJGBJ.mjs.map → PregnancyStatusWidget-U6Y3DCDB.mjs.map} +1 -1
  115. package/dist/{PregnancyStatusWidget-QTTVFBOE.cjs → PregnancyStatusWidget-YZRYO2WA.cjs} +4 -4
  116. package/dist/{PregnancyStatusWidget-QTTVFBOE.cjs.map → PregnancyStatusWidget-YZRYO2WA.cjs.map} +1 -1
  117. package/dist/{ReferralWidget-GU3JYED2.mjs → ReferralWidget-FXJC56AF.mjs} +4 -4
  118. package/dist/{ReferralWidget-GU3JYED2.mjs.map → ReferralWidget-FXJC56AF.mjs.map} +1 -1
  119. package/dist/{ReferralWidget-27VGZCOQ.cjs → ReferralWidget-KD36EA74.cjs} +7 -7
  120. package/dist/{ReferralWidget-27VGZCOQ.cjs.map → ReferralWidget-KD36EA74.cjs.map} +1 -1
  121. package/dist/RichTextWidget-JG4Y7X66.mjs +11 -0
  122. package/dist/{RichTextWidget-2KLV65QP.cjs.map → RichTextWidget-JG4Y7X66.mjs.map} +1 -1
  123. package/dist/{RichTextWidget-2KLV65QP.cjs → RichTextWidget-KKC3P5Z3.cjs} +7 -7
  124. package/dist/{RichTextWidget-ZBX554ZJ.mjs.map → RichTextWidget-KKC3P5Z3.cjs.map} +1 -1
  125. package/dist/SmartTextarea-DSM5TP5N.cjs +19 -0
  126. package/dist/{SmartTextarea-LQDXFCYT.mjs.map → SmartTextarea-DSM5TP5N.cjs.map} +1 -1
  127. package/dist/SmartTextarea-HDRABZIN.mjs +10 -0
  128. package/dist/{SmartTextarea-WITNRNDU.cjs.map → SmartTextarea-HDRABZIN.mjs.map} +1 -1
  129. package/dist/{SuggestionTextareaWidget-UNL3FZRI.mjs → SuggestionTextareaWidget-IKL46SCV.mjs} +7 -7
  130. package/dist/{SuggestionTextareaWidget-UNL3FZRI.mjs.map → SuggestionTextareaWidget-IKL46SCV.mjs.map} +1 -1
  131. package/dist/{SuggestionTextareaWidget-FWRZ46MV.cjs → SuggestionTextareaWidget-KABKRNP3.cjs} +18 -18
  132. package/dist/{SuggestionTextareaWidget-FWRZ46MV.cjs.map → SuggestionTextareaWidget-KABKRNP3.cjs.map} +1 -1
  133. package/dist/{SurgicalRiskFlagsWidget-OJKCZIWJ.cjs → SurgicalRiskFlagsWidget-DO66VPQC.cjs} +6 -6
  134. package/dist/{SurgicalRiskFlagsWidget-OJKCZIWJ.cjs.map → SurgicalRiskFlagsWidget-DO66VPQC.cjs.map} +1 -1
  135. package/dist/{SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs → SurgicalRiskFlagsWidget-NPOHFMIZ.mjs} +4 -4
  136. package/dist/{SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs.map → SurgicalRiskFlagsWidget-NPOHFMIZ.mjs.map} +1 -1
  137. package/dist/{TreatmentPlanWidget-665HLKYV.mjs → TreatmentPlanWidget-7XYIVHQO.mjs} +4 -4
  138. package/dist/{TreatmentPlanWidget-665HLKYV.mjs.map → TreatmentPlanWidget-7XYIVHQO.mjs.map} +1 -1
  139. package/dist/{TreatmentPlanWidget-TATWSPLY.cjs → TreatmentPlanWidget-ELTSULQ4.cjs} +6 -6
  140. package/dist/{TreatmentPlanWidget-TATWSPLY.cjs.map → TreatmentPlanWidget-ELTSULQ4.cjs.map} +1 -1
  141. package/dist/{UrologyExaminationWidget-GRBL2SDG.mjs → UrologyExaminationWidget-OQLZPWVR.mjs} +4 -4
  142. package/dist/{UrologyExaminationWidget-GRBL2SDG.mjs.map → UrologyExaminationWidget-OQLZPWVR.mjs.map} +1 -1
  143. package/dist/{UrologyExaminationWidget-GQLMV4FB.cjs → UrologyExaminationWidget-OSNFGBI2.cjs} +12 -12
  144. package/dist/{UrologyExaminationWidget-GQLMV4FB.cjs.map → UrologyExaminationWidget-OSNFGBI2.cjs.map} +1 -1
  145. package/dist/{UrologyPathwayWidget-PEO5BVQX.mjs → UrologyPathwayWidget-KE2LAZTZ.mjs} +4 -4
  146. package/dist/{UrologyPathwayWidget-PEO5BVQX.mjs.map → UrologyPathwayWidget-KE2LAZTZ.mjs.map} +1 -1
  147. package/dist/{UrologyPathwayWidget-D6EWSOGW.cjs → UrologyPathwayWidget-YPYIX43Z.cjs} +7 -7
  148. package/dist/{UrologyPathwayWidget-D6EWSOGW.cjs.map → UrologyPathwayWidget-YPYIX43Z.cjs.map} +1 -1
  149. package/dist/{UrologySmartHistoryWidget-BDKRFBYN.mjs → UrologySmartHistoryWidget-ET6CU36D.mjs} +4 -4
  150. package/dist/{UrologySmartHistoryWidget-BDKRFBYN.mjs.map → UrologySmartHistoryWidget-ET6CU36D.mjs.map} +1 -1
  151. package/dist/{UrologySmartHistoryWidget-P3KTQE7L.cjs → UrologySmartHistoryWidget-SLBJALMO.cjs} +15 -15
  152. package/dist/{UrologySmartHistoryWidget-P3KTQE7L.cjs.map → UrologySmartHistoryWidget-SLBJALMO.cjs.map} +1 -1
  153. package/dist/{VitalsWidget-MS3OOZSW.cjs → VitalsWidget-MGUUJZP4.cjs} +5 -5
  154. package/dist/{VitalsWidget-MS3OOZSW.cjs.map → VitalsWidget-MGUUJZP4.cjs.map} +1 -1
  155. package/dist/{VitalsWidget-63HTXK2M.mjs → VitalsWidget-YI3IXQYN.mjs} +3 -3
  156. package/dist/{VitalsWidget-63HTXK2M.mjs.map → VitalsWidget-YI3IXQYN.mjs.map} +1 -1
  157. package/dist/{chunk-5RT3S67O.cjs → chunk-35I4CBEC.cjs} +6 -6
  158. package/dist/{chunk-5RT3S67O.cjs.map → chunk-35I4CBEC.cjs.map} +1 -1
  159. package/dist/{chunk-XDUVO3IZ.mjs → chunk-4422KT6O.mjs} +61 -6
  160. package/dist/chunk-4422KT6O.mjs.map +1 -0
  161. package/dist/{chunk-BBD3Y37O.cjs → chunk-4KTQ4NEI.cjs} +4 -4
  162. package/dist/{chunk-BBD3Y37O.cjs.map → chunk-4KTQ4NEI.cjs.map} +1 -1
  163. package/dist/{chunk-MBZRRYJB.mjs → chunk-7ZRK7ZWY.mjs} +4 -4
  164. package/dist/{chunk-MBZRRYJB.mjs.map → chunk-7ZRK7ZWY.mjs.map} +1 -1
  165. package/dist/{chunk-AIZ3XYEZ.cjs → chunk-A2A5EB5R.cjs} +60 -5
  166. package/dist/chunk-A2A5EB5R.cjs.map +1 -0
  167. package/dist/{chunk-T3UHPMFX.mjs → chunk-BKZXISZH.mjs} +3 -3
  168. package/dist/{chunk-T3UHPMFX.mjs.map → chunk-BKZXISZH.mjs.map} +1 -1
  169. package/dist/{chunk-G6Y4UJPN.mjs → chunk-CC54SKAA.mjs} +5 -5
  170. package/dist/{chunk-G6Y4UJPN.mjs.map → chunk-CC54SKAA.mjs.map} +1 -1
  171. package/dist/{chunk-Q66LXMRR.mjs → chunk-FAAMKLBY.mjs} +3 -3
  172. package/dist/{chunk-Q66LXMRR.mjs.map → chunk-FAAMKLBY.mjs.map} +1 -1
  173. package/dist/{chunk-TCQQUJCL.cjs → chunk-GQX2UGHH.cjs} +11 -11
  174. package/dist/{chunk-TCQQUJCL.cjs.map → chunk-GQX2UGHH.cjs.map} +1 -1
  175. package/dist/{chunk-2BGJZ44Q.mjs → chunk-HKEUAERY.mjs} +9 -4
  176. package/dist/{chunk-TB33A4PD.cjs.map → chunk-HKEUAERY.mjs.map} +1 -1
  177. package/dist/{chunk-T2IKWRV2.cjs → chunk-JFZ7XPDM.cjs} +9 -9
  178. package/dist/{chunk-T2IKWRV2.cjs.map → chunk-JFZ7XPDM.cjs.map} +1 -1
  179. package/dist/{chunk-TB33A4PD.cjs → chunk-JVIU4OBK.cjs} +9 -3
  180. package/dist/chunk-JVIU4OBK.cjs.map +1 -0
  181. package/dist/{chunk-XIUXYHGG.cjs → chunk-L2H5SOAV.cjs} +5 -5
  182. package/dist/{chunk-XIUXYHGG.cjs.map → chunk-L2H5SOAV.cjs.map} +1 -1
  183. package/dist/{chunk-XLCTFYFD.mjs → chunk-PNRSJPGV.mjs} +5 -5
  184. package/dist/{chunk-XLCTFYFD.mjs.map → chunk-PNRSJPGV.mjs.map} +1 -1
  185. package/dist/{chunk-X4AJCTON.cjs → chunk-PVKHVVFS.cjs} +4 -4
  186. package/dist/{chunk-X4AJCTON.cjs.map → chunk-PVKHVVFS.cjs.map} +1 -1
  187. package/dist/{chunk-Q3K646K4.mjs → chunk-QM6UMI2M.mjs} +3 -3
  188. package/dist/{chunk-Q3K646K4.mjs.map → chunk-QM6UMI2M.mjs.map} +1 -1
  189. package/dist/{chunk-MQHZ7HD2.mjs → chunk-QQXBHDUF.mjs} +3 -3
  190. package/dist/{chunk-MQHZ7HD2.mjs.map → chunk-QQXBHDUF.mjs.map} +1 -1
  191. package/dist/{chunk-UKSP3B3W.mjs → chunk-VAJR2VBK.mjs} +3 -3
  192. package/dist/{chunk-UKSP3B3W.mjs.map → chunk-VAJR2VBK.mjs.map} +1 -1
  193. package/dist/{chunk-RZK44P3C.cjs → chunk-WM43XTEK.cjs} +7 -7
  194. package/dist/{chunk-RZK44P3C.cjs.map → chunk-WM43XTEK.cjs.map} +1 -1
  195. package/dist/{chunk-7DISRJAB.cjs → chunk-XGO2HG3N.cjs} +4 -4
  196. package/dist/{chunk-7DISRJAB.cjs.map → chunk-XGO2HG3N.cjs.map} +1 -1
  197. package/dist/index.cjs +133 -129
  198. package/dist/index.d.cts +6 -3
  199. package/dist/index.d.ts +6 -3
  200. package/dist/index.mjs +51 -51
  201. package/dist/read-only-table.d.cts +1 -1
  202. package/dist/read-only-table.d.ts +1 -1
  203. package/dist/rich-text.cjs +5 -5
  204. package/dist/rich-text.mjs +4 -4
  205. package/dist/smart.cjs +5 -5
  206. package/dist/smart.d.cts +1 -1
  207. package/dist/smart.d.ts +1 -1
  208. package/dist/smart.mjs +3 -3
  209. package/dist/{types-BbOnd5IN.d.cts → types-27f9S27N.d.cts} +13 -1
  210. package/dist/{types-BbOnd5IN.d.ts → types-27f9S27N.d.ts} +13 -1
  211. package/package.json +1 -1
  212. package/dist/AddMedicationWidget-45T4XVEL.cjs +0 -32
  213. package/dist/AddMedicationWidget-45T4XVEL.cjs.map +0 -1
  214. package/dist/AddMedicationWidget-B5RXRYBK.mjs.map +0 -1
  215. package/dist/BpeChartWidget-HATASHAC.mjs +0 -7
  216. package/dist/BpeChartWidget-VZRH7M7L.cjs +0 -28
  217. package/dist/DentalChartWidget-LYLOFWZU.cjs +0 -21
  218. package/dist/RichTextWidget-ZBX554ZJ.mjs +0 -11
  219. package/dist/SmartTextarea-LQDXFCYT.mjs +0 -10
  220. package/dist/SmartTextarea-WITNRNDU.cjs +0 -19
  221. package/dist/chunk-2BGJZ44Q.mjs.map +0 -1
  222. package/dist/chunk-AIZ3XYEZ.cjs.map +0 -1
  223. package/dist/chunk-XDUVO3IZ.mjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { Textarea } from './chunk-4BAKQIPJ.mjs';
2
2
  import { getThemeConfig } from './chunk-Y7TIWH4I.mjs';
3
3
  import { FieldRequiredIndicator, fieldLabelClass, fieldControlClass, fieldErrorClass, fieldWrapperClass } from './chunk-WYVXXEZI.mjs';
4
- import { useForm } from './chunk-T3UHPMFX.mjs';
5
- import { useField } from './chunk-2BGJZ44Q.mjs';
4
+ import { useForm } from './chunk-BKZXISZH.mjs';
5
+ import { useField } from './chunk-HKEUAERY.mjs';
6
6
  import { Label } from './chunk-HEFZA2AH.mjs';
7
7
  import { cn } from './chunk-VPU66PI6.mjs';
8
8
  import 'react';
@@ -49,5 +49,5 @@ var HiddenVitalsWidget = ({ fieldId }) => {
49
49
  };
50
50
 
51
51
  export { HiddenVitalsWidget };
52
- //# sourceMappingURL=HiddenVitalsWidget-CIE3KERT.mjs.map
53
- //# sourceMappingURL=HiddenVitalsWidget-CIE3KERT.mjs.map
52
+ //# sourceMappingURL=HiddenVitalsWidget-QWJHUVRJ.mjs.map
53
+ //# sourceMappingURL=HiddenVitalsWidget-QWJHUVRJ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/HiddenVitalsWidget.tsx"],"names":[],"mappings":";;;;;;;;;;AAmBO,IAAM,kBAAA,GAAoD,CAAC,EAAE,OAAA,EAAQ,KAAM;AAChF,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,OAAO,QAAA,EAAU,OAAA,EAAQ,GAAI,QAAA,CAAS,OAAO,CAAA;AAC5F,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,OAAA,EAAQ;AAE1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,KAAU,WAAW,KAAA,CAAM,eAAA,CAAA;AAE/C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,MAAA,GAAS,QAAA,IAAY,QAAA,GAAW,QAAA,CAAS,MAAA,GAAS,MAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,KAAK,CAAA;AAEvD,EAAA,MAAM,YAAA,GAAe,EAAA,CAAG,KAAA,EAAO,gBAAA,IAAoB,aAAa,SAAS,CAAA;AACzE,EAAA,MAAM,aAAa,KAAA,EAAO,cAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,EAAO,cAAA,EAAgB,aAAa,gBAAgB,CAAA;AAE1E,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,CAAS,KAAA;AAAA,IAAM,GAAA;AAAA,oBAAC,GAAA,CAAC,0BAAuB,QAAA,EAAoB;AAAA,GAAA,EAC/D,CAAA;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,iBAAA,CAAkB,QAAA,EAAU,YAAY,CAAA;AAAA,MACnD,aAAA,EAAY,MAAA;AAAA,MAEX,QAAA,EAAA;AAAA,QAAA,KAAA,uBACE,KAAA,EAAA,EAAM,OAAA,EAAS,SAAS,SAAA,EAAW,eAAA,CAAgB,UAAU,UAAU,CAAA,EACrE,wBACH,CAAA,mBAEA,GAAA,CAAC,SAAM,OAAA,EAAS,OAAA,EAAS,WAAW,eAAA,CAAgB,QAAQ,GACzD,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,wBAEF,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,OAAO,KAAA,IAAS,EAAA;AAAA,YAChB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA;AAAA,YACA,SAAA,EAAW,iBAAA,CAAkB,QAAA,EAAU,UAAU,CAAA;AAAA,YAChD,GAAI,MAAA,IAAU,IAAA,IAAQ,EAAE,MAAA;AAAO;AAAA,SAClC;AAAA,QACC,SAAA,wBACE,GAAA,EAAA,EAAE,SAAA,EAAW,gBAAgB,QAAA,EAAU,sBAAsB,GAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAE5E;AAEJ","file":"HiddenVitalsWidget-CIE3KERT.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\n/**\n * Hidden Vitals: same as a textarea (styling, behavior, form state) but visually\n * hidden in the UI. State is still saved in the background.\n */\nexport const HiddenVitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const height = 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n\n const wrapperClass = cn(theme?.wrapperClassName ?? 'space-y-2', 'sr-only');\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n return (\n <div\n className={fieldWrapperClass(fieldDef, wrapperClass)}\n aria-hidden=\"true\"\n >\n {theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )}\n <Textarea\n id={fieldId}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={fieldControlClass(fieldDef, inputClass)}\n {...(height != null && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/HiddenVitalsWidget.tsx"],"names":[],"mappings":";;;;;;;;;;AAmBO,IAAM,kBAAA,GAAoD,CAAC,EAAE,OAAA,EAAQ,KAAM;AAChF,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,OAAO,QAAA,EAAU,OAAA,EAAQ,GAAI,QAAA,CAAS,OAAO,CAAA;AAC5F,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,OAAA,EAAQ;AAE1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,KAAU,WAAW,KAAA,CAAM,eAAA,CAAA;AAE/C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,MAAA,GAAS,QAAA,IAAY,QAAA,GAAW,QAAA,CAAS,MAAA,GAAS,MAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,KAAK,CAAA;AAEvD,EAAA,MAAM,YAAA,GAAe,EAAA,CAAG,KAAA,EAAO,gBAAA,IAAoB,aAAa,SAAS,CAAA;AACzE,EAAA,MAAM,aAAa,KAAA,EAAO,cAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,EAAA,CAAG,KAAA,EAAO,cAAA,EAAgB,aAAa,gBAAgB,CAAA;AAE1E,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,CAAS,KAAA;AAAA,IAAM,GAAA;AAAA,oBAAC,GAAA,CAAC,0BAAuB,QAAA,EAAoB;AAAA,GAAA,EAC/D,CAAA;AAGF,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,iBAAA,CAAkB,QAAA,EAAU,YAAY,CAAA;AAAA,MACnD,aAAA,EAAY,MAAA;AAAA,MAEX,QAAA,EAAA;AAAA,QAAA,KAAA,uBACE,KAAA,EAAA,EAAM,OAAA,EAAS,SAAS,SAAA,EAAW,eAAA,CAAgB,UAAU,UAAU,CAAA,EACrE,wBACH,CAAA,mBAEA,GAAA,CAAC,SAAM,OAAA,EAAS,OAAA,EAAS,WAAW,eAAA,CAAgB,QAAQ,GACzD,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,wBAEF,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,OAAA;AAAA,YACJ,OAAO,KAAA,IAAS,EAAA;AAAA,YAChB,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA;AAAA,YACA,SAAA,EAAW,iBAAA,CAAkB,QAAA,EAAU,UAAU,CAAA;AAAA,YAChD,GAAI,MAAA,IAAU,IAAA,IAAQ,EAAE,MAAA;AAAO;AAAA,SAClC;AAAA,QACC,SAAA,wBACE,GAAA,EAAA,EAAE,SAAA,EAAW,gBAAgB,QAAA,EAAU,sBAAsB,GAAI,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAE5E;AAEJ","file":"HiddenVitalsWidget-QWJHUVRJ.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\n/**\n * Hidden Vitals: same as a textarea (styling, behavior, form state) but visually\n * hidden in the UI. State is still saved in the background.\n */\nexport const HiddenVitalsWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const height = 'height' in fieldDef ? fieldDef.height : undefined;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n\n const wrapperClass = cn(theme?.wrapperClassName ?? 'space-y-2', 'sr-only');\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n return (\n <div\n className={fieldWrapperClass(fieldDef, wrapperClass)}\n aria-hidden=\"true\"\n >\n {theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )}\n <Textarea\n id={fieldId}\n value={value ?? ''}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={fieldControlClass(fieldDef, inputClass)}\n {...(height != null && { height })}\n />\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
4
- var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.cjs');
3
+ var chunkXGO2HG3N_cjs = require('./chunk-XGO2HG3N.cjs');
4
+ var chunkJVIU4OBK_cjs = require('./chunk-JVIU4OBK.cjs');
5
5
  var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
6
6
  require('react');
7
7
  var jsxRuntime = require('react/jsx-runtime');
@@ -150,8 +150,8 @@ function StageBadge({ stage }) {
150
150
  }
151
151
  var DEFAULT_TITLE = "Lens Assessment \u2014 LOCS III";
152
152
  var LensAssessmentWidget = ({ fieldId }) => {
153
- const { fieldDef, value, setValue, error, disabled, touched } = chunkTB33A4PD_cjs.useField(fieldId);
154
- const { state } = chunk7DISRJAB_cjs.useForm();
153
+ const { fieldDef, value, setValue, error, disabled, touched } = chunkJVIU4OBK_cjs.useField(fieldId);
154
+ const { state } = chunkXGO2HG3N_cjs.useForm();
155
155
  const showError = !!error && (touched || state.submitAttempted);
156
156
  if (!fieldDef || fieldDef.type !== "lens_assessment") {
157
157
  return null;
@@ -230,5 +230,5 @@ var LensAssessmentWidget = ({ fieldId }) => {
230
230
  };
231
231
 
232
232
  exports.LensAssessmentWidget = LensAssessmentWidget;
233
- //# sourceMappingURL=LensAssessmentWidget-SIKJVVAE.cjs.map
234
- //# sourceMappingURL=LensAssessmentWidget-SIKJVVAE.cjs.map
233
+ //# sourceMappingURL=LensAssessmentWidget-6DFZYT5F.cjs.map
234
+ //# sourceMappingURL=LensAssessmentWidget-6DFZYT5F.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/LensAssessmentWidget.tsx"],"names":["jsxs","jsx","cn","useField","useForm"],"mappings":"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","file":"LensAssessmentWidget-SIKJVVAE.cjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/LensAssessmentWidget.tsx"],"names":["jsxs","jsx","cn","useField","useForm"],"mappings":"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","file":"LensAssessmentWidget-6DFZYT5F.cjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { useForm } from './chunk-T3UHPMFX.mjs';
2
- import { useField } from './chunk-2BGJZ44Q.mjs';
1
+ import { useForm } from './chunk-BKZXISZH.mjs';
2
+ import { useField } from './chunk-HKEUAERY.mjs';
3
3
  import { cn } from './chunk-VPU66PI6.mjs';
4
4
  import 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -228,5 +228,5 @@ var LensAssessmentWidget = ({ fieldId }) => {
228
228
  };
229
229
 
230
230
  export { LensAssessmentWidget };
231
- //# sourceMappingURL=LensAssessmentWidget-B4OMHTOE.mjs.map
232
- //# sourceMappingURL=LensAssessmentWidget-B4OMHTOE.mjs.map
231
+ //# sourceMappingURL=LensAssessmentWidget-P2KHBHM2.mjs.map
232
+ //# sourceMappingURL=LensAssessmentWidget-P2KHBHM2.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/LensAssessmentWidget.tsx"],"names":[],"mappings":"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","file":"LensAssessmentWidget-B4OMHTOE.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/LensAssessmentWidget.tsx"],"names":[],"mappings":";;;;;;AAaA,IAAM,YAAA,GAA2B,EAAE,EAAA,EAAI,CAAA,EAAG,IAAI,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,GAAA,EAAK,CAAA,EAAE;AAE9D,IAAM,WAAA,GAKA;AAAA,EACJ,EAAE,KAAK,IAAA,EAAM,KAAA,EAAO,uBAAuB,GAAA,EAAK,CAAA,EAAG,MAAM,UAAA,EAAM;AAAA,EAC/D,EAAE,KAAK,IAAA,EAAM,KAAA,EAAO,kBAAkB,GAAA,EAAK,CAAA,EAAG,MAAM,UAAA,EAAM;AAAA,EAC1D,EAAE,KAAK,GAAA,EAAK,KAAA,EAAO,YAAY,GAAA,EAAK,CAAA,EAAG,MAAM,UAAA,EAAM;AAAA,EACnD,EAAE,KAAK,KAAA,EAAO,KAAA,EAAO,yBAAyB,GAAA,EAAK,CAAA,EAAG,MAAM,UAAA;AAC9D,CAAA;AAGA,IAAM,eAAA,GAAuC;AAAA,EAC3C,OAAA,EAAS,MAAA;AAAA,EACT,mBAAA,EAAqB,0DAAA;AAAA,EACrB,SAAA,EAAW,MAAA;AAAA,EACX,MAAA,EAAQ,QAAA;AAAA,EACR,UAAA,EAAY,QAAA;AAAA,EACZ,KAAA,EAAO,MAAA;AAAA,EACP,QAAA,EAAU;AACZ,CAAA;AAEA,SAAS,YAAY,GAAA,EAAsC;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,GAAA,KAAQ,YAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG,OAAO,MAAA;AAClE,EAAA,MAAM,CAAA,GAAI,GAAA;AACV,EAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAwB;AACjC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAA,CAAE,CAAC,CAAC,CAAA;AACrB,IAAA,OAAO,OAAO,QAAA,CAAS,CAAC,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAAA,EAC9C,CAAA;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAG,IAAI,CAAA,CAAE,IAAI,CAAA,EAAG,CAAA,EAAG,EAAE,GAAG,CAAA,EAAG,GAAA,EAAK,CAAA,CAAE,KAAK,CAAA,EAAE;AAC9D;AAEA,SAAS,WAAW,CAAA,EAAmB;AACrC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAC/C;AAEA,SAAS,WAAW,GAAA,EAAmC;AACrD,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,EAAA,EAAI,EAAE,GAAG,YAAA,EAAa;AAAA,IACtB,EAAA,EAAI,EAAE,GAAG,YAAA;AAAa,GACxB;AACA,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACzD,IAAA,MAAM,CAAA,GAAI,GAAA;AACV,IAAA,MAAM,UAAU,CAAA,CAAE,IAAA;AAClB,IAAA,IAAI,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AACrE,MAAA,MAAM,CAAA,GAAI,OAAA;AACV,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,CAAA,CAAE,EAAE,CAAA;AAC3B,MAAA,MAAM,EAAA,GAAK,WAAA,CAAY,CAAA,CAAE,EAAE,CAAA;AAC3B,MAAA,IAAI,EAAA;AACF,QAAA,IAAA,CAAK,EAAA,GAAK;AAAA,UACR,EAAA,EAAI,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAAA,UACpB,EAAA,EAAI,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAAA,UACpB,CAAA,EAAG,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA;AAAA,UAClB,GAAA,EAAK,UAAA,CAAW,EAAA,CAAG,GAAG;AAAA,SACxB;AACF,MAAA,IAAI,EAAA;AACF,QAAA,IAAA,CAAK,EAAA,GAAK;AAAA,UACR,EAAA,EAAI,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAAA,UACpB,EAAA,EAAI,UAAA,CAAW,EAAA,CAAG,EAAE,CAAA;AAAA,UACpB,CAAA,EAAG,UAAA,CAAW,EAAA,CAAG,CAAC,CAAA;AAAA,UAClB,GAAA,EAAK,UAAA,CAAW,EAAA,CAAG,GAAG;AAAA,SACxB;AAAA,IACJ;AACA,IAAA,OAAO;AAAA,MACL,OAAO,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,GAAQ,EAAA;AAAA,MAC/C,eAAe,OAAO,CAAA,CAAE,aAAA,KAAkB,QAAA,GAAW,EAAE,aAAA,GAAgB,MAAA;AAAA,MACvE;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,EAAE,KAAA,EAAO,EAAA,EAAI,aAAA,EAAe,QAAW,IAAA,EAAK;AACrD;AAEA,SAAS,aAAA,CAAc,KAAc,IAAA,EAAwD;AAC3F,EAAA,MAAM,CAAA,GAAI,KAAK,GAAG,CAAA;AAClB,EAAA,MAAM,QAAQ,CAAA,CAAE,EAAA,GAAK,EAAE,EAAA,GAAK,CAAA,CAAE,IAAI,CAAA,CAAE,GAAA;AACpC,EAAA,IAAI,KAAA,KAAU,GAAG,OAAO,QAAA;AACxB,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,OAAA;AACvB,EAAA,IAAI,KAAA,IAAS,GAAG,OAAO,UAAA;AACvB,EAAA,IAAI,KAAA,IAAS,IAAI,OAAO,UAAA;AACxB,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,OAAA,CAAQ;AAAA,EACf,KAAA;AAAA,EACA,GAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAMG;AACD,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,6CAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,QAAA;AAAA,YACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,YAC9C,SAAA,EAAU,sHAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wBACA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,GAAA,EAAK,CAAA;AAAA,YACL,GAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA,EAAY,SAAA;AAAA,YACZ,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAC,CAAC,CAAA;AAAA,YACjF,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,QAAA;AAAA,YACA,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,IAAI,GAAA,EAAK,KAAA,GAAQ,CAAC,CAAC,CAAA;AAAA,YAChD,SAAA,EAAU,sHAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,UAAA,CAAW,EAAE,KAAA,EAAM,EAAsB;AAChD,EAAA,MAAM,GAAA,GAA8B;AAAA,IAClC,KAAA,EAAO,2CAAA;AAAA,IACP,QAAA,EAAU,yCAAA;AAAA,IACV,QAAA,EAAU,0CAAA;AAAA,IACV,WAAA,EAAa,2CAAA;AAAA,IACb,QAAA,EAAK;AAAA,GACP;AACA,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,gEAAA;AAAA,QACA,GAAA,CAAI,KAAK,CAAA,IAAK;AAAA,OAChB;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAEA,IAAM,aAAA,GAAgB,iCAAA;AAKf,IAAM,oBAAA,GAAsD,CAAC,EAAE,OAAA,EAAQ,KAAM;AAClF,EAAA,MAAM,EAAE,UAAU,KAAA,EAAO,QAAA,EAAU,OAAO,QAAA,EAAU,OAAA,EAAQ,GAAI,QAAA,CAAS,OAAO,CAAA;AAChF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,OAAA,EAAQ;AAC1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,KAAU,WAAW,KAAA,CAAM,eAAA,CAAA;AAE/C,EAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,KAAS,iBAAA,EAAmB;AACpD,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,QAAA;AACZ,EAAA,MAAM,CAAA,GAAI,WAAW,KAAK,CAAA;AAC1B,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,IAAQ,EAAE,EAAA,EAAI,EAAE,GAAG,YAAA,EAAa,EAAG,EAAA,EAAI,EAAE,GAAG,cAAa,EAAE;AAC1E,EAAA,MAAM,KAAA,GACH,IAAI,IAAA,EAAM,SAAA,KACV,IAAI,KAAA,EAAO,IAAA,EAAK,GAAI,GAAA,CAAI,KAAA,GAAQ,aAAA,CAAA;AAEnC,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAwC;AAC1D,IAAA,QAAA,CAAS,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAO,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,CAAA,CAAE,IAAA,IAAQ,IAAA,EAAM,CAAA;AAAA,EACjE,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAc,GAAA,EAAuB,CAAA,KAAc;AAClE,IAAA,MAAM,IAAA,GAAO,WAAW,CAAC,CAAA;AACzB,IAAA,UAAA,CAAW;AAAA,MACT,IAAA,EAAM;AAAA,QACJ,GAAG,IAAA;AAAA,QACH,CAAC,GAAG,GAAG,EAAE,GAAG,IAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,GAAG,IAAA;AAAK;AACrC,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,mBAAmB,OAAO,CAAA,CAAA;AAAA,MAC9B,SAAA,EAAU,sGAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4CAAA,EAA8C,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAElE,IAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,eAAA,EACV,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAU,aAAA,EAAW,IAAA,EAAC,CAAA;AAAA,0BACrC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA6D,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BACrF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4DAAA,EAA6D,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,UACnF,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,qBAChB,IAAA,CAAC,SAAgB,KAAA,EAAO,EAAE,OAAA,EAAS,UAAA,EAAW,EAC5C,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iBAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,CAAA,CAAE,KAAA,EAAM,CAAA;AAAA,8BACtC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,YAAE,IAAA,EAAK;AAAA,aAAA,EACjD,CAAA;AAAA,4BACA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA,CAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,gBACpB,KAAK,CAAA,CAAE,GAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,UAAA,CAAA;AAAA,gBACrB,UAAU,CAAC,CAAA,KAAM,QAAQ,IAAA,EAAM,CAAA,CAAE,KAAK,CAAC;AAAA;AAAA,aACzC;AAAA,4BACA,GAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA,CAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,gBACpB,KAAK,CAAA,CAAE,GAAA;AAAA,gBACP,QAAA;AAAA,gBACA,SAAA,EAAW,CAAA,EAAG,CAAA,CAAE,KAAK,CAAA,SAAA,CAAA;AAAA,gBACrB,UAAU,CAAC,CAAA,KAAM,QAAQ,IAAA,EAAM,CAAA,CAAE,KAAK,CAAC;AAAA;AAAA;AACzC,WAAA,EAAA,EAlBQ,CAAA,CAAE,GAmBZ,CACD;AAAA,SAAA,EACH,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,UAAQ,GAAA;AAAA,0BAC9D,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,gCAChD,UAAA,EAAA,EAAW,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,IAAI,CAAA,EAAG;AAAA,WAAA,EACnD,CAAA;AAAA,0BACA,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,gCAChD,UAAA,EAAA,EAAW,KAAA,EAAO,aAAA,CAAc,IAAA,EAAM,IAAI,CAAA,EAAG;AAAA,WAAA,EACnD;AAAA,SAAA,EACF,CAAA;AAAA,QAEC,IAAI,WAAA,oBACH,GAAA,CAAC,OAAE,SAAA,EAAU,oCAAA,EAAsC,cAAI,WAAA,EAAY,CAAA;AAAA,QAGpE,SAAA,oBAAa,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAA6B,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA;AAAA,GAChE;AAEJ","file":"LensAssessmentWidget-P2KHBHM2.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { cn } from '../../core/utils';\nimport type {\n LensAssessmentFieldDef,\n LensAssessmentValue,\n LocsGrades,\n} from '../../core/types';\n\ntype LocsEye = 'OD' | 'OS';\ntype LocsComponentKey = keyof LocsGrades;\n\nconst EMPTY_GRADES: LocsGrades = { NO: 0, NC: 0, C: 0, PSC: 0 };\n\nconst LOCS_FIELDS: {\n key: LocsComponentKey;\n label: string;\n max: number;\n hint: string;\n}[] = [\n { key: 'NO', label: 'Nuclear Opalescence', max: 4, hint: '0–4' },\n { key: 'NC', label: 'Nuclear Colour', max: 4, hint: '0–4' },\n { key: 'C', label: 'Cortical', max: 4, hint: '0–4' },\n { key: 'PSC', label: 'Posterior Subcapsular', max: 4, hint: '0–4' },\n];\n\n/** Inline grid so layout survives Tailwind content scans that omit library bundles. */\nconst LOCS_GRID_STYLE: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr) minmax(5.5rem, auto) minmax(5.5rem, auto)',\n columnGap: '1rem',\n rowGap: '0.5rem',\n alignItems: 'center',\n width: '100%',\n minWidth: 0,\n};\n\nfunction parseGrades(raw: unknown): LocsGrades | undefined {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return undefined;\n const r = raw as Record<string, unknown>;\n const n = (k: LocsComponentKey) => {\n const v = Number(r[k]);\n return Number.isFinite(v) ? Math.trunc(v) : 0;\n };\n return { NO: n('NO'), NC: n('NC'), C: n('C'), PSC: n('PSC') };\n}\n\nfunction clampGrade(v: number): number {\n return Math.max(0, Math.min(4, Math.trunc(v)));\n}\n\nfunction parseValue(raw: unknown): LensAssessmentValue {\n const locs = {\n OD: { ...EMPTY_GRADES },\n OS: { ...EMPTY_GRADES },\n };\n if (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n const o = raw as Record<string, unknown>;\n const locsRaw = o.locs;\n if (locsRaw && typeof locsRaw === 'object' && !Array.isArray(locsRaw)) {\n const L = locsRaw as Record<string, unknown>;\n const od = parseGrades(L.OD);\n const os = parseGrades(L.OS);\n if (od)\n locs.OD = {\n NO: clampGrade(od.NO),\n NC: clampGrade(od.NC),\n C: clampGrade(od.C),\n PSC: clampGrade(od.PSC),\n };\n if (os)\n locs.OS = {\n NO: clampGrade(os.NO),\n NC: clampGrade(os.NC),\n C: clampGrade(os.C),\n PSC: clampGrade(os.PSC),\n };\n }\n return {\n notes: typeof o.notes === 'string' ? o.notes : '',\n assessmentKey: typeof o.assessmentKey === 'string' ? o.assessmentKey : undefined,\n locs,\n };\n }\n return { notes: '', assessmentKey: undefined, locs };\n}\n\nfunction cataractStage(eye: LocsEye, locs: NonNullable<LensAssessmentValue['locs']>): string {\n const g = locs[eye];\n const total = g.NO + g.NC + g.C + g.PSC;\n if (total === 0) return '—';\n if (total <= 4) return 'Early';\n if (total <= 8) return 'Moderate';\n if (total <= 12) return 'Advanced';\n return 'Hypermature';\n}\n\nfunction Stepper({\n value,\n max,\n disabled,\n ariaLabel,\n onChange,\n}: {\n value: number;\n max: number;\n disabled?: boolean;\n ariaLabel: string;\n onChange: (v: number) => void;\n}) {\n return (\n <div\n className=\"flex items-center gap-1 justify-self-center\"\n role=\"group\"\n aria-label={ariaLabel}\n >\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.max(0, value - 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n -\n </button>\n <input\n type=\"number\"\n min={0}\n max={max}\n disabled={disabled}\n value={value}\n aria-label={ariaLabel}\n onChange={(e) => onChange(Math.max(0, Math.min(max, Number(e.target.value) || 0)))}\n className=\"h-6 w-10 shrink-0 rounded border border-input bg-background px-1 py-0 text-center text-xs disabled:opacity-50\"\n />\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => onChange(Math.min(max, value + 1))}\n className=\"h-6 w-6 shrink-0 rounded border border-input text-xs hover:bg-muted disabled:pointer-events-none disabled:opacity-50\"\n >\n +\n </button>\n </div>\n );\n}\n\nfunction StageBadge({ stage }: { stage: string }) {\n const cls: Record<string, string> = {\n Early: 'border border-emerald-200 text-foreground',\n Moderate: 'border border-amber-200 text-foreground',\n Advanced: 'border border-orange-300 text-foreground',\n Hypermature: 'border border-destructive text-foreground',\n '—': 'border border-border text-muted-foreground',\n };\n return (\n <span\n className={cn(\n 'rounded-full bg-background px-2 py-0.5 text-[11px] font-medium',\n cls[stage] ?? 'border border-border text-muted-foreground',\n )}\n >\n {stage}\n </span>\n );\n}\n\nconst DEFAULT_TITLE = 'Lens Assessment — LOCS III';\n\n/**\n * LOCS III lens assessment: OD/OS column steppers and derived cataract-stage badges.\n */\nexport const LensAssessmentWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef || fieldDef.type !== 'lens_assessment') {\n return null;\n }\n\n const def = fieldDef as LensAssessmentFieldDef;\n const v = parseValue(value);\n const locs = v.locs ?? { OD: { ...EMPTY_GRADES }, OS: { ...EMPTY_GRADES } };\n const title =\n (def.meta?.cardTitle as string | undefined) ||\n (def.label?.trim() ? def.label : DEFAULT_TITLE);\n\n const setPartial = (patch: Partial<LensAssessmentValue>) => {\n setValue({ ...v, ...patch, locs: patch.locs ?? v.locs ?? locs });\n };\n\n const setLocs = (eye: LocsEye, key: LocsComponentKey, n: number) => {\n const next = clampGrade(n);\n setPartial({\n locs: {\n ...locs,\n [eye]: { ...locs[eye], [key]: next },\n },\n });\n };\n\n return (\n <div\n id={`lens-assessment-${fieldId}`}\n className=\"w-full min-w-0 max-w-full rounded-lg border border-border bg-card p-4 text-card-foreground shadow-sm\"\n >\n <h3 className=\"mb-3 text-sm font-semibold text-foreground\">{title}</h3>\n\n <div style={LOCS_GRID_STYLE}>\n <div className=\"min-w-0\" aria-hidden />\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Right Eye</div>\n <div className=\"w-24 justify-self-center text-center text-xs font-semibold\">Left Eye</div>\n {LOCS_FIELDS.map((f) => (\n <div key={f.key} style={{ display: 'contents' }}>\n <div className=\"min-w-0 text-xs\">\n <div className=\"font-medium\">{f.label}</div>\n <div className=\"text-muted-foreground\">{f.hint}</div>\n </div>\n <Stepper\n value={locs.OD[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} right eye`}\n onChange={(n) => setLocs('OD', f.key, n)}\n />\n <Stepper\n value={locs.OS[f.key]}\n max={f.max}\n disabled={disabled}\n ariaLabel={`${f.label} left eye`}\n onChange={(n) => setLocs('OS', f.key, n)}\n />\n </div>\n ))}\n </div>\n\n <div className=\"mt-3 border-t border-border pt-3 text-xs\">\n <span className=\"text-muted-foreground\">Cataract Stage</span>{' '}\n <span className=\"ml-1 inline-flex items-center gap-1\">\n OD <StageBadge stage={cataractStage('OD', locs)} />\n </span>\n <span className=\"ml-2 inline-flex items-center gap-1\">\n OS <StageBadge stage={cataractStage('OS', locs)} />\n </span>\n </div>\n\n {def.description && (\n <p className=\"mt-2 text-xs text-muted-foreground\">{def.description}</p>\n )}\n\n {showError && <p className=\"mt-2 text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n"]}
@@ -2,18 +2,18 @@
2
2
 
3
3
  var chunkP62377LB_cjs = require('./chunk-P62377LB.cjs');
4
4
  var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
5
- var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
5
+ var chunkXGO2HG3N_cjs = require('./chunk-XGO2HG3N.cjs');
6
6
  var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
7
- var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.cjs');
7
+ var chunkJVIU4OBK_cjs = require('./chunk-JVIU4OBK.cjs');
8
8
  var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
9
9
  var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
10
10
  var react = require('react');
11
11
  var jsxRuntime = require('react/jsx-runtime');
12
12
 
13
13
  var MarMedicationOrdersWidget = ({ fieldId }) => {
14
- const { fieldDef, value, setTouched, error, disabled, touched } = chunkTB33A4PD_cjs.useField(fieldId);
15
- const { state } = chunk7DISRJAB_cjs.useForm();
16
- const handlers = chunkTB33A4PD_cjs.useFieldHandlers(fieldId);
14
+ const { fieldDef, value, setTouched, error, disabled, touched } = chunkJVIU4OBK_cjs.useField(fieldId);
15
+ const { state } = chunkXGO2HG3N_cjs.useForm();
16
+ const handlers = chunkJVIU4OBK_cjs.useFieldHandlers(fieldId);
17
17
  const showError = !!error && (touched || state.submitAttempted);
18
18
  const onOpen = react.useCallback(async () => {
19
19
  await handlers.onOpenMedicationOrders?.();
@@ -72,5 +72,5 @@ var MarMedicationOrdersWidget = ({ fieldId }) => {
72
72
  };
73
73
 
74
74
  exports.MarMedicationOrdersWidget = MarMedicationOrdersWidget;
75
- //# sourceMappingURL=MarMedicationOrdersWidget-767F65K6.cjs.map
76
- //# sourceMappingURL=MarMedicationOrdersWidget-767F65K6.cjs.map
75
+ //# sourceMappingURL=MarMedicationOrdersWidget-QSMTNWR3.cjs.map
76
+ //# sourceMappingURL=MarMedicationOrdersWidget-QSMTNWR3.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/MarMedicationOrdersWidget.tsx"],"names":["useField","useForm","useFieldHandlers","useCallback","getThemeConfig","isLabelVisible","jsxs","Fragment","jsx","FieldRequiredIndicator","Label","fieldLabelClass","fieldWrapperClass","fieldDescriptionClass","fieldControlClass","cn","Button","fieldErrorClass"],"mappings":"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","file":"MarMedicationOrdersWidget-767F65K6.cjs","sourcesContent":["import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={fieldWrapperClass(fieldDef, wrapperClass)}>\n {labelEl}\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground',\n ),\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/MarMedicationOrdersWidget.tsx"],"names":["useField","useForm","useFieldHandlers","useCallback","getThemeConfig","isLabelVisible","jsxs","Fragment","jsx","FieldRequiredIndicator","Label","fieldLabelClass","fieldWrapperClass","fieldDescriptionClass","fieldControlClass","cn","Button","fieldErrorClass"],"mappings":"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","file":"MarMedicationOrdersWidget-QSMTNWR3.cjs","sourcesContent":["import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={fieldWrapperClass(fieldDef, wrapperClass)}>\n {labelEl}\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground',\n ),\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  import { getThemeConfig } from './chunk-Y7TIWH4I.mjs';
2
2
  import { isLabelVisible, FieldRequiredIndicator, fieldLabelClass, fieldDescriptionClass, fieldControlClass, fieldErrorClass, fieldWrapperClass } from './chunk-WYVXXEZI.mjs';
3
- import { useForm } from './chunk-T3UHPMFX.mjs';
3
+ import { useForm } from './chunk-BKZXISZH.mjs';
4
4
  import { Button } from './chunk-GXXWMHAA.mjs';
5
- import { useField, useFieldHandlers } from './chunk-2BGJZ44Q.mjs';
5
+ import { useField, useFieldHandlers } from './chunk-HKEUAERY.mjs';
6
6
  import { Label } from './chunk-HEFZA2AH.mjs';
7
7
  import { cn } from './chunk-VPU66PI6.mjs';
8
8
  import { useCallback } from 'react';
@@ -70,5 +70,5 @@ var MarMedicationOrdersWidget = ({ fieldId }) => {
70
70
  };
71
71
 
72
72
  export { MarMedicationOrdersWidget };
73
- //# sourceMappingURL=MarMedicationOrdersWidget-LG3WOXN7.mjs.map
74
- //# sourceMappingURL=MarMedicationOrdersWidget-LG3WOXN7.mjs.map
73
+ //# sourceMappingURL=MarMedicationOrdersWidget-XW2YFTTH.mjs.map
74
+ //# sourceMappingURL=MarMedicationOrdersWidget-XW2YFTTH.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/MarMedicationOrdersWidget.tsx"],"names":[],"mappings":"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","file":"MarMedicationOrdersWidget-LG3WOXN7.mjs","sourcesContent":["import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={fieldWrapperClass(fieldDef, wrapperClass)}>\n {labelEl}\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground',\n ),\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/MarMedicationOrdersWidget.tsx"],"names":[],"mappings":"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","file":"MarMedicationOrdersWidget-XW2YFTTH.mjs","sourcesContent":["import React, { useCallback } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Label } from '../shadcn/label';\nimport { Button } from '../shadcn/button';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { TextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const MarMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const onOpen = useCallback(async () => {\n await handlers.onOpenMedicationOrders?.();\n setTouched();\n }, [handlers, setTouched]);\n\n if (!fieldDef || fieldDef.type !== 'textarea') return null;\n\n const textDef = fieldDef as TextFieldDef;\n const height = textDef.height;\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n )\n ) : null;\n\n const text = typeof value === 'string' ? value : value == null ? '' : String(value);\n const hasHandler = typeof handlers.onOpenMedicationOrders === 'function';\n\n return (\n <div className={fieldWrapperClass(fieldDef, wrapperClass)}>\n {labelEl}\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between sm:gap-3\">\n <div\n id={fieldId}\n className={fieldControlClass(\n fieldDef,\n cn(\n 'min-h-[80px] flex-1 rounded-md border border-input bg-background px-3 py-2 text-sm whitespace-pre-wrap',\n showError && 'border-red-500',\n !text && 'text-muted-foreground',\n ),\n )}\n style={height != null ? { minHeight: height } : undefined}\n aria-readonly=\"true\"\n >\n {text || fieldDef.placeholder || 'No medication orders added.'}\n </div>\n <Button\n type=\"button\"\n variant=\"default\"\n disabled={disabled || !hasHandler}\n onClick={onOpen}\n className=\"shrink-0 sm:mt-0\"\n >\n Add medication orders\n </Button>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -5,9 +5,9 @@ var chunkPZBJYPWW_cjs = require('./chunk-PZBJYPWW.cjs');
5
5
  var chunkPHADAQSH_cjs = require('./chunk-PHADAQSH.cjs');
6
6
  var chunkP62377LB_cjs = require('./chunk-P62377LB.cjs');
7
7
  var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
8
- var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
8
+ var chunkXGO2HG3N_cjs = require('./chunk-XGO2HG3N.cjs');
9
9
  var chunk4KSZUIJE_cjs = require('./chunk-4KSZUIJE.cjs');
10
- var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.cjs');
10
+ var chunkJVIU4OBK_cjs = require('./chunk-JVIU4OBK.cjs');
11
11
  var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
12
12
  var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
13
13
  var react = require('react');
@@ -48,24 +48,24 @@ var UTERUS_OPTIONS = [
48
48
  { value: "Enlarged", label: "Enlarged" }
49
49
  ];
50
50
  var OBGExaminationWidget = ({ fieldId }) => {
51
- const { fieldDef, value, setValue, setTouched, error, touched, disabled } = chunkTB33A4PD_cjs.useField(fieldId);
52
- const clinicalField = chunkTB33A4PD_cjs.useField(CLINICAL_EXAMINATION_FIELD);
53
- const { state } = chunk7DISRJAB_cjs.useForm();
51
+ const { fieldDef, value, setValue, setTouched, error, touched, disabled } = chunkJVIU4OBK_cjs.useField(fieldId);
52
+ const clinicalField = chunkJVIU4OBK_cjs.useField(CLINICAL_EXAMINATION_FIELD);
53
+ const { state } = chunkXGO2HG3N_cjs.useForm();
54
54
  const showError = !!error && (touched || state.submitAttempted);
55
55
  const safe = react.useMemo(() => chunkQKJ7BQSR_cjs.normalizeObgExamination(value), [value]);
56
56
  const lastAutoProseRef = react.useRef(null);
57
57
  react.useEffect(() => {
58
58
  if (lastAutoProseRef.current !== null) return;
59
59
  const cur = typeof clinicalField.value === "string" ? clinicalField.value : "";
60
- const { prose } = chunkTB33A4PD_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
60
+ const { prose } = chunkJVIU4OBK_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
61
61
  if (prose === "") lastAutoProseRef.current = "";
62
62
  }, []);
63
63
  const writeClinical = (next) => {
64
64
  const cur = typeof clinicalField.value === "string" ? clinicalField.value : "";
65
- const { prose: curProse } = chunkTB33A4PD_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
65
+ const { prose: curProse } = chunkJVIU4OBK_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
66
66
  const lastAutoProse = lastAutoProseRef.current;
67
67
  const proseInput = curProse === "" || curProse === lastAutoProse ? "" : curProse;
68
- const composed = chunkTB33A4PD_cjs.composeProseAndChips(proseInput, chunkQKJ7BQSR_cjs.obgExaminationChipLabels(next));
68
+ const composed = chunkJVIU4OBK_cjs.composeProseAndChips(proseInput, chunkQKJ7BQSR_cjs.obgExaminationChipLabels(next));
69
69
  if (composed !== cur) clinicalField.setValue(composed);
70
70
  if (proseInput === "" || proseInput === lastAutoProse) {
71
71
  lastAutoProseRef.current = "";
@@ -86,7 +86,7 @@ var OBGExaminationWidget = ({ fieldId }) => {
86
86
  clinicalField.setValue(raw);
87
87
  clinicalField.setTouched();
88
88
  if (disabled) return;
89
- const { prose, chips } = chunkTB33A4PD_cjs.parseProseAndChipTokens(raw, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
89
+ const { prose, chips } = chunkJVIU4OBK_cjs.parseProseAndChipTokens(raw, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
90
90
  const rebuilt = chunkQKJ7BQSR_cjs.obgExaminationFromChipLabels(chips, raw);
91
91
  setValue(rebuilt);
92
92
  setTouched();
@@ -211,5 +211,5 @@ var OBGExaminationWidget = ({ fieldId }) => {
211
211
  };
212
212
 
213
213
  exports.OBGExaminationWidget = OBGExaminationWidget;
214
- //# sourceMappingURL=OBGExaminationWidget-MRTGWLXJ.cjs.map
215
- //# sourceMappingURL=OBGExaminationWidget-MRTGWLXJ.cjs.map
214
+ //# sourceMappingURL=OBGExaminationWidget-5THYKJI5.cjs.map
215
+ //# sourceMappingURL=OBGExaminationWidget-5THYKJI5.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/OBGExaminationWidget.tsx"],"names":["useField","useForm","useMemo","normalizeObgExamination","useRef","useEffect","parseProseAndChipTokens","OBG_EXAM_ALLOWED_CHIP_LABELS","composeProseAndChips","obgExaminationChipLabels","obgExaminationFromChipLabels","getThemeConfig","jsxs","Fragment","jsx","FieldRequiredIndicator","Label","cn","Checkbox","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Textarea"],"mappings":"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","file":"OBGExaminationWidget-MRTGWLXJ.cjs","sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport {\n normalizeObgExamination,\n obgExaminationChipLabels,\n obgExaminationFromChipLabels,\n OBG_EXAM_ALLOWED_CHIP_LABELS,\n type ObgExaminationValue,\n type ObgUterusSize,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst CLINICAL_EXAMINATION_FIELD = 'clinical_examination';\n\ntype GeneralKey = keyof ObgExaminationValue['general'];\ntype AbdomenKey = keyof ObgExaminationValue['abdomen'];\ntype BreastKey = keyof ObgExaminationValue['breast'];\ntype PelvicKey = keyof ObgExaminationValue['pelvic'];\n\nconst GENERAL_ROWS: { key: GeneralKey; label: string }[] = [\n { key: 'pallor', label: 'Pallor' },\n { key: 'oedema', label: 'Oedema' },\n { key: 'thyroid', label: 'Thyroid' },\n { key: 'hirsutism', label: 'Hirsutism' },\n { key: 'acanthosis', label: 'Acanthosis' },\n];\n\nconst ABDOMEN_ROWS: { key: AbdomenKey; label: string }[] = [\n { key: 'surgicalScars', label: 'Surgical scars' },\n { key: 'massTenderness', label: 'Mass / tenderness' },\n];\n\nconst BREAST_ROWS: { key: BreastKey; label: string }[] = [\n { key: 'lump', label: 'Lump' },\n { key: 'nippleDischarge', label: 'Nipple discharge' },\n { key: 'skinChanges', label: 'Skin changes' },\n { key: 'axillaryNodes', label: 'Axillary nodes' },\n];\n\nconst PELVIC_ROWS: { key: PelvicKey; label: string }[] = [\n { key: 'speculumDone', label: 'Speculum done' },\n { key: 'discharge', label: 'Discharge' },\n { key: 'cervicalErosion', label: 'Cervical erosion' },\n { key: 'cervicalGrowth', label: 'Cervical growth' },\n { key: 'activeBleeding', label: 'Active bleeding' },\n { key: 'bimanualDone', label: 'Bimanual done' },\n { key: 'adnexalMass', label: 'Adnexal mass' },\n { key: 'cmt', label: 'Cervical motion tenderness' },\n];\n\nconst UTERUS_OPTIONS: { value: ObgUterusSize; label: string }[] = [\n { value: '', label: '—' },\n { value: 'Normal', label: 'Normal' },\n { value: 'Bulky', label: 'Bulky' },\n { value: 'Enlarged', label: 'Enlarged' },\n];\n\nexport const OBGExaminationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const clinicalField = useField(CLINICAL_EXAMINATION_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeObgExamination(value), [value]);\n\n // Tracks user-owned prose (anything above the chip line). When the prose\n // matches what we last auto-wrote (or is empty), structured updates may\n // refresh it. Once the user types, prose is preserved and only the chip\n // line is kept in sync.\n const lastAutoProseRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (lastAutoProseRef.current !== null) return;\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n if (prose === '') lastAutoProseRef.current = '';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const writeClinical = (next: ObgExaminationValue) => {\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const lastAutoProse = lastAutoProseRef.current;\n const proseInput =\n curProse === '' || curProse === lastAutoProse ? '' : curProse;\n const composed = composeProseAndChips(proseInput, obgExaminationChipLabels(next));\n if (composed !== cur) clinicalField.setValue(composed);\n if (proseInput === '' || proseInput === lastAutoProse) {\n lastAutoProseRef.current = '';\n }\n return composed;\n };\n\n const bump = (next: ObgExaminationValue) => {\n if (disabled) {\n setValue(next);\n setTouched();\n return;\n }\n const composed = writeClinical(next);\n setValue({ ...next, examinationNotes: composed });\n setTouched();\n };\n\n const onClinicalChange = (raw: string) => {\n clinicalField.setValue(raw);\n clinicalField.setTouched();\n if (disabled) return;\n const { prose, chips } = parseProseAndChipTokens(raw, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const rebuilt = obgExaminationFromChipLabels(chips, raw);\n setValue(rebuilt);\n setTouched();\n lastAutoProseRef.current = prose === '' ? '' : '\\u0000USER\\u0000';\n };\n\n const toggleGeneral = (key: GeneralKey) =>\n bump({ ...safe, general: { ...safe.general, [key]: !safe.general[key] } });\n const toggleAbdomen = (key: AbdomenKey) =>\n bump({ ...safe, abdomen: { ...safe.abdomen, [key]: !safe.abdomen[key] } });\n const toggleBreast = (key: BreastKey) =>\n bump({ ...safe, breast: { ...safe.breast, [key]: !safe.breast[key] } });\n const togglePelvic = (key: PelvicKey) => {\n const nextPelvic = { ...safe.pelvic, [key]: !safe.pelvic[key] };\n const nextUterus: ObgUterusSize = !nextPelvic.bimanualDone ? '' : safe.uterusSize;\n bump({ ...safe, pelvic: nextPelvic, uterusSize: nextUterus });\n };\n const setUterusSize = (val: ObgUterusSize) => bump({ ...safe, uterusSize: val });\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n {fieldDef.description ? (\n <p className=\"px-3 pt-2 text-[11px] text-muted-foreground\">{fieldDef.description}</p>\n ) : null}\n\n <div className={bodyClass}>\n {showError ? <p className=\"text-xs text-red-600\">{error}</p> : null}\n\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-2 xl:grid-cols-4\">\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">General</p>\n {GENERAL_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.general[r.key]}\n onCheckedChange={() => toggleGeneral(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Abdomen</p>\n {ABDOMEN_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.abdomen[r.key]}\n onCheckedChange={() => toggleAbdomen(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n <p className=\"text-[10px] text-muted-foreground\">\n Pregnancy → fundal ht / FHR / lie captured in Antenatal pathway.\n </p>\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Breast</p>\n {BREAST_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.breast[r.key]}\n onCheckedChange={() => toggleBreast(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Pelvic (consent applied)</p>\n {PELVIC_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.pelvic[r.key]}\n onCheckedChange={() => togglePelvic(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n {safe.pelvic.bimanualDone ? (\n <label className=\"block pt-1\">\n <span className=\"mb-1 block font-medium\">Uterus size (on bimanual)</span>\n <Select\n value={safe.uterusSize === '' ? 'none' : safe.uterusSize}\n onValueChange={(v) =>\n setUterusSize(v === 'none' ? '' : (v as ObgUterusSize))\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n {UTERUS_OPTIONS.map((opt) => (\n <SelectItem key={opt.value || 'none'} value={opt.value === '' ? 'none' : opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n </div>\n </div>\n\n <div className=\"space-y-1 border-t border-[#D0D0D0] pt-3\">\n <Label className=\"text-sm font-medium\">\n {clinicalField.fieldDef?.label ?? 'Clinical examination'}\n </Label>\n <Textarea\n className=\"min-h-[80px] text-xs\"\n placeholder=\"Free text on top lines; ticked findings appear as comma-separated chips on the last line. Removing a chip unticks it.\"\n value={\n typeof clinicalField.value === 'string'\n ? clinicalField.value\n : clinicalField.value == null\n ? ''\n : String(clinicalField.value)\n }\n onChange={(e) => onClinicalChange(e.target.value)}\n disabled={disabled || clinicalField.disabled}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/OBGExaminationWidget.tsx"],"names":["useField","useForm","useMemo","normalizeObgExamination","useRef","useEffect","parseProseAndChipTokens","OBG_EXAM_ALLOWED_CHIP_LABELS","composeProseAndChips","obgExaminationChipLabels","obgExaminationFromChipLabels","getThemeConfig","jsxs","Fragment","jsx","FieldRequiredIndicator","Label","cn","Checkbox","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","Textarea"],"mappings":"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","file":"OBGExaminationWidget-5THYKJI5.cjs","sourcesContent":["import React, { useEffect, useMemo, useRef } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { Checkbox } from '../shadcn/checkbox';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { cn } from '../../core/utils';\nimport { FieldRequiredIndicator } from '../../react/fieldStyle';\nimport { getThemeConfig } from '../themes';\nimport {\n normalizeObgExamination,\n obgExaminationChipLabels,\n obgExaminationFromChipLabels,\n OBG_EXAM_ALLOWED_CHIP_LABELS,\n type ObgExaminationValue,\n type ObgUterusSize,\n} from '../../core/obgPathway';\nimport {\n composeProseAndChips,\n parseProseAndChipTokens,\n} from '../../core/suggestionTokens';\n\nconst CLINICAL_EXAMINATION_FIELD = 'clinical_examination';\n\ntype GeneralKey = keyof ObgExaminationValue['general'];\ntype AbdomenKey = keyof ObgExaminationValue['abdomen'];\ntype BreastKey = keyof ObgExaminationValue['breast'];\ntype PelvicKey = keyof ObgExaminationValue['pelvic'];\n\nconst GENERAL_ROWS: { key: GeneralKey; label: string }[] = [\n { key: 'pallor', label: 'Pallor' },\n { key: 'oedema', label: 'Oedema' },\n { key: 'thyroid', label: 'Thyroid' },\n { key: 'hirsutism', label: 'Hirsutism' },\n { key: 'acanthosis', label: 'Acanthosis' },\n];\n\nconst ABDOMEN_ROWS: { key: AbdomenKey; label: string }[] = [\n { key: 'surgicalScars', label: 'Surgical scars' },\n { key: 'massTenderness', label: 'Mass / tenderness' },\n];\n\nconst BREAST_ROWS: { key: BreastKey; label: string }[] = [\n { key: 'lump', label: 'Lump' },\n { key: 'nippleDischarge', label: 'Nipple discharge' },\n { key: 'skinChanges', label: 'Skin changes' },\n { key: 'axillaryNodes', label: 'Axillary nodes' },\n];\n\nconst PELVIC_ROWS: { key: PelvicKey; label: string }[] = [\n { key: 'speculumDone', label: 'Speculum done' },\n { key: 'discharge', label: 'Discharge' },\n { key: 'cervicalErosion', label: 'Cervical erosion' },\n { key: 'cervicalGrowth', label: 'Cervical growth' },\n { key: 'activeBleeding', label: 'Active bleeding' },\n { key: 'bimanualDone', label: 'Bimanual done' },\n { key: 'adnexalMass', label: 'Adnexal mass' },\n { key: 'cmt', label: 'Cervical motion tenderness' },\n];\n\nconst UTERUS_OPTIONS: { value: ObgUterusSize; label: string }[] = [\n { value: '', label: '—' },\n { value: 'Normal', label: 'Normal' },\n { value: 'Bulky', label: 'Bulky' },\n { value: 'Enlarged', label: 'Enlarged' },\n];\n\nexport const OBGExaminationWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched, disabled } = useField(fieldId);\n const clinicalField = useField(CLINICAL_EXAMINATION_FIELD);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const safe = useMemo(() => normalizeObgExamination(value), [value]);\n\n // Tracks user-owned prose (anything above the chip line). When the prose\n // matches what we last auto-wrote (or is empty), structured updates may\n // refresh it. Once the user types, prose is preserved and only the chip\n // line is kept in sync.\n const lastAutoProseRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (lastAutoProseRef.current !== null) return;\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n if (prose === '') lastAutoProseRef.current = '';\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const writeClinical = (next: ObgExaminationValue) => {\n const cur = typeof clinicalField.value === 'string' ? clinicalField.value : '';\n const { prose: curProse } = parseProseAndChipTokens(cur, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const lastAutoProse = lastAutoProseRef.current;\n const proseInput =\n curProse === '' || curProse === lastAutoProse ? '' : curProse;\n const composed = composeProseAndChips(proseInput, obgExaminationChipLabels(next));\n if (composed !== cur) clinicalField.setValue(composed);\n if (proseInput === '' || proseInput === lastAutoProse) {\n lastAutoProseRef.current = '';\n }\n return composed;\n };\n\n const bump = (next: ObgExaminationValue) => {\n if (disabled) {\n setValue(next);\n setTouched();\n return;\n }\n const composed = writeClinical(next);\n setValue({ ...next, examinationNotes: composed });\n setTouched();\n };\n\n const onClinicalChange = (raw: string) => {\n clinicalField.setValue(raw);\n clinicalField.setTouched();\n if (disabled) return;\n const { prose, chips } = parseProseAndChipTokens(raw, OBG_EXAM_ALLOWED_CHIP_LABELS);\n const rebuilt = obgExaminationFromChipLabels(chips, raw);\n setValue(rebuilt);\n setTouched();\n lastAutoProseRef.current = prose === '' ? '' : '\\u0000USER\\u0000';\n };\n\n const toggleGeneral = (key: GeneralKey) =>\n bump({ ...safe, general: { ...safe.general, [key]: !safe.general[key] } });\n const toggleAbdomen = (key: AbdomenKey) =>\n bump({ ...safe, abdomen: { ...safe.abdomen, [key]: !safe.abdomen[key] } });\n const toggleBreast = (key: BreastKey) =>\n bump({ ...safe, breast: { ...safe.breast, [key]: !safe.breast[key] } });\n const togglePelvic = (key: PelvicKey) => {\n const nextPelvic = { ...safe.pelvic, [key]: !safe.pelvic[key] };\n const nextUterus: ObgUterusSize = !nextPelvic.bimanualDone ? '' : safe.uterusSize;\n bump({ ...safe, pelvic: nextPelvic, uterusSize: nextUterus });\n };\n const setUterusSize = (val: ObgUterusSize) => bump({ ...safe, uterusSize: val });\n\n if (!fieldDef) return null;\n\n const theme = getThemeConfig('textarea', fieldDef.theme);\n const wrapperClass =\n theme?.wrapperClassName ?? 'rounded-md overflow-hidden flex flex-col border border-[#D0D0D0]';\n const labelClass = theme?.labelClassName;\n\n const labelContent = (\n <>\n {fieldDef.label}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = theme ? (\n <Label className={labelClass}>{labelContent}</Label>\n ) : (\n <Label className=\"text-sm font-medium\">{labelContent}</Label>\n );\n\n const bodyClass = cn(\n '-mt-1 flex min-w-0 flex-col gap-3 border-t border-[#D0D0D0] bg-white px-3 py-3',\n disabled && 'pointer-events-none opacity-60',\n );\n\n return (\n <div className={cn('w-full min-w-0', wrapperClass)}>\n {labelEl}\n {fieldDef.description ? (\n <p className=\"px-3 pt-2 text-[11px] text-muted-foreground\">{fieldDef.description}</p>\n ) : null}\n\n <div className={bodyClass}>\n {showError ? <p className=\"text-xs text-red-600\">{error}</p> : null}\n\n <div className=\"grid grid-cols-1 gap-3 text-xs md:grid-cols-2 xl:grid-cols-4\">\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">General</p>\n {GENERAL_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.general[r.key]}\n onCheckedChange={() => toggleGeneral(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Abdomen</p>\n {ABDOMEN_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.abdomen[r.key]}\n onCheckedChange={() => toggleAbdomen(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n <p className=\"text-[10px] text-muted-foreground\">\n Pregnancy → fundal ht / FHR / lie captured in Antenatal pathway.\n </p>\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Breast</p>\n {BREAST_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.breast[r.key]}\n onCheckedChange={() => toggleBreast(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n </div>\n <div className=\"space-y-2\">\n <p className=\"font-semibold text-slate-800\">Pelvic (consent applied)</p>\n {PELVIC_ROWS.map((r) => (\n <label key={r.key} className=\"flex items-center gap-2\">\n <Checkbox\n checked={safe.pelvic[r.key]}\n onCheckedChange={() => togglePelvic(r.key)}\n disabled={disabled}\n />\n {r.label}\n </label>\n ))}\n {safe.pelvic.bimanualDone ? (\n <label className=\"block pt-1\">\n <span className=\"mb-1 block font-medium\">Uterus size (on bimanual)</span>\n <Select\n value={safe.uterusSize === '' ? 'none' : safe.uterusSize}\n onValueChange={(v) =>\n setUterusSize(v === 'none' ? '' : (v as ObgUterusSize))\n }\n disabled={disabled}\n >\n <SelectTrigger className=\"h-8 text-xs\">\n <SelectValue placeholder=\"—\" />\n </SelectTrigger>\n <SelectContent>\n {UTERUS_OPTIONS.map((opt) => (\n <SelectItem key={opt.value || 'none'} value={opt.value === '' ? 'none' : opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n ) : null}\n </div>\n </div>\n\n <div className=\"space-y-1 border-t border-[#D0D0D0] pt-3\">\n <Label className=\"text-sm font-medium\">\n {clinicalField.fieldDef?.label ?? 'Clinical examination'}\n </Label>\n <Textarea\n className=\"min-h-[80px] text-xs\"\n placeholder=\"Free text on top lines; ticked findings appear as comma-separated chips on the last line. Removing a chip unticks it.\"\n value={\n typeof clinicalField.value === 'string'\n ? clinicalField.value\n : clinicalField.value == null\n ? ''\n : String(clinicalField.value)\n }\n onChange={(e) => onClinicalChange(e.target.value)}\n disabled={disabled || clinicalField.disabled}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
@@ -3,9 +3,9 @@ import { Checkbox } from './chunk-GNZWSVTB.mjs';
3
3
  import { Textarea } from './chunk-4BAKQIPJ.mjs';
4
4
  import { getThemeConfig } from './chunk-Y7TIWH4I.mjs';
5
5
  import { FieldRequiredIndicator } from './chunk-WYVXXEZI.mjs';
6
- import { useForm } from './chunk-T3UHPMFX.mjs';
6
+ import { useForm } from './chunk-BKZXISZH.mjs';
7
7
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-AZHTIUOL.mjs';
8
- import { useField, parseProseAndChipTokens, composeProseAndChips } from './chunk-2BGJZ44Q.mjs';
8
+ import { useField, parseProseAndChipTokens, composeProseAndChips } from './chunk-HKEUAERY.mjs';
9
9
  import { Label } from './chunk-HEFZA2AH.mjs';
10
10
  import { cn } from './chunk-VPU66PI6.mjs';
11
11
  import { useMemo, useRef, useEffect } from 'react';
@@ -209,5 +209,5 @@ var OBGExaminationWidget = ({ fieldId }) => {
209
209
  };
210
210
 
211
211
  export { OBGExaminationWidget };
212
- //# sourceMappingURL=OBGExaminationWidget-HQKTHSOZ.mjs.map
213
- //# sourceMappingURL=OBGExaminationWidget-HQKTHSOZ.mjs.map
212
+ //# sourceMappingURL=OBGExaminationWidget-Y2BVJB33.mjs.map
213
+ //# sourceMappingURL=OBGExaminationWidget-Y2BVJB33.mjs.map