formanitor 0.1.10 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs +32 -0
- package/dist/AddInvestigationWidget-G7NPTSFY.cjs.map +1 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs +30 -0
- package/dist/AddInvestigationWidget-TQUKTGAW.mjs.map +1 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs +32 -0
- package/dist/AddMedicationWidget-26RHKIA6.cjs.map +1 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs +30 -0
- package/dist/AddMedicationWidget-I5UIT3WG.mjs.map +1 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs +278 -0
- package/dist/AddProcedureWidget-B6OUF3BM.cjs.map +1 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs +276 -0
- package/dist/AddProcedureWidget-NB46COB6.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs +298 -0
- package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs.map +1 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs +300 -0
- package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs.map +1 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs +61 -0
- package/dist/DateTimeWidget-72YUK7PX.cjs.map +1 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs +59 -0
- package/dist/DateTimeWidget-WKQIEQSA.mjs.map +1 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs +72 -0
- package/dist/DateWidget-K2TVTZ7Z.mjs.map +1 -0
- package/dist/DateWidget-SYDMSGWO.cjs +74 -0
- package/dist/DateWidget-SYDMSGWO.cjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs +184 -0
- package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs.map +1 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs +190 -0
- package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs +15 -0
- package/dist/DifferentialDiagnosisWidget-FENJP245.mjs.map +1 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs +17 -0
- package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs +161 -0
- package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs.map +1 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs +163 -0
- package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map +1 -0
- package/dist/EditableTable-LPAYCK36.mjs +279 -0
- package/dist/EditableTable-LPAYCK36.mjs.map +1 -0
- package/dist/EditableTable-YB4IC3ZK.cjs +281 -0
- package/dist/EditableTable-YB4IC3ZK.cjs.map +1 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs +285 -0
- package/dist/FollowupWidget-EEKOI2TW.cjs.map +1 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs +283 -0
- package/dist/FollowupWidget-NJ4QDBOG.mjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs +93 -0
- package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs.map +1 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs +91 -0
- package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs.map +1 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs +528 -0
- package/dist/GsExaminationWidget-EX6C3EF5.cjs.map +1 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs +526 -0
- package/dist/GsExaminationWidget-MEIUHRQQ.mjs.map +1 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs +90 -0
- package/dist/GsGradingWidget-4UPOEYNL.mjs.map +1 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs +92 -0
- package/dist/GsGradingWidget-IV3UF63W.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs +398 -0
- package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs.map +1 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs +396 -0
- package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs.map +1 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs +55 -0
- package/dist/HiddenVitalsWidget-AMH32HT2.cjs.map +1 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs +53 -0
- package/dist/HiddenVitalsWidget-W23IFSEF.mjs.map +1 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs +234 -0
- package/dist/LensAssessmentWidget-LSHBUTT5.cjs.map +1 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs +232 -0
- package/dist/LensAssessmentWidget-SJ6YUTSN.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs +74 -0
- package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs.map +1 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs +76 -0
- package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs.map +1 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs +213 -0
- package/dist/OBGExaminationWidget-BK4ERETW.mjs.map +1 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs +215 -0
- package/dist/OBGExaminationWidget-SMFZ2WCL.cjs.map +1 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs +519 -0
- package/dist/OBGPathwayWidget-5YTUDBEH.cjs.map +1 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs +517 -0
- package/dist/OBGPathwayWidget-U5BCAESB.mjs.map +1 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs +1115 -0
- package/dist/ObstetricHistoryWidget-GC63CB3U.cjs.map +1 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs +1113 -0
- package/dist/ObstetricHistoryWidget-WD572Q7H.mjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs +91 -0
- package/dist/OphthalDiagnosisWidget-QXFK446I.cjs.map +1 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs +89 -0
- package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs.map +1 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs +1329 -0
- package/dist/OphthalmologyWidget-CRQMN5QU.mjs.map +1 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs +1331 -0
- package/dist/OphthalmologyWidget-U2HQMZ4J.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs +368 -0
- package/dist/OrthopedicExamWidget-LP7VN3W5.cjs.map +1 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs +366 -0
- package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs.map +1 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs +153 -0
- package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs.map +1 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs +151 -0
- package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs.map +1 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs +6 -0
- package/dist/ReadOnlyTable-4Y2XW4MX.mjs.map +1 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs +15 -0
- package/dist/ReadOnlyTable-L7G6GWEJ.cjs.map +1 -0
- package/dist/ReferralWidget-IYTS32TS.mjs +169 -0
- package/dist/ReferralWidget-IYTS32TS.mjs.map +1 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs +171 -0
- package/dist/ReferralWidget-PDNEKHFO.cjs.map +1 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs +11 -0
- package/dist/RichTextWidget-5OOJ2LJN.mjs.map +1 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs +24 -0
- package/dist/RichTextWidget-XWLOHKLE.cjs.map +1 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs +19 -0
- package/dist/SmartTextarea-L7Q4CORK.cjs.map +1 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs +10 -0
- package/dist/SmartTextarea-ZCXGMZLG.mjs.map +1 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs +226 -0
- package/dist/SuggestionTextareaWidget-2TEITBPF.cjs.map +1 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs +215 -0
- package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs +144 -0
- package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs.map +1 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs +146 -0
- package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs +273 -0
- package/dist/UrologyExaminationWidget-74L3IN2X.cjs.map +1 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs +271 -0
- package/dist/UrologyExaminationWidget-IQEBP6CI.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs +153 -0
- package/dist/UrologyPathwayWidget-S4QY6RD6.mjs.map +1 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs +155 -0
- package/dist/UrologyPathwayWidget-UJY5EW2G.cjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs +469 -0
- package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs.map +1 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs +471 -0
- package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs.map +1 -0
- package/dist/VitalsWidget-44UWQGIF.cjs +208 -0
- package/dist/VitalsWidget-44UWQGIF.cjs.map +1 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs +187 -0
- package/dist/VitalsWidget-MBYDGC7U.mjs.map +1 -0
- package/dist/chunk-4BAKQIPJ.mjs +27 -0
- package/dist/chunk-4BAKQIPJ.mjs.map +1 -0
- package/dist/chunk-4KSZUIJE.cjs +143 -0
- package/dist/chunk-4KSZUIJE.cjs.map +1 -0
- package/dist/chunk-4PMNVBJD.mjs +121 -0
- package/dist/chunk-4PMNVBJD.mjs.map +1 -0
- package/dist/chunk-5E3APMY6.cjs +54 -0
- package/dist/chunk-5E3APMY6.cjs.map +1 -0
- package/dist/chunk-AIZ3XYEZ.cjs +551 -0
- package/dist/chunk-AIZ3XYEZ.cjs.map +1 -0
- package/dist/chunk-AZHTIUOL.mjs +116 -0
- package/dist/chunk-AZHTIUOL.mjs.map +1 -0
- package/dist/chunk-AZSAPO2V.cjs +174 -0
- package/dist/chunk-AZSAPO2V.cjs.map +1 -0
- package/dist/chunk-AZVJU7NZ.mjs +137 -0
- package/dist/chunk-AZVJU7NZ.mjs.map +1 -0
- package/dist/chunk-B3GBIAHZ.mjs +285 -0
- package/dist/chunk-B3GBIAHZ.mjs.map +1 -0
- package/dist/chunk-BMNY7F6H.mjs +148 -0
- package/dist/chunk-BMNY7F6H.mjs.map +1 -0
- package/dist/chunk-BU4ZEAAP.mjs +102 -0
- package/dist/chunk-BU4ZEAAP.mjs.map +1 -0
- package/dist/chunk-CTW65YW2.cjs +388 -0
- package/dist/chunk-CTW65YW2.cjs.map +1 -0
- package/dist/chunk-DE7VZVKR.cjs +140 -0
- package/dist/chunk-DE7VZVKR.cjs.map +1 -0
- package/dist/chunk-DZYV47QC.mjs +54 -0
- package/dist/chunk-DZYV47QC.mjs.map +1 -0
- package/dist/chunk-E7WUDHSA.cjs +127 -0
- package/dist/chunk-E7WUDHSA.cjs.map +1 -0
- package/dist/chunk-FHHISVCH.cjs +13 -0
- package/dist/chunk-FHHISVCH.cjs.map +1 -0
- package/dist/chunk-FZEEWRW3.cjs +77 -0
- package/dist/chunk-FZEEWRW3.cjs.map +1 -0
- package/dist/chunk-GFDE2KZC.mjs +228 -0
- package/dist/chunk-GFDE2KZC.mjs.map +1 -0
- package/dist/chunk-GNZWSVTB.mjs +29 -0
- package/dist/chunk-GNZWSVTB.mjs.map +1 -0
- package/dist/chunk-GXXWMHAA.mjs +49 -0
- package/dist/chunk-GXXWMHAA.mjs.map +1 -0
- package/dist/chunk-GZPCYSJK.mjs +104 -0
- package/dist/chunk-GZPCYSJK.mjs.map +1 -0
- package/dist/chunk-HEFZA2AH.mjs +22 -0
- package/dist/chunk-HEFZA2AH.mjs.map +1 -0
- package/dist/chunk-I4AV6BQF.mjs +10 -0
- package/dist/chunk-I4AV6BQF.mjs.map +1 -0
- package/dist/chunk-IDSBJOFY.cjs +1885 -0
- package/dist/chunk-IDSBJOFY.cjs.map +1 -0
- package/dist/chunk-IFMQKLNW.mjs +39 -0
- package/dist/chunk-IFMQKLNW.mjs.map +1 -0
- package/dist/chunk-IFSKLIS2.cjs +12 -0
- package/dist/chunk-IFSKLIS2.cjs.map +1 -0
- package/dist/chunk-IKAKE7TR.mjs +527 -0
- package/dist/chunk-IKAKE7TR.mjs.map +1 -0
- package/dist/chunk-JE6VXRWW.cjs +86 -0
- package/dist/chunk-JE6VXRWW.cjs.map +1 -0
- package/dist/chunk-JMGUUFOJ.cjs +45 -0
- package/dist/chunk-JMGUUFOJ.cjs.map +1 -0
- package/dist/chunk-JNVSA77L.cjs +236 -0
- package/dist/chunk-JNVSA77L.cjs.map +1 -0
- package/dist/chunk-KJA5BLGX.cjs +31 -0
- package/dist/chunk-KJA5BLGX.cjs.map +1 -0
- package/dist/chunk-KMJOTMUQ.cjs +109 -0
- package/dist/chunk-KMJOTMUQ.cjs.map +1 -0
- package/dist/chunk-KPGTPJDH.cjs +32 -0
- package/dist/chunk-KPGTPJDH.cjs.map +1 -0
- package/dist/chunk-LBWB7MYU.cjs +287 -0
- package/dist/chunk-LBWB7MYU.cjs.map +1 -0
- package/dist/chunk-LGGOBIEA.mjs +61 -0
- package/dist/chunk-LGGOBIEA.mjs.map +1 -0
- package/dist/chunk-LQYWMYEC.mjs +28 -0
- package/dist/chunk-LQYWMYEC.mjs.map +1 -0
- package/dist/chunk-MIUUO4CI.mjs +361 -0
- package/dist/chunk-MIUUO4CI.mjs.map +1 -0
- package/dist/chunk-N4L76SHJ.cjs +65 -0
- package/dist/chunk-N4L76SHJ.cjs.map +1 -0
- package/dist/chunk-NJJTIL3U.cjs +73 -0
- package/dist/chunk-NJJTIL3U.cjs.map +1 -0
- package/dist/chunk-O3VQBPEW.cjs +72 -0
- package/dist/chunk-O3VQBPEW.cjs.map +1 -0
- package/dist/chunk-P62377LB.cjs +27 -0
- package/dist/chunk-P62377LB.cjs.map +1 -0
- package/dist/chunk-PHADAQSH.cjs +49 -0
- package/dist/chunk-PHADAQSH.cjs.map +1 -0
- package/dist/chunk-PZBJYPWW.cjs +52 -0
- package/dist/chunk-PZBJYPWW.cjs.map +1 -0
- package/dist/chunk-QKJ7BQSR.cjs +538 -0
- package/dist/chunk-QKJ7BQSR.cjs.map +1 -0
- package/dist/chunk-QS6WG2XJ.cjs +56 -0
- package/dist/chunk-QS6WG2XJ.cjs.map +1 -0
- package/dist/chunk-S7EMPE2D.cjs +104 -0
- package/dist/chunk-S7EMPE2D.cjs.map +1 -0
- package/dist/chunk-SCMXLRX5.mjs +42 -0
- package/dist/chunk-SCMXLRX5.mjs.map +1 -0
- package/dist/chunk-TJHG5WHX.cjs +47 -0
- package/dist/chunk-TJHG5WHX.cjs.map +1 -0
- package/dist/chunk-UGGUIXUS.cjs +41 -0
- package/dist/chunk-UGGUIXUS.cjs.map +1 -0
- package/dist/chunk-UULLSS4O.mjs +82 -0
- package/dist/chunk-UULLSS4O.mjs.map +1 -0
- package/dist/chunk-VNFBUAZD.mjs +25 -0
- package/dist/chunk-VNFBUAZD.mjs.map +1 -0
- package/dist/chunk-VPU66PI6.mjs +11 -0
- package/dist/chunk-VPU66PI6.mjs.map +1 -0
- package/dist/chunk-WYVXXEZI.mjs +46 -0
- package/dist/chunk-WYVXXEZI.mjs.map +1 -0
- package/dist/chunk-XDUVO3IZ.mjs +547 -0
- package/dist/chunk-XDUVO3IZ.mjs.map +1 -0
- package/dist/chunk-XR2ZM654.mjs +30 -0
- package/dist/chunk-XR2ZM654.mjs.map +1 -0
- package/dist/chunk-Y7TIWH4I.mjs +25 -0
- package/dist/chunk-Y7TIWH4I.mjs.map +1 -0
- package/dist/chunk-YEFM2ERQ.cjs +143 -0
- package/dist/chunk-YEFM2ERQ.cjs.map +1 -0
- package/dist/chunk-YYPMIUDW.mjs +69 -0
- package/dist/chunk-YYPMIUDW.mjs.map +1 -0
- package/dist/chunk-ZGPHTPAN.mjs +1851 -0
- package/dist/chunk-ZGPHTPAN.mjs.map +1 -0
- package/dist/chunk-ZSOIQVB3.mjs +75 -0
- package/dist/chunk-ZSOIQVB3.mjs.map +1 -0
- package/dist/index.cjs +1596 -14537
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -767
- package/dist/index.d.ts +4 -767
- package/dist/index.mjs +1358 -14346
- package/dist/index.mjs.map +1 -1
- package/dist/read-only-table.cjs +15 -0
- package/dist/read-only-table.cjs.map +1 -0
- package/dist/read-only-table.d.cts +10 -0
- package/dist/read-only-table.d.ts +10 -0
- package/dist/read-only-table.mjs +6 -0
- package/dist/read-only-table.mjs.map +1 -0
- package/dist/rich-text.cjs +24 -0
- package/dist/rich-text.cjs.map +1 -0
- package/dist/rich-text.d.cts +8 -0
- package/dist/rich-text.d.ts +8 -0
- package/dist/rich-text.mjs +11 -0
- package/dist/rich-text.mjs.map +1 -0
- package/dist/richTextClassName--8wkuHkW.d.cts +10 -0
- package/dist/richTextClassName--8wkuHkW.d.ts +10 -0
- package/dist/smart.cjs +23 -0
- package/dist/smart.cjs.map +1 -0
- package/dist/smart.d.cts +23 -0
- package/dist/smart.d.ts +23 -0
- package/dist/smart.mjs +10 -0
- package/dist/smart.mjs.map +1 -0
- package/dist/types-D0iYXUOo.d.cts +736 -0
- package/dist/types-D0iYXUOo.d.ts +736 -0
- package/package.json +20 -2
- package/src/styles/index.css +35 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/date-picker.tsx","../src/ui/widgets/DateWidget.tsx"],"names":["CalendarIcon","Calendar","jsxs","jsx"],"mappings":";;;;;;;;;;;;;AAmBO,SAAS,WAAW,EAAE,IAAA,EAAM,SAAS,SAAA,EAAW,WAAA,GAAc,eAAc,EAAoB;AACrG,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,SAAA;AAAA,QACT,SAAA,EAAW,EAAA;AAAA,UACT,+CAAA;AAAA,UACA,CAAC,IAAA,IAAQ,uBAAA;AAAA,UACT;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAACA,QAAA,EAAA,EAAa,WAAU,cAAA,EAAe,CAAA;AAAA,UACtC,OAAO,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,mBAAI,GAAA,CAAC,UAAM,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA,KACnD,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,YAAA,EACxB,QAAA,kBAAA,GAAA;AAAA,MAACC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,YAAA,EAAY;AAAA;AAAA,KACd,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC/BO,IAAM,UAAA,GAA4C,CAAC,EAAE,OAAA,EAAQ,KAAM;AACxE,EAAA,MAAM,EAAE,UAAU,KAAA,EAAO,QAAA,EAAU,YAAY,KAAA,EAAO,OAAA,EAAQ,GAAI,QAAA,CAAS,OAAO,CAAA;AAClF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,OAAA,EAAQ;AAC1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,KAAU,WAAW,KAAA,CAAM,eAAA,CAAA;AAE/C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,SAAA,GAAY,eAAe,QAAQ,CAAA;AAEzC,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,iBAAA,CAAkB,QAAA,EAAU,WAAW,CAAA,EACpD,QAAA,EAAA;AAAA,IAAA,SAAA,mBACCA,KAAC,KAAA,EAAA,EAAM,OAAA,EAAS,SAAS,SAAA,EAAW,eAAA,CAAgB,QAAQ,CAAA,EACzD,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,KAAA;AAAA,MAAO,GAAA;AAAA,sBACjBC,GAAAA,CAAC,sBAAA,EAAA,EAAuB,QAAA,EAAoB;AAAA,KAAA,EAC9C,CAAA,GACE,IAAA;AAAA,oBACJA,GAAAA,CAAC,KAAA,EAAA,EAAI,QAAQ,MAAM,UAAA,IACjB,QAAA,kBAAAA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA;AAAA,QAChC,OAAA,EAAS,CAAC,IAAA,KAAS,QAAA,CAAS,OAAO,IAAA,CAAK,WAAA,KAAgB,MAAS,CAAA;AAAA,QACjE,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,SAAA,EAAW,iBAAA;AAAA,UACT,QAAA;AAAA,UACA,YAAY,uBAAA,GAA0B;AAAA;AACxC;AAAA,KACF,EACF,CAAA;AAAA,IACC,SAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,eAAA,CAAgB,QAAA,EAAU,sBAAsB,CAAA,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAE5E,CAAA;AAEJ","file":"DateWidget-K2TVTZ7Z.mjs","sourcesContent":["import { format } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\n\nexport interface DatePickerProps {\n date?: Date\n setDate?: (date: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nexport function DatePicker({ date, setDate, className, placeholder = \"Pick a date\" }: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !date && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, \"PPP\") : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={setDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DatePicker } from '../shadcn/date-picker';\nimport { Label } from '../shadcn/label';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const DateWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div onBlur={() => setTouched()}>\n <DatePicker\n date={value ? new Date(value) : undefined}\n setDate={(date) => setValue(date ? date.toISOString() : undefined)}\n placeholder={fieldDef.placeholder}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500 w-full' : 'w-full',\n )}\n />\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n"]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
|
|
4
|
+
var chunkKPGTPJDH_cjs = require('./chunk-KPGTPJDH.cjs');
|
|
5
|
+
var chunkAZSAPO2V_cjs = require('./chunk-AZSAPO2V.cjs');
|
|
6
|
+
require('./chunk-4KSZUIJE.cjs');
|
|
7
|
+
var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
|
|
8
|
+
var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
|
|
9
|
+
var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
|
|
10
|
+
var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
|
|
11
|
+
require('react');
|
|
12
|
+
var dateFns = require('date-fns');
|
|
13
|
+
var lucideReact = require('lucide-react');
|
|
14
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
15
|
+
|
|
16
|
+
function DatePicker({ date, setDate, className, placeholder = "Pick a date" }) {
|
|
17
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(chunkAZSAPO2V_cjs.Popover, { children: [
|
|
18
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkAZSAPO2V_cjs.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19
|
+
chunkO3VQBPEW_cjs.Button,
|
|
20
|
+
{
|
|
21
|
+
variant: "outline",
|
|
22
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
23
|
+
"w-[280px] justify-start text-left font-normal",
|
|
24
|
+
!date && "text-muted-foreground",
|
|
25
|
+
className
|
|
26
|
+
),
|
|
27
|
+
children: [
|
|
28
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Calendar, { className: "mr-2 h-4 w-4" }),
|
|
29
|
+
date ? dateFns.format(date, "PPP") : /* @__PURE__ */ jsxRuntime.jsx("span", { children: placeholder })
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
) }),
|
|
33
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkAZSAPO2V_cjs.PopoverContent, { className: "w-auto p-0", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
34
|
+
chunkAZSAPO2V_cjs.Calendar,
|
|
35
|
+
{
|
|
36
|
+
mode: "single",
|
|
37
|
+
selected: date,
|
|
38
|
+
onSelect: setDate,
|
|
39
|
+
initialFocus: true
|
|
40
|
+
}
|
|
41
|
+
) })
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
var DateWidget = ({ fieldId }) => {
|
|
45
|
+
const { fieldDef, value, setValue, setTouched, error, touched } = chunkIDSBJOFY_cjs.useField(fieldId);
|
|
46
|
+
const { state } = chunkKPGTPJDH_cjs.useForm();
|
|
47
|
+
const showError = !!error && (touched || state.submitAttempted);
|
|
48
|
+
if (!fieldDef) return null;
|
|
49
|
+
const showLabel = chunk5E3APMY6_cjs.isLabelVisible(fieldDef);
|
|
50
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(fieldDef, "space-y-2"), children: [
|
|
51
|
+
showLabel ? /* @__PURE__ */ jsxRuntime.jsxs(chunkJMGUUFOJ_cjs.Label, { htmlFor: fieldId, className: chunk5E3APMY6_cjs.fieldLabelClass(fieldDef), children: [
|
|
52
|
+
fieldDef.label,
|
|
53
|
+
" ",
|
|
54
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5E3APMY6_cjs.FieldRequiredIndicator, { fieldDef })
|
|
55
|
+
] }) : null,
|
|
56
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { onBlur: () => setTouched(), children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
57
|
+
DatePicker,
|
|
58
|
+
{
|
|
59
|
+
date: value ? new Date(value) : void 0,
|
|
60
|
+
setDate: (date) => setValue(date ? date.toISOString() : void 0),
|
|
61
|
+
placeholder: fieldDef.placeholder,
|
|
62
|
+
className: chunk5E3APMY6_cjs.fieldControlClass(
|
|
63
|
+
fieldDef,
|
|
64
|
+
showError ? "border-red-500 w-full" : "w-full"
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
) }),
|
|
68
|
+
showError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(fieldDef, "text-xs text-red-500"), children: error })
|
|
69
|
+
] });
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
exports.DateWidget = DateWidget;
|
|
73
|
+
//# sourceMappingURL=DateWidget-SYDMSGWO.cjs.map
|
|
74
|
+
//# sourceMappingURL=DateWidget-SYDMSGWO.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/shadcn/date-picker.tsx","../src/ui/widgets/DateWidget.tsx"],"names":["Popover","jsx","PopoverTrigger","jsxs","Button","cn","CalendarIcon","format","PopoverContent","Calendar","useField","useForm","isLabelVisible","fieldWrapperClass","Label","fieldLabelClass","FieldRequiredIndicator","fieldControlClass","fieldErrorClass"],"mappings":";;;;;;;;;;;;;;;AAmBO,SAAS,WAAW,EAAE,IAAA,EAAM,SAAS,SAAA,EAAW,WAAA,GAAc,eAAc,EAAoB;AACrG,EAAA,uCACGA,yBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,gCAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAAC,eAAA;AAAA,MAACC,wBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,SAAA;AAAA,QACT,SAAA,EAAWC,oBAAA;AAAA,UACT,+CAAA;AAAA,UACA,CAAC,IAAA,IAAQ,uBAAA;AAAA,UACT;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAJ,cAAA,CAACK,oBAAA,EAAA,EAAa,WAAU,cAAA,EAAe,CAAA;AAAA,UACtC,OAAOC,cAAA,CAAO,IAAA,EAAM,KAAK,CAAA,mBAAIN,cAAA,CAAC,UAAM,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA,KACnD,EACF,CAAA;AAAA,oBACAA,cAAA,CAACO,gCAAA,EAAA,EAAe,SAAA,EAAU,YAAA,EACxB,QAAA,kBAAAP,cAAA;AAAA,MAACQ,0BAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,QAAA,EAAU,IAAA;AAAA,QACV,QAAA,EAAU,OAAA;AAAA,QACV,YAAA,EAAY;AAAA;AAAA,KACd,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC/BO,IAAM,UAAA,GAA4C,CAAC,EAAE,OAAA,EAAQ,KAAM;AACxE,EAAA,MAAM,EAAE,UAAU,KAAA,EAAO,QAAA,EAAU,YAAY,KAAA,EAAO,OAAA,EAAQ,GAAIC,0BAAA,CAAS,OAAO,CAAA;AAClF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAIC,yBAAA,EAAQ;AAC1B,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,KAAA,KAAU,WAAW,KAAA,CAAM,eAAA,CAAA;AAE/C,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,MAAM,SAAA,GAAYC,iCAAe,QAAQ,CAAA;AAEzC,EAAA,uBACET,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAWU,mCAAA,CAAkB,QAAA,EAAU,WAAW,CAAA,EACpD,QAAA,EAAA;AAAA,IAAA,SAAA,mBACCV,gBAACW,uBAAA,EAAA,EAAM,OAAA,EAAS,SAAS,SAAA,EAAWC,iCAAA,CAAgB,QAAQ,CAAA,EACzD,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,KAAA;AAAA,MAAO,GAAA;AAAA,sBACjBd,cAAAA,CAACe,wCAAA,EAAA,EAAuB,QAAA,EAAoB;AAAA,KAAA,EAC9C,CAAA,GACE,IAAA;AAAA,oBACJf,cAAAA,CAAC,KAAA,EAAA,EAAI,QAAQ,MAAM,UAAA,IACjB,QAAA,kBAAAA,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,KAAA,GAAQ,IAAI,IAAA,CAAK,KAAK,CAAA,GAAI,MAAA;AAAA,QAChC,OAAA,EAAS,CAAC,IAAA,KAAS,QAAA,CAAS,OAAO,IAAA,CAAK,WAAA,KAAgB,MAAS,CAAA;AAAA,QACjE,aAAa,QAAA,CAAS,WAAA;AAAA,QACtB,SAAA,EAAWgB,mCAAA;AAAA,UACT,QAAA;AAAA,UACA,YAAY,uBAAA,GAA0B;AAAA;AACxC;AAAA,KACF,EACF,CAAA;AAAA,IACC,SAAA,oBACChB,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAWiB,iCAAA,CAAgB,QAAA,EAAU,sBAAsB,CAAA,EAAI,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAE5E,CAAA;AAEJ","file":"DateWidget-SYDMSGWO.cjs","sourcesContent":["import { format } from \"date-fns\"\nimport { Calendar as CalendarIcon } from \"lucide-react\"\n\nimport { cn } from \"../../core/utils\"\nimport { Button } from \"./button\"\nimport { Calendar } from \"./calendar\"\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"./popover\"\n\nexport interface DatePickerProps {\n date?: Date\n setDate?: (date: Date | undefined) => void\n className?: string\n placeholder?: string\n}\n\nexport function DatePicker({ date, setDate, className, placeholder = \"Pick a date\" }: DatePickerProps) {\n return (\n <Popover>\n <PopoverTrigger asChild>\n <Button\n variant={\"outline\"}\n className={cn(\n \"w-[280px] justify-start text-left font-normal\",\n !date && \"text-muted-foreground\",\n className\n )}\n >\n <CalendarIcon className=\"mr-2 h-4 w-4\" />\n {date ? format(date, \"PPP\") : <span>{placeholder}</span>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-0\">\n <Calendar\n mode=\"single\"\n selected={date}\n onSelect={setDate}\n initialFocus\n />\n </PopoverContent>\n </Popover>\n )\n}\n\n","import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { DatePicker } from '../shadcn/date-picker';\nimport { Label } from '../shadcn/label';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nexport const DateWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, touched } = useField(fieldId);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {showLabel ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n ) : null}\n <div onBlur={() => setTouched()}>\n <DatePicker\n date={value ? new Date(value) : undefined}\n setDate={(date) => setValue(date ? date.toISOString() : undefined)}\n placeholder={fieldDef.placeholder}\n className={fieldControlClass(\n fieldDef,\n showError ? 'border-red-500 w-full' : 'w-full',\n )}\n />\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n"]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { Textarea } from './chunk-4BAKQIPJ.mjs';
|
|
2
|
+
import { getThemeConfig } from './chunk-Y7TIWH4I.mjs';
|
|
3
|
+
import { FieldRequiredIndicator, isLabelVisible, fieldLabelClass, fieldControlClass, fieldErrorClass, fieldWrapperClass } from './chunk-WYVXXEZI.mjs';
|
|
4
|
+
import { useForm } from './chunk-XR2ZM654.mjs';
|
|
5
|
+
import { useField, useFieldHandlers } from './chunk-ZGPHTPAN.mjs';
|
|
6
|
+
import { Label } from './chunk-HEFZA2AH.mjs';
|
|
7
|
+
import { cn } from './chunk-VPU66PI6.mjs';
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
10
|
+
|
|
11
|
+
function normalizeDiagnosisGrades(payload) {
|
|
12
|
+
const result = [];
|
|
13
|
+
const pushGroup = (conditionRaw, gradesRaw) => {
|
|
14
|
+
const condition = typeof conditionRaw === "string" ? conditionRaw.trim() : "";
|
|
15
|
+
if (!condition) return;
|
|
16
|
+
if (!Array.isArray(gradesRaw)) return;
|
|
17
|
+
const grades = Array.from(
|
|
18
|
+
new Set(
|
|
19
|
+
gradesRaw.map((grade) => typeof grade === "string" ? grade.trim() : "").filter(Boolean)
|
|
20
|
+
)
|
|
21
|
+
);
|
|
22
|
+
if (grades.length === 0) return;
|
|
23
|
+
result.push({ condition, grades });
|
|
24
|
+
};
|
|
25
|
+
const asArrayResponse = payload;
|
|
26
|
+
if (Array.isArray(asArrayResponse?.diagnosisGrades)) {
|
|
27
|
+
asArrayResponse.diagnosisGrades.forEach((item) => {
|
|
28
|
+
pushGroup(item?.condition, item?.grades);
|
|
29
|
+
});
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
const asMapResponse = payload;
|
|
33
|
+
const mapLike = asMapResponse?.field === "diagnosisgrade" && asMapResponse?.value && typeof asMapResponse.value === "object" ? asMapResponse.value : null;
|
|
34
|
+
if (mapLike) {
|
|
35
|
+
Object.entries(mapLike).forEach(([condition, grades]) => {
|
|
36
|
+
pushGroup(condition, grades);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
var DiagnosisTextareaWidget = ({ fieldId }) => {
|
|
42
|
+
const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);
|
|
43
|
+
const { state } = useForm();
|
|
44
|
+
const handler = useFieldHandlers(fieldId);
|
|
45
|
+
const def = fieldDef;
|
|
46
|
+
const [gradeGroups, setGradeGroups] = React.useState([]);
|
|
47
|
+
const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);
|
|
48
|
+
const normalized = React.useMemo(() => {
|
|
49
|
+
const raw = value;
|
|
50
|
+
if (typeof raw === "string") {
|
|
51
|
+
return { text: raw, selectedGradesByCondition: {} };
|
|
52
|
+
}
|
|
53
|
+
if (!raw || typeof raw !== "object") {
|
|
54
|
+
return { text: "", selectedGradesByCondition: {} };
|
|
55
|
+
}
|
|
56
|
+
const text = typeof raw.text === "string" ? raw.text : "";
|
|
57
|
+
const mapRaw = raw.selectedGradesByCondition;
|
|
58
|
+
let selectedGradesByCondition = {};
|
|
59
|
+
if (mapRaw && typeof mapRaw === "object" && !Array.isArray(mapRaw)) {
|
|
60
|
+
const entries = Object.entries(mapRaw);
|
|
61
|
+
for (const [condition, gradeRaw] of entries) {
|
|
62
|
+
if (typeof condition !== "string") continue;
|
|
63
|
+
if (typeof gradeRaw === "string" && gradeRaw.trim()) {
|
|
64
|
+
selectedGradesByCondition[condition] = gradeRaw;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const sg = raw.selectedGrade;
|
|
69
|
+
if (sg && typeof sg === "object" && typeof sg.condition === "string" && typeof sg.grade === "string") {
|
|
70
|
+
const condition = sg.condition.trim();
|
|
71
|
+
const grade = sg.grade.trim();
|
|
72
|
+
if (condition && grade && !selectedGradesByCondition[condition]) {
|
|
73
|
+
selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return { text, selectedGradesByCondition };
|
|
77
|
+
}, [value]);
|
|
78
|
+
const textValue = normalized.text;
|
|
79
|
+
const showError = !!error && (touched || state.submitAttempted);
|
|
80
|
+
React.useEffect(() => {
|
|
81
|
+
const query = textValue.trim();
|
|
82
|
+
const fetchGrades = handler.onFetchDiagnosisGrades;
|
|
83
|
+
const debounceMs = def?.debounceDelay ?? 1e3;
|
|
84
|
+
if (!query || !fetchGrades) {
|
|
85
|
+
setGradeGroups([]);
|
|
86
|
+
setIsLoadingGrades(false);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
let isActive = true;
|
|
90
|
+
const timer = window.setTimeout(async () => {
|
|
91
|
+
setIsLoadingGrades(true);
|
|
92
|
+
try {
|
|
93
|
+
const response = await fetchGrades(query);
|
|
94
|
+
if (!isActive) return;
|
|
95
|
+
setGradeGroups(normalizeDiagnosisGrades(response));
|
|
96
|
+
} catch {
|
|
97
|
+
if (!isActive) return;
|
|
98
|
+
setGradeGroups([]);
|
|
99
|
+
} finally {
|
|
100
|
+
if (isActive) setIsLoadingGrades(false);
|
|
101
|
+
}
|
|
102
|
+
}, debounceMs);
|
|
103
|
+
return () => {
|
|
104
|
+
isActive = false;
|
|
105
|
+
window.clearTimeout(timer);
|
|
106
|
+
};
|
|
107
|
+
}, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);
|
|
108
|
+
if (!def) return null;
|
|
109
|
+
const theme = getThemeConfig("textarea", def.theme);
|
|
110
|
+
const wrapperClass = theme?.wrapperClassName ?? "space-y-2";
|
|
111
|
+
const labelClass = theme?.labelClassName;
|
|
112
|
+
const inputClass = cn(theme?.inputClassName, showError && "border-red-500");
|
|
113
|
+
const toggleSelectedGrade = (condition, grade) => {
|
|
114
|
+
if (disabled) return;
|
|
115
|
+
const current = normalized.selectedGradesByCondition[condition];
|
|
116
|
+
const nextForCondition = current === grade ? "" : grade;
|
|
117
|
+
const nextMap = { ...normalized.selectedGradesByCondition };
|
|
118
|
+
if (!nextForCondition) {
|
|
119
|
+
delete nextMap[condition];
|
|
120
|
+
} else {
|
|
121
|
+
nextMap[condition] = nextForCondition;
|
|
122
|
+
}
|
|
123
|
+
setValue({ text: normalized.text, selectedGradesByCondition: nextMap });
|
|
124
|
+
setTouched();
|
|
125
|
+
};
|
|
126
|
+
const labelContent = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
127
|
+
def.label,
|
|
128
|
+
" ",
|
|
129
|
+
/* @__PURE__ */ jsx(FieldRequiredIndicator, { fieldDef: def })
|
|
130
|
+
] });
|
|
131
|
+
const showLabel = isLabelVisible(def);
|
|
132
|
+
return /* @__PURE__ */ jsxs("div", { className: fieldWrapperClass(def, wrapperClass), children: [
|
|
133
|
+
showLabel ? theme ? /* @__PURE__ */ jsx(Label, { htmlFor: fieldId, className: fieldLabelClass(def, labelClass), children: labelContent }) : /* @__PURE__ */ jsx(Label, { htmlFor: fieldId, className: fieldLabelClass(def), children: labelContent }) : null,
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
Textarea,
|
|
136
|
+
{
|
|
137
|
+
id: fieldId,
|
|
138
|
+
value: textValue,
|
|
139
|
+
onChange: (e) => setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition }),
|
|
140
|
+
onBlur: setTouched,
|
|
141
|
+
disabled,
|
|
142
|
+
placeholder: def.placeholder,
|
|
143
|
+
className: fieldControlClass(def, inputClass),
|
|
144
|
+
"aria-label": !showLabel ? def.label : void 0,
|
|
145
|
+
...def.height != null ? { height: def.height } : {}
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
isLoadingGrades && /* @__PURE__ */ jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: "Checking diagnosis grades..." }),
|
|
149
|
+
!isLoadingGrades && gradeGroups.length > 0 && /* @__PURE__ */ jsx(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
className: "mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3",
|
|
153
|
+
role: "group",
|
|
154
|
+
"aria-label": "Diagnosis grade options",
|
|
155
|
+
children: gradeGroups.map((group) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
156
|
+
/* @__PURE__ */ jsxs("span", { className: "text-xs font-medium leading-none text-muted-foreground", children: [
|
|
157
|
+
group.condition,
|
|
158
|
+
":"
|
|
159
|
+
] }),
|
|
160
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: group.grades.map((grade) => /* @__PURE__ */ jsx(
|
|
161
|
+
"button",
|
|
162
|
+
{
|
|
163
|
+
type: "button",
|
|
164
|
+
onClick: () => toggleSelectedGrade(group.condition, grade),
|
|
165
|
+
disabled,
|
|
166
|
+
className: cn(
|
|
167
|
+
"inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors",
|
|
168
|
+
normalized.selectedGradesByCondition[group.condition] === grade ? "border-primary bg-primary/15 text-primary shadow-sm" : "border-border/80 bg-background text-foreground hover:bg-muted/80",
|
|
169
|
+
disabled && "cursor-not-allowed opacity-60"
|
|
170
|
+
),
|
|
171
|
+
children: grade
|
|
172
|
+
},
|
|
173
|
+
`${group.condition}-${grade}`
|
|
174
|
+
)) })
|
|
175
|
+
] }, group.condition))
|
|
176
|
+
}
|
|
177
|
+
),
|
|
178
|
+
showError && /* @__PURE__ */ jsx("p", { className: fieldErrorClass(def, "text-xs text-red-500"), children: error })
|
|
179
|
+
] });
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
export { DiagnosisTextareaWidget };
|
|
183
|
+
//# sourceMappingURL=DiagnosisTextareaWidget-RD65PGDY.mjs.map
|
|
184
|
+
//# sourceMappingURL=DiagnosisTextareaWidget-RD65PGDY.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/widgets/DiagnosisTextareaWidget.tsx"],"names":[],"mappings":"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","file":"DiagnosisTextareaWidget-RD65PGDY.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { DiagnosisTextareaFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype DiagnosisGradeGroup = {\n condition: string;\n grades: string[];\n};\n\ntype DiagnosisTextareaValue =\n | string\n | {\n text?: unknown;\n selectedGrade?: unknown; // legacy single-selection\n selectedGradesByCondition?: unknown; // new multi-condition single-select\n }\n | null\n | undefined;\n\ntype DiagnosisGradesArrayResponse = {\n diagnosisGrades?: Array<{\n condition?: unknown;\n grades?: unknown;\n }>;\n};\n\ntype DiagnosisMapResponse = {\n field?: unknown;\n value?: unknown;\n};\n\nfunction normalizeDiagnosisGrades(payload: unknown): DiagnosisGradeGroup[] {\n const result: DiagnosisGradeGroup[] = [];\n\n const pushGroup = (conditionRaw: unknown, gradesRaw: unknown) => {\n const condition = typeof conditionRaw === 'string' ? conditionRaw.trim() : '';\n if (!condition) return;\n if (!Array.isArray(gradesRaw)) return;\n\n const grades = Array.from(\n new Set(\n gradesRaw\n .map((grade) => (typeof grade === 'string' ? grade.trim() : ''))\n .filter(Boolean),\n ),\n );\n\n if (grades.length === 0) return;\n result.push({ condition, grades });\n };\n\n const asArrayResponse = payload as DiagnosisGradesArrayResponse;\n if (Array.isArray(asArrayResponse?.diagnosisGrades)) {\n asArrayResponse.diagnosisGrades.forEach((item) => {\n pushGroup(item?.condition, item?.grades);\n });\n return result;\n }\n\n const asMapResponse = payload as DiagnosisMapResponse;\n const mapLike =\n asMapResponse?.field === 'diagnosisgrade' && asMapResponse?.value && typeof asMapResponse.value === 'object'\n ? (asMapResponse.value as Record<string, unknown>)\n : null;\n\n if (mapLike) {\n Object.entries(mapLike).forEach(([condition, grades]) => {\n pushGroup(condition, grades);\n });\n }\n\n return result;\n}\n\nexport const DiagnosisTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n const def = fieldDef as DiagnosisTextareaFieldDef | undefined;\n\n const [gradeGroups, setGradeGroups] = React.useState<DiagnosisGradeGroup[]>([]);\n const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);\n\n const normalized = React.useMemo(() => {\n const raw = value as DiagnosisTextareaValue;\n if (typeof raw === 'string') {\n return { text: raw, selectedGradesByCondition: {} as Record<string, string> };\n }\n if (!raw || typeof raw !== 'object') {\n return { text: '', selectedGradesByCondition: {} as Record<string, string> };\n }\n\n const text = typeof (raw as any).text === 'string' ? ((raw as any).text as string) : '';\n\n // Prefer new map shape.\n const mapRaw = (raw as any).selectedGradesByCondition;\n let selectedGradesByCondition: Record<string, string> = {};\n if (mapRaw && typeof mapRaw === 'object' && !Array.isArray(mapRaw)) {\n const entries = Object.entries(mapRaw as Record<string, unknown>);\n for (const [condition, gradeRaw] of entries) {\n if (typeof condition !== 'string') continue;\n if (typeof gradeRaw === 'string' && gradeRaw.trim()) {\n selectedGradesByCondition[condition] = gradeRaw;\n }\n }\n }\n\n // Backward-compat: if legacy single selection exists and no map entry yet, seed it.\n const sg = (raw as any).selectedGrade;\n if (\n sg &&\n typeof sg === 'object' &&\n typeof (sg as any).condition === 'string' &&\n typeof (sg as any).grade === 'string'\n ) {\n const condition = (sg as any).condition.trim();\n const grade = (sg as any).grade.trim();\n if (condition && grade && !selectedGradesByCondition[condition]) {\n selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };\n }\n }\n\n return { text, selectedGradesByCondition };\n }, [value]);\n\n const textValue = normalized.text;\n const showError = !!error && (touched || state.submitAttempted);\n\n React.useEffect(() => {\n const query = textValue.trim();\n const fetchGrades = handler.onFetchDiagnosisGrades;\n const debounceMs = def?.debounceDelay ?? 1000;\n\n if (!query || !fetchGrades) {\n setGradeGroups([]);\n setIsLoadingGrades(false);\n return;\n }\n\n let isActive = true;\n const timer = window.setTimeout(async () => {\n setIsLoadingGrades(true);\n try {\n const response = await fetchGrades(query);\n if (!isActive) return;\n setGradeGroups(normalizeDiagnosisGrades(response));\n } catch {\n if (!isActive) return;\n setGradeGroups([]);\n } finally {\n if (isActive) setIsLoadingGrades(false);\n }\n }, debounceMs);\n\n return () => {\n isActive = false;\n window.clearTimeout(timer);\n };\n }, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);\n\n if (!def) return null;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const toggleSelectedGrade = (condition: string, grade: string) => {\n if (disabled) return;\n const current = normalized.selectedGradesByCondition[condition];\n const nextForCondition = current === grade ? '' : grade;\n const nextMap: Record<string, string> = { ...normalized.selectedGradesByCondition };\n if (!nextForCondition) {\n delete nextMap[condition];\n } else {\n nextMap[condition] = nextForCondition;\n }\n setValue({ text: normalized.text, selectedGradesByCondition: nextMap });\n setTouched();\n };\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const showLabel = isLabelVisible(def);\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(def, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(def)}>\n {labelContent}\n </Label>\n )\n ) : null}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) =>\n setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition })\n }\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={fieldControlClass(def, inputClass)}\n aria-label={!showLabel ? def.label : undefined}\n {...(def.height != null ? { height: def.height } : {})}\n />\n\n {isLoadingGrades && (\n <p className=\"mt-2 text-xs text-muted-foreground\">Checking diagnosis grades...</p>\n )}\n\n {!isLoadingGrades && gradeGroups.length > 0 && (\n <div\n className=\"mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3\"\n role=\"group\"\n aria-label=\"Diagnosis grade options\"\n >\n {gradeGroups.map((group) => (\n <div key={group.condition} className=\"flex flex-col gap-1.5\">\n <span className=\"text-xs font-medium leading-none text-muted-foreground\">\n {group.condition}:\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.grades.map((grade) => (\n <button\n key={`${group.condition}-${grade}`}\n type=\"button\"\n onClick={() => toggleSelectedGrade(group.condition, grade)}\n disabled={disabled}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n normalized.selectedGradesByCondition[group.condition] === grade\n ? 'border-primary bg-primary/15 text-primary shadow-sm'\n : 'border-border/80 bg-background text-foreground hover:bg-muted/80',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {grade}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkPHADAQSH_cjs = require('./chunk-PHADAQSH.cjs');
|
|
4
|
+
var chunkP62377LB_cjs = require('./chunk-P62377LB.cjs');
|
|
5
|
+
var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
|
|
6
|
+
var chunkKPGTPJDH_cjs = require('./chunk-KPGTPJDH.cjs');
|
|
7
|
+
var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
|
|
8
|
+
var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
|
|
9
|
+
var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
|
|
10
|
+
var React = require('react');
|
|
11
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
12
|
+
|
|
13
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
|
+
|
|
15
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
16
|
+
|
|
17
|
+
function normalizeDiagnosisGrades(payload) {
|
|
18
|
+
const result = [];
|
|
19
|
+
const pushGroup = (conditionRaw, gradesRaw) => {
|
|
20
|
+
const condition = typeof conditionRaw === "string" ? conditionRaw.trim() : "";
|
|
21
|
+
if (!condition) return;
|
|
22
|
+
if (!Array.isArray(gradesRaw)) return;
|
|
23
|
+
const grades = Array.from(
|
|
24
|
+
new Set(
|
|
25
|
+
gradesRaw.map((grade) => typeof grade === "string" ? grade.trim() : "").filter(Boolean)
|
|
26
|
+
)
|
|
27
|
+
);
|
|
28
|
+
if (grades.length === 0) return;
|
|
29
|
+
result.push({ condition, grades });
|
|
30
|
+
};
|
|
31
|
+
const asArrayResponse = payload;
|
|
32
|
+
if (Array.isArray(asArrayResponse?.diagnosisGrades)) {
|
|
33
|
+
asArrayResponse.diagnosisGrades.forEach((item) => {
|
|
34
|
+
pushGroup(item?.condition, item?.grades);
|
|
35
|
+
});
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
const asMapResponse = payload;
|
|
39
|
+
const mapLike = asMapResponse?.field === "diagnosisgrade" && asMapResponse?.value && typeof asMapResponse.value === "object" ? asMapResponse.value : null;
|
|
40
|
+
if (mapLike) {
|
|
41
|
+
Object.entries(mapLike).forEach(([condition, grades]) => {
|
|
42
|
+
pushGroup(condition, grades);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
var DiagnosisTextareaWidget = ({ fieldId }) => {
|
|
48
|
+
const { fieldDef, value, setValue, setTouched, error, disabled, touched } = chunkIDSBJOFY_cjs.useField(fieldId);
|
|
49
|
+
const { state } = chunkKPGTPJDH_cjs.useForm();
|
|
50
|
+
const handler = chunkIDSBJOFY_cjs.useFieldHandlers(fieldId);
|
|
51
|
+
const def = fieldDef;
|
|
52
|
+
const [gradeGroups, setGradeGroups] = React__default.default.useState([]);
|
|
53
|
+
const [isLoadingGrades, setIsLoadingGrades] = React__default.default.useState(false);
|
|
54
|
+
const normalized = React__default.default.useMemo(() => {
|
|
55
|
+
const raw = value;
|
|
56
|
+
if (typeof raw === "string") {
|
|
57
|
+
return { text: raw, selectedGradesByCondition: {} };
|
|
58
|
+
}
|
|
59
|
+
if (!raw || typeof raw !== "object") {
|
|
60
|
+
return { text: "", selectedGradesByCondition: {} };
|
|
61
|
+
}
|
|
62
|
+
const text = typeof raw.text === "string" ? raw.text : "";
|
|
63
|
+
const mapRaw = raw.selectedGradesByCondition;
|
|
64
|
+
let selectedGradesByCondition = {};
|
|
65
|
+
if (mapRaw && typeof mapRaw === "object" && !Array.isArray(mapRaw)) {
|
|
66
|
+
const entries = Object.entries(mapRaw);
|
|
67
|
+
for (const [condition, gradeRaw] of entries) {
|
|
68
|
+
if (typeof condition !== "string") continue;
|
|
69
|
+
if (typeof gradeRaw === "string" && gradeRaw.trim()) {
|
|
70
|
+
selectedGradesByCondition[condition] = gradeRaw;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const sg = raw.selectedGrade;
|
|
75
|
+
if (sg && typeof sg === "object" && typeof sg.condition === "string" && typeof sg.grade === "string") {
|
|
76
|
+
const condition = sg.condition.trim();
|
|
77
|
+
const grade = sg.grade.trim();
|
|
78
|
+
if (condition && grade && !selectedGradesByCondition[condition]) {
|
|
79
|
+
selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { text, selectedGradesByCondition };
|
|
83
|
+
}, [value]);
|
|
84
|
+
const textValue = normalized.text;
|
|
85
|
+
const showError = !!error && (touched || state.submitAttempted);
|
|
86
|
+
React__default.default.useEffect(() => {
|
|
87
|
+
const query = textValue.trim();
|
|
88
|
+
const fetchGrades = handler.onFetchDiagnosisGrades;
|
|
89
|
+
const debounceMs = def?.debounceDelay ?? 1e3;
|
|
90
|
+
if (!query || !fetchGrades) {
|
|
91
|
+
setGradeGroups([]);
|
|
92
|
+
setIsLoadingGrades(false);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let isActive = true;
|
|
96
|
+
const timer = window.setTimeout(async () => {
|
|
97
|
+
setIsLoadingGrades(true);
|
|
98
|
+
try {
|
|
99
|
+
const response = await fetchGrades(query);
|
|
100
|
+
if (!isActive) return;
|
|
101
|
+
setGradeGroups(normalizeDiagnosisGrades(response));
|
|
102
|
+
} catch {
|
|
103
|
+
if (!isActive) return;
|
|
104
|
+
setGradeGroups([]);
|
|
105
|
+
} finally {
|
|
106
|
+
if (isActive) setIsLoadingGrades(false);
|
|
107
|
+
}
|
|
108
|
+
}, debounceMs);
|
|
109
|
+
return () => {
|
|
110
|
+
isActive = false;
|
|
111
|
+
window.clearTimeout(timer);
|
|
112
|
+
};
|
|
113
|
+
}, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);
|
|
114
|
+
if (!def) return null;
|
|
115
|
+
const theme = chunkP62377LB_cjs.getThemeConfig("textarea", def.theme);
|
|
116
|
+
const wrapperClass = theme?.wrapperClassName ?? "space-y-2";
|
|
117
|
+
const labelClass = theme?.labelClassName;
|
|
118
|
+
const inputClass = chunkFHHISVCH_cjs.cn(theme?.inputClassName, showError && "border-red-500");
|
|
119
|
+
const toggleSelectedGrade = (condition, grade) => {
|
|
120
|
+
if (disabled) return;
|
|
121
|
+
const current = normalized.selectedGradesByCondition[condition];
|
|
122
|
+
const nextForCondition = current === grade ? "" : grade;
|
|
123
|
+
const nextMap = { ...normalized.selectedGradesByCondition };
|
|
124
|
+
if (!nextForCondition) {
|
|
125
|
+
delete nextMap[condition];
|
|
126
|
+
} else {
|
|
127
|
+
nextMap[condition] = nextForCondition;
|
|
128
|
+
}
|
|
129
|
+
setValue({ text: normalized.text, selectedGradesByCondition: nextMap });
|
|
130
|
+
setTouched();
|
|
131
|
+
};
|
|
132
|
+
const labelContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
133
|
+
def.label,
|
|
134
|
+
" ",
|
|
135
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunk5E3APMY6_cjs.FieldRequiredIndicator, { fieldDef: def })
|
|
136
|
+
] });
|
|
137
|
+
const showLabel = chunk5E3APMY6_cjs.isLabelVisible(def);
|
|
138
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(def, wrapperClass), children: [
|
|
139
|
+
showLabel ? theme ? /* @__PURE__ */ jsxRuntime.jsx(chunkJMGUUFOJ_cjs.Label, { htmlFor: fieldId, className: chunk5E3APMY6_cjs.fieldLabelClass(def, labelClass), children: labelContent }) : /* @__PURE__ */ jsxRuntime.jsx(chunkJMGUUFOJ_cjs.Label, { htmlFor: fieldId, className: chunk5E3APMY6_cjs.fieldLabelClass(def), children: labelContent }) : null,
|
|
140
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
141
|
+
chunkPHADAQSH_cjs.Textarea,
|
|
142
|
+
{
|
|
143
|
+
id: fieldId,
|
|
144
|
+
value: textValue,
|
|
145
|
+
onChange: (e) => setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition }),
|
|
146
|
+
onBlur: setTouched,
|
|
147
|
+
disabled,
|
|
148
|
+
placeholder: def.placeholder,
|
|
149
|
+
className: chunk5E3APMY6_cjs.fieldControlClass(def, inputClass),
|
|
150
|
+
"aria-label": !showLabel ? def.label : void 0,
|
|
151
|
+
...def.height != null ? { height: def.height } : {}
|
|
152
|
+
}
|
|
153
|
+
),
|
|
154
|
+
isLoadingGrades && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-xs text-muted-foreground", children: "Checking diagnosis grades..." }),
|
|
155
|
+
!isLoadingGrades && gradeGroups.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
156
|
+
"div",
|
|
157
|
+
{
|
|
158
|
+
className: "mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3",
|
|
159
|
+
role: "group",
|
|
160
|
+
"aria-label": "Diagnosis grade options",
|
|
161
|
+
children: gradeGroups.map((group) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1.5", children: [
|
|
162
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs font-medium leading-none text-muted-foreground", children: [
|
|
163
|
+
group.condition,
|
|
164
|
+
":"
|
|
165
|
+
] }),
|
|
166
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: group.grades.map((grade) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
167
|
+
"button",
|
|
168
|
+
{
|
|
169
|
+
type: "button",
|
|
170
|
+
onClick: () => toggleSelectedGrade(group.condition, grade),
|
|
171
|
+
disabled,
|
|
172
|
+
className: chunkFHHISVCH_cjs.cn(
|
|
173
|
+
"inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors",
|
|
174
|
+
normalized.selectedGradesByCondition[group.condition] === grade ? "border-primary bg-primary/15 text-primary shadow-sm" : "border-border/80 bg-background text-foreground hover:bg-muted/80",
|
|
175
|
+
disabled && "cursor-not-allowed opacity-60"
|
|
176
|
+
),
|
|
177
|
+
children: grade
|
|
178
|
+
},
|
|
179
|
+
`${group.condition}-${grade}`
|
|
180
|
+
)) })
|
|
181
|
+
] }, group.condition))
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
showError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(def, "text-xs text-red-500"), children: error })
|
|
185
|
+
] });
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
exports.DiagnosisTextareaWidget = DiagnosisTextareaWidget;
|
|
189
|
+
//# sourceMappingURL=DiagnosisTextareaWidget-UKWLE2SQ.cjs.map
|
|
190
|
+
//# sourceMappingURL=DiagnosisTextareaWidget-UKWLE2SQ.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/widgets/DiagnosisTextareaWidget.tsx"],"names":["useField","useForm","useFieldHandlers","React","getThemeConfig","cn","jsxs","Fragment","jsx","FieldRequiredIndicator","isLabelVisible","fieldWrapperClass","Label","fieldLabelClass","Textarea","fieldControlClass","fieldErrorClass"],"mappings":"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","file":"DiagnosisTextareaWidget-UKWLE2SQ.cjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Textarea } from '../shadcn/textarea';\nimport { Label } from '../shadcn/label';\nimport { getThemeConfig } from '../themes';\nimport { cn } from '../../core/utils';\nimport type { DiagnosisTextareaFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\ntype DiagnosisGradeGroup = {\n condition: string;\n grades: string[];\n};\n\ntype DiagnosisTextareaValue =\n | string\n | {\n text?: unknown;\n selectedGrade?: unknown; // legacy single-selection\n selectedGradesByCondition?: unknown; // new multi-condition single-select\n }\n | null\n | undefined;\n\ntype DiagnosisGradesArrayResponse = {\n diagnosisGrades?: Array<{\n condition?: unknown;\n grades?: unknown;\n }>;\n};\n\ntype DiagnosisMapResponse = {\n field?: unknown;\n value?: unknown;\n};\n\nfunction normalizeDiagnosisGrades(payload: unknown): DiagnosisGradeGroup[] {\n const result: DiagnosisGradeGroup[] = [];\n\n const pushGroup = (conditionRaw: unknown, gradesRaw: unknown) => {\n const condition = typeof conditionRaw === 'string' ? conditionRaw.trim() : '';\n if (!condition) return;\n if (!Array.isArray(gradesRaw)) return;\n\n const grades = Array.from(\n new Set(\n gradesRaw\n .map((grade) => (typeof grade === 'string' ? grade.trim() : ''))\n .filter(Boolean),\n ),\n );\n\n if (grades.length === 0) return;\n result.push({ condition, grades });\n };\n\n const asArrayResponse = payload as DiagnosisGradesArrayResponse;\n if (Array.isArray(asArrayResponse?.diagnosisGrades)) {\n asArrayResponse.diagnosisGrades.forEach((item) => {\n pushGroup(item?.condition, item?.grades);\n });\n return result;\n }\n\n const asMapResponse = payload as DiagnosisMapResponse;\n const mapLike =\n asMapResponse?.field === 'diagnosisgrade' && asMapResponse?.value && typeof asMapResponse.value === 'object'\n ? (asMapResponse.value as Record<string, unknown>)\n : null;\n\n if (mapLike) {\n Object.entries(mapLike).forEach(([condition, grades]) => {\n pushGroup(condition, grades);\n });\n }\n\n return result;\n}\n\nexport const DiagnosisTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const handler = useFieldHandlers(fieldId);\n const def = fieldDef as DiagnosisTextareaFieldDef | undefined;\n\n const [gradeGroups, setGradeGroups] = React.useState<DiagnosisGradeGroup[]>([]);\n const [isLoadingGrades, setIsLoadingGrades] = React.useState(false);\n\n const normalized = React.useMemo(() => {\n const raw = value as DiagnosisTextareaValue;\n if (typeof raw === 'string') {\n return { text: raw, selectedGradesByCondition: {} as Record<string, string> };\n }\n if (!raw || typeof raw !== 'object') {\n return { text: '', selectedGradesByCondition: {} as Record<string, string> };\n }\n\n const text = typeof (raw as any).text === 'string' ? ((raw as any).text as string) : '';\n\n // Prefer new map shape.\n const mapRaw = (raw as any).selectedGradesByCondition;\n let selectedGradesByCondition: Record<string, string> = {};\n if (mapRaw && typeof mapRaw === 'object' && !Array.isArray(mapRaw)) {\n const entries = Object.entries(mapRaw as Record<string, unknown>);\n for (const [condition, gradeRaw] of entries) {\n if (typeof condition !== 'string') continue;\n if (typeof gradeRaw === 'string' && gradeRaw.trim()) {\n selectedGradesByCondition[condition] = gradeRaw;\n }\n }\n }\n\n // Backward-compat: if legacy single selection exists and no map entry yet, seed it.\n const sg = (raw as any).selectedGrade;\n if (\n sg &&\n typeof sg === 'object' &&\n typeof (sg as any).condition === 'string' &&\n typeof (sg as any).grade === 'string'\n ) {\n const condition = (sg as any).condition.trim();\n const grade = (sg as any).grade.trim();\n if (condition && grade && !selectedGradesByCondition[condition]) {\n selectedGradesByCondition = { ...selectedGradesByCondition, [condition]: grade };\n }\n }\n\n return { text, selectedGradesByCondition };\n }, [value]);\n\n const textValue = normalized.text;\n const showError = !!error && (touched || state.submitAttempted);\n\n React.useEffect(() => {\n const query = textValue.trim();\n const fetchGrades = handler.onFetchDiagnosisGrades;\n const debounceMs = def?.debounceDelay ?? 1000;\n\n if (!query || !fetchGrades) {\n setGradeGroups([]);\n setIsLoadingGrades(false);\n return;\n }\n\n let isActive = true;\n const timer = window.setTimeout(async () => {\n setIsLoadingGrades(true);\n try {\n const response = await fetchGrades(query);\n if (!isActive) return;\n setGradeGroups(normalizeDiagnosisGrades(response));\n } catch {\n if (!isActive) return;\n setGradeGroups([]);\n } finally {\n if (isActive) setIsLoadingGrades(false);\n }\n }, debounceMs);\n\n return () => {\n isActive = false;\n window.clearTimeout(timer);\n };\n }, [textValue, handler.onFetchDiagnosisGrades, def?.debounceDelay]);\n\n if (!def) return null;\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n\n const toggleSelectedGrade = (condition: string, grade: string) => {\n if (disabled) return;\n const current = normalized.selectedGradesByCondition[condition];\n const nextForCondition = current === grade ? '' : grade;\n const nextMap: Record<string, string> = { ...normalized.selectedGradesByCondition };\n if (!nextForCondition) {\n delete nextMap[condition];\n } else {\n nextMap[condition] = nextForCondition;\n }\n setValue({ text: normalized.text, selectedGradesByCondition: nextMap });\n setTouched();\n };\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const showLabel = isLabelVisible(def);\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {showLabel ? (\n theme ? (\n <Label htmlFor={fieldId} className={fieldLabelClass(def, labelClass)}>\n {labelContent}\n </Label>\n ) : (\n <Label htmlFor={fieldId} className={fieldLabelClass(def)}>\n {labelContent}\n </Label>\n )\n ) : null}\n\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) =>\n setValue({ text: e.target.value, selectedGradesByCondition: normalized.selectedGradesByCondition })\n }\n onBlur={setTouched}\n disabled={disabled}\n placeholder={def.placeholder}\n className={fieldControlClass(def, inputClass)}\n aria-label={!showLabel ? def.label : undefined}\n {...(def.height != null ? { height: def.height } : {})}\n />\n\n {isLoadingGrades && (\n <p className=\"mt-2 text-xs text-muted-foreground\">Checking diagnosis grades...</p>\n )}\n\n {!isLoadingGrades && gradeGroups.length > 0 && (\n <div\n className=\"mt-2 space-y-3 rounded-lg border border-border bg-muted/30 p-3\"\n role=\"group\"\n aria-label=\"Diagnosis grade options\"\n >\n {gradeGroups.map((group) => (\n <div key={group.condition} className=\"flex flex-col gap-1.5\">\n <span className=\"text-xs font-medium leading-none text-muted-foreground\">\n {group.condition}:\n </span>\n <div className=\"flex flex-wrap gap-2\">\n {group.grades.map((grade) => (\n <button\n key={`${group.condition}-${grade}`}\n type=\"button\"\n onClick={() => toggleSelectedGrade(group.condition, grade)}\n disabled={disabled}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n normalized.selectedGradesByCondition[group.condition] === grade\n ? 'border-primary bg-primary/15 text-primary shadow-sm'\n : 'border-border/80 bg-background text-foreground hover:bg-muted/80',\n disabled && 'cursor-not-allowed opacity-60',\n )}\n >\n {grade}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DifferentialDiagnosis } from './chunk-BU4ZEAAP.mjs';
|
|
2
|
+
import { useField } from './chunk-ZGPHTPAN.mjs';
|
|
3
|
+
import './chunk-VPU66PI6.mjs';
|
|
4
|
+
import 'react';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var DifferentialDiagnosisWidget = ({ fieldId }) => {
|
|
8
|
+
const { value } = useField(fieldId);
|
|
9
|
+
const items = Array.isArray(value) ? value : [];
|
|
10
|
+
return /* @__PURE__ */ jsx(DifferentialDiagnosis, { differentialDiagnosis: items });
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export { DifferentialDiagnosisWidget };
|
|
14
|
+
//# sourceMappingURL=DifferentialDiagnosisWidget-FENJP245.mjs.map
|
|
15
|
+
//# sourceMappingURL=DifferentialDiagnosisWidget-FENJP245.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/widgets/DifferentialDiagnosisWidget.tsx"],"names":[],"mappings":";;;;;;AAKO,IAAM,2BAAA,GAA6D,CAAC,EAAE,OAAA,EAAQ,KAAM;AACzF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,QAAA,CAAS,OAAO,CAAA;AAElC,EAAA,MAAM,QAAqC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACzD,QACD,EAAC;AAEL,EAAA,uBAAO,GAAA,CAAC,qBAAA,EAAA,EAAsB,qBAAA,EAAuB,KAAA,EAAO,CAAA;AAC9D","file":"DifferentialDiagnosisWidget-FENJP245.mjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { DifferentialDiagnosis } from './DifferentialDiagnosis';\nimport type { DifferentialDiagnosisItem } from './DifferentialDiagnosis';\n\nexport const DifferentialDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value } = useField(fieldId);\n\n const items: DifferentialDiagnosisItem[] = Array.isArray(value)\n ? (value as DifferentialDiagnosisItem[])\n : [];\n\n return <DifferentialDiagnosis differentialDiagnosis={items} />;\n};\n\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkS7EMPE2D_cjs = require('./chunk-S7EMPE2D.cjs');
|
|
4
|
+
var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
|
|
5
|
+
require('./chunk-FHHISVCH.cjs');
|
|
6
|
+
require('react');
|
|
7
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
8
|
+
|
|
9
|
+
var DifferentialDiagnosisWidget = ({ fieldId }) => {
|
|
10
|
+
const { value } = chunkIDSBJOFY_cjs.useField(fieldId);
|
|
11
|
+
const items = Array.isArray(value) ? value : [];
|
|
12
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkS7EMPE2D_cjs.DifferentialDiagnosis, { differentialDiagnosis: items });
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.DifferentialDiagnosisWidget = DifferentialDiagnosisWidget;
|
|
16
|
+
//# sourceMappingURL=DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map
|
|
17
|
+
//# sourceMappingURL=DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/widgets/DifferentialDiagnosisWidget.tsx"],"names":["useField","jsx","DifferentialDiagnosis"],"mappings":";;;;;;;;AAKO,IAAM,2BAAA,GAA6D,CAAC,EAAE,OAAA,EAAQ,KAAM;AACzF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAIA,0BAAA,CAAS,OAAO,CAAA;AAElC,EAAA,MAAM,QAAqC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GACzD,QACD,EAAC;AAEL,EAAA,uBAAOC,cAAA,CAACC,uCAAA,EAAA,EAAsB,qBAAA,EAAuB,KAAA,EAAO,CAAA;AAC9D","file":"DifferentialDiagnosisWidget-ZGFXP2BH.cjs","sourcesContent":["import React from 'react';\nimport { useField } from '../../react/useField';\nimport { DifferentialDiagnosis } from './DifferentialDiagnosis';\nimport type { DifferentialDiagnosisItem } from './DifferentialDiagnosis';\n\nexport const DifferentialDiagnosisWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { value } = useField(fieldId);\n\n const items: DifferentialDiagnosisItem[] = Array.isArray(value)\n ? (value as DifferentialDiagnosisItem[])\n : [];\n\n return <DifferentialDiagnosis differentialDiagnosis={items} />;\n};\n\n"]}
|