formanitor 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/dist/{AddInvestigationWidget-RY62UCPM.cjs → AddInvestigationWidget-7FLINCTT.cjs} +7 -7
  2. package/dist/{AddInvestigationWidget-RY62UCPM.cjs.map → AddInvestigationWidget-7FLINCTT.cjs.map} +1 -1
  3. package/dist/{AddInvestigationWidget-7UGZQYI5.mjs → AddInvestigationWidget-FABXZDEZ.mjs} +3 -3
  4. package/dist/{AddInvestigationWidget-7UGZQYI5.mjs.map → AddInvestigationWidget-FABXZDEZ.mjs.map} +1 -1
  5. package/dist/{AddMedicationWidget-WPI32WAP.cjs → AddMedicationWidget-45T4XVEL.cjs} +6 -6
  6. package/dist/{AddMedicationWidget-WPI32WAP.cjs.map → AddMedicationWidget-45T4XVEL.cjs.map} +1 -1
  7. package/dist/{AddMedicationWidget-UG26VMUX.mjs → AddMedicationWidget-B5RXRYBK.mjs} +3 -3
  8. package/dist/{AddMedicationWidget-UG26VMUX.mjs.map → AddMedicationWidget-B5RXRYBK.mjs.map} +1 -1
  9. package/dist/{AddProcedureWidget-SQJUKKMK.mjs → AddProcedureWidget-F74WGSFX.mjs} +3 -3
  10. package/dist/{AddProcedureWidget-SQJUKKMK.mjs.map → AddProcedureWidget-F74WGSFX.mjs.map} +1 -1
  11. package/dist/{AddProcedureWidget-SF6MTRBV.cjs → AddProcedureWidget-HK7UNRXH.cjs} +6 -6
  12. package/dist/{AddProcedureWidget-SF6MTRBV.cjs.map → AddProcedureWidget-HK7UNRXH.cjs.map} +1 -1
  13. package/dist/{BiometryIolWorkupWidget-NL2M7ZAA.mjs → BiometryIolWorkupWidget-5RZP34FF.mjs} +4 -4
  14. package/dist/{BiometryIolWorkupWidget-NL2M7ZAA.mjs.map → BiometryIolWorkupWidget-5RZP34FF.mjs.map} +1 -1
  15. package/dist/{BiometryIolWorkupWidget-I5AJOYB2.cjs → BiometryIolWorkupWidget-FWO3IWTF.cjs} +6 -6
  16. package/dist/{BiometryIolWorkupWidget-I5AJOYB2.cjs.map → BiometryIolWorkupWidget-FWO3IWTF.cjs.map} +1 -1
  17. package/dist/{DateTimeWidget-LFBB6HOP.mjs → DateTimeWidget-3AUBZYYK.mjs} +4 -4
  18. package/dist/{DateTimeWidget-LFBB6HOP.mjs.map → DateTimeWidget-3AUBZYYK.mjs.map} +1 -1
  19. package/dist/{DateTimeWidget-DIDVF2EB.cjs → DateTimeWidget-OS7ER5F6.cjs} +6 -6
  20. package/dist/{DateTimeWidget-DIDVF2EB.cjs.map → DateTimeWidget-OS7ER5F6.cjs.map} +1 -1
  21. package/dist/{DateWidget-4ND5TKP2.mjs → DateWidget-KCTE6N5G.mjs} +4 -4
  22. package/dist/{DateWidget-4ND5TKP2.mjs.map → DateWidget-KCTE6N5G.mjs.map} +1 -1
  23. package/dist/{DateWidget-BCVR5GDK.cjs → DateWidget-UNLX544Z.cjs} +6 -6
  24. package/dist/{DateWidget-BCVR5GDK.cjs.map → DateWidget-UNLX544Z.cjs.map} +1 -1
  25. package/dist/{DiagnosisTextareaWidget-MAOXCXEZ.mjs → DiagnosisTextareaWidget-6UCYCCSB.mjs} +4 -4
  26. package/dist/{DiagnosisTextareaWidget-MAOXCXEZ.mjs.map → DiagnosisTextareaWidget-6UCYCCSB.mjs.map} +1 -1
  27. package/dist/{DiagnosisTextareaWidget-E7OQRUMX.cjs → DiagnosisTextareaWidget-XJ47OZYH.cjs} +7 -7
  28. package/dist/{DiagnosisTextareaWidget-E7OQRUMX.cjs.map → DiagnosisTextareaWidget-XJ47OZYH.cjs.map} +1 -1
  29. package/dist/{DifferentialDiagnosisWidget-LCY2SA2I.mjs → DifferentialDiagnosisWidget-IZEZVW5F.mjs} +3 -3
  30. package/dist/{DifferentialDiagnosisWidget-LCY2SA2I.mjs.map → DifferentialDiagnosisWidget-IZEZVW5F.mjs.map} +1 -1
  31. package/dist/{DifferentialDiagnosisWidget-ANALLNKL.cjs → DifferentialDiagnosisWidget-XESNHNQQ.cjs} +4 -4
  32. package/dist/{DifferentialDiagnosisWidget-ANALLNKL.cjs.map → DifferentialDiagnosisWidget-XESNHNQQ.cjs.map} +1 -1
  33. package/dist/{DischargeMedicationOrdersWidget-GYT35W7J.mjs → DischargeMedicationOrdersWidget-KA3HANHE.mjs} +4 -4
  34. package/dist/{DischargeMedicationOrdersWidget-GYT35W7J.mjs.map → DischargeMedicationOrdersWidget-KA3HANHE.mjs.map} +1 -1
  35. package/dist/{DischargeMedicationOrdersWidget-ILWNZ7VM.cjs → DischargeMedicationOrdersWidget-WRJRYL6F.cjs} +7 -7
  36. package/dist/{DischargeMedicationOrdersWidget-ILWNZ7VM.cjs.map → DischargeMedicationOrdersWidget-WRJRYL6F.cjs.map} +1 -1
  37. package/dist/{EditableTable-VCUNJZEX.cjs → EditableTable-VQ72UEFF.cjs} +4 -4
  38. package/dist/{EditableTable-VCUNJZEX.cjs.map → EditableTable-VQ72UEFF.cjs.map} +1 -1
  39. package/dist/{EditableTable-TGCVUBLO.mjs → EditableTable-XFCPKSUY.mjs} +3 -3
  40. package/dist/{EditableTable-TGCVUBLO.mjs.map → EditableTable-XFCPKSUY.mjs.map} +1 -1
  41. package/dist/{FollowupWidget-F6FRZO4T.mjs → FollowupWidget-BFZ6P2JE.mjs} +3 -3
  42. package/dist/{FollowupWidget-F6FRZO4T.mjs.map → FollowupWidget-BFZ6P2JE.mjs.map} +1 -1
  43. package/dist/{FollowupWidget-NBTOV2ML.cjs → FollowupWidget-MAYTHM2E.cjs} +4 -4
  44. package/dist/{FollowupWidget-NBTOV2ML.cjs.map → FollowupWidget-MAYTHM2E.cjs.map} +1 -1
  45. package/dist/{FunctionalImpairmentScoreWidget-5V5SNLTF.cjs → FunctionalImpairmentScoreWidget-FCA4UKQA.cjs} +6 -6
  46. package/dist/{FunctionalImpairmentScoreWidget-5V5SNLTF.cjs.map → FunctionalImpairmentScoreWidget-FCA4UKQA.cjs.map} +1 -1
  47. package/dist/{FunctionalImpairmentScoreWidget-QKIZE7KT.mjs → FunctionalImpairmentScoreWidget-TKS6KE7K.mjs} +4 -4
  48. package/dist/{FunctionalImpairmentScoreWidget-QKIZE7KT.mjs.map → FunctionalImpairmentScoreWidget-TKS6KE7K.mjs.map} +1 -1
  49. package/dist/{GsExaminationWidget-J4VABGY6.mjs → GsExaminationWidget-ESIEZCP3.mjs} +4 -4
  50. package/dist/{GsExaminationWidget-J4VABGY6.mjs.map → GsExaminationWidget-ESIEZCP3.mjs.map} +1 -1
  51. package/dist/{GsExaminationWidget-57SL4BCI.cjs → GsExaminationWidget-KKE5I5GX.cjs} +10 -10
  52. package/dist/{GsExaminationWidget-57SL4BCI.cjs.map → GsExaminationWidget-KKE5I5GX.cjs.map} +1 -1
  53. package/dist/{GsGradingWidget-3WTLIP33.mjs → GsGradingWidget-HC4MJ4KJ.mjs} +4 -4
  54. package/dist/{GsGradingWidget-3WTLIP33.mjs.map → GsGradingWidget-HC4MJ4KJ.mjs.map} +1 -1
  55. package/dist/{GsGradingWidget-CIXE36HF.cjs → GsGradingWidget-NGCQQVYA.cjs} +12 -12
  56. package/dist/{GsGradingWidget-CIXE36HF.cjs.map → GsGradingWidget-NGCQQVYA.cjs.map} +1 -1
  57. package/dist/{GsSmartHistoryWidget-IOGZ6GNS.mjs → GsSmartHistoryWidget-7HYGDU4O.mjs} +4 -4
  58. package/dist/{GsSmartHistoryWidget-IOGZ6GNS.mjs.map → GsSmartHistoryWidget-7HYGDU4O.mjs.map} +1 -1
  59. package/dist/{GsSmartHistoryWidget-6Q2IIGDG.cjs → GsSmartHistoryWidget-AAB427Q2.cjs} +12 -12
  60. package/dist/{GsSmartHistoryWidget-6Q2IIGDG.cjs.map → GsSmartHistoryWidget-AAB427Q2.cjs.map} +1 -1
  61. package/dist/{HiddenVitalsWidget-HBK7PBPR.cjs → HiddenVitalsWidget-5GFBDDPT.cjs} +6 -6
  62. package/dist/{HiddenVitalsWidget-HBK7PBPR.cjs.map → HiddenVitalsWidget-5GFBDDPT.cjs.map} +1 -1
  63. package/dist/{HiddenVitalsWidget-JH3NRZLM.mjs → HiddenVitalsWidget-CIE3KERT.mjs} +4 -4
  64. package/dist/{HiddenVitalsWidget-JH3NRZLM.mjs.map → HiddenVitalsWidget-CIE3KERT.mjs.map} +1 -1
  65. package/dist/{LensAssessmentWidget-7WMULFS2.mjs → LensAssessmentWidget-B4OMHTOE.mjs} +4 -4
  66. package/dist/{LensAssessmentWidget-7WMULFS2.mjs.map → LensAssessmentWidget-B4OMHTOE.mjs.map} +1 -1
  67. package/dist/{LensAssessmentWidget-GSOOD7BX.cjs → LensAssessmentWidget-SIKJVVAE.cjs} +6 -6
  68. package/dist/{LensAssessmentWidget-GSOOD7BX.cjs.map → LensAssessmentWidget-SIKJVVAE.cjs.map} +1 -1
  69. package/dist/{MarMedicationOrdersWidget-3E6GFOR6.cjs → MarMedicationOrdersWidget-767F65K6.cjs} +7 -7
  70. package/dist/{MarMedicationOrdersWidget-3E6GFOR6.cjs.map → MarMedicationOrdersWidget-767F65K6.cjs.map} +1 -1
  71. package/dist/{MarMedicationOrdersWidget-QZUVSEB5.mjs → MarMedicationOrdersWidget-LG3WOXN7.mjs} +4 -4
  72. package/dist/{MarMedicationOrdersWidget-QZUVSEB5.mjs.map → MarMedicationOrdersWidget-LG3WOXN7.mjs.map} +1 -1
  73. package/dist/{OBGExaminationWidget-POVLALMA.mjs → OBGExaminationWidget-HQKTHSOZ.mjs} +4 -4
  74. package/dist/{OBGExaminationWidget-POVLALMA.mjs.map → OBGExaminationWidget-HQKTHSOZ.mjs.map} +1 -1
  75. package/dist/{OBGExaminationWidget-F2ZNSP2M.cjs → OBGExaminationWidget-MRTGWLXJ.cjs} +11 -11
  76. package/dist/{OBGExaminationWidget-F2ZNSP2M.cjs.map → OBGExaminationWidget-MRTGWLXJ.cjs.map} +1 -1
  77. package/dist/{OBGPathwayWidget-CGT7Q4T2.mjs → OBGPathwayWidget-X67XKRIH.mjs} +5 -5
  78. package/dist/{OBGPathwayWidget-CGT7Q4T2.mjs.map → OBGPathwayWidget-X67XKRIH.mjs.map} +1 -1
  79. package/dist/{OBGPathwayWidget-WCIQENMO.cjs → OBGPathwayWidget-XGN3HEWS.cjs} +17 -17
  80. package/dist/{OBGPathwayWidget-WCIQENMO.cjs.map → OBGPathwayWidget-XGN3HEWS.cjs.map} +1 -1
  81. package/dist/{ObstetricHistoryWidget-XU6R7IPP.cjs → ObstetricHistoryWidget-RP7NY4PV.cjs} +12 -12
  82. package/dist/{ObstetricHistoryWidget-XU6R7IPP.cjs.map → ObstetricHistoryWidget-RP7NY4PV.cjs.map} +1 -1
  83. package/dist/{ObstetricHistoryWidget-EGVLL4X2.mjs → ObstetricHistoryWidget-Z4VAXH3E.mjs} +4 -4
  84. package/dist/{ObstetricHistoryWidget-EGVLL4X2.mjs.map → ObstetricHistoryWidget-Z4VAXH3E.mjs.map} +1 -1
  85. package/dist/{OphthalDiagnosisWidget-G5RCC2QZ.mjs → OphthalDiagnosisWidget-MZYBQTFV.mjs} +3 -3
  86. package/dist/{OphthalDiagnosisWidget-G5RCC2QZ.mjs.map → OphthalDiagnosisWidget-MZYBQTFV.mjs.map} +1 -1
  87. package/dist/{OphthalDiagnosisWidget-OQPTHJ7E.cjs → OphthalDiagnosisWidget-UXXYGKD5.cjs} +4 -4
  88. package/dist/{OphthalDiagnosisWidget-OQPTHJ7E.cjs.map → OphthalDiagnosisWidget-UXXYGKD5.cjs.map} +1 -1
  89. package/dist/{OphthalmologyWidget-RG2AI6WA.mjs → OphthalmologyWidget-27ZN2E3F.mjs} +3 -3
  90. package/dist/{OphthalmologyWidget-RG2AI6WA.mjs.map → OphthalmologyWidget-27ZN2E3F.mjs.map} +1 -1
  91. package/dist/{OphthalmologyWidget-I3BKWOI2.cjs → OphthalmologyWidget-WFSFIHT4.cjs} +4 -4
  92. package/dist/{OphthalmologyWidget-I3BKWOI2.cjs.map → OphthalmologyWidget-WFSFIHT4.cjs.map} +1 -1
  93. package/dist/{OrthopedicExamWidget-M4KKU5RC.cjs → OrthopedicExamWidget-ULZTDFXJ.cjs} +6 -6
  94. package/dist/{OrthopedicExamWidget-M4KKU5RC.cjs.map → OrthopedicExamWidget-ULZTDFXJ.cjs.map} +1 -1
  95. package/dist/{OrthopedicExamWidget-BBZP6NVT.mjs → OrthopedicExamWidget-WM55M3Y4.mjs} +4 -4
  96. package/dist/{OrthopedicExamWidget-BBZP6NVT.mjs.map → OrthopedicExamWidget-WM55M3Y4.mjs.map} +1 -1
  97. package/dist/{PainScaleFlagsWidget-E576R6QB.mjs → PainScaleFlagsWidget-5KN7T4JK.mjs} +4 -4
  98. package/dist/{PainScaleFlagsWidget-E576R6QB.mjs.map → PainScaleFlagsWidget-5KN7T4JK.mjs.map} +1 -1
  99. package/dist/{PainScaleFlagsWidget-QHGESXNE.cjs → PainScaleFlagsWidget-IFA3RCEL.cjs} +8 -8
  100. package/dist/{PainScaleFlagsWidget-QHGESXNE.cjs.map → PainScaleFlagsWidget-IFA3RCEL.cjs.map} +1 -1
  101. package/dist/{ReferralWidget-J2PWYFDT.cjs → ReferralWidget-27VGZCOQ.cjs} +7 -7
  102. package/dist/{ReferralWidget-J2PWYFDT.cjs.map → ReferralWidget-27VGZCOQ.cjs.map} +1 -1
  103. package/dist/{ReferralWidget-UPYWEO5R.mjs → ReferralWidget-GU3JYED2.mjs} +4 -4
  104. package/dist/{ReferralWidget-UPYWEO5R.mjs.map → ReferralWidget-GU3JYED2.mjs.map} +1 -1
  105. package/dist/{RichTextWidget-CRQHNVJR.cjs → RichTextWidget-2KLV65QP.cjs} +7 -7
  106. package/dist/{RichTextWidget-BBCNJPMH.mjs.map → RichTextWidget-2KLV65QP.cjs.map} +1 -1
  107. package/dist/RichTextWidget-ZBX554ZJ.mjs +11 -0
  108. package/dist/{RichTextWidget-CRQHNVJR.cjs.map → RichTextWidget-ZBX554ZJ.mjs.map} +1 -1
  109. package/dist/SmartTextarea-LQDXFCYT.mjs +10 -0
  110. package/dist/{SmartTextarea-DKWV4R6H.cjs.map → SmartTextarea-LQDXFCYT.mjs.map} +1 -1
  111. package/dist/SmartTextarea-WITNRNDU.cjs +19 -0
  112. package/dist/{SmartTextarea-ZTQIW6O2.mjs.map → SmartTextarea-WITNRNDU.cjs.map} +1 -1
  113. package/dist/{SuggestionTextareaWidget-WCTPWW2E.cjs → SuggestionTextareaWidget-DY6M5JPO.cjs} +18 -18
  114. package/dist/{SuggestionTextareaWidget-WCTPWW2E.cjs.map → SuggestionTextareaWidget-DY6M5JPO.cjs.map} +1 -1
  115. package/dist/{SuggestionTextareaWidget-22NR3JWM.mjs → SuggestionTextareaWidget-GQTWCFBG.mjs} +7 -7
  116. package/dist/{SuggestionTextareaWidget-22NR3JWM.mjs.map → SuggestionTextareaWidget-GQTWCFBG.mjs.map} +1 -1
  117. package/dist/{SurgicalRiskFlagsWidget-Q5FTWB3M.cjs → SurgicalRiskFlagsWidget-OJKCZIWJ.cjs} +6 -6
  118. package/dist/{SurgicalRiskFlagsWidget-Q5FTWB3M.cjs.map → SurgicalRiskFlagsWidget-OJKCZIWJ.cjs.map} +1 -1
  119. package/dist/{SurgicalRiskFlagsWidget-WCAHZKKG.mjs → SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs} +4 -4
  120. package/dist/{SurgicalRiskFlagsWidget-WCAHZKKG.mjs.map → SurgicalRiskFlagsWidget-ZTQJ6CDF.mjs.map} +1 -1
  121. package/dist/{UrologyExaminationWidget-JYUGZ5CG.cjs → UrologyExaminationWidget-GQLMV4FB.cjs} +12 -12
  122. package/dist/{UrologyExaminationWidget-JYUGZ5CG.cjs.map → UrologyExaminationWidget-GQLMV4FB.cjs.map} +1 -1
  123. package/dist/{UrologyExaminationWidget-QDTD3FJX.mjs → UrologyExaminationWidget-GRBL2SDG.mjs} +4 -4
  124. package/dist/{UrologyExaminationWidget-QDTD3FJX.mjs.map → UrologyExaminationWidget-GRBL2SDG.mjs.map} +1 -1
  125. package/dist/{UrologyPathwayWidget-TXZQNGP4.cjs → UrologyPathwayWidget-D6EWSOGW.cjs} +7 -7
  126. package/dist/{UrologyPathwayWidget-TXZQNGP4.cjs.map → UrologyPathwayWidget-D6EWSOGW.cjs.map} +1 -1
  127. package/dist/{UrologyPathwayWidget-QTFKUIM7.mjs → UrologyPathwayWidget-PEO5BVQX.mjs} +4 -4
  128. package/dist/{UrologyPathwayWidget-QTFKUIM7.mjs.map → UrologyPathwayWidget-PEO5BVQX.mjs.map} +1 -1
  129. package/dist/{UrologySmartHistoryWidget-PBU4QXQJ.mjs → UrologySmartHistoryWidget-BDKRFBYN.mjs} +4 -4
  130. package/dist/{UrologySmartHistoryWidget-PBU4QXQJ.mjs.map → UrologySmartHistoryWidget-BDKRFBYN.mjs.map} +1 -1
  131. package/dist/{UrologySmartHistoryWidget-53NATEO3.cjs → UrologySmartHistoryWidget-P3KTQE7L.cjs} +15 -15
  132. package/dist/{UrologySmartHistoryWidget-53NATEO3.cjs.map → UrologySmartHistoryWidget-P3KTQE7L.cjs.map} +1 -1
  133. package/dist/{VitalsWidget-BRFUKGNO.mjs → VitalsWidget-63HTXK2M.mjs} +3 -3
  134. package/dist/{VitalsWidget-BRFUKGNO.mjs.map → VitalsWidget-63HTXK2M.mjs.map} +1 -1
  135. package/dist/{VitalsWidget-PDCYXNBM.cjs → VitalsWidget-MS3OOZSW.cjs} +5 -5
  136. package/dist/{VitalsWidget-PDCYXNBM.cjs.map → VitalsWidget-MS3OOZSW.cjs.map} +1 -1
  137. package/dist/{chunk-ZTT5XJR7.mjs → chunk-2BGJZ44Q.mjs} +3 -2
  138. package/dist/chunk-2BGJZ44Q.mjs.map +1 -0
  139. package/dist/{chunk-ULMK3TUI.mjs → chunk-4HDMR2LX.mjs} +3 -3
  140. package/dist/{chunk-ULMK3TUI.mjs.map → chunk-4HDMR2LX.mjs.map} +1 -1
  141. package/dist/{chunk-6YX37XBM.cjs → chunk-7DISRJAB.cjs} +4 -4
  142. package/dist/{chunk-6YX37XBM.cjs.map → chunk-7DISRJAB.cjs.map} +1 -1
  143. package/dist/{chunk-VZT5YNCD.mjs → chunk-MBZRRYJB.mjs} +4 -4
  144. package/dist/{chunk-VZT5YNCD.mjs.map → chunk-MBZRRYJB.mjs.map} +1 -1
  145. package/dist/{chunk-I7TJVWYV.cjs → chunk-ML47UEDU.cjs} +6 -6
  146. package/dist/{chunk-I7TJVWYV.cjs.map → chunk-ML47UEDU.cjs.map} +1 -1
  147. package/dist/{chunk-5I2RC47Y.mjs → chunk-Q3K646K4.mjs} +3 -3
  148. package/dist/{chunk-5I2RC47Y.mjs.map → chunk-Q3K646K4.mjs.map} +1 -1
  149. package/dist/{chunk-GPU5P3FB.cjs → chunk-RZK44P3C.cjs} +7 -7
  150. package/dist/{chunk-GPU5P3FB.cjs.map → chunk-RZK44P3C.cjs.map} +1 -1
  151. package/dist/{chunk-L4CIIT4U.cjs → chunk-T2IKWRV2.cjs} +9 -9
  152. package/dist/{chunk-L4CIIT4U.cjs.map → chunk-T2IKWRV2.cjs.map} +1 -1
  153. package/dist/{chunk-7L2JOWGA.mjs → chunk-T3UHPMFX.mjs} +3 -3
  154. package/dist/{chunk-7L2JOWGA.mjs.map → chunk-T3UHPMFX.mjs.map} +1 -1
  155. package/dist/{chunk-SHQHDSA4.cjs → chunk-TB33A4PD.cjs} +3 -2
  156. package/dist/chunk-TB33A4PD.cjs.map +1 -0
  157. package/dist/{chunk-MQ2JV7HL.cjs → chunk-TVFUWRTE.cjs} +11 -11
  158. package/dist/{chunk-MQ2JV7HL.cjs.map → chunk-TVFUWRTE.cjs.map} +1 -1
  159. package/dist/{chunk-BOBX45NY.cjs → chunk-XIUXYHGG.cjs} +5 -5
  160. package/dist/{chunk-BOBX45NY.cjs.map → chunk-XIUXYHGG.cjs.map} +1 -1
  161. package/dist/{chunk-YHNI5NIX.mjs → chunk-XLCTFYFD.mjs} +5 -5
  162. package/dist/{chunk-YHNI5NIX.mjs.map → chunk-XLCTFYFD.mjs.map} +1 -1
  163. package/dist/{chunk-3KRDT7TX.mjs → chunk-XN2QLBLT.mjs} +5 -5
  164. package/dist/{chunk-3KRDT7TX.mjs.map → chunk-XN2QLBLT.mjs.map} +1 -1
  165. package/dist/index.cjs +112 -108
  166. package/dist/index.cjs.map +1 -1
  167. package/dist/index.d.cts +12 -0
  168. package/dist/index.d.ts +12 -0
  169. package/dist/index.mjs +45 -41
  170. package/dist/index.mjs.map +1 -1
  171. package/dist/rich-text.cjs +5 -5
  172. package/dist/rich-text.mjs +4 -4
  173. package/dist/smart.cjs +5 -5
  174. package/dist/smart.mjs +3 -3
  175. package/package.json +1 -1
  176. package/dist/RichTextWidget-BBCNJPMH.mjs +0 -11
  177. package/dist/SmartTextarea-DKWV4R6H.cjs +0 -19
  178. package/dist/SmartTextarea-ZTQIW6O2.mjs +0 -10
  179. package/dist/chunk-SHQHDSA4.cjs.map +0 -1
  180. package/dist/chunk-ZTT5XJR7.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-7L2JOWGA.mjs';
5
- import { useField } from './chunk-ZTT5XJR7.mjs';
4
+ import { useForm } from './chunk-T3UHPMFX.mjs';
5
+ import { useField } from './chunk-2BGJZ44Q.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-JH3NRZLM.mjs.map
53
- //# sourceMappingURL=HiddenVitalsWidget-JH3NRZLM.mjs.map
52
+ //# sourceMappingURL=HiddenVitalsWidget-CIE3KERT.mjs.map
53
+ //# sourceMappingURL=HiddenVitalsWidget-CIE3KERT.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-JH3NRZLM.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-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,5 +1,5 @@
1
- import { useForm } from './chunk-7L2JOWGA.mjs';
2
- import { useField } from './chunk-ZTT5XJR7.mjs';
1
+ import { useForm } from './chunk-T3UHPMFX.mjs';
2
+ import { useField } from './chunk-2BGJZ44Q.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-7WMULFS2.mjs.map
232
- //# sourceMappingURL=LensAssessmentWidget-7WMULFS2.mjs.map
231
+ //# sourceMappingURL=LensAssessmentWidget-B4OMHTOE.mjs.map
232
+ //# sourceMappingURL=LensAssessmentWidget-B4OMHTOE.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/LensAssessmentWidget.tsx"],"names":[],"mappings":"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","file":"LensAssessmentWidget-7WMULFS2.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":"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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,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk6YX37XBM_cjs = require('./chunk-6YX37XBM.cjs');
4
- var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
3
+ var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
4
+ var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.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 } = chunkSHQHDSA4_cjs.useField(fieldId);
154
- const { state } = chunk6YX37XBM_cjs.useForm();
153
+ const { fieldDef, value, setValue, error, disabled, touched } = chunkTB33A4PD_cjs.useField(fieldId);
154
+ const { state } = chunk7DISRJAB_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-GSOOD7BX.cjs.map
234
- //# sourceMappingURL=LensAssessmentWidget-GSOOD7BX.cjs.map
233
+ //# sourceMappingURL=LensAssessmentWidget-SIKJVVAE.cjs.map
234
+ //# sourceMappingURL=LensAssessmentWidget-SIKJVVAE.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-GSOOD7BX.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-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"]}
@@ -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 chunk6YX37XBM_cjs = require('./chunk-6YX37XBM.cjs');
5
+ var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
6
6
  var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
7
- var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
7
+ var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.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 } = chunkSHQHDSA4_cjs.useField(fieldId);
15
- const { state } = chunk6YX37XBM_cjs.useForm();
16
- const handlers = chunkSHQHDSA4_cjs.useFieldHandlers(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);
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-3E6GFOR6.cjs.map
76
- //# sourceMappingURL=MarMedicationOrdersWidget-3E6GFOR6.cjs.map
75
+ //# sourceMappingURL=MarMedicationOrdersWidget-767F65K6.cjs.map
76
+ //# sourceMappingURL=MarMedicationOrdersWidget-767F65K6.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-3E6GFOR6.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-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,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-7L2JOWGA.mjs';
3
+ import { useForm } from './chunk-T3UHPMFX.mjs';
4
4
  import { Button } from './chunk-GXXWMHAA.mjs';
5
- import { useField, useFieldHandlers } from './chunk-ZTT5XJR7.mjs';
5
+ import { useField, useFieldHandlers } from './chunk-2BGJZ44Q.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-QZUVSEB5.mjs.map
74
- //# sourceMappingURL=MarMedicationOrdersWidget-QZUVSEB5.mjs.map
73
+ //# sourceMappingURL=MarMedicationOrdersWidget-LG3WOXN7.mjs.map
74
+ //# sourceMappingURL=MarMedicationOrdersWidget-LG3WOXN7.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/MarMedicationOrdersWidget.tsx"],"names":[],"mappings":"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","file":"MarMedicationOrdersWidget-QZUVSEB5.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-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"]}
@@ -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-7L2JOWGA.mjs';
6
+ import { useForm } from './chunk-T3UHPMFX.mjs';
7
7
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-AZHTIUOL.mjs';
8
- import { useField, parseProseAndChipTokens, composeProseAndChips } from './chunk-ZTT5XJR7.mjs';
8
+ import { useField, parseProseAndChipTokens, composeProseAndChips } from './chunk-2BGJZ44Q.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-POVLALMA.mjs.map
213
- //# sourceMappingURL=OBGExaminationWidget-POVLALMA.mjs.map
212
+ //# sourceMappingURL=OBGExaminationWidget-HQKTHSOZ.mjs.map
213
+ //# sourceMappingURL=OBGExaminationWidget-HQKTHSOZ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/OBGExaminationWidget.tsx"],"names":[],"mappings":";;;;;;;;;;;;;AA6BA,IAAM,0BAAA,GAA6B,sBAAA;AAOnC,IAAM,YAAA,GAAqD;AAAA,EACzD,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACjC,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACjC,EAAE,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,EACnC,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACvC,EAAE,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,YAAA;AAC9B,CAAA;AAEA,IAAM,YAAA,GAAqD;AAAA,EACzD,EAAE,GAAA,EAAK,eAAA,EAAiB,KAAA,EAAO,gBAAA,EAAiB;AAAA,EAChD,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,mBAAA;AAClC,CAAA;AAEA,IAAM,WAAA,GAAmD;AAAA,EACvD,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC7B,EAAE,GAAA,EAAK,iBAAA,EAAmB,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpD,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,cAAA,EAAe;AAAA,EAC5C,EAAE,GAAA,EAAK,eAAA,EAAiB,KAAA,EAAO,gBAAA;AACjC,CAAA;AAEA,IAAM,WAAA,GAAmD;AAAA,EACvD,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9C,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACvC,EAAE,GAAA,EAAK,iBAAA,EAAmB,KAAA,EAAO,kBAAA,EAAmB;AAAA,EACpD,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,iBAAA,EAAkB;AAAA,EAClD,EAAE,GAAA,EAAK,gBAAA,EAAkB,KAAA,EAAO,iBAAA,EAAkB;AAAA,EAClD,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,eAAA,EAAgB;AAAA,EAC9C,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,cAAA,EAAe;AAAA,EAC5C,EAAE,GAAA,EAAK,KAAA,EAAO,KAAA,EAAO,4BAAA;AACvB,CAAA;AAEA,IAAM,cAAA,GAA4D;AAAA,EAChE,EAAE,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,QAAA,EAAI;AAAA,EACxB,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,EACnC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,EACjC,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA;AAC9B,CAAA;AAEO,IAAM,oBAAA,GAAsD,CAAC,EAAE,OAAA,EAAQ,KAAM;AAClF,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,UAAA,EAAY,OAAO,OAAA,EAAS,QAAA,EAAS,GAAI,QAAA,CAAS,OAAO,CAAA;AAC5F,EAAA,MAAM,aAAA,GAAgB,SAAS,0BAA0B,CAAA;AACzD,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,MAAM,IAAA,GAAO,QAAQ,MAAM,uBAAA,CAAwB,KAAK,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAMlE,EAAA,MAAM,gBAAA,GAAmB,OAAsB,IAAI,CAAA;AAEnD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,gBAAA,CAAiB,YAAY,IAAA,EAAM;AACvC,IAAA,MAAM,MAAM,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,GAAW,cAAc,KAAA,GAAQ,EAAA;AAC5E,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,uBAAA,CAAwB,KAAK,4BAA4B,CAAA;AAC3E,IAAA,IAAI,KAAA,KAAU,EAAA,EAAI,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAAA,EAE/C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAA8B;AACnD,IAAA,MAAM,MAAM,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,GAAW,cAAc,KAAA,GAAQ,EAAA;AAC5E,IAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAI,uBAAA,CAAwB,KAAK,4BAA4B,CAAA;AACrF,IAAA,MAAM,gBAAgB,gBAAA,CAAiB,OAAA;AACvC,IAAA,MAAM,UAAA,GACJ,QAAA,KAAa,EAAA,IAAM,QAAA,KAAa,gBAAgB,EAAA,GAAK,QAAA;AACvD,IAAA,MAAM,QAAA,GAAW,oBAAA,CAAqB,UAAA,EAAY,wBAAA,CAAyB,IAAI,CAAC,CAAA;AAChF,IAAA,IAAI,QAAA,KAAa,GAAA,EAAK,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA;AACrD,IAAA,IAAI,UAAA,KAAe,EAAA,IAAM,UAAA,KAAe,aAAA,EAAe;AACrD,MAAA,gBAAA,CAAiB,OAAA,GAAU,EAAA;AAAA,IAC7B;AACA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAA8B;AAC1C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,UAAA,EAAW;AACX,MAAA;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,cAAc,IAAI,CAAA;AACnC,IAAA,QAAA,CAAS,EAAE,GAAG,IAAA,EAAM,gBAAA,EAAkB,UAAU,CAAA;AAChD,IAAA,UAAA,EAAW;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAgB;AACxC,IAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAC1B,IAAA,aAAA,CAAc,UAAA,EAAW;AACzB,IAAA,IAAI,QAAA,EAAU;AACd,IAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,uBAAA,CAAwB,KAAK,4BAA4B,CAAA;AAClF,IAAA,MAAM,OAAA,GAAU,4BAAA,CAA6B,KAAA,EAAO,GAAG,CAAA;AACvD,IAAA,QAAA,CAAS,OAAO,CAAA;AAChB,IAAA,UAAA,EAAW;AACX,IAAA,gBAAA,CAAiB,OAAA,GAAU,KAAA,KAAU,EAAA,GAAK,EAAA,GAAK,UAAA;AAAA,EACjD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KACrB,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,SAAS,EAAE,GAAG,KAAK,OAAA,EAAS,CAAC,GAAG,GAAG,CAAC,KAAK,OAAA,CAAQ,GAAG,CAAA,EAAE,EAAG,CAAA;AAC3E,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KACrB,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,SAAS,EAAE,GAAG,KAAK,OAAA,EAAS,CAAC,GAAG,GAAG,CAAC,KAAK,OAAA,CAAQ,GAAG,CAAA,EAAE,EAAG,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KACpB,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,QAAQ,EAAE,GAAG,KAAK,MAAA,EAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,MAAA,CAAO,GAAG,CAAA,EAAE,EAAG,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAmB;AACvC,IAAA,MAAM,UAAA,GAAa,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,CAAC,GAAG,GAAG,CAAC,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,EAAE;AAC9D,IAAA,MAAM,UAAA,GAA4B,CAAC,UAAA,CAAW,YAAA,GAAe,KAAK,IAAA,CAAK,UAAA;AACvE,IAAA,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,QAAQ,UAAA,EAAY,UAAA,EAAY,YAAY,CAAA;AAAA,EAC9D,CAAA;AACA,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAAuB,IAAA,CAAK,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,CAAA;AAE/E,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,UAAA,EAAY,QAAA,CAAS,KAAK,CAAA;AACvD,EAAA,MAAM,YAAA,GACJ,OAAO,gBAAA,IAAoB,kEAAA;AAC7B,EAAA,MAAM,aAAa,KAAA,EAAO,cAAA;AAE1B,EAAA,MAAM,+BACJ,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,QAAA,CAAS,KAAA;AAAA,oBACV,GAAA,CAAC,0BAAuB,QAAA,EAAoB;AAAA,GAAA,EAC9C,CAAA;AAGF,EAAA,MAAM,OAAA,GAAU,KAAA,mBACd,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAW,UAAA,EAAa,QAAA,EAAA,YAAA,EAAa,CAAA,mBAE5C,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,YAAA,EAAa,CAAA;AAGvD,EAAA,MAAM,SAAA,GAAY,EAAA;AAAA,IAChB,gFAAA;AAAA,IACA,QAAA,IAAY;AAAA,GACd;AAEA,EAAA,4BACG,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,YAAY,CAAA,EAC9C,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,IACA,QAAA,CAAS,8BACR,GAAA,CAAC,GAAA,EAAA,EAAE,WAAU,6CAAA,EAA+C,QAAA,EAAA,QAAA,CAAS,aAAY,CAAA,GAC/E,IAAA;AAAA,oBAEJ,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,SAAA,EACb,QAAA,EAAA;AAAA,MAAA,SAAA,mBAAY,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBAAA,EAAwB,iBAAM,CAAA,GAAO,IAAA;AAAA,sBAE/D,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,UAClD,aAAa,GAAA,CAAI,CAAC,sBACjB,IAAA,CAAC,OAAA,EAAA,EAAkB,WAAU,yBAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC3B,eAAA,EAAiB,MAAM,aAAA,CAAc,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC1C;AAAA;AAAA,aACF;AAAA,YACC,CAAA,CAAE;AAAA,WAAA,EAAA,EANO,CAAA,CAAE,GAOd,CACD;AAAA,SAAA,EACH,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,UAClD,aAAa,GAAA,CAAI,CAAC,sBACjB,IAAA,CAAC,OAAA,EAAA,EAAkB,WAAU,yBAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC3B,eAAA,EAAiB,MAAM,aAAA,CAAc,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC1C;AAAA;AAAA,aACF;AAAA,YACC,CAAA,CAAE;AAAA,WAAA,EAAA,EANO,CAAA,CAAE,GAOd,CACD,CAAA;AAAA,0BACD,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAoC,QAAA,EAAA,uEAAA,EAEjD;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,UACjD,YAAY,GAAA,CAAI,CAAC,sBAChB,IAAA,CAAC,OAAA,EAAA,EAAkB,WAAU,yBAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC1B,eAAA,EAAiB,MAAM,YAAA,CAAa,CAAA,CAAE,GAAG,CAAA;AAAA,gBACzC;AAAA;AAAA,aACF;AAAA,YACC,CAAA,CAAE;AAAA,WAAA,EAAA,EANO,CAAA,CAAE,GAOd,CACD;AAAA,SAAA,EACH,CAAA;AAAA,wBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA,0BAAA,EAAwB,CAAA;AAAA,UACnE,YAAY,GAAA,CAAI,CAAC,sBAChB,IAAA,CAAC,OAAA,EAAA,EAAkB,WAAU,yBAAA,EAC3B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,CAAA,CAAE,GAAG,CAAA;AAAA,gBAC1B,eAAA,EAAiB,MAAM,YAAA,CAAa,CAAA,CAAE,GAAG,CAAA;AAAA,gBACzC;AAAA;AAAA,aACF;AAAA,YACC,CAAA,CAAE;AAAA,WAAA,EAAA,EANO,CAAA,CAAE,GAOd,CACD,CAAA;AAAA,UACA,KAAK,MAAA,CAAO,YAAA,mBACX,IAAA,CAAC,OAAA,EAAA,EAAM,WAAU,YAAA,EACf,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,QAAA,EAAA,2BAAA,EAAyB,CAAA;AAAA,4BAClE,IAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO,IAAA,CAAK,UAAA,KAAe,EAAA,GAAK,SAAS,IAAA,CAAK,UAAA;AAAA,gBAC9C,eAAe,CAAC,CAAA,KACd,cAAc,CAAA,KAAM,MAAA,GAAS,KAAM,CAAmB,CAAA;AAAA,gBAExD,QAAA;AAAA,gBAEA,QAAA,EAAA;AAAA,kCAAA,GAAA,CAAC,iBAAc,SAAA,EAAU,aAAA,EACvB,8BAAC,WAAA,EAAA,EAAY,WAAA,EAAY,UAAI,CAAA,EAC/B,CAAA;AAAA,kCACA,GAAA,CAAC,iBACE,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,GAAA,qBACnB,GAAA,CAAC,cAAqC,KAAA,EAAO,GAAA,CAAI,UAAU,EAAA,GAAK,MAAA,GAAS,IAAI,KAAA,EAC1E,QAAA,EAAA,GAAA,CAAI,SADU,GAAA,CAAI,KAAA,IAAS,MAE9B,CACD,CAAA,EACH;AAAA;AAAA;AAAA;AACF,WAAA,EACF,CAAA,GACE;AAAA,SAAA,EACN;AAAA,OAAA,EACF,CAAA;AAAA,sBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAM,SAAA,EAAU,qBAAA,EACd,QAAA,EAAA,aAAA,CAAc,QAAA,EAAU,SAAS,sBAAA,EACpC,CAAA;AAAA,wBACA,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sBAAA;AAAA,YACV,WAAA,EAAY,uHAAA;AAAA,YACZ,KAAA,EACE,OAAO,aAAA,CAAc,KAAA,KAAU,QAAA,GAC3B,aAAA,CAAc,KAAA,GACd,aAAA,CAAc,KAAA,IAAS,IAAA,GACrB,EAAA,GACA,MAAA,CAAO,cAAc,KAAK,CAAA;AAAA,YAElC,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAChD,QAAA,EAAU,YAAY,aAAA,CAAc;AAAA;AAAA;AACtC,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ","file":"OBGExaminationWidget-POVLALMA.mjs","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":[],"mappings":"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","file":"OBGExaminationWidget-HQKTHSOZ.mjs","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"]}
@@ -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 chunk6YX37XBM_cjs = require('./chunk-6YX37XBM.cjs');
8
+ var chunk7DISRJAB_cjs = require('./chunk-7DISRJAB.cjs');
9
9
  var chunk4KSZUIJE_cjs = require('./chunk-4KSZUIJE.cjs');
10
- var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
10
+ var chunkTB33A4PD_cjs = require('./chunk-TB33A4PD.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 } = chunkSHQHDSA4_cjs.useField(fieldId);
52
- const clinicalField = chunkSHQHDSA4_cjs.useField(CLINICAL_EXAMINATION_FIELD);
53
- const { state } = chunk6YX37XBM_cjs.useForm();
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();
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 } = chunkSHQHDSA4_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
60
+ const { prose } = chunkTB33A4PD_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 } = chunkSHQHDSA4_cjs.parseProseAndChipTokens(cur, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
65
+ const { prose: curProse } = chunkTB33A4PD_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 = chunkSHQHDSA4_cjs.composeProseAndChips(proseInput, chunkQKJ7BQSR_cjs.obgExaminationChipLabels(next));
68
+ const composed = chunkTB33A4PD_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 } = chunkSHQHDSA4_cjs.parseProseAndChipTokens(raw, chunkQKJ7BQSR_cjs.OBG_EXAM_ALLOWED_CHIP_LABELS);
89
+ const { prose, chips } = chunkTB33A4PD_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-F2ZNSP2M.cjs.map
215
- //# sourceMappingURL=OBGExaminationWidget-F2ZNSP2M.cjs.map
214
+ //# sourceMappingURL=OBGExaminationWidget-MRTGWLXJ.cjs.map
215
+ //# sourceMappingURL=OBGExaminationWidget-MRTGWLXJ.cjs.map