formanitor 0.1.11 → 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 (289) 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 -14540
  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 -14349
  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
@@ -0,0 +1,171 @@
1
+ 'use strict';
2
+
3
+ var chunkUGGUIXUS_cjs = require('./chunk-UGGUIXUS.cjs');
4
+ var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
5
+ var chunkKPGTPJDH_cjs = require('./chunk-KPGTPJDH.cjs');
6
+ var chunk4KSZUIJE_cjs = require('./chunk-4KSZUIJE.cjs');
7
+ var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
8
+ var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
9
+ require('./chunk-FHHISVCH.cjs');
10
+ var react = require('react');
11
+ var jsxRuntime = require('react/jsx-runtime');
12
+
13
+ function normalizeOptions(response) {
14
+ if (Array.isArray(response)) {
15
+ return response.map((o) => ({ label: String(o.label), value: String(o.value) }));
16
+ }
17
+ if (response?.specializations?.length) {
18
+ return response.specializations.map((s) => ({ label: s, value: s }));
19
+ }
20
+ return [];
21
+ }
22
+ function normalizeValue(value) {
23
+ if (!value || !Array.isArray(value)) return [];
24
+ return value.map((item) => {
25
+ if (item && typeof item === "object" && "specialization" in item) {
26
+ const s = item.specialization;
27
+ const u = item.is_urgent;
28
+ return { specialization: String(s), is_urgent: Boolean(u) };
29
+ }
30
+ return { specialization: String(item), is_urgent: false };
31
+ });
32
+ }
33
+ var ReferralWidget = ({ fieldId }) => {
34
+ const { fieldDef, value, setValue, setTouched, error, disabled, touched } = chunkIDSBJOFY_cjs.useField(fieldId);
35
+ const handlers = chunkIDSBJOFY_cjs.useFieldHandlers(fieldId);
36
+ const [options, setOptions] = react.useState([]);
37
+ const [loading, setLoading] = react.useState(false);
38
+ const { state } = chunkKPGTPJDH_cjs.useForm();
39
+ const showError = !!error && (touched || state.submitAttempted);
40
+ const selectedItems = normalizeValue(value);
41
+ const availableOptions = options.filter(
42
+ (opt) => !selectedItems.some((item) => item.specialization === opt.value)
43
+ );
44
+ const loadOptions = react.useCallback(async () => {
45
+ if (handlers.onFetchOptions) {
46
+ setLoading(true);
47
+ try {
48
+ const res = await handlers.onFetchOptions();
49
+ setOptions(normalizeOptions(res));
50
+ } finally {
51
+ setLoading(false);
52
+ }
53
+ return;
54
+ }
55
+ const def = fieldDef;
56
+ if (def?.options?.length) {
57
+ setOptions(def.options.map((o) => ({ label: String(o.label), value: String(o.value) })));
58
+ } else if (def?.dataSource) {
59
+ setLoading(true);
60
+ chunkUGGUIXUS_cjs.fetchOptions(def.dataSource.source, def.dataSource.params).then((opts) => setOptions(opts.map((o) => ({ label: String(o.label), value: String(o.value) })))).finally(() => setLoading(false));
61
+ } else {
62
+ setOptions([]);
63
+ }
64
+ }, [fieldDef, handlers]);
65
+ react.useEffect(() => {
66
+ if (!fieldDef) return;
67
+ loadOptions();
68
+ }, [fieldDef, loadOptions]);
69
+ const handleAdd = react.useCallback(
70
+ (specialization) => {
71
+ const next = [...selectedItems, { specialization, is_urgent: false }];
72
+ setValue(next);
73
+ setTouched();
74
+ },
75
+ [selectedItems, setValue, setTouched]
76
+ );
77
+ const handleRemove = react.useCallback(
78
+ (specialization) => {
79
+ const next = selectedItems.filter((item) => item.specialization !== specialization);
80
+ setValue(next);
81
+ setTouched();
82
+ },
83
+ [selectedItems, setValue, setTouched]
84
+ );
85
+ const handleToggleUrgent = react.useCallback(
86
+ (specialization) => {
87
+ const next = selectedItems.map(
88
+ (item) => item.specialization === specialization ? { ...item, is_urgent: !item.is_urgent } : item
89
+ );
90
+ setValue(next);
91
+ setTouched();
92
+ },
93
+ [selectedItems, setValue, setTouched]
94
+ );
95
+ if (!fieldDef) return null;
96
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(fieldDef, "space-y-2"), children: [
97
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkJMGUUFOJ_cjs.Label, { htmlFor: fieldId, className: chunk5E3APMY6_cjs.fieldLabelClass(fieldDef), children: [
98
+ "Referral to ",
99
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5E3APMY6_cjs.FieldRequiredIndicator, { fieldDef })
100
+ ] }),
101
+ loading && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Loading..." }),
102
+ !loading && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
103
+ /* @__PURE__ */ jsxRuntime.jsxs(
104
+ chunk4KSZUIJE_cjs.Select,
105
+ {
106
+ disabled,
107
+ value: "",
108
+ onValueChange: (val) => {
109
+ if (val) {
110
+ handleAdd(val);
111
+ }
112
+ },
113
+ children: [
114
+ /* @__PURE__ */ jsxRuntime.jsx(
115
+ chunk4KSZUIJE_cjs.SelectTrigger,
116
+ {
117
+ id: fieldId,
118
+ className: chunk5E3APMY6_cjs.fieldControlClass(fieldDef, showError ? "border-red-500" : ""),
119
+ children: /* @__PURE__ */ jsxRuntime.jsx(chunk4KSZUIJE_cjs.SelectValue, { placeholder: "Select specializations..." })
120
+ }
121
+ ),
122
+ /* @__PURE__ */ jsxRuntime.jsxs(chunk4KSZUIJE_cjs.SelectContent, { children: [
123
+ availableOptions.map((opt) => /* @__PURE__ */ jsxRuntime.jsx(chunk4KSZUIJE_cjs.SelectItem, { value: opt.value, children: opt.label }, opt.value)),
124
+ availableOptions.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-2 px-2 text-sm text-muted-foreground", children: "All specializations selected" })
125
+ ] })
126
+ ]
127
+ },
128
+ `referral-${selectedItems.map((i) => i.specialization).join(",")}`
129
+ ),
130
+ selectedItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-1.5 flex h-12 flex-wrap content-start gap-1.5 overflow-y-auto pr-1", children: selectedItems.map((item) => {
131
+ const isUrgent = item.is_urgent;
132
+ const chipClass = isUrgent ? "inline-flex items-center gap-0.5 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs max-w-full cursor-pointer hover:bg-red-200 transition-colors" : "inline-flex items-center gap-0.5 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs max-w-full cursor-pointer hover:bg-blue-200 transition-colors";
133
+ return /* @__PURE__ */ jsxRuntime.jsxs(
134
+ "div",
135
+ {
136
+ className: chipClass,
137
+ onClick: (e) => {
138
+ if (e.target instanceof HTMLElement && e.target.closest("button")) return;
139
+ handleToggleUrgent(item.specialization);
140
+ },
141
+ children: [
142
+ isUrgent && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded mr-1", children: "U" }),
143
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate max-w-[120px]", children: item.specialization }),
144
+ /* @__PURE__ */ jsxRuntime.jsx(
145
+ "button",
146
+ {
147
+ type: "button",
148
+ onClick: (e) => {
149
+ e.stopPropagation();
150
+ handleRemove(item.specialization);
151
+ },
152
+ className: "ml-0.5 text-blue-600 hover:text-blue-800 focus:outline-none flex-shrink-0 text-sm leading-none",
153
+ "aria-label": `Remove ${item.specialization}`,
154
+ children: "\xD7"
155
+ }
156
+ )
157
+ ]
158
+ },
159
+ item.specialization
160
+ );
161
+ }) }),
162
+ selectedItems.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "No specializations selected" }),
163
+ selectedItems.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1.5", children: "Click a chip to mark as urgent" })
164
+ ] }),
165
+ showError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(fieldDef, "text-xs text-red-500"), children: error })
166
+ ] });
167
+ };
168
+
169
+ exports.ReferralWidget = ReferralWidget;
170
+ //# sourceMappingURL=ReferralWidget-PDNEKHFO.cjs.map
171
+ //# sourceMappingURL=ReferralWidget-PDNEKHFO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/widgets/ReferralWidget.tsx"],"names":["useField","useFieldHandlers","useState","useForm","useCallback","fetchOptions","useEffect","fieldWrapperClass","jsxs","Label","fieldLabelClass","jsx","FieldRequiredIndicator","Fragment","Select","SelectTrigger","fieldControlClass","SelectValue","SelectContent","SelectItem","fieldErrorClass"],"mappings":"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","file":"ReferralWidget-PDNEKHFO.cjs","sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useFieldHandlers } from '../../react/FormProvider';\nimport { useForm } from '../../react/useForm';\nimport { Label } from '../shadcn/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '../shadcn/select';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport type { ReferralFieldDef, ReferralItem } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n} from '../../react/fieldStyle';\n\nfunction normalizeOptions(\n response: { specializations?: string[] } | { label: string; value: any }[]\n): { label: string; value: string }[] {\n if (Array.isArray(response)) {\n return response.map((o) => ({ label: String(o.label), value: String(o.value) }));\n }\n if (response?.specializations?.length) {\n return response.specializations.map((s) => ({ label: s, value: s }));\n }\n return [];\n}\n\nfunction normalizeValue(value: unknown): ReferralItem[] {\n if (!value || !Array.isArray(value)) return [];\n return value.map((item) => {\n if (item && typeof item === 'object' && 'specialization' in item) {\n const s = (item as ReferralItem).specialization;\n const u = (item as ReferralItem).is_urgent;\n return { specialization: String(s), is_urgent: Boolean(u) };\n }\n return { specialization: String(item), is_urgent: false };\n });\n}\n\nexport const ReferralWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const handlers = useFieldHandlers(fieldId);\n const [options, setOptions] = useState<{ label: string; value: string }[]>([]);\n const [loading, setLoading] = useState(false);\n const { state } = useForm();\n const showError = !!error && (touched || state.submitAttempted);\n\n const selectedItems = normalizeValue(value);\n const availableOptions = options.filter(\n (opt) => !selectedItems.some((item) => item.specialization === opt.value)\n );\n\n const loadOptions = useCallback(async () => {\n if (handlers.onFetchOptions) {\n setLoading(true);\n try {\n const res = await handlers.onFetchOptions();\n setOptions(normalizeOptions(res));\n } finally {\n setLoading(false);\n }\n return;\n }\n const def = fieldDef as ReferralFieldDef | undefined;\n if (def?.options?.length) {\n setOptions(def.options.map((o) => ({ label: String(o.label), value: String(o.value) })));\n } else if (def?.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts.map((o) => ({ label: String(o.label), value: String(o.value) }))))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [fieldDef, handlers]);\n\n useEffect(() => {\n if (!fieldDef) return;\n loadOptions();\n }, [fieldDef, loadOptions]);\n\n const handleAdd = useCallback(\n (specialization: string) => {\n const next = [...selectedItems, { specialization, is_urgent: false }];\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleRemove = useCallback(\n (specialization: string) => {\n const next = selectedItems.filter((item) => item.specialization !== specialization);\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n const handleToggleUrgent = useCallback(\n (specialization: string) => {\n const next = selectedItems.map((item) =>\n item.specialization === specialization\n ? { ...item, is_urgent: !item.is_urgent }\n : item\n );\n setValue(next);\n setTouched();\n },\n [selectedItems, setValue, setTouched]\n );\n\n if (!fieldDef) return null;\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n Referral to <FieldRequiredIndicator fieldDef={fieldDef} />\n </Label>\n\n {loading && <p className=\"text-xs text-muted-foreground\">Loading...</p>}\n\n {!loading && (\n <>\n <Select\n key={`referral-${selectedItems.map((i) => i.specialization).join(',')}`}\n disabled={disabled}\n value=\"\"\n onValueChange={(val) => {\n if (val) {\n handleAdd(val);\n }\n }}\n >\n <SelectTrigger\n id={fieldId}\n className={fieldControlClass(fieldDef, showError ? 'border-red-500' : '')}\n >\n <SelectValue placeholder=\"Select specializations...\" />\n </SelectTrigger>\n <SelectContent>\n {availableOptions.map((opt) => (\n <SelectItem key={opt.value} value={opt.value}>\n {opt.label}\n </SelectItem>\n ))}\n {availableOptions.length === 0 && (\n <div className=\"py-2 px-2 text-sm text-muted-foreground\">\n All specializations selected\n </div>\n )}\n </SelectContent>\n </Select>\n\n {selectedItems.length > 0 && (\n <div className=\"mt-1.5 flex h-12 flex-wrap content-start gap-1.5 overflow-y-auto pr-1\">\n {selectedItems.map((item) => {\n const isUrgent = item.is_urgent;\n const chipClass = isUrgent\n ? 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-red-100 text-red-800 border border-red-300 rounded-full text-xs max-w-full cursor-pointer hover:bg-red-200 transition-colors'\n : 'inline-flex items-center gap-0.5 px-2 py-0.5 bg-blue-100 text-blue-800 rounded-full text-xs max-w-full cursor-pointer hover:bg-blue-200 transition-colors';\n return (\n <div\n key={item.specialization}\n className={chipClass}\n onClick={(e) => {\n if (e.target instanceof HTMLElement && e.target.closest('button')) return;\n handleToggleUrgent(item.specialization);\n }}\n >\n {isUrgent && (\n <span className=\"flex-shrink-0 bg-red-600 text-white text-[10px] font-bold px-1 py-0.5 rounded mr-1\">\n U\n </span>\n )}\n <span className=\"truncate max-w-[120px]\">{item.specialization}</span>\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemove(item.specialization);\n }}\n className=\"ml-0.5 text-blue-600 hover:text-blue-800 focus:outline-none flex-shrink-0 text-sm leading-none\"\n aria-label={`Remove ${item.specialization}`}\n >\n ×\n </button>\n </div>\n );\n })}\n </div>\n )}\n\n {selectedItems.length === 0 && (\n <p className=\"text-xs text-muted-foreground mt-1\">No specializations selected</p>\n )}\n\n {selectedItems.length > 0 && (\n <p className=\"text-xs text-muted-foreground mt-1.5\">\n Click a chip to mark as urgent\n </p>\n )}\n </>\n )}\n\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,11 @@
1
+ export { RichTextWidget } from './chunk-MIUUO4CI.mjs';
2
+ export { richTextHtmlClassName } from './chunk-I4AV6BQF.mjs';
3
+ import './chunk-ZSOIQVB3.mjs';
4
+ import './chunk-WYVXXEZI.mjs';
5
+ import './chunk-XR2ZM654.mjs';
6
+ import './chunk-GXXWMHAA.mjs';
7
+ import './chunk-ZGPHTPAN.mjs';
8
+ import './chunk-HEFZA2AH.mjs';
9
+ import './chunk-VPU66PI6.mjs';
10
+ //# sourceMappingURL=RichTextWidget-5OOJ2LJN.mjs.map
11
+ //# sourceMappingURL=RichTextWidget-5OOJ2LJN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"RichTextWidget-5OOJ2LJN.mjs"}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var chunkCTW65YW2_cjs = require('./chunk-CTW65YW2.cjs');
4
+ var chunkIFSKLIS2_cjs = require('./chunk-IFSKLIS2.cjs');
5
+ require('./chunk-FZEEWRW3.cjs');
6
+ require('./chunk-5E3APMY6.cjs');
7
+ require('./chunk-KPGTPJDH.cjs');
8
+ require('./chunk-O3VQBPEW.cjs');
9
+ require('./chunk-IDSBJOFY.cjs');
10
+ require('./chunk-JMGUUFOJ.cjs');
11
+ require('./chunk-FHHISVCH.cjs');
12
+
13
+
14
+
15
+ Object.defineProperty(exports, "RichTextWidget", {
16
+ enumerable: true,
17
+ get: function () { return chunkCTW65YW2_cjs.RichTextWidget; }
18
+ });
19
+ Object.defineProperty(exports, "richTextHtmlClassName", {
20
+ enumerable: true,
21
+ get: function () { return chunkIFSKLIS2_cjs.richTextHtmlClassName; }
22
+ });
23
+ //# sourceMappingURL=RichTextWidget-XWLOHKLE.cjs.map
24
+ //# sourceMappingURL=RichTextWidget-XWLOHKLE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"RichTextWidget-XWLOHKLE.cjs"}
@@ -0,0 +1,19 @@
1
+ 'use strict';
2
+
3
+ var chunkJNVSA77L_cjs = require('./chunk-JNVSA77L.cjs');
4
+ require('./chunk-PHADAQSH.cjs');
5
+ require('./chunk-P62377LB.cjs');
6
+ require('./chunk-5E3APMY6.cjs');
7
+ require('./chunk-KPGTPJDH.cjs');
8
+ require('./chunk-IDSBJOFY.cjs');
9
+ require('./chunk-JMGUUFOJ.cjs');
10
+ require('./chunk-FHHISVCH.cjs');
11
+
12
+
13
+
14
+ Object.defineProperty(exports, "SmartTextareaWidget", {
15
+ enumerable: true,
16
+ get: function () { return chunkJNVSA77L_cjs.SmartTextareaWidget; }
17
+ });
18
+ //# sourceMappingURL=SmartTextarea-L7Q4CORK.cjs.map
19
+ //# sourceMappingURL=SmartTextarea-L7Q4CORK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SmartTextarea-L7Q4CORK.cjs"}
@@ -0,0 +1,10 @@
1
+ export { SmartTextareaWidget } from './chunk-GFDE2KZC.mjs';
2
+ import './chunk-4BAKQIPJ.mjs';
3
+ import './chunk-Y7TIWH4I.mjs';
4
+ import './chunk-WYVXXEZI.mjs';
5
+ import './chunk-XR2ZM654.mjs';
6
+ import './chunk-ZGPHTPAN.mjs';
7
+ import './chunk-HEFZA2AH.mjs';
8
+ import './chunk-VPU66PI6.mjs';
9
+ //# sourceMappingURL=SmartTextarea-ZCXGMZLG.mjs.map
10
+ //# sourceMappingURL=SmartTextarea-ZCXGMZLG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"SmartTextarea-ZCXGMZLG.mjs"}
@@ -0,0 +1,226 @@
1
+ 'use strict';
2
+
3
+ var chunkDE7VZVKR_cjs = require('./chunk-DE7VZVKR.cjs');
4
+ var chunkUGGUIXUS_cjs = require('./chunk-UGGUIXUS.cjs');
5
+ var chunkPHADAQSH_cjs = require('./chunk-PHADAQSH.cjs');
6
+ var chunkP62377LB_cjs = require('./chunk-P62377LB.cjs');
7
+ var chunkFZEEWRW3_cjs = require('./chunk-FZEEWRW3.cjs');
8
+ var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
9
+ var chunkKPGTPJDH_cjs = require('./chunk-KPGTPJDH.cjs');
10
+ require('./chunk-TJHG5WHX.cjs');
11
+ require('./chunk-4KSZUIJE.cjs');
12
+ var chunkIDSBJOFY_cjs = require('./chunk-IDSBJOFY.cjs');
13
+ var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
14
+ var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
15
+ var react = require('react');
16
+ var jsxRuntime = require('react/jsx-runtime');
17
+
18
+ var DEFAULT_TOKEN_SEPARATOR = ", ";
19
+ function getAppendSeparator(def) {
20
+ const raw = def.meta && typeof def.meta.appendSeparator === "string" ? def.meta.appendSeparator : DEFAULT_TOKEN_SEPARATOR;
21
+ return raw;
22
+ }
23
+ function isTokenSelected(text, optionValue) {
24
+ const t = String(optionValue).trim();
25
+ if (!t) return false;
26
+ return chunkIDSBJOFY_cjs.getSuggestionTokensFromText(text).some((p) => p === t);
27
+ }
28
+ function deriveKnownSuggestionChipValues(text, options) {
29
+ if (!options.length) return [];
30
+ const allowed = new Map(options.map((o) => [String(o.value), o.value]));
31
+ const tokens = chunkIDSBJOFY_cjs.getSuggestionTokensFromText(text);
32
+ const out = [];
33
+ const seen = /* @__PURE__ */ new Set();
34
+ for (const t of tokens) {
35
+ if (!allowed.has(t) || seen.has(t)) continue;
36
+ seen.add(t);
37
+ out.push(allowed.get(t));
38
+ }
39
+ return out;
40
+ }
41
+ function parallelChipArraysEqual(a, b) {
42
+ if (!Array.isArray(a) || !Array.isArray(b)) return false;
43
+ if (a.length !== b.length) return false;
44
+ for (let i = 0; i < a.length; i++) {
45
+ if (a[i] !== b[i]) return false;
46
+ }
47
+ return true;
48
+ }
49
+ function isSuggestionField(type) {
50
+ return type === "suggestion_textarea" || type === "complaint_chips";
51
+ }
52
+ function EmbeddedSchemaField({ fieldId }) {
53
+ const store = chunkIDSBJOFY_cjs.useFormStore();
54
+ const fieldDef = store.getFieldDef(fieldId);
55
+ if (!fieldDef) return null;
56
+ switch (fieldDef.type) {
57
+ case "text":
58
+ case "number":
59
+ case "textarea":
60
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDE7VZVKR_cjs.TextWidget, { fieldId });
61
+ case "select":
62
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkDE7VZVKR_cjs.SelectWidget, { fieldId });
63
+ default:
64
+ return null;
65
+ }
66
+ }
67
+ var SuggestionTextareaWidget = ({ fieldId }) => {
68
+ const { fieldDef, value, setValue, setTouched, error, disabled, touched } = chunkIDSBJOFY_cjs.useField(fieldId);
69
+ const { state } = chunkKPGTPJDH_cjs.useForm();
70
+ const store = chunkIDSBJOFY_cjs.useFormStore();
71
+ const hasVoice = !!(fieldDef?.voice && store.getVoice());
72
+ const [options, setOptions] = react.useState([]);
73
+ const [loading, setLoading] = react.useState(false);
74
+ const showError = !!error && (touched || state.submitAttempted);
75
+ const def = fieldDef && isSuggestionField(fieldDef.type) ? fieldDef : void 0;
76
+ const textValue = value == null || typeof value === "string" ? value || "" : String(value);
77
+ const parallelChipFieldId = def?.meta && typeof def.meta.parallelChipFieldId === "string" ? def.meta.parallelChipFieldId.trim() : void 0;
78
+ const embeddedFieldIds = react.useMemo(() => {
79
+ const raw = def?.meta && Array.isArray(def.meta.embeddedFieldIds) ? def.meta.embeddedFieldIds : [];
80
+ return raw.filter((id) => typeof id === "string" && id.trim().length > 0).map((id) => id.trim()).filter((id) => store.getFieldDef(id));
81
+ }, [def?.meta, store]);
82
+ react.useEffect(() => {
83
+ if (!def) {
84
+ setOptions([]);
85
+ return;
86
+ }
87
+ if (def.options?.length) {
88
+ setOptions(def.options);
89
+ } else if (def.dataSource) {
90
+ setLoading(true);
91
+ chunkUGGUIXUS_cjs.fetchOptions(def.dataSource.source, def.dataSource.params).then((opts) => setOptions(opts)).finally(() => setLoading(false));
92
+ } else {
93
+ setOptions([]);
94
+ }
95
+ }, [def]);
96
+ const chipAllowedSet = react.useMemo(
97
+ () => new Set(options.map((o) => String(o.value).trim()).filter(Boolean)),
98
+ [options]
99
+ );
100
+ react.useEffect(() => {
101
+ if (!parallelChipFieldId) return;
102
+ const parallelDef = store.getFieldDef(parallelChipFieldId);
103
+ if (!parallelDef || parallelDef.type !== "multiselect") return;
104
+ const next = deriveKnownSuggestionChipValues(textValue, options);
105
+ const prev = store.getFieldState(parallelChipFieldId).value;
106
+ if (parallelChipArraysEqual(prev, next)) return;
107
+ store.setValues({ [parallelChipFieldId]: next }, { touch: false });
108
+ }, [def, parallelChipFieldId, textValue, options, store]);
109
+ if (!def) {
110
+ return null;
111
+ }
112
+ const appendSeparator = getAppendSeparator(def);
113
+ const suggestionsAria = def.meta && typeof def.meta.suggestionsAriaLabel === "string" ? def.meta.suggestionsAriaLabel : "Quick suggestions";
114
+ const theme = chunkP62377LB_cjs.getThemeConfig("textarea", def.theme);
115
+ const wrapperClass = theme?.wrapperClassName ?? "space-y-2";
116
+ const labelClass = theme?.labelClassName;
117
+ const inputClass = chunkFHHISVCH_cjs.cn(theme?.inputClassName, showError && "border-red-500");
118
+ const inputWithStyle = chunk5E3APMY6_cjs.fieldControlClass(def, inputClass);
119
+ const height = def.height != null ? typeof def.height === "string" ? Number(def.height) || void 0 : def.height : void 0;
120
+ const labelContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
121
+ def.label,
122
+ " ",
123
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5E3APMY6_cjs.FieldRequiredIndicator, { fieldDef: def })
124
+ ] });
125
+ const showLabel = chunk5E3APMY6_cjs.isLabelVisible(def);
126
+ const labelEl = showLabel ? theme ? /* @__PURE__ */ jsxRuntime.jsx(chunkJMGUUFOJ_cjs.Label, { className: chunk5E3APMY6_cjs.fieldLabelClass(def, labelClass), children: labelContent }) : /* @__PURE__ */ jsxRuntime.jsx(chunkJMGUUFOJ_cjs.Label, { className: chunk5E3APMY6_cjs.fieldLabelClass(def), children: labelContent }) : null;
127
+ const onChipClick = (optValue) => {
128
+ if (disabled) return;
129
+ setValue(chunkIDSBJOFY_cjs.toggleSuggestionTokenInText(textValue, String(optValue), appendSeparator, chipAllowedSet));
130
+ };
131
+ const hasSuggestions = options.length > 0;
132
+ const hasEmbedded = embeddedFieldIds.length > 0;
133
+ const hasShell = hasSuggestions || hasEmbedded;
134
+ const isHighlightLabel = def.theme === "highlight-label";
135
+ const suggestionShellClass = chunkFHHISVCH_cjs.cn(
136
+ "flex min-w-0 flex-col overflow-hidden",
137
+ hasShell && (isHighlightLabel ? "-mt-1 rounded-b-md border-[#D0D0D0] bg-white" : "rounded-md border border-input bg-background")
138
+ );
139
+ const chipsRowClass = chunkFHHISVCH_cjs.cn(
140
+ "flex flex-wrap gap-2 px-3 pb-2 pt-3",
141
+ hasSuggestions && (isHighlightLabel ? "" : "border-b border-input/70"),
142
+ disabled && "pointer-events-none opacity-50"
143
+ );
144
+ const embeddedRowClass = chunkFHHISVCH_cjs.cn(
145
+ "grid gap-3 px-3 sm:grid-cols-3",
146
+ hasEmbedded && (hasSuggestions ? chunkFHHISVCH_cjs.cn("py-2", isHighlightLabel && "border-t border-input/70") : "border-b border-input/70 py-3"),
147
+ disabled && "pointer-events-none opacity-50"
148
+ );
149
+ const textareaShellClass = chunkFHHISVCH_cjs.cn(
150
+ inputWithStyle,
151
+ hasShell && chunkFHHISVCH_cjs.cn(
152
+ "mt-0 rounded-t-none rounded-b-md border-0 shadow-none focus-visible:ring-offset-0",
153
+ isHighlightLabel ? "border-t-0" : "min-h-[80px]"
154
+ )
155
+ );
156
+ const suggestionButtons = loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: "Loading suggestions\u2026" }) : options.map((opt) => {
157
+ const on = isTokenSelected(textValue, opt.value);
158
+ return /* @__PURE__ */ jsxRuntime.jsx(
159
+ "button",
160
+ {
161
+ type: "button",
162
+ onClick: () => onChipClick(opt.value),
163
+ className: chunkFHHISVCH_cjs.cn(
164
+ "inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors",
165
+ on ? "border-primary bg-primary/10 text-primary" : "border-muted-foreground/30 bg-background hover:bg-muted/60"
166
+ ),
167
+ children: opt.label
168
+ },
169
+ String(opt.value)
170
+ );
171
+ });
172
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(def, wrapperClass), children: [
173
+ hasVoice ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
174
+ labelEl,
175
+ /* @__PURE__ */ jsxRuntime.jsx(chunkFZEEWRW3_cjs.VoiceMicButton, { fieldId, onTranscriptReady: setValue })
176
+ ] }) : labelEl,
177
+ def.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldDescriptionClass(def, "text-xs text-muted-foreground"), children: def.description }),
178
+ hasShell ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: suggestionShellClass, children: [
179
+ hasSuggestions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: chipsRowClass, role: "group", "aria-label": suggestionsAria, children: suggestionButtons }),
180
+ hasEmbedded && /* @__PURE__ */ jsxRuntime.jsx("div", { className: embeddedRowClass, children: embeddedFieldIds.map((id) => /* @__PURE__ */ jsxRuntime.jsx(EmbeddedSchemaField, { fieldId: id }, id)) }),
181
+ /* @__PURE__ */ jsxRuntime.jsx(
182
+ chunkPHADAQSH_cjs.Textarea,
183
+ {
184
+ id: fieldId,
185
+ value: textValue,
186
+ onChange: (e) => setValue(e.target.value),
187
+ onBlur: setTouched,
188
+ disabled,
189
+ className: textareaShellClass,
190
+ placeholder: def.placeholder,
191
+ style: height != null && Number.isFinite(height) ? { minHeight: height } : void 0,
192
+ "aria-label": !showLabel ? def.label : void 0
193
+ }
194
+ )
195
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(
196
+ chunkPHADAQSH_cjs.Textarea,
197
+ {
198
+ id: fieldId,
199
+ value: textValue,
200
+ onChange: (e) => setValue(e.target.value),
201
+ onBlur: setTouched,
202
+ disabled,
203
+ className: inputWithStyle,
204
+ placeholder: def.placeholder,
205
+ style: height != null && Number.isFinite(height) ? { minHeight: height } : void 0,
206
+ "aria-label": !showLabel ? def.label : void 0
207
+ }
208
+ ),
209
+ showError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(def, "text-xs text-red-500"), children: error })
210
+ ] });
211
+ };
212
+ var ComplaintChipsWidget = SuggestionTextareaWidget;
213
+
214
+ Object.defineProperty(exports, "getSuggestionTokensFromText", {
215
+ enumerable: true,
216
+ get: function () { return chunkIDSBJOFY_cjs.getSuggestionTokensFromText; }
217
+ });
218
+ Object.defineProperty(exports, "toggleSuggestionTokenInText", {
219
+ enumerable: true,
220
+ get: function () { return chunkIDSBJOFY_cjs.toggleSuggestionTokenInText; }
221
+ });
222
+ exports.ComplaintChipsWidget = ComplaintChipsWidget;
223
+ exports.SuggestionTextareaWidget = SuggestionTextareaWidget;
224
+ exports.deriveKnownSuggestionChipValues = deriveKnownSuggestionChipValues;
225
+ //# sourceMappingURL=SuggestionTextareaWidget-2TEITBPF.cjs.map
226
+ //# sourceMappingURL=SuggestionTextareaWidget-2TEITBPF.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/widgets/SuggestionTextareaWidget.tsx"],"names":["getSuggestionTokensFromText","useFormStore","jsx","TextWidget","SelectWidget","useField","useForm","useState","useMemo","useEffect","fetchOptions","getThemeConfig","cn","fieldControlClass","jsxs","Fragment","FieldRequiredIndicator","isLabelVisible","Label","fieldLabelClass","toggleSuggestionTokenInText","fieldWrapperClass","VoiceMicButton","fieldDescriptionClass","Textarea","fieldErrorClass"],"mappings":"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","file":"SuggestionTextareaWidget-2TEITBPF.cjs","sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { useField } from '../../react/useField';\nimport { useForm } from '../../react/useForm';\nimport { useFormStore } from '../../react/FormProvider';\nimport { VoiceMicButton } from '../../react/VoiceMicButton';\nimport { Label } from '../shadcn/label';\nimport { Textarea } from '../shadcn/textarea';\nimport { getThemeConfig } from '../themes';\nimport { fetchOptions } from '../../core/asyncOptions';\nimport { cn } from '../../core/utils';\nimport type { SelectOption, SuggestionTextareaFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldDescriptionClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\nimport { TextWidget } from './Text';\nimport { SelectWidget } from './Select';\n\nimport { getSuggestionTokensFromText, toggleSuggestionTokenInText } from '../../core/suggestionTokens';\n\nexport { getSuggestionTokensFromText, toggleSuggestionTokenInText };\n\nconst DEFAULT_TOKEN_SEPARATOR = ', ';\n\nfunction getAppendSeparator(def: SuggestionTextareaFieldDef): string {\n const raw = def.meta && typeof (def.meta as { appendSeparator?: unknown }).appendSeparator === 'string'\n ? (def.meta as { appendSeparator: string }).appendSeparator\n : DEFAULT_TOKEN_SEPARATOR;\n return raw;\n}\n\nfunction isTokenSelected(text: string, optionValue: unknown): boolean {\n const t = String(optionValue).trim();\n if (!t) return false;\n return getSuggestionTokensFromText(text).some((p) => p === t);\n}\n\n/**\n * Chip option values present in `text` as comma-separated tokens (same typing as schema `options[].value`).\n * Order follows left-to-right token order; duplicates in text only appear once.\n */\nexport function deriveKnownSuggestionChipValues(text: string, options: SelectOption[]): unknown[] {\n if (!options.length) return [];\n const allowed = new Map<string, unknown>(options.map((o) => [String(o.value), o.value] as const));\n const tokens = getSuggestionTokensFromText(text);\n const out: unknown[] = [];\n const seen = new Set<string>();\n for (const t of tokens) {\n if (!allowed.has(t) || seen.has(t)) continue;\n seen.add(t);\n out.push(allowed.get(t)!);\n }\n return out;\n}\n\nfunction parallelChipArraysEqual(a: unknown, b: unknown): boolean {\n if (!Array.isArray(a) || !Array.isArray(b)) return false;\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nfunction isSuggestionField(type: string | undefined): type is SuggestionTextareaFieldDef['type'] {\n return type === 'suggestion_textarea' || type === 'complaint_chips';\n}\n\n/**\n * Renders a sibling schema field inside the suggestion textarea shell. Uses concrete widgets\n * (not FieldRenderer) so `hidden` layout fields still render here without circular imports.\n * Supported: text, number, textarea, select.\n */\nfunction EmbeddedSchemaField({ fieldId }: { fieldId: string }) {\n const store = useFormStore();\n const fieldDef = store.getFieldDef(fieldId);\n if (!fieldDef) return null;\n switch (fieldDef.type) {\n case 'text':\n case 'number':\n case 'textarea':\n return <TextWidget fieldId={fieldId} />;\n case 'select':\n return <SelectWidget fieldId={fieldId} />;\n default:\n return null;\n }\n}\n\n/**\n * Reusable textarea with schema-driven **suggestion chips** inside the input area (same white\n * shell as the textarea). The field value is a **single string**: clicking a chip **appends**\n * that option’s `value` or **removes** it if already selected. When chip options are loaded,\n * slugs are kept on the **last line** (comma + space by default), with prose above separated by\n * a newline. Optional `meta.parallelChipFieldId` mirrors chip selections into a sibling\n * **`multiselect`** array. Free typing is still allowed.\n */\nexport const SuggestionTextareaWidget: React.FC<{ fieldId: string }> = ({ fieldId }) => {\n const { fieldDef, value, setValue, setTouched, error, disabled, touched } = useField(fieldId);\n const { state } = useForm();\n const store = useFormStore();\n const hasVoice = !!(fieldDef?.voice && store.getVoice());\n\n const [options, setOptions] = useState<SelectOption[]>([]);\n const [loading, setLoading] = useState(false);\n const showError = !!error && (touched || state.submitAttempted);\n\n const def =\n fieldDef && isSuggestionField(fieldDef.type) ? (fieldDef as SuggestionTextareaFieldDef) : undefined;\n\n const textValue = value == null || typeof value === 'string' ? value || '' : String(value);\n\n const parallelChipFieldId =\n def?.meta &&\n typeof (def.meta as { parallelChipFieldId?: unknown }).parallelChipFieldId === 'string'\n ? (def.meta as { parallelChipFieldId: string }).parallelChipFieldId.trim()\n : undefined;\n\n const embeddedFieldIds = useMemo(() => {\n const raw = def?.meta && Array.isArray((def.meta as { embeddedFieldIds?: unknown }).embeddedFieldIds)\n ? (def.meta as { embeddedFieldIds: unknown[] }).embeddedFieldIds\n : [];\n return raw\n .filter((id): id is string => typeof id === 'string' && id.trim().length > 0)\n .map((id) => id.trim())\n .filter((id) => store.getFieldDef(id));\n }, [def?.meta, store]);\n\n useEffect(() => {\n if (!def) {\n setOptions([]);\n return;\n }\n if (def.options?.length) {\n setOptions(def.options);\n } else if (def.dataSource) {\n setLoading(true);\n fetchOptions(def.dataSource.source, def.dataSource.params)\n .then((opts) => setOptions(opts as SelectOption[]))\n .finally(() => setLoading(false));\n } else {\n setOptions([]);\n }\n }, [def]);\n\n const chipAllowedSet = useMemo(\n () => new Set(options.map((o) => String(o.value).trim()).filter(Boolean)),\n [options],\n );\n\n useEffect(() => {\n if (!parallelChipFieldId) return;\n const parallelDef = store.getFieldDef(parallelChipFieldId);\n if (!parallelDef || parallelDef.type !== 'multiselect') return;\n const next = deriveKnownSuggestionChipValues(textValue, options);\n const prev = store.getFieldState(parallelChipFieldId).value;\n if (parallelChipArraysEqual(prev, next)) return;\n store.setValues({ [parallelChipFieldId]: next }, { touch: false });\n }, [def, parallelChipFieldId, textValue, options, store]);\n\n if (!def) {\n return null;\n }\n\n const appendSeparator = getAppendSeparator(def);\n const suggestionsAria =\n def.meta && typeof (def.meta as { suggestionsAriaLabel?: string }).suggestionsAriaLabel === 'string'\n ? (def.meta as { suggestionsAriaLabel: string }).suggestionsAriaLabel\n : 'Quick suggestions';\n\n const theme = getThemeConfig('textarea', def.theme);\n const wrapperClass = theme?.wrapperClassName ?? 'space-y-2';\n const labelClass = theme?.labelClassName;\n const inputClass = cn(theme?.inputClassName, showError && 'border-red-500');\n const inputWithStyle = fieldControlClass(def, inputClass);\n const height =\n def.height != null\n ? typeof def.height === 'string'\n ? Number(def.height) || undefined\n : def.height\n : undefined;\n\n const labelContent = (\n <>\n {def.label}{' '}\n <FieldRequiredIndicator fieldDef={def} />\n </>\n );\n\n const showLabel = isLabelVisible(def);\n\n const labelEl = showLabel ? (\n theme ? (\n <Label className={fieldLabelClass(def, labelClass)}>{labelContent}</Label>\n ) : (\n <Label className={fieldLabelClass(def)}>{labelContent}</Label>\n )\n ) : null;\n\n const onChipClick = (optValue: unknown) => {\n if (disabled) return;\n setValue(toggleSuggestionTokenInText(textValue, String(optValue), appendSeparator, chipAllowedSet));\n };\n\n const hasSuggestions = options.length > 0;\n const hasEmbedded = embeddedFieldIds.length > 0;\n const hasShell = hasSuggestions || hasEmbedded;\n const isHighlightLabel = def.theme === 'highlight-label';\n\n const suggestionShellClass = cn(\n 'flex min-w-0 flex-col overflow-hidden',\n hasShell &&\n (isHighlightLabel\n ? '-mt-1 rounded-b-md border-[#D0D0D0] bg-white'\n : 'rounded-md border border-input bg-background'),\n );\n\n const chipsRowClass = cn(\n 'flex flex-wrap gap-2 px-3 pb-2 pt-3',\n hasSuggestions &&\n (isHighlightLabel ? '' : 'border-b border-input/70'),\n disabled && 'pointer-events-none opacity-50',\n );\n\n const embeddedRowClass = cn(\n 'grid gap-3 px-3 sm:grid-cols-3',\n hasEmbedded &&\n (hasSuggestions\n ? cn('py-2', isHighlightLabel && 'border-t border-input/70')\n : 'border-b border-input/70 py-3'),\n disabled && 'pointer-events-none opacity-50',\n );\n\n const textareaShellClass = cn(\n inputWithStyle,\n hasShell &&\n cn(\n 'mt-0 rounded-t-none rounded-b-md border-0 shadow-none focus-visible:ring-offset-0',\n isHighlightLabel ? 'border-t-0' : 'min-h-[80px]',\n ),\n );\n\n const suggestionButtons =\n loading ? (\n <span className=\"text-xs text-muted-foreground\">Loading suggestions…</span>\n ) : (\n options.map((opt) => {\n const on = isTokenSelected(textValue, opt.value);\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n onClick={() => onChipClick(opt.value)}\n className={cn(\n 'inline-flex min-h-8 items-center rounded-full border px-3 py-1 text-xs font-medium leading-none transition-colors',\n on\n ? 'border-primary bg-primary/10 text-primary'\n : 'border-muted-foreground/30 bg-background hover:bg-muted/60',\n )}\n >\n {opt.label}\n </button>\n );\n })\n );\n\n return (\n <div className={fieldWrapperClass(def, wrapperClass)}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {labelEl}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : (\n labelEl\n )}\n\n {def.description && (\n <p className={fieldDescriptionClass(def, 'text-xs text-muted-foreground')}>\n {def.description}\n </p>\n )}\n\n {hasShell ? (\n <div className={suggestionShellClass}>\n {hasSuggestions && (\n <div className={chipsRowClass} role=\"group\" aria-label={suggestionsAria}>\n {suggestionButtons}\n </div>\n )}\n {hasEmbedded && (\n <div className={embeddedRowClass}>\n {embeddedFieldIds.map((id) => (\n <EmbeddedSchemaField key={id} fieldId={id} />\n ))}\n </div>\n )}\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={textareaShellClass}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n aria-label={!showLabel ? def.label : undefined}\n />\n </div>\n ) : (\n <Textarea\n id={fieldId}\n value={textValue}\n onChange={(e) => setValue(e.target.value)}\n onBlur={setTouched}\n disabled={disabled}\n className={inputWithStyle}\n placeholder={def.placeholder}\n style={height != null && Number.isFinite(height) ? { minHeight: height } : undefined}\n aria-label={!showLabel ? def.label : undefined}\n />\n )}\n\n {showError && (\n <p className={fieldErrorClass(def, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n/** @deprecated Use `SuggestionTextareaWidget`. Kept for schema compatibility. */\nexport const ComplaintChipsWidget = SuggestionTextareaWidget;\n"]}