formanitor 0.2.0 → 0.2.1

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 (186) hide show
  1. package/dist/{AddInvestigationWidget-TQUKTGAW.mjs → AddInvestigationWidget-7UGZQYI5.mjs} +3 -3
  2. package/dist/{AddInvestigationWidget-TQUKTGAW.mjs.map → AddInvestigationWidget-7UGZQYI5.mjs.map} +1 -1
  3. package/dist/{AddInvestigationWidget-G7NPTSFY.cjs → AddInvestigationWidget-RY62UCPM.cjs} +7 -7
  4. package/dist/{AddInvestigationWidget-G7NPTSFY.cjs.map → AddInvestigationWidget-RY62UCPM.cjs.map} +1 -1
  5. package/dist/{AddMedicationWidget-I5UIT3WG.mjs → AddMedicationWidget-UG26VMUX.mjs} +3 -3
  6. package/dist/{AddMedicationWidget-I5UIT3WG.mjs.map → AddMedicationWidget-UG26VMUX.mjs.map} +1 -1
  7. package/dist/{AddMedicationWidget-26RHKIA6.cjs → AddMedicationWidget-WPI32WAP.cjs} +6 -6
  8. package/dist/{AddMedicationWidget-26RHKIA6.cjs.map → AddMedicationWidget-WPI32WAP.cjs.map} +1 -1
  9. package/dist/{AddProcedureWidget-B6OUF3BM.cjs → AddProcedureWidget-SF6MTRBV.cjs} +6 -6
  10. package/dist/{AddProcedureWidget-B6OUF3BM.cjs.map → AddProcedureWidget-SF6MTRBV.cjs.map} +1 -1
  11. package/dist/{AddProcedureWidget-NB46COB6.mjs → AddProcedureWidget-SQJUKKMK.mjs} +3 -3
  12. package/dist/{AddProcedureWidget-NB46COB6.mjs.map → AddProcedureWidget-SQJUKKMK.mjs.map} +1 -1
  13. package/dist/{BiometryIolWorkupWidget-TCU4MMVI.cjs → BiometryIolWorkupWidget-I5AJOYB2.cjs} +6 -6
  14. package/dist/{BiometryIolWorkupWidget-TCU4MMVI.cjs.map → BiometryIolWorkupWidget-I5AJOYB2.cjs.map} +1 -1
  15. package/dist/{BiometryIolWorkupWidget-F7HRYMOJ.mjs → BiometryIolWorkupWidget-NL2M7ZAA.mjs} +4 -4
  16. package/dist/{BiometryIolWorkupWidget-F7HRYMOJ.mjs.map → BiometryIolWorkupWidget-NL2M7ZAA.mjs.map} +1 -1
  17. package/dist/{DateTimeWidget-72YUK7PX.cjs → DateTimeWidget-DIDVF2EB.cjs} +6 -6
  18. package/dist/{DateTimeWidget-72YUK7PX.cjs.map → DateTimeWidget-DIDVF2EB.cjs.map} +1 -1
  19. package/dist/{DateTimeWidget-WKQIEQSA.mjs → DateTimeWidget-LFBB6HOP.mjs} +4 -4
  20. package/dist/{DateTimeWidget-WKQIEQSA.mjs.map → DateTimeWidget-LFBB6HOP.mjs.map} +1 -1
  21. package/dist/{DateWidget-K2TVTZ7Z.mjs → DateWidget-4ND5TKP2.mjs} +4 -4
  22. package/dist/{DateWidget-K2TVTZ7Z.mjs.map → DateWidget-4ND5TKP2.mjs.map} +1 -1
  23. package/dist/{DateWidget-SYDMSGWO.cjs → DateWidget-BCVR5GDK.cjs} +6 -6
  24. package/dist/{DateWidget-SYDMSGWO.cjs.map → DateWidget-BCVR5GDK.cjs.map} +1 -1
  25. package/dist/{DiagnosisTextareaWidget-UKWLE2SQ.cjs → DiagnosisTextareaWidget-E7OQRUMX.cjs} +7 -7
  26. package/dist/{DiagnosisTextareaWidget-UKWLE2SQ.cjs.map → DiagnosisTextareaWidget-E7OQRUMX.cjs.map} +1 -1
  27. package/dist/{DiagnosisTextareaWidget-RD65PGDY.mjs → DiagnosisTextareaWidget-MAOXCXEZ.mjs} +4 -4
  28. package/dist/{DiagnosisTextareaWidget-RD65PGDY.mjs.map → DiagnosisTextareaWidget-MAOXCXEZ.mjs.map} +1 -1
  29. package/dist/{DifferentialDiagnosisWidget-ZGFXP2BH.cjs → DifferentialDiagnosisWidget-ANALLNKL.cjs} +4 -4
  30. package/dist/{DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map → DifferentialDiagnosisWidget-ANALLNKL.cjs.map} +1 -1
  31. package/dist/{DifferentialDiagnosisWidget-FENJP245.mjs → DifferentialDiagnosisWidget-LCY2SA2I.mjs} +3 -3
  32. package/dist/{DifferentialDiagnosisWidget-FENJP245.mjs.map → DifferentialDiagnosisWidget-LCY2SA2I.mjs.map} +1 -1
  33. package/dist/{DischargeMedicationOrdersWidget-26ALTGJM.mjs → DischargeMedicationOrdersWidget-GYT35W7J.mjs} +4 -4
  34. package/dist/{DischargeMedicationOrdersWidget-26ALTGJM.mjs.map → DischargeMedicationOrdersWidget-GYT35W7J.mjs.map} +1 -1
  35. package/dist/{DischargeMedicationOrdersWidget-B4CJQ3QS.cjs → DischargeMedicationOrdersWidget-ILWNZ7VM.cjs} +7 -7
  36. package/dist/{DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map → DischargeMedicationOrdersWidget-ILWNZ7VM.cjs.map} +1 -1
  37. package/dist/{EditableTable-LPAYCK36.mjs → EditableTable-TGCVUBLO.mjs} +3 -3
  38. package/dist/{EditableTable-LPAYCK36.mjs.map → EditableTable-TGCVUBLO.mjs.map} +1 -1
  39. package/dist/{EditableTable-YB4IC3ZK.cjs → EditableTable-VCUNJZEX.cjs} +4 -4
  40. package/dist/{EditableTable-YB4IC3ZK.cjs.map → EditableTable-VCUNJZEX.cjs.map} +1 -1
  41. package/dist/{FollowupWidget-NJ4QDBOG.mjs → FollowupWidget-F6FRZO4T.mjs} +3 -3
  42. package/dist/{FollowupWidget-NJ4QDBOG.mjs.map → FollowupWidget-F6FRZO4T.mjs.map} +1 -1
  43. package/dist/{FollowupWidget-EEKOI2TW.cjs → FollowupWidget-NBTOV2ML.cjs} +4 -4
  44. package/dist/{FollowupWidget-EEKOI2TW.cjs.map → FollowupWidget-NBTOV2ML.cjs.map} +1 -1
  45. package/dist/{FunctionalImpairmentScoreWidget-HAAPCMIS.cjs → FunctionalImpairmentScoreWidget-5V5SNLTF.cjs} +6 -6
  46. package/dist/{FunctionalImpairmentScoreWidget-HAAPCMIS.cjs.map → FunctionalImpairmentScoreWidget-5V5SNLTF.cjs.map} +1 -1
  47. package/dist/{FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs → FunctionalImpairmentScoreWidget-QKIZE7KT.mjs} +4 -4
  48. package/dist/{FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs.map → FunctionalImpairmentScoreWidget-QKIZE7KT.mjs.map} +1 -1
  49. package/dist/{GsExaminationWidget-EX6C3EF5.cjs → GsExaminationWidget-57SL4BCI.cjs} +10 -10
  50. package/dist/{GsExaminationWidget-EX6C3EF5.cjs.map → GsExaminationWidget-57SL4BCI.cjs.map} +1 -1
  51. package/dist/{GsExaminationWidget-MEIUHRQQ.mjs → GsExaminationWidget-J4VABGY6.mjs} +4 -4
  52. package/dist/{GsExaminationWidget-MEIUHRQQ.mjs.map → GsExaminationWidget-J4VABGY6.mjs.map} +1 -1
  53. package/dist/{GsGradingWidget-4UPOEYNL.mjs → GsGradingWidget-3WTLIP33.mjs} +4 -4
  54. package/dist/{GsGradingWidget-4UPOEYNL.mjs.map → GsGradingWidget-3WTLIP33.mjs.map} +1 -1
  55. package/dist/{GsGradingWidget-IV3UF63W.cjs → GsGradingWidget-CIXE36HF.cjs} +12 -12
  56. package/dist/{GsGradingWidget-IV3UF63W.cjs.map → GsGradingWidget-CIXE36HF.cjs.map} +1 -1
  57. package/dist/{GsSmartHistoryWidget-7QNJZEI4.cjs → GsSmartHistoryWidget-6Q2IIGDG.cjs} +12 -12
  58. package/dist/{GsSmartHistoryWidget-7QNJZEI4.cjs.map → GsSmartHistoryWidget-6Q2IIGDG.cjs.map} +1 -1
  59. package/dist/{GsSmartHistoryWidget-LGN7W2AV.mjs → GsSmartHistoryWidget-IOGZ6GNS.mjs} +4 -4
  60. package/dist/{GsSmartHistoryWidget-LGN7W2AV.mjs.map → GsSmartHistoryWidget-IOGZ6GNS.mjs.map} +1 -1
  61. package/dist/{HiddenVitalsWidget-AMH32HT2.cjs → HiddenVitalsWidget-HBK7PBPR.cjs} +6 -6
  62. package/dist/{HiddenVitalsWidget-AMH32HT2.cjs.map → HiddenVitalsWidget-HBK7PBPR.cjs.map} +1 -1
  63. package/dist/{HiddenVitalsWidget-W23IFSEF.mjs → HiddenVitalsWidget-JH3NRZLM.mjs} +4 -4
  64. package/dist/{HiddenVitalsWidget-W23IFSEF.mjs.map → HiddenVitalsWidget-JH3NRZLM.mjs.map} +1 -1
  65. package/dist/{LensAssessmentWidget-SJ6YUTSN.mjs → LensAssessmentWidget-7WMULFS2.mjs} +4 -4
  66. package/dist/{LensAssessmentWidget-SJ6YUTSN.mjs.map → LensAssessmentWidget-7WMULFS2.mjs.map} +1 -1
  67. package/dist/{LensAssessmentWidget-LSHBUTT5.cjs → LensAssessmentWidget-GSOOD7BX.cjs} +6 -6
  68. package/dist/{LensAssessmentWidget-LSHBUTT5.cjs.map → LensAssessmentWidget-GSOOD7BX.cjs.map} +1 -1
  69. package/dist/{MarMedicationOrdersWidget-ZKZLSZRN.cjs → MarMedicationOrdersWidget-3E6GFOR6.cjs} +7 -7
  70. package/dist/{MarMedicationOrdersWidget-ZKZLSZRN.cjs.map → MarMedicationOrdersWidget-3E6GFOR6.cjs.map} +1 -1
  71. package/dist/{MarMedicationOrdersWidget-IKMAFPRG.mjs → MarMedicationOrdersWidget-QZUVSEB5.mjs} +4 -4
  72. package/dist/{MarMedicationOrdersWidget-IKMAFPRG.mjs.map → MarMedicationOrdersWidget-QZUVSEB5.mjs.map} +1 -1
  73. package/dist/{OBGExaminationWidget-SMFZ2WCL.cjs → OBGExaminationWidget-F2ZNSP2M.cjs} +11 -11
  74. package/dist/{OBGExaminationWidget-SMFZ2WCL.cjs.map → OBGExaminationWidget-F2ZNSP2M.cjs.map} +1 -1
  75. package/dist/{OBGExaminationWidget-BK4ERETW.mjs → OBGExaminationWidget-POVLALMA.mjs} +4 -4
  76. package/dist/{OBGExaminationWidget-BK4ERETW.mjs.map → OBGExaminationWidget-POVLALMA.mjs.map} +1 -1
  77. package/dist/{OBGPathwayWidget-U5BCAESB.mjs → OBGPathwayWidget-CGT7Q4T2.mjs} +5 -5
  78. package/dist/{OBGPathwayWidget-U5BCAESB.mjs.map → OBGPathwayWidget-CGT7Q4T2.mjs.map} +1 -1
  79. package/dist/{OBGPathwayWidget-5YTUDBEH.cjs → OBGPathwayWidget-WCIQENMO.cjs} +17 -17
  80. package/dist/{OBGPathwayWidget-5YTUDBEH.cjs.map → OBGPathwayWidget-WCIQENMO.cjs.map} +1 -1
  81. package/dist/{ObstetricHistoryWidget-WD572Q7H.mjs → ObstetricHistoryWidget-EGVLL4X2.mjs} +4 -4
  82. package/dist/{ObstetricHistoryWidget-WD572Q7H.mjs.map → ObstetricHistoryWidget-EGVLL4X2.mjs.map} +1 -1
  83. package/dist/{ObstetricHistoryWidget-GC63CB3U.cjs → ObstetricHistoryWidget-XU6R7IPP.cjs} +12 -12
  84. package/dist/{ObstetricHistoryWidget-GC63CB3U.cjs.map → ObstetricHistoryWidget-XU6R7IPP.cjs.map} +1 -1
  85. package/dist/{OphthalDiagnosisWidget-Y3AHD6AG.mjs → OphthalDiagnosisWidget-G5RCC2QZ.mjs} +3 -3
  86. package/dist/{OphthalDiagnosisWidget-Y3AHD6AG.mjs.map → OphthalDiagnosisWidget-G5RCC2QZ.mjs.map} +1 -1
  87. package/dist/{OphthalDiagnosisWidget-QXFK446I.cjs → OphthalDiagnosisWidget-OQPTHJ7E.cjs} +4 -4
  88. package/dist/{OphthalDiagnosisWidget-QXFK446I.cjs.map → OphthalDiagnosisWidget-OQPTHJ7E.cjs.map} +1 -1
  89. package/dist/{OphthalmologyWidget-U2HQMZ4J.cjs → OphthalmologyWidget-I3BKWOI2.cjs} +4 -4
  90. package/dist/{OphthalmologyWidget-U2HQMZ4J.cjs.map → OphthalmologyWidget-I3BKWOI2.cjs.map} +1 -1
  91. package/dist/{OphthalmologyWidget-CRQMN5QU.mjs → OphthalmologyWidget-RG2AI6WA.mjs} +3 -3
  92. package/dist/{OphthalmologyWidget-CRQMN5QU.mjs.map → OphthalmologyWidget-RG2AI6WA.mjs.map} +1 -1
  93. package/dist/{OrthopedicExamWidget-PAOIVU6Z.mjs → OrthopedicExamWidget-BBZP6NVT.mjs} +4 -4
  94. package/dist/{OrthopedicExamWidget-PAOIVU6Z.mjs.map → OrthopedicExamWidget-BBZP6NVT.mjs.map} +1 -1
  95. package/dist/{OrthopedicExamWidget-LP7VN3W5.cjs → OrthopedicExamWidget-M4KKU5RC.cjs} +6 -6
  96. package/dist/{OrthopedicExamWidget-LP7VN3W5.cjs.map → OrthopedicExamWidget-M4KKU5RC.cjs.map} +1 -1
  97. package/dist/{PainScaleFlagsWidget-MRMQ7HPJ.mjs → PainScaleFlagsWidget-E576R6QB.mjs} +4 -4
  98. package/dist/{PainScaleFlagsWidget-MRMQ7HPJ.mjs.map → PainScaleFlagsWidget-E576R6QB.mjs.map} +1 -1
  99. package/dist/{PainScaleFlagsWidget-IBNGVVHD.cjs → PainScaleFlagsWidget-QHGESXNE.cjs} +8 -8
  100. package/dist/{PainScaleFlagsWidget-IBNGVVHD.cjs.map → PainScaleFlagsWidget-QHGESXNE.cjs.map} +1 -1
  101. package/dist/{ReferralWidget-PDNEKHFO.cjs → ReferralWidget-J2PWYFDT.cjs} +7 -7
  102. package/dist/{ReferralWidget-PDNEKHFO.cjs.map → ReferralWidget-J2PWYFDT.cjs.map} +1 -1
  103. package/dist/{ReferralWidget-IYTS32TS.mjs → ReferralWidget-UPYWEO5R.mjs} +4 -4
  104. package/dist/{ReferralWidget-IYTS32TS.mjs.map → ReferralWidget-UPYWEO5R.mjs.map} +1 -1
  105. package/dist/RichTextWidget-BBCNJPMH.mjs +11 -0
  106. package/dist/{RichTextWidget-5OOJ2LJN.mjs.map → RichTextWidget-BBCNJPMH.mjs.map} +1 -1
  107. package/dist/{RichTextWidget-XWLOHKLE.cjs → RichTextWidget-CRQHNVJR.cjs} +7 -7
  108. package/dist/{RichTextWidget-XWLOHKLE.cjs.map → RichTextWidget-CRQHNVJR.cjs.map} +1 -1
  109. package/dist/SmartTextarea-DKWV4R6H.cjs +19 -0
  110. package/dist/{SmartTextarea-L7Q4CORK.cjs.map → SmartTextarea-DKWV4R6H.cjs.map} +1 -1
  111. package/dist/SmartTextarea-ZTQIW6O2.mjs +10 -0
  112. package/dist/{SmartTextarea-ZCXGMZLG.mjs.map → SmartTextarea-ZTQIW6O2.mjs.map} +1 -1
  113. package/dist/{SuggestionTextareaWidget-RN5LZYFC.mjs → SuggestionTextareaWidget-22NR3JWM.mjs} +7 -7
  114. package/dist/{SuggestionTextareaWidget-RN5LZYFC.mjs.map → SuggestionTextareaWidget-22NR3JWM.mjs.map} +1 -1
  115. package/dist/{SuggestionTextareaWidget-2TEITBPF.cjs → SuggestionTextareaWidget-WCTPWW2E.cjs} +18 -18
  116. package/dist/{SuggestionTextareaWidget-2TEITBPF.cjs.map → SuggestionTextareaWidget-WCTPWW2E.cjs.map} +1 -1
  117. package/dist/{SurgicalRiskFlagsWidget-JCSL3GWS.cjs → SurgicalRiskFlagsWidget-Q5FTWB3M.cjs} +6 -6
  118. package/dist/{SurgicalRiskFlagsWidget-JCSL3GWS.cjs.map → SurgicalRiskFlagsWidget-Q5FTWB3M.cjs.map} +1 -1
  119. package/dist/{SurgicalRiskFlagsWidget-DBICX4MB.mjs → SurgicalRiskFlagsWidget-WCAHZKKG.mjs} +4 -4
  120. package/dist/{SurgicalRiskFlagsWidget-DBICX4MB.mjs.map → SurgicalRiskFlagsWidget-WCAHZKKG.mjs.map} +1 -1
  121. package/dist/{UrologyExaminationWidget-74L3IN2X.cjs → UrologyExaminationWidget-JYUGZ5CG.cjs} +12 -12
  122. package/dist/{UrologyExaminationWidget-74L3IN2X.cjs.map → UrologyExaminationWidget-JYUGZ5CG.cjs.map} +1 -1
  123. package/dist/{UrologyExaminationWidget-IQEBP6CI.mjs → UrologyExaminationWidget-QDTD3FJX.mjs} +4 -4
  124. package/dist/{UrologyExaminationWidget-IQEBP6CI.mjs.map → UrologyExaminationWidget-QDTD3FJX.mjs.map} +1 -1
  125. package/dist/{UrologyPathwayWidget-S4QY6RD6.mjs → UrologyPathwayWidget-QTFKUIM7.mjs} +4 -4
  126. package/dist/{UrologyPathwayWidget-S4QY6RD6.mjs.map → UrologyPathwayWidget-QTFKUIM7.mjs.map} +1 -1
  127. package/dist/{UrologyPathwayWidget-UJY5EW2G.cjs → UrologyPathwayWidget-TXZQNGP4.cjs} +7 -7
  128. package/dist/{UrologyPathwayWidget-UJY5EW2G.cjs.map → UrologyPathwayWidget-TXZQNGP4.cjs.map} +1 -1
  129. package/dist/{UrologySmartHistoryWidget-XKZF63BV.cjs → UrologySmartHistoryWidget-53NATEO3.cjs} +15 -15
  130. package/dist/{UrologySmartHistoryWidget-XKZF63BV.cjs.map → UrologySmartHistoryWidget-53NATEO3.cjs.map} +1 -1
  131. package/dist/{UrologySmartHistoryWidget-NFTHHK6A.mjs → UrologySmartHistoryWidget-PBU4QXQJ.mjs} +4 -4
  132. package/dist/{UrologySmartHistoryWidget-NFTHHK6A.mjs.map → UrologySmartHistoryWidget-PBU4QXQJ.mjs.map} +1 -1
  133. package/dist/{VitalsWidget-MBYDGC7U.mjs → VitalsWidget-BRFUKGNO.mjs} +3 -3
  134. package/dist/{VitalsWidget-MBYDGC7U.mjs.map → VitalsWidget-BRFUKGNO.mjs.map} +1 -1
  135. package/dist/{VitalsWidget-44UWQGIF.cjs → VitalsWidget-PDCYXNBM.cjs} +5 -5
  136. package/dist/{VitalsWidget-44UWQGIF.cjs.map → VitalsWidget-PDCYXNBM.cjs.map} +1 -1
  137. package/dist/{chunk-AZVJU7NZ.mjs → chunk-3KRDT7TX.mjs} +5 -5
  138. package/dist/{chunk-AZVJU7NZ.mjs.map → chunk-3KRDT7TX.mjs.map} +1 -1
  139. package/dist/{chunk-ZSOIQVB3.mjs → chunk-5I2RC47Y.mjs} +3 -3
  140. package/dist/{chunk-ZSOIQVB3.mjs.map → chunk-5I2RC47Y.mjs.map} +1 -1
  141. package/dist/{chunk-KPGTPJDH.cjs → chunk-6YX37XBM.cjs} +4 -4
  142. package/dist/{chunk-KPGTPJDH.cjs.map → chunk-6YX37XBM.cjs.map} +1 -1
  143. package/dist/{chunk-XR2ZM654.mjs → chunk-7L2JOWGA.mjs} +3 -3
  144. package/dist/{chunk-XR2ZM654.mjs.map → chunk-7L2JOWGA.mjs.map} +1 -1
  145. package/dist/{chunk-FZEEWRW3.cjs → chunk-BOBX45NY.cjs} +5 -5
  146. package/dist/{chunk-FZEEWRW3.cjs.map → chunk-BOBX45NY.cjs.map} +1 -1
  147. package/dist/{chunk-JNVSA77L.cjs → chunk-GPU5P3FB.cjs} +7 -7
  148. package/dist/{chunk-JNVSA77L.cjs.map → chunk-GPU5P3FB.cjs.map} +1 -1
  149. package/dist/{chunk-NJJTIL3U.cjs → chunk-I7TJVWYV.cjs} +6 -6
  150. package/dist/{chunk-NJJTIL3U.cjs.map → chunk-I7TJVWYV.cjs.map} +1 -1
  151. package/dist/{chunk-CTW65YW2.cjs → chunk-L4CIIT4U.cjs} +9 -9
  152. package/dist/{chunk-CTW65YW2.cjs.map → chunk-L4CIIT4U.cjs.map} +1 -1
  153. package/dist/{chunk-DE7VZVKR.cjs → chunk-MQ2JV7HL.cjs} +11 -11
  154. package/dist/{chunk-DE7VZVKR.cjs.map → chunk-MQ2JV7HL.cjs.map} +1 -1
  155. package/dist/{chunk-IDSBJOFY.cjs → chunk-SHQHDSA4.cjs} +76 -2
  156. package/dist/chunk-SHQHDSA4.cjs.map +1 -0
  157. package/dist/{chunk-YYPMIUDW.mjs → chunk-ULMK3TUI.mjs} +3 -3
  158. package/dist/{chunk-YYPMIUDW.mjs.map → chunk-ULMK3TUI.mjs.map} +1 -1
  159. package/dist/{chunk-GFDE2KZC.mjs → chunk-VZT5YNCD.mjs} +4 -4
  160. package/dist/{chunk-GFDE2KZC.mjs.map → chunk-VZT5YNCD.mjs.map} +1 -1
  161. package/dist/{chunk-MIUUO4CI.mjs → chunk-YHNI5NIX.mjs} +5 -5
  162. package/dist/{chunk-MIUUO4CI.mjs.map → chunk-YHNI5NIX.mjs.map} +1 -1
  163. package/dist/{chunk-ZGPHTPAN.mjs → chunk-ZTT5XJR7.mjs} +73 -3
  164. package/dist/chunk-ZTT5XJR7.mjs.map +1 -0
  165. package/dist/index.cjs +596 -125
  166. package/dist/index.cjs.map +1 -1
  167. package/dist/index.d.cts +64 -6
  168. package/dist/index.d.ts +64 -6
  169. package/dist/index.mjs +544 -74
  170. package/dist/index.mjs.map +1 -1
  171. package/dist/read-only-table.d.cts +1 -1
  172. package/dist/read-only-table.d.ts +1 -1
  173. package/dist/rich-text.cjs +5 -5
  174. package/dist/rich-text.mjs +4 -4
  175. package/dist/smart.cjs +5 -5
  176. package/dist/smart.d.cts +1 -1
  177. package/dist/smart.d.ts +1 -1
  178. package/dist/smart.mjs +3 -3
  179. package/dist/{types-D0iYXUOo.d.cts → types-CYtJk8H9.d.cts} +49 -3
  180. package/dist/{types-D0iYXUOo.d.ts → types-CYtJk8H9.d.ts} +49 -3
  181. package/package.json +1 -1
  182. package/dist/RichTextWidget-5OOJ2LJN.mjs +0 -11
  183. package/dist/SmartTextarea-L7Q4CORK.cjs +0 -19
  184. package/dist/SmartTextarea-ZCXGMZLG.mjs +0 -10
  185. package/dist/chunk-IDSBJOFY.cjs.map +0 -1
  186. package/dist/chunk-ZGPHTPAN.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { DifferentialDiagnosis } from './chunk-BU4ZEAAP.mjs';
2
- import { useField } from './chunk-ZGPHTPAN.mjs';
2
+ import { useField } from './chunk-ZTT5XJR7.mjs';
3
3
  import './chunk-VPU66PI6.mjs';
4
4
  import 'react';
5
5
  import { jsx } from 'react/jsx-runtime';
@@ -11,5 +11,5 @@ var DifferentialDiagnosisWidget = ({ fieldId }) => {
11
11
  };
12
12
 
13
13
  export { DifferentialDiagnosisWidget };
14
- //# sourceMappingURL=DifferentialDiagnosisWidget-FENJP245.mjs.map
15
- //# sourceMappingURL=DifferentialDiagnosisWidget-FENJP245.mjs.map
14
+ //# sourceMappingURL=DifferentialDiagnosisWidget-LCY2SA2I.mjs.map
15
+ //# sourceMappingURL=DifferentialDiagnosisWidget-LCY2SA2I.mjs.map
@@ -1 +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"]}
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-LCY2SA2I.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"]}
@@ -1,7 +1,7 @@
1
1
  import { FieldRequiredIndicator, fieldLabelClass, fieldDescriptionClass, fieldControlClass, fieldErrorClass, fieldWrapperClass } from './chunk-WYVXXEZI.mjs';
2
- import { useForm } from './chunk-XR2ZM654.mjs';
2
+ import { useForm } from './chunk-7L2JOWGA.mjs';
3
3
  import { Button } from './chunk-GXXWMHAA.mjs';
4
- import { useField, useFieldHandlers } from './chunk-ZGPHTPAN.mjs';
4
+ import { useField, useFieldHandlers } from './chunk-ZTT5XJR7.mjs';
5
5
  import { Label } from './chunk-HEFZA2AH.mjs';
6
6
  import { cn } from './chunk-VPU66PI6.mjs';
7
7
  import { useMemo, useCallback } from 'react';
@@ -157,5 +157,5 @@ var DischargeMedicationOrdersWidget = ({ fieldId }) => {
157
157
  };
158
158
 
159
159
  export { DischargeMedicationOrdersWidget };
160
- //# sourceMappingURL=DischargeMedicationOrdersWidget-26ALTGJM.mjs.map
161
- //# sourceMappingURL=DischargeMedicationOrdersWidget-26ALTGJM.mjs.map
160
+ //# sourceMappingURL=DischargeMedicationOrdersWidget-GYT35W7J.mjs.map
161
+ //# sourceMappingURL=DischargeMedicationOrdersWidget-GYT35W7J.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/DischargeMedicationOrdersWidget.tsx"],"names":[],"mappings":"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","file":"DischargeMedicationOrdersWidget-26ALTGJM.mjs","sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label className={fieldLabelClass(fieldDef, 'text-sm font-medium')}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n\n {orders.length === 0 ? (\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500',\n ),\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/DischargeMedicationOrdersWidget.tsx"],"names":[],"mappings":"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","file":"DischargeMedicationOrdersWidget-GYT35W7J.mjs","sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label className={fieldLabelClass(fieldDef, 'text-sm font-medium')}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n\n {orders.length === 0 ? (\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500',\n ),\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
4
- var chunkKPGTPJDH_cjs = require('./chunk-KPGTPJDH.cjs');
4
+ var chunk6YX37XBM_cjs = require('./chunk-6YX37XBM.cjs');
5
5
  var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
6
- var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
6
+ var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
7
7
  var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
8
8
  var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
9
9
  var react = require('react');
@@ -57,9 +57,9 @@ function formatDuration(start, end) {
57
57
  return start ? `Start: ${start}` : `End: ${end}`;
58
58
  }
59
59
  var DischargeMedicationOrdersWidget = ({ fieldId }) => {
60
- const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = chunkIDSBJOFY_cjs.useField(fieldId);
61
- const { state } = chunkKPGTPJDH_cjs.useForm();
62
- const handlers = chunkIDSBJOFY_cjs.useFieldHandlers(fieldId);
60
+ const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = chunkSHQHDSA4_cjs.useField(fieldId);
61
+ const { state } = chunk6YX37XBM_cjs.useForm();
62
+ const handlers = chunkSHQHDSA4_cjs.useFieldHandlers(fieldId);
63
63
  const showError = !!error && (touched || state.submitAttempted);
64
64
  const { orders, display_lines } = react.useMemo(() => parseFieldValue(value), [value]);
65
65
  const onAdd = react.useCallback(async () => {
@@ -159,5 +159,5 @@ var DischargeMedicationOrdersWidget = ({ fieldId }) => {
159
159
  };
160
160
 
161
161
  exports.DischargeMedicationOrdersWidget = DischargeMedicationOrdersWidget;
162
- //# sourceMappingURL=DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map
163
- //# sourceMappingURL=DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map
162
+ //# sourceMappingURL=DischargeMedicationOrdersWidget-ILWNZ7VM.cjs.map
163
+ //# sourceMappingURL=DischargeMedicationOrdersWidget-ILWNZ7VM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/DischargeMedicationOrdersWidget.tsx"],"names":["useField","useForm","useFieldHandlers","useMemo","useCallback","fieldWrapperClass","jsxs","Label","fieldLabelClass","jsx","FieldRequiredIndicator","Button","fieldDescriptionClass","fieldControlClass","cn","Trash2","fieldErrorClass"],"mappings":"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","file":"DischargeMedicationOrdersWidget-B4CJQ3QS.cjs","sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label className={fieldLabelClass(fieldDef, 'text-sm font-medium')}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n\n {orders.length === 0 ? (\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500',\n ),\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/DischargeMedicationOrdersWidget.tsx"],"names":["useField","useForm","useFieldHandlers","useMemo","useCallback","fieldWrapperClass","jsxs","Label","fieldLabelClass","jsx","FieldRequiredIndicator","Button","fieldDescriptionClass","fieldControlClass","cn","Trash2","fieldErrorClass"],"mappings":"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","file":"DischargeMedicationOrdersWidget-ILWNZ7VM.cjs","sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport { Trash2 } from 'lucide-react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { Button } from '../shadcn/button';\nimport { Label } from '../shadcn/label';\nimport { cn } from '../../core/utils';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\ntype CMDashOrder = {\n id: string;\n item_id?: string | number | null;\n item_name?: string | null;\n generic_name?: string | null;\n dose?: string | number | null;\n route?: string | null;\n frequency?: string | null;\n admin_times?: string[] | null;\n meal_sleep_timing?: string | null;\n start_date?: string | null;\n end_date?: string | null;\n order_type?: string | null;\n status?: string | null;\n notes?: string | null;\n};\n\ntype CMDashPrescriptionResponse = {\n pharmacy_order_id?: string | null;\n pharmacy_order_ids?: string[] | null;\n notes?: string | null;\n orders?: CMDashOrder[] | null;\n /** Parallel to `orders`, from host AddMedicineDialog confirm. */\n display_lines?: unknown[] | null;\n};\n\nexport type DischargeMedicationOrder = {\n id: string;\n item_id?: string;\n item_name?: string;\n generic_name?: string;\n dose?: string;\n route?: string;\n frequency?: string;\n admin_times?: string[];\n meal_sleep_timing?: string;\n start_date?: string;\n end_date?: string;\n order_type?: string;\n status?: string;\n notes?: string | null;\n pharmacy_order_id?: string;\n};\n\nfunction parseFieldValue(value: unknown): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n if (value == null) return { orders: [], display_lines: [] };\n if (Array.isArray(value)) {\n return {\n orders: value as DischargeMedicationOrder[],\n display_lines: value.map(() => null),\n };\n }\n if (typeof value === 'object') {\n const v = value as Record<string, unknown>;\n const orders = Array.isArray(v.orders) ? (v.orders as DischargeMedicationOrder[]) : [];\n const rawLines = Array.isArray(v.display_lines)\n ? v.display_lines\n : Array.isArray(v.displayLines)\n ? v.displayLines\n : [];\n const display_lines = orders.map((_, i) => rawLines[i] ?? null);\n return { orders, display_lines };\n }\n return { orders: [], display_lines: [] };\n}\n\nfunction normalizePrescription(res: CMDashPrescriptionResponse): {\n orders: DischargeMedicationOrder[];\n display_lines: unknown[];\n} {\n const pharmacyOrderId = res.pharmacy_order_id ?? undefined;\n const orders = Array.isArray(res.orders) ? res.orders : [];\n const linesRaw = Array.isArray(res.display_lines) ? res.display_lines : [];\n\n const mapped = orders\n .filter((o) => o && typeof o.id === 'string')\n .map((o) => ({\n id: o.id,\n item_id: o.item_id == null ? undefined : String(o.item_id),\n item_name: o.item_name ?? undefined,\n generic_name: o.generic_name ?? undefined,\n dose: o.dose == null ? undefined : String(o.dose),\n route: o.route ?? undefined,\n frequency: o.frequency ?? undefined,\n admin_times: Array.isArray(o.admin_times) ? o.admin_times : undefined,\n meal_sleep_timing: o.meal_sleep_timing ?? undefined,\n start_date: o.start_date ?? undefined,\n end_date: o.end_date ?? undefined,\n order_type: o.order_type ?? undefined,\n status: o.status ?? undefined,\n notes: o.notes ?? null,\n pharmacy_order_id: pharmacyOrderId,\n }));\n\n const display_lines = mapped.map((_, i) => linesRaw[i] ?? null);\n return { orders: mapped, display_lines };\n}\n\nfunction formatDuration(start?: string, end?: string): string | null {\n if (!start && !end) return null;\n if (start && end) return `${start} → ${end}`;\n return start ? `Start: ${start}` : `End: ${end}`;\n}\n\nexport const DischargeMedicationOrdersWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched, visible } = useField(fieldId);\n const { state } = useForm();\n const handlers = useFieldHandlers(fieldId);\n\n const showError = !!error && (touched || state.submitAttempted);\n\n const { orders, display_lines } = useMemo(() => parseFieldValue(value), [value]);\n\n const onAdd = useCallback(async () => {\n setTouched();\n const fn = handlers.onOpenDischargeMedicationOrders;\n if (!fn) return;\n const res = await fn();\n if (!res || typeof res !== 'object') return;\n const normalized = normalizePrescription(res as CMDashPrescriptionResponse);\n setValue({\n orders: normalized.orders,\n display_lines: normalized.display_lines,\n });\n }, [handlers.onOpenDischargeMedicationOrders, setTouched, setValue]);\n\n const onDelete = useCallback(\n (id: string) => {\n setTouched();\n const idx = orders.findIndex((o) => o.id === id);\n if (idx === -1) return;\n setValue({\n orders: orders.filter((o) => o.id !== id),\n display_lines: display_lines.filter((_, i) => i !== idx),\n });\n },\n [orders, display_lines, setTouched, setValue]\n );\n\n if (!visible || !fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <div className=\"flex items-center justify-between gap-2\">\n <Label className={fieldLabelClass(fieldDef, 'text-sm font-medium')}>\n {fieldDef.label} <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n <Button type=\"button\" onClick={onAdd} disabled={disabled || !handlers.onOpenDischargeMedicationOrders}>\n Add medicine\n </Button>\n </div>\n\n {fieldDef.description && (\n <p className={fieldDescriptionClass(fieldDef, 'text-sm text-muted-foreground')}>\n {fieldDef.description}\n </p>\n )}\n\n {orders.length === 0 ? (\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background px-3 py-3 text-sm text-muted-foreground',\n showError && 'border-red-500',\n ),\n )}\n >\n No medicines added.\n </div>\n ) : (\n <div className=\"space-y-2\">\n {orders.map((o, rowIdx) => {\n const line = display_lines[rowIdx] as { name?: string } | null | undefined;\n const duration = formatDuration(o.start_date, o.end_date);\n const header =\n (typeof line?.name === 'string' && line.name.trim()) ||\n o.item_name ||\n 'Medicine';\n const sub = o.generic_name ? o.generic_name : null;\n const line1 = [o.dose && `Dose: ${o.dose}`, o.route && `Route: ${o.route}`]\n .filter(Boolean)\n .join(' • ');\n const line2 = [\n o.frequency && `Freq: ${o.frequency}`,\n o.meal_sleep_timing && `Meal/Sleep: ${o.meal_sleep_timing}`,\n o.admin_times?.length ? `Times: ${o.admin_times.join(', ')}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n const line3 = [\n duration ? `Duration: ${duration}` : null,\n o.order_type ? `Type: ${o.order_type}` : null,\n o.status ? `Status: ${o.status}` : null,\n ]\n .filter(Boolean)\n .join(' • ');\n\n return (\n <div key={o.id} className=\"rounded-md border border-input bg-background p-3\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <div className=\"font-semibold text-sm truncate\">{header}</div>\n {sub && <div className=\"text-xs text-muted-foreground mt-0.5 truncate\">{sub}</div>}\n </div>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 w-8 p-0 text-destructive\"\n onClick={() => onDelete(o.id)}\n aria-label=\"Delete medicine\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n </div>\n <div className=\"mt-2 space-y-1 text-xs text-muted-foreground\">\n {line1 && <div>{line1}</div>}\n {line2 && <div>{line2}</div>}\n {line3 && <div>{line3}</div>}\n {o.notes && <div className=\"text-foreground/80\">Notes: {o.notes}</div>}\n </div>\n </div>\n );\n })}\n </div>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -4,7 +4,7 @@ import { Input } from './chunk-VNFBUAZD.mjs';
4
4
  import './chunk-BMNY7F6H.mjs';
5
5
  import './chunk-AZHTIUOL.mjs';
6
6
  import { Button } from './chunk-GXXWMHAA.mjs';
7
- import { useField } from './chunk-ZGPHTPAN.mjs';
7
+ import { useField } from './chunk-ZTT5XJR7.mjs';
8
8
  import { Label } from './chunk-HEFZA2AH.mjs';
9
9
  import './chunk-VPU66PI6.mjs';
10
10
  import { useMemo, useRef, useEffect, useState } from 'react';
@@ -275,5 +275,5 @@ var EditableTableWidget = ({
275
275
  };
276
276
 
277
277
  export { EditableTableWidget };
278
- //# sourceMappingURL=EditableTable-LPAYCK36.mjs.map
279
- //# sourceMappingURL=EditableTable-LPAYCK36.mjs.map
278
+ //# sourceMappingURL=EditableTable-TGCVUBLO.mjs.map
279
+ //# sourceMappingURL=EditableTable-TGCVUBLO.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/EditableTable.tsx"],"names":["def"],"mappings":"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","file":"EditableTable-LPAYCK36.mjs","sourcesContent":["import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\n * }>\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumnFromText = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => {\n const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n };\n });\n\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/EditableTable.tsx"],"names":["def"],"mappings":";;;;;;;;;;;;;;;AA+DO,IAAM,sBAA0D,CAAC;AAAA,EACtE;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,UAAU,QAAA,EAAS,GAAI,SAAS,OAAO,CAAA;AAChE,EAAA,MAAM,GAAA,GAAM,QAAA;AACZ,EAAA,MAAM,SAAA,GAAY,KAAK,WAAA,IAAe,IAAA;AACtC,EAAA,MAAM,YAAA,GAAe,KAAK,cAAA,IAAkB,IAAA;AAC5C,EAAA,MAAM,YAAA,GAAe,KAAK,cAAA,IAAkB,IAAA;AAC5C,EAAA,MAAM,eAAA,GAAkB,KAAK,iBAAA,IAAqB,IAAA;AAElD,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,IAAW,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,SAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,IAAkB,YAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoB,KAAK,iBAAA,IAAqB,iBAAA;AACpD,EAAA,MAAM,sBAAA,GAAyB,KAAK,sBAAA,IAA0B,MAAA;AAG9D,EAAA,MAAM,SAAA,GAAuB,QAAQ,MAAM;AACzC,IAAA,IAAI,SAAS,OAAO,KAAA,KAAU,YAAY,SAAA,IAAa,KAAA,IAAS,UAAU,KAAA,EAAO;AAC/E,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,MAAMA,IAAAA,GAAM,QAAA;AACZ,IAAA,MAAM,QAAQA,IAAAA,EAAK,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC5C,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,WAAA,EAAa,EAAE,WAAA,KAAgB;AAAA,KACjC,CAAE,CAAA;AACF,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT,MAAM;AAAC,KACT;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAIpB,EAAA,MAAM,OAAA,GAAU,OAAO,SAAS,CAAA;AAChC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,OAAA,CAAQ,OAAA,GAAU,SAAA;AAAA,EACpB,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAA2B,MAAS,CAAA;AAE9E,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,KAAuB;AACzC,IAAA,QAAA,CAAS,OAAO,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,WAAA,CAAY,OAAA,CAAQ,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACnC,MAAA,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA,GAAI,EAAA;AAAA,IACnB,CAAC,CAAA;AACD,IAAA,UAAA,CAAW;AAAA,MACT,GAAG,WAAA;AAAA,MACH,IAAA,EAAM,CAAC,GAAG,WAAA,CAAY,MAAM,MAAM;AAAA,KACnC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,IAAI,CAAC,aAAA,CAAc,IAAA,EAAK,EAAG;AAC3B,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,WAAA,EAAY,CAAE,OAAA,CAAQ,QAAQ,GAAG,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,GAAA,EAAI;AAChF,IAAA,MAAM,MAAA,GAAsB,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,aAAA,CAAc,IAAA,EAAK,EAAG,WAAA,EAAa,IAAA,EAAK;AACxF,IAAA,UAAA,CAAW;AAAA,MACT,OAAA,EAAS,CAAC,GAAG,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,MACxC,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,GAAG,GAAA,EAAK,CAAC,KAAK,GAAG,IAAG,CAAE;AAAA,KAC9D,CAAA;AACD,IAAA,gBAAA,CAAiB,EAAE,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,KAA2B;AACpD,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,EAAM,WAAW,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,IAAA,CAAK,OAAA,EAAQ;AACpC,IAAA,MAAM,SAAsB,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,aAAa,IAAA,EAAK;AAClE,IAAA,UAAA,CAAW;AAAA,MACT,OAAA,EAAS,CAAC,GAAG,WAAA,CAAY,SAAS,MAAM,CAAA;AAAA,MACxC,IAAA,EAAM,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,MAAS,EAAE,GAAG,GAAA,EAAK,CAAC,KAAK,GAAG,IAAG,CAAE;AAAA,KAC9D,CAAA;AACD,IAAA,gBAAA,CAAiB,MAAS,CAAA;AAAA,EAC5B,CAAA;AAEA,EAAA,MAAM,iBAAA,GACJ,2BAA2B,UAAA,GACvB,CAAC,CAAC,aAAA,GACF,CAAC,CAAC,aAAA,CAAc,IAAA,EAAK;AAC3B,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,IAAI,2BAA2B,UAAA,EAAY;AACzC,MAAA,iBAAA,CAAkB,aAAa,CAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,iBAAA,EAAkB;AAAA,IACpB;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB;AACnC,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,WAAA,CAAY,IAAI,CAAA;AACpC,IAAA,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AACvB,IAAA,UAAA,CAAW,EAAE,GAAG,WAAA,EAAa,IAAA,EAAM,SAAS,CAAA;AAAA,EAC9C,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,YAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC5C,MAAA,MAAM,MAAA,GAAS,EAAE,GAAG,GAAA,EAAI;AACxB,MAAA,OAAO,OAAO,KAAK,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AACD,IAAA,UAAA,CAAW,EAAE,OAAA,EAAS,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,QAAA,EAAkB,KAAA,EAAe,GAAA,KAAgB;AACnE,IAAA,MAAM,cAAc,OAAA,CAAQ,OAAA;AAC5B,IAAA,MAAM,OAAA,GAAU,CAAC,GAAG,WAAA,CAAY,IAAI,CAAA;AACpC,IAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,EAAE,GAAG,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAC,KAAK,GAAG,GAAA,EAAI;AACzD,IAAA,UAAA,CAAW,EAAE,GAAG,WAAA,EAAa,IAAA,EAAM,SAAS,CAAA;AAAA,EAC9C,CAAA;AAKA,EAAA,MAAM,OAAA,GAAU,QAA6C,MAAM;AACjE,IAAA,MAAM,cAAc,SAAA,CAAU,OAAA;AAE9B,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,CAAI,CAAC,GAAA,KAAQ;AACxC,MAAA,MAAM,gBAAA,GACJ,CAAC,QAAA,IACD,eAAA,IACC,IAAI,WAAA,KAAgB,KAAA;AACvB,MAAA,OAAO;AAAA,QACP,aAAa,GAAA,CAAI,EAAA;AAAA,QACjB,MAAA,EAAQ,sBACN,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,MAAA,EAAA,EAAM,cAAI,KAAA,EAAM,CAAA;AAAA,UAChB,gBAAA,oBACE,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,OAAA;AAAA,cACR,IAAA,EAAK,IAAA;AAAA,cACL,SAAA,EAAU,0DAAA;AAAA,cACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,gBAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AAAA,cACrB,CAAA;AAAA,cACA,KAAA,EAAM,eAAA;AAAA,cAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC9B,SAAA,EAEL,CAAA;AAAA,QAEF,IAAA,EAAM,CAAC,IAAA,KAAc;AAGnB,UAAA,uBACI,GAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,IAAA,CAAK,QAAA,EAAS,IAAe,EAAA;AAAA,cACpC,QAAA,EAAU,CAAC,CAAA,KAAM,UAAA,CAAW,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,GAAA,CAAI,EAAA,EAAI,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAAA,cAClE,QAAA;AAAA,cACA,SAAA,EAAU;AAAA;AAAA,WACZ;AAAA,QAEN;AAAA,OACF;AAAA,IACA,CAAC,CAAA;AAED,IAAA,MAAM,gBAAgB,CAAC,QAAA,IAAY,YAAA,IAAgB,SAAA,CAAU,KAAK,MAAA,GAAS,OAAA;AAE3E,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,QAAA,CAAS,IAAA,CAAK;AAAA,QACZ,EAAA,EAAI,SAAA;AAAA,QACJ,MAAA,EAAQ,EAAA;AAAA,QACR,IAAA,EAAM,CAAC,IAAA,qBACL,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAK,IAAA;AAAA,YACL,SAAA,EAAU,sDAAA;AAAA,YACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,SAAA,CAAU,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,YAC1B,CAAA;AAAA,YACA,KAAA,EAAM,YAAA;AAAA,YAEN,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC9B,OAEI,CAAA;AAAA,IACV;AAEA,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,EAAG,CAAC,SAAA,CAAU,OAAA,EAAS,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,QAAA,EAAU,YAAA,EAAc,eAAA,EAAiB,OAAO,CAAC,CAAA;AAE/F,EAAA,MAAM,QAAQ,aAAA,CAAc;AAAA,IAC1B,MAAM,SAAA,CAAU,IAAA;AAAA,IAChB,OAAA;AAAA,IACA,iBAAiB,eAAA;AAAgB,GAClC,CAAA;AAED,EAAA,IAAI,CAAC,UAAU,OAAO,IAAA;AAEtB,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAO,mBAAS,KAAA,EAAM,CAAA;AAAA,MACtB,SAAS,WAAA,oBACR,GAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAiC,mBAAS,WAAA,EAAY;AAAA,KAAA,EAEvE,CAAA;AAAA,oBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,+BAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,eACE,QAAA,EAAA,KAAA,CAAM,eAAA,GAAkB,GAAA,CAAI,CAAC,gCAC5B,GAAA,CAAC,QAAA,EAAA,EACE,QAAA,EAAA,WAAA,CAAY,OAAA,CAAQ,IAAI,CAAC,MAAA,yBACvB,SAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,gBACJ,IAAA,GACA,UAAA;AAAA,QACE,MAAA,CAAO,OAAO,SAAA,CAAU,MAAA;AAAA,QACxB,OAAO,UAAA;AAAW,OACpB,EAAA,EANU,OAAO,EAOvB,CACD,KAVY,WAAA,CAAY,EAW3B,CACD,CAAA,EACH,CAAA;AAAA,sBACA,GAAA,CAAC,SAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,EAAM,MAAA,GACzB,KAAA,CAAM,WAAA,EAAY,CAAE,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBAC5B,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,YAAA,EAAY,GAAA,CAAI,aAAA,EAAc,IAAK,UAAA;AAAA,UAElC,QAAA,EAAA,GAAA,CAAI,iBAAgB,CAAE,GAAA,CAAI,CAAC,IAAA,qBAC1B,GAAA,CAAC,SAAA,EAAA,EAAwB,SAAA,EAAU,KAAA,EAChC,QAAA,EAAA,UAAA;AAAA,YACC,IAAA,CAAK,OAAO,SAAA,CAAU,IAAA;AAAA,YACtB,KAAK,UAAA;AAAW,WAClB,EAAA,EAJc,IAAA,CAAK,EAKrB,CACD;AAAA,SAAA;AAAA,QAVI,GAAA,CAAI;AAAA,OAYZ,CAAA,mBAED,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,SAAS,OAAA,CAAQ,MAAA;AAAA,UACjB,SAAA,EAAU,kBAAA;AAAA,UACX,QAAA,EAAA;AAAA;AAAA,SAGH,CAAA,EAEJ;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAEC,CAAC,QAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sDAAA,EACZ,QAAA,EAAA;AAAA,MAAA,SAAA,mBACC,IAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS,MAAA;AAAA,UAET,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,WAAU,cAAA,EAAe,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE;AAAA;AAAA;AAAA,OACrC,uBAEC,KAAA,EAAA,EAAI,CAAA;AAAA,MAGN,gCACC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACZ,QAAA,EAAA,sBAAA,KAA2B,6BAC1B,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAU,aAAA;AAAA,YACV,WAAA,EAAa,gBAAA;AAAA,YACb,WAAA,EAAa,iBAAA;AAAA,YACb,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,WAAA;AAAA,YACR,OAAA,EAAS,SAAA;AAAA,YACT,UAAU,CAAC,iBAAA;AAAA,YAEV,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EACF,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAa,iBAAA;AAAA,YACb,KAAA,EAAO,aAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAChD,SAAA,EAAU,MAAA;AAAA,YACV,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,cAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,gBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,gBAAA,SAAA,EAAU;AAAA,cACZ;AAAA,YACF;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,WAAA;AAAA,YACR,OAAA,EAAS,SAAA;AAAA,YACT,UAAU,CAAC,iBAAA;AAAA,YAEV,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA,EAEJ;AAAA,KAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA;AAEJ","file":"EditableTable-TGCVUBLO.mjs","sourcesContent":["import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\n * }>\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumnFromText = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => {\n const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n };\n });\n\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"]}
@@ -6,7 +6,7 @@ var chunkTJHG5WHX_cjs = require('./chunk-TJHG5WHX.cjs');
6
6
  require('./chunk-AZSAPO2V.cjs');
7
7
  require('./chunk-4KSZUIJE.cjs');
8
8
  var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
9
- var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
9
+ var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
10
10
  var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
11
11
  require('./chunk-FHHISVCH.cjs');
12
12
  var react = require('react');
@@ -18,7 +18,7 @@ var jsxRuntime = require('react/jsx-runtime');
18
18
  var EditableTableWidget = ({
19
19
  fieldId
20
20
  }) => {
21
- const { fieldDef, value, setValue, disabled } = chunkIDSBJOFY_cjs.useField(fieldId);
21
+ const { fieldDef, value, setValue, disabled } = chunkSHQHDSA4_cjs.useField(fieldId);
22
22
  const def = fieldDef;
23
23
  const canAddRow = def?.allowAddRow ?? true;
24
24
  const canAddColumn = def?.allowAddColumn ?? true;
@@ -277,5 +277,5 @@ var EditableTableWidget = ({
277
277
  };
278
278
 
279
279
  exports.EditableTableWidget = EditableTableWidget;
280
- //# sourceMappingURL=EditableTable-YB4IC3ZK.cjs.map
281
- //# sourceMappingURL=EditableTable-YB4IC3ZK.cjs.map
280
+ //# sourceMappingURL=EditableTable-VCUNJZEX.cjs.map
281
+ //# sourceMappingURL=EditableTable-VCUNJZEX.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ui/widgets/EditableTable.tsx"],"names":["useField","useMemo","def","useRef","useEffect","useState","format","jsxs","jsx","Button","Trash2","Input","useReactTable","getCoreRowModel","Label","Table","TableHeader","TableRow","TableHead","flexRender","TableBody","TableCell","Plus","Fragment","DateTimePicker"],"mappings":"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","file":"EditableTable-YB4IC3ZK.cjs","sourcesContent":["import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\n * }>\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumnFromText = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => {\n const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n };\n });\n\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/ui/widgets/EditableTable.tsx"],"names":["useField","useMemo","def","useRef","useEffect","useState","format","jsxs","jsx","Button","Trash2","Input","useReactTable","getCoreRowModel","Label","Table","TableHeader","TableRow","TableHead","flexRender","TableBody","TableCell","Plus","Fragment","DateTimePicker"],"mappings":"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","file":"EditableTable-VCUNJZEX.cjs","sourcesContent":["import React, { useMemo, useState, useRef, useEffect } from \"react\";\nimport {\n useReactTable,\n getCoreRowModel,\n flexRender,\n type ColumnDef,\n} from \"@tanstack/react-table\";\nimport { format } from \"date-fns\";\nimport { useField } from \"../../react/useField\";\nimport { Button } from \"../shadcn/button\";\nimport { Input } from \"../shadcn/input\";\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"../shadcn/table\";\nimport { Label } from \"../shadcn/label\";\nimport { DateTimePicker } from \"../shadcn/datetime-picker\";\nimport { Trash2, Plus } from \"lucide-react\";\nimport type { EditableTableFieldDef } from \"../../core/types\";\n\n// Define the shape of our table data (matches EditableTableColumnDef + runtime)\ninterface TableColumn {\n id: string;\n label: string;\n allowDelete?: boolean;\n}\n\ninterface TableData {\n columns: TableColumn[];\n rows: Record<string, string>[];\n}\n\ninterface EditableTableWidgetProps {\n fieldId: string;\n}\n\n/**\n * Editable Table widget. Schema (editable_table field):\n *\n * {\n * id: string,\n * type: \"editable_table\",\n * label: string,\n * allowAddRow?: boolean, // default true\n * allowAddColumn?: boolean, // default true\n * allowDeleteRow?: boolean, // default true\n * allowDeleteColumn?: boolean, // default true\n * addRowLabel?: string, // default \"Add Row\"\n * addColumnLabel?: string, // default \"Add Column\"\n * newColumnNameHint?: string, // placeholder for new column input; default \"New Column Name\"\n * newColumnNameInputType?: \"text\" | \"datetime\", // default \"text\"; \"datetime\" uses a date-time picker for column name\n * minRows?: number, // minimum rows to keep; row delete hidden when rows.length <= minRows; default 0\n * columns?: Array<{\n * id: string,\n * label: string,\n * allowDelete?: boolean // if false, delete button for this column is hidden; default true\n * }>\n * }\n */\nexport const EditableTableWidget: React.FC<EditableTableWidgetProps> = ({\n fieldId,\n}) => {\n const { fieldDef, value, setValue, disabled } = useField(fieldId);\n const def = fieldDef as EditableTableFieldDef;\n const canAddRow = def?.allowAddRow ?? true;\n const canAddColumn = def?.allowAddColumn ?? true;\n const canDeleteRow = def?.allowDeleteRow ?? true;\n const canDeleteColumn = def?.allowDeleteColumn ?? true;\n\n const minRows = def?.minRows ?? 0;\n const addRowLabel = def?.addRowLabel ?? \"Add Row\";\n const addColumnLabel = def?.addColumnLabel ?? \"Add Column\";\n const newColumnNameHint = def?.newColumnNameHint ?? \"New Column Name\";\n const newColumnNameInputType = def?.newColumnNameInputType ?? \"text\";\n\n // Initialize data if null/undefined\n const tableData: TableData = useMemo(() => {\n if (value && typeof value === \"object\" && \"columns\" in value && \"rows\" in value) {\n return value as TableData;\n }\n const def = fieldDef as EditableTableFieldDef;\n const cols = (def?.columns || []).map((c) => ({\n id: c.id,\n label: c.label,\n allowDelete: c.allowDelete !== false,\n }));\n return {\n columns: cols,\n rows: [],\n };\n }, [value, fieldDef]);\n\n // Keep a ref to tableData so we can access the latest version in callbacks\n // without forcing re-creation of columns (which causes focus loss).\n const dataRef = useRef(tableData);\n useEffect(() => {\n dataRef.current = tableData;\n }, [tableData]);\n\n const [newColumnName, setNewColumnName] = useState(\"\");\n const [newColumnDate, setNewColumnDate] = useState<Date | undefined>(undefined);\n\n const updateData = (newData: TableData) => {\n setValue(newData);\n };\n\n const addRow = () => {\n const currentData = dataRef.current;\n const newRow: Record<string, string> = {};\n currentData.columns.forEach((col) => {\n newRow[col.id] = \"\";\n });\n updateData({\n ...currentData,\n rows: [...currentData.rows, newRow],\n });\n };\n\n const addColumnFromText = () => {\n if (!newColumnName.trim()) return;\n const currentData = dataRef.current;\n const colId = newColumnName.toLowerCase().replace(/\\s+/g, \"_\") + \"_\" + Date.now();\n const newCol: TableColumn = { id: colId, label: newColumnName.trim(), allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnName(\"\");\n };\n\n const addColumnFromDate = (date: Date | undefined) => {\n if (!date) return;\n const currentData = dataRef.current;\n const label = format(date, \"PPP HH:mm\");\n const colId = \"col_\" + date.getTime();\n const newCol: TableColumn = { id: colId, label, allowDelete: true };\n updateData({\n columns: [...currentData.columns, newCol],\n rows: currentData.rows.map((row) => ({ ...row, [colId]: \"\" })),\n });\n setNewColumnDate(undefined);\n };\n\n const hasValidNewColumn =\n newColumnNameInputType === \"datetime\"\n ? !!newColumnDate\n : !!newColumnName.trim();\n const addColumn = () => {\n if (newColumnNameInputType === \"datetime\") {\n addColumnFromDate(newColumnDate);\n } else {\n addColumnFromText();\n }\n };\n\n // We use refs inside these callbacks to ensure they are stable and don't depend on changing data\n const removeRow = (index: number) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows.splice(index, 1);\n updateData({ ...currentData, rows: newRows });\n };\n\n const removeColumn = (colId: string) => {\n const currentData = dataRef.current;\n const newCols = currentData.columns.filter((c) => c.id !== colId);\n const newRows = currentData.rows.map((row) => {\n const newRow = { ...row };\n delete newRow[colId];\n return newRow;\n });\n updateData({ columns: newCols, rows: newRows });\n };\n\n const updateCell = (rowIndex: number, colId: string, val: string) => {\n const currentData = dataRef.current;\n const newRows = [...currentData.rows];\n newRows[rowIndex] = { ...newRows[rowIndex], [colId]: val };\n updateData({ ...currentData, rows: newRows });\n };\n\n // Generate columns for tanstack table\n // CRITICAL: This useMemo MUST NOT depend on tableData.rows, or focus will be lost on every type.\n // It only depends on tableData.columns (structure) and disabled state.\n const columns = useMemo<ColumnDef<Record<string, string>>[]>(() => {\n const currentCols = tableData.columns; // We only care about columns structure here\n \n const dataCols = currentCols.map((col) => {\n const showColumnDelete =\n !disabled &&\n canDeleteColumn &&\n (col.allowDelete !== false);\n return {\n accessorKey: col.id,\n header: () => (\n <div className=\"flex items-center justify-between space-x-2\">\n <span>{col.label}</span>\n {showColumnDelete && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-6 w-6 p-0 text-muted-foreground hover:text-destructive\"\n onClick={(e) => {\n e.stopPropagation();\n removeColumn(col.id);\n }}\n title=\"Remove Column\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </Button>\n )}\n </div>\n ),\n cell: (info: any) => {\n // We use a local component or direct render, but the key is that 'columns' array doesn't change identity.\n // The cell will re-render because 'info.getValue()' changes, but the Input node stays mounted.\n return (\n <Input\n value={info.getValue() as string || \"\"}\n onChange={(e) => updateCell(info.row.index, col.id, e.target.value)}\n disabled={disabled}\n className=\"h-8 border bg-transparent\"\n />\n );\n },\n };\n });\n\n const showRowDelete = !disabled && canDeleteRow && tableData.rows.length > minRows;\n // Add delete row column\n if (showRowDelete) {\n dataCols.push({\n id: \"actions\",\n header: \"\",\n cell: (info: any) => (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 w-8 p-0 text-destructive hover:bg-destructive/10\"\n onClick={(e) => {\n e.stopPropagation();\n removeRow(info.row.index);\n }}\n title=\"Remove Row\"\n >\n <Trash2 className=\"h-4 w-4\" />\n </Button>\n ),\n } as any);\n }\n\n return dataCols;\n }, [tableData.columns, tableData.rows.length, disabled, canDeleteRow, canDeleteColumn, minRows]); // columns structure + row count for delete visibility\n\n const table = useReactTable({\n data: tableData.rows,\n columns,\n getCoreRowModel: getCoreRowModel(),\n });\n\n if (!fieldDef) return null;\n\n return (\n <div className=\"space-y-4 border rounded-md p-4\">\n <div className=\"flex flex-col space-y-2\">\n <Label>{fieldDef.label}</Label>\n {fieldDef.description && (\n <p className=\"text-sm text-muted-foreground\">{fieldDef.description}</p>\n )}\n </div>\n\n <div className=\"rounded-md border\">\n <Table>\n <TableHeader>\n {table.getHeaderGroups().map((headerGroup) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => (\n <TableHead key={header.id}>\n {header.isPlaceholder\n ? null\n : flexRender(\n header.column.columnDef.header,\n header.getContext()\n )}\n </TableHead>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody>\n {table.getRowModel().rows?.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow\n key={row.id}\n data-state={row.getIsSelected() && \"selected\"}\n >\n {row.getVisibleCells().map((cell) => (\n <TableCell key={cell.id} className=\"p-1\">\n {flexRender(\n cell.column.columnDef.cell,\n cell.getContext()\n )}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow>\n <TableCell\n colSpan={columns.length}\n className=\"h-24 text-center\"\n >\n No data. Add rows or columns to start.\n </TableCell>\n </TableRow>\n )}\n </TableBody>\n </Table>\n </div>\n\n {!disabled && (\n <div className=\"flex flex-col sm:flex-row gap-4 justify-between pt-2\">\n {canAddRow ? (\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={addRow}\n >\n <Plus className=\"mr-2 h-4 w-4\" /> {addRowLabel}\n </Button>\n ) : (\n <div />\n )}\n\n {canAddColumn && (\n <div className=\"flex gap-2 items-center flex-wrap\">\n {newColumnNameInputType === \"datetime\" ? (\n <>\n <DateTimePicker\n dateTime={newColumnDate}\n setDateTime={setNewColumnDate}\n placeholder={newColumnNameHint}\n className=\"w-[280px]\"\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n ) : (\n <>\n <Input\n placeholder={newColumnNameHint}\n value={newColumnName}\n onChange={(e) => setNewColumnName(e.target.value)}\n className=\"w-48\"\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n addColumn();\n }\n }}\n />\n <Button\n type=\"button\"\n variant=\"secondary\"\n onClick={addColumn}\n disabled={!hasValidNewColumn}\n >\n {addColumnLabel}\n </Button>\n </>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n );\n};\n"]}
@@ -2,7 +2,7 @@ import { Card, CardContent } from './chunk-LGGOBIEA.mjs';
2
2
  import { Popover, PopoverTrigger, PopoverContent, Calendar as Calendar$1 } from './chunk-BMNY7F6H.mjs';
3
3
  import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from './chunk-AZHTIUOL.mjs';
4
4
  import { Button } from './chunk-GXXWMHAA.mjs';
5
- import { useField } from './chunk-ZGPHTPAN.mjs';
5
+ import { useField } from './chunk-ZTT5XJR7.mjs';
6
6
  import { Label } from './chunk-HEFZA2AH.mjs';
7
7
  import { cn } from './chunk-VPU66PI6.mjs';
8
8
  import { useState, useCallback } from 'react';
@@ -279,5 +279,5 @@ var FollowupWidget = ({ fieldId }) => {
279
279
  };
280
280
 
281
281
  export { FollowupWidget };
282
- //# sourceMappingURL=FollowupWidget-NJ4QDBOG.mjs.map
283
- //# sourceMappingURL=FollowupWidget-NJ4QDBOG.mjs.map
282
+ //# sourceMappingURL=FollowupWidget-F6FRZO4T.mjs.map
283
+ //# sourceMappingURL=FollowupWidget-F6FRZO4T.mjs.map