formanitor 0.1.10 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/AddInvestigationWidget-G7NPTSFY.cjs +32 -0
  2. package/dist/AddInvestigationWidget-G7NPTSFY.cjs.map +1 -0
  3. package/dist/AddInvestigationWidget-TQUKTGAW.mjs +30 -0
  4. package/dist/AddInvestigationWidget-TQUKTGAW.mjs.map +1 -0
  5. package/dist/AddMedicationWidget-26RHKIA6.cjs +32 -0
  6. package/dist/AddMedicationWidget-26RHKIA6.cjs.map +1 -0
  7. package/dist/AddMedicationWidget-I5UIT3WG.mjs +30 -0
  8. package/dist/AddMedicationWidget-I5UIT3WG.mjs.map +1 -0
  9. package/dist/AddProcedureWidget-B6OUF3BM.cjs +278 -0
  10. package/dist/AddProcedureWidget-B6OUF3BM.cjs.map +1 -0
  11. package/dist/AddProcedureWidget-NB46COB6.mjs +276 -0
  12. package/dist/AddProcedureWidget-NB46COB6.mjs.map +1 -0
  13. package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs +298 -0
  14. package/dist/BiometryIolWorkupWidget-F7HRYMOJ.mjs.map +1 -0
  15. package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs +300 -0
  16. package/dist/BiometryIolWorkupWidget-TCU4MMVI.cjs.map +1 -0
  17. package/dist/DateTimeWidget-72YUK7PX.cjs +61 -0
  18. package/dist/DateTimeWidget-72YUK7PX.cjs.map +1 -0
  19. package/dist/DateTimeWidget-WKQIEQSA.mjs +59 -0
  20. package/dist/DateTimeWidget-WKQIEQSA.mjs.map +1 -0
  21. package/dist/DateWidget-K2TVTZ7Z.mjs +72 -0
  22. package/dist/DateWidget-K2TVTZ7Z.mjs.map +1 -0
  23. package/dist/DateWidget-SYDMSGWO.cjs +74 -0
  24. package/dist/DateWidget-SYDMSGWO.cjs.map +1 -0
  25. package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs +184 -0
  26. package/dist/DiagnosisTextareaWidget-RD65PGDY.mjs.map +1 -0
  27. package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs +190 -0
  28. package/dist/DiagnosisTextareaWidget-UKWLE2SQ.cjs.map +1 -0
  29. package/dist/DifferentialDiagnosisWidget-FENJP245.mjs +15 -0
  30. package/dist/DifferentialDiagnosisWidget-FENJP245.mjs.map +1 -0
  31. package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs +17 -0
  32. package/dist/DifferentialDiagnosisWidget-ZGFXP2BH.cjs.map +1 -0
  33. package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs +161 -0
  34. package/dist/DischargeMedicationOrdersWidget-26ALTGJM.mjs.map +1 -0
  35. package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs +163 -0
  36. package/dist/DischargeMedicationOrdersWidget-B4CJQ3QS.cjs.map +1 -0
  37. package/dist/EditableTable-LPAYCK36.mjs +279 -0
  38. package/dist/EditableTable-LPAYCK36.mjs.map +1 -0
  39. package/dist/EditableTable-YB4IC3ZK.cjs +281 -0
  40. package/dist/EditableTable-YB4IC3ZK.cjs.map +1 -0
  41. package/dist/FollowupWidget-EEKOI2TW.cjs +285 -0
  42. package/dist/FollowupWidget-EEKOI2TW.cjs.map +1 -0
  43. package/dist/FollowupWidget-NJ4QDBOG.mjs +283 -0
  44. package/dist/FollowupWidget-NJ4QDBOG.mjs.map +1 -0
  45. package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs +93 -0
  46. package/dist/FunctionalImpairmentScoreWidget-HAAPCMIS.cjs.map +1 -0
  47. package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs +91 -0
  48. package/dist/FunctionalImpairmentScoreWidget-ZNLKKBYN.mjs.map +1 -0
  49. package/dist/GsExaminationWidget-EX6C3EF5.cjs +528 -0
  50. package/dist/GsExaminationWidget-EX6C3EF5.cjs.map +1 -0
  51. package/dist/GsExaminationWidget-MEIUHRQQ.mjs +526 -0
  52. package/dist/GsExaminationWidget-MEIUHRQQ.mjs.map +1 -0
  53. package/dist/GsGradingWidget-4UPOEYNL.mjs +90 -0
  54. package/dist/GsGradingWidget-4UPOEYNL.mjs.map +1 -0
  55. package/dist/GsGradingWidget-IV3UF63W.cjs +92 -0
  56. package/dist/GsGradingWidget-IV3UF63W.cjs.map +1 -0
  57. package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs +398 -0
  58. package/dist/GsSmartHistoryWidget-7QNJZEI4.cjs.map +1 -0
  59. package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs +396 -0
  60. package/dist/GsSmartHistoryWidget-LGN7W2AV.mjs.map +1 -0
  61. package/dist/HiddenVitalsWidget-AMH32HT2.cjs +55 -0
  62. package/dist/HiddenVitalsWidget-AMH32HT2.cjs.map +1 -0
  63. package/dist/HiddenVitalsWidget-W23IFSEF.mjs +53 -0
  64. package/dist/HiddenVitalsWidget-W23IFSEF.mjs.map +1 -0
  65. package/dist/LensAssessmentWidget-LSHBUTT5.cjs +234 -0
  66. package/dist/LensAssessmentWidget-LSHBUTT5.cjs.map +1 -0
  67. package/dist/LensAssessmentWidget-SJ6YUTSN.mjs +232 -0
  68. package/dist/LensAssessmentWidget-SJ6YUTSN.mjs.map +1 -0
  69. package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs +74 -0
  70. package/dist/MarMedicationOrdersWidget-IKMAFPRG.mjs.map +1 -0
  71. package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs +76 -0
  72. package/dist/MarMedicationOrdersWidget-ZKZLSZRN.cjs.map +1 -0
  73. package/dist/OBGExaminationWidget-BK4ERETW.mjs +213 -0
  74. package/dist/OBGExaminationWidget-BK4ERETW.mjs.map +1 -0
  75. package/dist/OBGExaminationWidget-SMFZ2WCL.cjs +215 -0
  76. package/dist/OBGExaminationWidget-SMFZ2WCL.cjs.map +1 -0
  77. package/dist/OBGPathwayWidget-5YTUDBEH.cjs +519 -0
  78. package/dist/OBGPathwayWidget-5YTUDBEH.cjs.map +1 -0
  79. package/dist/OBGPathwayWidget-U5BCAESB.mjs +517 -0
  80. package/dist/OBGPathwayWidget-U5BCAESB.mjs.map +1 -0
  81. package/dist/ObstetricHistoryWidget-GC63CB3U.cjs +1115 -0
  82. package/dist/ObstetricHistoryWidget-GC63CB3U.cjs.map +1 -0
  83. package/dist/ObstetricHistoryWidget-WD572Q7H.mjs +1113 -0
  84. package/dist/ObstetricHistoryWidget-WD572Q7H.mjs.map +1 -0
  85. package/dist/OphthalDiagnosisWidget-QXFK446I.cjs +91 -0
  86. package/dist/OphthalDiagnosisWidget-QXFK446I.cjs.map +1 -0
  87. package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs +89 -0
  88. package/dist/OphthalDiagnosisWidget-Y3AHD6AG.mjs.map +1 -0
  89. package/dist/OphthalmologyWidget-CRQMN5QU.mjs +1329 -0
  90. package/dist/OphthalmologyWidget-CRQMN5QU.mjs.map +1 -0
  91. package/dist/OphthalmologyWidget-U2HQMZ4J.cjs +1331 -0
  92. package/dist/OphthalmologyWidget-U2HQMZ4J.cjs.map +1 -0
  93. package/dist/OrthopedicExamWidget-LP7VN3W5.cjs +368 -0
  94. package/dist/OrthopedicExamWidget-LP7VN3W5.cjs.map +1 -0
  95. package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs +366 -0
  96. package/dist/OrthopedicExamWidget-PAOIVU6Z.mjs.map +1 -0
  97. package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs +153 -0
  98. package/dist/PainScaleFlagsWidget-IBNGVVHD.cjs.map +1 -0
  99. package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs +151 -0
  100. package/dist/PainScaleFlagsWidget-MRMQ7HPJ.mjs.map +1 -0
  101. package/dist/ReadOnlyTable-4Y2XW4MX.mjs +6 -0
  102. package/dist/ReadOnlyTable-4Y2XW4MX.mjs.map +1 -0
  103. package/dist/ReadOnlyTable-L7G6GWEJ.cjs +15 -0
  104. package/dist/ReadOnlyTable-L7G6GWEJ.cjs.map +1 -0
  105. package/dist/ReferralWidget-IYTS32TS.mjs +169 -0
  106. package/dist/ReferralWidget-IYTS32TS.mjs.map +1 -0
  107. package/dist/ReferralWidget-PDNEKHFO.cjs +171 -0
  108. package/dist/ReferralWidget-PDNEKHFO.cjs.map +1 -0
  109. package/dist/RichTextWidget-5OOJ2LJN.mjs +11 -0
  110. package/dist/RichTextWidget-5OOJ2LJN.mjs.map +1 -0
  111. package/dist/RichTextWidget-XWLOHKLE.cjs +24 -0
  112. package/dist/RichTextWidget-XWLOHKLE.cjs.map +1 -0
  113. package/dist/SmartTextarea-L7Q4CORK.cjs +19 -0
  114. package/dist/SmartTextarea-L7Q4CORK.cjs.map +1 -0
  115. package/dist/SmartTextarea-ZCXGMZLG.mjs +10 -0
  116. package/dist/SmartTextarea-ZCXGMZLG.mjs.map +1 -0
  117. package/dist/SuggestionTextareaWidget-2TEITBPF.cjs +226 -0
  118. package/dist/SuggestionTextareaWidget-2TEITBPF.cjs.map +1 -0
  119. package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs +215 -0
  120. package/dist/SuggestionTextareaWidget-RN5LZYFC.mjs.map +1 -0
  121. package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs +144 -0
  122. package/dist/SurgicalRiskFlagsWidget-DBICX4MB.mjs.map +1 -0
  123. package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs +146 -0
  124. package/dist/SurgicalRiskFlagsWidget-JCSL3GWS.cjs.map +1 -0
  125. package/dist/UrologyExaminationWidget-74L3IN2X.cjs +273 -0
  126. package/dist/UrologyExaminationWidget-74L3IN2X.cjs.map +1 -0
  127. package/dist/UrologyExaminationWidget-IQEBP6CI.mjs +271 -0
  128. package/dist/UrologyExaminationWidget-IQEBP6CI.mjs.map +1 -0
  129. package/dist/UrologyPathwayWidget-S4QY6RD6.mjs +153 -0
  130. package/dist/UrologyPathwayWidget-S4QY6RD6.mjs.map +1 -0
  131. package/dist/UrologyPathwayWidget-UJY5EW2G.cjs +155 -0
  132. package/dist/UrologyPathwayWidget-UJY5EW2G.cjs.map +1 -0
  133. package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs +469 -0
  134. package/dist/UrologySmartHistoryWidget-NFTHHK6A.mjs.map +1 -0
  135. package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs +471 -0
  136. package/dist/UrologySmartHistoryWidget-XKZF63BV.cjs.map +1 -0
  137. package/dist/VitalsWidget-44UWQGIF.cjs +208 -0
  138. package/dist/VitalsWidget-44UWQGIF.cjs.map +1 -0
  139. package/dist/VitalsWidget-MBYDGC7U.mjs +187 -0
  140. package/dist/VitalsWidget-MBYDGC7U.mjs.map +1 -0
  141. package/dist/chunk-4BAKQIPJ.mjs +27 -0
  142. package/dist/chunk-4BAKQIPJ.mjs.map +1 -0
  143. package/dist/chunk-4KSZUIJE.cjs +143 -0
  144. package/dist/chunk-4KSZUIJE.cjs.map +1 -0
  145. package/dist/chunk-4PMNVBJD.mjs +121 -0
  146. package/dist/chunk-4PMNVBJD.mjs.map +1 -0
  147. package/dist/chunk-5E3APMY6.cjs +54 -0
  148. package/dist/chunk-5E3APMY6.cjs.map +1 -0
  149. package/dist/chunk-AIZ3XYEZ.cjs +551 -0
  150. package/dist/chunk-AIZ3XYEZ.cjs.map +1 -0
  151. package/dist/chunk-AZHTIUOL.mjs +116 -0
  152. package/dist/chunk-AZHTIUOL.mjs.map +1 -0
  153. package/dist/chunk-AZSAPO2V.cjs +174 -0
  154. package/dist/chunk-AZSAPO2V.cjs.map +1 -0
  155. package/dist/chunk-AZVJU7NZ.mjs +137 -0
  156. package/dist/chunk-AZVJU7NZ.mjs.map +1 -0
  157. package/dist/chunk-B3GBIAHZ.mjs +285 -0
  158. package/dist/chunk-B3GBIAHZ.mjs.map +1 -0
  159. package/dist/chunk-BMNY7F6H.mjs +148 -0
  160. package/dist/chunk-BMNY7F6H.mjs.map +1 -0
  161. package/dist/chunk-BU4ZEAAP.mjs +102 -0
  162. package/dist/chunk-BU4ZEAAP.mjs.map +1 -0
  163. package/dist/chunk-CTW65YW2.cjs +388 -0
  164. package/dist/chunk-CTW65YW2.cjs.map +1 -0
  165. package/dist/chunk-DE7VZVKR.cjs +140 -0
  166. package/dist/chunk-DE7VZVKR.cjs.map +1 -0
  167. package/dist/chunk-DZYV47QC.mjs +54 -0
  168. package/dist/chunk-DZYV47QC.mjs.map +1 -0
  169. package/dist/chunk-E7WUDHSA.cjs +127 -0
  170. package/dist/chunk-E7WUDHSA.cjs.map +1 -0
  171. package/dist/chunk-FHHISVCH.cjs +13 -0
  172. package/dist/chunk-FHHISVCH.cjs.map +1 -0
  173. package/dist/chunk-FZEEWRW3.cjs +77 -0
  174. package/dist/chunk-FZEEWRW3.cjs.map +1 -0
  175. package/dist/chunk-GFDE2KZC.mjs +228 -0
  176. package/dist/chunk-GFDE2KZC.mjs.map +1 -0
  177. package/dist/chunk-GNZWSVTB.mjs +29 -0
  178. package/dist/chunk-GNZWSVTB.mjs.map +1 -0
  179. package/dist/chunk-GXXWMHAA.mjs +49 -0
  180. package/dist/chunk-GXXWMHAA.mjs.map +1 -0
  181. package/dist/chunk-GZPCYSJK.mjs +104 -0
  182. package/dist/chunk-GZPCYSJK.mjs.map +1 -0
  183. package/dist/chunk-HEFZA2AH.mjs +22 -0
  184. package/dist/chunk-HEFZA2AH.mjs.map +1 -0
  185. package/dist/chunk-I4AV6BQF.mjs +10 -0
  186. package/dist/chunk-I4AV6BQF.mjs.map +1 -0
  187. package/dist/chunk-IDSBJOFY.cjs +1885 -0
  188. package/dist/chunk-IDSBJOFY.cjs.map +1 -0
  189. package/dist/chunk-IFMQKLNW.mjs +39 -0
  190. package/dist/chunk-IFMQKLNW.mjs.map +1 -0
  191. package/dist/chunk-IFSKLIS2.cjs +12 -0
  192. package/dist/chunk-IFSKLIS2.cjs.map +1 -0
  193. package/dist/chunk-IKAKE7TR.mjs +527 -0
  194. package/dist/chunk-IKAKE7TR.mjs.map +1 -0
  195. package/dist/chunk-JE6VXRWW.cjs +86 -0
  196. package/dist/chunk-JE6VXRWW.cjs.map +1 -0
  197. package/dist/chunk-JMGUUFOJ.cjs +45 -0
  198. package/dist/chunk-JMGUUFOJ.cjs.map +1 -0
  199. package/dist/chunk-JNVSA77L.cjs +236 -0
  200. package/dist/chunk-JNVSA77L.cjs.map +1 -0
  201. package/dist/chunk-KJA5BLGX.cjs +31 -0
  202. package/dist/chunk-KJA5BLGX.cjs.map +1 -0
  203. package/dist/chunk-KMJOTMUQ.cjs +109 -0
  204. package/dist/chunk-KMJOTMUQ.cjs.map +1 -0
  205. package/dist/chunk-KPGTPJDH.cjs +32 -0
  206. package/dist/chunk-KPGTPJDH.cjs.map +1 -0
  207. package/dist/chunk-LBWB7MYU.cjs +287 -0
  208. package/dist/chunk-LBWB7MYU.cjs.map +1 -0
  209. package/dist/chunk-LGGOBIEA.mjs +61 -0
  210. package/dist/chunk-LGGOBIEA.mjs.map +1 -0
  211. package/dist/chunk-LQYWMYEC.mjs +28 -0
  212. package/dist/chunk-LQYWMYEC.mjs.map +1 -0
  213. package/dist/chunk-MIUUO4CI.mjs +361 -0
  214. package/dist/chunk-MIUUO4CI.mjs.map +1 -0
  215. package/dist/chunk-N4L76SHJ.cjs +65 -0
  216. package/dist/chunk-N4L76SHJ.cjs.map +1 -0
  217. package/dist/chunk-NJJTIL3U.cjs +73 -0
  218. package/dist/chunk-NJJTIL3U.cjs.map +1 -0
  219. package/dist/chunk-O3VQBPEW.cjs +72 -0
  220. package/dist/chunk-O3VQBPEW.cjs.map +1 -0
  221. package/dist/chunk-P62377LB.cjs +27 -0
  222. package/dist/chunk-P62377LB.cjs.map +1 -0
  223. package/dist/chunk-PHADAQSH.cjs +49 -0
  224. package/dist/chunk-PHADAQSH.cjs.map +1 -0
  225. package/dist/chunk-PZBJYPWW.cjs +52 -0
  226. package/dist/chunk-PZBJYPWW.cjs.map +1 -0
  227. package/dist/chunk-QKJ7BQSR.cjs +538 -0
  228. package/dist/chunk-QKJ7BQSR.cjs.map +1 -0
  229. package/dist/chunk-QS6WG2XJ.cjs +56 -0
  230. package/dist/chunk-QS6WG2XJ.cjs.map +1 -0
  231. package/dist/chunk-S7EMPE2D.cjs +104 -0
  232. package/dist/chunk-S7EMPE2D.cjs.map +1 -0
  233. package/dist/chunk-SCMXLRX5.mjs +42 -0
  234. package/dist/chunk-SCMXLRX5.mjs.map +1 -0
  235. package/dist/chunk-TJHG5WHX.cjs +47 -0
  236. package/dist/chunk-TJHG5WHX.cjs.map +1 -0
  237. package/dist/chunk-UGGUIXUS.cjs +41 -0
  238. package/dist/chunk-UGGUIXUS.cjs.map +1 -0
  239. package/dist/chunk-UULLSS4O.mjs +82 -0
  240. package/dist/chunk-UULLSS4O.mjs.map +1 -0
  241. package/dist/chunk-VNFBUAZD.mjs +25 -0
  242. package/dist/chunk-VNFBUAZD.mjs.map +1 -0
  243. package/dist/chunk-VPU66PI6.mjs +11 -0
  244. package/dist/chunk-VPU66PI6.mjs.map +1 -0
  245. package/dist/chunk-WYVXXEZI.mjs +46 -0
  246. package/dist/chunk-WYVXXEZI.mjs.map +1 -0
  247. package/dist/chunk-XDUVO3IZ.mjs +547 -0
  248. package/dist/chunk-XDUVO3IZ.mjs.map +1 -0
  249. package/dist/chunk-XR2ZM654.mjs +30 -0
  250. package/dist/chunk-XR2ZM654.mjs.map +1 -0
  251. package/dist/chunk-Y7TIWH4I.mjs +25 -0
  252. package/dist/chunk-Y7TIWH4I.mjs.map +1 -0
  253. package/dist/chunk-YEFM2ERQ.cjs +143 -0
  254. package/dist/chunk-YEFM2ERQ.cjs.map +1 -0
  255. package/dist/chunk-YYPMIUDW.mjs +69 -0
  256. package/dist/chunk-YYPMIUDW.mjs.map +1 -0
  257. package/dist/chunk-ZGPHTPAN.mjs +1851 -0
  258. package/dist/chunk-ZGPHTPAN.mjs.map +1 -0
  259. package/dist/chunk-ZSOIQVB3.mjs +75 -0
  260. package/dist/chunk-ZSOIQVB3.mjs.map +1 -0
  261. package/dist/index.cjs +1596 -14537
  262. package/dist/index.cjs.map +1 -1
  263. package/dist/index.d.cts +4 -767
  264. package/dist/index.d.ts +4 -767
  265. package/dist/index.mjs +1358 -14346
  266. package/dist/index.mjs.map +1 -1
  267. package/dist/read-only-table.cjs +15 -0
  268. package/dist/read-only-table.cjs.map +1 -0
  269. package/dist/read-only-table.d.cts +10 -0
  270. package/dist/read-only-table.d.ts +10 -0
  271. package/dist/read-only-table.mjs +6 -0
  272. package/dist/read-only-table.mjs.map +1 -0
  273. package/dist/rich-text.cjs +24 -0
  274. package/dist/rich-text.cjs.map +1 -0
  275. package/dist/rich-text.d.cts +8 -0
  276. package/dist/rich-text.d.ts +8 -0
  277. package/dist/rich-text.mjs +11 -0
  278. package/dist/rich-text.mjs.map +1 -0
  279. package/dist/richTextClassName--8wkuHkW.d.cts +10 -0
  280. package/dist/richTextClassName--8wkuHkW.d.ts +10 -0
  281. package/dist/smart.cjs +23 -0
  282. package/dist/smart.cjs.map +1 -0
  283. package/dist/smart.d.cts +23 -0
  284. package/dist/smart.d.ts +23 -0
  285. package/dist/smart.mjs +10 -0
  286. package/dist/smart.mjs.map +1 -0
  287. package/dist/types-D0iYXUOo.d.cts +736 -0
  288. package/dist/types-D0iYXUOo.d.ts +736 -0
  289. package/package.json +20 -2
  290. package/src/styles/index.css +35 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/utils.ts"],"names":[],"mappings":";;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B","file":"chunk-VPU66PI6.mjs","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"]}
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-VPU66PI6.mjs';
2
+ import { jsx } from 'react/jsx-runtime';
3
+
4
+ function isLabelVisible(fieldDef) {
5
+ return fieldDef.style?.labelVisible !== false;
6
+ }
7
+ function FieldRequiredIndicator({
8
+ fieldDef
9
+ }) {
10
+ if (!fieldDef.required) return null;
11
+ if (fieldDef.style?.showRequiredAsterisk === false) return null;
12
+ return /* @__PURE__ */ jsx(
13
+ "span",
14
+ {
15
+ className: cn(
16
+ "text-red-500",
17
+ fieldDef.style?.classNames?.requiredIndicator
18
+ ),
19
+ "aria-hidden": true,
20
+ children: "*"
21
+ }
22
+ );
23
+ }
24
+ function fieldWrapperClass(fieldDef, ...defaults) {
25
+ return cn(...defaults, fieldDef.style?.classNames?.wrapper);
26
+ }
27
+ function fieldLabelClass(fieldDef, ...defaults) {
28
+ return cn(...defaults, fieldDef.style?.classNames?.label);
29
+ }
30
+ function fieldControlClass(fieldDef, ...defaults) {
31
+ const controlClass = fieldDef.style?.classNames?.control;
32
+ if (fieldDef.style?.fullControl && controlClass) {
33
+ return cn(controlClass);
34
+ }
35
+ return cn(...defaults, fieldDef.style?.classNames?.control);
36
+ }
37
+ function fieldDescriptionClass(fieldDef, ...defaults) {
38
+ return cn(...defaults, fieldDef.style?.classNames?.description);
39
+ }
40
+ function fieldErrorClass(fieldDef, ...defaults) {
41
+ return cn(...defaults, fieldDef.style?.classNames?.error);
42
+ }
43
+
44
+ export { FieldRequiredIndicator, fieldControlClass, fieldDescriptionClass, fieldErrorClass, fieldLabelClass, fieldWrapperClass, isLabelVisible };
45
+ //# sourceMappingURL=chunk-WYVXXEZI.mjs.map
46
+ //# sourceMappingURL=chunk-WYVXXEZI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/fieldStyle.tsx"],"names":[],"mappings":";;;AAIO,SAAS,eAAe,QAAA,EAAgD;AAC7E,EAAA,OAAO,QAAA,CAAS,OAAO,YAAA,KAAiB,KAAA;AAC1C;AAEO,SAAS,sBAAA,CAAuB;AAAA,EACrC;AACF,CAAA,EAEG;AACD,EAAA,IAAI,CAAC,QAAA,CAAS,QAAA,EAAU,OAAO,IAAA;AAC/B,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,oBAAA,KAAyB,KAAA,EAAO,OAAO,IAAA;AAC3D,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,cAAA;AAAA,QACA,QAAA,CAAS,OAAO,UAAA,EAAY;AAAA,OAC9B;AAAA,MACA,aAAA,EAAW,IAAA;AAAA,MACZ,QAAA,EAAA;AAAA;AAAA,GAED;AAEJ;AAEO,SAAS,iBAAA,CACd,aACG,QAAA,EACK;AACR,EAAA,OAAO,GAAG,GAAG,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,YAAY,OAAO,CAAA;AAC5D;AAEO,SAAS,eAAA,CACd,aACG,QAAA,EACK;AACR,EAAA,OAAO,GAAG,GAAG,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,YAAY,KAAK,CAAA;AAC1D;AAEO,SAAS,iBAAA,CACd,aACG,QAAA,EACK;AACR,EAAA,MAAM,YAAA,GAAe,QAAA,CAAS,KAAA,EAAO,UAAA,EAAY,OAAA;AACjD,EAAA,IAAI,QAAA,CAAS,KAAA,EAAO,WAAA,IAAe,YAAA,EAAc;AAC/C,IAAA,OAAO,GAAG,YAAY,CAAA;AAAA,EACxB;AACA,EAAA,OAAO,GAAG,GAAG,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,YAAY,OAAO,CAAA;AAC5D;AAEO,SAAS,qBAAA,CACd,aACG,QAAA,EACK;AACR,EAAA,OAAO,GAAG,GAAG,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,YAAY,WAAW,CAAA;AAChE;AAEO,SAAS,eAAA,CACd,aACG,QAAA,EACK;AACR,EAAA,OAAO,GAAG,GAAG,QAAA,EAAU,QAAA,CAAS,KAAA,EAAO,YAAY,KAAK,CAAA;AAC1D","file":"chunk-WYVXXEZI.mjs","sourcesContent":["/* eslint-disable react-refresh/only-export-components -- shared field presentation helpers and indicator */\nimport type { BaseFieldDef } from \"../core/types\";\nimport { cn } from \"../core/utils\";\n\nexport function isLabelVisible(fieldDef: Pick<BaseFieldDef, \"style\">): boolean {\n return fieldDef.style?.labelVisible !== false;\n}\n\nexport function FieldRequiredIndicator({\n fieldDef,\n}: {\n fieldDef: Pick<BaseFieldDef, \"required\" | \"style\">;\n}) {\n if (!fieldDef.required) return null;\n if (fieldDef.style?.showRequiredAsterisk === false) return null;\n return (\n <span\n className={cn(\n \"text-red-500\",\n fieldDef.style?.classNames?.requiredIndicator,\n )}\n aria-hidden\n >\n *\n </span>\n );\n}\n\nexport function fieldWrapperClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.wrapper);\n}\n\nexport function fieldLabelClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.label);\n}\n\nexport function fieldControlClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n const controlClass = fieldDef.style?.classNames?.control;\n if (fieldDef.style?.fullControl && controlClass) {\n return cn(controlClass);\n }\n return cn(...defaults, fieldDef.style?.classNames?.control);\n}\n\nexport function fieldDescriptionClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.description);\n}\n\nexport function fieldErrorClass(\n fieldDef: Pick<BaseFieldDef, \"style\">,\n ...defaults: (string | undefined)[]\n): string {\n return cn(...defaults, fieldDef.style?.classNames?.error);\n}\n"]}
@@ -0,0 +1,547 @@
1
+ import { AddEntityDialog } from './chunk-GZPCYSJK.mjs';
2
+ import { Input } from './chunk-VNFBUAZD.mjs';
3
+ import { cn } from './chunk-VPU66PI6.mjs';
4
+ import { createContext, useContext, useState, useRef, useEffect } from 'react';
5
+ import { Plus, Trash2, ChevronRight, Check, ChevronUp, ChevronDown } from 'lucide-react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ var AISuggestionsContext = createContext({});
9
+ function useAISuggestions() {
10
+ return useContext(AISuggestionsContext);
11
+ }
12
+ var AISuggestionsProvider = AISuggestionsContext.Provider;
13
+ var BEFORE_AFTER_OPTIONS = [
14
+ { label: "Blank", value: "" },
15
+ { label: "AFTER FOOD", value: "AFTER FOOD" },
16
+ { label: "BEFORE FOOD", value: "BEFORE FOOD" },
17
+ { label: "WITH FOOD", value: "WITH FOOD" },
18
+ { label: "SINGLE DOSE", value: "SINGLE DOSE" },
19
+ { label: "BED TIME", value: "BED TIME" },
20
+ { label: "EMPTY STOMACH", value: "EMPTY STOMACH" },
21
+ { label: "LOCAL APPLICATION", value: "LOCAL APPLICATION" },
22
+ { label: "STAT", value: "STAT" },
23
+ { label: "INHALATION", value: "INHALATION" }
24
+ ];
25
+ var BEFORE_AFTER_NORMALIZATION_MAP = {
26
+ AF: "AFTER FOOD",
27
+ BF: "BEFORE FOOD"
28
+ };
29
+ var ROUTE_OPTIONS = [
30
+ { label: "Select route", value: "" },
31
+ { label: "Per Os", value: "Per Os" },
32
+ { label: "Intravenous", value: "Intravenous" },
33
+ { label: "Intramuscular", value: "Intramuscular" },
34
+ { label: "Subcutaneous", value: "Subcutaneous" },
35
+ { label: "Sublingual", value: "Sublingual" },
36
+ { label: "Intranasal", value: "Intranasal" },
37
+ { label: "Topical", value: "Topical" },
38
+ { label: "Per Rectum", value: "Per Rectum" },
39
+ { label: "Inhalation", value: "Inhalation" },
40
+ { label: "ID Intradermal", value: "ID Intradermal" }
41
+ ];
42
+ function mapToMedication(result) {
43
+ return {
44
+ id: result.id,
45
+ brand_name: result.name,
46
+ generic_name: result.generic_name ?? "",
47
+ frequency: "custom",
48
+ is_custom: false,
49
+ duration_value: "3",
50
+ duration_unit: "days",
51
+ before_after: "AFTER FOOD",
52
+ route: "",
53
+ morning: "0",
54
+ afternoon: "0",
55
+ night: "0",
56
+ notes: ""
57
+ };
58
+ }
59
+ function mapAIMedicationToMedication(ai) {
60
+ const id = ai.id != null ? String(ai.id) : "";
61
+ return {
62
+ id,
63
+ brand_name: ai.brand_name ?? "",
64
+ generic_name: ai.generic_name ?? "",
65
+ frequency: "custom",
66
+ is_custom: false,
67
+ duration_value: "3",
68
+ duration_unit: "days",
69
+ before_after: "AFTER FOOD",
70
+ route: "",
71
+ morning: "1",
72
+ afternoon: "0",
73
+ night: "1",
74
+ notes: ai.reason ?? ""
75
+ };
76
+ }
77
+ function createCustomMedication(name, customId) {
78
+ return {
79
+ id: String(customId),
80
+ brand_name: name.trim(),
81
+ generic_name: "",
82
+ frequency: "custom",
83
+ is_custom: false,
84
+ duration_value: "3",
85
+ duration_unit: "days",
86
+ before_after: "AFTER FOOD",
87
+ route: "",
88
+ morning: "0",
89
+ afternoon: "0",
90
+ night: "0",
91
+ notes: ""
92
+ };
93
+ }
94
+ function parseDuration(duration) {
95
+ if (!duration || !duration.trim()) return { value: "3", unit: "days" };
96
+ const lower = duration.trim().toLowerCase();
97
+ const match = lower.match(/^(\d+)\s*(day|days|week|weeks|month|months)?$/);
98
+ if (!match) return { value: "3", unit: "days" };
99
+ const value = match[1] ?? "3";
100
+ const unitWord = match[2] ?? "days";
101
+ const unit = unitWord.startsWith("month") ? "months" : unitWord.startsWith("week") ? "weeks" : "days";
102
+ return { value, unit };
103
+ }
104
+ function mapFrequentItemToMedication(item) {
105
+ const parsed = parseDuration(item.duration);
106
+ const duration_value = item.duration_value ?? parsed.value;
107
+ const duration_unit = item.duration_unit ?? parsed.unit;
108
+ const before_after = normalizeBeforeAfter(item.before_after);
109
+ const routeNote = item.route ? `Route: ${item.route}` : "";
110
+ const baseNotes = item.notes?.trim() || "";
111
+ const combinedNotes = [baseNotes, routeNote.trim()].filter((part) => part.length > 0).join(" \u2014 ");
112
+ return {
113
+ id: item.id,
114
+ brand_name: item.brand_name ?? item.name,
115
+ generic_name: item.short_name ?? "",
116
+ frequency: item.frequency ?? "custom",
117
+ is_custom: false,
118
+ duration_value,
119
+ duration_unit,
120
+ before_after,
121
+ route: item.route ?? "",
122
+ morning: item.morning ?? "0",
123
+ afternoon: item.afternoon ?? "0",
124
+ night: item.night ?? "0",
125
+ notes: combinedNotes
126
+ };
127
+ }
128
+ function normalizeBeforeAfter(value) {
129
+ if (value == null) return "AFTER FOOD";
130
+ const mapped = BEFORE_AFTER_NORMALIZATION_MAP[value];
131
+ if (mapped) return mapped;
132
+ const validValues = BEFORE_AFTER_OPTIONS.map((option) => option.value);
133
+ return validValues.includes(value) ? value : "AFTER FOOD";
134
+ }
135
+ function Spinner({
136
+ value,
137
+ onChange
138
+ }) {
139
+ const num = parseInt(value, 10) || 0;
140
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center", children: [
141
+ /* @__PURE__ */ jsx(
142
+ "button",
143
+ {
144
+ type: "button",
145
+ className: "text-muted-foreground hover:text-foreground cursor-pointer",
146
+ onClick: () => onChange(String(num + 1)),
147
+ children: /* @__PURE__ */ jsx(ChevronUp, { className: "h-3 w-3" })
148
+ }
149
+ ),
150
+ /* @__PURE__ */ jsx("span", { className: "text-sm w-4 text-center leading-none", children: num }),
151
+ /* @__PURE__ */ jsx(
152
+ "button",
153
+ {
154
+ type: "button",
155
+ className: "text-muted-foreground hover:text-foreground cursor-pointer",
156
+ onClick: () => onChange(String(Math.max(0, num - 1))),
157
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3" })
158
+ }
159
+ )
160
+ ] });
161
+ }
162
+ function MedicationCard({
163
+ med,
164
+ onUpdate,
165
+ onRemove
166
+ }) {
167
+ const [notesOpen, setNotesOpen] = useState(false);
168
+ function set(key, val) {
169
+ onUpdate({ ...med, [key]: val });
170
+ }
171
+ return /* @__PURE__ */ jsxs("div", { className: "bg-gray-50 rounded-lg p-3 space-y-2", children: [
172
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 flex-wrap", children: [
173
+ /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm flex-1 min-w-0 truncate", children: med.brand_name }),
174
+ /* @__PURE__ */ jsxs(
175
+ "select",
176
+ {
177
+ className: "text-xs border border-border rounded px-2 py-1 bg-white shrink-0",
178
+ value: med.frequency,
179
+ onChange: (e) => set("frequency", e.target.value),
180
+ children: [
181
+ /* @__PURE__ */ jsx("option", { value: "custom", children: "select frequency" }),
182
+ /* @__PURE__ */ jsx("option", { value: "qid", children: "4 times a day (QID)" }),
183
+ /* @__PURE__ */ jsx("option", { value: "alternate_day", children: "Alternate day" }),
184
+ /* @__PURE__ */ jsx("option", { value: "once_weekly", children: "Once weekly" }),
185
+ /* @__PURE__ */ jsx("option", { value: "once_monthly", children: "Once monthly" }),
186
+ /* @__PURE__ */ jsx("option", { value: "as_needed", children: "As needed" }),
187
+ /* @__PURE__ */ jsx("option", { value: "fort_night", children: "Fort night" }),
188
+ /* @__PURE__ */ jsx("option", { value: "at_bed_time", children: "At Bed time" }),
189
+ /* @__PURE__ */ jsx("option", { value: "sos", children: "SOS only" }),
190
+ /* @__PURE__ */ jsx("option", { value: "biweekly", children: "Biweekly" }),
191
+ /* @__PURE__ */ jsx("option", { value: "stat", children: "STAT" })
192
+ ]
193
+ }
194
+ ),
195
+ /* @__PURE__ */ jsx("div", { className: "flex gap-4 items-center shrink-0", children: ["morning", "afternoon", "night"].map((slot) => /* @__PURE__ */ jsx(
196
+ "span",
197
+ {
198
+ className: "text-[10px] font-semibold uppercase text-muted-foreground tracking-wide",
199
+ children: slot === "afternoon" ? "AFTERNOON" : slot === "morning" ? "MORNING" : "NIGHT"
200
+ },
201
+ slot
202
+ )) }),
203
+ /* @__PURE__ */ jsx(
204
+ "button",
205
+ {
206
+ type: "button",
207
+ onClick: onRemove,
208
+ className: "text-red-400 hover:text-red-600 shrink-0 p-1 cursor-pointer",
209
+ children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4" })
210
+ }
211
+ )
212
+ ] }),
213
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 flex-wrap", children: [
214
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 shrink-0", children: [
215
+ /* @__PURE__ */ jsx(
216
+ "input",
217
+ {
218
+ type: "text",
219
+ inputMode: "numeric",
220
+ pattern: "[0-9]*",
221
+ className: "w-11 text-sm border border-border rounded px-2 py-1 bg-white",
222
+ value: med.duration_value,
223
+ onChange: (e) => {
224
+ const v = e.target.value.replace(/\D/g, "");
225
+ set("duration_value", v === "" ? "" : v);
226
+ }
227
+ }
228
+ ),
229
+ /* @__PURE__ */ jsxs(
230
+ "select",
231
+ {
232
+ className: "text-xs border border-border rounded px-2 py-1 bg-white",
233
+ value: med.duration_unit,
234
+ onChange: (e) => set("duration_unit", e.target.value),
235
+ children: [
236
+ /* @__PURE__ */ jsx("option", { value: "days", children: "days" }),
237
+ /* @__PURE__ */ jsx("option", { value: "weeks", children: "weeks" }),
238
+ /* @__PURE__ */ jsx("option", { value: "months", children: "months" })
239
+ ]
240
+ }
241
+ )
242
+ ] }),
243
+ /* @__PURE__ */ jsx("div", { className: "flex gap-2 items-center flex-1 min-w-0 justify-end", children: ["morning", "afternoon", "night"].map((slot) => /* @__PURE__ */ jsx("div", { className: "flex flex-col items-center gap-0.5", children: /* @__PURE__ */ jsx(Spinner, { value: med[slot], onChange: (v) => set(slot, v) }) }, slot)) }),
244
+ /* @__PURE__ */ jsx(
245
+ "select",
246
+ {
247
+ className: "text-xs border border-border rounded px-2 py-1 bg-white shrink-0",
248
+ value: normalizeBeforeAfter(med.before_after),
249
+ onChange: (e) => set("before_after", e.target.value),
250
+ children: BEFORE_AFTER_OPTIONS.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.label))
251
+ }
252
+ ),
253
+ /* @__PURE__ */ jsx(
254
+ "select",
255
+ {
256
+ className: "text-xs border border-border rounded px-2 py-1 bg-white shrink-0",
257
+ value: med.route ?? "",
258
+ onChange: (e) => set("route", e.target.value),
259
+ children: ROUTE_OPTIONS.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, children: option.label }, option.value))
260
+ }
261
+ )
262
+ ] }),
263
+ /* @__PURE__ */ jsxs(
264
+ "div",
265
+ {
266
+ role: "button",
267
+ tabIndex: 0,
268
+ onClick: () => setNotesOpen((o) => !o),
269
+ onKeyDown: (e) => {
270
+ if (e.key === "Enter" || e.key === " ") {
271
+ e.preventDefault();
272
+ setNotesOpen((o) => !o);
273
+ }
274
+ },
275
+ className: cn(
276
+ "flex items-center gap-2 w-full text-left text-xs text-muted-foreground hover:text-foreground",
277
+ "cursor-pointer py-2 px-2 rounded border border-transparent hover:bg-gray-100/80 transition-colors"
278
+ ),
279
+ children: [
280
+ /* @__PURE__ */ jsx(
281
+ ChevronRight,
282
+ {
283
+ className: cn("h-3 w-3 shrink-0 transition-transform", notesOpen && "rotate-90")
284
+ }
285
+ ),
286
+ /* @__PURE__ */ jsx("span", { children: "Medicine Notes" })
287
+ ]
288
+ }
289
+ ),
290
+ notesOpen && /* @__PURE__ */ jsx("div", { className: "relative z-10 mt-0.5", children: /* @__PURE__ */ jsx(
291
+ "textarea",
292
+ {
293
+ className: "block w-full text-xs border border-border rounded px-2 py-1 resize-none bg-white min-h-0",
294
+ rows: 2,
295
+ placeholder: "Add notes...",
296
+ value: med.notes,
297
+ onChange: (e) => set("notes", e.target.value)
298
+ }
299
+ ) })
300
+ ] });
301
+ }
302
+ var ADD_FEEDBACK_MS = 320;
303
+ function SearchResultCard({
304
+ result,
305
+ isAdding,
306
+ onSelect
307
+ }) {
308
+ return /* @__PURE__ */ jsxs(
309
+ "button",
310
+ {
311
+ type: "button",
312
+ onClick: onSelect,
313
+ className: cn(
314
+ "w-full text-left border rounded-lg px-3 py-2 transition-all duration-300 ease-out cursor-pointer flex items-center justify-between gap-2",
315
+ isAdding ? "border-green-400 bg-green-50 scale-[0.98]" : "border-border bg-white hover:bg-gray-50"
316
+ ),
317
+ children: [
318
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 text-left", children: [
319
+ /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold leading-tight truncate", children: result.name }),
320
+ result.generic_name && /* @__PURE__ */ jsxs("p", { className: "text-xs text-muted-foreground mt-0.5 truncate", children: [
321
+ "Generic: ",
322
+ result.generic_name
323
+ ] })
324
+ ] }),
325
+ isAdding && /* @__PURE__ */ jsx(Check, { className: "h-4 w-4 shrink-0 text-green-600" })
326
+ ]
327
+ }
328
+ );
329
+ }
330
+ var AddMedicationField = ({
331
+ label = "Medications",
332
+ value,
333
+ onChange,
334
+ onSearch,
335
+ recentlyUsed = [],
336
+ frequentItems = [],
337
+ suggestedMedications = []
338
+ }) => {
339
+ const [open, setOpen] = useState(false);
340
+ const [query, setQuery] = useState("");
341
+ const [results, setResults] = useState([]);
342
+ const [loading, setLoading] = useState(false);
343
+ const [addingResultId, setAddingResultId] = useState(null);
344
+ const debounceRef = useRef(null);
345
+ const customIdRef = useRef(-1);
346
+ const valueRef = useRef([]);
347
+ const searchInputRef = useRef(null);
348
+ const safeValue = Array.isArray(value) ? value : [];
349
+ valueRef.current = safeValue;
350
+ const addedIds = new Set(safeValue.map((m) => String(m.id)));
351
+ useEffect(() => {
352
+ if (!open) {
353
+ setQuery("");
354
+ setResults([]);
355
+ setAddingResultId(null);
356
+ }
357
+ }, [open]);
358
+ function handleQueryChange(q) {
359
+ setQuery(q);
360
+ if (debounceRef.current) clearTimeout(debounceRef.current);
361
+ if (!q.trim()) {
362
+ setResults([]);
363
+ return;
364
+ }
365
+ debounceRef.current = setTimeout(async () => {
366
+ setLoading(true);
367
+ try {
368
+ const res = await onSearch(q);
369
+ setResults(res);
370
+ } finally {
371
+ setLoading(false);
372
+ }
373
+ }, 500);
374
+ }
375
+ function handleRecentlyUsedToggle(result) {
376
+ if (addedIds.has(String(result.id))) {
377
+ onChange(safeValue.filter((m) => String(m.id) !== String(result.id)));
378
+ } else {
379
+ onChange([...safeValue, mapToMedication(result)]);
380
+ }
381
+ }
382
+ function handleFrequentItemToggle(item) {
383
+ if (addedIds.has(String(item.id))) {
384
+ onChange(safeValue.filter((m) => String(m.id) !== String(item.id)));
385
+ } else {
386
+ onChange([...safeValue, mapFrequentItemToMedication(item)]);
387
+ }
388
+ }
389
+ function handleResultClick(result) {
390
+ if (addedIds.has(String(result.id))) return;
391
+ setAddingResultId(result.id);
392
+ setTimeout(() => {
393
+ onChange([...valueRef.current, mapToMedication(result)]);
394
+ setAddingResultId(null);
395
+ setQuery("");
396
+ setResults([]);
397
+ setTimeout(() => searchInputRef.current?.focus(), 0);
398
+ }, ADD_FEEDBACK_MS);
399
+ }
400
+ function handleSave() {
401
+ const trimmed = query.trim();
402
+ if (!trimmed) return;
403
+ const customId = customIdRef.current--;
404
+ onChange([...safeValue, createCustomMedication(trimmed, customId)]);
405
+ setQuery("");
406
+ setResults([]);
407
+ }
408
+ function handleAddSuggestion(ai) {
409
+ if (addedIds.has(String(ai.id))) return;
410
+ onChange([...safeValue, mapAIMedicationToMedication(ai)]);
411
+ }
412
+ function updateMed(index, updated) {
413
+ const next = [...safeValue];
414
+ next[index] = updated;
415
+ onChange(next);
416
+ }
417
+ function removeMed(index) {
418
+ onChange(safeValue.filter((_, i) => i !== index));
419
+ }
420
+ const recentlyUsedChips = recentlyUsed.map((r) => {
421
+ const isAdded = addedIds.has(String(r.id));
422
+ return /* @__PURE__ */ jsxs(
423
+ "button",
424
+ {
425
+ type: "button",
426
+ onClick: () => handleRecentlyUsedToggle(r),
427
+ className: cn(
428
+ "rounded-full border text-xs px-3 py-1 transition-colors cursor-pointer",
429
+ isAdded ? "border-green-300 bg-green-50 text-green-700" : "border-border bg-white hover:bg-gray-50"
430
+ ),
431
+ children: [
432
+ isAdded && /* @__PURE__ */ jsx("span", { className: "mr-1", children: "\u2713" }),
433
+ r.name
434
+ ]
435
+ },
436
+ r.id
437
+ );
438
+ });
439
+ const limitedFrequentItems = frequentItems.slice(0, 25);
440
+ const frequentItemChips = limitedFrequentItems.length > 0 ? limitedFrequentItems.map((item) => {
441
+ const isAdded = addedIds.has(String(item.id));
442
+ return /* @__PURE__ */ jsxs(
443
+ "button",
444
+ {
445
+ type: "button",
446
+ onClick: () => handleFrequentItemToggle(item),
447
+ className: cn(
448
+ "rounded-full border text-[11px] px-2 py-0.5 transition-colors cursor-pointer",
449
+ isAdded ? "border-green-300 bg-green-50 text-green-700" : "border-border bg-white hover:bg-gray-50"
450
+ ),
451
+ children: [
452
+ isAdded && /* @__PURE__ */ jsx("span", { className: "mr-1", children: "\u2713" }),
453
+ item.brand_name ?? item.name
454
+ ]
455
+ },
456
+ item.id
457
+ );
458
+ }) : [];
459
+ return /* @__PURE__ */ jsxs("div", { className: "rounded-md overflow-hidden flex flex-col border bg-white border-[#D0D0D0] space-y-3 p-3 h-fit", children: [
460
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
461
+ /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold", children: label }),
462
+ /* @__PURE__ */ jsx(
463
+ "button",
464
+ {
465
+ type: "button",
466
+ onClick: () => setOpen(true),
467
+ className: "text-sm font-semibold text-purple-600 hover:text-purple-800 cursor-pointer",
468
+ children: "ADD"
469
+ }
470
+ )
471
+ ] }),
472
+ /* @__PURE__ */ jsx("div", { className: "space-y-2", children: safeValue.map((med, i) => /* @__PURE__ */ jsx(
473
+ MedicationCard,
474
+ {
475
+ med,
476
+ onUpdate: (u) => updateMed(i, u),
477
+ onRemove: () => removeMed(i)
478
+ },
479
+ med.id
480
+ )) }),
481
+ /* @__PURE__ */ jsx(
482
+ AddEntityDialog,
483
+ {
484
+ open,
485
+ onClose: () => setOpen(false),
486
+ title: "Add Medication",
487
+ recentlyUsedSlot: frequentItemChips.length > 0 ? frequentItemChips : recentlyUsedChips.length > 0 ? recentlyUsedChips : void 0,
488
+ chipSectionLabel: frequentItemChips.length > 0 ? "Frequently used" : void 0,
489
+ actionSlot: /* @__PURE__ */ jsx(
490
+ "button",
491
+ {
492
+ type: "button",
493
+ disabled: !query.trim(),
494
+ onClick: handleSave,
495
+ className: cn(
496
+ "rounded-md px-5 py-2 text-sm font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-opacity cursor-pointer",
497
+ !query.trim() && "opacity-40 cursor-not-allowed"
498
+ ),
499
+ children: "Save Medicine"
500
+ }
501
+ ),
502
+ children: /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
503
+ /* @__PURE__ */ jsx(
504
+ Input,
505
+ {
506
+ ref: searchInputRef,
507
+ value: query,
508
+ onChange: (e) => handleQueryChange(e.target.value),
509
+ placeholder: "Search medicines...",
510
+ className: "border border-border rounded-md focus-visible:ring-0"
511
+ }
512
+ ),
513
+ suggestedMedications.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-1.5 items-center", children: [
514
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground mr-1", children: "Suggestions:" }),
515
+ suggestedMedications.filter((s) => !addedIds.has(String(s.id))).slice(0, 25).map((s) => /* @__PURE__ */ jsxs(
516
+ "button",
517
+ {
518
+ type: "button",
519
+ onClick: () => handleAddSuggestion(s),
520
+ className: "inline-flex items-center gap-1 rounded-full border border-dashed border-purple-300 bg-purple-50/80 text-purple-800 text-[11px] px-2 py-0.5 hover:bg-purple-100 transition-colors cursor-pointer",
521
+ children: [
522
+ /* @__PURE__ */ jsx(Plus, { className: "h-3 w-3" }),
523
+ s.brand_name || s.generic_name || String(s.id)
524
+ ]
525
+ },
526
+ String(s.id)
527
+ ))
528
+ ] }),
529
+ loading && /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground text-center py-2", children: "Searching\u2026" }),
530
+ !loading && results.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-2 max-h-64 overflow-y-auto", children: results.map((r) => /* @__PURE__ */ jsx(
531
+ SearchResultCard,
532
+ {
533
+ result: r,
534
+ isAdding: addingResultId === r.id,
535
+ onSelect: () => handleResultClick(r)
536
+ },
537
+ r.id
538
+ )) })
539
+ ] })
540
+ }
541
+ )
542
+ ] });
543
+ };
544
+
545
+ export { AISuggestionsProvider, AddMedicationField, useAISuggestions };
546
+ //# sourceMappingURL=chunk-XDUVO3IZ.mjs.map
547
+ //# sourceMappingURL=chunk-XDUVO3IZ.mjs.map