@mieweb/ui 0.10.0-dev.9 → 0.11.0-dev.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 (807) hide show
  1. package/README.md +4 -4
  2. package/agent/mieweb-ui.instructions.md +77 -0
  3. package/dist/CsvBlock-CFXSDPBI.js +9 -0
  4. package/dist/{CsvBlock-UWPMTLE2.js.map → CsvBlock-CFXSDPBI.js.map} +1 -1
  5. package/dist/CsvBlock-RGO7JXHJ.cjs +18 -0
  6. package/dist/{CsvBlock-ROJCKJDP.cjs.map → CsvBlock-RGO7JXHJ.cjs.map} +1 -1
  7. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +18 -0
  8. package/dist/{HtmlPreviewBlock-DWFN6EUB.cjs.map → HtmlPreviewBlock-VBYXCXVT.cjs.map} +1 -1
  9. package/dist/HtmlPreviewBlock-Z2GCK325.js +9 -0
  10. package/dist/{HtmlPreviewBlock-ME5U3XNS.js.map → HtmlPreviewBlock-Z2GCK325.js.map} +1 -1
  11. package/dist/MermaidBlock-I2R2BQOX.cjs +18 -0
  12. package/dist/{MermaidBlock-D2UC5M55.cjs.map → MermaidBlock-I2R2BQOX.cjs.map} +1 -1
  13. package/dist/MermaidBlock-XCAK7IA5.js +9 -0
  14. package/dist/{MermaidBlock-2B6CPD6Y.js.map → MermaidBlock-XCAK7IA5.js.map} +1 -1
  15. package/dist/SurveyBlock-KI5JOWCL.js +9 -0
  16. package/dist/{SurveyBlock-4DO62RBT.js.map → SurveyBlock-KI5JOWCL.js.map} +1 -1
  17. package/dist/SurveyBlock-UKSGISRT.cjs +18 -0
  18. package/dist/{SurveyBlock-4CD4AYMJ.cjs.map → SurveyBlock-UKSGISRT.cjs.map} +1 -1
  19. package/dist/ag-grid.d.cts +142 -1
  20. package/dist/ag-grid.d.ts +142 -1
  21. package/dist/brands/bluehive.cjs +3 -3
  22. package/dist/brands/bluehive.css +3 -0
  23. package/dist/brands/bluehive.js +1 -1
  24. package/dist/brands/index.cjs +17 -17
  25. package/dist/brands/index.js +4 -4
  26. package/dist/{chunk-JYZW2PZS.cjs → chunk-254QK722.cjs} +7 -7
  27. package/dist/chunk-254QK722.cjs.map +1 -0
  28. package/dist/{chunk-4IS3QCOQ.cjs → chunk-2FZYZ4HT.cjs} +4 -3
  29. package/dist/chunk-2FZYZ4HT.cjs.map +1 -0
  30. package/dist/{chunk-VPIYTQCV.cjs → chunk-2I4IRQQG.cjs} +12 -5
  31. package/dist/chunk-2I4IRQQG.cjs.map +1 -0
  32. package/dist/{chunk-IT775BYG.js → chunk-2W73UQ3T.js} +4 -3
  33. package/dist/chunk-2W73UQ3T.js.map +1 -0
  34. package/dist/chunk-2X54ZLT6.js +874 -0
  35. package/dist/chunk-2X54ZLT6.js.map +1 -0
  36. package/dist/{chunk-5MCBWTIF.cjs → chunk-32ZCJOSR.cjs} +4 -4
  37. package/dist/{chunk-5MCBWTIF.cjs.map → chunk-32ZCJOSR.cjs.map} +1 -1
  38. package/dist/{chunk-WNJRS7Y7.cjs → chunk-3ZWCIPFT.cjs} +4 -2
  39. package/dist/chunk-3ZWCIPFT.cjs.map +1 -0
  40. package/dist/chunk-434L5RYF.js +314 -0
  41. package/dist/chunk-434L5RYF.js.map +1 -0
  42. package/dist/{chunk-TPWKM7JH.js → chunk-43K7OQ3E.js} +3 -3
  43. package/dist/{chunk-TPWKM7JH.js.map → chunk-43K7OQ3E.js.map} +1 -1
  44. package/dist/chunk-47P5QLX4.cjs +42 -0
  45. package/dist/chunk-47P5QLX4.cjs.map +1 -0
  46. package/dist/{chunk-CR2SDI23.cjs → chunk-4QYYWYFD.cjs} +8 -7
  47. package/dist/chunk-4QYYWYFD.cjs.map +1 -0
  48. package/dist/{chunk-76TBQDED.js → chunk-4RI3CQGE.js} +6 -6
  49. package/dist/{chunk-76TBQDED.js.map → chunk-4RI3CQGE.js.map} +1 -1
  50. package/dist/chunk-4ZB7RSMY.cjs +306 -0
  51. package/dist/chunk-4ZB7RSMY.cjs.map +1 -0
  52. package/dist/chunk-522WJIVI.js +99 -0
  53. package/dist/chunk-522WJIVI.js.map +1 -0
  54. package/dist/chunk-56VTM4OX.js +261 -0
  55. package/dist/chunk-56VTM4OX.js.map +1 -0
  56. package/dist/chunk-5HKZR6UG.js +248 -0
  57. package/dist/chunk-5HKZR6UG.js.map +1 -0
  58. package/dist/chunk-6BNZLN4B.cjs +548 -0
  59. package/dist/chunk-6BNZLN4B.cjs.map +1 -0
  60. package/dist/chunk-6N7NMOSV.js +233 -0
  61. package/dist/chunk-6N7NMOSV.js.map +1 -0
  62. package/dist/chunk-6TTCZY3P.cjs +4 -0
  63. package/dist/chunk-6TTCZY3P.cjs.map +1 -0
  64. package/dist/{chunk-YQDA366U.js → chunk-753ENNB6.js} +2 -2
  65. package/dist/{chunk-YQDA366U.js.map → chunk-753ENNB6.js.map} +1 -1
  66. package/dist/{chunk-N6IY47YA.cjs → chunk-7C5W744U.cjs} +8 -8
  67. package/dist/{chunk-N6IY47YA.cjs.map → chunk-7C5W744U.cjs.map} +1 -1
  68. package/dist/chunk-7E46YDOT.cjs +122 -0
  69. package/dist/chunk-7E46YDOT.cjs.map +1 -0
  70. package/dist/chunk-7HUTR6RX.js +178 -0
  71. package/dist/chunk-7HUTR6RX.js.map +1 -0
  72. package/dist/chunk-7IRTD4JT.cjs +61 -0
  73. package/dist/chunk-7IRTD4JT.cjs.map +1 -0
  74. package/dist/{chunk-KZFBQ7GY.js → chunk-7QW6TU4X.js} +3 -3
  75. package/dist/{chunk-KZFBQ7GY.js.map → chunk-7QW6TU4X.js.map} +1 -1
  76. package/dist/{chunk-MWVW4APN.cjs → chunk-7UTBDFFL.cjs} +4 -4
  77. package/dist/{chunk-MWVW4APN.cjs.map → chunk-7UTBDFFL.cjs.map} +1 -1
  78. package/dist/chunk-7WJ6MBF5.cjs +47 -0
  79. package/dist/chunk-7WJ6MBF5.cjs.map +1 -0
  80. package/dist/{chunk-FJ7YPVKV.js → chunk-7X6R3JIA.js} +3 -3
  81. package/dist/{chunk-FJ7YPVKV.js.map → chunk-7X6R3JIA.js.map} +1 -1
  82. package/dist/chunk-A4W5CSK7.cjs +216 -0
  83. package/dist/chunk-A4W5CSK7.cjs.map +1 -0
  84. package/dist/{chunk-2G75X6TS.cjs → chunk-AHHFFXJR.cjs} +3 -3
  85. package/dist/{chunk-2G75X6TS.cjs.map → chunk-AHHFFXJR.cjs.map} +1 -1
  86. package/dist/chunk-AJPFQF3H.cjs +896 -0
  87. package/dist/chunk-AJPFQF3H.cjs.map +1 -0
  88. package/dist/chunk-AMYFRY7K.js +3 -0
  89. package/dist/chunk-AMYFRY7K.js.map +1 -0
  90. package/dist/{chunk-VNYW4C4J.cjs → chunk-ANMX7YDL.cjs} +4 -84
  91. package/dist/chunk-ANMX7YDL.cjs.map +1 -0
  92. package/dist/chunk-ARIJ5OHW.cjs +139 -0
  93. package/dist/chunk-ARIJ5OHW.cjs.map +1 -0
  94. package/dist/{chunk-GD7EBGC4.cjs → chunk-ATRW3J5Z.cjs} +49 -19
  95. package/dist/chunk-ATRW3J5Z.cjs.map +1 -0
  96. package/dist/chunk-BJ6ABRSQ.cjs +256 -0
  97. package/dist/chunk-BJ6ABRSQ.cjs.map +1 -0
  98. package/dist/{chunk-G3JX3UAU.cjs → chunk-BWSZ2BHJ.cjs} +6 -6
  99. package/dist/{chunk-G3JX3UAU.cjs.map → chunk-BWSZ2BHJ.cjs.map} +1 -1
  100. package/dist/chunk-BXRQ6HEP.cjs +4 -0
  101. package/dist/chunk-BXRQ6HEP.cjs.map +1 -0
  102. package/dist/chunk-CBBKWRLG.js +213 -0
  103. package/dist/chunk-CBBKWRLG.js.map +1 -0
  104. package/dist/{chunk-UAMXCMST.cjs → chunk-CFI3TQMA.cjs} +3 -3
  105. package/dist/{chunk-UAMXCMST.cjs.map → chunk-CFI3TQMA.cjs.map} +1 -1
  106. package/dist/chunk-CLQW724U.cjs +271 -0
  107. package/dist/chunk-CLQW724U.cjs.map +1 -0
  108. package/dist/chunk-CPDNX3LS.cjs +47 -0
  109. package/dist/chunk-CPDNX3LS.cjs.map +1 -0
  110. package/dist/chunk-CVNPNZMX.js +44 -0
  111. package/dist/chunk-CVNPNZMX.js.map +1 -0
  112. package/dist/chunk-DGHS5IVD.js +305 -0
  113. package/dist/chunk-DGHS5IVD.js.map +1 -0
  114. package/dist/chunk-DHGCLPFZ.js +91 -0
  115. package/dist/chunk-DHGCLPFZ.js.map +1 -0
  116. package/dist/chunk-DO2YN46R.cjs +201 -0
  117. package/dist/chunk-DO2YN46R.cjs.map +1 -0
  118. package/dist/chunk-DVDT7TX7.js +151 -0
  119. package/dist/chunk-DVDT7TX7.js.map +1 -0
  120. package/dist/chunk-DXEPYK3I.cjs +92 -0
  121. package/dist/chunk-DXEPYK3I.cjs.map +1 -0
  122. package/dist/chunk-DXFP53KF.js +283 -0
  123. package/dist/chunk-DXFP53KF.js.map +1 -0
  124. package/dist/chunk-EACNRR3C.cjs +4 -0
  125. package/dist/chunk-EACNRR3C.cjs.map +1 -0
  126. package/dist/{chunk-TVTIGV7Q.js → chunk-EBKE4DLU.js} +18 -11
  127. package/dist/chunk-EBKE4DLU.js.map +1 -0
  128. package/dist/{chunk-ASSDGS4F.cjs → chunk-ECYIDXG6.cjs} +254 -4
  129. package/dist/chunk-ECYIDXG6.cjs.map +1 -0
  130. package/dist/chunk-EGPDT7SM.js +195 -0
  131. package/dist/chunk-EGPDT7SM.js.map +1 -0
  132. package/dist/chunk-EPCUPHEO.js +193 -0
  133. package/dist/chunk-EPCUPHEO.js.map +1 -0
  134. package/dist/{chunk-7ZXAQTV4.cjs → chunk-ERACGSDY.cjs} +8 -8
  135. package/dist/{chunk-7ZXAQTV4.cjs.map → chunk-ERACGSDY.cjs.map} +1 -1
  136. package/dist/{chunk-XCP454Q6.js → chunk-F4N67NAF.js} +12 -3
  137. package/dist/chunk-F4N67NAF.js.map +1 -0
  138. package/dist/{chunk-WGPLUCBD.js → chunk-F6W62K4J.js} +4 -4
  139. package/dist/{chunk-WGPLUCBD.js.map → chunk-F6W62K4J.js.map} +1 -1
  140. package/dist/{chunk-XVW5DPPP.js → chunk-F7SZSOB3.js} +4 -3
  141. package/dist/chunk-F7SZSOB3.js.map +1 -0
  142. package/dist/chunk-FBCDYTWM.js +385 -0
  143. package/dist/chunk-FBCDYTWM.js.map +1 -0
  144. package/dist/{chunk-KQUI4BGS.cjs → chunk-FBN2VHUV.cjs} +68 -61
  145. package/dist/chunk-FBN2VHUV.cjs.map +1 -0
  146. package/dist/{chunk-V7D3YGUV.js → chunk-FGLIP6YR.js} +4 -4
  147. package/dist/{chunk-V7D3YGUV.js.map → chunk-FGLIP6YR.js.map} +1 -1
  148. package/dist/{chunk-VU6UTJRM.js → chunk-FIKO4WR6.js} +3 -3
  149. package/dist/{chunk-VU6UTJRM.js.map → chunk-FIKO4WR6.js.map} +1 -1
  150. package/dist/{chunk-OD47TTAW.cjs → chunk-FMEA6WAY.cjs} +9 -9
  151. package/dist/{chunk-OD47TTAW.cjs.map → chunk-FMEA6WAY.cjs.map} +1 -1
  152. package/dist/chunk-FSGJXCBG.cjs +318 -0
  153. package/dist/chunk-FSGJXCBG.cjs.map +1 -0
  154. package/dist/chunk-FSWHZY3T.cjs +328 -0
  155. package/dist/chunk-FSWHZY3T.cjs.map +1 -0
  156. package/dist/chunk-FTEZNCRI.js +29 -0
  157. package/dist/chunk-FTEZNCRI.js.map +1 -0
  158. package/dist/{chunk-YVPC65ZJ.cjs → chunk-GF2BE4FB.cjs} +91 -32
  159. package/dist/chunk-GF2BE4FB.cjs.map +1 -0
  160. package/dist/{chunk-JEIW7BSV.cjs → chunk-GKDHMNUA.cjs} +2 -52
  161. package/dist/chunk-GKDHMNUA.cjs.map +1 -0
  162. package/dist/{chunk-URAQIF67.cjs → chunk-GM32IDVL.cjs} +6 -6
  163. package/dist/{chunk-URAQIF67.cjs.map → chunk-GM32IDVL.cjs.map} +1 -1
  164. package/dist/chunk-GVM6DTR5.js +90 -0
  165. package/dist/chunk-GVM6DTR5.js.map +1 -0
  166. package/dist/{chunk-SQHMGT4W.js → chunk-GW4RFJZ5.js} +7 -7
  167. package/dist/chunk-GW4RFJZ5.js.map +1 -0
  168. package/dist/chunk-GY5SP4ST.js +3 -0
  169. package/dist/chunk-GY5SP4ST.js.map +1 -0
  170. package/dist/{chunk-OCSCBB52.cjs → chunk-GYXSF6BJ.cjs} +10 -10
  171. package/dist/{chunk-OCSCBB52.cjs.map → chunk-GYXSF6BJ.cjs.map} +1 -1
  172. package/dist/chunk-H2Y7HZV5.js +3 -0
  173. package/dist/chunk-H2Y7HZV5.js.map +1 -0
  174. package/dist/chunk-H3P7POFC.cjs +337 -0
  175. package/dist/chunk-H3P7POFC.cjs.map +1 -0
  176. package/dist/{chunk-JID7AZTO.cjs → chunk-H3ROMJYI.cjs} +4 -4
  177. package/dist/{chunk-JID7AZTO.cjs.map → chunk-H3ROMJYI.cjs.map} +1 -1
  178. package/dist/{chunk-462XSCP3.cjs → chunk-HCIXGFWR.cjs} +4 -4
  179. package/dist/{chunk-462XSCP3.cjs.map → chunk-HCIXGFWR.cjs.map} +1 -1
  180. package/dist/{chunk-H4ZXMQQW.js → chunk-HDY7YQFX.js} +3 -3
  181. package/dist/{chunk-H4ZXMQQW.js.map → chunk-HDY7YQFX.js.map} +1 -1
  182. package/dist/chunk-HNFFFFYH.cjs +114 -0
  183. package/dist/chunk-HNFFFFYH.cjs.map +1 -0
  184. package/dist/chunk-HNXLLDPN.js +25 -0
  185. package/dist/chunk-HNXLLDPN.js.map +1 -0
  186. package/dist/{chunk-NV2CWBI2.cjs → chunk-IEY3ZJIT.cjs} +12 -3
  187. package/dist/chunk-IEY3ZJIT.cjs.map +1 -0
  188. package/dist/chunk-IEZXJWHJ.cjs +306 -0
  189. package/dist/chunk-IEZXJWHJ.cjs.map +1 -0
  190. package/dist/{chunk-3QEVGSFG.cjs → chunk-IGDO62KR.cjs} +5 -5
  191. package/dist/{chunk-3QEVGSFG.cjs.map → chunk-IGDO62KR.cjs.map} +1 -1
  192. package/dist/{chunk-N5O47VGS.cjs → chunk-IVGI353O.cjs} +2 -2
  193. package/dist/{chunk-N5O47VGS.cjs.map → chunk-IVGI353O.cjs.map} +1 -1
  194. package/dist/chunk-IWRBJHO3.cjs +51 -0
  195. package/dist/chunk-IWRBJHO3.cjs.map +1 -0
  196. package/dist/{chunk-2IZLKPUW.js → chunk-J2CKXXOW.js} +27 -6
  197. package/dist/chunk-J2CKXXOW.js.map +1 -0
  198. package/dist/{chunk-VILW53UZ.js → chunk-JMAZ2GKT.js} +3 -3
  199. package/dist/{chunk-VILW53UZ.js.map → chunk-JMAZ2GKT.js.map} +1 -1
  200. package/dist/{chunk-WWJIW2IH.cjs → chunk-JSXIB6EJ.cjs} +4 -4
  201. package/dist/{chunk-WWJIW2IH.cjs.map → chunk-JSXIB6EJ.cjs.map} +1 -1
  202. package/dist/{chunk-KRU6IGV7.js → chunk-JUJGWUAN.js} +28 -6
  203. package/dist/chunk-JUJGWUAN.js.map +1 -0
  204. package/dist/{chunk-FXO5ARBB.cjs → chunk-KDW6BD4O.cjs} +4 -4
  205. package/dist/{chunk-FXO5ARBB.cjs.map → chunk-KDW6BD4O.cjs.map} +1 -1
  206. package/dist/{chunk-Z5V7SAZ4.js → chunk-KFEN2SRZ.js} +3 -3
  207. package/dist/{chunk-Z5V7SAZ4.js.map → chunk-KFEN2SRZ.js.map} +1 -1
  208. package/dist/chunk-KIVEYQGA.cjs +319 -0
  209. package/dist/chunk-KIVEYQGA.cjs.map +1 -0
  210. package/dist/{chunk-XEAT7XJG.cjs → chunk-KQ6GLYFZ.cjs} +29 -13
  211. package/dist/chunk-KQ6GLYFZ.cjs.map +1 -0
  212. package/dist/{chunk-4A3W4TQF.js → chunk-KVTKSPX5.js} +254 -4
  213. package/dist/chunk-KVTKSPX5.js.map +1 -0
  214. package/dist/{chunk-6EN3IQQI.cjs → chunk-L5Y52F2E.cjs} +9 -9
  215. package/dist/chunk-L5Y52F2E.cjs.map +1 -0
  216. package/dist/chunk-L6K4PRZK.cjs +4 -0
  217. package/dist/chunk-L6K4PRZK.cjs.map +1 -0
  218. package/dist/chunk-LAN5VWGC.js +2540 -0
  219. package/dist/chunk-LAN5VWGC.js.map +1 -0
  220. package/dist/{chunk-7ZDPD5ZX.cjs → chunk-LC3JL2HB.cjs} +11 -7
  221. package/dist/chunk-LC3JL2HB.cjs.map +1 -0
  222. package/dist/chunk-LRAAJRE7.cjs +2707 -0
  223. package/dist/chunk-LRAAJRE7.cjs.map +1 -0
  224. package/dist/{chunk-OE5CKRUC.js → chunk-LX323IMT.js} +34 -4
  225. package/dist/chunk-LX323IMT.js.map +1 -0
  226. package/dist/chunk-M3VPGJMV.js +283 -0
  227. package/dist/chunk-M3VPGJMV.js.map +1 -0
  228. package/dist/{chunk-DVOQ3JNO.js → chunk-ME7EVT6F.js} +23 -9
  229. package/dist/chunk-ME7EVT6F.js.map +1 -0
  230. package/dist/{chunk-SQJFBZ42.js → chunk-MUYUFOGL.js} +8 -7
  231. package/dist/chunk-MUYUFOGL.js.map +1 -0
  232. package/dist/{chunk-VKELAMAZ.js → chunk-N54FYWG6.js} +27 -11
  233. package/dist/chunk-N54FYWG6.js.map +1 -0
  234. package/dist/chunk-N5JDL4VE.js +3 -0
  235. package/dist/chunk-N5JDL4VE.js.map +1 -0
  236. package/dist/{chunk-ZPSJ2UV6.cjs → chunk-NAH65KPK.cjs} +8 -8
  237. package/dist/{chunk-ZPSJ2UV6.cjs.map → chunk-NAH65KPK.cjs.map} +1 -1
  238. package/dist/{chunk-PYJDVWXM.js → chunk-NUB5HRKS.js} +3 -3
  239. package/dist/{chunk-PYJDVWXM.js.map → chunk-NUB5HRKS.js.map} +1 -1
  240. package/dist/{chunk-WNZAYBVB.cjs → chunk-O6BJMVGT.cjs} +48 -48
  241. package/dist/{chunk-WNZAYBVB.cjs.map → chunk-O6BJMVGT.cjs.map} +1 -1
  242. package/dist/{chunk-SVSHA7XV.js → chunk-O6XDA3SI.js} +31 -33
  243. package/dist/chunk-O6XDA3SI.js.map +1 -0
  244. package/dist/chunk-OIF34LEN.cjs +425 -0
  245. package/dist/chunk-OIF34LEN.cjs.map +1 -0
  246. package/dist/{chunk-J5CSLNCN.cjs → chunk-OODVC2UD.cjs} +2 -2
  247. package/dist/{chunk-J5CSLNCN.cjs.map → chunk-OODVC2UD.cjs.map} +1 -1
  248. package/dist/{chunk-LL6IWKI3.js → chunk-OW3SQJ7P.js} +3 -3
  249. package/dist/{chunk-LL6IWKI3.js.map → chunk-OW3SQJ7P.js.map} +1 -1
  250. package/dist/{chunk-ZGRCSNPK.js → chunk-OYUIEJPN.js} +17 -8
  251. package/dist/chunk-OYUIEJPN.js.map +1 -0
  252. package/dist/chunk-P22YCUVM.cjs +4 -0
  253. package/dist/chunk-P22YCUVM.cjs.map +1 -0
  254. package/dist/{chunk-CEQJGUAS.js → chunk-P4E3K3ND.js} +12 -5
  255. package/dist/chunk-P4E3K3ND.js.map +1 -0
  256. package/dist/{chunk-TMMVIUUN.js → chunk-P7D7BYFE.js} +4 -4
  257. package/dist/{chunk-TMMVIUUN.js.map → chunk-P7D7BYFE.js.map} +1 -1
  258. package/dist/{chunk-SGFYA22I.cjs → chunk-PINIBEIU.cjs} +21 -12
  259. package/dist/chunk-PINIBEIU.cjs.map +1 -0
  260. package/dist/{chunk-3T7QGLNB.js → chunk-PJEL5ZZV.js} +4 -2
  261. package/dist/chunk-PJEL5ZZV.js.map +1 -0
  262. package/dist/chunk-PWXDRFJL.cjs +218 -0
  263. package/dist/chunk-PWXDRFJL.cjs.map +1 -0
  264. package/dist/{chunk-XZNN3S3S.cjs → chunk-PYI2IWNX.cjs} +4 -4
  265. package/dist/{chunk-XZNN3S3S.cjs.map → chunk-PYI2IWNX.cjs.map} +1 -1
  266. package/dist/chunk-Q3YVLO52.cjs +174 -0
  267. package/dist/chunk-Q3YVLO52.cjs.map +1 -0
  268. package/dist/{chunk-MNILXWVY.js → chunk-QJ2L5RU6.js} +7 -7
  269. package/dist/{chunk-MNILXWVY.js.map → chunk-QJ2L5RU6.js.map} +1 -1
  270. package/dist/{chunk-X4LBUPJO.cjs → chunk-QX6AAVDE.cjs} +31 -33
  271. package/dist/chunk-QX6AAVDE.cjs.map +1 -0
  272. package/dist/{chunk-UV2FVNWT.cjs → chunk-RIUQP2QS.cjs} +5 -5
  273. package/dist/{chunk-UV2FVNWT.cjs.map → chunk-RIUQP2QS.cjs.map} +1 -1
  274. package/dist/chunk-RLVYWUXG.js +115 -0
  275. package/dist/chunk-RLVYWUXG.js.map +1 -0
  276. package/dist/{chunk-HACNIFO3.js → chunk-RM2HPQIC.js} +77 -14
  277. package/dist/chunk-RM2HPQIC.js.map +1 -0
  278. package/dist/{chunk-DEDN5HAG.js → chunk-RSJGTWLM.js} +3 -3
  279. package/dist/{chunk-DEDN5HAG.js.map → chunk-RSJGTWLM.js.map} +1 -1
  280. package/dist/{chunk-G4D6CLBT.js → chunk-RZSSQ7AT.js} +3 -3
  281. package/dist/{chunk-G4D6CLBT.js.map → chunk-RZSSQ7AT.js.map} +1 -1
  282. package/dist/{chunk-ENKFJJZX.js → chunk-S2JZL4JC.js} +6 -6
  283. package/dist/{chunk-ENKFJJZX.js.map → chunk-S2JZL4JC.js.map} +1 -1
  284. package/dist/{chunk-P7UMS4E6.cjs → chunk-S7AMZ4RD.cjs} +23 -9
  285. package/dist/chunk-S7AMZ4RD.cjs.map +1 -0
  286. package/dist/{chunk-VROIMIHB.cjs → chunk-SHBCUXFS.cjs} +28 -6
  287. package/dist/chunk-SHBCUXFS.cjs.map +1 -0
  288. package/dist/{chunk-RJ6NTJHC.js → chunk-SRMTRD7F.js} +3 -3
  289. package/dist/{chunk-RJ6NTJHC.js.map → chunk-SRMTRD7F.js.map} +1 -1
  290. package/dist/{chunk-IX6KFB3K.cjs → chunk-SW2E7XKY.cjs} +9 -9
  291. package/dist/{chunk-IX6KFB3K.cjs.map → chunk-SW2E7XKY.cjs.map} +1 -1
  292. package/dist/chunk-SZSRGUVO.js +402 -0
  293. package/dist/chunk-SZSRGUVO.js.map +1 -0
  294. package/dist/{chunk-NJ6MY6V5.js → chunk-T5BBZQ66.js} +3 -3
  295. package/dist/{chunk-NJ6MY6V5.js.map → chunk-T5BBZQ66.js.map} +1 -1
  296. package/dist/{chunk-HZ4MBUC3.js → chunk-TI3TQQ7F.js} +4 -53
  297. package/dist/chunk-TI3TQQ7F.js.map +1 -0
  298. package/dist/{chunk-ACCAXVOG.js → chunk-TJ4GWQPM.js} +137 -57
  299. package/dist/chunk-TJ4GWQPM.js.map +1 -0
  300. package/dist/{chunk-5JJ2DAE4.js → chunk-TWQSMUE6.js} +7 -3
  301. package/dist/chunk-TWQSMUE6.js.map +1 -0
  302. package/dist/{chunk-X4XPNTCZ.cjs → chunk-U2RS574O.cjs} +139 -59
  303. package/dist/chunk-U2RS574O.cjs.map +1 -0
  304. package/dist/{chunk-TAXD5ADA.cjs → chunk-UEDTZYGI.cjs} +3 -3
  305. package/dist/{chunk-TAXD5ADA.cjs.map → chunk-UEDTZYGI.cjs.map} +1 -1
  306. package/dist/{chunk-3QGS6CXD.js → chunk-UJDWFDKE.js} +3 -3
  307. package/dist/{chunk-3QGS6CXD.js.map → chunk-UJDWFDKE.js.map} +1 -1
  308. package/dist/{chunk-DZ5HFLRC.js → chunk-UNFDIBKJ.js} +3 -3
  309. package/dist/{chunk-DZ5HFLRC.js.map → chunk-UNFDIBKJ.js.map} +1 -1
  310. package/dist/{chunk-UQ3VVR6A.cjs → chunk-UPWIJC6I.cjs} +3 -3
  311. package/dist/{chunk-UQ3VVR6A.cjs.map → chunk-UPWIJC6I.cjs.map} +1 -1
  312. package/dist/chunk-UTIPENPW.cjs +286 -0
  313. package/dist/chunk-UTIPENPW.cjs.map +1 -0
  314. package/dist/{chunk-S7WCHDBO.js → chunk-VCI2Y7ST.js} +3 -3
  315. package/dist/{chunk-S7WCHDBO.js.map → chunk-VCI2Y7ST.js.map} +1 -1
  316. package/dist/{chunk-Y5HFM7LO.js → chunk-VOEXGDL5.js} +6 -6
  317. package/dist/chunk-VOEXGDL5.js.map +1 -0
  318. package/dist/{chunk-P2CA3XGI.js → chunk-VSRO4PAI.js} +23 -5
  319. package/dist/chunk-VSRO4PAI.js.map +1 -0
  320. package/dist/{chunk-L6MDULYB.js → chunk-VU3ZMJBN.js} +2 -2
  321. package/dist/{chunk-L6MDULYB.js.map → chunk-VU3ZMJBN.js.map} +1 -1
  322. package/dist/{chunk-XI34EGK5.cjs → chunk-VV2U36T6.cjs} +9 -9
  323. package/dist/{chunk-XI34EGK5.cjs.map → chunk-VV2U36T6.cjs.map} +1 -1
  324. package/dist/{chunk-VPWJCJCX.cjs → chunk-VXW7D5LR.cjs} +26 -8
  325. package/dist/chunk-VXW7D5LR.cjs.map +1 -0
  326. package/dist/{chunk-GOALNQZ2.js → chunk-WFBUBT54.js} +4 -83
  327. package/dist/chunk-WFBUBT54.js.map +1 -0
  328. package/dist/chunk-WQHBMZSC.js +295 -0
  329. package/dist/chunk-WQHBMZSC.js.map +1 -0
  330. package/dist/chunk-WSMBIXPU.cjs +2573 -0
  331. package/dist/chunk-WSMBIXPU.cjs.map +1 -0
  332. package/dist/chunk-X5JOEZVR.js +525 -0
  333. package/dist/chunk-X5JOEZVR.js.map +1 -0
  334. package/dist/chunk-XBAAHOCP.js +3 -0
  335. package/dist/chunk-XBAAHOCP.js.map +1 -0
  336. package/dist/chunk-XDU65GLW.js +21 -0
  337. package/dist/chunk-XDU65GLW.js.map +1 -0
  338. package/dist/{chunk-5GUOOLPR.cjs → chunk-XHK5VZ4L.cjs} +29 -8
  339. package/dist/chunk-XHK5VZ4L.cjs.map +1 -0
  340. package/dist/chunk-XI74P5F2.cjs +424 -0
  341. package/dist/chunk-XI74P5F2.cjs.map +1 -0
  342. package/dist/chunk-XNPDZANN.cjs +238 -0
  343. package/dist/chunk-XNPDZANN.cjs.map +1 -0
  344. package/dist/{chunk-XDIMTPZU.cjs → chunk-XPWFIDZM.cjs} +4 -3
  345. package/dist/chunk-XPWFIDZM.cjs.map +1 -0
  346. package/dist/{chunk-FS4VZUFV.cjs → chunk-XRVMYT5G.cjs} +77 -13
  347. package/dist/chunk-XRVMYT5G.cjs.map +1 -0
  348. package/dist/chunk-XXA4NZUC.js +3 -0
  349. package/dist/chunk-XXA4NZUC.js.map +1 -0
  350. package/dist/chunk-Y424YL55.js +59 -0
  351. package/dist/chunk-Y424YL55.js.map +1 -0
  352. package/dist/chunk-Y7ZJZLJY.js +2657 -0
  353. package/dist/chunk-Y7ZJZLJY.js.map +1 -0
  354. package/dist/chunk-YG7BR76Y.js +281 -0
  355. package/dist/chunk-YG7BR76Y.js.map +1 -0
  356. package/dist/chunk-YGS2TRMP.js +38 -0
  357. package/dist/chunk-YGS2TRMP.js.map +1 -0
  358. package/dist/chunk-YUMOM3KE.js +167 -0
  359. package/dist/chunk-YUMOM3KE.js.map +1 -0
  360. package/dist/chunk-YVKBXNPK.js +41 -0
  361. package/dist/chunk-YVKBXNPK.js.map +1 -0
  362. package/dist/chunk-YW2AKBLS.cjs +23 -0
  363. package/dist/chunk-YW2AKBLS.cjs.map +1 -0
  364. package/dist/{chunk-3M7TAXNR.js → chunk-YZCM7CXK.js} +3 -3
  365. package/dist/{chunk-3M7TAXNR.js.map → chunk-YZCM7CXK.js.map} +1 -1
  366. package/dist/chunk-Z3WMDVMR.cjs +46 -0
  367. package/dist/chunk-Z3WMDVMR.cjs.map +1 -0
  368. package/dist/chunk-ZNUMOJOI.cjs +4 -0
  369. package/dist/chunk-ZNUMOJOI.cjs.map +1 -0
  370. package/dist/components/Accordion/index.cjs +2 -2
  371. package/dist/components/Accordion/index.d.cts +6 -0
  372. package/dist/components/Accordion/index.d.ts +6 -0
  373. package/dist/components/Accordion/index.js +1 -1
  374. package/dist/components/ActionPlan/index.cjs +34 -0
  375. package/dist/components/ActionPlan/index.cjs.map +1 -0
  376. package/dist/components/ActionPlan/index.d.cts +65 -0
  377. package/dist/components/ActionPlan/index.d.ts +65 -0
  378. package/dist/components/ActionPlan/index.js +21 -0
  379. package/dist/components/ActionPlan/index.js.map +1 -0
  380. package/dist/components/ActivityFeed/index.cjs +31 -0
  381. package/dist/components/ActivityFeed/index.cjs.map +1 -0
  382. package/dist/components/ActivityFeed/index.d.cts +99 -0
  383. package/dist/components/ActivityFeed/index.d.ts +99 -0
  384. package/dist/components/ActivityFeed/index.js +18 -0
  385. package/dist/components/ActivityFeed/index.js.map +1 -0
  386. package/dist/components/Alert/index.d.cts +1 -1
  387. package/dist/components/Alert/index.d.ts +1 -1
  388. package/dist/components/AlertDialog/index.cjs +19 -5
  389. package/dist/components/AlertDialog/index.d.cts +94 -16
  390. package/dist/components/AlertDialog/index.d.ts +94 -16
  391. package/dist/components/AlertDialog/index.js +6 -4
  392. package/dist/components/AssociationList/index.cjs +29 -0
  393. package/dist/components/AssociationList/index.cjs.map +1 -0
  394. package/dist/components/AssociationList/index.d.cts +50 -0
  395. package/dist/components/AssociationList/index.d.ts +50 -0
  396. package/dist/components/AssociationList/index.js +16 -0
  397. package/dist/components/AssociationList/index.js.map +1 -0
  398. package/dist/components/AudioRecorder/index.d.cts +2 -2
  399. package/dist/components/AudioRecorder/index.d.ts +2 -2
  400. package/dist/components/Autocomplete/index.d.cts +8 -2
  401. package/dist/components/Autocomplete/index.d.ts +8 -2
  402. package/dist/components/Avatar/index.cjs +9 -7
  403. package/dist/components/Avatar/index.d.cts +46 -15
  404. package/dist/components/Avatar/index.d.ts +46 -15
  405. package/dist/components/Avatar/index.js +3 -1
  406. package/dist/components/AvatarGroup/index.cjs +20 -0
  407. package/dist/components/AvatarGroup/index.cjs.map +1 -0
  408. package/dist/components/AvatarGroup/index.d.cts +57 -0
  409. package/dist/components/AvatarGroup/index.d.ts +57 -0
  410. package/dist/components/AvatarGroup/index.js +7 -0
  411. package/dist/components/AvatarGroup/index.js.map +1 -0
  412. package/dist/components/Badge/index.cjs +3 -3
  413. package/dist/components/Badge/index.d.cts +16 -2
  414. package/dist/components/Badge/index.d.ts +16 -2
  415. package/dist/components/Badge/index.js +1 -1
  416. package/dist/components/BoardView/index.cjs +5 -4
  417. package/dist/components/BoardView/index.d.cts +2 -3
  418. package/dist/components/BoardView/index.d.ts +2 -3
  419. package/dist/components/BoardView/index.js +2 -1
  420. package/dist/components/Button/index.cjs +5 -3
  421. package/dist/components/Button/index.d.cts +2 -1
  422. package/dist/components/Button/index.d.ts +2 -1
  423. package/dist/components/Button/index.js +3 -1
  424. package/dist/components/CalendarHeatmap/index.cjs +18 -0
  425. package/dist/components/CalendarHeatmap/index.cjs.map +1 -0
  426. package/dist/components/CalendarHeatmap/index.d.cts +47 -0
  427. package/dist/components/CalendarHeatmap/index.d.ts +47 -0
  428. package/dist/components/CalendarHeatmap/index.js +5 -0
  429. package/dist/components/CalendarHeatmap/index.js.map +1 -0
  430. package/dist/components/CalendarView/index.cjs +6 -4
  431. package/dist/components/CalendarView/index.d.cts +1 -2
  432. package/dist/components/CalendarView/index.d.ts +1 -2
  433. package/dist/components/CalendarView/index.js +4 -2
  434. package/dist/components/Card/index.d.cts +3 -3
  435. package/dist/components/Card/index.d.ts +3 -3
  436. package/dist/components/ClampedText/index.cjs +3 -2
  437. package/dist/components/ClampedText/index.js +2 -1
  438. package/dist/components/CollabStatus/index.cjs +6 -4
  439. package/dist/components/CollabStatus/index.d.cts +11 -0
  440. package/dist/components/CollabStatus/index.d.ts +11 -0
  441. package/dist/components/CollabStatus/index.js +3 -1
  442. package/dist/components/Collapsible/index.cjs +6 -6
  443. package/dist/components/Collapsible/index.d.cts +6 -0
  444. package/dist/components/Collapsible/index.d.ts +6 -0
  445. package/dist/components/Collapsible/index.js +3 -3
  446. package/dist/components/CompletenessMeter/index.cjs +23 -0
  447. package/dist/components/CompletenessMeter/index.cjs.map +1 -0
  448. package/dist/components/CompletenessMeter/index.d.cts +52 -0
  449. package/dist/components/CompletenessMeter/index.d.ts +52 -0
  450. package/dist/components/CompletenessMeter/index.js +6 -0
  451. package/dist/components/CompletenessMeter/index.js.map +1 -0
  452. package/dist/components/CountryCodeDropdown/index.cjs +5 -5
  453. package/dist/components/CountryCodeDropdown/index.js +2 -2
  454. package/dist/components/CustomizableDashboard/index.cjs +12 -10
  455. package/dist/components/CustomizableDashboard/index.js +5 -3
  456. package/dist/components/DateInput/index.d.cts +36 -4
  457. package/dist/components/DateInput/index.d.ts +36 -4
  458. package/dist/components/Dropdown/index.cjs +12 -10
  459. package/dist/components/Dropdown/index.d.cts +6 -4
  460. package/dist/components/Dropdown/index.d.ts +6 -4
  461. package/dist/components/Dropdown/index.js +5 -3
  462. package/dist/components/EmailEditor/index.cjs +68 -0
  463. package/dist/components/EmailEditor/index.cjs.map +1 -0
  464. package/dist/components/EmailEditor/index.d.cts +347 -0
  465. package/dist/components/EmailEditor/index.d.ts +347 -0
  466. package/dist/components/EmailEditor/index.js +27 -0
  467. package/dist/components/EmailEditor/index.js.map +1 -0
  468. package/dist/components/FieldHistory/index.cjs +34 -0
  469. package/dist/components/FieldHistory/index.cjs.map +1 -0
  470. package/dist/components/FieldHistory/index.d.cts +66 -0
  471. package/dist/components/FieldHistory/index.d.ts +66 -0
  472. package/dist/components/FieldHistory/index.js +21 -0
  473. package/dist/components/FieldHistory/index.js.map +1 -0
  474. package/dist/components/FloatingWindow/index.cjs +6 -4
  475. package/dist/components/FloatingWindow/index.js +4 -2
  476. package/dist/components/GanttView/index.d.cts +1 -2
  477. package/dist/components/GanttView/index.d.ts +1 -2
  478. package/dist/components/GlossaryTooltip/index.cjs +3 -3
  479. package/dist/components/GlossaryTooltip/index.js +2 -2
  480. package/dist/components/InlineEdit/index.cjs +20 -0
  481. package/dist/components/InlineEdit/index.cjs.map +1 -0
  482. package/dist/components/InlineEdit/index.d.cts +56 -0
  483. package/dist/components/InlineEdit/index.d.ts +56 -0
  484. package/dist/components/InlineEdit/index.js +7 -0
  485. package/dist/components/InlineEdit/index.js.map +1 -0
  486. package/dist/components/KeyboardShortcutsOverlay/index.cjs +5 -5
  487. package/dist/components/KeyboardShortcutsOverlay/index.js +3 -3
  488. package/dist/components/ListView/index.cjs +6 -4
  489. package/dist/components/ListView/index.d.cts +91 -4
  490. package/dist/components/ListView/index.d.ts +91 -4
  491. package/dist/components/ListView/index.js +4 -2
  492. package/dist/components/LogoUploader/index.cjs +18 -0
  493. package/dist/components/LogoUploader/index.cjs.map +1 -0
  494. package/dist/components/LogoUploader/index.d.cts +49 -0
  495. package/dist/components/LogoUploader/index.d.ts +49 -0
  496. package/dist/components/LogoUploader/index.js +5 -0
  497. package/dist/components/LogoUploader/index.js.map +1 -0
  498. package/dist/components/Markdown/index.cjs +21 -19
  499. package/dist/components/Markdown/index.js +9 -7
  500. package/dist/components/MediaEditor/index.cjs +16 -14
  501. package/dist/components/MediaEditor/index.d.cts +91 -2
  502. package/dist/components/MediaEditor/index.d.ts +91 -2
  503. package/dist/components/MediaEditor/index.js +11 -9
  504. package/dist/components/MediaFeed/index.cjs +29 -0
  505. package/dist/components/MediaFeed/index.cjs.map +1 -0
  506. package/dist/components/MediaFeed/index.d.cts +104 -0
  507. package/dist/components/MediaFeed/index.d.ts +104 -0
  508. package/dist/components/MediaFeed/index.js +20 -0
  509. package/dist/components/MediaFeed/index.js.map +1 -0
  510. package/dist/components/MediaPlayer/index.cjs +8 -6
  511. package/dist/components/MediaPlayer/index.d.cts +19 -1
  512. package/dist/components/MediaPlayer/index.d.ts +19 -1
  513. package/dist/components/MediaPlayer/index.js +5 -3
  514. package/dist/components/MegaMenu/index.cjs +7 -5
  515. package/dist/components/MegaMenu/index.js +4 -2
  516. package/dist/components/Modal/index.cjs +10 -10
  517. package/dist/components/Modal/index.js +2 -2
  518. package/dist/components/Pagination/index.d.cts +1 -1
  519. package/dist/components/Pagination/index.d.ts +1 -1
  520. package/dist/components/PhiMask/index.cjs +18 -0
  521. package/dist/components/PhiMask/index.cjs.map +1 -0
  522. package/dist/components/PhiMask/index.d.cts +45 -0
  523. package/dist/components/PhiMask/index.d.ts +45 -0
  524. package/dist/components/PhiMask/index.js +5 -0
  525. package/dist/components/PhiMask/index.js.map +1 -0
  526. package/dist/components/Progress/index.cjs +6 -6
  527. package/dist/components/Progress/index.d.cts +8 -2
  528. package/dist/components/Progress/index.d.ts +8 -2
  529. package/dist/components/Progress/index.js +1 -1
  530. package/dist/components/PropertyList/index.cjs +25 -0
  531. package/dist/components/PropertyList/index.cjs.map +1 -0
  532. package/dist/components/PropertyList/index.d.cts +87 -0
  533. package/dist/components/PropertyList/index.d.ts +87 -0
  534. package/dist/components/PropertyList/index.js +12 -0
  535. package/dist/components/PropertyList/index.js.map +1 -0
  536. package/dist/components/Q/index.d.cts +2 -2
  537. package/dist/components/Q/index.d.ts +2 -2
  538. package/dist/components/QuickAction/index.d.cts +1 -1
  539. package/dist/components/QuickAction/index.d.ts +1 -1
  540. package/dist/components/RadialExplorer/index.cjs +7 -5
  541. package/dist/components/RadialExplorer/index.js +6 -4
  542. package/dist/components/Rating/index.cjs +28 -0
  543. package/dist/components/Rating/index.cjs.map +1 -0
  544. package/dist/components/Rating/index.d.cts +85 -0
  545. package/dist/components/Rating/index.d.ts +85 -0
  546. package/dist/components/Rating/index.js +7 -0
  547. package/dist/components/Rating/index.js.map +1 -0
  548. package/dist/components/RecordButton/index.d.cts +1 -1
  549. package/dist/components/RecordButton/index.d.ts +1 -1
  550. package/dist/components/RecordHeader/index.cjs +30 -0
  551. package/dist/components/RecordHeader/index.cjs.map +1 -0
  552. package/dist/components/RecordHeader/index.d.cts +96 -0
  553. package/dist/components/RecordHeader/index.d.ts +96 -0
  554. package/dist/components/RecordHeader/index.js +17 -0
  555. package/dist/components/RecordHeader/index.js.map +1 -0
  556. package/dist/components/RecordLayout/index.cjs +22 -0
  557. package/dist/components/RecordLayout/index.cjs.map +1 -0
  558. package/dist/components/RecordLayout/index.d.cts +40 -0
  559. package/dist/components/RecordLayout/index.d.ts +40 -0
  560. package/dist/components/RecordLayout/index.js +9 -0
  561. package/dist/components/RecordLayout/index.js.map +1 -0
  562. package/dist/components/RichTextEditor/index.cjs +12 -8
  563. package/dist/components/RichTextEditor/index.d.cts +12 -2
  564. package/dist/components/RichTextEditor/index.d.ts +12 -2
  565. package/dist/components/RichTextEditor/index.js +9 -5
  566. package/dist/components/ScrollArea/index.d.cts +1 -1
  567. package/dist/components/ScrollArea/index.d.ts +1 -1
  568. package/dist/components/SectionSpyNav/index.cjs +5 -3
  569. package/dist/components/SectionSpyNav/index.js +4 -2
  570. package/dist/components/Select/index.cjs +4 -4
  571. package/dist/components/Select/index.d.cts +2 -2
  572. package/dist/components/Select/index.d.ts +2 -2
  573. package/dist/components/Select/index.js +2 -2
  574. package/dist/components/Skeleton/index.d.cts +1 -1
  575. package/dist/components/Skeleton/index.d.ts +1 -1
  576. package/dist/components/Slider/index.d.cts +2 -2
  577. package/dist/components/Slider/index.d.ts +2 -2
  578. package/dist/components/SliderCalculator/index.cjs +4 -4
  579. package/dist/components/SliderCalculator/index.js +2 -2
  580. package/dist/components/SourceTip/index.cjs +3 -3
  581. package/dist/components/SourceTip/index.js +2 -2
  582. package/dist/components/Spinner/index.d.cts +2 -2
  583. package/dist/components/Spinner/index.d.ts +2 -2
  584. package/dist/components/SuperChat/index.cjs +735 -322
  585. package/dist/components/SuperChat/index.cjs.map +1 -1
  586. package/dist/components/SuperChat/index.d.cts +126 -8
  587. package/dist/components/SuperChat/index.d.ts +126 -8
  588. package/dist/components/SuperChat/index.js +721 -308
  589. package/dist/components/SuperChat/index.js.map +1 -1
  590. package/dist/components/SuperChat/plugins/index.cjs +8 -6
  591. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  592. package/dist/components/SuperChat/plugins/index.d.cts +2 -3
  593. package/dist/components/SuperChat/plugins/index.d.ts +2 -3
  594. package/dist/components/SuperChat/plugins/index.js +7 -5
  595. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  596. package/dist/components/Tabs/index.cjs +10 -7
  597. package/dist/components/Tabs/index.d.cts +12 -1
  598. package/dist/components/Tabs/index.d.ts +12 -1
  599. package/dist/components/Tabs/index.js +4 -1
  600. package/dist/components/TagEditor/index.cjs +22 -0
  601. package/dist/components/TagEditor/index.cjs.map +1 -0
  602. package/dist/components/TagEditor/index.d.cts +46 -0
  603. package/dist/components/TagEditor/index.d.ts +46 -0
  604. package/dist/components/TagEditor/index.js +9 -0
  605. package/dist/components/TagEditor/index.js.map +1 -0
  606. package/dist/components/Text/index.d.cts +3 -3
  607. package/dist/components/Text/index.d.ts +3 -3
  608. package/dist/components/Textarea/index.d.cts +2 -2
  609. package/dist/components/Textarea/index.d.ts +2 -2
  610. package/dist/components/ThemeProvider/index.cjs +9 -9
  611. package/dist/components/ThemeProvider/index.d.cts +3 -1
  612. package/dist/components/ThemeProvider/index.d.ts +3 -1
  613. package/dist/components/ThemeProvider/index.js +3 -3
  614. package/dist/components/Tooltip/index.cjs +3 -3
  615. package/dist/components/Tooltip/index.js +2 -2
  616. package/dist/components/TranscriptView/index.d.cts +85 -4
  617. package/dist/components/TranscriptView/index.d.ts +85 -4
  618. package/dist/components/UserPicker/index.cjs +24 -0
  619. package/dist/components/UserPicker/index.cjs.map +1 -0
  620. package/dist/components/UserPicker/index.d.cts +60 -0
  621. package/dist/components/UserPicker/index.d.ts +60 -0
  622. package/dist/components/UserPicker/index.js +11 -0
  623. package/dist/components/UserPicker/index.js.map +1 -0
  624. package/dist/components/VideoCard/index.cjs +4 -4
  625. package/dist/components/VideoCard/index.js +2 -2
  626. package/dist/components/ViewSet/index.cjs +10 -7
  627. package/dist/components/ViewSet/index.d.cts +120 -8
  628. package/dist/components/ViewSet/index.d.ts +120 -8
  629. package/dist/components/ViewSet/index.js +9 -6
  630. package/dist/components/ViewSwitcher/index.cjs +4 -3
  631. package/dist/components/ViewSwitcher/index.d.cts +1 -2
  632. package/dist/components/ViewSwitcher/index.d.ts +1 -2
  633. package/dist/components/ViewSwitcher/index.js +2 -1
  634. package/dist/components/YearTimeline/index.cjs +5 -5
  635. package/dist/components/YearTimeline/index.js +1 -1
  636. package/dist/datavis.cjs +6 -4
  637. package/dist/datavis.cjs.map +1 -1
  638. package/dist/datavis.d.cts +167 -13
  639. package/dist/datavis.d.ts +167 -13
  640. package/dist/datavis.js +4 -2
  641. package/dist/datavis.js.map +1 -1
  642. package/dist/deck.cjs +3374 -0
  643. package/dist/deck.cjs.map +1 -0
  644. package/dist/deck.d.cts +712 -0
  645. package/dist/deck.d.ts +712 -0
  646. package/dist/deck.js +3330 -0
  647. package/dist/deck.js.map +1 -0
  648. package/dist/esheet.cjs +20 -16
  649. package/dist/esheet.cjs.map +1 -1
  650. package/dist/esheet.d.cts +183 -1
  651. package/dist/esheet.d.ts +183 -1
  652. package/dist/esheet.js +17 -13
  653. package/dist/esheet.js.map +1 -1
  654. package/dist/globe.cjs +2 -2
  655. package/dist/globe.js +1 -1
  656. package/dist/{hey-buddy-INNUFFJJ.cjs → hey-buddy-5WOBYZRJ.cjs} +22 -11
  657. package/dist/hey-buddy-5WOBYZRJ.cjs.map +1 -0
  658. package/dist/{hey-buddy-V6FC5UKB.js → hey-buddy-AHUHCDBC.js} +22 -11
  659. package/dist/hey-buddy-AHUHCDBC.js.map +1 -0
  660. package/dist/hooks/index.cjs +88 -33
  661. package/dist/hooks/index.d.cts +592 -36
  662. package/dist/hooks/index.d.ts +592 -36
  663. package/dist/hooks/index.js +9 -6
  664. package/dist/icons-wBacj6BW.d.cts +142 -0
  665. package/dist/icons-wBacj6BW.d.ts +142 -0
  666. package/dist/index.cjs +2056 -1349
  667. package/dist/index.cjs.map +1 -1
  668. package/dist/index.d.cts +10401 -637
  669. package/dist/index.d.ts +10401 -637
  670. package/dist/index.js +674 -352
  671. package/dist/index.js.map +1 -1
  672. package/dist/kerebron.css +115 -0
  673. package/dist/maps.cjs +160 -0
  674. package/dist/maps.cjs.map +1 -0
  675. package/dist/maps.d.cts +42 -0
  676. package/dist/maps.d.ts +42 -0
  677. package/dist/maps.js +138 -0
  678. package/dist/maps.js.map +1 -0
  679. package/dist/motion.cjs +7 -7
  680. package/dist/motion.d.cts +186 -2
  681. package/dist/motion.d.ts +186 -2
  682. package/dist/motion.js +2 -2
  683. package/dist/org-chart.cjs +1303 -0
  684. package/dist/org-chart.cjs.map +1 -0
  685. package/dist/org-chart.d.cts +164 -0
  686. package/dist/org-chart.d.ts +164 -0
  687. package/dist/org-chart.js +1278 -0
  688. package/dist/org-chart.js.map +1 -0
  689. package/dist/q.d.cts +25 -3
  690. package/dist/q.d.ts +25 -3
  691. package/dist/styles/effects.css +133 -0
  692. package/dist/styles/init.css +22 -3
  693. package/dist/styles.css +1 -1
  694. package/dist/tailwind-preset.cjs +4 -4
  695. package/dist/tailwind-preset.js +1 -1
  696. package/dist/templates.cjs +156 -0
  697. package/dist/templates.cjs.map +1 -0
  698. package/dist/templates.d.cts +734 -0
  699. package/dist/templates.d.ts +734 -0
  700. package/dist/templates.js +11 -0
  701. package/dist/templates.js.map +1 -0
  702. package/dist/{types-CbWXIKbe.d.cts → types-CDeBNZiE.d.cts} +1 -28
  703. package/dist/{types-CbWXIKbe.d.ts → types-CDeBNZiE.d.ts} +1 -28
  704. package/dist/types-Cx1FHLq2.d.cts +548 -0
  705. package/dist/types-Cx1FHLq2.d.ts +548 -0
  706. package/dist/types-DsdZvEI1.d.cts +92 -0
  707. package/dist/types-DsdZvEI1.d.ts +92 -0
  708. package/dist/utils/index.cjs +9 -9
  709. package/dist/utils/index.d.cts +13 -2
  710. package/dist/utils/index.d.ts +13 -2
  711. package/dist/utils/index.js +1 -1
  712. package/package.json +79 -15
  713. package/dist/Animated-XmH6k8pZ.d.cts +0 -188
  714. package/dist/Animated-XmH6k8pZ.d.ts +0 -188
  715. package/dist/CsvBlock-ROJCKJDP.cjs +0 -16
  716. package/dist/CsvBlock-UWPMTLE2.js +0 -7
  717. package/dist/HtmlPreviewBlock-DWFN6EUB.cjs +0 -16
  718. package/dist/HtmlPreviewBlock-ME5U3XNS.js +0 -7
  719. package/dist/MedicationEditor-Bp4NLy7y.d.cts +0 -352
  720. package/dist/MedicationEditor-Bp4NLy7y.d.ts +0 -352
  721. package/dist/MermaidBlock-2B6CPD6Y.js +0 -7
  722. package/dist/MermaidBlock-D2UC5M55.cjs +0 -16
  723. package/dist/SurveyBlock-4CD4AYMJ.cjs +0 -16
  724. package/dist/SurveyBlock-4DO62RBT.js +0 -7
  725. package/dist/chunk-2IZLKPUW.js.map +0 -1
  726. package/dist/chunk-3T7QGLNB.js.map +0 -1
  727. package/dist/chunk-4A3W4TQF.js.map +0 -1
  728. package/dist/chunk-4IS3QCOQ.cjs.map +0 -1
  729. package/dist/chunk-5GUOOLPR.cjs.map +0 -1
  730. package/dist/chunk-5JJ2DAE4.js.map +0 -1
  731. package/dist/chunk-6EN3IQQI.cjs.map +0 -1
  732. package/dist/chunk-6HFFWEM3.cjs +0 -22
  733. package/dist/chunk-6HFFWEM3.cjs.map +0 -1
  734. package/dist/chunk-7ZDPD5ZX.cjs.map +0 -1
  735. package/dist/chunk-7ZVTLTJF.js +0 -109
  736. package/dist/chunk-7ZVTLTJF.js.map +0 -1
  737. package/dist/chunk-ACCAXVOG.js.map +0 -1
  738. package/dist/chunk-AR7AKDM2.cjs +0 -143
  739. package/dist/chunk-AR7AKDM2.cjs.map +0 -1
  740. package/dist/chunk-ASSDGS4F.cjs.map +0 -1
  741. package/dist/chunk-AWJBOND5.js +0 -130
  742. package/dist/chunk-AWJBOND5.js.map +0 -1
  743. package/dist/chunk-BMSG4NBH.js +0 -56
  744. package/dist/chunk-BMSG4NBH.js.map +0 -1
  745. package/dist/chunk-CEQJGUAS.js.map +0 -1
  746. package/dist/chunk-CR2SDI23.cjs.map +0 -1
  747. package/dist/chunk-DVOQ3JNO.js.map +0 -1
  748. package/dist/chunk-E4IBHYJ7.cjs +0 -80
  749. package/dist/chunk-E4IBHYJ7.cjs.map +0 -1
  750. package/dist/chunk-FS4VZUFV.cjs.map +0 -1
  751. package/dist/chunk-GD7EBGC4.cjs.map +0 -1
  752. package/dist/chunk-GOALNQZ2.js.map +0 -1
  753. package/dist/chunk-HACNIFO3.js.map +0 -1
  754. package/dist/chunk-HB7C7NB5.js +0 -20
  755. package/dist/chunk-HB7C7NB5.js.map +0 -1
  756. package/dist/chunk-HZ4MBUC3.js.map +0 -1
  757. package/dist/chunk-IT775BYG.js.map +0 -1
  758. package/dist/chunk-JEIW7BSV.cjs.map +0 -1
  759. package/dist/chunk-JYZW2PZS.cjs.map +0 -1
  760. package/dist/chunk-KQUI4BGS.cjs.map +0 -1
  761. package/dist/chunk-KRU6IGV7.js.map +0 -1
  762. package/dist/chunk-NV2CWBI2.cjs.map +0 -1
  763. package/dist/chunk-OE5CKRUC.js.map +0 -1
  764. package/dist/chunk-P2CA3XGI.js.map +0 -1
  765. package/dist/chunk-P7UMS4E6.cjs.map +0 -1
  766. package/dist/chunk-SGFYA22I.cjs.map +0 -1
  767. package/dist/chunk-SQHMGT4W.js.map +0 -1
  768. package/dist/chunk-SQJFBZ42.js.map +0 -1
  769. package/dist/chunk-SVSHA7XV.js.map +0 -1
  770. package/dist/chunk-TVTIGV7Q.js.map +0 -1
  771. package/dist/chunk-VKELAMAZ.js.map +0 -1
  772. package/dist/chunk-VNYW4C4J.cjs.map +0 -1
  773. package/dist/chunk-VOKVG3ER.js +0 -78
  774. package/dist/chunk-VOKVG3ER.js.map +0 -1
  775. package/dist/chunk-VPIYTQCV.cjs.map +0 -1
  776. package/dist/chunk-VPWJCJCX.cjs.map +0 -1
  777. package/dist/chunk-VROIMIHB.cjs.map +0 -1
  778. package/dist/chunk-WNJRS7Y7.cjs.map +0 -1
  779. package/dist/chunk-X4LBUPJO.cjs.map +0 -1
  780. package/dist/chunk-X4XPNTCZ.cjs.map +0 -1
  781. package/dist/chunk-XCP454Q6.js.map +0 -1
  782. package/dist/chunk-XDIMTPZU.cjs.map +0 -1
  783. package/dist/chunk-XEAT7XJG.cjs.map +0 -1
  784. package/dist/chunk-XVW5DPPP.js.map +0 -1
  785. package/dist/chunk-Y5HFM7LO.js.map +0 -1
  786. package/dist/chunk-YVL3XATO.cjs +0 -79
  787. package/dist/chunk-YVL3XATO.cjs.map +0 -1
  788. package/dist/chunk-YVPC65ZJ.cjs.map +0 -1
  789. package/dist/chunk-ZGRCSNPK.js.map +0 -1
  790. package/dist/hey-buddy-INNUFFJJ.cjs.map +0 -1
  791. package/dist/hey-buddy-V6FC5UKB.js.map +0 -1
  792. package/dist/html-MdxqSzjD.d.cts +0 -13
  793. package/dist/html-MdxqSzjD.d.ts +0 -13
  794. package/dist/orderRows-BUJYgSc7.d.cts +0 -221
  795. package/dist/orderRows-BUJYgSc7.d.ts +0 -221
  796. package/dist/transcript-Cg7uSW-C.d.cts +0 -84
  797. package/dist/transcript-Cg7uSW-C.d.ts +0 -84
  798. package/dist/types-B97JNRNQ.d.cts +0 -251
  799. package/dist/types-CnPEwzlp.d.cts +0 -254
  800. package/dist/types-CnPEwzlp.d.ts +0 -254
  801. package/dist/types-gZXrfLj6.d.ts +0 -251
  802. package/dist/useAnchoredPosition-CKwLSQW8.d.cts +0 -76
  803. package/dist/useAnchoredPosition-CKwLSQW8.d.ts +0 -76
  804. package/dist/useTheme-B9SWu6ui.d.cts +0 -24
  805. package/dist/useTheme-B9SWu6ui.d.ts +0 -24
  806. package/dist/useTranscriptEdits-CGzlemHT.d.cts +0 -182
  807. package/dist/useTranscriptEdits-D32bLs0l.d.ts +0 -182
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/RowActionToolbar/RowActionToolbar.tsx","../src/components/AllergyList/AllergyList.tsx","../src/components/CodeLookup/context.tsx","../src/components/AllergyList/AllergyManager.tsx","../src/components/MedicationList/MedicationList.tsx","../src/components/MedicationList/MedicationEditor.tsx","../src/components/MedicationList/MedicationReconciliation.tsx"],"names":["cn","jsx","Tooltip","Button","Pencil","StickyNote","Ban","jsxs","dragIndicatorClasses","GripVertical","Badge","React","useLiveAnnouncement","useDragReorder","Card","CardHeader","AlertCircle","CardContent","Plus","React2","React3","Modal","ModalHeader","ModalTitle","ModalClose","ModalBody","RadioGroup","Radio","Select","Label","Input","DateInput","Textarea","ModalFooter","Fragment","DEFAULT_ACTIONS","ACTION_META","ExternalLink","RefreshCw","CalendarCheck","ChevronUp","ChevronDown","ThumbsUp","HandMetal","ThumbsDown","HelpCircle","React4","newId","React5","React6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,SAAS,cAAc,CAAA,EAAqC;AACjE,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,OAAA,IAAW,EAAE,OAAA,EAAS;AACxC,EAAA,IAAI,CAAC,CAAC,WAAA,EAAa,YAAA,EAAc,MAAA,EAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,EAAG;AACjE,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA;AAAA,IACpB,EAAE,aAAA,CAAc,gBAAA;AAAA,MACd;AAAA;AACF,GACF;AACA,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,aAAkC,CAAA;AACrE,EAAA,IAAI,CAAA,KAAM,EAAA,IAAM,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACtC,EAAA,CAAA,CAAE,cAAA,EAAe;AACjB,EAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,EAAA,MAAM,IAAA,GACJ,EAAE,GAAA,KAAQ,WAAA,GAAA,CACL,IAAI,CAAA,GAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,GACnC,CAAA,CAAE,QAAQ,YAAA,GAAA,CACP,CAAA,GAAI,KAAK,OAAA,CAAQ,MAAA,GAClB,EAAE,GAAA,KAAQ,MAAA,GACR,CAAA,GACA,OAAA,CAAQ,MAAA,GAAS,CAAA;AAC3B,EAAA,OAAA,CAAQ,IAAI,GAAG,KAAA,EAAM;AACvB;AAGA,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,MAAA,EACE,uEAAA;AAAA;AAAA,EAEF,GAAA,EAAK;AACP,CAAA;AAOA,IAAM,MAAA,GAAS;AAAA,EACb,GAAA,EAAKA,oBAAA;AAAA,IACH,yDAAA;AAAA,IACA,uEAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,KAAA,EAAOA,oBAAA;AAAA,IACL,qEAAA;AAAA,IACA,mFAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,IAAA,EAAMA,oBAAA;AAAA,IACJ,uEAAA;AAAA,IACA;AAAA;AAEJ,CAAA;AA8BO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA;AAAA,EACA,KAAA,GAAQ,QAAA;AAAA,EACR,KAAA,GAAQ,KAAA;AAAA,EACR,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAW,aAAA;AAAA,MACX,SAAA,EAAWD,oBAAA;AAAA,QACT,2DAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAKA,UAAU,MAAA,IAAU;AAAA,UAClB,uBAAA;AAAA,UACA,MAAM,KAAK,CAAA;AAAA,UACX;AAAA,SACF;AAAA,QACA,UAAU,MAAA,IACR,yDAAA;AAAA,QACF,yDAAA;AAAA,QACA,OAAO,KAAK,CAAA;AAAA,QACZ,2DAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAgBO,SAAS,aAAA,CAAc;AAAA,EAC5B,KAAA;AAAA,EACA,IAAA,EAAM,IAAA;AAAA,EACN,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO;AACT,CAAA,EAAuB;AACrB,EAAA,uBACEC,cAAA,CAACC,yBAAA,EAAA,EAAQ,OAAA,EAAS,KAAA,EAChB,QAAA,kBAAAD,cAAA;AAAA,IAACE,wBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,YAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAe,QAAA;AAAA,MACf,eAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,QAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,QAAA,OAAA,EAAQ;AAAA,MACV,CAAA;AAAA,MACA,SAAA,EAAWH,oBAAA;AAAA,QACT,IAAA,KAAS,OAAO,SAAA,GAAY,SAAA;AAAA,QAC5B,UAAA;AAAA,QAAA,CACC,UAAU,QAAA,KACT;AAAA,OACJ;AAAA,MAEA,yCAAC,IAAA,EAAA,EAAK,IAAA,EAAM,IAAA,KAAS,IAAA,GAAO,KAAK,EAAA,EAAI;AAAA;AAAA,GACvC,EACF,CAAA;AAEJ;ACvDA,IAAM,UAAA,GAA4B,CAAC,MAAA,EAAQ,MAAA,EAAQ,iBAAiB,OAAO,CAAA;AAEpE,IAAM,mBAAA,GAAmD;AAAA,EAC9D,IAAA,EAAM,MAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,aAAA,EAAe,eAAA;AAAA,EACf,KAAA,EAAO;AACT;AAEA,IAAM,cAAA,GAGF;AAAA,EACF,MAAA,EAAQ,QAAA;AAAA,EACR,QAAA,EAAU,SAAA;AAAA,EACV,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,eAAA,GAAmC,CAAC,SAAA,EAAW,MAAA,EAAQ,QAAQ,CAAA;AAErE,IAAM,WAAA,GAGF;AAAA,EACF,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAMI,wBAAA,EAAW;AAAA,EAC9C,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,MAAMC,4BAAA,EAAe;AAAA,EAC7C,MAAA,EAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,MAAMC,qBAAA;AACnC,CAAA;AAMA,SAAS,UAAA,CAAW;AAAA,EAClB,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAQG;AACD,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAAwC;AAChE,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AAClC,IAAA,IAAI,EAAE,MAAA,KAAW,CAAA,CAAE,QAAQ,SAAA,IAAa,CAAA,CAAE,QAAQ,WAAA,CAAA,EAAc;AAC9D,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAA,GAAS,OAAA,EAAS,CAAA,CAAE,GAAA,KAAQ,SAAA,GAAY,KAAK,CAAC,CAAA;AAAA,IAChD,WAAW,CAAA,CAAE,GAAA,KAAQ,SAAA,IAAa,CAAA,CAAE,QAAQ,WAAA,EAAa;AACvD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AACzC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAAA,QACjB,IAAA,CAAK,iBAA8B,qBAAqB;AAAA,OAC1D;AACA,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,aAA4B,CAAA;AACrD,MAAA,IAAA,CACE,EAAE,GAAA,KAAQ,SAAA,GACN,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA,GACjB,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,GAAS,CAAA,EAAG,IAAI,CAAC,CACrC,GAAG,KAAA,EAAM;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA;AAAA;AAAA;AAAA;AAAA,oBAIEC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,mBAAA;AAAA,QACV,mBAAiB,OAAA,CAAQ,EAAA;AAAA,QACzB,QAAA,EAAU,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,MAAA;AAAA,QAC7B,SAAA,EAAW,IAAA,CAAK,OAAA,GAAU,gBAAA,GAAmB,MAAA;AAAA,QAC7C,cACE,IAAA,CAAK,OAAA,GACD,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,iCAAA,CAAA,GACnB,MAAA;AAAA,QAEL,GAAG,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,EAAE,CAAA;AAAA,QAC5B,SAAA,EAAWP,oBAAA;AAAA,UACT,yGAAA;AAAA,UACA,yEAAA;AAAA,UACA,KAAK,OAAA,IAAW,oCAAA;AAAA,UAChBQ,sCAAA,CAAqB,IAAA,EAAM,OAAA,CAAQ,EAAE;AAAA,SACvC;AAAA,QAGC,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,0BACJP,cAAAA;AAAA,YAACQ,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,EAAA;AAAA,cACN,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA,8BAGZR,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAuC,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BAE1DA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWD,oBAAA;AAAA,gBACT,6BAAA;AAAA,gBACA,QAAQ,QAAA,IAAY;AAAA,eACtB;AAAA,cAEC,QAAA,EAAA,OAAA,CAAQ;AAAA;AAAA,WACX;AAAA,UACC,QAAQ,IAAA,oBACPO,eAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kCAAA;AAAA,cACV,KAAA,EAAO,QAAQ,IAAA,CAAK,OAAA;AAAA,cAEnB,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,IAAA,CAAK,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,QAAQ,IAAA,CAAK;AAAA;AAAA;AAAA,WACtC;AAAA,UAED,OAAA,CAAQ,QAAA,oBACPN,cAAAA,CAACS,uBAAA,EAAA,EAAM,OAAA,EAAS,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA,EAAG,IAAA,EAAK,IAAA,EACpD,kBAAQ,QAAA,EACX,CAAA;AAAA,UAED,OAAA,CAAQ,IAAA,KAAS,aAAA,oBAChBT,cAAAA,CAACS,2BAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,IAAA,EAAK,QAAA,EAAA,aAAA,EAErC,CAAA;AAAA,UAED,OAAA,CAAQ,QAAA,oBACPH,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,SAAA;AAAA,YAC3C,OAAA,CAAQ;AAAA,WAAA,EACb,CAAA;AAAA,UAED,OAAA,CAAQ,SAAA,oBACPA,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YACvC,OAAA,CAAQ;AAAA,WAAA,EACjB,CAAA;AAAA,UAED,OAAA,CAAQ,4BACPN,cAAAA,CAACS,2BAAM,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,IAAA,EAAK,QAAA,EAAA,UAAA,EAErC,CAAA;AAAA,UAED,OAAA,CAAQ,IAAA,oBACPH,eAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kDAAA,EACd,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAACI,4BAAA,EAAA,EAAe,IAAA,EAAM,EAAA,EAAI,WAAU,uBAAA,EAAwB,CAAA;AAAA,4BAC5DJ,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,kBAAQ,IAAA,EAAK;AAAA,WAAA,EAChE,CAAA;AAAA,UAGD,CAAC,QAAA,IAAY,OAAA,CAAQ,MAAA,GAAS,CAAA,oBAC7BA,cAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAO,CAAA,YAAA,EAAe,QAAQ,QAAQ,CAAA,CAAA,EACrD,kBAAQ,GAAA,CAAI,CAAC,2BACZA,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO,WAAA,CAAY,MAAM,CAAA,CAAE,KAAA;AAAA,cAC3B,IAAA,EAAM,WAAA,CAAY,MAAM,CAAA,CAAE,IAAA;AAAA,cAC1B,OAAA,EAAS,MAAM,QAAA,GAAW,OAAA,EAAS,MAAM;AAAA,aAAA;AAAA,YAHpC;AAAA,WAKR,CAAA,EACH;AAAA;AAAA;AAAA;AAEJ;AAEJ;AAqBO,IAAM,WAAA,GAAoBU,iBAAA,CAAA,UAAA;AAAA,EAC/B,CACE;AAAA,IACE,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,wBAAA;AAAA,IACA,KAAA,GAAQ,WAAA;AAAA,IACR,OAAA,GAAU,eAAA;AAAA,IACV,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,aAAA,EAAe,UAAA;AAAA,IACf,GAAG;AAAA,KAEL,GAAA,KACG;AACH,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,qCAAA,EAAoB;AAE5D,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACvC,IAAA;AAAA,MACA,KAAA,EAAO,oBAAoB,IAAI,CAAA;AAAA,MAC/B,KAAA,EAAO,UAAU,MAAA,CAAO,CAAC,OAAO,CAAA,CAAE,IAAA,IAAQ,aAAa,IAAI;AAAA,KAC7D,CAAE,EAAE,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA;AAEpC,IAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,KAAW,CAAA;AAGnC,IAAA,MAAM,MAAA,GAAeD,iBAAA,CAAA,WAAA;AAAA,MACnB,CAAC,EAAA,KAAe,SAAA,CAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,EAAG,IAAA,IAAQ,OAAA;AAAA,MAC5D,CAAC,SAAS;AAAA,KACZ;AACA,IAAA,MAAM,OAAOE,gCAAA,CAAe;AAAA,MAC1B,KAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,MAC9B,WACE,QAAA,IAAY,CAAC,SAAA,GACT,MAAA,GACA,CAAC,GAAA,KAAQ;AACP,QAAA,eAAA,CAAgB,wBAAwB,CAAA;AACxC,QAAA,SAAA,CAAU,GAAG,CAAA;AAAA,MACf,CAAA;AAAA,MACN,SAAA,EAAW,CAAC,OAAA,EAAS,MAAA,KAAW,OAAO,OAAO,CAAA,KAAM,OAAO,MAAM;AAAA,KAClE,CAAA;AAGD,IAAA,MAAM,WAAA,GAAoBF,iBAAA,CAAA,WAAA;AAAA,MACxB,CAAC,SAAkB,GAAA,KAAgB;AACjC,QAAA,IAAI,QAAA,IAAY,CAAC,SAAA,EAAW;AAC5B,QAAA,MAAM,MAAM,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACrC,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAA;AACnC,QAAA,IAAI,KAAK,IAAA,GAAO,GAAA;AAChB,QAAA,OACE,EAAA,IAAM,CAAA,IACN,EAAA,GAAK,SAAA,CAAU,MAAA,IAAA,CACd,SAAA,CAAU,EAAE,CAAA,CAAE,IAAA,IAAQ,OAAA,OAAc,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAA,EACrD;AACA,UAAA,EAAA,IAAM,GAAA;AAAA,QACR;AACA,QAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,IAAM,SAAA,CAAU,MAAA,EAAQ;AACtC,QAAA,CAAC,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,EAAE,CAAC,CAAA,GAAI,CAAC,GAAA,CAAI,EAAE,CAAA,EAAG,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1C,QAAA,eAAA;AAAA,UACE,GAAG,OAAA,CAAQ,QAAQ,UAAU,GAAA,KAAQ,EAAA,GAAK,OAAO,MAAM,CAAA;AAAA,SACzD;AACA,QAAA,SAAA,CAAU,GAAG,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAC,SAAA,EAAW,SAAA,EAAW,QAAA,EAAU,eAAe;AAAA,KAClD;AAEA,IAAA,uBACEJ,eAAA;AAAA,MAACO,sBAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAWd,oBAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,QACjC,aAAA,EAAa,UAAA;AAAA,QACZ,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,IAAA,oBACTC,cAAAA,CAACc,4BAAA,EAAA,EAAW,WAAU,8CAAA,EACpB,QAAA,kBAAAR,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uFAAA,EACZ,QAAA,EAAA;AAAA,4BAAAN,cAAAA;AAAA,cAACe,6BAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAM,EAAA;AAAA,gBACN,SAAA,EAAU;AAAA;AAAA,aACZ;AAAA,YACC;AAAA,WAAA,EACH,CAAA,EACF,CAAA;AAAA,0BAGFT,eAAA,CAACU,6BAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EACpB,QAAA,EAAA;AAAA,YAAA,KAAA,mBACCV,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,cAAA,gBAAA,mBACCA,eAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mDAAA,EACX,QAAA,EAAA;AAAA,gCAAAN,eAACS,uBAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAK,QAAA,EAAA,QAAA,EAEnC,CAAA;AAAA,gBAAQ;AAAA,eAAA,EAEV,oBAEAT,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAgC,QAAA,EAAA,8BAAA,EAE7C,CAAA;AAAA,cAED,CAAC,QAAA,IAAY,wBAAA,oBACZA,cAAAA;AAAA,gBAACE,wBAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAS,mBAAmB,WAAA,GAAc,SAAA;AAAA,kBAC1C,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,MAAM,wBAAA,CAAyB,CAAC,gBAAgB,CAAA;AAAA,kBAExD,6BACG,0BAAA,GACA;AAAA;AAAA;AACN,aAAA,EAEJ,CAAA,GAEA,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,IAAA,EAAM,KAAA,EAAO,KAAA,EAAM,qBAC/BI,eAAA,CAAC,SAAA,EAAA,EAAmB,YAAA,EAAY,KAAA,EAC9B,QAAA,EAAA;AAAA,8BAAAN,cAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,uBAAA;AAAA,kBACV,SAAA,EAAU,2FAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BACAA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,QACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,OAAA,qBACVA,cAAAA;AAAA,gBAAC,UAAA;AAAA,gBAAA;AAAA,kBAEC,OAAA;AAAA,kBACA,OAAA;AAAA,kBACA,QAAA;AAAA,kBACA,IAAA;AAAA,kBACA,MAAA,EAAQ,WAAA;AAAA,kBACR;AAAA,iBAAA;AAAA,gBANK,OAAA,CAAQ;AAAA,eAQhB,CAAA,EACH;AAAA,aAAA,EAAA,EAnBY,IAoBd,CACD,CAAA;AAAA,YAGF,CAAC,QAAA,KAAa,SAAA,IAAa,0BAC1BM,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,aAAA,EAEtF,CAAA;AAAA,cACC,SAAA;AAAA,cACA,yBACCA,cAAAA;AAAA,gBAACE,wBAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,SAAA;AAAA,kBACR,IAAA,EAAK,IAAA;AAAA,kBACL,OAAA,EAAS,KAAA;AAAA,kBACT,QAAA,kBAAUF,cAAAA,CAACiB,sBAAA,EAAA,EAAS,MAAM,EAAA,EAAI,CAAA;AAAA,kBAC9B,SAAA,EAAU,yCAAA;AAAA,kBACX,QAAA,EAAA;AAAA;AAAA;AAED,aAAA,EAEJ;AAAA,WAAA,EAEJ,CAAA;AAAA,0BAEAjB,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAU,QAAA,EAAS,SAAA,EAAU,WAC/B,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;ACzY1B,IAAM,iBAAA,GAA0BkB,iBAAA,CAAA,aAAA;AAAA,EAC9B;AACF,CAAA;AAcO,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,QAAA,GAAW,SAAA;AAAA,EACX,MAAA,GAAS,IAAA;AAAA,EACT,MAAA;AAAA,EACA;AACF,CAAA,EAAgD;AAC9C,EAAA,MAAM,KAAA,GAAcA,iBAAA,CAAA,OAAA;AAAA,IAClB,OAAO,EAAE,SAAA,EAAW,QAAA,EAAU,QAAQ,MAAA,EAAO,CAAA;AAAA,IAC7C,CAAC,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,MAAM;AAAA,GACtC;AACA,EAAA,uBACElB,cAAAA,CAAC,iBAAA,CAAkB,QAAA,EAAlB,EAA2B,OACzB,QAAA,EACH,CAAA;AAEJ;AAMO,SAAS,mBAAA,GAAuD;AACrE,EAAA,OAAakB,6BAAW,iBAAiB,CAAA;AAC3C;ACvDA,SAAS,KAAA,GAAgB;AACvB,EAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACpE;AAMA,IAAM,YAAA,GAAe;AAAA,EACnB,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAO;AAAA,EAC/B,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAgB;AAAA,EACjD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA;AAC3B,CAAA;AAEA,SAAS,aAAA,CAAc;AAAA,EACrB,OAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,iBAAA,CAAA,QAAA;AAAA,IAC9B,MAAM,WAAW,EAAE,EAAA,EAAI,OAAM,EAAG,QAAA,EAAU,EAAA,EAAI,IAAA,EAAM,MAAA;AAAO,GAC7D;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KACb,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,GAAG,CAAA,EAAE,CAAE,CAAA;AAGxC,EAAA,MAAM,OAAA,GAAgBA,yBAAuB,IAAI,CAAA;AACjD,EAAMA,4BAAU,MAAM;AACpB,IAAA,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,OAAO,CAAA,EAAG,KAAA,EAAM;AAAA,EACjD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,QAAA,CAAS,IAAA,GAAO,MAAA,GAAS,CAAA;AAK/C,EAAA,MAAM,MAAA,GAAA,CAAU,KAAA,CAAM,IAAA,IAAQ,MAAA,MAAY,MAAA;AAE1C,EAAA,uBACEb,eAAAA,CAACc,uBAAA,EAAA,EAAM,IAAA,EAAI,IAAA,EAAC,YAAA,EAAc,CAAC,CAAA,KAAM,CAAC,CAAA,IAAK,OAAA,EAAQ,EAAG,MAAK,IAAA,EACrD,QAAA,EAAA;AAAA,oBAAAd,gBAACe,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAArB,cAAAA,CAACsB,4BAAA,EAAA,EAAY,QAAA,EAAA,OAAA,GAAU,iBAAA,GAAoB,aAAA,EAAc,CAAA;AAAA,sBACzDtB,eAACuB,4BAAA,EAAA,EAAW;AAAA,KAAA,EACd,CAAA;AAAA,oBACAvB,cAAAA,CAACwB,2BAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EACnB,QAAA,kBAAAlB,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAU,UAAA,EAC3B,QAAA,EAAA;AAAA,sBAAAA,eAAAA;AAAA,QAACmB,4BAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAM,WAAA;AAAA,UACN,WAAA,EAAY,6EAAA;AAAA,UACZ,KAAA,EAAO,MAAM,IAAA,IAAQ,SAAA;AAAA,UACrB,eAAe,CAAC,CAAA,KAAM,MAAM,EAAE,IAAA,EAAM,GAAkB,CAAA;AAAA,UACtD,WAAA,EAAY,YAAA;AAAA,UACZ,IAAA,EAAK,IAAA;AAAA,UAEL,QAAA,EAAA;AAAA,4BAAAzB,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,SAAA,EAAU,OAAM,SAAA,EAAU,CAAA;AAAA,4BACvC1B,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,aAAA,EAAc,OAAM,aAAA,EAAc;AAAA;AAAA;AAAA,OACjD;AAAA,sBAEA1B,cAAAA;AAAA,QAAC2B,wBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,YAAA;AAAA,UACT,KAAA,EAAO,MAAM,IAAA,IAAQ,MAAA;AAAA,UACrB,aAAA,EAAe,CAAC,CAAA,KAAM;AACpB,YAAA,MAAM,IAAA,GAAO,CAAA;AAEb,YAAA,KAAA,CAAM;AAAA,cACJ,IAAA;AAAA,cACA,GAAI,IAAA,KAAS,MAAA,IAAU,EAAE,MAAM,MAAA;AAAU,aAC1C,CAAA;AAAA,UACH;AAAA;AAAA,OACF;AAAA,MAEC,UAAU,UAAA,mBACTrB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACpC5B,cAAAA;AAAA,UAAC,UAAA,CAAW,SAAA;AAAA,UAAX;AAAA,YACC,UAAU,UAAA,CAAW,QAAA;AAAA,YACrB,QAAQ,UAAA,CAAW,MAAA;AAAA,YACnB,OAAA,EAAS,CAAC,KAAK,CAAA;AAAA,YACf,IAAA,EAAI,IAAA;AAAA,YACJ,aAAA,EAAe,KAAA;AAAA,YACf,WAAA,EAAY,8CAAA;AAAA,YACZ,QAAA,EAAU,CAAC,MAAA,KACT,KAAA,CAAM;AAAA,cACJ,UAAU,MAAA,CAAO,KAAA;AAAA,cACjB,IAAA,EAAM;AAAA,gBACJ,QAAQ,MAAA,CAAO,QAAA;AAAA,gBACf,MAAM,MAAA,CAAO,QAAA;AAAA,gBACb,SAAS,MAAA,CAAO;AAAA;AAClB,aACD,CAAA;AAAA,YAEH,UAAA,EAAY,CAAC,IAAA,KACX,KAAA,CAAM,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,MAAA,EAAW;AAAA;AAAA,SAE7C;AAAA,wBACAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCACV,QAAA,EAAA,KAAA,CAAM,IAAA,GACH,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAA,GAC9C,KAAA,CAAM,WACJ,CAAA,oBAAA,EAAuB,KAAA,CAAM,QAAQ,CAAA,CAAA,CAAA,GACrC,kEAAA,EACR;AAAA,OAAA,EACF,CAAA,mBAEAM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBAClC5B,cAAAA;AAAA,UAAC6B,uBAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,UAAA;AAAA,YACH,OAAO,KAAA,CAAM,QAAA;AAAA,YACb,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACrD,OAAA,EACF,CAAA;AAAA,sBAGFvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,cAAA,EAAe,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBACtC5B,cAAAA;AAAA,UAAC6B,uBAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,cAAA;AAAA,YACH,KAAA,EAAO,MAAM,QAAA,IAAY,EAAA;AAAA,YACzB,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACrD,OAAA,EACF,CAAA;AAAA,sBAEAvB,eAAAA;AAAA,QAACmB,4BAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,cAAA;AAAA,UACL,KAAA,EAAM,UAAA;AAAA,UACN,KAAA,EAAO,MAAM,QAAA,IAAY,EAAA;AAAA,UACzB,aAAA,EAAe,CAAC,CAAA,KACd,KAAA,CAAM,EAAE,QAAA,EAAW,CAAA,IAAK,QAA+B,CAAA;AAAA,UAEzD,WAAA,EAAY,YAAA;AAAA,UACZ,IAAA,EAAK,IAAA;AAAA,UAEL,QAAA,EAAA;AAAA,4BAAAzB,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,MAAA,EAAO,OAAM,MAAA,EAAO,CAAA;AAAA,4BACjC1B,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,UAAA,EAAW,OAAM,UAAA,EAAW,CAAA;AAAA,4BACzC1B,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,QAAA,EAAS,OAAM,QAAA,EAAS;AAAA;AAAA;AAAA,OACvC;AAAA,sBAEApB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,wBACrC5B,cAAAA;AAAA,UAAC8B,2BAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,WAAA;AAAA,YACH,KAAA,EAAO,MAAM,SAAA,IAAa,EAAA;AAAA,YAC1B,UAAU,CAAC,CAAA,KAAM,MAAM,EAAE,SAAA,EAAW,GAAG;AAAA;AAAA;AACzC,OAAA,EACF,CAAA;AAAA,sBAEAxB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC9B5B,cAAAA;AAAA,UAAC+B,0BAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,UAAA;AAAA,YACH,KAAA,EAAO,MAAM,IAAA,IAAQ,EAAA;AAAA,YACrB,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,YAC/C,IAAA,EAAM;AAAA;AAAA;AACR,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBACAzB,gBAAC0B,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAhC,eAACE,wBAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,SAAS,QAAA,EAAA,QAAA,EAE9C,CAAA;AAAA,sBACAF,cAAAA;AAAA,QAACE,wBAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,YAAA,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,QAAA,EAAU,MAAM,QAAA,CAAS,IAAA,IAAQ,CAAA;AACpD,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA,UAAU,CAAC,OAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAyBO,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA,EAAW,UAAA;AAAA,EACX,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,wBAAA;AAAA,EACA,KAAA,GAAQ,WAAA;AAAA,EACR,UAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAA2C;AACzC,EAAA,MAAM,eAAe,UAAA,KAAe,MAAA;AACpC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUiB,iBAAA,CAAA,QAAA;AAAA,IACpC,oBAAoB;AAAC,GACvB;AACA,EAAA,MAAM,SAAA,GAAY,eAAe,UAAA,GAAa,QAAA;AAG9C,EAAA,MAAM,oBAAoB,mBAAA,EAAoB;AAC9C,EAAA,MAAM,mBAAA,GACJ,UAAA,KAAe,KAAA,GACX,MAAA,GACC,cAAc,iBAAA,IAAqB,MAAA;AAE1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,2BAAsB,IAAI,CAAA;AAC5D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,2BAAS,EAAE,CAAA;AAEnD,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAoB;AAClC,IAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,IAAA,QAAA,GAAW,IAAI,CAAA;AAEf,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,gBAAA,EAAkB;AACvC,MAAA,wBAAA,GAA2B,KAAK,CAAA;AAAA,IAClC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,OAAA,EAAkB,MAAA,KAA0B;AAChE,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,QAAA;AACH,QAAA,MAAA,CAAO,SAAA,CAAU,OAAO,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,OAAA,CAAQ,EAAE,CAAC,CAAA;AACnD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,SAAA,CAAU,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,MAAA;AACH,QAAA,YAAA,CAAa,OAAA,CAAQ,QAAQ,EAAE,CAAA;AAC/B,QAAA,SAAA,CAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,CAAA;AACnC,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GACJ,eAAA,IAAmB,mBAAA,IAAuB,CAAC,2BACzCnB,cAAAA;AAAA,IAAC,mBAAA,CAAoB,SAAA;AAAA,IAApB;AAAA,MACC,UAAU,mBAAA,CAAoB,QAAA;AAAA,MAC9B,QAAQ,mBAAA,CAAoB,MAAA;AAAA,MAC5B,OAAA,EAAS,CAAC,KAAK,CAAA;AAAA,MACf,IAAA,EAAI,IAAA;AAAA,MACJ,aAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAY,kFAAA;AAAA,MACZ,QAAA,EAAU,CAAC,MAAA,KACT,MAAA,CAAO;AAAA,QACL,GAAG,SAAA;AAAA,QACH;AAAA,UACE,IAAI,KAAA,EAAM;AAAA,UACV,UAAU,MAAA,CAAO,KAAA;AAAA,UACjB,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA,YACJ,QAAQ,MAAA,CAAO,QAAA;AAAA,YACf,MAAM,MAAA,CAAO,QAAA;AAAA,YACb,SAAS,MAAA,CAAO;AAAA;AAClB;AACF,OACD,CAAA;AAAA,MAEH,YAAY,CAAC,IAAA;AAAA;AAAA;AAAA,QAGX,MAAA,CAAO,CAAC,GAAG,SAAA,EAAW,EAAE,EAAA,EAAI,KAAA,EAAM,EAAG,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,MAAA,EAAQ,CAAC;AAAA;AAAA;AAAA,GAExE,GACE,MAAA;AAEN,EAAA,uBACEM,gBAAA2B,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAjC,cAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,gBAAA;AAAA,QACA,wBAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,CAAC,GAAA,KACV,MAAA;AAAA,UACE,CAAC,GAAG,SAAS,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,OAAA,CAAQ,EAAE,EAAE,CAAA,GAAI,IAAI,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAC;AAAA,SACrE;AAAA,QAEF,SAAA;AAAA,QACA,OAAO,MAAM,SAAA,CAAU,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,QACtC,QAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA,EAAa;AAAA;AAAA,KACf;AAAA,IAEC,WAAW,MAAA,CAAO,IAAA,KAAS,aAAa,MAAA,CAAO,IAAA,KAAS,0BACvDA,cAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,MAAA,CAAO,IAAA,KAAS,SAAA,GAAY,OAAO,OAAA,GAAU,MAAA;AAAA,QACtD,UAAA,EAAY,mBAAA;AAAA,QACZ,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,QAC7B,MAAA,EAAQ,CAAC,KAAA,KAAU;AACjB,UAAA,IAAI,MAAA,CAAO,SAAS,SAAA,EAAW;AAC7B,YAAA,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,OAAO,KAAA,CAAM,EAAA,GAAK,KAAA,GAAQ,CAAE,CAAC,CAAA;AAAA,UAC9D,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,CAAC,GAAG,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,UAC9B;AAAA,QACF;AAAA,OAAA;AAAA,MAVK,MAAA,CAAO,IAAA,KAAS,SAAA,GAAY,MAAA,CAAO,QAAQ,EAAA,GAAK;AAAA,KAWvD;AAAA,IAGD,QAAQ,IAAA,KAAS,MAAA,oBAChBM,eAAAA,CAACc,2BAAM,IAAA,EAAI,IAAA,EAAC,YAAA,EAAc,CAAC,MAAM,CAAC,CAAA,IAAK,UAAU,IAAI,CAAA,EAAG,MAAK,IAAA,EAC3D,QAAA,EAAA;AAAA,sBAAAd,gBAACe,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAArB,cAAAA,CAACsB,gCAAW,QAAA,EAAA,eAAA,EAAa,CAAA;AAAA,wBACzBtB,eAACuB,4BAAA,EAAA,EAAW;AAAA,OAAA,EACd,CAAA;AAAA,sBACAjB,eAAAA,CAACkB,2BAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EACnB,QAAA,EAAA;AAAA,wBAAAxB,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA,MAAA,CAAO,QAAQ,QAAA,EAClB,CAAA;AAAA,wBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,cAAA,EAAe,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,0BAClC5B,cAAAA;AAAA,YAAC+B,0BAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,cAAA;AAAA,cACH,KAAA,EAAO,SAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC5C,IAAA,EAAM;AAAA;AAAA;AACR,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBACAzB,gBAAC0B,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAhC,cAAAA,CAACE,4BAAO,OAAA,EAAQ,WAAA,EAAY,SAAS,MAAM,SAAA,CAAU,IAAI,CAAA,EAAG,QAAA,EAAA,QAAA,EAE5D,CAAA;AAAA,wBACAF,cAAAA;AAAA,UAACE,wBAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,cAAA,MAAA;AAAA,gBACE,SAAA,CAAU,GAAA;AAAA,kBAAI,CAAC,CAAA,KACb,CAAA,CAAE,EAAA,KAAO,OAAO,OAAA,CAAQ,EAAA,GACpB,EAAE,GAAG,GAAG,IAAA,EAAM,SAAA,CAAU,IAAA,EAAK,IAAK,QAAU,GAC5C;AAAA;AACN,eACF;AACA,cAAA,SAAA,CAAU,IAAI,CAAA;AAAA,YAChB,CAAA;AAAA,YACD,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACjRA,IAAM,WAAA,GAAkC;AAAA,EACtC,cAAA;AAAA,EACA,QAAA;AAAA,EACA,qBAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,wBAAA,GAA6D;AAAA,EACxE,YAAA,EAAc,cAAA;AAAA,EACd,MAAA,EAAQ,oBAAA;AAAA,EACR,qBAAA,EAAuB,wBAAA;AAAA,EACvB,YAAA,EAAc,YAAA;AAAA,EACd,OAAA,EAAS;AACX;AAEA,IAAMgC,gBAAAA,GAAsC;AAAA,EAC1C,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAMC,YAAAA,GAGF;AAAA,EACF,IAAA,EAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAMC,8BAAA,EAAiB;AAAA,EAC9C,OAAA,EAAS,EAAE,KAAA,EAAO,SAAA,EAAW,MAAMjC,wBAAA,EAAW;AAAA,EAC9C,MAAA,EAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,MAAMkC,2BAAA,EAAY;AAAA,EAC7C,UAAA,EAAY,EAAE,KAAA,EAAO,UAAA,EAAY,MAAMC,+BAAA,EAAkB;AAAA,EACzD,IAAA,EAAM,EAAE,KAAA,EAAO,OAAA,EAAS,MAAMlC,4BAAA,EAAe;AAAA,EAC7C,MAAA,EAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,MAAMC,qBAAA,EAAQ;AAAA,EACzC,SAAA,EAAW,EAAE,KAAA,EAAO,SAAA,EAAW,MAAMkC,2BAAA,EAAc;AAAA,EACnD,WAAA,EAAa,EAAE,KAAA,EAAO,WAAA,EAAa,MAAMC,6BAAA;AAC3C,CAAA;AAEA,IAAM,kBAAA,GAIA;AAAA,EACJ,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,QAAA,EAAU,MAAMC,0BAAA,EAAa;AAAA,EACxD;AAAA,IACE,MAAA,EAAQ,qBAAA;AAAA,IACR,KAAA,EAAO,4BAAA;AAAA,IACP,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,EAAE,MAAA,EAAQ,YAAA,EAAc,KAAA,EAAO,YAAA,EAAc,MAAMC,4BAAA,EAAe;AAAA,EAClE,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,MAAMC,4BAAA;AAC/C,CAAA;AAMA,SAAS,aAAA,CAAc;AAAA,EACrB,UAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EASG;AACD,EAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAAwC;AAChE,IAAA,IAAI,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AAClC,IAAA,IAAI,EAAE,MAAA,KAAW,CAAA,CAAE,QAAQ,SAAA,IAAa,CAAA,CAAE,QAAQ,WAAA,CAAA,EAAc;AAC9D,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAA,GAAS,UAAA,EAAY,CAAA,CAAE,GAAA,KAAQ,SAAA,GAAY,KAAK,CAAC,CAAA;AAAA,IACnD,WAAW,CAAA,CAAE,GAAA,KAAQ,SAAA,IAAa,CAAA,CAAE,QAAQ,WAAA,EAAa;AACvD,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AACzC,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAAA,QACjB,IAAA,CAAK,iBAA8B,wBAAwB;AAAA,OAC7D;AACA,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,CAAA,CAAE,aAA4B,CAAA;AACrD,MAAA,IAAA,CACE,EAAE,GAAA,KAAQ,SAAA,GACN,KAAK,GAAA,CAAI,CAAA,EAAG,IAAI,CAAC,CAAA,GACjB,IAAA,CAAK,GAAA,CAAI,KAAK,MAAA,GAAS,CAAA,EAAG,IAAI,CAAC,CACrC,GAAG,KAAA,EAAM;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA;AAAA;AAAA;AAAA;AAAA,oBAIEtC,eAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,mBAAA;AAAA,QACV,sBAAoB,UAAA,CAAW,EAAA;AAAA,QAC/B,QAAA,EAAU,IAAA,CAAK,OAAA,GAAU,CAAA,GAAI,MAAA;AAAA,QAC7B,SAAA,EAAW,IAAA,CAAK,OAAA,GAAU,gBAAA,GAAmB,MAAA;AAAA,QAC7C,cACE,IAAA,CAAK,OAAA,GACD,CAAA,EAAG,UAAA,CAAW,IAAI,CAAA,iCAAA,CAAA,GAClB,MAAA;AAAA,QAEL,GAAG,IAAA,CAAK,QAAA,CAAS,UAAA,CAAW,EAAE,CAAA;AAAA,QAC/B,SAAA,EAAWP,oBAAA;AAAA,UACT,yGAAA;AAAA,UACA,yEAAA;AAAA,UACA,KAAK,OAAA,IAAW,oCAAA;AAAA,UAChBQ,sCAAA,CAAqB,IAAA,EAAM,UAAA,CAAW,EAAE;AAAA,SAC1C;AAAA,QAGC,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,0BACJP,cAAAA;AAAA,YAACQ,8BAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,EAAA;AAAA,cACN,aAAA,EAAW,IAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA,8BAGZR,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAuC,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,0BAE1DA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,qBAAW,IAAA,EAAK,CAAA;AAAA,UAC9D,UAAA,CAAW,wBACVM,eAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,kCAAA;AAAA,cACV,KAAA,EAAO,WAAW,IAAA,CAAK,OAAA;AAAA,cAEtB,QAAA,EAAA;AAAA,gBAAA,UAAA,CAAW,IAAA,CAAK,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,WAAW,IAAA,CAAK;AAAA;AAAA;AAAA,WAC5C;AAAA,UAED,UAAA,CAAW,uBACVN,cAAAA,CAAC,UAAK,SAAA,EAAU,+BAAA,EAAiC,qBAAW,GAAA,EAAI,CAAA;AAAA,UAEjE,WAAW,OAAA,oBACVA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDAAmD,QAAA,EAAA,SAAA,EAEnE,CAAA;AAAA,UAED,WAAW,gBAAA,oBACVM,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,mBAAA;AAAA,YAC5B,UAAA,CAAW;AAAA,WAAA,EAC/B,CAAA;AAAA,UAAA,CAEA,UAAA,CAAW,QAAQ,UAAA,CAAW,IAAA,qBAC9BA,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,YAAA,UAAA,CAAW,IAAA,oBACVA,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yDAAA,EACd,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAACI,4BAAA,EAAA,EAAe,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,cACzB,UAAA,CAAW;AAAA,aAAA,EACd,CAAA;AAAA,YAED,WAAW,IAAA,oBACVE,eAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yDAAA,EACd,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAACsC,+BAAA,EAAA,EAAkB,IAAA,EAAM,EAAA,EAAI,CAAA;AAAA,cAAE,QAAA;AAAA,cACxB,UAAA,CAAW;AAAA,aAAA,EACpB;AAAA,WAAA,EAEJ,CAAA;AAAA,UAGD,CAAC,4BACAhC,eAAAA,CAAC,oBAAiB,KAAA,EAAO,CAAA,YAAA,EAAe,UAAA,CAAW,IAAI,CAAA,CAAA,EACpD,QAAA,EAAA;AAAA,YAAA,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,oBACtBN,cAAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAOmC,aAAY,IAAA,CAAK,KAAA;AAAA,gBACxB,IAAA,EAAMA,aAAY,IAAA,CAAK,IAAA;AAAA,gBACvB,OAAA,EAAS,MAAM,QAAA,GAAW,UAAA,EAAY,MAAM;AAAA;AAAA,aAC9C;AAAA,YAED,kBAAA,CAAmB,IAAI,CAAC,EAAE,QAAQ,KAAA,EAAO,IAAA,uBACxCnC,cAAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBAEC,KAAA;AAAA,gBACA,IAAA;AAAA,gBACA,MAAA,EAAQ,WAAW,MAAA,KAAW,MAAA;AAAA,gBAC9B,OAAA,EAAS,MAAM,cAAA,GAAiB,UAAA,EAAY,MAAM;AAAA,eAAA;AAAA,cAJ7C;AAAA,aAMR,CAAA;AAAA,YACA,OAAA,CACE,MAAA,CAAO,CAAC,CAAA,KAA8C,CAAA,KAAM,MAAM,CAAA,CAClE,GAAA,CAAI,CAAC,MAAA,qBACJA,cAAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBAEC,KAAA,EAAOmC,YAAAA,CAAY,MAAM,CAAA,CAAE,KAAA;AAAA,gBAC3B,IAAA,EAAMA,YAAAA,CAAY,MAAM,CAAA,CAAE,IAAA;AAAA,gBAC1B,OAAA,EAAS,MAAM,QAAA,GAAW,UAAA,EAAY,MAAM;AAAA,eAAA;AAAA,cAHvC;AAAA,aAKR;AAAA,WAAA,EACL;AAAA;AAAA;AAAA;AAEJ;AAEJ;AA2BO,IAAM,cAAA,GAAuBU,iBAAA,CAAA,UAAA;AAAA,EAIlC,CACE;AAAA,IACE,WAAA;AAAA,IACA,KAAA,GAAQ,wBAAA;AAAA,IACR,cAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA,GAAUX,gBAAAA;AAAA,IACV,eAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,iBAAA,GAAoB,6BAAA;AAAA,IACpB,YAAA,GAAe,0BAAA;AAAA,IACf,SAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA,EAAe,UAAA;AAAA,IACf,GAAG;AAAA,KAEL,GAAA,KACG;AAEH,IAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIvB,qCAAA,EAAoB;AAE5D,IAAA,MAAM,kBAAA,GAA2BkC,iBAAA,CAAA,WAAA;AAAA,MAC/B,CAAC,YAAwB,MAAA,KAA6B;AACpD,QAAA,eAAA;AAAA,UACE,GAAG,UAAA,CAAW,IAAI,CAAA,QAAA,EAAW,wBAAA,CAAyB,MAAM,CAAC,CAAA;AAAA,SAC/D;AACA,QAAA,cAAA,GAAiB,YAAY,MAAM,CAAA;AAAA,MACrC,CAAA;AAAA,MACA,CAAC,gBAAgB,eAAe;AAAA,KAClC;AAEA,IAAA,MAAM,MAAA,GAAS,WAAA,CAAY,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC1C,MAAA;AAAA,MACA,KAAA,EAAO,yBAAyB,MAAM,CAAA;AAAA,MACtC,OAAO,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM;AAAA,KACtD,CAAE,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,CAAA,CAAE,MAAA,KAAW,cAAc,CAAA;AAKnE,IAAA,MAAM,UAAA,GAAmBA,iBAAA,CAAA,OAAA;AAAA,MACvB,MAAM,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,MAAM,CAAU,CAAC,CAAA;AAAA,MAC/D,CAAC,WAAW;AAAA,KACd;AACA,IAAA,MAAM,QAAA,GAAiBA,iBAAA,CAAA,WAAA;AAAA,MACrB,CAAC,EAAA,KAAe,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AAAA,MACjC,CAAC,UAAU;AAAA,KACb;AACA,IAAA,MAAM,OAAOjC,gCAAA,CAAe;AAAA,MAC1B,KAAK,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,MAChC,WACE,QAAA,IAAY,CAAC,SAAA,GACT,MAAA,GACA,CAAC,GAAA,KAAQ;AAEP,QAAA,eAAA,CAAgB,2BAA2B,CAAA;AAC3C,QAAA,SAAA,CAAU,GAAG,CAAA;AAAA,MACf,CAAA;AAAA,MACN,SAAA,EAAW,CAAC,OAAA,EAAS,MAAA,KAAW,SAAS,OAAO,CAAA,KAAM,SAAS,MAAM;AAAA,KACtE,CAAA;AAGD,IAAA,MAAM,cAAA,GAAuBiC,iBAAA,CAAA,WAAA;AAAA,MAC3B,CAAC,YAAwB,GAAA,KAAgB;AACvC,QAAA,IAAI,QAAA,IAAY,CAAC,SAAA,EAAW;AAC5B,QAAA,MAAM,MAAM,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AACvC,QAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,UAAA,CAAW,EAAE,CAAA;AACtC,QAAA,IAAI,KAAK,IAAA,GAAO,GAAA;AAChB,QAAA,OACE,EAAA,IAAM,CAAA,IACN,EAAA,GAAK,WAAA,CAAY,MAAA,IACjB,YAAY,EAAE,CAAA,CAAE,MAAA,KAAW,UAAA,CAAW,MAAA,EACtC;AACA,UAAA,EAAA,IAAM,GAAA;AAAA,QACR;AACA,QAAA,IAAI,EAAA,GAAK,CAAA,IAAK,EAAA,IAAM,WAAA,CAAY,MAAA,EAAQ;AACxC,QAAA,CAAC,GAAA,CAAI,IAAI,CAAA,EAAG,GAAA,CAAI,EAAE,CAAC,CAAA,GAAI,CAAC,GAAA,CAAI,EAAE,CAAA,EAAG,GAAA,CAAI,IAAI,CAAC,CAAA;AAC1C,QAAA,eAAA;AAAA,UACE,GAAG,UAAA,CAAW,IAAI,UAAU,GAAA,KAAQ,EAAA,GAAK,OAAO,MAAM,CAAA;AAAA,SACxD;AACA,QAAA,SAAA,CAAU,GAAG,CAAA;AAAA,MACf,CAAA;AAAA,MACA,CAAC,WAAA,EAAa,SAAA,EAAW,QAAA,EAAU,eAAe;AAAA,KACpD;AAEA,IAAA,uBACEvC,eAAAA;AAAA,MAACO,sBAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,OAAA,EAAQ,MAAA;AAAA,QACR,SAAA,EAAWd,oBAAA,CAAG,QAAA,EAAU,SAAS,CAAA;AAAA,QACjC,aAAA,EAAa,UAAA;AAAA,QACZ,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,KAAA,KAAU,IAAA,oBACTC,cAAAA,CAACc,4BAAA,EAAA,EAAW,SAAA,EAAU,8CAAA,EACpB,QAAA,kBAAAd,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+DAAA,EACX,QAAA,EAAA,KAAA,EACH,CAAA,EACF,CAAA;AAAA,0BAGFM,eAAAA,CAACU,6BAAA,EAAA,EAAY,SAAA,EAAU,qBAAA,EACpB,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,GAAA,CAAI,CAAC,EAAE,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAM,qBAClCV,eAAAA,CAAC,SAAA,EAAA,EAAqB,YAAA,EAAY,KAAA,EAChC,QAAA,EAAA;AAAA,8BAAAN,cAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,uBAAA;AAAA,kBACV,SAAA,EAAU,2FAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cACC,KAAA,CAAM,MAAA,GAAS,CAAA,mBACdA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,MAAA,EACX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,UAAA,qBACVA,cAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBAEC,UAAA;AAAA,kBACA,OAAA;AAAA,kBACA,QAAA;AAAA,kBACA,IAAA;AAAA,kBACA,MAAA,EAAQ,cAAA;AAAA,kBACR,cAAA,EAAgB,kBAAA;AAAA,kBAChB;AAAA,iBAAA;AAAA,gBAPK,UAAA,CAAW;AAAA,eASnB,CAAA,EACH,CAAA,GACE,WAAA,CAAY,MAAA,KAAW,oBACzBA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCACV,QAAA,EAAA,YAAA,EACH,CAAA,mBAEAM,eAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,8DAAA,EACX,QAAA,EAAA;AAAA,gCAAAN,eAACS,uBAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,MAAK,QAAA,EAAA,QAAA,EAEnC,CAAA;AAAA,gBACC;AAAA,eAAA,EACH;AAAA,aAAA,EAAA,EAhCU,MAkCd,CACD,CAAA;AAAA,YAEA,CAAC,QAAA,KACC,SAAA,IAAa,eAAA,EAAiB,MAAA,IAAU,+BACvCH,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,8BAAAN,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,gBAAA,EAEtF,CAAA;AAAA,cACC,SAAA;AAAA,cAAA,CACC,iBAAiB,MAAA,IAAU,UAAA,qBAC3BM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,eAAA,EAAiB,GAAA,CAAI,CAAC,IAAA,qBACrBN,cAAAA;AAAA,kBAACE,wBAAA;AAAA,kBAAA;AAAA,oBAEC,OAAA,EAAQ,OAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,OAAA,EAAS,MAAM,UAAA,GAAa,IAAI,CAAA;AAAA,oBAChC,QAAA,kBAAUF,cAAAA,CAACiB,sBAAA,EAAA,EAAS,MAAM,EAAA,EAAI,CAAA;AAAA,oBAC9B,SAAA,EAAU,8DAAA;AAAA,oBAET,QAAA,EAAA;AAAA,mBAAA;AAAA,kBAPI;AAAA,iBASR,CAAA;AAAA,gBACA,8BACCjB,cAAAA;AAAA,kBAACE,wBAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,SAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,OAAA,EAAS,UAAA;AAAA,oBACT,QAAA,kBAAUF,cAAAA,CAACiB,sBAAA,EAAA,EAAS,MAAM,EAAA,EAAI,CAAA;AAAA,oBAC9B,SAAA,EAAU,yCAAA;AAAA,oBACX,QAAA,EAAA;AAAA;AAAA;AAED,eAAA,EAEJ;AAAA,aAAA,EAEJ;AAAA,WAAA,EAEN,CAAA;AAAA,0BAGAjB,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAU,QAAA,EAAS,SAAA,EAAU,WAC/B,QAAA,EAAA,YAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;AC7d7B,IAAM,UAAA,GAAa;AAAA,EACjB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA;AAGA,IAAM,YAAA,GAAuC;AAAA,EAC3C,MAAA,EAAQ,QAAA;AAAA,EACR,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,YAAA;AAAA,EACV,UAAA,EAAY,YAAA;AAAA,EACZ,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,MAAA;AAAA,EACP,QAAA,EAAU,MAAA;AAAA,EACV,GAAA,EAAK,MAAA;AAAA,EACL,KAAA,EAAO,OAAA;AAAA,EACP,WAAA,EAAa,aAAA;AAAA,EACb,KAAA,EAAO,OAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,OAAA,EAAS,MAAA;AAAA,EACT,SAAA,EAAW,YAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAMO,SAAS,qBAAqB,KAAA,EAGnC;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,EAAY;AAGhC,EAAA,MAAM,gBAAgB,KAAA,CAAM,KAAA;AAAA,IAC1B;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,WAAW,IAAA,CAAK,CAAC,MAAM,KAAA,CAAM,QAAA,CAAS,CAAC,CAAC,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,aAAA,GACN,CAAA,EAAG,aAAA,CAAc,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,aAAA,CAAc,CAAC,CAAC,CAAA,CAAA,GAC3D,MAAA;AAAA,IACJ;AAAA,GACF;AACF;AAEA,IAAM,UAAA,GAAiC;AAAA,EACrC,CAAC,qCAAqC,MAAM,CAAA;AAAA,EAC5C,CAAC,mDAAmD,YAAY,CAAA;AAAA,EAChE,CAAC,gDAAgD,cAAc,CAAA;AAAA,EAC/D,CAAC,iCAAiC,eAAe,CAAA;AAAA,EACjD,CAAC,+BAA+B,aAAa,CAAA;AAAA,EAC7C,CAAC,8CAA8C,YAAY,CAAA;AAAA,EAC3D,CAAC,4BAA4B,YAAY,CAAA;AAAA,EACzC,CAAC,sBAAsB,MAAM,CAAA;AAAA,EAC7B,CAAC,6CAA6C,OAAO,CAAA;AAAA,EACrD,CAAC,0BAA0B,QAAQ,CAAA;AAAA,EACnC,CAAC,iEAAiE,SAAS;AAC7E,CAAA;AAIA,IAAM,eAAA,GAAsC;AAAA,EAC1C,CAAC,+BAA+B,iBAAiB,CAAA;AAAA,EACjD,CAAC,mDAAmD,aAAa,CAAA;AAAA,EACjE;AAAA,IACE,iFAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA;AAAA,IACE,+EAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,CAAC,6BAA6B,eAAe,CAAA;AAAA,EAC7C,CAAC,0CAA0C,eAAe,CAAA;AAAA,EAC1D,CAAC,6CAA6C,QAAQ,CAAA;AAAA,EACtD;AAAA,IACE,sEAAA;AAAA,IACA;AAAA;AAEJ,CAAA;AAOO,SAAS,SAAS,GAAA,EAIvB;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,CAAC,CAAC,EAAE,CAAA,KAAM,EAAA,CAAG,IAAA,CAAK,KAAK,CAAC,CAAA,GAAI,CAAC,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,IAAA,CAAK,CAAC,CAAC,EAAE,CAAA,KAAM,EAAA,CAAG,IAAA,CAAK,KAAK,CAAC,CAAA,GAAI,CAAC,CAAA;AACpE,EAAA,MAAM,GAAA,GAAM,uBAAA,CAAwB,IAAA,CAAK,KAAK,CAAA;AAC9C,EAAA,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAI;AACjC;AAQO,SAAS,wBAAwB,KAAA,EAAoC;AAC1E,EAAA,MAAM,EAAE,QAAA,EAAU,QAAA,EAAS,GAAI,qBAAqB,KAAK,CAAA;AACzD,EAAA,OAAO;AAAA,IACL,GAAI,QAAA,IAAY,EAAE,QAAA,EAAS;AAAA,IAC3B,GAAI,QAAA,IAAY;AAAA,MACd,QAAA;AAAA,MACA,YAAA,EAAc,YAAA,CAAa,QAAQ,CAAA,IAAK;AAAA;AAC1C,GACF;AACF;AAOO,SAAS,yBACd,MAAA,EACqB;AACrB,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,CAAO,KAAA;AAAA,IACb,IAAA,EAAM;AAAA,MACJ,QAAQ,MAAA,CAAO,QAAA;AAAA,MACf,MAAM,MAAA,CAAO,QAAA;AAAA,MACb,SAAS,MAAA,CAAO;AAAA,KAClB;AAAA,IACA,GAAG,uBAAA,CAAwB,MAAA,CAAO,KAAK;AAAA,GACzC;AACF;AAEA,SAAS8C,MAAAA,GAAgB;AACvB,EAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACpE;AAMO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,IAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAoD;AAElD,EAAA,MAAM,oBAAoB,mBAAA,EAAoB;AAC9C,EAAA,MAAM,mBAAA,GACJ,UAAA,KAAe,KAAA,GACX,MAAA,GACC,cAAc,iBAAA,IAAqB,MAAA;AAE1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUC,iBAAA,CAAA,QAAA;AAAA,IAC9B,MACE,UAAA,IAAc;AAAA,MACZ,IAAID,MAAAA,EAAM;AAAA,MACV,IAAA,EAAM,EAAA;AAAA,MACN,MAAA,EAAQ;AAAA;AACV,GACJ;AAMA,EAAA,MAAM,OAAA,GAAgBC,yBAAuB,IAAI,CAAA;AACjD,EAAMA,4BAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,EAAS,aAAA,CAAc,OAAO,CAAA;AACpD,IAAA,KAAA,EAAO,KAAA,EAAM;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KACb,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,GAAG,CAAA,EAAE,CAAE,CAAA;AAExC,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,KAAmC;AAE3D,IAAA,KAAA,CAAM,wBAAA,CAAyB,MAAM,CAAC,CAAA;AAAA,EACxC,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAgB;AAEvC,IAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,GAAA,EAAI,GAAI,SAAS,GAAG,CAAA;AAC9C,IAAA,KAAA,CAAM,EAAE,GAAA,EAAK,KAAA,EAAO,WAAW,GAAA,EAAK,GAAA,IAAO,QAAW,CAAA;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,IAAA,GAAO,MAAA,GAAS,CAAA;AAE3C,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,uBACEzC,eAAAA,CAACc,uBAAA,EAAA,EAAM,IAAA,EAAI,IAAA,EAAC,YAAA,EAAc,CAAC,CAAA,KAAM,CAAC,CAAA,IAAK,OAAA,EAAQ,EAAG,MAAK,IAAA,EACrD,QAAA,EAAA;AAAA,oBAAAd,gBAACe,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAArB,cAAAA,CAACsB,4BAAA,EAAA,EACE,QAAA,EAAA,UAAA,GAAa,oBAAA,GAAuB,gBAAA,EACvC,CAAA;AAAA,sBACAtB,eAACuB,4BAAA,EAAA,EAAW;AAAA,KAAA,EACd,CAAA;AAAA,oBACAvB,cAAAA,CAACwB,2BAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EACnB,QAAA,kBAAAlB,eAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAU,UAAA,EAE3B,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,WAAA,EAAY,cAAW,YAAA,EACvC,QAAA,EAAA;AAAA,QAAA,mBAAA,mBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,YAAA,EAAa,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACtC5B,cAAAA;AAAA,YAAC,mBAAA,CAAoB,SAAA;AAAA,YAApB;AAAA,cACC,UAAU,mBAAA,CAAoB,QAAA;AAAA,cAC9B,QAAQ,mBAAA,CAAoB,MAAA;AAAA,cAC5B,OAAA,EAAS,CAAC,KAAK,CAAA;AAAA,cACf,IAAA,EAAI,IAAA;AAAA,cACJ,aAAA,EAAe,KAAA;AAAA,cACf,WAAA,EAAY,4CAAA;AAAA,cAKZ,YAAA,EAAc,YAAY,IAAA,IAAQ,MAAA;AAAA,cAClC,aAAA,EAAe,UAAA,GAAa,CAAC,UAAA,CAAW,IAAA,GAAO,MAAA;AAAA,cAC/C,QAAA,EAAU,gBAAA;AAAA,cACV,UAAA,EAAY,CAAC,IAAA,KAAS,KAAA,CAAM,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAA,EAAW;AAAA;AAAA,WAC7D;AAAA,0BACAA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCACV,QAAA,EAAA,KAAA,CAAM,IAAA,GACH,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,MAAM,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAA,GAC9C,KAAA,CAAM,OACJ,CAAA,oBAAA,EAAuB,KAAA,CAAM,IAAI,CAAA,iCAAA,CAAA,GACjC,oEAAA,EACR;AAAA,SAAA,EACF,CAAA,mBAEAM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BACpC5B,cAAAA;AAAA,YAAC6B,uBAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,UAAA;AAAA,cACH,OAAO,KAAA,CAAM,IAAA;AAAA,cACb,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,IAAA,EAAM,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACjD,SAAA,EACF,CAAA;AAAA,wBAEFvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,cAAA,EAAe,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,4BACtC5B,cAAAA;AAAA,cAAC6B,uBAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,cAAA;AAAA,gBACH,KAAA,EAAO,MAAM,QAAA,IAAY,EAAA;AAAA,gBACzB,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACrD,WAAA,EACF,CAAA;AAAA,0BACAvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,4BACnC5B,cAAAA;AAAA,cAAC6B,uBAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,UAAA;AAAA,gBACH,KAAA,EAAO,MAAM,QAAA,IAAY,EAAA;AAAA,gBACzB,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,kBAAA,MAAM,QAAA,GAAW,EAAE,MAAA,CAAO,KAAA;AAC1B,kBAAA,MAAM,UAAA,GAAa,QAAA,CAAS,WAAA,EAAY,CAAE,IAAA,EAAK;AAG/C,kBAAA,KAAA,CAAM;AAAA,oBACJ,QAAA;AAAA,oBACA,YAAA,EAAA,CACG,YAAA,CAAa,UAAU,CAAA,IAAK,UAAA,KAAe;AAAA,mBAC/C,CAAA;AAAA,gBACH;AAAA;AAAA;AACF,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAvB,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,WAAA,EAAY,cAAW,YAAA,EACxC,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,YAAA,EAEpF,CAAA;AAAA,wBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAACsB,uBAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAA;AAAA,cAAA,UAAA;AAAA,cAEtB,KAAA,CAAM,YAAA,GAAe,CAAA,EAAA,EAAK,KAAA,CAAM,YAAY,CAAA,EAAA,CAAA,GAAO;AAAA,aAAA,EACtD,CAAA;AAAA,4BACA5B,cAAAA;AAAA,cAAC6B,uBAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,SAAA;AAAA,gBACH,SAAA,EAAU,SAAA;AAAA,gBACV,KAAA,EAAO,MAAM,QAAA,IAAY,EAAA;AAAA,gBACzB,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACrD,WAAA,EACF,CAAA;AAAA,0BACAvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,4BACrC5B,cAAAA;AAAA,cAAC6B,uBAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,UAAA;AAAA,gBACH,SAAA,EAAU,SAAA;AAAA,gBACV,KAAA,EAAO,MAAM,UAAA,IAAc,EAAA;AAAA,gBAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACvD,WAAA,EACF,CAAA;AAAA,0BACAvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,aAAA,EAAc,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4BACpC5B,cAAAA;AAAA,cAAC6B,uBAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,aAAA;AAAA,gBACH,SAAA,EAAU,SAAA;AAAA,gBACV,KAAA,EAAO,MAAM,OAAA,IAAW,EAAA;AAAA,gBACxB,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACpD,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAvB,eAAAA;AAAA,UAACmB,4BAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,kBAAA;AAAA,YACL,KAAA,EAAM,cAAA;AAAA,YACN,KAAA,EAAO,MAAM,YAAA,IAAgB,GAAA;AAAA,YAC7B,eAAe,CAAC,CAAA,KAAM,MAAM,EAAE,YAAA,EAAc,GAAgB,CAAA;AAAA,YAC5D,WAAA,EAAY,YAAA;AAAA,YACZ,IAAA,EAAK,IAAA;AAAA,YAEL,QAAA,EAAA;AAAA,8BAAAzB,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,GAAA,EAAI,OAAM,wBAAA,EAAyB,CAAA;AAAA,8BAChD1B,cAAAA,CAAC0B,uBAAA,EAAA,EAAM,KAAA,EAAM,GAAA,EAAI,OAAM,2BAAA,EAA4B;AAAA;AAAA;AAAA;AACrD,OAAA,EACF,CAAA;AAAA,sBAGApB,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,WAAA,EAAY,cAAW,YAAA,EACxC,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,YAAA,EAEpF,CAAA;AAAA,wBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAA,0BAAA,EAAwB,CAAA;AAAA,0BACjD5B,cAAAA;AAAA,YAAC+B,0BAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,SAAA;AAAA,cACH,KAAA,EAAO,MAAM,GAAA,IAAO,EAAA;AAAA,cACpB,UAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC/C,IAAA,EAAM;AAAA;AAAA,WACR;AAAA,0BACA/B,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,aAAU,QAAA,EACpD,QAAA,EAAA,KAAA,CAAM,KAAA,IAAS,KAAA,CAAM,aAAa,KAAA,CAAM,GAAA,mBACvCM,eAAAA,CAAA2B,qBAAA,EAAE,QAAA,EAAA;AAAA,YAAA,UAAA;AAAA,YACS,GAAA;AAAA,YACR;AAAA,cACC,KAAA,CAAM,KAAA,IAAS,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,cACnC,KAAA,CAAM,SAAA,IAAa,KAAA,CAAM,SAAA,CAAU,WAAA,EAAY;AAAA,cAC/C,MAAM,GAAA,IAAO;AAAA,aACf,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,QAAK;AAAA,WAAA,EACf,IAEA,2DAAA,EAEJ;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAGA3B,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAU,WAAA,EAAY,cAAW,mBAAA,EACxC,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qEAAA,EAAsE,QAAA,EAAA,iBAAA,EAEpF,CAAA;AAAA,wBACAM,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,4BACrC5B,cAAAA;AAAA,cAAC8B,2BAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,WAAA;AAAA,gBACH,KAAA,EAAO,MAAM,SAAA,IAAa,EAAA;AAAA,gBAC1B,UAAU,CAAC,CAAA,KAAM,MAAM,EAAE,SAAA,EAAW,GAAG;AAAA;AAAA;AACzC,WAAA,EACF,CAAA;AAAA,0BACAxB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,4BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,SAAA,EAAU,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,4BACjC5B,cAAAA;AAAA,cAAC8B,2BAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAG,SAAA;AAAA,gBACH,KAAA,EAAO,MAAM,OAAA,IAAW,EAAA;AAAA,gBACxB,UAAU,CAAC,CAAA,KAAM,MAAM,EAAE,OAAA,EAAS,GAAG;AAAA;AAAA;AACvC,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAxB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,gBAAA,EAAiB,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BAC1C5B,cAAAA;AAAA,YAAC6B,uBAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,gBAAA;AAAA,cACH,KAAA,EAAO,MAAM,UAAA,IAAc,EAAA;AAAA,cAC3B,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,UAAA,EAAY,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO;AAAA;AAAA;AACvD,SAAA,EACF,CAAA;AAAA,wBACAvB,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,0BAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,oBAAA,EAAqB,QAAA,EAAA,gBAAA,EAAc,CAAA;AAAA,0BAClD5B,cAAAA;AAAA,YAAC+B,0BAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAG,oBAAA;AAAA,cACH,KAAA,EAAO,MAAM,aAAA,IAAiB,EAAA;AAAA,cAC9B,QAAA,EAAU,CAAC,CAAA,KAAM,KAAA,CAAM,EAAE,aAAA,EAAe,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,cACxD,IAAA,EAAM;AAAA;AAAA;AACR,SAAA,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBACAzB,gBAAC0B,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAhC,eAACE,wBAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,SAAS,QAAA,EAAA,QAAA,EAE9C,CAAA;AAAA,sBACAF,cAAAA;AAAA,QAACE,wBAAA;AAAA,QAAA;AAAA,UACC,SAAS,MAAM;AACb,YAAA,MAAA,CAAO,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,MAAM,IAAA,CAAK,IAAA,IAAQ,CAAA;AAC5C,YAAA,OAAA,EAAQ;AAAA,UACV,CAAA;AAAA,UACA,UAAU,CAAC,OAAA;AAAA,UACZ,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC1fA,IAAM,eAAA,GAAsC;AAAA,EAC1C,SAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA;AAmDA,SAAS4C,MAAAA,GAAgB;AACvB,EAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,IAAI,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACpE;AAcA,SAAS,gBAAA,CAAiB;AAAA,EACxB,MAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUE,iBAAA,CAAA,QAAA;AAAA,IAAiC,MAC7D,MAAA,CAAO,IAAA,KAAS,MAAA,GACX,EAAE,MAAM,MAAA,CAAO,UAAA,CAAW,IAAA,IAAQ,EAAA,KAClC,EAAE,IAAA,EAAM,MAAA,CAAO,UAAA,CAAW,QAAQ,EAAA;AAAG,GAC5C;AAEA,EAAA,MAAM,MACJ,CAAC,GAAA,KACD,CAAC,CAAA,KACC,QAAQ,CAAC,IAAA,MAAU,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE,CAAA;AAE1D,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,MAAA,CAAO,IAAI,CAAA;AACX,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACE1C,eAAAA,CAACc,uBAAA,EAAA,EAAM,IAAA,EAAI,IAAA,EAAC,YAAA,EAAc,CAAC,IAAA,KAAS,CAAC,IAAA,IAAQ,OAAA,EAAQ,EAAG,MAAK,IAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAd,gBAACe,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAArB,eAACsB,4BAAA,EAAA,EACE,QAAA,EAAA,MAAA,CAAO,IAAA,KAAS,MAAA,GAAS,qBAAqB,UAAA,EACjD,CAAA;AAAA,sBACAtB,eAACuB,4BAAA,EAAA,EAAW;AAAA,KAAA,EACd,CAAA;AAAA,oBACAjB,eAAAA,CAACkB,2BAAA,EAAA,EAAU,SAAA,EAAU,WAAA,EACnB,QAAA,EAAA;AAAA,sBAAAxB,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA,MAAA,CAAO,WAAW,IAAA,EACrB,CAAA;AAAA,MACC,OAAO,IAAA,KAAS,MAAA,mBACfM,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC9B5B,cAAAA;AAAA,UAAC+B,0BAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,UAAA;AAAA,YACH,OAAO,IAAA,CAAK,IAAA;AAAA,YACZ,QAAA,EAAU,IAAI,MAAM,CAAA;AAAA,YACpB,IAAA,EAAM;AAAA;AAAA;AACR,OAAA,EACF,CAAA,mBAEAzB,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAN,cAAAA,CAAC4B,uBAAA,EAAA,EAAM,OAAA,EAAQ,UAAA,EAAW,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBAC9B5B,cAAAA;AAAA,UAAC+B,0BAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAG,UAAA;AAAA,YACH,OAAO,IAAA,CAAK,IAAA;AAAA,YACZ,QAAA,EAAU,IAAI,MAAM,CAAA;AAAA,YACpB,IAAA,EAAM,CAAA;AAAA,YACN,WAAA,EAAY;AAAA;AAAA;AACd,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,oBACAzB,gBAAC0B,6BAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAhC,eAACE,wBAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAS,SAAS,QAAA,EAAA,QAAA,EAE9C,CAAA;AAAA,sBACAF,cAAAA,CAACE,wBAAA,EAAA,EAAO,OAAA,EAAS,YAAY,QAAA,EAAA,MAAA,EAAI;AAAA,KAAA,EACnC;AAAA,GAAA,EACF,CAAA;AAEJ;AAqBO,SAAS,wBAAA,CAAyB;AAAA,EACvC,WAAA,EAAa,qBAAA;AAAA,EACb,kBAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,wBAAA;AAAA,EACR,eAAA;AAAA,EACA,OAAA,GAAU,eAAA;AAAA,EACV,QAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,QAAA,GAAW,KAAA;AAAA,EACX,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA,EAAe;AACjB,CAAA,EAAqD;AACnD,EAAA,MAAM,eAAe,qBAAA,KAA0B,MAAA;AAC/C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAU8C,iBAAA,CAAA,QAAA;AAAA,IACpC,sBAAsB;AAAC,GACzB;AACA,EAAA,MAAM,WAAA,GAAc,eAAe,qBAAA,GAAwB,QAAA;AAG3D,EAAA,MAAM,oBAAoB,mBAAA,EAAoB;AAC9C,EAAA,MAAM,mBAAA,GACJ,UAAA,KAAe,KAAA,GACX,MAAA,GACC,cAAc,iBAAA,IAAqB,MAAA;AAE1C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUA,2BAAsB,IAAI,CAAA;AAE5D,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAuB;AACrC,IAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,IAAI,CAAA;AACnC,IAAA,QAAA,GAAW,IAAI,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,EAAA,EAAY,KAAA,KAA+B;AAClE,IAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAO,EAAE,EAAA,KAAO,EAAA,GAAK,EAAE,GAAG,CAAA,EAAG,GAAG,KAAA,EAAM,GAAI,CAAE,CAAC,CAAA;AAAA,EACvE,CAAA;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,GAAA,EAAiB,SAAA,KAAsB;AAE7D,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,WAAW,CAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,IAAI,MAAM,CAAA;AACxD,IAAA,MAAM,UAAA,GAAa,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,IAAI,EAAE,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,GAAa,SAAS,CAAA;AAC7C,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,CAAA,GAAI,KAAK,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,IAAI,EAAE,CAAA;AAC/C,IAAA,MAAM,CAAA,GAAI,KAAK,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,SAAS,EAAE,CAAA;AACpD,IAAA,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,CAAC,IAAA,CAAK,CAAC,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AACtC,IAAA,MAAA,CAAO,IAAI,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,EAAiB,MAAA,KAA6B;AAClE,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,QAAA;AACH,QAAA,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,GAAA,CAAI,EAAE,CAAC,CAAA;AACjD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,cAAA,CAAe,KAAK,EAAE,CAAA;AACtB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,cAAA,CAAe,KAAK,CAAC,CAAA;AACrB,QAAA;AAAA,MACF,KAAK,SAAA;AAAA,MACL,KAAK,MAAA;AAAA,MACL,KAAK,UAAA;AACH,QAAA,SAAA,CAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,KAAK,CAAA;AAC3C,QAAA;AAAA,MACF;AAEE,QAAA,QAAA,GAAW,KAAK,MAAM,CAAA;AACtB,QAAA;AAAA;AACJ,EACF,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,EAAc,GAAA,KAAiB;AACpD,IAAA,MAAA,CAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,EAAE,IAAIF,MAAAA,EAAM,EAAG,MAAM,GAAA,EAAY,MAAA,EAAW,MAAA,EAAQ,cAAA;AAAe,KACpE,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAiC;AACzD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,MAAA;AACH,QAAA,eAAA,CAAgB,MAAA,CAAO,WAAW,EAAA,EAAI;AAAA,UACpC,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,IAAK;AAAA,SAC3B,CAAA;AACD,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,eAAA,CAAgB,MAAA,CAAO,WAAW,EAAA,EAAI;AAAA,UACpC,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK,IAAK;AAAA,SAC3B,CAAA;AACD,QAAA;AAAA;AACJ,EACF,CAAA;AAGA,EAAA,MAAM,UAAA,GAAa,MAAA,EAAQ,IAAA,KAAS,SAAA,IAAa,QAAQ,IAAA,KAAS,KAAA;AAClE,EAAA,MAAM,YAAA,GACJ,MAAA,EAAQ,IAAA,KAAS,SAAA,GAAY,OAAO,UAAA,GAAa,MAAA;AAEnD,EAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAoB;AAC5C,IAAA,IAAI,MAAA,EAAQ,SAAS,SAAA,EAAW;AAC9B,MAAA,MAAA,CAAO,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,OAAO,GAAA,CAAI,EAAA,GAAK,GAAA,GAAM,CAAE,CAAC,CAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,CAAC,GAAG,WAAA,EAAa,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,cAAA,EAAgB,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,SAAA,GACJ,eAAA,IAAmB,mBAAA,IAAuB,CAAC,2BACzC9C,cAAAA;AAAA,IAAC,mBAAA,CAAoB,SAAA;AAAA,IAApB;AAAA,MACC,UAAU,mBAAA,CAAoB,QAAA;AAAA,MAC9B,QAAQ,mBAAA,CAAoB,MAAA;AAAA,MAC5B,OAAA,EAAS,CAAC,KAAK,CAAA;AAAA,MACf,IAAA,EAAI,IAAA;AAAA,MACJ,aAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAY,2BAAA;AAAA,MACZ,QAAA,EAAU,CAAC,MAAA,KACT,MAAA,CAAO;AAAA,QACL,GAAG,WAAA;AAAA,QACH;AAAA,UACE,IAAI8C,MAAAA,EAAM;AAAA,UACV,MAAM,MAAA,CAAO,KAAA;AAAA,UACb,MAAA,EAAQ,cAAA;AAAA,UACR,GAAG,yBAAyB,MAAM;AAAA;AACpC,OACD,CAAA;AAAA,MAEH,UAAA,EAAY,CAAC,IAAA,KAAS,aAAA,CAAc,IAAI;AAAA;AAAA,GAC1C,GACE,MAAA;AAEN,EAAA,uBACExC,eAAAA,CAAA2B,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAjC,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA;AAAA,QACA,cAAA,EAAgB,CAAC,GAAA,EAAK,MAAA,KAAW,gBAAgB,GAAA,CAAI,EAAA,EAAI,EAAE,MAAA,EAAQ,CAAA;AAAA,QACnE,QAAA,EAAU,YAAA;AAAA,QACV,SAAA,EAAW,CAAC,GAAA,KACV,MAAA;AAAA,UACE,CAAC,GAAG,WAAW,CAAA,CAAE,IAAA;AAAA,YACf,CAAC,CAAA,EAAG,CAAA,KAAM,GAAA,CAAI,OAAA,CAAQ,CAAA,CAAE,EAAE,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,CAAA,CAAE,EAAE;AAAA;AAChD,SACF;AAAA,QAEF,eAAA;AAAA,QACA,UAAA,EAAY,CAAC,IAAA,KAAS,aAAA,CAAc,IAAI,CAAA;AAAA,QACxC,YAAY,MAAM,SAAA,CAAU,EAAE,IAAA,EAAM,OAAO,CAAA;AAAA,QAC3C,SAAA;AAAA,QACA,iBAAA;AAAA,QACA,YAAA;AAAA,QACA,SAAA;AAAA,QACA,aAAA,EAAa;AAAA;AAAA,KACf;AAAA,IACC,WAAW,MAAA,CAAO,IAAA,KAAS,UAAU,MAAA,CAAO,IAAA,KAAS,+BACpDA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,MAAA;AAAA,QACA,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,QAC7B,MAAA,EAAQ;AAAA,OAAA;AAAA,MAHH,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,UAAA,CAAW;AAAA,KAIvC;AAAA,IAED,8BACCA,cAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAI,IAAA;AAAA,QACJ,UAAA,EAAY,YAAA;AAAA,QACZ,UAAA,EAAY,UAAA,KAAe,KAAA,GAAQ,KAAA,GAAQ,mBAAA;AAAA,QAC3C,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,QAC7B,MAAA,EAAQ;AAAA,OAAA;AAAA,MALH,cAAc,EAAA,IAAM;AAAA;AAM3B,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-KQUI4BGS.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Tooltip } from '../Tooltip';\n\n/**\n * Toolbar / group arrow-key navigation (WAI-ARIA toolbar pattern).\n * Attach to a container's onKeyDown: ←/→ move focus between enabled\n * buttons, Home/End jump to first/last.\n */\nexport function toolbarKeyNav(e: React.KeyboardEvent<HTMLElement>) {\n if (e.altKey || e.ctrlKey || e.metaKey) return;\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) return;\n const buttons = Array.from(\n e.currentTarget.querySelectorAll<HTMLButtonElement>(\n 'button:not([disabled])'\n )\n );\n const i = buttons.indexOf(document.activeElement as HTMLButtonElement);\n if (i === -1 || buttons.length === 0) return;\n e.preventDefault();\n e.stopPropagation();\n const next =\n e.key === 'ArrowLeft'\n ? (i - 1 + buttons.length) % buttons.length\n : e.key === 'ArrowRight'\n ? (i + 1) % buttons.length\n : e.key === 'Home'\n ? 0\n : buttons.length - 1;\n buttons[next]?.focus();\n}\n\n// Alignment of the floating (fine-pointer) overlay within the row.\nconst ALIGN = {\n /** Vertically centered on the row's right edge (single-line rows). */\n center:\n 'pointer-fine:top-1/2 pointer-fine:end-0 pointer-fine:-translate-y-1/2',\n /** Pinned near the row's top-right corner (multi-line rows). */\n top: 'pointer-fine:top-1.5 pointer-fine:end-1.5',\n} as const;\n\n// Which hover scope reveals the toolbar. Rows nested inside another `group`\n// (e.g. order rows inside an assessed problem) use a named group so hovering\n// the outer block doesn't reveal every nested toolbar. `grid` keys off the\n// datavis (NITRO) table row (`.wcdv-tr`) for toolbars rendered into grid\n// cells via `formatCell`.\nconst REVEAL = {\n row: cn(\n 'group-hover:pointer-events-auto group-hover:opacity-100',\n 'group-focus-within:pointer-events-auto group-focus-within:opacity-100',\n 'group-focus:pointer-events-auto group-focus:opacity-100'\n ),\n order: cn(\n 'group-hover/order:pointer-events-auto group-hover/order:opacity-100',\n 'group-focus-within/order:pointer-events-auto group-focus-within/order:opacity-100',\n 'group-focus/order:pointer-events-auto group-focus/order:opacity-100'\n ),\n grid: cn(\n '[.wcdv-tr:hover_&]:pointer-events-auto [.wcdv-tr:hover_&]:opacity-100',\n '[.wcdv-tr:focus-within_&]:pointer-events-auto [.wcdv-tr:focus-within_&]:opacity-100'\n ),\n} as const;\n\nexport interface RowActionToolbarProps {\n /** Accessible name, e.g. `Actions for penicillin`. */\n label: string;\n /** Overlay alignment on fine-pointer devices. @default 'center' */\n align?: keyof typeof ALIGN;\n /**\n * Hover scope for the reveal. Use `'order'` when the row is a\n * `group/order` nested inside another `group`; use `'grid'` inside a\n * datavis (NITRO) grid cell — the toolbar then stays in flow (the cell\n * reserves its space) and reveals when the `.wcdv-tr` row is hovered.\n * @default 'row'\n */\n group?: keyof typeof REVEAL;\n className?: string;\n children: React.ReactNode;\n}\n\n/**\n * Per-row action toolbar for clinical lists.\n *\n * On hover-capable (fine pointer) devices it floats over the row's right\n * edge as a card-styled overlay, hidden until the row is hovered or\n * keyboard-focused. Touch devices can't hover, so the toolbar stays in\n * flow at the end of the row (`ms-auto`) and is always visible.\n *\n * Implements WAI-ARIA toolbar arrow-key navigation. The parent row must be\n * `relative` and carry the matching `group` (or `group/order`) class.\n */\nexport function RowActionToolbar({\n label,\n align = 'center',\n group = 'row',\n className,\n children,\n}: RowActionToolbarProps) {\n return (\n <div\n role=\"toolbar\"\n aria-label={label}\n onKeyDown={toolbarKeyNav}\n className={cn(\n 'z-10 ms-auto flex items-center gap-0.5 transition-opacity',\n // Inside a grid cell the column already reserves the space, so the\n // toolbar stays in flow — no absolute overlay. It keeps the card\n // chrome, though: pair with a `sticky end-0` actions column and it\n // floats over scrolled-under content at the grid's right edge.\n group !== 'grid' && [\n 'pointer-fine:absolute',\n ALIGN[align],\n 'pointer-fine:bg-card pointer-fine:border-border pointer-fine:rounded-md pointer-fine:border pointer-fine:p-0.5 pointer-fine:shadow-sm',\n ],\n group === 'grid' &&\n 'bg-card border-border rounded-md border p-0.5 shadow-sm',\n 'pointer-fine:pointer-events-none pointer-fine:opacity-0',\n REVEAL[group],\n 'focus-within:pointer-events-auto focus-within:opacity-100',\n className\n )}\n >\n {children}\n </div>\n );\n}\n\nexport interface RowIconButtonProps {\n label: string;\n icon: React.ComponentType<{ size?: number | string }>;\n onClick: () => void;\n /** Toggle-button state (renders `aria-pressed` + tinted background). */\n active?: boolean;\n /** Disclosure state and the id of the controlled region. */\n expanded?: boolean;\n controls?: string;\n /** `md` = 32px button / 16px icon; `sm` = 28px / 14px. @default 'md' */\n size?: 'md' | 'sm';\n}\n\n/** Tooltip-labeled ghost icon button for `RowActionToolbar`. */\nexport function RowIconButton({\n label,\n icon: Icon,\n onClick,\n active,\n expanded,\n controls,\n size = 'md',\n}: RowIconButtonProps) {\n return (\n <Tooltip content={label}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n aria-label={label}\n aria-pressed={active}\n aria-expanded={expanded}\n aria-controls={controls}\n onClick={(e) => {\n e.stopPropagation();\n onClick();\n }}\n className={cn(\n size === 'sm' ? 'h-7 w-7' : 'h-8 w-8',\n 'shrink-0',\n (active || expanded) &&\n 'bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-400'\n )}\n >\n <Icon size={size === 'sm' ? 14 : 16} />\n </Button>\n </Tooltip>\n );\n}\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Button } from '../Button';\nimport { Card, CardHeader, CardContent } from '../Card/Card';\nimport { useLiveAnnouncement } from '../../hooks/useLiveAnnouncement';\nimport { RowActionToolbar, RowIconButton } from '../RowActionToolbar';\nimport {\n useDragReorder,\n dragIndicatorClasses,\n type UseDragReorderReturn,\n} from '../../hooks/useDragReorder';\nimport {\n PencilIcon,\n StickyNoteIcon,\n BanIcon,\n PlusIcon,\n AlertCircleIcon,\n GripVerticalIcon,\n} from '../Icons';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Allergy category (FHIR AllergyIntolerance.category). */\nexport type AllergyType = 'drug' | 'food' | 'environmental' | 'other';\n\n/**\n * Mechanism distinction (FHIR AllergyIntolerance.type): a true\n * immune-mediated allergy vs a non-immune intolerance (e.g. GI upset).\n * The distinction matters clinically — an intolerance mislabeled as an\n * allergy causes unnecessary avoidance of first-line drugs.\n */\nexport type AllergyKind = 'allergy' | 'intolerance';\n\n/** Reaction severity (FHIR reaction.severity). */\nexport type AllergySeverity = 'mild' | 'moderate' | 'severe';\n\n/** Coding-system reference for an allergen (RxNorm / FDB / SNOMED …). */\nexport interface AllergyCode {\n system: string;\n code: string;\n display?: string;\n}\n\n/**\n * A single allergy / intolerance.\n *\n * Loosely follows FHIR AllergyIntolerance: allergen (+ optional code),\n * category, reaction, severity, onset, and clinical status.\n */\nexport interface Allergy {\n /** Stable unique id */\n id: string;\n /** Allergen display name, e.g. \"penicillin\" */\n allergen: string;\n /** Category — groups the list */\n type?: AllergyType;\n /** Allergy vs intolerance (FHIR AllergyIntolerance.type; default 'allergy') */\n kind?: AllergyKind;\n /** Reaction description, e.g. \"hives\" */\n reaction?: string;\n /** Reaction severity — drives the badge color */\n severity?: AllergySeverity;\n /** Onset date (display string) */\n onsetDate?: string;\n /** Free-text note */\n note?: string;\n /** Inactive/resolved entries render struck through */\n inactive?: boolean;\n /** Code reference (RxNorm/FDB for drugs, SNOMED otherwise) */\n code?: AllergyCode;\n}\n\n/** Row actions revealed on hover. */\nexport type AllergyAction = 'correct' | 'note' | 'remove';\n\nexport interface AllergyListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'title'\n> {\n /** Allergies to display (controlled) */\n allergies: Allergy[];\n /**\n * No-known-allergies flag (NKA/NKDA). An empty list is ambiguous —\n * \"not asked\" vs \"asked, none\" — so this is explicit tri-state:\n * undefined = not recorded, true = no known allergies.\n * Ignored when `allergies` is non-empty.\n */\n noKnownAllergies?: boolean;\n /** Called when the no-known-allergies affordance is toggled */\n onNoKnownAllergiesChange?: (value: boolean) => void;\n /** Header title (pass null to hide) */\n title?: string | null;\n /** Row actions to show (default: all) */\n actions?: AllergyAction[];\n /** Called when a row action is clicked */\n onAction?: (allergy: Allergy, action: AllergyAction) => void;\n /**\n * Called with the full new id order after a drag/keyboard reorder.\n * Omit to disable reordering. Drops are restricted to the same\n * category group.\n */\n onReorder?: (allergyIds: string[]) => void;\n /** Custom add UI (e.g. an inline CodeLookup search) */\n addSearch?: React.ReactNode;\n /** Called when the \"Add allergy\" button is clicked (omit to hide) */\n onAdd?: () => void;\n /** Hide all action affordances (display only) */\n readOnly?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Test ID for testing */\n 'data-testid'?: string;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst TYPE_ORDER: AllergyType[] = ['drug', 'food', 'environmental', 'other'];\n\nexport const ALLERGY_TYPE_LABELS: Record<AllergyType, string> = {\n drug: 'Drug',\n food: 'Food',\n environmental: 'Environmental',\n other: 'Other',\n};\n\nconst SEVERITY_BADGE: Record<\n AllergySeverity,\n 'danger' | 'warning' | 'secondary'\n> = {\n severe: 'danger',\n moderate: 'warning',\n mild: 'secondary',\n};\n\nconst DEFAULT_ACTIONS: AllergyAction[] = ['correct', 'note', 'remove'];\n\nconst ACTION_META: Record<\n AllergyAction,\n { label: string; icon: React.ComponentType<{ size?: number | string }> }\n> = {\n correct: { label: 'Correct', icon: PencilIcon },\n note: { label: 'Notes', icon: StickyNoteIcon },\n remove: { label: 'Remove', icon: BanIcon },\n};\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\nfunction AllergyRow({\n allergy,\n actions,\n readOnly,\n drag,\n onMove,\n onAction,\n}: {\n allergy: Allergy;\n actions: AllergyAction[];\n readOnly: boolean;\n drag: UseDragReorderReturn;\n /** Keyboard equivalent of drag reordering (Alt+↑/↓) */\n onMove?: (allergy: Allergy, dir: -1 | 1) => void;\n onAction?: (allergy: Allergy, action: AllergyAction) => void;\n}) {\n const handleRowKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n if (e.altKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {\n e.preventDefault();\n onMove?.(allergy, e.key === 'ArrowUp' ? -1 : 1);\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const list = e.currentTarget.closest('ul');\n if (!list) return;\n const rows = Array.from(\n list.querySelectorAll<HTMLElement>('li[data-allergy-id]')\n );\n const i = rows.indexOf(e.currentTarget as HTMLElement);\n rows[\n e.key === 'ArrowUp'\n ? Math.max(0, i - 1)\n : Math.min(rows.length - 1, i + 1)\n ]?.focus();\n }\n };\n\n return (\n // Rows are focus stops when reordering is enabled so drag & drop has a\n // keyboard equivalent (Alt+↑/↓) — 508.\n /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */\n <li\n data-slot=\"clinical-list-row\"\n data-allergy-id={allergy.id}\n tabIndex={drag.enabled ? 0 : undefined}\n onKeyDown={drag.enabled ? handleRowKeyDown : undefined}\n aria-label={\n drag.enabled\n ? `${allergy.allergen}. Alt plus arrow keys to reorder.`\n : undefined\n }\n {...drag.rowProps(allergy.id)}\n className={cn(\n 'group border-border/60 relative flex min-h-11 flex-wrap items-center gap-x-2 gap-y-1 border-b px-1 py-2',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n drag.enabled && 'cursor-grab active:cursor-grabbing',\n dragIndicatorClasses(drag, allergy.id)\n )}\n >\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n {drag.enabled ? (\n <GripVerticalIcon\n size={14}\n aria-hidden\n className=\"text-muted-foreground/50 shrink-0\"\n />\n ) : (\n <span className=\"text-muted-foreground/60 select-none\">•</span>\n )}\n <span\n className={cn(\n 'text-foreground font-medium',\n allergy.inactive && 'text-muted-foreground line-through'\n )}\n >\n {allergy.allergen}\n </span>\n {allergy.code && (\n <span\n className=\"text-muted-foreground/70 text-xs\"\n title={allergy.code.display}\n >\n {allergy.code.system} {allergy.code.code}\n </span>\n )}\n {allergy.severity && (\n <Badge variant={SEVERITY_BADGE[allergy.severity]} size=\"sm\">\n {allergy.severity}\n </Badge>\n )}\n {allergy.kind === 'intolerance' && (\n <Badge variant=\"secondary\" size=\"sm\">\n intolerance\n </Badge>\n )}\n {allergy.reaction && (\n <span className=\"text-muted-foreground text-sm\">\n — {allergy.reaction}\n </span>\n )}\n {allergy.onsetDate && (\n <span className=\"text-muted-foreground text-xs\">\n since {allergy.onsetDate}\n </span>\n )}\n {allergy.inactive && (\n <Badge variant=\"secondary\" size=\"sm\">\n inactive\n </Badge>\n )}\n {allergy.note && (\n <span className=\"flex w-full basis-full items-center gap-1.5 ps-4\">\n <StickyNoteIcon size={12} className=\"text-muted-foreground\" />\n <span className=\"text-muted-foreground text-xs\">{allergy.note}</span>\n </span>\n )}\n\n {!readOnly && actions.length > 0 && (\n <RowActionToolbar label={`Actions for ${allergy.allergen}`}>\n {actions.map((action) => (\n <RowIconButton\n key={action}\n label={ACTION_META[action].label}\n icon={ACTION_META[action].icon}\n onClick={() => onAction?.(allergy, action)}\n />\n ))}\n </RowActionToolbar>\n )}\n </li>\n );\n}\n\n// =============================================================================\n// AllergyList\n// =============================================================================\n\n/**\n * Allergy / intolerance list — presentational layer.\n *\n * Controlled: allergies come in via props; every interaction is reported\n * through callbacks. Entries group by category (Drug → Food →\n * Environmental → Other); severity renders as a colored badge; hover (or\n * keyboard-focus) a row for Correct / Notes / Remove.\n *\n * The empty state is explicit tri-state via `noKnownAllergies` (NKA):\n * an empty list shows \"Allergy status not recorded\" until the No Known\n * Allergies affordance is confirmed — an empty list must never silently\n * read as \"no allergies\".\n *\n * Pair with `AllergyManager` for the batteries-included experience.\n */\nexport const AllergyList = React.forwardRef<HTMLDivElement, AllergyListProps>(\n (\n {\n allergies,\n noKnownAllergies,\n onNoKnownAllergiesChange,\n title = 'Allergies',\n actions = DEFAULT_ACTIONS,\n onAction,\n onReorder,\n addSearch,\n onAdd,\n readOnly = false,\n className,\n 'data-testid': dataTestId,\n ...props\n },\n ref\n ) => {\n const [announcement, setAnnouncement] = useLiveAnnouncement();\n\n const groups = TYPE_ORDER.map((type) => ({\n type,\n label: ALLERGY_TYPE_LABELS[type],\n items: allergies.filter((a) => (a.type ?? 'other') === type),\n })).filter((g) => g.items.length > 0);\n\n const empty = allergies.length === 0;\n\n // Drag & drop reordering, restricted to the same category group.\n const typeOf = React.useCallback(\n (id: string) => allergies.find((a) => a.id === id)?.type ?? 'other',\n [allergies]\n );\n const drag = useDragReorder({\n ids: allergies.map((a) => a.id),\n onReorder:\n readOnly || !onReorder\n ? undefined\n : (ids) => {\n setAnnouncement('Allergy list reordered');\n onReorder(ids);\n },\n canDropOn: (dragged, target) => typeOf(dragged) === typeOf(target),\n });\n\n /** Keyboard equivalent of dragging a row: swap within the category. */\n const moveAllergy = React.useCallback(\n (allergy: Allergy, dir: -1 | 1) => {\n if (readOnly || !onReorder) return;\n const ids = allergies.map((a) => a.id);\n const from = ids.indexOf(allergy.id);\n let to = from + dir;\n while (\n to >= 0 &&\n to < allergies.length &&\n (allergies[to].type ?? 'other') !== (allergy.type ?? 'other')\n ) {\n to += dir;\n }\n if (to < 0 || to >= allergies.length) return;\n [ids[from], ids[to]] = [ids[to], ids[from]];\n setAnnouncement(\n `${allergy.allergen} moved ${dir === -1 ? 'up' : 'down'}`\n );\n onReorder(ids);\n },\n [allergies, onReorder, readOnly, setAnnouncement]\n );\n\n return (\n <Card\n ref={ref}\n padding=\"none\"\n className={cn('w-full', className)}\n data-testid={dataTestId}\n {...props}\n >\n {title !== null && (\n <CardHeader className=\"border-border bg-muted/50 border-b px-4 py-3\">\n <h3 className=\"text-foreground flex items-center gap-2 text-sm font-semibold tracking-wide uppercase\">\n <AlertCircleIcon\n size={16}\n className=\"text-red-600 dark:text-red-400\"\n />\n {title}\n </h3>\n </CardHeader>\n )}\n\n <CardContent className=\"space-y-5 px-4 py-4\">\n {empty ? (\n <div className=\"space-y-2\">\n {noKnownAllergies ? (\n <p className=\"text-foreground flex items-center gap-1.5 text-sm\">\n <Badge variant=\"success\" size=\"sm\">\n ✓\n </Badge>\n No known allergies (NKA)\n </p>\n ) : (\n <p className=\"text-muted-foreground text-sm\">\n Allergy status not recorded.\n </p>\n )}\n {!readOnly && onNoKnownAllergiesChange && (\n <Button\n variant={noKnownAllergies ? 'secondary' : 'outline'}\n size=\"sm\"\n onClick={() => onNoKnownAllergiesChange(!noKnownAllergies)}\n >\n {noKnownAllergies\n ? 'Clear no-known-allergies'\n : 'Confirm: no known allergies'}\n </Button>\n )}\n </div>\n ) : (\n groups.map(({ type, label, items }) => (\n <section key={type} aria-label={label}>\n <h4\n data-slot=\"clinical-list-heading\"\n className=\"border-border text-foreground border-b pb-1 text-sm font-semibold tracking-wide uppercase\"\n >\n {label}\n </h4>\n <ul className=\"mt-1\">\n {items.map((allergy) => (\n <AllergyRow\n key={allergy.id}\n allergy={allergy}\n actions={actions}\n readOnly={readOnly}\n drag={drag}\n onMove={moveAllergy}\n onAction={onAction}\n />\n ))}\n </ul>\n </section>\n ))\n )}\n\n {!readOnly && (addSearch || onAdd) && (\n <div className=\"space-y-2\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Add allergy\n </span>\n {addSearch}\n {onAdd && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onAdd}\n leftIcon={<PlusIcon size={12} />}\n className=\"h-auto rounded-full px-2.5 py-1 text-xs\"\n >\n Add allergy…\n </Button>\n )}\n </div>\n )}\n </CardContent>\n\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n </Card>\n );\n }\n);\n\nAllergyList.displayName = 'AllergyList';\n\nexport default AllergyList;\n","'use client';\n\n/**\n * CodeLookupProvider — supply an offline `CodeLookup` once so the clinical\n * components (allergies, medications, conditions, orders, assessment) default\n * to coded search without per-component wiring.\n *\n * `CodeLookup` ships a module Web Worker the library's tsup build can't bundle,\n * so it can't be imported here — the app injects the component (import it from\n * its own bundler, e.g. Vite/Next) and this context distributes it:\n *\n * ```tsx\n * import { CodeLookupProvider } from '@mieweb/ui';\n * import { CodeLookup } from '…/CodeLookup'; // app bundler resolves the worker\n *\n * <CodeLookupProvider component={CodeLookup} indexUrl=\"/codify\">\n * <App />\n * </CodeLookupProvider>\n * ```\n *\n * Components read the context as their default; an explicit `codeLookup` /\n * `renderCodeSearch` prop overrides it, and `codeLookup={false}` (or\n * `renderCodeSearch={false}`) opts a component out back to plain text.\n *\n * This module is intentionally worker-free (only a `import type` of\n * `CodeLookupProps`, which is erased at build) so it is safe to ship in the\n * main `@mieweb/ui` entry.\n */\n\nimport * as React from 'react';\nimport type { CodeLookupProps } from './CodeLookup';\nimport type { MemoryStorage } from './memoryBackend';\n\n/**\n * The CodeLookup component the provider distributes to consumers.\n *\n * Typed as a bare function component (not `ComponentType`) so it stays\n * structurally assignable into the narrower per-domain lookup configs\n * (`MedicationLookupProps`, `OrderLookupProps`, …) — a `ComponentType` union\n * drags in `ComponentClass.defaultProps`, whose contravariance breaks that\n * assignment. `CodeLookup` is a function component, so this is exact.\n */\nexport type CodeLookupComponent = (\n props: CodeLookupProps\n) => React.ReactElement | null;\n\n/**\n * App-wide defaults for the CodeLookup memory picklist. Naming a signed-in\n * `userId` here turns the picklist on for every lookup below the provider —\n * instances need no wiring, and `memory={false}` (here or per-instance) turns\n * it back off.\n */\nexport interface CodeLookupMemoryDefaults {\n /** Signed-in user the counts belong to. No id, no memory. */\n userId?: string;\n /** Default count-sync endpoint (per-instance prop wins). */\n serverUrl?: string;\n /**\n * Bucket the counts are scoped to. Defaults per instance to that lookup's\n * `domains`, which keeps a med picker and a problem picker apart; set this\n * to pool every lookup into one list instead.\n */\n context?: string;\n /**\n * Where picks are cached on this machine. `'local'` (IndexedDB) asserts a\n * per-user device secured by a browser login; the default `'session'` keeps\n * them in RAM for the tab, which is what a public kiosk wants.\n */\n storage?: MemoryStorage;\n}\n\n/** Resolved lookup wiring a component consumes (from prop or context). */\nexport interface CodeLookupProviderConfig {\n /** The injected CodeLookup component (worker-capable, from the app bundle). */\n component: CodeLookupComponent;\n /** Base URL the codify worker fetches `{locale}/manifest.json` + shards from. */\n indexUrl: string;\n /** Shard-set locale (default 'en'). */\n locale?: string;\n /**\n * Defaults for the memory picklist, or `false` to disable it everywhere\n * below this provider (a public kiosk build). Naming a `userId` here is all\n * an instance needs; `false` overrides a component's own `memory` config.\n */\n memory?: false | CodeLookupMemoryDefaults;\n}\n\nconst CodeLookupContext = React.createContext<CodeLookupProviderConfig | null>(\n null\n);\n\nexport interface CodeLookupProviderProps {\n /** The CodeLookup component to distribute (import it in your app). */\n component: CodeLookupComponent;\n /** Where the codify index is served (default '/codify'). */\n indexUrl?: string;\n /** Shard-set locale (default 'en'). */\n locale?: string;\n /** Defaults for the memory picklist, or `false` to disable it everywhere. */\n memory?: false | CodeLookupMemoryDefaults;\n children: React.ReactNode;\n}\n\nexport function CodeLookupProvider({\n component,\n indexUrl = '/codify',\n locale = 'en',\n memory,\n children,\n}: CodeLookupProviderProps): React.ReactElement {\n const value = React.useMemo<CodeLookupProviderConfig>(\n () => ({ component, indexUrl, locale, memory }),\n [component, indexUrl, locale, memory]\n );\n return (\n <CodeLookupContext.Provider value={value}>\n {children}\n </CodeLookupContext.Provider>\n );\n}\n\n/**\n * The ambient CodeLookup config supplied by the nearest `CodeLookupProvider`,\n * or `null` when none is mounted (components then fall back to plain text).\n */\nexport function useCodeLookupConfig(): CodeLookupProviderConfig | null {\n return React.useContext(CodeLookupContext);\n}\n","'use client';\n\n/**\n * AllergyManager — batteries-included allergy list.\n *\n * Wraps the presentational `AllergyList` with the interaction layer: the\n * allergy editor (Correct / Add with CodeLookup allergen coding), the note\n * dialog, removal, and the no-known-allergies (NKA) flow. Uncontrolled via\n * `defaultAllergies` / controlled via `allergies` + `onChange` — same\n * pattern as `MedicationReconciliation`.\n */\n\nimport * as React from 'react';\nimport {\n AllergyList,\n type Allergy,\n type AllergyAction,\n type AllergyKind,\n type AllergySeverity,\n type AllergyType,\n} from './AllergyList';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Textarea } from '../Textarea';\nimport { Label } from '../Label';\nimport { Select } from '../Select';\nimport { RadioGroup, Radio } from '../Radio';\nimport { DateInput } from '../DateInput';\nimport type { CodeLookupConfig } from '../MedicationList';\nimport { useCodeLookupConfig } from '../CodeLookup/context';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface AllergyManagerProps {\n /** Controlled allergy list (use with `onChange`) */\n allergies?: Allergy[];\n /** Initial allergy list (uncontrolled) */\n defaultAllergies?: Allergy[];\n /** Called with the next list after every mutation */\n onChange?: (allergies: Allergy[]) => void;\n /** No-known-allergies flag (controlled; see AllergyList) */\n noKnownAllergies?: boolean;\n /** Called when NKA is toggled */\n onNoKnownAllergiesChange?: (value: boolean) => void;\n /** Header title (pass null to hide) */\n title?: string | null;\n /**\n * CodeLookup wiring for allergen search (drug shard). Enables both the\n * inline add bar and coded allergens in the editor. Defaults to the ambient\n * `CodeLookupProvider`; pass `false` to force plain text.\n */\n codeLookup?: CodeLookupConfig | false;\n /** Render an inline allergen search bar in the add section (requires codeLookup) */\n inlineAddSearch?: boolean;\n /** Hide all action affordances (display only) */\n readOnly?: boolean;\n /** Additional CSS classes */\n className?: string;\n /** Test ID for testing */\n 'data-testid'?: string;\n}\n\nfunction newId(): string {\n return `alg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n// =============================================================================\n// Editor dialog\n// =============================================================================\n\nconst TYPE_OPTIONS = [\n { value: 'drug', label: 'Drug' },\n { value: 'food', label: 'Food' },\n { value: 'environmental', label: 'Environmental' },\n { value: 'other', label: 'Other' },\n];\n\nfunction AllergyEditor({\n allergy,\n codeLookup,\n onClose,\n onSave,\n}: {\n allergy?: Allergy;\n codeLookup?: CodeLookupConfig;\n onClose: () => void;\n onSave: (allergy: Allergy) => void;\n}) {\n const [draft, setDraft] = React.useState<Allergy>(\n () => allergy ?? { id: newId(), allergen: '', type: 'drug' }\n );\n\n const patch = (p: Partial<Allergy>) =>\n setDraft((prev) => ({ ...prev, ...p }));\n\n // Focus the allergen search / input when the dialog opens.\n const bodyRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n bodyRef.current?.querySelector('input')?.focus();\n }, []);\n\n const canSave = draft.allergen.trim().length > 0;\n\n // CodeLookup's shards cover drugs (RxNorm/FDB — the 'med' domain); food\n // and environmental allergens have no shard, so the search only renders\n // for drug-type allergies and other types use a plain text input.\n const isDrug = (draft.type ?? 'drug') === 'drug';\n\n return (\n <Modal open onOpenChange={(o) => !o && onClose()} size=\"md\">\n <ModalHeader>\n <ModalTitle>{allergy ? 'Correct Allergy' : 'Add Allergy'}</ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"space-y-4\">\n <div ref={bodyRef} className=\"contents\">\n <RadioGroup\n name=\"alg-kind\"\n label=\"Mechanism\"\n description=\"A true immune-mediated allergy, or a non-immune intolerance (e.g. GI upset)\"\n value={draft.kind ?? 'allergy'}\n onValueChange={(v) => patch({ kind: v as AllergyKind })}\n orientation=\"horizontal\"\n size=\"sm\"\n >\n <Radio value=\"allergy\" label=\"Allergy\" />\n <Radio value=\"intolerance\" label=\"Intolerance\" />\n </RadioGroup>\n\n <Select\n label=\"Type\"\n options={TYPE_OPTIONS}\n value={draft.type ?? 'drug'}\n onValueChange={(v) => {\n const type = v as AllergyType;\n // A drug code is wrong on a non-drug allergen.\n patch({\n type,\n ...(type !== 'drug' && { code: undefined }),\n });\n }}\n />\n\n {isDrug && codeLookup ? (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-search\">Allergen</Label>\n <codeLookup.component\n indexUrl={codeLookup.indexUrl}\n locale={codeLookup.locale}\n domains={['med']}\n bare\n clearOnSelect={false}\n placeholder=\"Search drug allergens — e.g. penicillin\"\n onSelect={(result) =>\n patch({\n allergen: result.label,\n code: {\n system: result.codetype,\n code: result.fullcode,\n display: result.label,\n },\n })\n }\n onFreeText={(text) =>\n patch({ allergen: text, code: undefined })\n }\n />\n <p className=\"text-muted-foreground text-xs\">\n {draft.code\n ? `Coded: ${draft.code.system} ${draft.code.code}`\n : draft.allergen\n ? `Uncoded free text: \"${draft.allergen}\"`\n : 'Pick a result to code the allergen, or press Enter for free text'}\n </p>\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-name\">Allergen</Label>\n <Input\n id=\"alg-name\"\n value={draft.allergen}\n onChange={(e) => patch({ allergen: e.target.value })}\n />\n </div>\n )}\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-reaction\">Reaction</Label>\n <Input\n id=\"alg-reaction\"\n value={draft.reaction ?? ''}\n onChange={(e) => patch({ reaction: e.target.value })}\n />\n </div>\n\n <RadioGroup\n name=\"alg-severity\"\n label=\"Severity\"\n value={draft.severity ?? ''}\n onValueChange={(v) =>\n patch({ severity: (v || undefined) as AllergySeverity })\n }\n orientation=\"horizontal\"\n size=\"sm\"\n >\n <Radio value=\"mild\" label=\"Mild\" />\n <Radio value=\"moderate\" label=\"Moderate\" />\n <Radio value=\"severe\" label=\"Severe\" />\n </RadioGroup>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-onset\">Onset date</Label>\n <DateInput\n id=\"alg-onset\"\n value={draft.onsetDate ?? ''}\n onChange={(v) => patch({ onsetDate: v })}\n />\n </div>\n\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-note\">Note</Label>\n <Textarea\n id=\"alg-note\"\n value={draft.note ?? ''}\n onChange={(e) => patch({ note: e.target.value })}\n rows={2}\n />\n </div>\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n onClick={() => {\n onSave({ ...draft, allergen: draft.allergen.trim() });\n onClose();\n }}\n disabled={!canSave}\n >\n Save\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n\n// =============================================================================\n// AllergyManager\n// =============================================================================\n\ntype DialogState =\n | { kind: 'correct'; allergy: Allergy }\n | { kind: 'note'; allergy: Allergy }\n | { kind: 'add' }\n | null;\n\n/**\n * @example Patient intake (uncontrolled, inline search, NKA)\n * ```tsx\n * <AllergyManager\n * defaultAllergies={[]}\n * inlineAddSearch\n * codeLookup={{ component: CodeLookup, indexUrl: '/codify' }}\n * noKnownAllergies={nka}\n * onNoKnownAllergiesChange={setNka}\n * onChange={save}\n * />\n * ```\n */\nexport function AllergyManager({\n allergies: controlled,\n defaultAllergies,\n onChange,\n noKnownAllergies,\n onNoKnownAllergiesChange,\n title = 'Allergies',\n codeLookup,\n inlineAddSearch = false,\n readOnly = false,\n className,\n 'data-testid': dataTestId,\n}: AllergyManagerProps): React.JSX.Element {\n const isControlled = controlled !== undefined;\n const [internal, setInternal] = React.useState<Allergy[]>(\n defaultAllergies ?? []\n );\n const allergies = isControlled ? controlled : internal;\n\n // Default the lookup to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup: CodeLookupConfig | undefined =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const [dialog, setDialog] = React.useState<DialogState>(null);\n const [noteDraft, setNoteDraft] = React.useState('');\n\n const commit = (next: Allergy[]) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n // Any recorded allergy clears the NKA flag.\n if (next.length > 0 && noKnownAllergies) {\n onNoKnownAllergiesChange?.(false);\n }\n };\n\n const handleAction = (allergy: Allergy, action: AllergyAction) => {\n switch (action) {\n case 'remove':\n commit(allergies.filter((a) => a.id !== allergy.id));\n break;\n case 'correct':\n setDialog({ kind: 'correct', allergy });\n break;\n case 'note':\n setNoteDraft(allergy.note ?? '');\n setDialog({ kind: 'note', allergy });\n break;\n }\n };\n\n const addSearch =\n inlineAddSearch && effectiveCodeLookup && !readOnly ? (\n <effectiveCodeLookup.component\n indexUrl={effectiveCodeLookup.indexUrl}\n locale={effectiveCodeLookup.locale}\n domains={['med']}\n bare\n clearOnSelect\n placeholder=\"Search drug allergens to add — use Add allergy… for food/environmental\"\n onSelect={(result) =>\n commit([\n ...allergies,\n {\n id: newId(),\n allergen: result.label,\n type: 'drug',\n code: {\n system: result.codetype,\n code: result.fullcode,\n display: result.label,\n },\n },\n ])\n }\n onFreeText={(text) =>\n // this search bar is explicitly for drug allergens — free-text\n // entries carry type 'drug' like the coded path\n commit([...allergies, { id: newId(), allergen: text, type: 'drug' }])\n }\n />\n ) : undefined;\n\n return (\n <>\n <AllergyList\n allergies={allergies}\n noKnownAllergies={noKnownAllergies}\n onNoKnownAllergiesChange={onNoKnownAllergiesChange}\n title={title}\n onAction={handleAction}\n onReorder={(ids) =>\n commit(\n [...allergies].sort((a, b) => ids.indexOf(a.id) - ids.indexOf(b.id))\n )\n }\n addSearch={addSearch}\n onAdd={() => setDialog({ kind: 'add' })}\n readOnly={readOnly}\n className={className}\n data-testid={dataTestId}\n />\n\n {dialog && (dialog.kind === 'correct' || dialog.kind === 'add') && (\n <AllergyEditor\n key={dialog.kind === 'correct' ? dialog.allergy.id : 'add'}\n allergy={dialog.kind === 'correct' ? dialog.allergy : undefined}\n codeLookup={effectiveCodeLookup}\n onClose={() => setDialog(null)}\n onSave={(saved) => {\n if (dialog.kind === 'correct') {\n commit(allergies.map((a) => (a.id === saved.id ? saved : a)));\n } else {\n commit([...allergies, saved]);\n }\n }}\n />\n )}\n\n {dialog?.kind === 'note' && (\n <Modal open onOpenChange={(o) => !o && setDialog(null)} size=\"md\">\n <ModalHeader>\n <ModalTitle>Allergy Notes</ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"space-y-4\">\n <p className=\"text-muted-foreground text-sm\">\n {dialog.allergy.allergen}\n </p>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"alg-note-dlg\">Note</Label>\n <Textarea\n id=\"alg-note-dlg\"\n value={noteDraft}\n onChange={(e) => setNoteDraft(e.target.value)}\n rows={4}\n />\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={() => setDialog(null)}>\n Cancel\n </Button>\n <Button\n onClick={() => {\n commit(\n allergies.map((a) =>\n a.id === dialog.allergy.id\n ? { ...a, note: noteDraft.trim() || undefined }\n : a\n )\n );\n setDialog(null);\n }}\n >\n Save\n </Button>\n </ModalFooter>\n </Modal>\n )}\n </>\n );\n}\n\nexport default AllergyManager;\n","'use client';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Button } from '../Button';\nimport { Card, CardHeader, CardContent } from '../Card/Card';\nimport {\n ThumbsUpIcon,\n ThumbsDownIcon,\n HandMetalIcon,\n HelpCircleIcon,\n PencilIcon,\n RefreshIcon,\n CalendarCheckIcon,\n StickyNoteIcon,\n BanIcon,\n ChevronUpIcon,\n ChevronDownIcon,\n ExternalLinkIcon,\n PlusIcon,\n GripVerticalIcon,\n} from '../Icons';\nimport {\n useDragReorder,\n dragIndicatorClasses,\n type UseDragReorderReturn,\n} from '../../hooks/useDragReorder';\nimport { RowActionToolbar, RowIconButton } from '../RowActionToolbar';\nimport { useLiveAnnouncement } from '../../hooks/useLiveAnnouncement';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Reconciliation status of a medication. */\nexport type MedicationStatus =\n | 'unreconciled'\n | 'taking'\n | 'taking-noncompliant'\n | 'not-taking'\n | 'unknown';\n\n/** Coding-system reference for a medication (RxNorm / FDB / NDC …). */\nexport interface MedicationCode {\n /** Coding system, e.g. 'RxNORM', 'FDB', 'NDC' */\n system: string;\n /** Code within the system */\n code: string;\n /** Human-readable label the code was selected under */\n display?: string;\n}\n\n/**\n * A single medication in the presenting-medications list.\n *\n * Prescription-detail fields follow the NCPDP SCRIPT NewRx\n * `MedicationPrescribed` composite — see the README for the field mapping.\n * All are optional: a bare `{ id, name, status }` renders fine.\n */\nexport interface Medication {\n /** Stable unique id */\n id: string;\n /** Display name, e.g. \"lisinopril 10 mg tablet\" (NCPDP DrugDescription) */\n name: string;\n /** Patient-friendly instructions (NCPDP Sig / Directions) */\n sig?: string;\n /** Current reconciliation status */\n status: MedicationStatus;\n /** Whether the medication's end date has passed */\n expired?: boolean;\n /** Discontinued date (display string) — shown as \"Discontinued on: date\" */\n discontinuedDate?: string;\n /** Free-text note attached to the medication */\n note?: string;\n /** Follow-up task attached to the medication */\n task?: string;\n\n // —— Coding (NCPDP DrugCoded) ——\n /** Code reference (RxNorm / FDB / NDC) */\n code?: MedicationCode;\n\n // —— NCPDP SCRIPT NewRx prescription fields ——\n /** Strength, e.g. \"10 mg\" (Strength + StrengthUnitOfMeasure) */\n strength?: string;\n /** Dose form, e.g. \"tablet\" (DrugCoded/FormCode) */\n doseForm?: string;\n /** Quantity dispensed (Quantity/Value) */\n quantity?: string;\n /** Quantity unit of measure (Quantity/QuantityUnitOfMeasure) */\n quantityUnit?: string;\n /** Days supply (DaysSupply) */\n daysSupply?: string;\n /** Route of administration, e.g. \"oral\" */\n route?: string;\n /** Administration frequency, e.g. \"Twice daily\" */\n frequency?: string;\n /** As-needed flag (PRN) */\n prn?: boolean;\n /** Number of refills (NumberOfRefills) */\n refills?: string;\n /** Substitution / DAW: '0' permitted, '1' dispense as written */\n substitution?: '0' | '1';\n /** Start / written date (ISO yyyy-mm-dd) */\n startDate?: string;\n /** End date (ISO yyyy-mm-dd) */\n endDate?: string;\n /** Indication / diagnosis the medication treats */\n indication?: string;\n /** Note to pharmacy (Note) */\n pharmacyNotes?: string;\n}\n\n/** Non-status row actions revealed on hover. */\nexport type MedicationAction =\n | 'open'\n | 'correct'\n | 'refill'\n | 'add-task'\n | 'note'\n | 'remove'\n | 'move-up'\n | 'move-down';\n\nexport interface MedicationListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'title'\n> {\n /** Medications to display (controlled — grouping is derived from status) */\n medications: Medication[];\n /** Header title (pass null to hide) */\n title?: string | null;\n /** Called when a status button is clicked on a row */\n onStatusChange?: (medication: Medication, status: MedicationStatus) => void;\n /** Called when a non-status row action is clicked */\n onAction?: (medication: Medication, action: MedicationAction) => void;\n /**\n * Called with the full ordered list of medication ids after a drag —\n * enables drag & drop reordering within a status group. The list renders in\n * props order; persist the ids and feed them back in.\n */\n onReorder?: (medicationIds: string[]) => void;\n /** Which non-status actions to show on each row (default: all) */\n actions?: MedicationAction[];\n /** Common medication names for the quick-add list (omit to hide) */\n quickAddOptions?: string[];\n /** Called when a quick-add option is clicked */\n onQuickAdd?: (name: string) => void;\n /** Called when \"Other…\" is clicked in the quick-add list */\n onAddOther?: () => void;\n /** Hide all action buttons (display only) */\n readOnly?: boolean;\n /** Message shown when the Unreconciled group is empty */\n reconciledMessage?: string;\n /** Message shown when the medication list has no entries at all */\n emptyMessage?: string;\n /**\n * Custom add UI (e.g. an inline CodeLookup search) rendered in the\n * add-medication section, before any quick-add pills. Use for\n * patient-facing entry where suggested medications would be leading.\n */\n addSearch?: React.ReactNode;\n /** Additional CSS classes */\n className?: string;\n /** Test ID for testing */\n 'data-testid'?: string;\n}\n\n// =============================================================================\n// Constants\n// =============================================================================\n\nconst GROUP_ORDER: MedicationStatus[] = [\n 'unreconciled',\n 'taking',\n 'taking-noncompliant',\n 'not-taking',\n 'unknown',\n];\n\nexport const MEDICATION_STATUS_LABELS: Record<MedicationStatus, string> = {\n unreconciled: 'Unreconciled',\n taking: 'Taking as Directed',\n 'taking-noncompliant': 'Not Taking as Directed',\n 'not-taking': 'Not Taking',\n unknown: 'Unknown',\n};\n\nconst DEFAULT_ACTIONS: MedicationAction[] = [\n 'open',\n 'correct',\n 'refill',\n 'add-task',\n 'note',\n 'remove',\n];\n\nconst ACTION_META: Record<\n MedicationAction,\n { label: string; icon: React.ComponentType<{ size?: number | string }> }\n> = {\n open: { label: 'Open', icon: ExternalLinkIcon },\n correct: { label: 'Correct', icon: PencilIcon },\n refill: { label: 'Refill', icon: RefreshIcon },\n 'add-task': { label: 'Add Task', icon: CalendarCheckIcon },\n note: { label: 'Notes', icon: StickyNoteIcon },\n remove: { label: 'Remove', icon: BanIcon },\n 'move-up': { label: 'Move Up', icon: ChevronUpIcon },\n 'move-down': { label: 'Move Down', icon: ChevronDownIcon },\n};\n\nconst STATUS_BUTTON_META: {\n status: MedicationStatus;\n label: string;\n icon: React.ComponentType<{ size?: number | string }>;\n}[] = [\n { status: 'taking', label: 'Taking', icon: ThumbsUpIcon },\n {\n status: 'taking-noncompliant',\n label: 'Taking – Noncompliant',\n icon: HandMetalIcon,\n },\n { status: 'not-taking', label: 'Not Taking', icon: ThumbsDownIcon },\n { status: 'unknown', label: 'Unknown', icon: HelpCircleIcon },\n];\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\nfunction MedicationRow({\n medication,\n actions,\n readOnly,\n drag,\n onMove,\n onStatusChange,\n onAction,\n}: {\n medication: Medication;\n actions: MedicationAction[];\n readOnly: boolean;\n drag: UseDragReorderReturn;\n /** Keyboard equivalent of drag reordering (Alt+↑/↓) */\n onMove?: (medication: Medication, dir: -1 | 1) => void;\n onStatusChange?: (medication: Medication, status: MedicationStatus) => void;\n onAction?: (medication: Medication, action: MedicationAction) => void;\n}) {\n const handleRowKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n if (e.altKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {\n e.preventDefault();\n onMove?.(medication, e.key === 'ArrowUp' ? -1 : 1);\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const list = e.currentTarget.closest('ul');\n if (!list) return;\n const rows = Array.from(\n list.querySelectorAll<HTMLElement>('li[data-medication-id]')\n );\n const i = rows.indexOf(e.currentTarget as HTMLElement);\n rows[\n e.key === 'ArrowUp'\n ? Math.max(0, i - 1)\n : Math.min(rows.length - 1, i + 1)\n ]?.focus();\n }\n };\n\n return (\n // Rows are focus stops when reordering is enabled so drag & drop has a\n // keyboard equivalent (Alt+↑/↓) — 508.\n /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */\n <li\n data-slot=\"clinical-list-row\"\n data-medication-id={medication.id}\n tabIndex={drag.enabled ? 0 : undefined}\n onKeyDown={drag.enabled ? handleRowKeyDown : undefined}\n aria-label={\n drag.enabled\n ? `${medication.name}. Alt plus arrow keys to reorder.`\n : undefined\n }\n {...drag.rowProps(medication.id)}\n className={cn(\n 'group border-border/60 relative flex min-h-11 flex-wrap items-center gap-x-2 gap-y-1 border-b px-1 py-2',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none',\n drag.enabled && 'cursor-grab active:cursor-grabbing',\n dragIndicatorClasses(drag, medication.id)\n )}\n >\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n {drag.enabled ? (\n <GripVerticalIcon\n size={14}\n aria-hidden\n className=\"text-muted-foreground/50 shrink-0\"\n />\n ) : (\n <span className=\"text-muted-foreground/60 select-none\">•</span>\n )}\n <span className=\"text-foreground font-medium\">{medication.name}</span>\n {medication.code && (\n <span\n className=\"text-muted-foreground/70 text-xs\"\n title={medication.code.display}\n >\n {medication.code.system} {medication.code.code}\n </span>\n )}\n {medication.sig && (\n <span className=\"text-muted-foreground text-sm\">{medication.sig}</span>\n )}\n {medication.expired && (\n <span className=\"text-sm font-bold text-red-600 dark:text-red-400\">\n EXPIRED\n </span>\n )}\n {medication.discontinuedDate && (\n <span className=\"text-muted-foreground text-sm\">\n Discontinued on: {medication.discontinuedDate}\n </span>\n )}\n {(medication.note || medication.task) && (\n <span className=\"flex w-full basis-full flex-col gap-0.5 ps-4\">\n {medication.note && (\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n <StickyNoteIcon size={12} />\n {medication.note}\n </span>\n )}\n {medication.task && (\n <span className=\"text-muted-foreground flex items-center gap-1.5 text-xs\">\n <CalendarCheckIcon size={12} />\n Task: {medication.task}\n </span>\n )}\n </span>\n )}\n\n {!readOnly && (\n <RowActionToolbar label={`Actions for ${medication.name}`}>\n {actions.includes('open') && (\n <RowIconButton\n label={ACTION_META.open.label}\n icon={ACTION_META.open.icon}\n onClick={() => onAction?.(medication, 'open')}\n />\n )}\n {STATUS_BUTTON_META.map(({ status, label, icon }) => (\n <RowIconButton\n key={status}\n label={label}\n icon={icon}\n active={medication.status === status}\n onClick={() => onStatusChange?.(medication, status)}\n />\n ))}\n {actions\n .filter((a): a is Exclude<MedicationAction, 'open'> => a !== 'open')\n .map((action) => (\n <RowIconButton\n key={action}\n label={ACTION_META[action].label}\n icon={ACTION_META[action].icon}\n onClick={() => onAction?.(medication, action)}\n />\n ))}\n </RowActionToolbar>\n )}\n </li>\n );\n}\n\n// =============================================================================\n// MedicationList\n// =============================================================================\n\n/**\n * Presenting-medications list with medication reconciliation.\n *\n * Controlled component: medications (with their statuses) come in via props;\n * every user interaction is reported through callbacks. Rows are grouped by\n * reconciliation status; hovering (or keyboard-focusing) a row reveals the\n * status buttons and other row actions.\n *\n * @example\n * ```tsx\n * <MedicationList\n * medications={meds}\n * onStatusChange={(med, status) =>\n * setMeds((prev) =>\n * prev.map((m) => (m.id === med.id ? { ...m, status } : m))\n * )\n * }\n * onAction={(med, action) => handleAction(med, action)}\n * />\n * ```\n */\nexport const MedicationList = React.forwardRef<\n HTMLDivElement,\n MedicationListProps\n>(\n (\n {\n medications,\n title = 'Presenting medications',\n onStatusChange,\n onAction,\n onReorder,\n actions = DEFAULT_ACTIONS,\n quickAddOptions,\n onQuickAdd,\n onAddOther,\n readOnly = false,\n reconciledMessage = 'All medications reconciled.',\n emptyMessage = 'No medications recorded.',\n addSearch,\n className,\n 'data-testid': dataTestId,\n ...props\n },\n ref\n ) => {\n // clears-then-sets so repeated identical messages re-announce\n const [announcement, setAnnouncement] = useLiveAnnouncement();\n\n const handleStatusChange = React.useCallback(\n (medication: Medication, status: MedicationStatus) => {\n setAnnouncement(\n `${medication.name} marked ${MEDICATION_STATUS_LABELS[status]}`\n );\n onStatusChange?.(medication, status);\n },\n [onStatusChange, setAnnouncement]\n );\n\n const groups = GROUP_ORDER.map((status) => ({\n status,\n label: MEDICATION_STATUS_LABELS[status],\n items: medications.filter((m) => m.status === status),\n })).filter((g) => g.items.length > 0 || g.status === 'unreconciled');\n\n // Drag & drop reordering, restricted to the same status group (a cross-\n // group drop would silently imply a reconciliation change). Precomputed\n // map — dragover fires too frequently for a linear scan per event.\n const statusById = React.useMemo(\n () => new Map(medications.map((m) => [m.id, m.status] as const)),\n [medications]\n );\n const statusOf = React.useCallback(\n (id: string) => statusById.get(id),\n [statusById]\n );\n const drag = useDragReorder({\n ids: medications.map((m) => m.id),\n onReorder:\n readOnly || !onReorder\n ? undefined\n : (ids) => {\n // announce pointer drops too, not just keyboard moves\n setAnnouncement('Medication list reordered');\n onReorder(ids);\n },\n canDropOn: (dragged, target) => statusOf(dragged) === statusOf(target),\n });\n\n /** Keyboard equivalent of dragging a row: swap within the status group. */\n const moveMedication = React.useCallback(\n (medication: Medication, dir: -1 | 1) => {\n if (readOnly || !onReorder) return;\n const ids = medications.map((m) => m.id);\n const from = ids.indexOf(medication.id);\n let to = from + dir;\n while (\n to >= 0 &&\n to < medications.length &&\n medications[to].status !== medication.status\n ) {\n to += dir;\n }\n if (to < 0 || to >= medications.length) return;\n [ids[from], ids[to]] = [ids[to], ids[from]];\n setAnnouncement(\n `${medication.name} moved ${dir === -1 ? 'up' : 'down'}`\n );\n onReorder(ids);\n },\n [medications, onReorder, readOnly, setAnnouncement]\n );\n\n return (\n <Card\n ref={ref}\n padding=\"none\"\n className={cn('w-full', className)}\n data-testid={dataTestId}\n {...props}\n >\n {title !== null && (\n <CardHeader className=\"border-border bg-muted/50 border-b px-4 py-3\">\n <h3 className=\"text-foreground text-sm font-semibold tracking-wide uppercase\">\n {title}\n </h3>\n </CardHeader>\n )}\n\n <CardContent className=\"space-y-6 px-4 py-4\">\n {groups.map(({ status, label, items }) => (\n <section key={status} aria-label={label}>\n <h4\n data-slot=\"clinical-list-heading\"\n className=\"border-border text-foreground border-b pb-1 text-sm font-semibold tracking-wide uppercase\"\n >\n {label}\n </h4>\n {items.length > 0 ? (\n <ul className=\"mt-1\">\n {items.map((medication) => (\n <MedicationRow\n key={medication.id}\n medication={medication}\n actions={actions}\n readOnly={readOnly}\n drag={drag}\n onMove={moveMedication}\n onStatusChange={handleStatusChange}\n onAction={onAction}\n />\n ))}\n </ul>\n ) : medications.length === 0 ? (\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {emptyMessage}\n </p>\n ) : (\n <p className=\"text-muted-foreground mt-2 flex items-center gap-1.5 text-sm\">\n <Badge variant=\"success\" size=\"sm\">\n ✓\n </Badge>\n {reconciledMessage}\n </p>\n )}\n </section>\n ))}\n\n {!readOnly &&\n (addSearch || quickAddOptions?.length || onAddOther) && (\n <div className=\"space-y-2\">\n <span className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Add medication\n </span>\n {addSearch}\n {(quickAddOptions?.length || onAddOther) && (\n <div className=\"flex flex-wrap items-center gap-1.5\">\n {quickAddOptions?.map((name) => (\n <Button\n key={name}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onQuickAdd?.(name)}\n leftIcon={<PlusIcon size={12} />}\n className=\"border-border h-auto rounded-full border px-2.5 py-1 text-xs\"\n >\n {name}\n </Button>\n ))}\n {onAddOther && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onAddOther}\n leftIcon={<PlusIcon size={12} />}\n className=\"h-auto rounded-full px-2.5 py-1 text-xs\"\n >\n Other…\n </Button>\n )}\n </div>\n )}\n </div>\n )}\n </CardContent>\n\n {/* Confirmation announcement for screen readers */}\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n </Card>\n );\n }\n);\n\nMedicationList.displayName = 'MedicationList';\n\nexport default MedicationList;\n","'use client';\n\n/**\n * MedicationEditor — prescription editor modal for a `Medication`.\n *\n * Captures the NCPDP SCRIPT NewRx `MedicationPrescribed` field set and codes\n * the drug via `CodeLookup` (RxNorm / FDB, offline). Used by\n * `MedicationReconciliation` for both **Correct** (edit) and **Add\n * Medication**, and usable directly:\n *\n * ```tsx\n * <MedicationEditor\n * open={editing !== null}\n * medication={editing ?? undefined}\n * codeLookup={{ indexUrl: '/codify' }}\n * onClose={() => setEditing(null)}\n * onSave={(med) => upsert(med)}\n * />\n * ```\n *\n * NCPDP mapping (NewRx / MedicationPrescribed):\n *\n * | Editor field | NCPDP element |\n * |----------------|----------------------------------------|\n * | Medication | DrugDescription |\n * | Code | DrugCoded (ProductCode / DrugDBCode) |\n * | Strength | Strength + StrengthUnitOfMeasure |\n * | Dose form | DrugCoded/FormCode |\n * | Quantity | Quantity/Value |\n * | Quantity unit | Quantity/QuantityUnitOfMeasure |\n * | Days supply | DaysSupply |\n * | Directions | Sig/SigText |\n * | Refills | NumberOfRefills |\n * | Substitution | Substitutions (0 permitted / 1 DAW) |\n * | Start date | WrittenDate / EffectiveDate |\n * | Indication | Diagnosis/Primary |\n * | Pharmacy notes | Note |\n */\n\nimport * as React from 'react';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\nimport { Button } from '../Button';\nimport { Input } from '../Input';\nimport { Textarea } from '../Textarea';\nimport { Label } from '../Label';\nimport { RadioGroup, Radio } from '../Radio';\nimport { DateInput } from '../DateInput';\nimport type { Medication } from './MedicationList';\nimport { useCodeLookupConfig } from '../CodeLookup/context';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Minimal shape of a CodeLookup selection the editor consumes. */\nexport interface MedicationLookupResult {\n label: string;\n codetype: string;\n fullcode: string;\n}\n\n/**\n * Structural subset of `CodeLookupProps` the editor uses. `CodeLookup`\n * satisfies this — it is injected (not imported) because its Web Worker\n * keeps it out of the library build (see CodeLookup/index.ts).\n */\nexport interface MedicationLookupProps {\n indexUrl: string;\n locale?: string;\n domains?: 'med'[];\n bare?: boolean;\n clearOnSelect?: boolean;\n placeholder?: string;\n initialQuery?: string;\n initialSearch?: boolean;\n onSelect?: (result: MedicationLookupResult) => void;\n onFreeText?: (text: string) => void;\n}\n\n/** CodeLookup wiring for the editor (component injected by the consumer). */\nexport interface CodeLookupConfig {\n /** The CodeLookup component: `import { CodeLookup } from '…/CodeLookup'` */\n component: React.ComponentType<MedicationLookupProps>;\n /** Base URL of the codify index, e.g. '/codify' */\n indexUrl: string;\n /** Shard locale (default 'en') */\n locale?: string;\n}\n\nexport interface MedicationEditorProps {\n /** Whether the editor is open */\n open: boolean;\n /** Medication being edited — omit for \"add\" mode */\n medication?: Medication;\n /**\n * Codify shard location for RxNorm/FDB coding. Defaults to the ambient\n * `CodeLookupProvider`; pass `false` to force a plain name input.\n */\n codeLookup?: CodeLookupConfig | false;\n /** Called when the editor is dismissed without saving */\n onClose: () => void;\n /** Called with the complete medication on save */\n onSave: (medication: Medication) => void;\n}\n\n// =============================================================================\n// Parsers — drug label → strength/form, sig → route/frequency/PRN\n// =============================================================================\n\nconst DOSE_FORMS = [\n 'tablet',\n 'capsule',\n 'solution',\n 'suspension',\n 'syrup',\n 'cream',\n 'ointment',\n 'gel',\n 'patch',\n 'suppository',\n 'spray',\n 'drops',\n 'inhaler',\n 'injection',\n 'lozenge',\n 'powder',\n 'film',\n];\n\n/** Quantity unit implied by each dose form (NCPDP QuantityUnitOfMeasure). */\nconst FORM_TO_UNIT: Record<string, string> = {\n tablet: 'tablet',\n capsule: 'capsule',\n solution: 'milliliter',\n suspension: 'milliliter',\n syrup: 'milliliter',\n cream: 'gram',\n ointment: 'gram',\n gel: 'gram',\n patch: 'patch',\n suppository: 'suppository',\n spray: 'spray',\n drops: 'milliliter',\n inhaler: 'each',\n injection: 'milliliter',\n lozenge: 'each',\n powder: 'gram',\n film: 'each',\n};\n\n/**\n * Parse strength + dose form out of a coded drug label,\n * e.g. \"lisinopril 20 mg tablet\" → { strength: '20 mg', doseForm: 'tablet' }.\n */\nexport function parseMedicationLabel(label: string): {\n strength?: string;\n doseForm?: string;\n} {\n const lower = label.toLowerCase();\n // bounded quantifiers keep the match linear-time on adversarial inputs\n // (unbounded \\d+ groups backtrack polynomially on long digit runs)\n const strengthMatch = lower.match(\n /(\\d{1,7}(?:\\.\\d{1,4})?(?:\\s{0,4}\\/\\s{0,4}\\d{1,7}(?:\\.\\d{1,4})?)?)\\s{0,4}(mg\\/ml|mcg\\/ml|mg|mcg|g|ml|units?|%|meq)\\b/\n );\n const doseForm = DOSE_FORMS.find((f) => lower.includes(f));\n return {\n strength: strengthMatch\n ? `${strengthMatch[1].replace(/\\s+/g, '')} ${strengthMatch[2]}`\n : undefined,\n doseForm,\n };\n}\n\nconst SIG_ROUTES: [RegExp, string][] = [\n [/\\bby mouth\\b|\\boral(ly)?\\b|\\bpo\\b/, 'oral'],\n [/\\bsublingual(ly)?\\b|\\bunder the tongue\\b|\\bsl\\b/, 'sublingual'],\n [/\\bsubcutaneous(ly)?\\b|\\bsubq\\b|\\bsc\\b|\\bsq\\b/, 'subcutaneous'],\n [/\\bintramuscular(ly)?\\b|\\bim\\b/, 'intramuscular'],\n [/\\bintravenous(ly)?\\b|\\biv\\b/, 'intravenous'],\n [/\\binhal(e|ation|ed)\\b|\\bpuffs?\\b|\\bnebuliz/, 'inhalation'],\n [/\\beyes?\\b|\\bophthalmic\\b/, 'ophthalmic'],\n [/\\bears?\\b|\\botic\\b/, 'otic'],\n [/\\bnostrils?\\b|\\bnasal(ly)?\\b|\\bintranasal/, 'nasal'],\n [/\\brectal(ly)?\\b|\\bpr\\b/, 'rectal'],\n [/\\btransdermal\\b|\\bto (the )?skin\\b|\\bapply\\b|\\btopical(ly)?\\b/, 'topical'],\n];\n\n// Order matters: specific patterns must precede the bare-\"daily\" fallback\n// (\"twice daily\" must not match Once daily's \\bdaily\\b).\nconst SIG_FREQUENCIES: [RegExp, string][] = [\n [/\\bevery other day\\b|\\bqod\\b/, 'Every other day'],\n [/\\btwice (a |per )?day\\b|\\btwice daily\\b|\\bbid\\b/, 'Twice daily'],\n [\n /\\b(three times|3 times)( a| per)? day\\b|\\b(three times|3 times) daily\\b|\\btid\\b/,\n 'Three times daily',\n ],\n [\n /\\b(four times|4 times)( a| per)? day\\b|\\b(four times|4 times) daily\\b|\\bqid\\b/,\n 'Four times daily',\n ],\n [/\\bevery morning\\b|\\bqam\\b/, 'Every morning'],\n [/\\b(at )?bedtime\\b|\\bqhs\\b|\\bat night\\b/, 'Every bedtime'],\n [/\\bweekly\\b|\\bonce a week\\b|\\bevery week\\b/, 'Weekly'],\n [\n /\\bonce (a |per )?day\\b|\\bonce daily\\b|\\bdaily\\b|\\bevery day\\b|\\bqd\\b/,\n 'Once daily',\n ],\n];\n\n/**\n * Derive route / frequency / PRN from free-text sig,\n * e.g. \"1 tablet by mouth daily as needed\" →\n * { route: 'oral', frequency: 'Once daily', prn: true }.\n */\nexport function parseSig(sig: string): {\n route?: string;\n frequency?: string;\n prn: boolean;\n} {\n const lower = sig.toLowerCase();\n const route = SIG_ROUTES.find(([re]) => re.test(lower))?.[1];\n const frequency = SIG_FREQUENCIES.find(([re]) => re.test(lower))?.[1];\n const prn = /\\bas needed\\b|\\bprn\\b/.test(lower);\n return { route, frequency, prn };\n}\n\n/**\n * Derive the label-parsed Medication fields — strength, dose form, and the\n * form-implied quantity unit — from a drug display label,\n * e.g. \"lisinopril 10 mg tablet\" → { strength: '10 mg', doseForm: 'tablet',\n * quantityUnit: 'tablet' }.\n */\nexport function labelToMedicationFields(label: string): Partial<Medication> {\n const { strength, doseForm } = parseMedicationLabel(label);\n return {\n ...(strength && { strength }),\n ...(doseForm && {\n doseForm,\n quantityUnit: FORM_TO_UNIT[doseForm] ?? doseForm,\n }),\n };\n}\n\n/**\n * Derive Medication fields from a CodeLookup pick: name, code reference,\n * and — parsed from the label — strength, dose form, and quantity unit.\n * Used by the editor and by inline add-search flows.\n */\nexport function lookupToMedicationFields(\n result: MedicationLookupResult\n): Partial<Medication> {\n return {\n name: result.label,\n code: {\n system: result.codetype,\n code: result.fullcode,\n display: result.label,\n },\n ...labelToMedicationFields(result.label),\n };\n}\n\nfunction newId(): string {\n return `med-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n// =============================================================================\n// MedicationEditor\n// =============================================================================\n\nexport function MedicationEditor({\n open,\n medication,\n codeLookup,\n onClose,\n onSave,\n}: MedicationEditorProps): React.JSX.Element | null {\n // Default the lookup to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup: CodeLookupConfig | undefined =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const [draft, setDraft] = React.useState<Medication>(\n () =>\n medication ?? {\n id: newId(),\n name: '',\n status: 'unreconciled',\n }\n );\n\n // NOTE: draft state is seeded once per mount — give the editor a `key`\n // (e.g. the medication id) so a different target remounts it.\n\n // Focus the medication search / name input when the dialog opens.\n const bodyRef = React.useRef<HTMLDivElement>(null);\n React.useEffect(() => {\n const input = bodyRef.current?.querySelector('input');\n input?.focus();\n }, []);\n\n const patch = (p: Partial<Medication>) =>\n setDraft((prev) => ({ ...prev, ...p }));\n\n const handleCodeSelect = (result: MedicationLookupResult) => {\n // Populate strength / dose form / quantity unit from the coded label.\n patch(lookupToMedicationFields(result));\n };\n\n const handleSigChange = (sig: string) => {\n // Route / frequency / PRN are derived from the sig text.\n const { route, frequency, prn } = parseSig(sig);\n patch({ sig, route, frequency, prn: prn || undefined });\n };\n\n const canSave = draft.name.trim().length > 0;\n\n if (!open) return null;\n\n return (\n <Modal open onOpenChange={(o) => !o && onClose()} size=\"lg\">\n <ModalHeader>\n <ModalTitle>\n {medication ? 'Correct Medication' : 'Add Medication'}\n </ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"space-y-5\">\n <div ref={bodyRef} className=\"contents\">\n {/* ——— Medication + coding ——— */}\n <section className=\"space-y-3\" aria-label=\"Medication\">\n {effectiveCodeLookup ? (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-search\">Medication</Label>\n <effectiveCodeLookup.component\n indexUrl={effectiveCodeLookup.indexUrl}\n locale={effectiveCodeLookup.locale}\n domains={['med']}\n bare\n clearOnSelect={false}\n placeholder=\"Search RxNorm / FDB — e.g. lisinopril\"\n // Seed the search box with the medication name. Editing an\n // uncoded medication also runs the search immediately so the\n // closest coded matches are offered (a pick fills coding,\n // strength, and dose form); coded ones just show their name.\n initialQuery={medication?.name || undefined}\n initialSearch={medication ? !medication.code : undefined}\n onSelect={handleCodeSelect}\n onFreeText={(text) => patch({ name: text, code: undefined })}\n />\n <p className=\"text-muted-foreground text-xs\">\n {draft.code\n ? `Coded: ${draft.code.system} ${draft.code.code}`\n : draft.name\n ? `Uncoded free text: \"${draft.name}\" — pick a result to code it`\n : 'Pick a result to code the medication, or press Enter for free text'}\n </p>\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-name\">Medication</Label>\n <Input\n id=\"med-name\"\n value={draft.name}\n onChange={(e) => patch({ name: e.target.value })}\n />\n </div>\n )}\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-strength\">Strength</Label>\n <Input\n id=\"med-strength\"\n value={draft.strength ?? ''}\n onChange={(e) => patch({ strength: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-form\">Dose form</Label>\n <Input\n id=\"med-form\"\n value={draft.doseForm ?? ''}\n onChange={(e) => {\n const doseForm = e.target.value;\n const normalized = doseForm.toLowerCase().trim();\n // Quantity unit follows the dose form (tablet → tablet,\n // solution → milliliter, …)\n patch({\n doseForm,\n quantityUnit:\n (FORM_TO_UNIT[normalized] ?? normalized) || undefined,\n });\n }}\n />\n </div>\n </div>\n </section>\n\n {/* ——— Dispensing ——— */}\n <section className=\"space-y-3\" aria-label=\"Dispensing\">\n <h4 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Dispensing\n </h4>\n <div className=\"grid grid-cols-3 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-qty\">\n Quantity\n {draft.quantityUnit ? ` (${draft.quantityUnit}s)` : ''}\n </Label>\n <Input\n id=\"med-qty\"\n inputMode=\"decimal\"\n value={draft.quantity ?? ''}\n onChange={(e) => patch({ quantity: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-days\">Days supply</Label>\n <Input\n id=\"med-days\"\n inputMode=\"numeric\"\n value={draft.daysSupply ?? ''}\n onChange={(e) => patch({ daysSupply: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-refills\">Refills</Label>\n <Input\n id=\"med-refills\"\n inputMode=\"numeric\"\n value={draft.refills ?? ''}\n onChange={(e) => patch({ refills: e.target.value })}\n />\n </div>\n </div>\n <RadioGroup\n name=\"med-substitution\"\n label=\"Substitution\"\n value={draft.substitution ?? '0'}\n onValueChange={(v) => patch({ substitution: v as '0' | '1' })}\n orientation=\"horizontal\"\n size=\"sm\"\n >\n <Radio value=\"0\" label=\"Substitution permitted\" />\n <Radio value=\"1\" label=\"Dispense as written (DAW)\" />\n </RadioGroup>\n </section>\n\n {/* ——— Directions ——— */}\n <section className=\"space-y-3\" aria-label=\"Directions\">\n <h4 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Directions\n </h4>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-sig\">Sig (patient directions)</Label>\n <Textarea\n id=\"med-sig\"\n value={draft.sig ?? ''}\n onChange={(e) => handleSigChange(e.target.value)}\n rows={2}\n />\n <p className=\"text-muted-foreground text-xs\" aria-live=\"polite\">\n {draft.route || draft.frequency || draft.prn ? (\n <>\n Derived:{' '}\n {[\n draft.route && `route ${draft.route}`,\n draft.frequency && draft.frequency.toLowerCase(),\n draft.prn && 'PRN (as needed)',\n ]\n .filter(Boolean)\n .join(' · ')}\n </>\n ) : (\n 'Route, frequency, and PRN are derived from the directions'\n )}\n </p>\n </div>\n </section>\n\n {/* ——— Dates & context ——— */}\n <section className=\"space-y-3\" aria-label=\"Dates and context\">\n <h4 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n Dates &amp; context\n </h4>\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-start\">Start date</Label>\n <DateInput\n id=\"med-start\"\n value={draft.startDate ?? ''}\n onChange={(v) => patch({ startDate: v })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-end\">End date</Label>\n <DateInput\n id=\"med-end\"\n value={draft.endDate ?? ''}\n onChange={(v) => patch({ endDate: v })}\n />\n </div>\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-indication\">Indication</Label>\n <Input\n id=\"med-indication\"\n value={draft.indication ?? ''}\n onChange={(e) => patch({ indication: e.target.value })}\n />\n </div>\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-pharmacy-notes\">Pharmacy notes</Label>\n <Textarea\n id=\"med-pharmacy-notes\"\n value={draft.pharmacyNotes ?? ''}\n onChange={(e) => patch({ pharmacyNotes: e.target.value })}\n rows={2}\n />\n </div>\n </section>\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n <Button\n onClick={() => {\n onSave({ ...draft, name: draft.name.trim() });\n onClose();\n }}\n disabled={!canSave}\n >\n Save\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n\nexport default MedicationEditor;\n","'use client';\n\n/**\n * MedicationReconciliation — batteries-included medication reconciliation.\n *\n * Wraps the presentational `MedicationList` with the full interaction layer:\n * status changes, Correct / Notes / Add Task modal dialogs, reordering,\n * removal, and adding medications (quick-add pills + \"Other…\" modal).\n *\n * Works standalone (uncontrolled with `defaultMedications`, or controlled\n * with `medications` + `onChange`) and is the engine behind the eSheet\n * `medicationList` question type.\n */\n\nimport * as React from 'react';\nimport {\n MedicationList,\n type Medication,\n type MedicationAction,\n} from './MedicationList';\nimport {\n Modal,\n ModalHeader,\n ModalTitle,\n ModalClose,\n ModalBody,\n ModalFooter,\n} from '../Modal';\nimport { Button } from '../Button';\nimport { Textarea } from '../Textarea';\nimport { Label } from '../Label';\nimport {\n MedicationEditor,\n lookupToMedicationFields,\n type CodeLookupConfig,\n} from './MedicationEditor';\nimport { useCodeLookupConfig } from '../CodeLookup/context';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nconst MANAGED_ACTIONS: MedicationAction[] = [\n 'correct',\n 'add-task',\n 'note',\n 'remove',\n];\n\nexport interface MedicationReconciliationProps {\n /** Controlled medication list (use with `onChange`) */\n medications?: Medication[];\n /** Initial medication list (uncontrolled) */\n defaultMedications?: Medication[];\n /** Called with the next list after every mutation */\n onChange?: (medications: Medication[]) => void;\n /** Header title (pass null to hide) */\n title?: string | null;\n /** Common medication names for the quick-add list (omit to hide) */\n quickAddOptions?: string[];\n /** Row actions to show (default: correct, add-task, note, remove) */\n actions?: MedicationAction[];\n /**\n * Called for host-specific actions this component does not manage\n * (e.g. 'open', 'refill' when included in `actions`).\n */\n onAction?: (medication: Medication, action: MedicationAction) => void;\n /**\n * CodeLookup wiring for the medication editor (Correct / Add Medication):\n * pass the CodeLookup component + shard location to enable RxNorm/FDB\n * coding. Defaults to the ambient `CodeLookupProvider` when one is mounted;\n * pass `false` to force a plain-text medication name input.\n *\n * ```tsx\n * import { CodeLookup } from '@mieweb/ui/…/CodeLookup';\n * <MedicationReconciliation codeLookup={{ component: CodeLookup, indexUrl: '/codify' }} … />\n * ```\n */\n codeLookup?: CodeLookupConfig | false;\n /**\n * Render an inline CodeLookup search bar in the add-medication section\n * (requires `codeLookup`). Picks add immediately as Unreconciled — the\n * fastest entry path, and non-leading (no suggested medications), which\n * makes it the right choice for patient-facing intake.\n */\n inlineAddSearch?: boolean;\n /** Hide all action buttons (display only) */\n readOnly?: boolean;\n /** Message shown when the Unreconciled group is empty */\n reconciledMessage?: string;\n /** Message shown when the medication list has no entries at all */\n emptyMessage?: string;\n /** Additional CSS classes */\n className?: string;\n /** Test ID for testing */\n 'data-testid'?: string;\n}\n\nfunction newId(): string {\n return `med-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n// =============================================================================\n// Modal dialogs\n// =============================================================================\n\ntype DialogState =\n | { kind: 'correct'; medication: Medication }\n | { kind: 'note'; medication: Medication }\n | { kind: 'add-task'; medication: Medication }\n | { kind: 'add' }\n | null;\n\n/** Small note / task dialog. Correct + Add use the full MedicationEditor. */\nfunction MedicationDialog({\n dialog,\n onClose,\n onSave,\n}: {\n dialog: { kind: 'note' | 'add-task'; medication: Medication };\n onClose: () => void;\n onSave: (fields: Record<string, string>) => void;\n}) {\n const [form, setForm] = React.useState<Record<string, string>>(() =>\n dialog.kind === 'note'\n ? ({ note: dialog.medication.note ?? '' } as Record<string, string>)\n : ({ task: dialog.medication.task ?? '' } as Record<string, string>)\n );\n\n const set =\n (key: string) =>\n (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) =>\n setForm((prev) => ({ ...prev, [key]: e.target.value }));\n\n const handleSave = () => {\n onSave(form);\n onClose();\n };\n\n return (\n <Modal open onOpenChange={(open) => !open && onClose()} size=\"md\">\n <ModalHeader>\n <ModalTitle>\n {dialog.kind === 'note' ? 'Medication Notes' : 'Add Task'}\n </ModalTitle>\n <ModalClose />\n </ModalHeader>\n <ModalBody className=\"space-y-4\">\n <p className=\"text-muted-foreground text-sm\">\n {dialog.medication.name}\n </p>\n {dialog.kind === 'note' ? (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-note\">Note</Label>\n <Textarea\n id=\"med-note\"\n value={form.note}\n onChange={set('note')}\n rows={4}\n />\n </div>\n ) : (\n <div className=\"space-y-1.5\">\n <Label htmlFor=\"med-task\">Task</Label>\n <Textarea\n id=\"med-task\"\n value={form.task}\n onChange={set('task')}\n rows={3}\n placeholder=\"Follow-up task for this medication\"\n />\n </div>\n )}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n Cancel\n </Button>\n <Button onClick={handleSave}>Save</Button>\n </ModalFooter>\n </Modal>\n );\n}\n\n// =============================================================================\n// MedicationReconciliation\n// =============================================================================\n\n/**\n * @example Standalone (uncontrolled)\n * ```tsx\n * <MedicationReconciliation\n * defaultMedications={presentingMeds}\n * quickAddOptions={['aspirin 81 mg tablet']}\n * onChange={(meds) => save(meds)}\n * />\n * ```\n *\n * @example Controlled\n * ```tsx\n * <MedicationReconciliation medications={meds} onChange={setMeds} />\n * ```\n */\nexport function MedicationReconciliation({\n medications: controlledMedications,\n defaultMedications,\n onChange,\n title = 'Presenting medications',\n quickAddOptions,\n actions = MANAGED_ACTIONS,\n onAction,\n codeLookup,\n inlineAddSearch = false,\n readOnly = false,\n reconciledMessage,\n emptyMessage,\n className,\n 'data-testid': dataTestId,\n}: MedicationReconciliationProps): React.JSX.Element {\n const isControlled = controlledMedications !== undefined;\n const [internal, setInternal] = React.useState<Medication[]>(\n defaultMedications ?? []\n );\n const medications = isControlled ? controlledMedications : internal;\n\n // Default the lookup to the ambient provider; `false` forces plain text.\n const ambientCodeLookup = useCodeLookupConfig();\n const effectiveCodeLookup: CodeLookupConfig | undefined =\n codeLookup === false\n ? undefined\n : (codeLookup ?? ambientCodeLookup ?? undefined);\n\n const [dialog, setDialog] = React.useState<DialogState>(null);\n\n const commit = (next: Medication[]) => {\n if (!isControlled) setInternal(next);\n onChange?.(next);\n };\n\n const patchMedication = (id: string, patch: Partial<Medication>) => {\n commit(medications.map((m) => (m.id === id ? { ...m, ...patch } : m)));\n };\n\n const moveMedication = (med: Medication, direction: -1 | 1) => {\n // Reorder within the same status group.\n const meds = [...medications];\n const group = meds.filter((m) => m.status === med.status);\n const groupIndex = group.findIndex((m) => m.id === med.id);\n const swapWith = group[groupIndex + direction];\n if (!swapWith) return;\n const i = meds.findIndex((m) => m.id === med.id);\n const j = meds.findIndex((m) => m.id === swapWith.id);\n [meds[i], meds[j]] = [meds[j], meds[i]];\n commit(meds);\n };\n\n const handleAction = (med: Medication, action: MedicationAction) => {\n switch (action) {\n case 'remove':\n commit(medications.filter((m) => m.id !== med.id));\n break;\n case 'move-up':\n moveMedication(med, -1);\n break;\n case 'move-down':\n moveMedication(med, 1);\n break;\n case 'correct':\n case 'note':\n case 'add-task':\n setDialog({ kind: action, medication: med });\n break;\n default:\n // Host-specific actions ('open', 'refill') are delegated.\n onAction?.(med, action);\n break;\n }\n };\n\n const addMedication = (name: string, sig?: string) => {\n commit([\n ...medications,\n { id: newId(), name, sig: sig || undefined, status: 'unreconciled' },\n ]);\n };\n\n const handleDialogSave = (form: Record<string, string>) => {\n if (!dialog) return;\n switch (dialog.kind) {\n case 'note':\n patchMedication(dialog.medication.id, {\n note: form.note.trim() || undefined,\n });\n break;\n case 'add-task':\n patchMedication(dialog.medication.id, {\n task: form.task.trim() || undefined,\n });\n break;\n }\n };\n\n /** Correct + Add flow through the full NCPDP MedicationEditor. */\n const editorOpen = dialog?.kind === 'correct' || dialog?.kind === 'add';\n const editorTarget =\n dialog?.kind === 'correct' ? dialog.medication : undefined;\n\n const handleEditorSave = (med: Medication) => {\n if (dialog?.kind === 'correct') {\n commit(medications.map((m) => (m.id === med.id ? med : m)));\n } else {\n commit([...medications, { ...med, status: 'unreconciled' }]);\n }\n };\n\n /** Inline CodeLookup add bar — picks/free text land in Unreconciled. */\n const addSearch =\n inlineAddSearch && effectiveCodeLookup && !readOnly ? (\n <effectiveCodeLookup.component\n indexUrl={effectiveCodeLookup.indexUrl}\n locale={effectiveCodeLookup.locale}\n domains={['med']}\n bare\n clearOnSelect\n placeholder=\"Search medications to add\"\n onSelect={(result) =>\n commit([\n ...medications,\n {\n id: newId(),\n name: result.label,\n status: 'unreconciled',\n ...lookupToMedicationFields(result),\n },\n ])\n }\n onFreeText={(text) => addMedication(text)}\n />\n ) : undefined;\n\n return (\n <>\n <MedicationList\n medications={medications}\n title={title}\n readOnly={readOnly}\n actions={actions}\n onStatusChange={(med, status) => patchMedication(med.id, { status })}\n onAction={handleAction}\n onReorder={(ids) =>\n commit(\n [...medications].sort(\n (a, b) => ids.indexOf(a.id) - ids.indexOf(b.id)\n )\n )\n }\n quickAddOptions={quickAddOptions}\n onQuickAdd={(name) => addMedication(name)}\n onAddOther={() => setDialog({ kind: 'add' })}\n addSearch={addSearch}\n reconciledMessage={reconciledMessage}\n emptyMessage={emptyMessage}\n className={className}\n data-testid={dataTestId}\n />\n {dialog && (dialog.kind === 'note' || dialog.kind === 'add-task') && (\n <MedicationDialog\n key={dialog.kind + dialog.medication.id}\n dialog={dialog}\n onClose={() => setDialog(null)}\n onSave={handleDialogSave}\n />\n )}\n {editorOpen && (\n <MedicationEditor\n key={editorTarget?.id ?? 'add'}\n open\n medication={editorTarget}\n codeLookup={codeLookup === false ? false : effectiveCodeLookup}\n onClose={() => setDialog(null)}\n onSave={handleEditorSave}\n />\n )}\n </>\n );\n}\n\nexport default MedicationReconciliation;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Accordion/Accordion.tsx"],"names":["Accordion"],"mappings":"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","file":"chunk-KRU6IGV7.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { ChevronDown } from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n// =============================================================================\n// Variants\n// =============================================================================\n\nconst accordionVariants = cva('', {\n variants: {\n variant: {\n // Each item is its own card with spacing between\n separated: 'flex flex-col gap-3',\n // One bordered list with dividers\n joined: 'border-border divide-border divide-y rounded-lg border',\n },\n },\n defaultVariants: {\n variant: 'separated',\n },\n});\n\nconst itemVariants = cva('overflow-hidden', {\n variants: {\n variant: {\n separated: 'border-border bg-card rounded-lg border',\n joined: 'bg-card first:rounded-t-lg last:rounded-b-lg',\n },\n },\n defaultVariants: {\n variant: 'separated',\n },\n});\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface AccordionItem {\n /** Stable id used for open state and aria wiring. */\n id: string;\n /** Header label (e.g. an FAQ question). */\n title: React.ReactNode;\n /** Panel content (e.g. the answer). */\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface AccordionProps\n extends\n Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof accordionVariants> {\n items: AccordionItem[];\n /** `single` keeps at most one panel open; `multiple` allows any number. */\n type?: 'single' | 'multiple';\n /** Ids open initially (uncontrolled). */\n defaultOpenIds?: string[];\n /** Controlled open ids. Changes reported via `onOpenChange`. */\n openIds?: string[];\n onOpenChange?: (openIds: string[]) => void;\n /** In `single` mode, allow closing the open panel (default true). */\n collapsible?: boolean;\n /** Heading level wrapping each trigger for document outline (default h3). */\n headingLevel?: 'h2' | 'h3' | 'h4';\n}\n\n// =============================================================================\n// Accordion\n// =============================================================================\n\n/**\n * A vertically stacked set of expandable panels — FAQ lists, settings\n * groups, progressive disclosure. Panels animate open to their natural\n * height (CSS grid rows, no max-height clipping), and headers are real\n * buttons inside headings with full `aria-expanded`/`aria-controls` wiring.\n *\n * @example\n * ```tsx\n * <Accordion\n * type=\"single\"\n * items={[\n * { id: 'pricing', title: 'How is pricing calculated?', content: <p>…</p> },\n * { id: 'billing', title: 'When am I billed?', content: <p>…</p> },\n * ]}\n * />\n * ```\n */\nexport const Accordion = React.forwardRef<HTMLDivElement, AccordionProps>(\n function Accordion(\n {\n items,\n type = 'single',\n defaultOpenIds,\n openIds: controlledOpen,\n onOpenChange,\n collapsible = true,\n headingLevel: Heading = 'h3',\n variant,\n className,\n ...props\n },\n ref\n ) {\n const baseId = React.useId();\n const [internalOpen, setInternalOpen] = React.useState<string[]>(\n () => defaultOpenIds ?? []\n );\n const rawOpen = controlledOpen ?? internalOpen;\n // Single mode keeps at most one panel open, even if defaultOpenIds or a\n // controlled openIds array hands us several.\n const open = React.useMemo(\n () => (type === 'single' ? rawOpen.slice(0, 1) : rawOpen),\n [type, rawOpen]\n );\n const openSet = React.useMemo(() => new Set(open), [open]);\n\n const toggle = (id: string) => {\n let next: string[];\n if (openSet.has(id)) {\n if (type === 'single' && !collapsible) return;\n next = open.filter((o) => o !== id);\n } else {\n next = type === 'single' ? [id] : [...open, id];\n }\n if (controlledOpen === undefined) setInternalOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <div\n ref={ref}\n className={cn(accordionVariants({ variant }), className)}\n {...props}\n >\n {items.map((item) => {\n const isOpen = openSet.has(item.id);\n const triggerId = `${baseId}-${item.id}-trigger`;\n const panelId = `${baseId}-${item.id}-panel`;\n return (\n <div key={item.id} className={cn(itemVariants({ variant }))}>\n <Heading className=\"m-0\">\n <button\n type=\"button\"\n id={triggerId}\n data-slot=\"accordion-trigger\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n disabled={item.disabled}\n onClick={() => toggle(item.id)}\n className={cn(\n 'hover:bg-muted/60 flex w-full items-center justify-between gap-4 px-5 py-4 text-start transition-colors',\n 'focus-visible:ring-ring focus-visible:ring-2 focus-visible:outline-none focus-visible:ring-inset',\n 'disabled:pointer-events-none disabled:opacity-50'\n )}\n >\n <span className=\"text-foreground min-w-0 text-sm font-semibold\">\n {item.title}\n </span>\n <ChevronDown\n aria-hidden=\"true\"\n className={cn(\n 'text-muted-foreground h-5 w-5 shrink-0 transition-transform duration-200',\n isOpen && 'rotate-180'\n )}\n />\n </button>\n </Heading>\n {/* grid-rows 0fr→1fr animates to natural height without a max-height clip;\n collapsed panels are hidden from AT and unfocusable via aria-hidden + inert */}\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={triggerId}\n aria-hidden={!isOpen}\n inert={!isOpen || undefined}\n className={cn(\n 'grid transition-[grid-template-rows] duration-200 ease-out',\n isOpen ? 'grid-rows-[1fr]' : 'grid-rows-[0fr]'\n )}\n >\n <div className=\"overflow-hidden\">\n <div\n data-slot=\"accordion-content\"\n className=\"text-muted-foreground px-5 pb-4 text-sm leading-relaxed\"\n >\n {item.content}\n </div>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/motion/presets.ts","../src/motion/runtime.ts","../src/motion/Animated.tsx"],"names":["React","React2","Animated","jsx","cn"],"mappings":"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","file":"chunk-NV2CWBI2.cjs","sourcesContent":["/**\n * Motion presets — the shared vocabulary of animations.\n *\n * This module is intentionally **free of any `motion` import**. It ships in the\n * main `@mieweb/ui` entry so components can describe *what* they animate\n * without pulling in a runtime to actually do it. The `@mieweb/ui/motion` entry\n * is what turns these descriptions into real animations.\n *\n * Every preset is expressed as an open/closed variant pair so the same\n * definition serves both usages:\n *\n * - **toggle** — the element stays mounted and animates between `open` and\n * `closed` (a drawer sliding in and out).\n * - **presence** — the element mounts and unmounts, entering on `open` and\n * exiting back to `closed` (a modal).\n */\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Named animation recipes shared by components. */\nexport type MotionPreset =\n | 'drawerStart'\n | 'overlay'\n | 'modalContent'\n | 'sidebarLabel'\n | 'menu'\n | 'collapse'\n | 'toast'\n | 'fade'\n | 'pop';\n\n/**\n * A physical edge, already resolved from any logical (`start`/`end`) position\n * and from writing direction.\n *\n * Presets that move an element along an axis take one of these as `custom`.\n * Resolution is the component's job, not the preset's: only the component knows\n * whether its `end` means right or left, and — for anything anchored — which\n * side it actually landed on after flipping away from a viewport edge.\n */\nexport type MotionEdge = 'top' | 'bottom' | 'left' | 'right';\n\n/** Offset along the axis implied by `edge`, in px. */\nfunction offsetFromEdge(\n edge: unknown,\n distance: number\n): { x: number; y: number } {\n switch (edge) {\n case 'top':\n return { x: 0, y: -distance };\n case 'bottom':\n return { x: 0, y: distance };\n case 'left':\n return { x: -distance, y: 0 };\n default:\n return { x: distance, y: 0 };\n }\n}\n\n/**\n * A variant value. Either a plain target object or a function of the element's\n * `custom` value — the latter lets a single preset adapt to context, e.g. a\n * drawer flipping its off-canvas direction in RTL.\n */\nexport type MotionVariant =\n | Record<string, unknown>\n | ((custom: unknown) => Record<string, unknown>);\n\nexport interface MotionPresetDefinition {\n variants: {\n open: MotionVariant;\n closed: MotionVariant;\n };\n transition: Record<string, unknown>;\n}\n\n// =============================================================================\n// Presets\n// =============================================================================\n\n/**\n * `custom` contract per preset:\n *\n * - `drawerStart` — `boolean`, whether the document direction is RTL.\n * - `menu`, `toast` — a {@link MotionEdge}, already resolved from logical\n * position and writing direction by the component.\n * - `overlay`, `modalContent`, `sidebarLabel`, `collapse`, `fade`, `pop` —\n * unused.\n */\nexport const motionPresets: Record<MotionPreset, MotionPresetDefinition> = {\n /**\n * Off-canvas panel pinned to the inline-start edge. Animates `x` only, which\n * the compositor can handle without layout or paint.\n */\n drawerStart: {\n variants: {\n open: { x: '0%' },\n // Off-canvas direction follows writing direction, mirroring the\n // `-translate-x-full rtl:translate-x-full` CSS fallback.\n closed: (isRtl: unknown) => ({ x: isRtl ? '100%' : '-100%' }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 40, mass: 1 },\n },\n\n /** Scrim behind a drawer or modal. */\n overlay: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /** Centered dialog surface — rises and settles rather than popping. */\n modalContent: {\n variants: {\n open: { opacity: 1, scale: 1, y: 0 },\n closed: { opacity: 0, scale: 0.96, y: 8 },\n },\n transition: { type: 'spring', stiffness: 500, damping: 40, mass: 0.8 },\n },\n\n /**\n * Text that disappears as its container narrows — sidebar labels on collapse.\n *\n * Opacity only, and deliberately so. An inline-axis slide would read slightly\n * better but would make every label direction-aware, and resolving direction\n * per nav item is a disproportionate amount of plumbing for an 8px nudge.\n * Fading also degrades to itself under reduced motion instead of becoming a\n * different animation.\n *\n * Short because it runs on many elements at once and has to finish inside the\n * container's own width transition, or labels are still fading after the rail\n * has stopped moving.\n */\n sidebarLabel: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Anchored popup surface — dropdown, select, autocomplete, command palette.\n *\n * `custom` is the side of the anchor the menu actually occupies, so the\n * closed state nudges back *toward* the trigger and the menu reads as coming\n * out of the control that opened it. Pass the post-flip side, not the\n * requested placement: a menu asked for `bottom` that flipped to `top` for\n * want of room must animate from the top, or it moves the wrong way.\n *\n * `transform-origin` is deliberately left to CSS (`origin-top` and friends).\n * It is static per side and never animates, so making it a variant would put\n * a second owner on a property motion has no reason to touch.\n *\n * Snappier than `modalContent`: a menu is a transient response to a click and\n * should feel instant, where a dialog is a context switch and can afford to\n * settle.\n */\n menu: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.95,\n ...offsetFromEdge(edge, -4),\n }),\n },\n transition: { type: 'spring', stiffness: 600, damping: 40, mass: 0.6 },\n },\n\n /**\n * Disclosure content that expands and collapses — `Collapsible`, `Accordion`.\n *\n * The one preset that earns its keep on capability rather than polish:\n * `height: auto` is not interpolable in CSS, so the alternative is a\n * hard-coded max-height that either clips tall content or eases against dead\n * space on short content. Motion measures the real height instead.\n *\n * Animating `height` costs layout on every frame, unlike the transform and\n * opacity work everywhere else in this file. That is the price of the\n * capability; keep the duration short and don't reach for this preset when a\n * transform would do.\n *\n * Consumers must clip the element (`overflow-hidden`) or content spills past\n * the shrinking box mid-animation.\n *\n * Note that `MotionConfig reducedMotion=\"user\"` does **not** cover this:\n * it drops transform and layout animations, and `height` is a plain value\n * animation to motion. Components using this preset are responsible for\n * honoring the preference themselves — see `usePrefersReducedMotion`.\n */\n collapse: {\n variants: {\n open: { height: 'auto', opacity: 1 },\n closed: { height: 0, opacity: 0 },\n },\n transition: { duration: 0.2, ease: 'easeOut' },\n },\n\n /**\n * Transient notification entering and leaving a stack.\n *\n * `custom` is the physical edge the toast lives against, so it enters from\n * the screen edge nearest it rather than always from the right — which is\n * what the `animate-slide-in-right` fallback does regardless of position.\n *\n * Scale is near-imperceptible on purpose: it softens the arrival without\n * making a message that may carry an error read as playful.\n */\n toast: {\n variants: {\n open: { opacity: 1, scale: 1, x: 0, y: 0 },\n closed: (edge: unknown) => ({\n opacity: 0,\n scale: 0.98,\n ...offsetFromEdge(edge, 24),\n }),\n },\n transition: { type: 'spring', stiffness: 400, damping: 36, mass: 0.8 },\n },\n\n /**\n * Generic presence fade, for surfaces with no meaningful direction —\n * drag overlays, connectivity banners, skeleton-to-content swaps.\n *\n * Survives `reducedMotion=\"user\"` intact, since opacity is the one thing that\n * setting keeps. Prefer it over a transform preset wherever the movement is\n * decorative rather than explanatory.\n */\n fade: {\n variants: {\n open: { opacity: 1 },\n closed: { opacity: 0 },\n },\n transition: { duration: 0.15, ease: 'easeOut' },\n },\n\n /**\n * Small element arriving with emphasis — a count badge, a status pill.\n *\n * Overshoots past full size and settles back (`1 → 1.1 → 1`) so the arrival\n * is legible on an element too small for movement to register. Reserve it\n * for things that appear in response to an event worth noticing; on anything\n * large it reads as a bounce.\n *\n * The overshoot is a keyframe rather than a spring because the resting open\n * state has to be `scale: 1`. Expressing the emphasis as a spring target\n * would leave a mounted consumer parked at 1.1 — permanently 10% oversized —\n * since the open variant is also the at-rest state.\n */\n pop: {\n variants: {\n open: { opacity: 1, scale: [1, 1.1, 1] },\n closed: { opacity: 0, scale: 1 },\n },\n // `times` front-loads the overshoot so it reads as a pop rather than an\n // even swell. Keyframe arrays need a duration-based tween; a spring has no\n // way to run through intermediate values.\n transition: { duration: 0.28, ease: 'easeOut', times: [0, 0.45, 1] },\n },\n};\n","/**\n * Motion runtime — the seam between components and an optional animation library.\n *\n * Components in the main entry never import `motion`. They ask this module for\n * a runtime; if an app has opted in by rendering `<MotionProvider>` from\n * `@mieweb/ui/motion`, they get one and animate. If not, `useMotionRuntime()`\n * returns `null` and they fall back to their existing CSS transitions. That is\n * what keeps `motion` out of the bundle of every app that hasn't asked for it —\n * the opt-in is resolved in the *module graph*, not by a prop.\n *\n * Like `presets`, this module must stay free of any `motion` import.\n */\n\nimport * as React from 'react';\nimport { motionPresets, type MotionPreset } from './presets';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport interface MotionPresenceProps {\n children?: React.ReactNode;\n /** Suppress the initial mount animation. */\n initial?: boolean;\n /**\n * Fires once every exiting child has finished and been removed.\n *\n * Needed by anything that guards the DOM while it is open — a focus trap, a\n * scroll lock — because those guards must outlive `open` for as long as the\n * subtree is still on screen. Never fires when no runtime is active, since\n * there is no exit to wait for.\n */\n onExitComplete?: () => void;\n}\n\n/**\n * The capabilities a motion library must supply. Deliberately small: element\n * factories, a presence wrapper, and prop builders. Components depend on this\n * interface, never on a concrete library, so swapping or dropping the library\n * stays a one-file change.\n */\nexport interface MotionRuntime {\n /**\n * Whether animations should actually run.\n *\n * A disabled provider still supplies a runtime rather than `null` so that\n * consumers can tell \"disabled\" apart from \"never opted in\": `Modal` uses it\n * to decide whether an exit animation will ever report completion, and\n * `AnimatedPresence` keeps its wrapper element stable across the flip.\n * `Animated` itself renders the plain fallback tag whenever this is false —\n * withholding animation props from a mounted motion component corrupts\n * `toggle`-mode elements, so the swap (and the remount it implies) is the\n * correct behaviour. See the render branches in `Animated`.\n */\n enabled: boolean;\n /** Animated `div`. */\n Div: React.ElementType;\n /** Animated `nav`. */\n Nav: React.ElementType;\n /** Animated `span`, for inline content that must not become a block. */\n Span: React.ElementType;\n /** Enables exit animations for conditionally rendered children. */\n Presence: React.ComponentType<MotionPresenceProps>;\n /**\n * Props for an element that stays mounted and animates between states.\n * Skips the initial animation so a closed drawer doesn't slide out on load.\n */\n toggle: (\n preset: MotionPreset,\n open: boolean,\n custom?: unknown\n ) => Record<string, unknown>;\n /** Props for an element that mounts and unmounts inside `Presence`. */\n presence: (preset: MotionPreset, custom?: unknown) => Record<string, unknown>;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\n/**\n * The context is stashed on `globalThis` under a registered symbol rather than\n * held in a module-local `const`.\n *\n * `@mieweb/ui` and `@mieweb/ui/motion` are separate bundle entries, and CJS\n * builds cannot code-split. Without this, the provider and the components\n * would each get their own copy of the context object and the provider would\n * silently never be seen — animations would simply never turn on, with no\n * error to explain why. A duplicated install of the package causes the same\n * failure. Keying off the global symbol registry makes the context a true\n * singleton in every one of those cases.\n *\n * The key is versioned. Two copies of this package sharing one page share\n * whatever lives under the key, so the `v1` suffix is a compatibility\n * contract: bump it if the `MotionRuntime` interface ever changes shape,\n * or an old provider will hand a new component a runtime it cannot use.\n */\nconst CONTEXT_KEY = Symbol.for('@mieweb/ui.motionRuntimeContext.v1');\n\ntype GlobalWithMotionContext = typeof globalThis & {\n [CONTEXT_KEY]?: React.Context<MotionRuntime | null>;\n};\n\nfunction getMotionRuntimeContext(): React.Context<MotionRuntime | null> {\n const globalScope = globalThis as GlobalWithMotionContext;\n if (!globalScope[CONTEXT_KEY]) {\n globalScope[CONTEXT_KEY] = React.createContext<MotionRuntime | null>(null);\n }\n return globalScope[CONTEXT_KEY];\n}\n\n/** @internal Consumed by `<MotionProvider>` in the `@mieweb/ui/motion` entry. */\nexport const MotionRuntimeContext = getMotionRuntimeContext();\n\n// =============================================================================\n// Hooks\n// =============================================================================\n\n/**\n * The active motion runtime, or `null` when the app has not opted in.\n *\n * Components must treat `null` as the normal case and keep a CSS path that\n * looks good on its own — motion is an enhancement, never a requirement.\n */\nexport function useMotionRuntime(): MotionRuntime | null {\n return React.useContext(MotionRuntimeContext);\n}\n\n// =============================================================================\n// Prop builders\n// =============================================================================\n\n/**\n * Builds the `toggle`/`presence` prop builders around a library-agnostic core.\n * Exported so `<MotionProvider>` can assemble a runtime without restating the\n * preset lookup.\n *\n * @internal\n */\nexport function createPresetPropBuilders(): Pick<\n MotionRuntime,\n 'toggle' | 'presence'\n> {\n return {\n toggle(preset, open, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n // `false` pins the element to its current variant on mount instead of\n // animating into it.\n initial: false,\n animate: open ? 'open' : 'closed',\n };\n },\n\n presence(preset, custom) {\n const { variants, transition } = motionPresets[preset];\n return {\n variants,\n transition,\n custom,\n initial: 'closed',\n animate: 'open',\n exit: 'closed',\n };\n },\n };\n}\n","/**\n * `Animated` / `AnimatedPresence` — the ergonomic layer components use.\n *\n * These exist so an individual component never has to branch on whether motion\n * is available. It declares the preset it wants and the CSS classes that stand\n * in when motion is absent; this module picks the element to render.\n *\n * Adding motion to a further component should be a matter of swapping its\n * root `<div>` for an `<Animated>` and naming a preset — no new imports, no\n * new dependency, and no behavior change for apps that have not opted in.\n */\n\nimport * as React from 'react';\nimport { cn } from '../utils/cn';\nimport { useMotionRuntime, type MotionPresenceProps } from './runtime';\nimport type { MotionPreset } from './presets';\n\n// =============================================================================\n// Animated\n// =============================================================================\n\nexport interface AnimatedProps extends React.HTMLAttributes<HTMLElement> {\n /** Intrinsic element to render. */\n as?: 'div' | 'nav' | 'span';\n /** Which shared animation recipe to use. */\n preset: MotionPreset;\n /**\n * - `toggle` — element stays mounted and animates between open and closed.\n * - `presence` — element mounts and unmounts; wrap it in `<AnimatedPresence>`\n * so the exit animation gets a chance to run.\n */\n mode: 'toggle' | 'presence';\n /** Current state. Only read in `toggle` mode. */\n open?: boolean;\n /** Per-preset context value — see the `custom` contract in `presets.ts`. */\n custom?: unknown;\n /**\n * Classes applied whenever this element is **not** animating — no provider,\n * a disabled provider, or `enabled={false}`. This is where a component's\n * existing CSS transition lives, so the two paths never both try to drive\n * the same property.\n */\n fallbackClassName?: string;\n /**\n * Set `false` to stop this element animating even when a runtime is active.\n *\n * For states where an animated element would be wrong rather than merely\n * unnecessary. Motion writes a `transform` to hold an element at its resting\n * position, and a transformed ancestor becomes the containing block for any\n * `position: fixed` descendant — so an element that is only sometimes\n * animated should opt out the rest of the time.\n *\n * Flipping this (or the provider's `disabled`) swaps the element back to a\n * plain tag, which **remounts** it — deliberately. See the note on the\n * render branches below.\n */\n enabled?: boolean;\n}\n\nexport const Animated = React.forwardRef<HTMLElement, AnimatedProps>(\n function Animated(\n {\n as = 'div',\n preset,\n mode,\n open = false,\n custom,\n className,\n fallbackClassName,\n enabled = true,\n children,\n ...rest\n },\n ref\n ) {\n const runtime = useMotionRuntime();\n\n /*\n * Anything not animating renders the plain tag with the CSS fallback —\n * no provider, a disabled provider, or `enabled={false}` alike.\n *\n * Crossing between this branch and the motion one changes the element\n * type, which remounts the subtree. That is deliberate. The obvious\n * alternative — keeping the motion component mounted and only withholding\n * its animation props — corrupts `toggle`-mode elements in both\n * directions, because motion only writes variant styles at mount or in\n * response to an animation:\n *\n * - props added in place (a drawer crossing into its mobile breakpoint\n * while closed) never get the `closed` transform, so the drawer sits\n * fully visible over the page;\n * - props removed in place strand whatever inline `transform` motion last\n * wrote, so a sidebar returning to desktop stays off-canvas.\n *\n * Fresh mounts are correct in both worlds, so remounting at the flip is\n * the fix. The flips are rare — a breakpoint cross, a test toggling the\n * provider — and a remount that resets local state beats a stale\n * transform that removes the navigation.\n */\n if (!runtime || !runtime.enabled || !enabled) {\n const Tag = as as React.ElementType;\n return (\n <Tag ref={ref} className={cn(fallbackClassName, className)} {...rest}>\n {children}\n </Tag>\n );\n }\n\n const Component =\n as === 'nav' ? runtime.Nav : as === 'span' ? runtime.Span : runtime.Div;\n\n const motionProps =\n mode === 'toggle'\n ? runtime.toggle(preset, open, custom)\n : runtime.presence(preset, custom);\n\n return (\n <Component ref={ref} className={className} {...motionProps} {...rest}>\n {children}\n </Component>\n );\n }\n);\n\nAnimated.displayName = 'Animated';\n\n// =============================================================================\n// AnimatedPresence\n// =============================================================================\n\n/**\n * Keeps unmounting children on screen long enough to animate out.\n *\n * Without a runtime this is a pass-through, so children disappear immediately —\n * which is exactly what they do today. Children rendered conditionally inside\n * it need a stable `key`.\n */\nexport function AnimatedPresence({\n children,\n initial,\n onExitComplete,\n}: MotionPresenceProps): React.JSX.Element {\n const runtime = useMotionRuntime();\n\n if (!runtime) {\n return <>{children}</>;\n }\n\n const { Presence } = runtime;\n return (\n <Presence initial={initial} onExitComplete={onExitComplete}>\n {children}\n </Presence>\n );\n}\n\nAnimatedPresence.displayName = 'AnimatedPresence';\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/RichTextEditor/processDictation.ts","../src/components/RichTextEditor/RichTextEditor.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-OE5CKRUC.js","sourcesContent":["/**\n * Converts spoken punctuation words (e.g. \"period\", \"comma\") into the\n * corresponding characters, using lightweight context heuristics so that words\n * like \"time period\" or \"the colon\" are left intact. Pure and side-effect free\n * so it can be unit tested independently of the editor.\n */\nexport function processDictation(text: string): string {\n let result = text;\n\n // \"period\" as a word vs. as punctuation.\n result = result.replace(\n /\\b(the|a|this|that|each|every|same|time|grace|trial|waiting|probationary|pay|billing|accounting)\\s+period\\b/gi,\n '$1 period'\n );\n result = result.replace(\n /\\bperiod\\s+(of|in|for|from|to|during|between|after|before|when|where|is|was|will|has|had)\\b/gi,\n 'period $1'\n );\n result = result.replace(/\\s+period(\\s*$)/gi, '.$1');\n result = result.replace(/\\s+period\\s+(?=[A-Z])/g, '. ');\n\n // \"comma\"\n result = result.replace(/\\bcomma\\s+(separated|delimited)/gi, 'comma $1');\n result = result.replace(/\\s+comma\\b/gi, ',');\n\n // \"colon\"\n result = result.replace(\n /\\b(the|a|my|your|his|her|their|semicolon|ascending|descending|transverse|sigmoid)\\s+colon\\b/gi,\n '$1 colon'\n );\n result = result.replace(\n /\\bcolon\\s+(cancer|surgery|health|polyp|scope|oscopy)/gi,\n 'colon $1'\n );\n result = result.replace(/\\s+colon\\b/gi, ':');\n\n // \"dash\"\n result = result.replace(\n /\\b(yard|meter|hundred|mad|quick|wild)\\s+dash\\b/gi,\n '$1 dash'\n );\n result = result.replace(/\\bdash\\s+(to|for|of)\\b/gi, 'dash $1');\n result = result.replace(/\\s+dash\\b/gi, ' -');\n\n const simplePunctuation: Record<string, string> = {\n ' full stop': '.',\n ' question mark': '?',\n ' exclamation point': '!',\n ' exclamation mark': '!',\n ' semicolon': ';',\n ' semi colon': ';',\n ' hyphen': '-',\n ' open parenthesis': ' (',\n ' close parenthesis': ')',\n ' open bracket': ' [',\n ' close bracket': ']',\n ' open quote': ' \"',\n ' close quote': '\"',\n ' quote': '\"',\n ' apostrophe': \"'\",\n ' new line': '\\n',\n ' newline': '\\n',\n ' new paragraph': '\\n\\n',\n ' tab': '\\t',\n };\n\n for (const [spoken, punctuation] of Object.entries(simplePunctuation)) {\n const regex = new RegExp(spoken, 'gi');\n result = result.replace(regex, punctuation);\n }\n\n // Capitalize after sentence-ending punctuation.\n result = result.replace(\n /([.!?])\\s+([a-z])/g,\n (_match, punct: string, letter: string) =>\n `${punct} ${letter.toUpperCase()}`\n );\n\n return result;\n}\n\n/**\n * Converts `<<field>>` (and the HTML-encoded `&lt;&lt;field&gt;&gt;`) syntax\n * into mustache `{{field}}` syntax. Pure helper operating on an HTML string.\n */\nexport function convertAngleBracketsToMustache(html: string): string {\n return html\n .replace(\n /&lt;&lt;([^&]*)&gt;&gt;/g,\n (_m, field: string) => `{{${field.trim()}}}`\n )\n .replace(/<<([^>]*)>>/g, (_m, field: string) => `{{${field.trim()}}}`);\n}\n\n/**\n * Returns true when an HTML string has no visible text content.\n * Note: This is a visibility check, not a sanitizer. It strips tags to inspect\n * remaining text — do NOT use this for XSS prevention.\n */\nexport { isHtmlEmpty } from '../../utils/html';\n","import * as React from 'react';\nimport {\n Bold,\n Italic,\n Underline,\n List,\n ListOrdered,\n AlignLeft,\n AlignCenter,\n AlignRight,\n Braces,\n Replace,\n Mic,\n MicOff,\n} from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport { Button } from '../Button';\nimport { Separator } from '../Separator';\nimport {\n Dropdown,\n DropdownItem,\n DropdownLabel,\n DropdownSeparator,\n} from '../Dropdown';\nimport {\n processDictation,\n convertAngleBracketsToMustache,\n isHtmlEmpty,\n} from './processDictation';\n\nexport interface RichTextVariable {\n /** Human-readable label shown in the variable menu. */\n label: string;\n /** The token displayed for the variable (e.g. `{{employee.name}}`). */\n value: string;\n /** Optional text inserted instead of `value` (e.g. an expanded group). */\n insertValue?: string;\n}\n\nexport interface RichTextVariableGroup {\n /** Group heading shown in the variable menu. */\n label: string;\n /** Variables belonging to the group. */\n variables: RichTextVariable[];\n}\n\nexport interface RichTextEditorProps {\n /** Current HTML value of the editor. */\n value: string;\n /** Called with the updated HTML whenever the content changes. */\n onChange: (value: string) => void;\n /** Placeholder shown when the editor is empty. */\n placeholder?: string;\n /** Additional class for the editor wrapper. */\n className?: string;\n /**\n * Variable groups for the \"Insert variable\" menu. When omitted the variable\n * menu and the `<< >>` → `{{ }}` convert button are hidden.\n */\n variableGroups?: RichTextVariableGroup[];\n /** Enable the speech-to-text dictation button. Defaults to true. */\n enableDictation?: boolean;\n /** Called when dictation cannot start (replaces native alerts). */\n onDictationError?: (message: string) => void;\n /** Disable editing and toolbar actions. */\n disabled?: boolean;\n /** Accessible label for the editable region. */\n 'aria-label'?: string;\n}\n\n// --- Minimal Web Speech API typings (absent from the standard DOM lib) ---\ninterface SpeechRecognitionAlternativeLike {\n transcript: string;\n}\ninterface SpeechRecognitionResultLike {\n isFinal: boolean;\n [index: number]: SpeechRecognitionAlternativeLike;\n}\ninterface SpeechRecognitionResultListLike {\n length: number;\n [index: number]: SpeechRecognitionResultLike;\n}\ninterface SpeechRecognitionEventLike {\n resultIndex: number;\n results: SpeechRecognitionResultListLike;\n}\ninterface SpeechRecognitionErrorEventLike {\n error: string;\n}\ninterface SpeechRecognitionLike {\n continuous: boolean;\n interimResults: boolean;\n lang: string;\n maxAlternatives: number;\n onstart: (() => void) | null;\n onresult: ((event: SpeechRecognitionEventLike) => void) | null;\n onerror: ((event: SpeechRecognitionErrorEventLike) => void) | null;\n onend: (() => void) | null;\n start: () => void;\n stop: () => void;\n}\ntype SpeechRecognitionCtor = new () => SpeechRecognitionLike;\ninterface SpeechWindow {\n SpeechRecognition?: SpeechRecognitionCtor;\n webkitSpeechRecognition?: SpeechRecognitionCtor;\n}\n\nfunction getSpeechRecognition(): SpeechRecognitionCtor | undefined {\n const w = window as unknown as SpeechWindow;\n return w.SpeechRecognition || w.webkitSpeechRecognition;\n}\n\n/**\n * A presentational rich-text editor with formatting, template-variable\n * insertion and optional speech-to-text dictation. Content is supplied and\n * surfaced via `value`/`onChange` so it can be wired to any store. The variable\n * menu is data-agnostic — pass `variableGroups` to populate it.\n */\nconst RichTextEditor = React.forwardRef<HTMLDivElement, RichTextEditorProps>(\n (\n {\n value,\n onChange,\n placeholder,\n className,\n variableGroups,\n enableDictation = true,\n onDictationError,\n disabled = false,\n 'aria-label': ariaLabel,\n },\n ref\n ) => {\n const editorRef = React.useRef<HTMLDivElement>(null);\n const [isListening, setIsListening] = React.useState(false);\n const [speechSupported, setSpeechSupported] = React.useState(false);\n const recognitionRef = React.useRef<SpeechRecognitionLike | null>(null);\n const isListeningRef = React.useRef(false);\n const shouldRestartRef = React.useRef(false);\n\n const hasVariables = Boolean(variableGroups && variableGroups.length > 0);\n const isEmpty = isHtmlEmpty(value);\n\n React.useImperativeHandle(ref, () => editorRef.current as HTMLDivElement);\n\n React.useEffect(() => {\n setSpeechSupported(Boolean(getSpeechRecognition()));\n }, []);\n\n React.useEffect(() => {\n return () => {\n if (recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n }\n };\n }, []);\n\n React.useEffect(() => {\n if (editorRef.current && editorRef.current.innerHTML !== value) {\n editorRef.current.innerHTML = value;\n }\n }, [value]);\n\n const updateContent = () => {\n if (editorRef.current) onChange(editorRef.current.innerHTML);\n };\n\n const execCommand = (command: string) => {\n if (disabled) return;\n document.execCommand(command, false);\n editorRef.current?.focus();\n updateContent();\n };\n\n const handleConvertToMustache = () => {\n if (disabled || !editorRef.current) return;\n editorRef.current.innerHTML = convertAngleBracketsToMustache(\n editorRef.current.innerHTML\n );\n updateContent();\n };\n\n const insertVariable = (variable: RichTextVariable) => {\n if (disabled || !editorRef.current) return;\n editorRef.current.focus();\n const textToInsert = variable.insertValue ?? variable.value;\n\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n if (textToInsert.includes('\\n')) {\n const fragment = document.createDocumentFragment();\n const lines = textToInsert.split('\\n');\n lines.forEach((line, index) => {\n fragment.appendChild(document.createTextNode(line));\n if (index < lines.length - 1) {\n fragment.appendChild(document.createElement('br'));\n }\n });\n range.insertNode(fragment);\n range.collapse(false);\n } else {\n const textNode = document.createTextNode(textToInsert);\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n }\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += textToInsert.replace(/\\n/g, '<br>');\n }\n updateContent();\n };\n\n const reportError = (message: string) => {\n if (onDictationError) onDictationError(message);\n else if (typeof console !== 'undefined') console.warn(message);\n };\n\n const toggleDictation = async () => {\n const SpeechRecognition = getSpeechRecognition();\n if (!SpeechRecognition) return;\n\n if (isListening && recognitionRef.current) {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n recognitionRef.current.stop();\n setIsListening(false);\n return;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n audio: true,\n });\n stream.getTracks().forEach((track) => track.stop());\n } catch {\n reportError(\n 'Microphone access is required for dictation. Please allow microphone access in your browser settings and try again.'\n );\n return;\n }\n\n const recognition = new SpeechRecognition();\n recognition.continuous = true;\n recognition.interimResults = true;\n recognition.lang = 'en-US';\n recognition.maxAlternatives = 1;\n\n recognition.onstart = () => {\n setIsListening(true);\n isListeningRef.current = true;\n shouldRestartRef.current = true;\n };\n\n recognition.onresult = (event) => {\n let finalTranscript = '';\n for (let i = event.resultIndex; i < event.results.length; i++) {\n const result = event.results[i];\n if (result.isFinal) finalTranscript += result[0].transcript;\n }\n\n if (finalTranscript && editorRef.current) {\n const processedText = processDictation(finalTranscript);\n editorRef.current.focus();\n const selection = window.getSelection();\n if (selection && selection.rangeCount > 0) {\n const range = selection.getRangeAt(0);\n range.deleteContents();\n const textNode = document.createTextNode(processedText + ' ');\n range.insertNode(textNode);\n range.setStartAfter(textNode);\n range.setEndAfter(textNode);\n selection.removeAllRanges();\n selection.addRange(range);\n } else {\n editorRef.current.innerHTML += processedText + ' ';\n }\n updateContent();\n }\n };\n\n recognition.onerror = (event) => {\n if (event.error === 'no-speech' || event.error === 'aborted') return;\n if (event.error === 'not-allowed') {\n reportError(\n 'Microphone access was denied. Please allow microphone access in your browser settings and try again.'\n );\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n return;\n }\n if (event.error === 'network') return;\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n };\n\n recognition.onend = () => {\n if (shouldRestartRef.current && isListeningRef.current) {\n setTimeout(() => {\n if (shouldRestartRef.current && isListeningRef.current) {\n try {\n recognition.start();\n } catch {\n shouldRestartRef.current = false;\n isListeningRef.current = false;\n setIsListening(false);\n }\n }\n }, 100);\n } else {\n setIsListening(false);\n }\n };\n\n recognitionRef.current = recognition;\n try {\n recognition.start();\n } catch {\n reportError('Failed to start speech recognition. Please try again.');\n }\n };\n\n const iconButtonClass = 'h-8 w-8 p-0';\n\n return (\n <div\n data-slot=\"rich-text-editor\"\n className={cn(\n 'border-border bg-background flex flex-col overflow-hidden rounded-lg border',\n className\n )}\n >\n <div\n data-slot=\"rich-text-editor-toolbar\"\n className=\"border-border bg-muted/30 sticky top-0 z-10 flex flex-wrap items-center gap-1 border-b p-2\"\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('bold')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bold\"\n title=\"Bold\"\n >\n <Bold className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('italic')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Italic\"\n title=\"Italic\"\n >\n <Italic className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('underline')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Underline\"\n title=\"Underline\"\n >\n <Underline className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertUnorderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Bullet list\"\n title=\"Bullet list\"\n >\n <List className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('insertOrderedList')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Numbered list\"\n title=\"Numbered list\"\n >\n <ListOrdered className=\"h-4 w-4\" />\n </Button>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyLeft')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align left\"\n title=\"Align left\"\n >\n <AlignLeft className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyCenter')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align center\"\n title=\"Align center\"\n >\n <AlignCenter className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => execCommand('justifyRight')}\n disabled={disabled}\n className={iconButtonClass}\n aria-label=\"Align right\"\n title=\"Align right\"\n >\n <AlignRight className=\"h-4 w-4\" />\n </Button>\n\n {hasVariables && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Dropdown\n placement=\"bottom-start\"\n width={240}\n searchable\n searchPlaceholder=\"Search variables…\"\n searchAriaLabel=\"Search template variables\"\n disabled={disabled}\n trigger={\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n className=\"h-8 gap-1 px-2\"\n disabled={disabled}\n title=\"Insert variable\"\n >\n <Braces className=\"h-4 w-4\" />\n <span className=\"text-xs\">Variables</span>\n </Button>\n }\n >\n {variableGroups!.map((group, groupIndex) => (\n <React.Fragment key={group.label}>\n {groupIndex > 0 && <DropdownSeparator />}\n <DropdownLabel>{group.label}</DropdownLabel>\n {group.variables.map((variable) => (\n <DropdownItem\n key={variable.value}\n onClick={() => insertVariable(variable)}\n >\n {variable.label}\n </DropdownItem>\n ))}\n </React.Fragment>\n ))}\n </Dropdown>\n\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleConvertToMustache}\n disabled={disabled}\n className=\"h-8 gap-1 px-2\"\n title=\"Convert <<field>> to {{field}}\"\n >\n <Replace className=\"h-4 w-4\" />\n <span className=\"text-xs\">{'<< >> to {{ }}'}</span>\n </Button>\n </>\n )}\n\n {enableDictation && (\n <>\n <Separator orientation=\"vertical\" className=\"mx-1 h-6\" />\n <Button\n type=\"button\"\n variant={isListening ? 'danger' : 'ghost'}\n size=\"sm\"\n onClick={toggleDictation}\n disabled={disabled || !speechSupported}\n className={cn('h-8 gap-1 px-2', isListening && 'animate-pulse')}\n title={\n !speechSupported\n ? 'Speech recognition not supported in this browser'\n : isListening\n ? 'Stop dictation'\n : 'Start dictation'\n }\n >\n {isListening ? (\n <MicOff className=\"h-4 w-4\" />\n ) : (\n <Mic className=\"h-4 w-4\" />\n )}\n <span className=\"text-xs\">\n {isListening ? 'Stop' : 'Dictate'}\n </span>\n </Button>\n </>\n )}\n </div>\n\n <div className=\"relative flex-1\">\n {isEmpty && placeholder && (\n <div\n aria-hidden=\"true\"\n className=\"text-muted-foreground pointer-events-none absolute start-0 top-0 p-4\"\n >\n {placeholder}\n </div>\n )}\n <div\n ref={editorRef}\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel ?? placeholder}\n contentEditable={!disabled}\n onInput={updateContent}\n className={cn(\n 'min-h-[250px] overflow-y-auto p-4 focus:outline-none',\n 'prose prose-sm max-w-none',\n disabled &&\n 'bg-muted/20 cursor-not-allowed text-neutral-700 dark:text-neutral-300'\n )}\n suppressContentEditableWarning\n />\n </div>\n </div>\n );\n }\n);\n\nRichTextEditor.displayName = 'RichTextEditor';\n\nexport { RichTextEditor };\n"]}