formanitor 0.1.11 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/dist/AddInvestigationWidget-7UGZQYI5.mjs +30 -0
  2. package/dist/AddInvestigationWidget-7UGZQYI5.mjs.map +1 -0
  3. package/dist/AddInvestigationWidget-RY62UCPM.cjs +32 -0
  4. package/dist/AddInvestigationWidget-RY62UCPM.cjs.map +1 -0
  5. package/dist/AddMedicationWidget-UG26VMUX.mjs +30 -0
  6. package/dist/AddMedicationWidget-UG26VMUX.mjs.map +1 -0
  7. package/dist/AddMedicationWidget-WPI32WAP.cjs +32 -0
  8. package/dist/AddMedicationWidget-WPI32WAP.cjs.map +1 -0
  9. package/dist/AddProcedureWidget-SF6MTRBV.cjs +278 -0
  10. package/dist/AddProcedureWidget-SF6MTRBV.cjs.map +1 -0
  11. package/dist/AddProcedureWidget-SQJUKKMK.mjs +276 -0
  12. package/dist/AddProcedureWidget-SQJUKKMK.mjs.map +1 -0
  13. package/dist/BiometryIolWorkupWidget-I5AJOYB2.cjs +300 -0
  14. package/dist/BiometryIolWorkupWidget-I5AJOYB2.cjs.map +1 -0
  15. package/dist/BiometryIolWorkupWidget-NL2M7ZAA.mjs +298 -0
  16. package/dist/BiometryIolWorkupWidget-NL2M7ZAA.mjs.map +1 -0
  17. package/dist/DateTimeWidget-DIDVF2EB.cjs +61 -0
  18. package/dist/DateTimeWidget-DIDVF2EB.cjs.map +1 -0
  19. package/dist/DateTimeWidget-LFBB6HOP.mjs +59 -0
  20. package/dist/DateTimeWidget-LFBB6HOP.mjs.map +1 -0
  21. package/dist/DateWidget-4ND5TKP2.mjs +72 -0
  22. package/dist/DateWidget-4ND5TKP2.mjs.map +1 -0
  23. package/dist/DateWidget-BCVR5GDK.cjs +74 -0
  24. package/dist/DateWidget-BCVR5GDK.cjs.map +1 -0
  25. package/dist/DiagnosisTextareaWidget-E7OQRUMX.cjs +190 -0
  26. package/dist/DiagnosisTextareaWidget-E7OQRUMX.cjs.map +1 -0
  27. package/dist/DiagnosisTextareaWidget-MAOXCXEZ.mjs +184 -0
  28. package/dist/DiagnosisTextareaWidget-MAOXCXEZ.mjs.map +1 -0
  29. package/dist/DifferentialDiagnosisWidget-ANALLNKL.cjs +17 -0
  30. package/dist/DifferentialDiagnosisWidget-ANALLNKL.cjs.map +1 -0
  31. package/dist/DifferentialDiagnosisWidget-LCY2SA2I.mjs +15 -0
  32. package/dist/DifferentialDiagnosisWidget-LCY2SA2I.mjs.map +1 -0
  33. package/dist/DischargeMedicationOrdersWidget-GYT35W7J.mjs +161 -0
  34. package/dist/DischargeMedicationOrdersWidget-GYT35W7J.mjs.map +1 -0
  35. package/dist/DischargeMedicationOrdersWidget-ILWNZ7VM.cjs +163 -0
  36. package/dist/DischargeMedicationOrdersWidget-ILWNZ7VM.cjs.map +1 -0
  37. package/dist/EditableTable-TGCVUBLO.mjs +279 -0
  38. package/dist/EditableTable-TGCVUBLO.mjs.map +1 -0
  39. package/dist/EditableTable-VCUNJZEX.cjs +281 -0
  40. package/dist/EditableTable-VCUNJZEX.cjs.map +1 -0
  41. package/dist/FollowupWidget-F6FRZO4T.mjs +283 -0
  42. package/dist/FollowupWidget-F6FRZO4T.mjs.map +1 -0
  43. package/dist/FollowupWidget-NBTOV2ML.cjs +285 -0
  44. package/dist/FollowupWidget-NBTOV2ML.cjs.map +1 -0
  45. package/dist/FunctionalImpairmentScoreWidget-5V5SNLTF.cjs +93 -0
  46. package/dist/FunctionalImpairmentScoreWidget-5V5SNLTF.cjs.map +1 -0
  47. package/dist/FunctionalImpairmentScoreWidget-QKIZE7KT.mjs +91 -0
  48. package/dist/FunctionalImpairmentScoreWidget-QKIZE7KT.mjs.map +1 -0
  49. package/dist/GsExaminationWidget-57SL4BCI.cjs +528 -0
  50. package/dist/GsExaminationWidget-57SL4BCI.cjs.map +1 -0
  51. package/dist/GsExaminationWidget-J4VABGY6.mjs +526 -0
  52. package/dist/GsExaminationWidget-J4VABGY6.mjs.map +1 -0
  53. package/dist/GsGradingWidget-3WTLIP33.mjs +90 -0
  54. package/dist/GsGradingWidget-3WTLIP33.mjs.map +1 -0
  55. package/dist/GsGradingWidget-CIXE36HF.cjs +92 -0
  56. package/dist/GsGradingWidget-CIXE36HF.cjs.map +1 -0
  57. package/dist/GsSmartHistoryWidget-6Q2IIGDG.cjs +398 -0
  58. package/dist/GsSmartHistoryWidget-6Q2IIGDG.cjs.map +1 -0
  59. package/dist/GsSmartHistoryWidget-IOGZ6GNS.mjs +396 -0
  60. package/dist/GsSmartHistoryWidget-IOGZ6GNS.mjs.map +1 -0
  61. package/dist/HiddenVitalsWidget-HBK7PBPR.cjs +55 -0
  62. package/dist/HiddenVitalsWidget-HBK7PBPR.cjs.map +1 -0
  63. package/dist/HiddenVitalsWidget-JH3NRZLM.mjs +53 -0
  64. package/dist/HiddenVitalsWidget-JH3NRZLM.mjs.map +1 -0
  65. package/dist/LensAssessmentWidget-7WMULFS2.mjs +232 -0
  66. package/dist/LensAssessmentWidget-7WMULFS2.mjs.map +1 -0
  67. package/dist/LensAssessmentWidget-GSOOD7BX.cjs +234 -0
  68. package/dist/LensAssessmentWidget-GSOOD7BX.cjs.map +1 -0
  69. package/dist/MarMedicationOrdersWidget-3E6GFOR6.cjs +76 -0
  70. package/dist/MarMedicationOrdersWidget-3E6GFOR6.cjs.map +1 -0
  71. package/dist/MarMedicationOrdersWidget-QZUVSEB5.mjs +74 -0
  72. package/dist/MarMedicationOrdersWidget-QZUVSEB5.mjs.map +1 -0
  73. package/dist/OBGExaminationWidget-F2ZNSP2M.cjs +215 -0
  74. package/dist/OBGExaminationWidget-F2ZNSP2M.cjs.map +1 -0
  75. package/dist/OBGExaminationWidget-POVLALMA.mjs +213 -0
  76. package/dist/OBGExaminationWidget-POVLALMA.mjs.map +1 -0
  77. package/dist/OBGPathwayWidget-CGT7Q4T2.mjs +517 -0
  78. package/dist/OBGPathwayWidget-CGT7Q4T2.mjs.map +1 -0
  79. package/dist/OBGPathwayWidget-WCIQENMO.cjs +519 -0
  80. package/dist/OBGPathwayWidget-WCIQENMO.cjs.map +1 -0
  81. package/dist/ObstetricHistoryWidget-EGVLL4X2.mjs +1113 -0
  82. package/dist/ObstetricHistoryWidget-EGVLL4X2.mjs.map +1 -0
  83. package/dist/ObstetricHistoryWidget-XU6R7IPP.cjs +1115 -0
  84. package/dist/ObstetricHistoryWidget-XU6R7IPP.cjs.map +1 -0
  85. package/dist/OphthalDiagnosisWidget-G5RCC2QZ.mjs +89 -0
  86. package/dist/OphthalDiagnosisWidget-G5RCC2QZ.mjs.map +1 -0
  87. package/dist/OphthalDiagnosisWidget-OQPTHJ7E.cjs +91 -0
  88. package/dist/OphthalDiagnosisWidget-OQPTHJ7E.cjs.map +1 -0
  89. package/dist/OphthalmologyWidget-I3BKWOI2.cjs +1331 -0
  90. package/dist/OphthalmologyWidget-I3BKWOI2.cjs.map +1 -0
  91. package/dist/OphthalmologyWidget-RG2AI6WA.mjs +1329 -0
  92. package/dist/OphthalmologyWidget-RG2AI6WA.mjs.map +1 -0
  93. package/dist/OrthopedicExamWidget-BBZP6NVT.mjs +366 -0
  94. package/dist/OrthopedicExamWidget-BBZP6NVT.mjs.map +1 -0
  95. package/dist/OrthopedicExamWidget-M4KKU5RC.cjs +368 -0
  96. package/dist/OrthopedicExamWidget-M4KKU5RC.cjs.map +1 -0
  97. package/dist/PainScaleFlagsWidget-E576R6QB.mjs +151 -0
  98. package/dist/PainScaleFlagsWidget-E576R6QB.mjs.map +1 -0
  99. package/dist/PainScaleFlagsWidget-QHGESXNE.cjs +153 -0
  100. package/dist/PainScaleFlagsWidget-QHGESXNE.cjs.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-J2PWYFDT.cjs +171 -0
  106. package/dist/ReferralWidget-J2PWYFDT.cjs.map +1 -0
  107. package/dist/ReferralWidget-UPYWEO5R.mjs +169 -0
  108. package/dist/ReferralWidget-UPYWEO5R.mjs.map +1 -0
  109. package/dist/RichTextWidget-BBCNJPMH.mjs +11 -0
  110. package/dist/RichTextWidget-BBCNJPMH.mjs.map +1 -0
  111. package/dist/RichTextWidget-CRQHNVJR.cjs +24 -0
  112. package/dist/RichTextWidget-CRQHNVJR.cjs.map +1 -0
  113. package/dist/SmartTextarea-DKWV4R6H.cjs +19 -0
  114. package/dist/SmartTextarea-DKWV4R6H.cjs.map +1 -0
  115. package/dist/SmartTextarea-ZTQIW6O2.mjs +10 -0
  116. package/dist/SmartTextarea-ZTQIW6O2.mjs.map +1 -0
  117. package/dist/SuggestionTextareaWidget-22NR3JWM.mjs +215 -0
  118. package/dist/SuggestionTextareaWidget-22NR3JWM.mjs.map +1 -0
  119. package/dist/SuggestionTextareaWidget-WCTPWW2E.cjs +226 -0
  120. package/dist/SuggestionTextareaWidget-WCTPWW2E.cjs.map +1 -0
  121. package/dist/SurgicalRiskFlagsWidget-Q5FTWB3M.cjs +146 -0
  122. package/dist/SurgicalRiskFlagsWidget-Q5FTWB3M.cjs.map +1 -0
  123. package/dist/SurgicalRiskFlagsWidget-WCAHZKKG.mjs +144 -0
  124. package/dist/SurgicalRiskFlagsWidget-WCAHZKKG.mjs.map +1 -0
  125. package/dist/UrologyExaminationWidget-JYUGZ5CG.cjs +273 -0
  126. package/dist/UrologyExaminationWidget-JYUGZ5CG.cjs.map +1 -0
  127. package/dist/UrologyExaminationWidget-QDTD3FJX.mjs +271 -0
  128. package/dist/UrologyExaminationWidget-QDTD3FJX.mjs.map +1 -0
  129. package/dist/UrologyPathwayWidget-QTFKUIM7.mjs +153 -0
  130. package/dist/UrologyPathwayWidget-QTFKUIM7.mjs.map +1 -0
  131. package/dist/UrologyPathwayWidget-TXZQNGP4.cjs +155 -0
  132. package/dist/UrologyPathwayWidget-TXZQNGP4.cjs.map +1 -0
  133. package/dist/UrologySmartHistoryWidget-53NATEO3.cjs +471 -0
  134. package/dist/UrologySmartHistoryWidget-53NATEO3.cjs.map +1 -0
  135. package/dist/UrologySmartHistoryWidget-PBU4QXQJ.mjs +469 -0
  136. package/dist/UrologySmartHistoryWidget-PBU4QXQJ.mjs.map +1 -0
  137. package/dist/VitalsWidget-BRFUKGNO.mjs +187 -0
  138. package/dist/VitalsWidget-BRFUKGNO.mjs.map +1 -0
  139. package/dist/VitalsWidget-PDCYXNBM.cjs +208 -0
  140. package/dist/VitalsWidget-PDCYXNBM.cjs.map +1 -0
  141. package/dist/chunk-3KRDT7TX.mjs +137 -0
  142. package/dist/chunk-3KRDT7TX.mjs.map +1 -0
  143. package/dist/chunk-4BAKQIPJ.mjs +27 -0
  144. package/dist/chunk-4BAKQIPJ.mjs.map +1 -0
  145. package/dist/chunk-4KSZUIJE.cjs +143 -0
  146. package/dist/chunk-4KSZUIJE.cjs.map +1 -0
  147. package/dist/chunk-4PMNVBJD.mjs +121 -0
  148. package/dist/chunk-4PMNVBJD.mjs.map +1 -0
  149. package/dist/chunk-5E3APMY6.cjs +54 -0
  150. package/dist/chunk-5E3APMY6.cjs.map +1 -0
  151. package/dist/chunk-5I2RC47Y.mjs +75 -0
  152. package/dist/chunk-5I2RC47Y.mjs.map +1 -0
  153. package/dist/chunk-6YX37XBM.cjs +32 -0
  154. package/dist/chunk-6YX37XBM.cjs.map +1 -0
  155. package/dist/chunk-7L2JOWGA.mjs +30 -0
  156. package/dist/chunk-7L2JOWGA.mjs.map +1 -0
  157. package/dist/chunk-AIZ3XYEZ.cjs +551 -0
  158. package/dist/chunk-AIZ3XYEZ.cjs.map +1 -0
  159. package/dist/chunk-AZHTIUOL.mjs +116 -0
  160. package/dist/chunk-AZHTIUOL.mjs.map +1 -0
  161. package/dist/chunk-AZSAPO2V.cjs +174 -0
  162. package/dist/chunk-AZSAPO2V.cjs.map +1 -0
  163. package/dist/chunk-B3GBIAHZ.mjs +285 -0
  164. package/dist/chunk-B3GBIAHZ.mjs.map +1 -0
  165. package/dist/chunk-BMNY7F6H.mjs +148 -0
  166. package/dist/chunk-BMNY7F6H.mjs.map +1 -0
  167. package/dist/chunk-BOBX45NY.cjs +77 -0
  168. package/dist/chunk-BOBX45NY.cjs.map +1 -0
  169. package/dist/chunk-BU4ZEAAP.mjs +102 -0
  170. package/dist/chunk-BU4ZEAAP.mjs.map +1 -0
  171. package/dist/chunk-DZYV47QC.mjs +54 -0
  172. package/dist/chunk-DZYV47QC.mjs.map +1 -0
  173. package/dist/chunk-E7WUDHSA.cjs +127 -0
  174. package/dist/chunk-E7WUDHSA.cjs.map +1 -0
  175. package/dist/chunk-FHHISVCH.cjs +13 -0
  176. package/dist/chunk-FHHISVCH.cjs.map +1 -0
  177. package/dist/chunk-GNZWSVTB.mjs +29 -0
  178. package/dist/chunk-GNZWSVTB.mjs.map +1 -0
  179. package/dist/chunk-GPU5P3FB.cjs +236 -0
  180. package/dist/chunk-GPU5P3FB.cjs.map +1 -0
  181. package/dist/chunk-GXXWMHAA.mjs +49 -0
  182. package/dist/chunk-GXXWMHAA.mjs.map +1 -0
  183. package/dist/chunk-GZPCYSJK.mjs +104 -0
  184. package/dist/chunk-GZPCYSJK.mjs.map +1 -0
  185. package/dist/chunk-HEFZA2AH.mjs +22 -0
  186. package/dist/chunk-HEFZA2AH.mjs.map +1 -0
  187. package/dist/chunk-I4AV6BQF.mjs +10 -0
  188. package/dist/chunk-I4AV6BQF.mjs.map +1 -0
  189. package/dist/chunk-I7TJVWYV.cjs +73 -0
  190. package/dist/chunk-I7TJVWYV.cjs.map +1 -0
  191. package/dist/chunk-IFMQKLNW.mjs +39 -0
  192. package/dist/chunk-IFMQKLNW.mjs.map +1 -0
  193. package/dist/chunk-IFSKLIS2.cjs +12 -0
  194. package/dist/chunk-IFSKLIS2.cjs.map +1 -0
  195. package/dist/chunk-IKAKE7TR.mjs +527 -0
  196. package/dist/chunk-IKAKE7TR.mjs.map +1 -0
  197. package/dist/chunk-JE6VXRWW.cjs +86 -0
  198. package/dist/chunk-JE6VXRWW.cjs.map +1 -0
  199. package/dist/chunk-JMGUUFOJ.cjs +45 -0
  200. package/dist/chunk-JMGUUFOJ.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-L4CIIT4U.cjs +388 -0
  206. package/dist/chunk-L4CIIT4U.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-MQ2JV7HL.cjs +140 -0
  214. package/dist/chunk-MQ2JV7HL.cjs.map +1 -0
  215. package/dist/chunk-N4L76SHJ.cjs +65 -0
  216. package/dist/chunk-N4L76SHJ.cjs.map +1 -0
  217. package/dist/chunk-O3VQBPEW.cjs +72 -0
  218. package/dist/chunk-O3VQBPEW.cjs.map +1 -0
  219. package/dist/chunk-P62377LB.cjs +27 -0
  220. package/dist/chunk-P62377LB.cjs.map +1 -0
  221. package/dist/chunk-PHADAQSH.cjs +49 -0
  222. package/dist/chunk-PHADAQSH.cjs.map +1 -0
  223. package/dist/chunk-PZBJYPWW.cjs +52 -0
  224. package/dist/chunk-PZBJYPWW.cjs.map +1 -0
  225. package/dist/chunk-QKJ7BQSR.cjs +538 -0
  226. package/dist/chunk-QKJ7BQSR.cjs.map +1 -0
  227. package/dist/chunk-QS6WG2XJ.cjs +56 -0
  228. package/dist/chunk-QS6WG2XJ.cjs.map +1 -0
  229. package/dist/chunk-S7EMPE2D.cjs +104 -0
  230. package/dist/chunk-S7EMPE2D.cjs.map +1 -0
  231. package/dist/chunk-SCMXLRX5.mjs +42 -0
  232. package/dist/chunk-SCMXLRX5.mjs.map +1 -0
  233. package/dist/chunk-SHQHDSA4.cjs +1959 -0
  234. package/dist/chunk-SHQHDSA4.cjs.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-ULMK3TUI.mjs +69 -0
  240. package/dist/chunk-ULMK3TUI.mjs.map +1 -0
  241. package/dist/chunk-UULLSS4O.mjs +82 -0
  242. package/dist/chunk-UULLSS4O.mjs.map +1 -0
  243. package/dist/chunk-VNFBUAZD.mjs +25 -0
  244. package/dist/chunk-VNFBUAZD.mjs.map +1 -0
  245. package/dist/chunk-VPU66PI6.mjs +11 -0
  246. package/dist/chunk-VPU66PI6.mjs.map +1 -0
  247. package/dist/chunk-VZT5YNCD.mjs +228 -0
  248. package/dist/chunk-VZT5YNCD.mjs.map +1 -0
  249. package/dist/chunk-WYVXXEZI.mjs +46 -0
  250. package/dist/chunk-WYVXXEZI.mjs.map +1 -0
  251. package/dist/chunk-XDUVO3IZ.mjs +547 -0
  252. package/dist/chunk-XDUVO3IZ.mjs.map +1 -0
  253. package/dist/chunk-Y7TIWH4I.mjs +25 -0
  254. package/dist/chunk-Y7TIWH4I.mjs.map +1 -0
  255. package/dist/chunk-YEFM2ERQ.cjs +143 -0
  256. package/dist/chunk-YEFM2ERQ.cjs.map +1 -0
  257. package/dist/chunk-YHNI5NIX.mjs +361 -0
  258. package/dist/chunk-YHNI5NIX.mjs.map +1 -0
  259. package/dist/chunk-ZTT5XJR7.mjs +1921 -0
  260. package/dist/chunk-ZTT5XJR7.mjs.map +1 -0
  261. package/dist/index.cjs +2091 -14564
  262. package/dist/index.cjs.map +1 -1
  263. package/dist/index.d.cts +62 -767
  264. package/dist/index.d.ts +62 -767
  265. package/dist/index.mjs +1873 -14394
  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-CYtJk8H9.d.cts +782 -0
  288. package/dist/types-CYtJk8H9.d.ts +782 -0
  289. package/package.json +20 -2
@@ -0,0 +1,388 @@
1
+ 'use strict';
2
+
3
+ var chunkBOBX45NY_cjs = require('./chunk-BOBX45NY.cjs');
4
+ var chunk5E3APMY6_cjs = require('./chunk-5E3APMY6.cjs');
5
+ var chunk6YX37XBM_cjs = require('./chunk-6YX37XBM.cjs');
6
+ var chunkO3VQBPEW_cjs = require('./chunk-O3VQBPEW.cjs');
7
+ var chunkSHQHDSA4_cjs = require('./chunk-SHQHDSA4.cjs');
8
+ var chunkJMGUUFOJ_cjs = require('./chunk-JMGUUFOJ.cjs');
9
+ var chunkFHHISVCH_cjs = require('./chunk-FHHISVCH.cjs');
10
+ var React = require('react');
11
+ var react = require('@tiptap/react');
12
+ var StarterKit = require('@tiptap/starter-kit');
13
+ var Placeholder = require('@tiptap/extension-placeholder');
14
+ var Underline = require('@tiptap/extension-underline');
15
+ var extensionTable = require('@tiptap/extension-table');
16
+ var lucideReact = require('lucide-react');
17
+ var SeparatorPrimitive = require('@radix-ui/react-separator');
18
+ var jsxRuntime = require('react/jsx-runtime');
19
+
20
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
+
22
+ function _interopNamespace(e) {
23
+ if (e && e.__esModule) return e;
24
+ var n = Object.create(null);
25
+ if (e) {
26
+ Object.keys(e).forEach(function (k) {
27
+ if (k !== 'default') {
28
+ var d = Object.getOwnPropertyDescriptor(e, k);
29
+ Object.defineProperty(n, k, d.get ? d : {
30
+ enumerable: true,
31
+ get: function () { return e[k]; }
32
+ });
33
+ }
34
+ });
35
+ }
36
+ n.default = e;
37
+ return Object.freeze(n);
38
+ }
39
+
40
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
41
+ var StarterKit__default = /*#__PURE__*/_interopDefault(StarterKit);
42
+ var Placeholder__default = /*#__PURE__*/_interopDefault(Placeholder);
43
+ var Underline__default = /*#__PURE__*/_interopDefault(Underline);
44
+ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
45
+
46
+ var Separator = React__namespace.forwardRef(
47
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
48
+ SeparatorPrimitive__namespace.Root,
49
+ {
50
+ ref,
51
+ decorative,
52
+ orientation,
53
+ className: chunkFHHISVCH_cjs.cn(
54
+ "shrink-0 bg-border",
55
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
56
+ className
57
+ ),
58
+ ...props
59
+ }
60
+ )
61
+ );
62
+ Separator.displayName = SeparatorPrimitive__namespace.Root.displayName;
63
+ function isEmptyHtml(html) {
64
+ const t = html.trim();
65
+ return t === "" || t === "<p></p>" || t === "<p><br></p>" || t === '<p><br class="ProseMirror-trailingBreak"></p>';
66
+ }
67
+ function buildRichTextExtensions(placeholder, tables) {
68
+ const base = [
69
+ StarterKit__default.default.configure({
70
+ // Disable headings entirely so the UI/content can't introduce H2/H3.
71
+ heading: false,
72
+ bulletList: {
73
+ HTMLAttributes: {
74
+ class: "list-disc pl-6 my-2"
75
+ }
76
+ },
77
+ orderedList: {
78
+ HTMLAttributes: {
79
+ class: "list-decimal pl-6 my-2"
80
+ }
81
+ },
82
+ listItem: {
83
+ HTMLAttributes: {
84
+ class: "my-1"
85
+ }
86
+ }
87
+ }),
88
+ Underline__default.default,
89
+ Placeholder__default.default.configure({
90
+ placeholder
91
+ })
92
+ ];
93
+ if (!tables) return base;
94
+ return [
95
+ ...base,
96
+ extensionTable.Table.configure({
97
+ resizable: true,
98
+ /** Wider hit zone along column borders (default 5px). */
99
+ handleWidth: 8,
100
+ cellMinWidth: 50
101
+ }),
102
+ extensionTable.TableRow,
103
+ extensionTable.TableHeader,
104
+ extensionTable.TableCell
105
+ ];
106
+ }
107
+ function RichTextToolbar({
108
+ editor,
109
+ disabled,
110
+ tablesEnabled
111
+ }) {
112
+ const [, rerender] = React.useReducer((n) => n + 1, 0);
113
+ React.useEffect(() => {
114
+ if (!editor) return;
115
+ const handler = () => rerender();
116
+ editor.on("selectionUpdate", handler);
117
+ editor.on("transaction", handler);
118
+ return () => {
119
+ editor.off("selectionUpdate", handler);
120
+ editor.off("transaction", handler);
121
+ };
122
+ }, [editor]);
123
+ if (!editor) {
124
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1 border-b border-input bg-muted/30 px-2 py-1.5 min-h-[42px]" });
125
+ }
126
+ const fmtBtn = (active, onClick, icon, title) => /* @__PURE__ */ jsxRuntime.jsx(
127
+ chunkO3VQBPEW_cjs.Button,
128
+ {
129
+ type: "button",
130
+ variant: active ? "secondary" : "outline",
131
+ size: "icon",
132
+ className: "h-8 w-8 shrink-0",
133
+ disabled,
134
+ title,
135
+ onClick: () => {
136
+ if (!disabled) onClick();
137
+ },
138
+ children: icon
139
+ }
140
+ );
141
+ const inTable = tablesEnabled && editor.isActive("table");
142
+ return /* @__PURE__ */ jsxRuntime.jsxs(
143
+ "div",
144
+ {
145
+ className: "flex flex-wrap items-center gap-1 border-b border-input bg-muted/30 px-2 py-1.5",
146
+ role: "toolbar",
147
+ "aria-label": "Rich text formatting",
148
+ children: [
149
+ fmtBtn(
150
+ editor.isActive("bold"),
151
+ () => editor.chain().focus().toggleBold().run(),
152
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Bold, { className: "h-4 w-4" }),
153
+ "Bold"
154
+ ),
155
+ fmtBtn(
156
+ editor.isActive("italic"),
157
+ () => editor.chain().focus().toggleItalic().run(),
158
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Italic, { className: "h-4 w-4" }),
159
+ "Italic"
160
+ ),
161
+ fmtBtn(
162
+ editor.isActive("underline"),
163
+ () => editor.chain().focus().toggleUnderline().run(),
164
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Underline, { className: "h-4 w-4" }),
165
+ "Underline"
166
+ ),
167
+ fmtBtn(
168
+ editor.isActive("strike"),
169
+ () => editor.chain().focus().toggleStrike().run(),
170
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Strikethrough, { className: "h-4 w-4" }),
171
+ "Strikethrough"
172
+ ),
173
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { orientation: "vertical", className: "mx-0.5 h-6" }),
174
+ fmtBtn(
175
+ editor.isActive("bulletList"),
176
+ () => editor.chain().focus().toggleBulletList().run(),
177
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.List, { className: "h-4 w-4" }),
178
+ "Bullet list"
179
+ ),
180
+ fmtBtn(
181
+ editor.isActive("orderedList"),
182
+ () => editor.chain().focus().toggleOrderedList().run(),
183
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ListOrdered, { className: "h-4 w-4" }),
184
+ "Numbered list"
185
+ ),
186
+ tablesEnabled && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
187
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { orientation: "vertical", className: "mx-0.5 h-6" }),
188
+ !inTable ? fmtBtn(
189
+ false,
190
+ () => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run(),
191
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Table, { className: "h-4 w-4" }),
192
+ "Insert table"
193
+ ) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
194
+ fmtBtn(
195
+ false,
196
+ () => editor.chain().focus().addRowAfter().run(),
197
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Rows2, { className: "h-4 w-4" }),
198
+ "Add row below"
199
+ ),
200
+ fmtBtn(
201
+ false,
202
+ () => editor.chain().focus().addColumnAfter().run(),
203
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Columns2, { className: "h-4 w-4" }),
204
+ "Add column right"
205
+ ),
206
+ fmtBtn(
207
+ false,
208
+ () => editor.chain().focus().deleteRow().run(),
209
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TableRowsSplit, { className: "h-4 w-4" }),
210
+ "Delete row"
211
+ ),
212
+ fmtBtn(
213
+ false,
214
+ () => editor.chain().focus().deleteColumn().run(),
215
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TableColumnsSplit, { className: "h-4 w-4" }),
216
+ "Delete column"
217
+ ),
218
+ fmtBtn(
219
+ false,
220
+ () => editor.chain().focus().deleteTable().run(),
221
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Trash2, { className: "h-4 w-4" }),
222
+ "Delete table"
223
+ )
224
+ ] })
225
+ ] }),
226
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { orientation: "vertical", className: "mx-0.5 h-6" }),
227
+ /* @__PURE__ */ jsxRuntime.jsx(
228
+ chunkO3VQBPEW_cjs.Button,
229
+ {
230
+ type: "button",
231
+ variant: "outline",
232
+ size: "icon",
233
+ className: "h-8 w-8 shrink-0",
234
+ disabled: disabled || !editor.can().undo(),
235
+ title: "Undo",
236
+ onClick: () => editor.chain().focus().undo().run(),
237
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Undo, { className: "h-4 w-4" })
238
+ }
239
+ ),
240
+ /* @__PURE__ */ jsxRuntime.jsx(
241
+ chunkO3VQBPEW_cjs.Button,
242
+ {
243
+ type: "button",
244
+ variant: "outline",
245
+ size: "icon",
246
+ className: "h-8 w-8 shrink-0",
247
+ disabled: disabled || !editor.can().redo(),
248
+ title: "Redo",
249
+ onClick: () => editor.chain().focus().redo().run(),
250
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Redo, { className: "h-4 w-4" })
251
+ }
252
+ )
253
+ ]
254
+ }
255
+ );
256
+ }
257
+ var RichTextWidget = ({ fieldId }) => {
258
+ const { fieldDef, value, setValue, setTouched, error, disabled, touched } = chunkSHQHDSA4_cjs.useField(fieldId);
259
+ const { state } = chunk6YX37XBM_cjs.useForm();
260
+ const store = chunkSHQHDSA4_cjs.useFormStore();
261
+ const hasVoice = !!(fieldDef?.voice && store.getVoice());
262
+ const showError = !!error && (touched || state.submitAttempted);
263
+ const def = fieldDef;
264
+ const placeholder = def?.placeholder ?? "Start typing\u2026";
265
+ const minHeight = def?.minHeight ?? 160;
266
+ const tablesEnabled = !!def?.tables;
267
+ const extensions = React.useMemo(
268
+ () => buildRichTextExtensions(placeholder, tablesEnabled),
269
+ [placeholder, tablesEnabled]
270
+ );
271
+ const stringValue = typeof value === "string" ? value : "";
272
+ const editor = react.useEditor(
273
+ {
274
+ extensions,
275
+ content: stringValue || "",
276
+ editable: !disabled,
277
+ immediatelyRender: false,
278
+ onUpdate: ({ editor: ed }) => {
279
+ const html = ed.getHTML();
280
+ setValue(isEmptyHtml(html) ? "" : html);
281
+ },
282
+ onBlur: () => setTouched(),
283
+ editorProps: {
284
+ attributes: {
285
+ id: fieldId,
286
+ class: "tiptap focus:outline-none",
287
+ style: `min-height: ${minHeight}px`
288
+ }
289
+ }
290
+ },
291
+ [extensions, fieldId]
292
+ );
293
+ React.useEffect(() => {
294
+ if (!editor || editor.isDestroyed) return;
295
+ editor.setEditable(!disabled);
296
+ }, [editor, disabled]);
297
+ React.useEffect(() => {
298
+ if (!editor || editor.isDestroyed) return;
299
+ const el = editor.view.dom;
300
+ el.style.minHeight = `${minHeight}px`;
301
+ }, [editor, minHeight]);
302
+ React.useEffect(() => {
303
+ if (!editor || editor.isDestroyed) return;
304
+ const el = editor.view.dom;
305
+ const handler = (e) => {
306
+ const { text } = e.detail;
307
+ if (!text) return;
308
+ const currentText = editor.getText();
309
+ const prefix = currentText.length > 0 && !/\s$/.test(currentText) ? " " : "";
310
+ editor.chain().focus().insertContent(prefix + text).run();
311
+ };
312
+ el.addEventListener("insertTranscript", handler);
313
+ return () => el.removeEventListener("insertTranscript", handler);
314
+ }, [editor]);
315
+ React.useEffect(() => {
316
+ if (!editor || editor.isDestroyed) return;
317
+ const fromForm = stringValue;
318
+ const fromEditor = editor.getHTML();
319
+ if (isEmptyHtml(fromForm) && isEmptyHtml(fromEditor)) return;
320
+ if (fromForm && fromForm !== fromEditor) {
321
+ editor.commands.setContent(fromForm, { emitUpdate: false });
322
+ }
323
+ if (!fromForm && !isEmptyHtml(fromEditor)) {
324
+ editor.commands.setContent("", { emitUpdate: false });
325
+ }
326
+ }, [stringValue, editor]);
327
+ if (!fieldDef) return null;
328
+ const showLabel = chunk5E3APMY6_cjs.isLabelVisible(fieldDef);
329
+ const labelContent = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
330
+ fieldDef.label,
331
+ " ",
332
+ /* @__PURE__ */ jsxRuntime.jsx(chunk5E3APMY6_cjs.FieldRequiredIndicator, { fieldDef })
333
+ ] });
334
+ const labelEl = /* @__PURE__ */ jsxRuntime.jsx(chunkJMGUUFOJ_cjs.Label, { htmlFor: fieldId, className: chunk5E3APMY6_cjs.fieldLabelClass(fieldDef), children: labelContent });
335
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunk5E3APMY6_cjs.fieldWrapperClass(fieldDef, "space-y-2"), children: [
336
+ hasVoice ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
337
+ showLabel ? labelEl : null,
338
+ /* @__PURE__ */ jsxRuntime.jsx(chunkBOBX45NY_cjs.VoiceMicButton, { fieldId, onTranscriptReady: setValue })
339
+ ] }) : showLabel ? labelEl : null,
340
+ /* @__PURE__ */ jsxRuntime.jsxs(
341
+ "div",
342
+ {
343
+ className: chunk5E3APMY6_cjs.fieldControlClass(
344
+ fieldDef,
345
+ chunkFHHISVCH_cjs.cn(
346
+ "rounded-md border border-input bg-background text-sm ring-offset-background overflow-hidden",
347
+ showError && "border-red-500",
348
+ disabled && "opacity-60"
349
+ )
350
+ ),
351
+ children: [
352
+ /* @__PURE__ */ jsxRuntime.jsx(
353
+ RichTextToolbar,
354
+ {
355
+ editor,
356
+ disabled,
357
+ tablesEnabled
358
+ }
359
+ ),
360
+ /* @__PURE__ */ jsxRuntime.jsx(
361
+ "div",
362
+ {
363
+ className: chunkFHHISVCH_cjs.cn(
364
+ "px-3 py-2",
365
+ "[&_.ProseMirror]:outline-none",
366
+ "[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-6 [&_.ProseMirror_ul]:my-2",
367
+ "[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-6 [&_.ProseMirror_ol]:my-2",
368
+ "[&_.ProseMirror_li]:list-item",
369
+ "[&_.ProseMirror_blockquote]:border-l-4 [&_.ProseMirror_blockquote]:border-muted-foreground/40 [&_.ProseMirror_blockquote]:pl-3 [&_.ProseMirror_blockquote]:italic [&_.ProseMirror_blockquote]:my-2",
370
+ "[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground",
371
+ "[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]",
372
+ "[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left",
373
+ "[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none",
374
+ "[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0"
375
+ ),
376
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.EditorContent, { editor })
377
+ }
378
+ )
379
+ ]
380
+ }
381
+ ),
382
+ showError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: chunk5E3APMY6_cjs.fieldErrorClass(fieldDef, "text-xs text-red-500"), children: error })
383
+ ] });
384
+ };
385
+
386
+ exports.RichTextWidget = RichTextWidget;
387
+ //# sourceMappingURL=chunk-L4CIIT4U.cjs.map
388
+ //# sourceMappingURL=chunk-L4CIIT4U.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/shadcn/separator.tsx","../src/ui/widgets/RichTextWidget.tsx"],"names":["React","jsx","SeparatorPrimitive","cn","StarterKit","Underline","Placeholder","Table","TableRow","TableHeader","TableCell","useReducer","useEffect","Button","jsxs","Bold","Italic","UnderlineIcon","Strikethrough","List","ListOrdered","Fragment","TableIcon","Rows2","Columns2","TableRowsSplit","TableColumnsSplit","Trash2","Undo","Redo","useField","useForm","useFormStore","useMemo","useEditor","isLabelVisible","FieldRequiredIndicator","Label","fieldLabelClass","fieldWrapperClass","VoiceMicButton","fieldControlClass","EditorContent","fieldErrorClass"],"mappings":"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","file":"chunk-L4CIIT4U.cjs","sourcesContent":["import * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { cn } from \"../../core/utils\"\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(\n (\n { className, orientation = \"horizontal\", decorative = true, ...props },\n ref\n ) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-border\",\n orientation === \"horizontal\" ? \"h-[1px] w-full\" : \"h-full w-[1px]\",\n className\n )}\n {...props}\n />\n )\n)\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n\n","import React, { useEffect, useMemo, useReducer } from 'react';\nimport { EditorContent, useEditor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport Underline from '@tiptap/extension-underline';\nimport { Table, TableRow, TableHeader, TableCell } from '@tiptap/extension-table';\nimport type { Extensions } from '@tiptap/core';\nimport {\n Bold,\n Italic,\n Underline as UnderlineIcon,\n Strikethrough,\n List,\n ListOrdered,\n Undo,\n Redo,\n Table as TableIcon,\n Rows2,\n Columns2,\n TableRowsSplit,\n TableColumnsSplit,\n Trash2,\n} from 'lucide-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 { Button } from '../shadcn/button';\nimport { Separator } from '../shadcn/separator';\nimport { cn } from '../../core/utils';\nimport type { Editor } from '@tiptap/core';\nimport type { RichTextFieldDef } from '../../core/types';\nimport {\n FieldRequiredIndicator,\n fieldControlClass,\n fieldErrorClass,\n fieldLabelClass,\n fieldWrapperClass,\n isLabelVisible,\n} from '../../react/fieldStyle';\n\nfunction isEmptyHtml(html: string): boolean {\n const t = html.trim();\n return (\n t === '' ||\n t === '<p></p>' ||\n t === '<p><br></p>' ||\n t === '<p><br class=\"ProseMirror-trailingBreak\"></p>'\n );\n}\n\nfunction buildRichTextExtensions(placeholder: string, tables: boolean): Extensions {\n const base: Extensions = [\n StarterKit.configure({\n // Disable headings entirely so the UI/content can't introduce H2/H3.\n heading: false,\n bulletList: {\n HTMLAttributes: {\n class: 'list-disc pl-6 my-2',\n },\n },\n orderedList: {\n HTMLAttributes: {\n class: 'list-decimal pl-6 my-2',\n },\n },\n listItem: {\n HTMLAttributes: {\n class: 'my-1',\n },\n },\n }),\n Underline,\n Placeholder.configure({\n placeholder,\n }),\n ];\n\n if (!tables) return base;\n\n return [\n ...base,\n Table.configure({\n resizable: true,\n /** Wider hit zone along column borders (default 5px). */\n handleWidth: 8,\n cellMinWidth: 50,\n }),\n TableRow,\n TableHeader,\n TableCell,\n ];\n}\n\nfunction RichTextToolbar({\n editor,\n disabled,\n tablesEnabled,\n}: {\n editor: Editor | null;\n disabled: boolean;\n tablesEnabled: boolean;\n}) {\n const [, rerender] = useReducer((n: number) => n + 1, 0);\n\n useEffect(() => {\n if (!editor) return;\n const handler = () => rerender();\n editor.on('selectionUpdate', handler);\n editor.on('transaction', handler);\n return () => {\n editor.off('selectionUpdate', handler);\n editor.off('transaction', handler);\n };\n }, [editor]);\n\n if (!editor) {\n return (\n <div className=\"flex flex-wrap gap-1 border-b border-input bg-muted/30 px-2 py-1.5 min-h-[42px]\" />\n );\n }\n\n const fmtBtn = (active: boolean, onClick: () => void, icon: React.ReactNode, title: string) => (\n <Button\n type=\"button\"\n variant={active ? 'secondary' : 'outline'}\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled}\n title={title}\n onClick={() => {\n if (!disabled) onClick();\n }}\n >\n {icon}\n </Button>\n );\n\n const inTable = tablesEnabled && editor.isActive('table');\n\n return (\n <div\n className=\"flex flex-wrap items-center gap-1 border-b border-input bg-muted/30 px-2 py-1.5\"\n role=\"toolbar\"\n aria-label=\"Rich text formatting\"\n >\n {fmtBtn(\n editor.isActive('bold'),\n () => editor.chain().focus().toggleBold().run(),\n <Bold className=\"h-4 w-4\" />,\n 'Bold',\n )}\n {fmtBtn(\n editor.isActive('italic'),\n () => editor.chain().focus().toggleItalic().run(),\n <Italic className=\"h-4 w-4\" />,\n 'Italic',\n )}\n {fmtBtn(\n editor.isActive('underline'),\n () => editor.chain().focus().toggleUnderline().run(),\n <UnderlineIcon className=\"h-4 w-4\" />,\n 'Underline',\n )}\n {fmtBtn(\n editor.isActive('strike'),\n () => editor.chain().focus().toggleStrike().run(),\n <Strikethrough className=\"h-4 w-4\" />,\n 'Strikethrough',\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n {fmtBtn(\n editor.isActive('bulletList'),\n () => editor.chain().focus().toggleBulletList().run(),\n <List className=\"h-4 w-4\" />,\n 'Bullet list',\n )}\n {fmtBtn(\n editor.isActive('orderedList'),\n () => editor.chain().focus().toggleOrderedList().run(),\n <ListOrdered className=\"h-4 w-4\" />,\n 'Numbered list',\n )}\n\n {tablesEnabled && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n {!inTable ? (\n fmtBtn(\n false,\n () =>\n editor\n .chain()\n .focus()\n .insertTable({ rows: 3, cols: 3, withHeaderRow: true })\n .run(),\n <TableIcon className=\"h-4 w-4\" />,\n 'Insert table',\n )\n ) : (\n <>\n {fmtBtn(\n false,\n () => editor.chain().focus().addRowAfter().run(),\n <Rows2 className=\"h-4 w-4\" />,\n 'Add row below',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().addColumnAfter().run(),\n <Columns2 className=\"h-4 w-4\" />,\n 'Add column right',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteRow().run(),\n <TableRowsSplit className=\"h-4 w-4\" />,\n 'Delete row',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteColumn().run(),\n <TableColumnsSplit className=\"h-4 w-4\" />,\n 'Delete column',\n )}\n {fmtBtn(\n false,\n () => editor.chain().focus().deleteTable().run(),\n <Trash2 className=\"h-4 w-4\" />,\n 'Delete table',\n )}\n </>\n )}\n </>\n )}\n\n <Separator orientation=\"vertical\" className=\"mx-0.5 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().undo()}\n title=\"Undo\"\n onClick={() => editor.chain().focus().undo().run()}\n >\n <Undo className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n className=\"h-8 w-8 shrink-0\"\n disabled={disabled || !editor.can().redo()}\n title=\"Redo\"\n onClick={() => editor.chain().focus().redo().run()}\n >\n <Redo className=\"h-4 w-4\" />\n </Button>\n </div>\n );\n}\n\nexport const RichTextWidget: 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 const showError = !!error && (touched || state.submitAttempted);\n\n const def = fieldDef as RichTextFieldDef | undefined;\n const placeholder = def?.placeholder ?? 'Start typing…';\n const minHeight = def?.minHeight ?? 160;\n const tablesEnabled = !!def?.tables;\n\n const extensions = useMemo(\n () => buildRichTextExtensions(placeholder, tablesEnabled),\n [placeholder, tablesEnabled],\n );\n\n const stringValue = typeof value === 'string' ? value : '';\n\n const editor = useEditor(\n {\n extensions,\n content: stringValue || '',\n editable: !disabled,\n immediatelyRender: false,\n onUpdate: ({ editor: ed }) => {\n const html = ed.getHTML();\n setValue(isEmptyHtml(html) ? '' : html);\n },\n onBlur: () => setTouched(),\n editorProps: {\n attributes: {\n id: fieldId,\n class: 'tiptap focus:outline-none',\n style: `min-height: ${minHeight}px`,\n },\n },\n },\n [extensions, fieldId],\n );\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n editor.setEditable(!disabled);\n }, [editor, disabled]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n el.style.minHeight = `${minHeight}px`;\n }, [editor, minHeight]);\n\n // Listen for a custom 'insertTranscript' event dispatched by external hooks\n // (e.g. voice recording) so the widget controls its own insertion logic.\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const el = editor.view.dom as HTMLElement;\n const handler = (e: Event) => {\n const { text } = (e as CustomEvent<{ text: string }>).detail;\n if (!text) return;\n const currentText = editor.getText();\n const prefix = currentText.length > 0 && !/\\s$/.test(currentText) ? ' ' : '';\n editor.chain().focus().insertContent(prefix + text).run();\n };\n el.addEventListener('insertTranscript', handler);\n return () => el.removeEventListener('insertTranscript', handler);\n }, [editor]);\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const fromForm = stringValue;\n const fromEditor = editor.getHTML();\n if (isEmptyHtml(fromForm) && isEmptyHtml(fromEditor)) return;\n if (fromForm && fromForm !== fromEditor) {\n editor.commands.setContent(fromForm, { emitUpdate: false });\n }\n if (!fromForm && !isEmptyHtml(fromEditor)) {\n editor.commands.setContent('', { emitUpdate: false });\n }\n }, [stringValue, editor]);\n\n if (!fieldDef) return null;\n\n const showLabel = isLabelVisible(fieldDef);\n\n const labelContent = (\n <>\n {fieldDef.label}{' '}\n <FieldRequiredIndicator fieldDef={fieldDef} />\n </>\n );\n\n const labelEl = (\n <Label htmlFor={fieldId} className={fieldLabelClass(fieldDef)}>\n {labelContent}\n </Label>\n );\n\n return (\n <div className={fieldWrapperClass(fieldDef, 'space-y-2')}>\n {hasVoice ? (\n <div className=\"flex items-center justify-between\">\n {showLabel ? labelEl : null}\n <VoiceMicButton fieldId={fieldId} onTranscriptReady={setValue} />\n </div>\n ) : showLabel ? (\n labelEl\n ) : null}\n <div\n className={fieldControlClass(\n fieldDef,\n cn(\n 'rounded-md border border-input bg-background text-sm ring-offset-background overflow-hidden',\n showError && 'border-red-500',\n disabled && 'opacity-60',\n ),\n )}\n >\n <RichTextToolbar\n editor={editor}\n disabled={disabled}\n tablesEnabled={tablesEnabled}\n />\n <div\n className={cn(\n 'px-3 py-2',\n '[&_.ProseMirror]:outline-none',\n '[&_.ProseMirror_ul]:list-disc [&_.ProseMirror_ul]:pl-6 [&_.ProseMirror_ul]:my-2',\n '[&_.ProseMirror_ol]:list-decimal [&_.ProseMirror_ol]:pl-6 [&_.ProseMirror_ol]:my-2',\n '[&_.ProseMirror_li]:list-item',\n '[&_.ProseMirror_blockquote]:border-l-4 [&_.ProseMirror_blockquote]:border-muted-foreground/40 [&_.ProseMirror_blockquote]:pl-3 [&_.ProseMirror_blockquote]:italic [&_.ProseMirror_blockquote]:my-2',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:text-muted-foreground',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:content-[attr(data-placeholder)]',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:float-left',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:pointer-events-none',\n '[&_.ProseMirror_p.is-editor-empty:first-child::before]:h-0',\n )}\n >\n <EditorContent editor={editor} />\n </div>\n </div>\n {showError && (\n <p className={fieldErrorClass(fieldDef, 'text-xs text-red-500')}>{error}</p>\n )}\n </div>\n );\n};\n\n// Re-exported from a lightweight module so read-only consumers can use it\n// without pulling in the TipTap/ProseMirror editor.\nexport { richTextHtmlClassName } from './richTextClassName';\n"]}