@mieweb/ui 0.11.0-dev.30 → 0.11.0-dev.32

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 (275) hide show
  1. package/agent/README.md +7 -7
  2. package/agent/agents/mieweb-ui-design.agent.md +8 -3
  3. package/agent/agents/mieweb-ui-i18n.agent.md +91 -0
  4. package/agent/agents/mieweb-ui-styling.agent.md +1 -1
  5. package/agent/skills/mieweb-ui-catalog/SKILL.md +15 -10
  6. package/agent/skills/mieweb-ui-catalog/selection-guidance.md +14 -7
  7. package/agent/skills/mieweb-ui-i18n-checklist/SKILL.md +133 -0
  8. package/dist/CsvBlock-AV4VM7JT.cjs +18 -0
  9. package/dist/{CsvBlock-RGO7JXHJ.cjs.map → CsvBlock-AV4VM7JT.cjs.map} +1 -1
  10. package/dist/CsvBlock-XBNYCEMP.js +9 -0
  11. package/dist/{CsvBlock-CFXSDPBI.js.map → CsvBlock-XBNYCEMP.js.map} +1 -1
  12. package/dist/HtmlPreviewBlock-DQAVD6IO.cjs +18 -0
  13. package/dist/{HtmlPreviewBlock-VBYXCXVT.cjs.map → HtmlPreviewBlock-DQAVD6IO.cjs.map} +1 -1
  14. package/dist/HtmlPreviewBlock-QQHRNLIY.js +9 -0
  15. package/dist/{HtmlPreviewBlock-Z2GCK325.js.map → HtmlPreviewBlock-QQHRNLIY.js.map} +1 -1
  16. package/dist/MermaidBlock-LHGYKC23.cjs +18 -0
  17. package/dist/{MermaidBlock-I2R2BQOX.cjs.map → MermaidBlock-LHGYKC23.cjs.map} +1 -1
  18. package/dist/MermaidBlock-QPKMIP3B.js +9 -0
  19. package/dist/{MermaidBlock-XCAK7IA5.js.map → MermaidBlock-QPKMIP3B.js.map} +1 -1
  20. package/dist/SurveyBlock-6DPTWHKI.js +9 -0
  21. package/dist/{SurveyBlock-KI5JOWCL.js.map → SurveyBlock-6DPTWHKI.js.map} +1 -1
  22. package/dist/SurveyBlock-6IXNVHS5.cjs +18 -0
  23. package/dist/{SurveyBlock-UKSGISRT.cjs.map → SurveyBlock-6IXNVHS5.cjs.map} +1 -1
  24. package/dist/{chunk-7XKM6V2K.cjs → chunk-2OXNJJHJ.cjs} +8 -8
  25. package/dist/{chunk-7XKM6V2K.cjs.map → chunk-2OXNJJHJ.cjs.map} +1 -1
  26. package/dist/{chunk-AJPFQF3H.cjs → chunk-2R3ILG4Y.cjs} +11 -11
  27. package/dist/{chunk-AJPFQF3H.cjs.map → chunk-2R3ILG4Y.cjs.map} +1 -1
  28. package/dist/{chunk-XQHDQ64G.cjs → chunk-2Z2GFDRS.cjs} +4 -4
  29. package/dist/{chunk-XQHDQ64G.cjs.map → chunk-2Z2GFDRS.cjs.map} +1 -1
  30. package/dist/{chunk-GM32IDVL.cjs → chunk-32ZILZ2T.cjs} +6 -6
  31. package/dist/{chunk-GM32IDVL.cjs.map → chunk-32ZILZ2T.cjs.map} +1 -1
  32. package/dist/{chunk-VOEXGDL5.js → chunk-33Y3KQWL.js} +3 -3
  33. package/dist/{chunk-VOEXGDL5.js.map → chunk-33Y3KQWL.js.map} +1 -1
  34. package/dist/{chunk-GYXSF6BJ.cjs → chunk-3IKIRGHI.cjs} +6 -6
  35. package/dist/{chunk-GYXSF6BJ.cjs.map → chunk-3IKIRGHI.cjs.map} +1 -1
  36. package/dist/{chunk-5HKZR6UG.js → chunk-43L4KGLU.js} +4 -4
  37. package/dist/{chunk-5HKZR6UG.js.map → chunk-43L4KGLU.js.map} +1 -1
  38. package/dist/{chunk-6BNZLN4B.cjs → chunk-4I5V6SXP.cjs} +10 -10
  39. package/dist/{chunk-6BNZLN4B.cjs.map → chunk-4I5V6SXP.cjs.map} +1 -1
  40. package/dist/{chunk-NUFUV43P.cjs → chunk-4UDEMJE4.cjs} +2 -2
  41. package/dist/chunk-4UDEMJE4.cjs.map +1 -0
  42. package/dist/{chunk-L5Y52F2E.cjs → chunk-4VSK3EE5.cjs} +4 -4
  43. package/dist/{chunk-L5Y52F2E.cjs.map → chunk-4VSK3EE5.cjs.map} +1 -1
  44. package/dist/{chunk-Y7ZJZLJY.js → chunk-566FIEPE.js} +4 -4
  45. package/dist/{chunk-Y7ZJZLJY.js.map → chunk-566FIEPE.js.map} +1 -1
  46. package/dist/{chunk-UTIPENPW.cjs → chunk-67SD6VPF.cjs} +5 -5
  47. package/dist/{chunk-UTIPENPW.cjs.map → chunk-67SD6VPF.cjs.map} +1 -1
  48. package/dist/{chunk-6CGM5H4J.js → chunk-6LIC3DKE.js} +2 -2
  49. package/dist/chunk-6LIC3DKE.js.map +1 -0
  50. package/dist/{chunk-6N7NMOSV.js → chunk-76ECYE5G.js} +3 -3
  51. package/dist/{chunk-6N7NMOSV.js.map → chunk-76ECYE5G.js.map} +1 -1
  52. package/dist/{chunk-56VTM4OX.js → chunk-7LKTIZLR.js} +3 -3
  53. package/dist/{chunk-56VTM4OX.js.map → chunk-7LKTIZLR.js.map} +1 -1
  54. package/dist/{chunk-7C5W744U.cjs → chunk-ARRJRFPD.cjs} +8 -8
  55. package/dist/{chunk-7C5W744U.cjs.map → chunk-ARRJRFPD.cjs.map} +1 -1
  56. package/dist/{chunk-5KGYTNOA.cjs → chunk-BP4LXRC6.cjs} +9 -9
  57. package/dist/{chunk-5KGYTNOA.cjs.map → chunk-BP4LXRC6.cjs.map} +1 -1
  58. package/dist/{chunk-UNFDIBKJ.js → chunk-CLNTWFEB.js} +3 -3
  59. package/dist/{chunk-UNFDIBKJ.js.map → chunk-CLNTWFEB.js.map} +1 -1
  60. package/dist/{chunk-X5JOEZVR.js → chunk-CRSJRWN2.js} +4 -4
  61. package/dist/{chunk-X5JOEZVR.js.map → chunk-CRSJRWN2.js.map} +1 -1
  62. package/dist/{chunk-FIKO4WR6.js → chunk-CVMD2A3J.js} +3 -3
  63. package/dist/{chunk-FIKO4WR6.js.map → chunk-CVMD2A3J.js.map} +1 -1
  64. package/dist/{chunk-SMPLM6K3.js → chunk-DG3CXR24.js} +5 -5
  65. package/dist/{chunk-SMPLM6K3.js.map → chunk-DG3CXR24.js.map} +1 -1
  66. package/dist/{chunk-LRAAJRE7.cjs → chunk-DO7EED3B.cjs} +154 -154
  67. package/dist/{chunk-LRAAJRE7.cjs.map → chunk-DO7EED3B.cjs.map} +1 -1
  68. package/dist/{chunk-UJDWFDKE.js → chunk-DXKE4YZT.js} +3 -3
  69. package/dist/{chunk-UJDWFDKE.js.map → chunk-DXKE4YZT.js.map} +1 -1
  70. package/dist/{chunk-KQ6GLYFZ.cjs → chunk-ECKIFQSD.cjs} +6 -6
  71. package/dist/{chunk-KQ6GLYFZ.cjs.map → chunk-ECKIFQSD.cjs.map} +1 -1
  72. package/dist/{chunk-4P27Y52M.js → chunk-EPKPHWIL.js} +4 -4
  73. package/dist/{chunk-4P27Y52M.js.map → chunk-EPKPHWIL.js.map} +1 -1
  74. package/dist/{chunk-RIUQP2QS.cjs → chunk-FNSFMM4F.cjs} +5 -5
  75. package/dist/{chunk-RIUQP2QS.cjs.map → chunk-FNSFMM4F.cjs.map} +1 -1
  76. package/dist/{chunk-3Y3ZCDNF.cjs → chunk-FQUSSPXX.cjs} +19 -19
  77. package/dist/{chunk-3Y3ZCDNF.cjs.map → chunk-FQUSSPXX.cjs.map} +1 -1
  78. package/dist/{chunk-ANMX7YDL.cjs → chunk-FSARTLUE.cjs} +4 -4
  79. package/dist/{chunk-ANMX7YDL.cjs.map → chunk-FSARTLUE.cjs.map} +1 -1
  80. package/dist/{chunk-ERACGSDY.cjs → chunk-G42V64UW.cjs} +8 -8
  81. package/dist/{chunk-ERACGSDY.cjs.map → chunk-G42V64UW.cjs.map} +1 -1
  82. package/dist/{chunk-UUI7WXI5.js → chunk-GAI6SRJ3.js} +3 -3
  83. package/dist/{chunk-UUI7WXI5.js.map → chunk-GAI6SRJ3.js.map} +1 -1
  84. package/dist/{chunk-4I6BW3FB.js → chunk-GLRKXJCR.js} +3 -3
  85. package/dist/{chunk-4I6BW3FB.js.map → chunk-GLRKXJCR.js.map} +1 -1
  86. package/dist/{chunk-NPKPCYAT.cjs → chunk-GM376OD6.cjs} +17 -17
  87. package/dist/{chunk-NPKPCYAT.cjs.map → chunk-GM376OD6.cjs.map} +1 -1
  88. package/dist/{chunk-DXEPYK3I.cjs → chunk-HGJHWI7W.cjs} +5 -3
  89. package/dist/chunk-HGJHWI7W.cjs.map +1 -0
  90. package/dist/{chunk-6ZA574PU.cjs → chunk-IIV5GNSK.cjs} +5 -5
  91. package/dist/{chunk-6ZA574PU.cjs.map → chunk-IIV5GNSK.cjs.map} +1 -1
  92. package/dist/{chunk-XPVQI3MM.cjs → chunk-INMDLVUB.cjs} +17 -2
  93. package/dist/chunk-INMDLVUB.cjs.map +1 -0
  94. package/dist/{chunk-RZSSQ7AT.js → chunk-JATLYCS4.js} +3 -3
  95. package/dist/{chunk-RZSSQ7AT.js.map → chunk-JATLYCS4.js.map} +1 -1
  96. package/dist/{chunk-4NB4WOGU.cjs → chunk-JCO62XMU.cjs} +6 -6
  97. package/dist/{chunk-4NB4WOGU.cjs.map → chunk-JCO62XMU.cjs.map} +1 -1
  98. package/dist/{chunk-QR7B6UPR.js → chunk-JN2CL7MK.js} +3 -3
  99. package/dist/{chunk-QR7B6UPR.js.map → chunk-JN2CL7MK.js.map} +1 -1
  100. package/dist/{chunk-FBCDYTWM.js → chunk-JNSSA4YN.js} +3 -3
  101. package/dist/{chunk-FBCDYTWM.js.map → chunk-JNSSA4YN.js.map} +1 -1
  102. package/dist/{chunk-BIQIE3VW.js → chunk-JQAGNAY2.js} +5 -5
  103. package/dist/{chunk-BIQIE3VW.js.map → chunk-JQAGNAY2.js.map} +1 -1
  104. package/dist/{chunk-TOJ56HKQ.cjs → chunk-KD7YD6US.cjs} +8 -8
  105. package/dist/{chunk-TOJ56HKQ.cjs.map → chunk-KD7YD6US.cjs.map} +1 -1
  106. package/dist/{chunk-5LNLB2XT.js → chunk-KSQQBFDQ.js} +3 -3
  107. package/dist/{chunk-5LNLB2XT.js.map → chunk-KSQQBFDQ.js.map} +1 -1
  108. package/dist/{chunk-3NOVISM6.js → chunk-L52HKEUD.js} +3 -3
  109. package/dist/{chunk-3NOVISM6.js.map → chunk-L52HKEUD.js.map} +1 -1
  110. package/dist/{chunk-IXUIOR4K.cjs → chunk-M42FTWY2.cjs} +6 -6
  111. package/dist/{chunk-IXUIOR4K.cjs.map → chunk-M42FTWY2.cjs.map} +1 -1
  112. package/dist/{chunk-32ZCJOSR.cjs → chunk-N7AIZWQS.cjs} +4 -4
  113. package/dist/{chunk-32ZCJOSR.cjs.map → chunk-N7AIZWQS.cjs.map} +1 -1
  114. package/dist/{chunk-P7D7BYFE.js → chunk-NA3NRLX2.js} +4 -4
  115. package/dist/{chunk-P7D7BYFE.js.map → chunk-NA3NRLX2.js.map} +1 -1
  116. package/dist/{chunk-Y424YL55.js → chunk-OLA7OYAS.js} +3 -3
  117. package/dist/{chunk-Y424YL55.js.map → chunk-OLA7OYAS.js.map} +1 -1
  118. package/dist/{chunk-F6W62K4J.js → chunk-OWYWRBED.js} +3 -3
  119. package/dist/{chunk-F6W62K4J.js.map → chunk-OWYWRBED.js.map} +1 -1
  120. package/dist/{chunk-RSJGTWLM.js → chunk-OYLZ5PF2.js} +3 -3
  121. package/dist/{chunk-RSJGTWLM.js.map → chunk-OYLZ5PF2.js.map} +1 -1
  122. package/dist/{chunk-7XC6E4BT.cjs → chunk-PJN4HM2X.cjs} +37 -37
  123. package/dist/{chunk-7XC6E4BT.cjs.map → chunk-PJN4HM2X.cjs.map} +1 -1
  124. package/dist/{chunk-NIO3XVUV.js → chunk-PLBWZW4F.js} +4 -4
  125. package/dist/{chunk-NIO3XVUV.js.map → chunk-PLBWZW4F.js.map} +1 -1
  126. package/dist/{chunk-XI74P5F2.cjs → chunk-PW2E7YBD.cjs} +5 -5
  127. package/dist/{chunk-XI74P5F2.cjs.map → chunk-PW2E7YBD.cjs.map} +1 -1
  128. package/dist/{chunk-HDY7YQFX.js → chunk-Q5APDRMO.js} +3 -3
  129. package/dist/{chunk-HDY7YQFX.js.map → chunk-Q5APDRMO.js.map} +1 -1
  130. package/dist/{chunk-FGLIP6YR.js → chunk-QATEO4KC.js} +4 -4
  131. package/dist/{chunk-FGLIP6YR.js.map → chunk-QATEO4KC.js.map} +1 -1
  132. package/dist/{chunk-254QK722.cjs → chunk-QHCAWDMG.cjs} +18 -7
  133. package/dist/chunk-QHCAWDMG.cjs.map +1 -0
  134. package/dist/{chunk-7HFZL5V5.js → chunk-QNJEDBIN.js} +4 -4
  135. package/dist/{chunk-7HFZL5V5.js.map → chunk-QNJEDBIN.js.map} +1 -1
  136. package/dist/{chunk-AIJYZP7M.js → chunk-R3MJKY63.js} +6 -6
  137. package/dist/{chunk-AIJYZP7M.js.map → chunk-R3MJKY63.js.map} +1 -1
  138. package/dist/{chunk-N54FYWG6.js → chunk-R5P7NAJQ.js} +4 -4
  139. package/dist/{chunk-N54FYWG6.js.map → chunk-R5P7NAJQ.js.map} +1 -1
  140. package/dist/{chunk-BWSZ2BHJ.cjs → chunk-S6457ZNC.cjs} +5 -5
  141. package/dist/{chunk-BWSZ2BHJ.cjs.map → chunk-S6457ZNC.cjs.map} +1 -1
  142. package/dist/{chunk-Z2OOJGHL.cjs → chunk-SCYLVQWA.cjs} +53 -53
  143. package/dist/{chunk-Z2OOJGHL.cjs.map → chunk-SCYLVQWA.cjs.map} +1 -1
  144. package/dist/{chunk-7IRTD4JT.cjs → chunk-SGDNEIJM.cjs} +4 -4
  145. package/dist/{chunk-7IRTD4JT.cjs.map → chunk-SGDNEIJM.cjs.map} +1 -1
  146. package/dist/{chunk-4JXO5JTE.js → chunk-SNAMNKFH.js} +17 -2
  147. package/dist/chunk-SNAMNKFH.js.map +1 -0
  148. package/dist/{chunk-GW4RFJZ5.js → chunk-TUYWCUKH.js} +18 -7
  149. package/dist/chunk-TUYWCUKH.js.map +1 -0
  150. package/dist/{chunk-CLQW724U.cjs → chunk-TXB3UHIO.cjs} +9 -9
  151. package/dist/{chunk-CLQW724U.cjs.map → chunk-TXB3UHIO.cjs.map} +1 -1
  152. package/dist/{chunk-4RI3CQGE.js → chunk-ULEX7OOJ.js} +4 -4
  153. package/dist/{chunk-4RI3CQGE.js.map → chunk-ULEX7OOJ.js.map} +1 -1
  154. package/dist/{chunk-KDW6BD4O.cjs → chunk-UVVZD3AS.cjs} +4 -4
  155. package/dist/{chunk-KDW6BD4O.cjs.map → chunk-UVVZD3AS.cjs.map} +1 -1
  156. package/dist/{chunk-MA3Y6AYA.cjs → chunk-V2KSJLUL.cjs} +8 -8
  157. package/dist/{chunk-MA3Y6AYA.cjs.map → chunk-V2KSJLUL.cjs.map} +1 -1
  158. package/dist/{chunk-SW2E7XKY.cjs → chunk-VIVS44IG.cjs} +9 -9
  159. package/dist/{chunk-SW2E7XKY.cjs.map → chunk-VIVS44IG.cjs.map} +1 -1
  160. package/dist/{chunk-GVM6DTR5.js → chunk-VP3XNLUL.js} +5 -3
  161. package/dist/chunk-VP3XNLUL.js.map +1 -0
  162. package/dist/{chunk-IGDO62KR.cjs → chunk-VVKUYQER.cjs} +5 -5
  163. package/dist/{chunk-IGDO62KR.cjs.map → chunk-VVKUYQER.cjs.map} +1 -1
  164. package/dist/{chunk-BJ6ABRSQ.cjs → chunk-WG2ANSDG.cjs} +6 -6
  165. package/dist/{chunk-BJ6ABRSQ.cjs.map → chunk-WG2ANSDG.cjs.map} +1 -1
  166. package/dist/{chunk-WFBUBT54.js → chunk-WX2XB6FP.js} +3 -3
  167. package/dist/{chunk-WFBUBT54.js.map → chunk-WX2XB6FP.js.map} +1 -1
  168. package/dist/{chunk-7QW6TU4X.js → chunk-YCPWQWQQ.js} +3 -3
  169. package/dist/{chunk-7QW6TU4X.js.map → chunk-YCPWQWQQ.js.map} +1 -1
  170. package/dist/{chunk-DSQCYX7L.js → chunk-YSIFPHLX.js} +7 -7
  171. package/dist/{chunk-DSQCYX7L.js.map → chunk-YSIFPHLX.js.map} +1 -1
  172. package/dist/{chunk-2X54ZLT6.js → chunk-ZFJJMDV3.js} +4 -4
  173. package/dist/{chunk-2X54ZLT6.js.map → chunk-ZFJJMDV3.js.map} +1 -1
  174. package/dist/{chunk-PYI2IWNX.cjs → chunk-ZOSM6D7F.cjs} +4 -4
  175. package/dist/{chunk-PYI2IWNX.cjs.map → chunk-ZOSM6D7F.cjs.map} +1 -1
  176. package/dist/components/ActionPlan/index.cjs +6 -6
  177. package/dist/components/ActionPlan/index.js +4 -4
  178. package/dist/components/ActivityFeed/index.cjs +6 -6
  179. package/dist/components/ActivityFeed/index.js +4 -4
  180. package/dist/components/AlertDialog/index.cjs +7 -7
  181. package/dist/components/AlertDialog/index.js +3 -3
  182. package/dist/components/AssociationList/index.cjs +6 -6
  183. package/dist/components/AssociationList/index.js +4 -4
  184. package/dist/components/Button/index.cjs +4 -4
  185. package/dist/components/Button/index.d.cts +1 -1
  186. package/dist/components/Button/index.d.ts +1 -1
  187. package/dist/components/Button/index.js +2 -2
  188. package/dist/components/CalendarView/index.cjs +5 -5
  189. package/dist/components/CalendarView/index.js +3 -3
  190. package/dist/components/CustomizableDashboard/index.cjs +10 -10
  191. package/dist/components/CustomizableDashboard/index.js +3 -3
  192. package/dist/components/EmailEditor/index.cjs +14 -14
  193. package/dist/components/EmailEditor/index.js +5 -5
  194. package/dist/components/FieldHistory/index.cjs +6 -6
  195. package/dist/components/FieldHistory/index.js +4 -4
  196. package/dist/components/FloatingWindow/index.cjs +5 -5
  197. package/dist/components/FloatingWindow/index.js +3 -3
  198. package/dist/components/ListView/index.cjs +5 -5
  199. package/dist/components/ListView/index.js +3 -3
  200. package/dist/components/Markdown/index.cjs +17 -17
  201. package/dist/components/Markdown/index.js +8 -8
  202. package/dist/components/MediaEditor/index.cjs +12 -12
  203. package/dist/components/MediaEditor/index.d.cts +13 -0
  204. package/dist/components/MediaEditor/index.d.ts +13 -0
  205. package/dist/components/MediaEditor/index.js +7 -7
  206. package/dist/components/MediaFeed/index.cjs +6 -6
  207. package/dist/components/MediaFeed/index.js +5 -5
  208. package/dist/components/MediaPlayer/index.cjs +7 -7
  209. package/dist/components/MediaPlayer/index.js +4 -4
  210. package/dist/components/MegaMenu/index.cjs +6 -6
  211. package/dist/components/MegaMenu/index.js +3 -3
  212. package/dist/components/RadialExplorer/index.cjs +4 -4
  213. package/dist/components/RadialExplorer/index.js +3 -3
  214. package/dist/components/RecordHeader/index.cjs +5 -5
  215. package/dist/components/RecordHeader/index.d.cts +1 -1
  216. package/dist/components/RecordHeader/index.d.ts +1 -1
  217. package/dist/components/RecordHeader/index.js +3 -3
  218. package/dist/components/RichTextEditor/index.cjs +6 -6
  219. package/dist/components/RichTextEditor/index.js +3 -3
  220. package/dist/components/SectionSpyNav/index.cjs +4 -4
  221. package/dist/components/SectionSpyNav/index.js +3 -3
  222. package/dist/components/SuperChat/index.cjs +9 -9
  223. package/dist/components/SuperChat/index.js +5 -5
  224. package/dist/components/Textarea/index.cjs +7 -7
  225. package/dist/components/Textarea/index.js +4 -4
  226. package/dist/components/TranscriptView/index.cjs +2 -2
  227. package/dist/components/TranscriptView/index.d.cts +14 -1
  228. package/dist/components/TranscriptView/index.d.ts +14 -1
  229. package/dist/components/TranscriptView/index.js +1 -1
  230. package/dist/components/ViewSet/index.cjs +6 -6
  231. package/dist/components/ViewSet/index.js +5 -5
  232. package/dist/datavis.cjs +3 -3
  233. package/dist/datavis.js +2 -2
  234. package/dist/deck.cjs +15 -15
  235. package/dist/deck.js +2 -2
  236. package/dist/esheet.cjs +130 -130
  237. package/dist/esheet.js +8 -8
  238. package/dist/hooks/index.cjs +12 -12
  239. package/dist/hooks/index.d.cts +15 -2
  240. package/dist/hooks/index.d.ts +15 -2
  241. package/dist/hooks/index.js +3 -3
  242. package/dist/index.cjs +2056 -418
  243. package/dist/index.cjs.map +1 -1
  244. package/dist/index.d.cts +178 -87
  245. package/dist/index.d.ts +178 -87
  246. package/dist/index.js +1693 -55
  247. package/dist/index.js.map +1 -1
  248. package/dist/{model-Y7WRIGGA.cjs → model-NPW2JMHZ.cjs} +20 -20
  249. package/dist/{model-Y7WRIGGA.cjs.map → model-NPW2JMHZ.cjs.map} +1 -1
  250. package/dist/{model-WFFZRQMY.js → model-SG5H3TCJ.js} +6 -6
  251. package/dist/{model-WFFZRQMY.js.map → model-SG5H3TCJ.js.map} +1 -1
  252. package/dist/org-chart.cjs +4 -4
  253. package/dist/org-chart.js +2 -2
  254. package/dist/styles.css +1 -1
  255. package/dist/tailwind-preset.cjs +4 -4
  256. package/dist/tailwind-preset.js +1 -1
  257. package/dist/templates.cjs +38 -38
  258. package/dist/templates.js +3 -3
  259. package/package.json +1 -1
  260. package/dist/CsvBlock-CFXSDPBI.js +0 -9
  261. package/dist/CsvBlock-RGO7JXHJ.cjs +0 -18
  262. package/dist/HtmlPreviewBlock-VBYXCXVT.cjs +0 -18
  263. package/dist/HtmlPreviewBlock-Z2GCK325.js +0 -9
  264. package/dist/MermaidBlock-I2R2BQOX.cjs +0 -18
  265. package/dist/MermaidBlock-XCAK7IA5.js +0 -9
  266. package/dist/SurveyBlock-KI5JOWCL.js +0 -9
  267. package/dist/SurveyBlock-UKSGISRT.cjs +0 -18
  268. package/dist/chunk-254QK722.cjs.map +0 -1
  269. package/dist/chunk-4JXO5JTE.js.map +0 -1
  270. package/dist/chunk-6CGM5H4J.js.map +0 -1
  271. package/dist/chunk-DXEPYK3I.cjs.map +0 -1
  272. package/dist/chunk-GVM6DTR5.js.map +0 -1
  273. package/dist/chunk-GW4RFJZ5.js.map +0 -1
  274. package/dist/chunk-NUFUV43P.cjs.map +0 -1
  275. package/dist/chunk-XPVQI3MM.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/CalendarView/CalendarView.tsx"],"names":[],"mappings":"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","file":"chunk-RZSSQ7AT.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime, Info } from 'luxon';\nimport { cn } from '../../utils/cn';\nimport { Spinner } from '../Spinner';\nimport { Button } from '../Button';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../Icons';\nimport {\n accentClasses,\n defaultViewLabels,\n toDateTime,\n type ViewBaseProps,\n type ViewLabels,\n} from '../../views/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CalendarViewSlot =\n | 'toolbar'\n | 'weekday'\n | 'day'\n | 'outsideDay'\n | 'today'\n | 'entry'\n | 'selectedEntry'\n | 'state';\n\nexport interface CalendarLabels extends ViewLabels {\n previousMonth: string;\n nextMonth: string;\n today: string;\n /** Overflow affordance. `{count}` is substituted. */\n more: string;\n}\n\nexport const defaultCalendarLabels: CalendarLabels = {\n ...defaultViewLabels,\n empty: 'Nothing this month',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n today: 'Today',\n more: '{count} more',\n};\n\nexport interface CalendarViewProps<T> extends ViewBaseProps<T> {\n /** Controlled month. Any date inside the month works. */\n month?: Date;\n /** Starting month when uncontrolled. Defaults to the month containing `now`. */\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n /**\n * IANA zone the grid is drawn in, e.g. `America/New_York`. Defaults to the\n * runtime's. A day boundary is a business fact, so state it explicitly when\n * the collection belongs to somewhere other than the viewer.\n */\n timeZone?: string;\n /** 1 = Monday … 7 = Sunday. Defaults to Monday. */\n weekStartsOn?: number;\n /** Locale for month, weekday and day-number formatting. */\n locale?: string;\n /** Entries to show per day before collapsing into \"{count} more\". */\n maxPerDay?: number;\n labels?: Partial<CalendarLabels>;\n classNames?: Partial<Record<CalendarViewSlot, string>>;\n /** Hide the month toolbar when the host renders its own. */\n hideToolbar?: boolean;\n}\n\ninterface Placed<T> {\n id: string;\n item: T;\n start: DateTime;\n end: DateTime;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CalendarView<T>({\n items,\n accessors,\n loading = false,\n error = null,\n selectedId = null,\n onOpen,\n getHref,\n renderItem,\n emptyState,\n labels,\n month,\n defaultMonth,\n onMonthChange,\n timeZone,\n weekStartsOn = 1,\n locale,\n maxPerDay = 3,\n now,\n className,\n classNames,\n hideToolbar = false,\n}: CalendarViewProps<T>) {\n const text = { ...defaultCalendarLabels, ...labels };\n const zone = timeZone ?? DateTime.local().zoneName;\n const today = React.useMemo(\n () => DateTime.fromJSDate(now ?? new Date(), { zone }).startOf('day'),\n [now, zone]\n );\n\n const [internalMonth, setInternalMonth] = React.useState(() =>\n defaultMonth\n ? DateTime.fromJSDate(defaultMonth, { zone }).startOf('month')\n : today.startOf('month')\n );\n // Re-anchor from the calendar year and month rather than the instant: an\n // instant on the 1st shifted into a behind-UTC zone lands in the month before.\n const current = React.useMemo(() => {\n const source = month ? DateTime.fromJSDate(month, { zone }) : internalMonth;\n return DateTime.fromObject(\n { year: source.year, month: source.month, day: 1 },\n { zone }\n );\n }, [month, internalMonth, zone]);\n\n const goToMonth = (next: DateTime) => {\n if (!month) setInternalMonth(next);\n onMonthChange?.(next.toJSDate());\n };\n\n // Six weeks always, so the grid does not change height between months.\n const gridStart = React.useMemo(() => {\n const first = current.startOf('month');\n const offset = (first.weekday - weekStartsOn + 7) % 7;\n return first.minus({ days: offset });\n }, [current, weekStartsOn]);\n\n const days = React.useMemo(\n () => Array.from({ length: 42 }, (_, i) => gridStart.plus({ days: i })),\n [gridStart]\n );\n\n const weeks = React.useMemo(\n () => Array.from({ length: 6 }, (_, i) => days.slice(i * 7, i * 7 + 7)),\n [days]\n );\n\n const placed = React.useMemo<Placed<T>[]>(() => {\n const out: Placed<T>[] = [];\n for (const item of items) {\n const start = toDateTime(accessors.getStart?.(item), zone)?.startOf(\n 'day'\n );\n if (!start) continue;\n const rawEnd = toDateTime(accessors.getEnd?.(item), zone)?.startOf('day');\n const end = rawEnd ?? start;\n out.push({\n id: accessors.getId(item),\n item,\n start,\n // A backwards range is data, not a crash: clamp it to one day.\n end: end < start ? start : end,\n });\n }\n return out;\n }, [items, accessors, zone]);\n\n const byDay = React.useMemo(() => {\n const map = new Map<string, Placed<T>[]>();\n for (const day of days) {\n const key = day.toISODate() ?? '';\n map.set(\n key,\n placed.filter((p) => p.start <= day && day <= p.end)\n );\n }\n return map;\n }, [days, placed]);\n\n const weekdayNames = React.useMemo(() => {\n const names = Info.weekdays('short', { locale });\n return Array.from(\n { length: 7 },\n (_, i) => names[(weekStartsOn - 1 + i) % 7]\n );\n }, [locale, weekStartsOn]);\n\n const state = (content: React.ReactNode) => (\n <div\n data-slot=\"calendar-view-state\"\n className={cn(\n 'border-border bg-card text-muted-foreground flex flex-col items-center justify-center gap-2 rounded-lg border px-4 py-10 text-center text-sm',\n classNames?.state\n )}\n >\n {content}\n </div>\n );\n\n if (error) {\n return state(\n <p role=\"alert\" className=\"text-destructive\">\n {text.error}\n </p>\n );\n }\n if (loading) {\n return state(\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"sm\" label={text.loading} />\n <span aria-hidden>{text.loading}</span>\n </span>\n );\n }\n\n const monthLabel = current\n .setLocale(locale ?? current.locale ?? 'en')\n .toFormat('LLLL yyyy');\n const nothingPlaced = placed.length === 0;\n\n return (\n <div\n data-slot=\"calendar-view\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n >\n {!hideToolbar && (\n <div\n data-slot=\"calendar-view-toolbar\"\n className={cn(\n 'border-border flex items-center gap-2 border-b px-3 py-2',\n classNames?.toolbar\n )}\n >\n <h3 aria-live=\"polite\" className=\"text-sm font-semibold\">\n {monthLabel}\n </h3>\n <div className=\"ms-auto flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={text.previousMonth}\n onClick={() => goToMonth(current.minus({ months: 1 }))}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" aria-hidden />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => goToMonth(today.startOf('month'))}\n >\n {text.today}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={text.nextMonth}\n onClick={() => goToMonth(current.plus({ months: 1 }))}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" aria-hidden />\n </Button>\n </div>\n </div>\n )}\n\n {nothingPlaced && emptyState ? (\n emptyState\n ) : (\n // `table`, not `grid`: a grid promises arrow-key navigation between\n // cells, which this does not implement. Rows are explicit because a\n // columnheader or cell outside one is invalid ARIA, not just untidy.\n <div role=\"table\" aria-label={monthLabel}>\n <div role=\"rowgroup\">\n <div role=\"row\" className=\"border-border grid grid-cols-7 border-b\">\n {weekdayNames.map((name) => (\n <div\n key={name}\n role=\"columnheader\"\n data-slot=\"calendar-view-weekday\"\n className={cn(\n 'text-muted-foreground px-2 py-1.5 text-center text-xs font-medium tracking-wide uppercase',\n classNames?.weekday\n )}\n >\n {name}\n </div>\n ))}\n </div>\n </div>\n <div role=\"rowgroup\">\n {weeks.map((week) => (\n <div\n key={week[0].toISODate()}\n role=\"row\"\n className=\"grid grid-cols-7\"\n >\n {week.map((day) => {\n const key = day.toISODate() ?? '';\n const entries = byDay.get(key) ?? [];\n const outside = day.month !== current.month;\n const isToday = day.hasSame(today, 'day');\n const visible = entries.slice(0, maxPerDay);\n const overflow = entries.length - visible.length;\n return (\n <div\n key={key}\n role=\"cell\"\n data-slot=\"calendar-view-day\"\n data-outside={outside || undefined}\n data-today={isToday || undefined}\n className={cn(\n 'border-border min-h-24 border-e border-b p-1 last:border-e-0',\n outside && cn('bg-muted/30', classNames?.outsideDay),\n isToday && classNames?.today,\n classNames?.day\n )}\n >\n <div\n className={cn(\n 'mb-1 flex h-5 w-5 items-center justify-center rounded-full text-xs tabular-nums',\n outside ? 'text-muted-foreground' : 'text-foreground',\n // primary-800, not 500: white on the mid scale is\n // about 2:1 and fails AA. Same pair Button uses.\n isToday && 'bg-primary-800 font-semibold text-white'\n )}\n >\n <time dateTime={key}>{day.day}</time>\n {isToday && (\n <span className=\"sr-only\">{text.today}</span>\n )}\n </div>\n <ul className=\"space-y-0.5\">\n {visible.map(({ id, item, start, end }) => {\n const accent =\n accessors.getAccent?.(item) ?? 'primary';\n const selected = id === selectedId;\n const body = renderItem?.(item, {\n view: 'calendar',\n }) ?? (\n <span className=\"block truncate\">\n {accessors.getTitle(item)}\n </span>\n );\n const classes = cn(\n 'block w-full rounded px-1 py-0.5 text-start text-xs text-foreground',\n accentClasses[accent].tint,\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n classNames?.entry,\n selected &&\n cn(\n 'ring-1',\n accentClasses[accent].border,\n classNames?.selectedEntry\n )\n );\n // A multi-day item repeats on each day it covers; the\n // range is in the accessible name, not in the geometry.\n const spanLabel = start.hasSame(end, 'day')\n ? undefined\n : `${accessors.getTitle(item)}, ${start.toISODate()} to ${end.toISODate()}`;\n const href = getHref?.(id, item);\n return (\n <li key={id}>\n {href ? (\n <a\n href={href}\n aria-label={spanLabel}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"calendar-view-entry\"\n className={classes}\n onClick={(event) => {\n if (\n !onOpen ||\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n >\n {body}\n </a>\n ) : onOpen ? (\n <button\n type=\"button\"\n aria-label={spanLabel}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"calendar-view-entry\"\n className={classes}\n onClick={() => onOpen(id, item)}\n >\n {body}\n </button>\n ) : (\n // `aria-label` is prohibited on role `generic`,\n // so the range rides along as hidden text here.\n <span\n data-slot=\"calendar-view-entry\"\n className={classes}\n >\n {body}\n {spanLabel && (\n <span className=\"sr-only\">\n {`, ${start.toISODate()} to ${end.toISODate()}`}\n </span>\n )}\n </span>\n )}\n </li>\n );\n })}\n {overflow > 0 && (\n <li className=\"text-muted-foreground px-1 text-xs\">\n {text.more.replace('{count}', String(overflow))}\n </li>\n )}\n </ul>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n {nothingPlaced && (\n <p className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {text.empty}\n </p>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/components/CalendarView/CalendarView.tsx"],"names":[],"mappings":"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","file":"chunk-JATLYCS4.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { DateTime, Info } from 'luxon';\nimport { cn } from '../../utils/cn';\nimport { Spinner } from '../Spinner';\nimport { Button } from '../Button';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../Icons';\nimport {\n accentClasses,\n defaultViewLabels,\n toDateTime,\n type ViewBaseProps,\n type ViewLabels,\n} from '../../views/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CalendarViewSlot =\n | 'toolbar'\n | 'weekday'\n | 'day'\n | 'outsideDay'\n | 'today'\n | 'entry'\n | 'selectedEntry'\n | 'state';\n\nexport interface CalendarLabels extends ViewLabels {\n previousMonth: string;\n nextMonth: string;\n today: string;\n /** Overflow affordance. `{count}` is substituted. */\n more: string;\n}\n\nexport const defaultCalendarLabels: CalendarLabels = {\n ...defaultViewLabels,\n empty: 'Nothing this month',\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n today: 'Today',\n more: '{count} more',\n};\n\nexport interface CalendarViewProps<T> extends ViewBaseProps<T> {\n /** Controlled month. Any date inside the month works. */\n month?: Date;\n /** Starting month when uncontrolled. Defaults to the month containing `now`. */\n defaultMonth?: Date;\n onMonthChange?: (month: Date) => void;\n /**\n * IANA zone the grid is drawn in, e.g. `America/New_York`. Defaults to the\n * runtime's. A day boundary is a business fact, so state it explicitly when\n * the collection belongs to somewhere other than the viewer.\n */\n timeZone?: string;\n /** 1 = Monday … 7 = Sunday. Defaults to Monday. */\n weekStartsOn?: number;\n /** Locale for month, weekday and day-number formatting. */\n locale?: string;\n /** Entries to show per day before collapsing into \"{count} more\". */\n maxPerDay?: number;\n labels?: Partial<CalendarLabels>;\n classNames?: Partial<Record<CalendarViewSlot, string>>;\n /** Hide the month toolbar when the host renders its own. */\n hideToolbar?: boolean;\n}\n\ninterface Placed<T> {\n id: string;\n item: T;\n start: DateTime;\n end: DateTime;\n}\n\n// =============================================================================\n// Component\n// =============================================================================\n\nexport function CalendarView<T>({\n items,\n accessors,\n loading = false,\n error = null,\n selectedId = null,\n onOpen,\n getHref,\n renderItem,\n emptyState,\n labels,\n month,\n defaultMonth,\n onMonthChange,\n timeZone,\n weekStartsOn = 1,\n locale,\n maxPerDay = 3,\n now,\n className,\n classNames,\n hideToolbar = false,\n}: CalendarViewProps<T>) {\n const text = { ...defaultCalendarLabels, ...labels };\n const zone = timeZone ?? DateTime.local().zoneName;\n const today = React.useMemo(\n () => DateTime.fromJSDate(now ?? new Date(), { zone }).startOf('day'),\n [now, zone]\n );\n\n const [internalMonth, setInternalMonth] = React.useState(() =>\n defaultMonth\n ? DateTime.fromJSDate(defaultMonth, { zone }).startOf('month')\n : today.startOf('month')\n );\n // Re-anchor from the calendar year and month rather than the instant: an\n // instant on the 1st shifted into a behind-UTC zone lands in the month before.\n const current = React.useMemo(() => {\n const source = month ? DateTime.fromJSDate(month, { zone }) : internalMonth;\n return DateTime.fromObject(\n { year: source.year, month: source.month, day: 1 },\n { zone }\n );\n }, [month, internalMonth, zone]);\n\n const goToMonth = (next: DateTime) => {\n if (!month) setInternalMonth(next);\n onMonthChange?.(next.toJSDate());\n };\n\n // Six weeks always, so the grid does not change height between months.\n const gridStart = React.useMemo(() => {\n const first = current.startOf('month');\n const offset = (first.weekday - weekStartsOn + 7) % 7;\n return first.minus({ days: offset });\n }, [current, weekStartsOn]);\n\n const days = React.useMemo(\n () => Array.from({ length: 42 }, (_, i) => gridStart.plus({ days: i })),\n [gridStart]\n );\n\n const weeks = React.useMemo(\n () => Array.from({ length: 6 }, (_, i) => days.slice(i * 7, i * 7 + 7)),\n [days]\n );\n\n const placed = React.useMemo<Placed<T>[]>(() => {\n const out: Placed<T>[] = [];\n for (const item of items) {\n const start = toDateTime(accessors.getStart?.(item), zone)?.startOf(\n 'day'\n );\n if (!start) continue;\n const rawEnd = toDateTime(accessors.getEnd?.(item), zone)?.startOf('day');\n const end = rawEnd ?? start;\n out.push({\n id: accessors.getId(item),\n item,\n start,\n // A backwards range is data, not a crash: clamp it to one day.\n end: end < start ? start : end,\n });\n }\n return out;\n }, [items, accessors, zone]);\n\n const byDay = React.useMemo(() => {\n const map = new Map<string, Placed<T>[]>();\n for (const day of days) {\n const key = day.toISODate() ?? '';\n map.set(\n key,\n placed.filter((p) => p.start <= day && day <= p.end)\n );\n }\n return map;\n }, [days, placed]);\n\n const weekdayNames = React.useMemo(() => {\n const names = Info.weekdays('short', { locale });\n return Array.from(\n { length: 7 },\n (_, i) => names[(weekStartsOn - 1 + i) % 7]\n );\n }, [locale, weekStartsOn]);\n\n const state = (content: React.ReactNode) => (\n <div\n data-slot=\"calendar-view-state\"\n className={cn(\n 'border-border bg-card text-muted-foreground flex flex-col items-center justify-center gap-2 rounded-lg border px-4 py-10 text-center text-sm',\n classNames?.state\n )}\n >\n {content}\n </div>\n );\n\n if (error) {\n return state(\n <p role=\"alert\" className=\"text-destructive\">\n {text.error}\n </p>\n );\n }\n if (loading) {\n return state(\n <span className=\"flex items-center gap-2\">\n <Spinner size=\"sm\" label={text.loading} />\n <span aria-hidden>{text.loading}</span>\n </span>\n );\n }\n\n const monthLabel = current\n .setLocale(locale ?? current.locale ?? 'en')\n .toFormat('LLLL yyyy');\n const nothingPlaced = placed.length === 0;\n\n return (\n <div\n data-slot=\"calendar-view\"\n className={cn(\n 'border-border bg-card overflow-hidden rounded-lg border',\n className\n )}\n >\n {!hideToolbar && (\n <div\n data-slot=\"calendar-view-toolbar\"\n className={cn(\n 'border-border flex items-center gap-2 border-b px-3 py-2',\n classNames?.toolbar\n )}\n >\n <h3 aria-live=\"polite\" className=\"text-sm font-semibold\">\n {monthLabel}\n </h3>\n <div className=\"ms-auto flex items-center gap-1\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={text.previousMonth}\n onClick={() => goToMonth(current.minus({ months: 1 }))}\n >\n <ChevronLeftIcon className=\"size-4 rtl:rotate-180\" aria-hidden />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => goToMonth(today.startOf('month'))}\n >\n {text.today}\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label={text.nextMonth}\n onClick={() => goToMonth(current.plus({ months: 1 }))}\n >\n <ChevronRightIcon className=\"size-4 rtl:rotate-180\" aria-hidden />\n </Button>\n </div>\n </div>\n )}\n\n {nothingPlaced && emptyState ? (\n emptyState\n ) : (\n // `table`, not `grid`: a grid promises arrow-key navigation between\n // cells, which this does not implement. Rows are explicit because a\n // columnheader or cell outside one is invalid ARIA, not just untidy.\n <div role=\"table\" aria-label={monthLabel}>\n <div role=\"rowgroup\">\n <div role=\"row\" className=\"border-border grid grid-cols-7 border-b\">\n {weekdayNames.map((name) => (\n <div\n key={name}\n role=\"columnheader\"\n data-slot=\"calendar-view-weekday\"\n className={cn(\n 'text-muted-foreground px-2 py-1.5 text-center text-xs font-medium tracking-wide uppercase',\n classNames?.weekday\n )}\n >\n {name}\n </div>\n ))}\n </div>\n </div>\n <div role=\"rowgroup\">\n {weeks.map((week) => (\n <div\n key={week[0].toISODate()}\n role=\"row\"\n className=\"grid grid-cols-7\"\n >\n {week.map((day) => {\n const key = day.toISODate() ?? '';\n const entries = byDay.get(key) ?? [];\n const outside = day.month !== current.month;\n const isToday = day.hasSame(today, 'day');\n const visible = entries.slice(0, maxPerDay);\n const overflow = entries.length - visible.length;\n return (\n <div\n key={key}\n role=\"cell\"\n data-slot=\"calendar-view-day\"\n data-outside={outside || undefined}\n data-today={isToday || undefined}\n className={cn(\n 'border-border min-h-24 border-e border-b p-1 last:border-e-0',\n outside && cn('bg-muted/30', classNames?.outsideDay),\n isToday && classNames?.today,\n classNames?.day\n )}\n >\n <div\n className={cn(\n 'mb-1 flex h-5 w-5 items-center justify-center rounded-full text-xs tabular-nums',\n outside ? 'text-muted-foreground' : 'text-foreground',\n // primary-800, not 500: white on the mid scale is\n // about 2:1 and fails AA. Same pair Button uses.\n isToday && 'bg-primary-800 font-semibold text-white'\n )}\n >\n <time dateTime={key}>{day.day}</time>\n {isToday && (\n <span className=\"sr-only\">{text.today}</span>\n )}\n </div>\n <ul className=\"space-y-0.5\">\n {visible.map(({ id, item, start, end }) => {\n const accent =\n accessors.getAccent?.(item) ?? 'primary';\n const selected = id === selectedId;\n const body = renderItem?.(item, {\n view: 'calendar',\n }) ?? (\n <span className=\"block truncate\">\n {accessors.getTitle(item)}\n </span>\n );\n const classes = cn(\n 'block w-full rounded px-1 py-0.5 text-start text-xs text-foreground',\n accentClasses[accent].tint,\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n classNames?.entry,\n selected &&\n cn(\n 'ring-1',\n accentClasses[accent].border,\n classNames?.selectedEntry\n )\n );\n // A multi-day item repeats on each day it covers; the\n // range is in the accessible name, not in the geometry.\n const spanLabel = start.hasSame(end, 'day')\n ? undefined\n : `${accessors.getTitle(item)}, ${start.toISODate()} to ${end.toISODate()}`;\n const href = getHref?.(id, item);\n return (\n <li key={id}>\n {href ? (\n <a\n href={href}\n aria-label={spanLabel}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"calendar-view-entry\"\n className={classes}\n onClick={(event) => {\n if (\n !onOpen ||\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.button !== 0\n )\n return;\n event.preventDefault();\n onOpen(id, item);\n }}\n >\n {body}\n </a>\n ) : onOpen ? (\n <button\n type=\"button\"\n aria-label={spanLabel}\n aria-current={selected ? 'true' : undefined}\n data-slot=\"calendar-view-entry\"\n className={classes}\n onClick={() => onOpen(id, item)}\n >\n {body}\n </button>\n ) : (\n // `aria-label` is prohibited on role `generic`,\n // so the range rides along as hidden text here.\n <span\n data-slot=\"calendar-view-entry\"\n className={classes}\n >\n {body}\n {spanLabel && (\n <span className=\"sr-only\">\n {`, ${start.toISODate()} to ${end.toISODate()}`}\n </span>\n )}\n </span>\n )}\n </li>\n );\n })}\n {overflow > 0 && (\n <li className=\"text-muted-foreground px-1 text-xs\">\n {text.more.replace('{count}', String(overflow))}\n </li>\n )}\n </ul>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n {nothingPlaced && (\n <p className=\"text-muted-foreground px-3 py-2 text-center text-sm\">\n {text.empty}\n </p>\n )}\n </div>\n )}\n </div>\n );\n}\n"]}
@@ -8,7 +8,7 @@ var chunkCPDNX3LS_cjs = require('./chunk-CPDNX3LS.cjs');
8
8
  var chunkL7L5S2HO_cjs = require('./chunk-L7L5S2HO.cjs');
9
9
  var chunkZ3WMDVMR_cjs = require('./chunk-Z3WMDVMR.cjs');
10
10
  var chunk7E46YDOT_cjs = require('./chunk-7E46YDOT.cjs');
11
- var chunkANMX7YDL_cjs = require('./chunk-ANMX7YDL.cjs');
11
+ var chunkFSARTLUE_cjs = require('./chunk-FSARTLUE.cjs');
12
12
  var chunkS5RVSXDV_cjs = require('./chunk-S5RVSXDV.cjs');
13
13
  var jsxRuntime = require('react/jsx-runtime');
14
14
  var React = require('react');
@@ -123,7 +123,7 @@ function RowIconButton({
123
123
  size = "md"
124
124
  }) {
125
125
  return /* @__PURE__ */ jsxRuntime.jsx(chunkGLG6UE2H_cjs.Tooltip, { content: label, children: /* @__PURE__ */ jsxRuntime.jsx(
126
- chunkANMX7YDL_cjs.Button,
126
+ chunkFSARTLUE_cjs.Button,
127
127
  {
128
128
  type: "button",
129
129
  variant: "ghost",
@@ -437,7 +437,7 @@ function ConcernRow({
437
437
  r.display ? `: ${r.display}` : ""
438
438
  ] }, `${r.type}:${r.concernId}`)),
439
439
  hasHistory && /* @__PURE__ */ jsxRuntime.jsx(
440
- chunkANMX7YDL_cjs.Button,
440
+ chunkFSARTLUE_cjs.Button,
441
441
  {
442
442
  variant: "ghost",
443
443
  size: "sm",
@@ -630,7 +630,7 @@ var ProblemList = React__namespace.forwardRef(
630
630
  }
631
631
  ),
632
632
  /* @__PURE__ */ jsxRuntime.jsx(
633
- chunkANMX7YDL_cjs.Button,
633
+ chunkFSARTLUE_cjs.Button,
634
634
  {
635
635
  variant: "outline",
636
636
  size: "sm",
@@ -662,5 +662,5 @@ exports.concernGroupKey = concernGroupKey;
662
662
  exports.concernHistoryContent = concernHistoryContent;
663
663
  exports.currentAssertion = currentAssertion;
664
664
  exports.toolbarKeyNav = toolbarKeyNav;
665
- //# sourceMappingURL=chunk-4NB4WOGU.cjs.map
666
- //# sourceMappingURL=chunk-4NB4WOGU.cjs.map
665
+ //# sourceMappingURL=chunk-JCO62XMU.cjs.map
666
+ //# sourceMappingURL=chunk-JCO62XMU.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/RowActionToolbar/RowActionToolbar.tsx","../src/components/ProblemList/ProblemList.tsx"],"names":["isRtl","cn","jsx","Tooltip","Button","ExternalLink","StickyNote","Pencil","RefreshCw","CheckCircle","Link","Trash2","ChevronUp","ChevronDown","useMessages","jsxs","Fragment","Badge","HelpCircle","React","dragIndicatorClasses","GripVertical","History","useLiveAnnouncement","useDragReorder","Card","CardHeader","CardContent","Plus"],"mappings":"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","file":"chunk-4NB4WOGU.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isRtl } from '../../hooks/useDirection';\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. Horizontal arrows follow the\n * visual direction, so they invert under RTL.\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 let key = e.key;\n if (isRtl(e.currentTarget)) {\n if (key === 'ArrowRight') key = 'ArrowLeft';\n else if (key === 'ArrowLeft') key = 'ArrowRight';\n }\n const next =\n key === 'ArrowLeft'\n ? (i - 1 + buttons.length) % buttons.length\n : key === 'ArrowRight'\n ? (i + 1) % buttons.length\n : 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 /**\n * `'hover'` floats the toolbar over the row on fine-pointer devices and\n * reveals it on hover/focus; `'always'` keeps it in flow at the end of the\n * row and always visible on every pointer type.\n * @default 'hover'\n */\n reveal?: 'hover' | 'always';\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 reveal = 'hover',\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',\n reveal === 'hover' && [\n '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 ],\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 { useMessages, type MessageTranslator } from '../../utils/messages';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Button } from '../Button';\nimport { Tooltip } from '../Tooltip';\nimport { Card, CardHeader, CardContent } from '../Card/Card';\nimport {\n PencilIcon,\n RefreshIcon,\n CheckCircleIcon,\n LinkIcon,\n ExternalLinkIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n PlusIcon,\n HistoryIcon,\n HelpCircleIcon,\n GripVerticalIcon,\n StickyNoteIcon,\n TrashIcon,\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 — shared condition (concern/assertion) model\n// =============================================================================\n\n/** A single coding on a condition assertion (ICD-10 / ICD-11 / SNOMED). */\nexport interface ConditionCoding {\n /** Coding system, e.g. 'ICD-10-CM', 'ICD-11', 'SNOMED' */\n system: 'ICD-10-CM' | 'ICD-11' | 'SNOMED' | string;\n code: string;\n display?: string;\n /** Which coding is authoritative for this assertion */\n primary?: boolean;\n /** Provenance when derived via a crosswalk (e.g. SNOMED→ICD-10 map) */\n mappedFrom?: string;\n}\n\n/** Longitudinal status of the concern (the stable problem thread). */\nexport type ConcernStatus =\n | 'active'\n | 'recurrence'\n | 'relapse'\n | 'inactive'\n | 'remission'\n | 'resolved';\n\n/** FHIR-aligned verification status of an assertion. */\nexport type VerificationStatus =\n | 'unconfirmed'\n | 'provisional'\n | 'differential'\n | 'confirmed'\n | 'refuted'\n | 'entered-in-error';\n\n/** Why an assertion superseded its predecessor. */\nexport type AssertionChangeType =\n | 'refinement'\n | 'revision'\n | 'progression'\n | 'reattribution';\n\n// ---- Uncertainty (mirrors §4 of the design doc) ----\n\n/** Three-state flag for an optional field: confident / uncertain / explicitly unknown. */\nexport interface FieldUncertainty {\n /** false = explicitly unknown (\"asked; patient doesn't know\") — distinct from untouched */\n known: boolean;\n /** Why the value is absent (~ FHIR data-absent-reason) */\n reason?: 'asked-unknown' | 'not-asked' | 'masked' | 'unavailable';\n /** Softness of a value that IS present */\n confidence?: 'low' | 'medium' | 'high';\n note?: string;\n}\n\n/** Condition fields that can carry per-field uncertainty. */\nexport type UncertainConditionField =\n | 'coding'\n | 'onset'\n | 'severity'\n | 'laterality'\n | 'bodySite';\n\n/** First-class uncertainty block for a condition assertion. */\nexport interface Uncertainty {\n overall?: 'confirmed' | 'low' | 'medium' | 'high';\n fields?: Partial<Record<UncertainConditionField, FieldUncertainty>>;\n}\n\n/** A time-stamped, coded characterization of a concern. */\nexport interface ConditionAssertion {\n id: string;\n /** Display date the assertion was made, e.g. \"2023-06-14\" */\n date: string;\n /** Free-text condition name — the only hard-required clinical field */\n text: string;\n coding?: ConditionCoding[];\n verificationStatus: VerificationStatus;\n /** How this assertion relates to the one it supersedes */\n changeType?: AssertionChangeType;\n /** Id of the assertion this one supersedes */\n supersedes?: string;\n severity?: 'mild' | 'moderate' | 'severe';\n /** Onset — exact date and/or fuzzy human string (\"since her twenties\") */\n onset?: { date?: string; fuzzy?: string };\n /** First-class uncertainty (§4 of the design doc) */\n uncertainty?: Uncertainty;\n note?: string;\n}\n\n/** Relationship between two concerns. */\nexport interface ConcernRelationship {\n type:\n | 'caused-by'\n | 'evolved-from'\n | 'differential-sibling'\n | 'complication-of';\n /** concernId of the related concern */\n concernId: string;\n /** Display name of the related concern */\n display?: string;\n}\n\n/** A quick, dated progress note about a concern — lighter than an assertion. */\nexport interface ConditionObservation {\n id: string;\n /** Display date, e.g. \"2026-07-03\" */\n date: string;\n text: string;\n author?: string;\n}\n\n/**\n * A stable problem thread. The concernId is the durable identity that orders\n * and encounters reference; assertions carry the evolving codes.\n */\nexport interface ConditionConcern {\n concernId: string;\n clinicalStatus: ConcernStatus;\n /** Ordered oldest → newest; the last non-refuted assertion is current */\n assertions: ConditionAssertion[];\n /** Quick progress notes over time (newest last) */\n observations?: ConditionObservation[];\n relationships?: ConcernRelationship[];\n /** Where the concern came from */\n source?:\n | 'ehrProblemList'\n | 'patientReported'\n | 'manuallyAdded'\n | 'claimsHistory';\n}\n\n/** Row actions on a concern. */\nexport type ProblemListAction =\n | 'open'\n | 'observe'\n | 'refine'\n | 'revise'\n | 'resolve'\n | 'relate'\n | 'remove'\n | 'move-up'\n | 'move-down';\n\nexport interface ProblemListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'title'\n> {\n /** Patient-level concerns (controlled) */\n concerns: ConditionConcern[];\n /** Header title (pass null to hide) */\n title?: string | null;\n /** Called when a row action is clicked */\n onAction?: (concern: ConditionConcern, action: ProblemListAction) => void;\n /** Called when a new problem is added via the capture-first input */\n onAddProblem?: (text: string) => void;\n /**\n * Called with the full ordered list of concernIds after a move — via drag\n * and drop, the move buttons, or Alt+Arrow keys. Enables reordering. The\n * component renders concerns in props order — persist the ids wherever the\n * encounter/patient object lives and feed them back in.\n */\n onReorder?: (concernIds: string[]) => void;\n /** Which row actions to show (default: all except 'remove') */\n actions?: ProblemListAction[];\n /** Show row actions in flow, always visible, instead of the hover-reveal overlay */\n inlineActions?: boolean;\n /** Hide all action buttons (display only) */\n readOnly?: boolean;\n /** Message shown when there are no concerns */\n emptyMessage?: string;\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: { key: string; label: string; statuses: ConcernStatus[] }[] =\n [\n {\n key: 'active',\n label: 'Active',\n statuses: ['active', 'recurrence', 'relapse'],\n },\n { key: 'inactive', label: 'Inactive', statuses: ['inactive', 'remission'] },\n { key: 'resolved', label: 'Resolved', statuses: ['resolved'] },\n ];\n\n/**\n * Grouping key for a concern. Unconfirmed concerns (current assertion not yet\n * verified) live in their own group, separate from Active / Resolved.\n */\nexport function concernGroupKey(concern: ConditionConcern): string {\n if (currentAssertion(concern)?.verificationStatus === 'unconfirmed') {\n return 'unconfirmed';\n }\n return (\n GROUP_ORDER.find((g) => g.statuses.includes(concern.clinicalStatus))?.key ??\n 'active'\n );\n}\n\nexport const CONCERN_STATUS_LABELS: Record<ConcernStatus, string> = {\n active: 'Active',\n recurrence: 'Recurrence',\n relapse: 'Relapse',\n inactive: 'Inactive',\n remission: 'Remission',\n resolved: 'Resolved',\n};\n\nexport const CHANGE_TYPE_LABELS: Record<AssertionChangeType, string> = {\n refinement: 'Refined',\n revision: 'Revised',\n progression: 'Progressed',\n reattribution: 'Re-attributed',\n};\n\nconst DEFAULT_ACTIONS: ProblemListAction[] = [\n 'open',\n 'observe',\n 'refine',\n 'revise',\n 'resolve',\n 'relate',\n 'move-up',\n 'move-down',\n];\n\nconst ACTION_META: Record<\n ProblemListAction,\n { label: string; icon: React.ComponentType<{ size?: number | string }> }\n> = {\n open: { label: 'Open', icon: ExternalLinkIcon },\n observe: { label: 'Add observation (progress note)', icon: StickyNoteIcon },\n refine: { label: 'Refine (more specific)', icon: PencilIcon },\n revise: { label: 'Revise (prior was wrong)', icon: RefreshIcon },\n resolve: { label: 'Resolve', icon: CheckCircleIcon },\n relate: { label: 'Relate to another problem', icon: LinkIcon },\n remove: { label: 'Delete', icon: TrashIcon },\n 'move-up': { label: 'Move up (Alt+↑)', icon: ChevronUpIcon },\n 'move-down': { label: 'Move down (Alt+↓)', icon: ChevronDownIcon },\n};\n\nconst VERIFICATION_BADGE: Record<\n VerificationStatus,\n {\n label: string;\n variant: 'default' | 'secondary' | 'success' | 'warning' | 'outline';\n }\n> = {\n unconfirmed: { label: 'Unconfirmed', variant: 'outline' },\n provisional: { label: 'Provisional', variant: 'warning' },\n differential: { label: 'Differential', variant: 'warning' },\n confirmed: { label: 'Confirmed', variant: 'success' },\n refuted: { label: 'Refuted', variant: 'secondary' },\n 'entered-in-error': { label: 'Entered in error', variant: 'secondary' },\n};\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/** The current (last non-refuted, non-error) assertion of a concern. */\nexport function currentAssertion(\n concern: ConditionConcern\n): ConditionAssertion | undefined {\n for (let i = concern.assertions.length - 1; i >= 0; i--) {\n const a = concern.assertions[i];\n if (\n a.verificationStatus !== 'refuted' &&\n a.verificationStatus !== 'entered-in-error'\n ) {\n return a;\n }\n }\n return concern.assertions[concern.assertions.length - 1];\n}\n\nconst UNCERTAIN_FIELD_LABELS: Record<UncertainConditionField, string> = {\n coding: 'Coding',\n onset: 'Onset',\n severity: 'Severity',\n laterality: 'Laterality',\n bodySite: 'Body site',\n};\n\nfunction describeFieldUncertainty(\n field: UncertainConditionField,\n f: FieldUncertainty,\n m: MessageTranslator\n): string {\n const label = UNCERTAIN_FIELD_LABELS[field];\n if (!f.known) {\n const reason =\n f.reason === 'asked-unknown'\n ? 'asked — unknown'\n : (f.reason ?? 'unknown').replace(/-/g, ' ');\n return `${m(label)}: ${m(reason)}${f.note ? ` (${f.note})` : ''}`;\n }\n return `${m(label)}: ${m('{confidence} confidence', {\n confidence: m(f.confidence ?? 'uncertain'),\n })}${f.note ? ` (${f.note})` : ''}`;\n}\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\n/**\n * Parenthetical coding display. Clinicians don't need chip noise: inline we\n * show only ICD-10/ICD-11 codes, unlabeled (the code format is obvious), and\n * SNOMED stays out of the way. The full coding background — every system,\n * display name, and crosswalk provenance — lives in the tooltip.\n */\nexport function CodingChips({ coding }: { coding?: ConditionCoding[] }) {\n const m = useMessages();\n if (!coding?.length) return null;\n const icd = coding.filter((c) => c.system.startsWith('ICD'));\n const inline = icd.length > 0 ? icd : coding.filter((c) => c.primary);\n const label = inline.map((c) => c.code).join(', ');\n return (\n <Tooltip\n content={\n <span className=\"flex flex-col gap-0.5\">\n {coding.map((c) => (\n <span key={`${c.system}:${c.code}`}>\n {c.system} {c.code}\n {c.display ? ` — ${c.display}` : ''}\n {c.primary ? m(' · primary') : ''}\n {c.mappedFrom\n ? m(' · mapped from {source}', { source: c.mappedFrom })\n : ''}\n </span>\n ))}\n </span>\n }\n >\n {/* focusable so the coding provenance is reachable by keyboard */}\n <span\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className=\"text-muted-foreground focus-visible:ring-ring rounded text-xs whitespace-nowrap focus-visible:ring-2 focus-visible:outline-none\"\n >\n ({label || m('coded')})\n </span>\n </Tooltip>\n );\n}\n\n/**\n * Full concern background for a hover/long-press tooltip: assertion history,\n * coding background, and recent observations.\n */\nexport function concernHistoryContent(\n concern: ConditionConcern,\n m: MessageTranslator = (message) => message\n): React.ReactNode {\n return (\n <span className=\"flex max-w-xs flex-col gap-1\">\n <span className=\"font-semibold\">{m('History')}</span>\n {[...concern.assertions].reverse().map((a) => (\n <span key={a.id}>\n {a.date} — {a.text}\n {a.changeType\n ? ` (${m(CHANGE_TYPE_LABELS[a.changeType]).toLocaleLowerCase()})`\n : ''}\n {a.verificationStatus === 'refuted'\n ? ` — ${m('Refuted').toLocaleLowerCase()}`\n : ''}\n </span>\n ))}\n {concern.observations && concern.observations.length > 0 && (\n <>\n <span className=\"mt-1 font-semibold\">{m('Observations')}</span>\n {[...concern.observations]\n .reverse()\n .slice(0, 3)\n .map((o) => (\n <span key={o.id}>\n {o.date} — {o.text}\n </span>\n ))}\n </>\n )}\n {(currentAssertion(concern)?.coding?.length ?? 0) > 0 && (\n <>\n <span className=\"mt-1 font-semibold\">{m('Coding')}</span>\n {currentAssertion(concern)!.coding!.map((c) => (\n <span key={`${c.system}:${c.code}`}>\n {c.system} {c.code}\n {c.display ? ` — ${c.display}` : ''}\n </span>\n ))}\n </>\n )}\n </span>\n );\n}\n\n/** Badge summarizing an assertion's uncertainty block (§4 of the design doc). */\nexport function UncertaintyBadge({\n uncertainty,\n}: {\n uncertainty?: Uncertainty;\n}) {\n const m = useMessages();\n if (!uncertainty) return null;\n const fieldEntries = Object.entries(uncertainty.fields ?? {}) as Array<\n [UncertainConditionField, FieldUncertainty]\n >;\n const overall =\n uncertainty.overall && uncertainty.overall !== 'confirmed'\n ? uncertainty.overall\n : null;\n if (!overall && fieldEntries.length === 0) return null;\n const lines = [\n ...(overall\n ? [m('Overall certainty: {certainty}', { certainty: m(overall) })]\n : []),\n ...fieldEntries.map(([field, f]) => describeFieldUncertainty(field, f, m)),\n ];\n return (\n <Tooltip content={lines.join(' · ')}>\n <Badge variant=\"warning\" size=\"sm\" className=\"gap-1\">\n <HelpCircleIcon size={10} />\n {overall\n ? m('{certainty} certainty', { certainty: m(overall) })\n : m('{count} uncertain', { count: fieldEntries.length })}\n </Badge>\n </Tooltip>\n );\n}\n\nfunction AssertionTimeline({ concern }: { concern: ConditionConcern }) {\n const m = useMessages();\n const items = [...concern.assertions].reverse(); // newest first\n return (\n <ol\n aria-label={m('Assertion history')}\n className=\"border-border ms-1.5 mt-2 space-y-2 border-s ps-4\"\n >\n {items.map((a) => {\n const refuted =\n a.verificationStatus === 'refuted' ||\n a.verificationStatus === 'entered-in-error';\n const verification = VERIFICATION_BADGE[a.verificationStatus];\n return (\n <li key={a.id} className=\"relative text-sm\">\n <span\n aria-hidden\n className=\"bg-border absolute -start-5 top-1.5 h-2 w-2 rounded-full\"\n />\n <span className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span className=\"text-muted-foreground text-xs tabular-nums\">\n {a.date}\n </span>\n <span\n className={cn(\n 'text-foreground font-medium',\n refuted && 'text-muted-foreground line-through'\n )}\n >\n {a.text}\n </span>\n {a.changeType && (\n <Badge variant=\"secondary\" size=\"sm\">\n {m(CHANGE_TYPE_LABELS[a.changeType])}\n </Badge>\n )}\n <Badge variant={verification.variant} size=\"sm\">\n {m(verification.label)}\n </Badge>\n <UncertaintyBadge uncertainty={a.uncertainty} />\n <CodingChips coding={a.coding} />\n </span>\n {a.note && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{a.note}</p>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction ConcernRow({\n concern,\n actions,\n inlineActions,\n readOnly,\n canReorder,\n drag,\n onAction,\n}: {\n concern: ConditionConcern;\n actions: ProblemListAction[];\n inlineActions: boolean;\n readOnly: boolean;\n canReorder: boolean;\n drag: UseDragReorderReturn;\n onAction?: (concern: ConditionConcern, action: ProblemListAction) => void;\n}) {\n const m = useMessages();\n const [expanded, setExpanded] = React.useState(false);\n const current = currentAssertion(concern);\n const hasHistory = concern.assertions.length > 1;\n\n const visibleActions = actions.filter(\n (a) => canReorder || (a !== 'move-up' && a !== 'move-down')\n );\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 if (!canReorder) return;\n e.preventDefault();\n onAction?.(concern, e.key === 'ArrowUp' ? 'move-up' : 'move-down');\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n // Roving focus between rows\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-concern-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 } else if ((e.key === 'Enter' || e.key === ' ') && hasHistory) {\n e.preventDefault();\n setExpanded((v) => !v);\n }\n };\n\n if (!current) return null;\n\n return (\n // Roving-focus row (WAI-ARIA listbox-like keyboard pattern): the row is a\n // legitimate focus stop so ↑/↓ navigate rows, Enter toggles history, and\n // Alt+↑/↓ reorders — required for 508 keyboard operability.\n /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */\n <li\n data-slot=\"clinical-list-row\"\n data-concern-id={concern.concernId}\n tabIndex={0}\n onKeyDown={handleRowKeyDown}\n {...drag.rowProps(concern.concernId)}\n aria-label={[\n `${current.text}.`,\n hasHistory ? m('Press Enter to toggle history.') : '',\n canReorder ? m('Alt plus arrow keys to reorder.') : '',\n ]\n .filter(Boolean)\n .join(' ')}\n className={cn(\n 'group border-border/60 relative 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, concern.concernId)\n )}\n >\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div className=\"flex min-h-9 flex-wrap items-center gap-x-2 gap-y-1\">\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 {/* Hover (or long-press on touch) the name for the complete background:\n assertion history, observations, and coding provenance. */}\n <Tooltip content={concernHistoryContent(concern, m)}>\n <span className=\"text-foreground font-medium\">{current.text}</span>\n </Tooltip>\n <CodingChips coding={current.coding} />\n {/* 'unconfirmed' is conveyed by the Unconfirmed group header */}\n {current.verificationStatus !== 'confirmed' &&\n current.verificationStatus !== 'unconfirmed' && (\n <Badge\n variant={VERIFICATION_BADGE[current.verificationStatus].variant}\n size=\"sm\"\n >\n {m(VERIFICATION_BADGE[current.verificationStatus].label)}\n </Badge>\n )}\n <UncertaintyBadge uncertainty={current.uncertainty} />\n {concern.relationships?.map((r) => (\n <Badge key={`${r.type}:${r.concernId}`} variant=\"outline\" size=\"sm\">\n <LinkIcon size={10} className=\"me-1\" />\n {m(r.type.replace(/-/g, ' '))}\n {r.display ? `: ${r.display}` : ''}\n </Badge>\n ))}\n {hasHistory && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n leftIcon={<HistoryIcon size={12} />}\n rightIcon={\n expanded ? (\n <ChevronUpIcon size={12} />\n ) : (\n <ChevronDownIcon size={12} />\n )\n }\n className=\"text-muted-foreground h-auto px-1.5 py-0.5 text-xs\"\n >\n {m('{count} assertions', { count: concern.assertions.length })}\n </Button>\n )}\n\n {!readOnly && (\n <RowActionToolbar\n label={m('Actions for {name}', { name: current.text })}\n align=\"top\"\n reveal={inlineActions ? 'always' : 'hover'}\n >\n {visibleActions.map((action) => (\n <RowIconButton\n key={action}\n label={m(ACTION_META[action].label)}\n icon={ACTION_META[action].icon}\n onClick={() => onAction?.(concern, action)}\n />\n ))}\n </RowActionToolbar>\n )}\n </div>\n\n {expanded && (\n <>\n <AssertionTimeline concern={concern} />\n {concern.observations && concern.observations.length > 0 && (\n <div className=\"ms-1.5 mt-2 ps-4\">\n <h5 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n {m('Observations')}\n </h5>\n <ol aria-label={m('Observations')} className=\"mt-1 space-y-1\">\n {[...concern.observations].reverse().map((o) => (\n <li key={o.id} className=\"flex flex-wrap gap-x-2 text-sm\">\n <span className=\"text-muted-foreground text-xs tabular-nums\">\n {o.date}\n </span>\n <span className=\"text-foreground\">{o.text}</span>\n {o.author && (\n <span className=\"text-muted-foreground text-xs\">\n — {o.author}\n </span>\n )}\n </li>\n ))}\n </ol>\n </div>\n )}\n </>\n )}\n </li>\n );\n}\n\n// =============================================================================\n// ProblemList\n// =============================================================================\n\n/**\n * Patient-level problem list built on the concern/assertion model: each row is\n * a stable ConditionConcern whose coded characterization evolves through an\n * assertion history (refinement / revision / progression). Rows expand to show\n * the assertion timeline; refuted assertions render struck-through.\n *\n * Controlled component: concerns come in via props; every user interaction is\n * reported through callbacks.\n *\n * @example\n * ```tsx\n * <ProblemList\n * concerns={concerns}\n * onAction={(concern, action) => handleAction(concern, action)}\n * onAddProblem={(text) => addConcern(text)}\n * />\n * ```\n */\nexport const ProblemList = React.forwardRef<HTMLDivElement, ProblemListProps>(\n (\n {\n concerns,\n title = 'Problem list',\n onAction,\n onAddProblem,\n onReorder,\n actions = DEFAULT_ACTIONS,\n inlineActions = false,\n readOnly = false,\n emptyMessage = 'No problems recorded.',\n className,\n 'data-testid': dataTestId,\n ...props\n },\n ref\n ) => {\n const m = useMessages();\n const [draft, setDraft] = React.useState('');\n // clears-then-sets so repeated identical messages re-announce\n const [announcement, setAnnouncement] = useLiveAnnouncement();\n\n const submitDraft = () => {\n const text = draft.trim();\n if (!text) return;\n onAddProblem?.(text);\n setDraft('');\n };\n\n /** Swap with the adjacent concern in the same group, then report the full order. */\n const moveConcern = React.useCallback(\n (concern: ConditionConcern, dir: -1 | 1) => {\n if (!onReorder || readOnly) return;\n const groupKey = concernGroupKey(concern);\n const ids = concerns.map((c) => c.concernId);\n const from = ids.indexOf(concern.concernId);\n // nearest neighbor in the same group\n let to = from + dir;\n while (\n to >= 0 &&\n to < concerns.length &&\n concernGroupKey(concerns[to]) !== groupKey\n ) {\n to += dir;\n }\n if (to < 0 || to >= concerns.length) return;\n [ids[from], ids[to]] = [ids[to], ids[from]];\n const current = currentAssertion(concern);\n setAnnouncement(\n m(dir === -1 ? '{name} moved up' : '{name} moved down', {\n name: current?.text ?? concern.concernId,\n })\n );\n onReorder(ids);\n },\n [concerns, onReorder, readOnly, setAnnouncement, m]\n );\n\n const handleAction = React.useCallback(\n (concern: ConditionConcern, action: ProblemListAction) => {\n if (action === 'move-up') moveConcern(concern, -1);\n else if (action === 'move-down') moveConcern(concern, 1);\n else onAction?.(concern, action);\n },\n [moveConcern, onAction]\n );\n\n // Drag & drop reordering, restricted to the same group (a cross-group\n // drop would silently imply a status change). Precomputed map — dragover\n // fires too frequently for a linear concern scan per event.\n const groupById = React.useMemo(\n () =>\n new Map(\n concerns.map((c) => [c.concernId, concernGroupKey(c)] as const)\n ),\n [concerns]\n );\n const groupOf = React.useCallback(\n (id: string) => groupById.get(id),\n [groupById]\n );\n const drag = useDragReorder({\n ids: concerns.map((c) => c.concernId),\n onReorder:\n readOnly || !onReorder\n ? undefined\n : (newIds) => {\n // announce pointer drops too, not just keyboard moves\n setAnnouncement(m('Problem list reordered'));\n onReorder(newIds);\n },\n canDropOn: (dragged, target) => groupOf(dragged) === groupOf(target),\n });\n\n // Unconfirmed concerns get their own list, ahead of Active / Resolved.\n const groups = [\n {\n key: 'unconfirmed',\n label: 'Unconfirmed',\n items: concerns.filter((c) => concernGroupKey(c) === 'unconfirmed'),\n },\n ...GROUP_ORDER.map(({ key, label }) => ({\n key,\n label,\n items: concerns.filter((c) => concernGroupKey(c) === key),\n })),\n // Active stays visible as the empty state only when nothing is recorded\n // at all — an empty Active section next to populated groups would\n // misleadingly read \"No problems recorded\".\n ].filter(\n (g) => g.items.length > 0 || (g.key === 'active' && concerns.length === 0)\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 {m(title)}\n </h3>\n </CardHeader>\n )}\n\n <CardContent className=\"space-y-6 px-4 py-4\">\n {groups.map(({ key, label, items }) => (\n <section key={key} aria-label={m(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 {m(label)}\n </h4>\n {items.length > 0 ? (\n <ul className=\"mt-1\">\n {items.map((concern) => (\n <ConcernRow\n key={concern.concernId}\n concern={concern}\n actions={actions}\n inlineActions={inlineActions}\n readOnly={readOnly}\n canReorder={drag.enabled}\n drag={drag}\n onAction={handleAction}\n />\n ))}\n </ul>\n ) : (\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {m(emptyMessage)}\n </p>\n )}\n </section>\n ))}\n\n {!readOnly && onAddProblem && (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n data-slot=\"input\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') submitDraft();\n }}\n placeholder={m('Add problem (name is enough)…')}\n aria-label={m('Add problem')}\n className={cn(\n 'border-border bg-background text-foreground placeholder:text-muted-foreground',\n 'h-8 flex-1 rounded-md border px-2.5 text-sm',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={submitDraft}\n disabled={!draft.trim()}\n leftIcon={<PlusIcon size={12} />}\n className=\"h-8\"\n >\n {m('Add')}\n </Button>\n </div>\n )}\n </CardContent>\n\n {/* Reorder announcements for screen readers */}\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n </Card>\n );\n }\n);\n\nProblemList.displayName = 'ProblemList';\n\nexport default ProblemList;\n"]}
1
+ {"version":3,"sources":["../src/components/RowActionToolbar/RowActionToolbar.tsx","../src/components/ProblemList/ProblemList.tsx"],"names":["isRtl","cn","jsx","Tooltip","Button","ExternalLink","StickyNote","Pencil","RefreshCw","CheckCircle","Link","Trash2","ChevronUp","ChevronDown","useMessages","jsxs","Fragment","Badge","HelpCircle","React","dragIndicatorClasses","GripVertical","History","useLiveAnnouncement","useDragReorder","Card","CardHeader","CardContent","Plus"],"mappings":"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","file":"chunk-JCO62XMU.cjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { isRtl } from '../../hooks/useDirection';\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. Horizontal arrows follow the\n * visual direction, so they invert under RTL.\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 let key = e.key;\n if (isRtl(e.currentTarget)) {\n if (key === 'ArrowRight') key = 'ArrowLeft';\n else if (key === 'ArrowLeft') key = 'ArrowRight';\n }\n const next =\n key === 'ArrowLeft'\n ? (i - 1 + buttons.length) % buttons.length\n : key === 'ArrowRight'\n ? (i + 1) % buttons.length\n : 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 /**\n * `'hover'` floats the toolbar over the row on fine-pointer devices and\n * reveals it on hover/focus; `'always'` keeps it in flow at the end of the\n * row and always visible on every pointer type.\n * @default 'hover'\n */\n reveal?: 'hover' | 'always';\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 reveal = 'hover',\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',\n reveal === 'hover' && [\n '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 ],\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 { useMessages, type MessageTranslator } from '../../utils/messages';\n\nimport * as React from 'react';\nimport { cn } from '../../utils/cn';\nimport { Badge } from '../Badge/Badge';\nimport { Button } from '../Button';\nimport { Tooltip } from '../Tooltip';\nimport { Card, CardHeader, CardContent } from '../Card/Card';\nimport {\n PencilIcon,\n RefreshIcon,\n CheckCircleIcon,\n LinkIcon,\n ExternalLinkIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n PlusIcon,\n HistoryIcon,\n HelpCircleIcon,\n GripVerticalIcon,\n StickyNoteIcon,\n TrashIcon,\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 — shared condition (concern/assertion) model\n// =============================================================================\n\n/** A single coding on a condition assertion (ICD-10 / ICD-11 / SNOMED). */\nexport interface ConditionCoding {\n /** Coding system, e.g. 'ICD-10-CM', 'ICD-11', 'SNOMED' */\n system: 'ICD-10-CM' | 'ICD-11' | 'SNOMED' | string;\n code: string;\n display?: string;\n /** Which coding is authoritative for this assertion */\n primary?: boolean;\n /** Provenance when derived via a crosswalk (e.g. SNOMED→ICD-10 map) */\n mappedFrom?: string;\n}\n\n/** Longitudinal status of the concern (the stable problem thread). */\nexport type ConcernStatus =\n | 'active'\n | 'recurrence'\n | 'relapse'\n | 'inactive'\n | 'remission'\n | 'resolved';\n\n/** FHIR-aligned verification status of an assertion. */\nexport type VerificationStatus =\n | 'unconfirmed'\n | 'provisional'\n | 'differential'\n | 'confirmed'\n | 'refuted'\n | 'entered-in-error';\n\n/** Why an assertion superseded its predecessor. */\nexport type AssertionChangeType =\n | 'refinement'\n | 'revision'\n | 'progression'\n | 'reattribution';\n\n// ---- Uncertainty (mirrors §4 of the design doc) ----\n\n/** Three-state flag for an optional field: confident / uncertain / explicitly unknown. */\nexport interface FieldUncertainty {\n /** false = explicitly unknown (\"asked; patient doesn't know\") — distinct from untouched */\n known: boolean;\n /** Why the value is absent (~ FHIR data-absent-reason) */\n reason?: 'asked-unknown' | 'not-asked' | 'masked' | 'unavailable';\n /** Softness of a value that IS present */\n confidence?: 'low' | 'medium' | 'high';\n note?: string;\n}\n\n/** Condition fields that can carry per-field uncertainty. */\nexport type UncertainConditionField =\n | 'coding'\n | 'onset'\n | 'severity'\n | 'laterality'\n | 'bodySite';\n\n/** First-class uncertainty block for a condition assertion. */\nexport interface Uncertainty {\n overall?: 'confirmed' | 'low' | 'medium' | 'high';\n fields?: Partial<Record<UncertainConditionField, FieldUncertainty>>;\n}\n\n/** A time-stamped, coded characterization of a concern. */\nexport interface ConditionAssertion {\n id: string;\n /** Display date the assertion was made, e.g. \"2023-06-14\" */\n date: string;\n /** Free-text condition name — the only hard-required clinical field */\n text: string;\n coding?: ConditionCoding[];\n verificationStatus: VerificationStatus;\n /** How this assertion relates to the one it supersedes */\n changeType?: AssertionChangeType;\n /** Id of the assertion this one supersedes */\n supersedes?: string;\n severity?: 'mild' | 'moderate' | 'severe';\n /** Onset — exact date and/or fuzzy human string (\"since her twenties\") */\n onset?: { date?: string; fuzzy?: string };\n /** First-class uncertainty (§4 of the design doc) */\n uncertainty?: Uncertainty;\n note?: string;\n}\n\n/** Relationship between two concerns. */\nexport interface ConcernRelationship {\n type:\n | 'caused-by'\n | 'evolved-from'\n | 'differential-sibling'\n | 'complication-of';\n /** concernId of the related concern */\n concernId: string;\n /** Display name of the related concern */\n display?: string;\n}\n\n/** A quick, dated progress note about a concern — lighter than an assertion. */\nexport interface ConditionObservation {\n id: string;\n /** Display date, e.g. \"2026-07-03\" */\n date: string;\n text: string;\n author?: string;\n}\n\n/**\n * A stable problem thread. The concernId is the durable identity that orders\n * and encounters reference; assertions carry the evolving codes.\n */\nexport interface ConditionConcern {\n concernId: string;\n clinicalStatus: ConcernStatus;\n /** Ordered oldest → newest; the last non-refuted assertion is current */\n assertions: ConditionAssertion[];\n /** Quick progress notes over time (newest last) */\n observations?: ConditionObservation[];\n relationships?: ConcernRelationship[];\n /** Where the concern came from */\n source?:\n | 'ehrProblemList'\n | 'patientReported'\n | 'manuallyAdded'\n | 'claimsHistory';\n}\n\n/** Row actions on a concern. */\nexport type ProblemListAction =\n | 'open'\n | 'observe'\n | 'refine'\n | 'revise'\n | 'resolve'\n | 'relate'\n | 'remove'\n | 'move-up'\n | 'move-down';\n\nexport interface ProblemListProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'className' | 'title'\n> {\n /** Patient-level concerns (controlled) */\n concerns: ConditionConcern[];\n /** Header title (pass null to hide) */\n title?: string | null;\n /** Called when a row action is clicked */\n onAction?: (concern: ConditionConcern, action: ProblemListAction) => void;\n /** Called when a new problem is added via the capture-first input */\n onAddProblem?: (text: string) => void;\n /**\n * Called with the full ordered list of concernIds after a move — via drag\n * and drop, the move buttons, or Alt+Arrow keys. Enables reordering. The\n * component renders concerns in props order — persist the ids wherever the\n * encounter/patient object lives and feed them back in.\n */\n onReorder?: (concernIds: string[]) => void;\n /** Which row actions to show (default: all except 'remove') */\n actions?: ProblemListAction[];\n /** Show row actions in flow, always visible, instead of the hover-reveal overlay */\n inlineActions?: boolean;\n /** Hide all action buttons (display only) */\n readOnly?: boolean;\n /** Message shown when there are no concerns */\n emptyMessage?: string;\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: { key: string; label: string; statuses: ConcernStatus[] }[] =\n [\n {\n key: 'active',\n label: 'Active',\n statuses: ['active', 'recurrence', 'relapse'],\n },\n { key: 'inactive', label: 'Inactive', statuses: ['inactive', 'remission'] },\n { key: 'resolved', label: 'Resolved', statuses: ['resolved'] },\n ];\n\n/**\n * Grouping key for a concern. Unconfirmed concerns (current assertion not yet\n * verified) live in their own group, separate from Active / Resolved.\n */\nexport function concernGroupKey(concern: ConditionConcern): string {\n if (currentAssertion(concern)?.verificationStatus === 'unconfirmed') {\n return 'unconfirmed';\n }\n return (\n GROUP_ORDER.find((g) => g.statuses.includes(concern.clinicalStatus))?.key ??\n 'active'\n );\n}\n\nexport const CONCERN_STATUS_LABELS: Record<ConcernStatus, string> = {\n active: 'Active',\n recurrence: 'Recurrence',\n relapse: 'Relapse',\n inactive: 'Inactive',\n remission: 'Remission',\n resolved: 'Resolved',\n};\n\nexport const CHANGE_TYPE_LABELS: Record<AssertionChangeType, string> = {\n refinement: 'Refined',\n revision: 'Revised',\n progression: 'Progressed',\n reattribution: 'Re-attributed',\n};\n\nconst DEFAULT_ACTIONS: ProblemListAction[] = [\n 'open',\n 'observe',\n 'refine',\n 'revise',\n 'resolve',\n 'relate',\n 'move-up',\n 'move-down',\n];\n\nconst ACTION_META: Record<\n ProblemListAction,\n { label: string; icon: React.ComponentType<{ size?: number | string }> }\n> = {\n open: { label: 'Open', icon: ExternalLinkIcon },\n observe: { label: 'Add observation (progress note)', icon: StickyNoteIcon },\n refine: { label: 'Refine (more specific)', icon: PencilIcon },\n revise: { label: 'Revise (prior was wrong)', icon: RefreshIcon },\n resolve: { label: 'Resolve', icon: CheckCircleIcon },\n relate: { label: 'Relate to another problem', icon: LinkIcon },\n remove: { label: 'Delete', icon: TrashIcon },\n 'move-up': { label: 'Move up (Alt+↑)', icon: ChevronUpIcon },\n 'move-down': { label: 'Move down (Alt+↓)', icon: ChevronDownIcon },\n};\n\nconst VERIFICATION_BADGE: Record<\n VerificationStatus,\n {\n label: string;\n variant: 'default' | 'secondary' | 'success' | 'warning' | 'outline';\n }\n> = {\n unconfirmed: { label: 'Unconfirmed', variant: 'outline' },\n provisional: { label: 'Provisional', variant: 'warning' },\n differential: { label: 'Differential', variant: 'warning' },\n confirmed: { label: 'Confirmed', variant: 'success' },\n refuted: { label: 'Refuted', variant: 'secondary' },\n 'entered-in-error': { label: 'Entered in error', variant: 'secondary' },\n};\n\n// =============================================================================\n// Helpers\n// =============================================================================\n\n/** The current (last non-refuted, non-error) assertion of a concern. */\nexport function currentAssertion(\n concern: ConditionConcern\n): ConditionAssertion | undefined {\n for (let i = concern.assertions.length - 1; i >= 0; i--) {\n const a = concern.assertions[i];\n if (\n a.verificationStatus !== 'refuted' &&\n a.verificationStatus !== 'entered-in-error'\n ) {\n return a;\n }\n }\n return concern.assertions[concern.assertions.length - 1];\n}\n\nconst UNCERTAIN_FIELD_LABELS: Record<UncertainConditionField, string> = {\n coding: 'Coding',\n onset: 'Onset',\n severity: 'Severity',\n laterality: 'Laterality',\n bodySite: 'Body site',\n};\n\nfunction describeFieldUncertainty(\n field: UncertainConditionField,\n f: FieldUncertainty,\n m: MessageTranslator\n): string {\n const label = UNCERTAIN_FIELD_LABELS[field];\n if (!f.known) {\n const reason =\n f.reason === 'asked-unknown'\n ? 'asked — unknown'\n : (f.reason ?? 'unknown').replace(/-/g, ' ');\n return `${m(label)}: ${m(reason)}${f.note ? ` (${f.note})` : ''}`;\n }\n return `${m(label)}: ${m('{confidence} confidence', {\n confidence: m(f.confidence ?? 'uncertain'),\n })}${f.note ? ` (${f.note})` : ''}`;\n}\n\n// =============================================================================\n// Sub-components\n// =============================================================================\n\n/**\n * Parenthetical coding display. Clinicians don't need chip noise: inline we\n * show only ICD-10/ICD-11 codes, unlabeled (the code format is obvious), and\n * SNOMED stays out of the way. The full coding background — every system,\n * display name, and crosswalk provenance — lives in the tooltip.\n */\nexport function CodingChips({ coding }: { coding?: ConditionCoding[] }) {\n const m = useMessages();\n if (!coding?.length) return null;\n const icd = coding.filter((c) => c.system.startsWith('ICD'));\n const inline = icd.length > 0 ? icd : coding.filter((c) => c.primary);\n const label = inline.map((c) => c.code).join(', ');\n return (\n <Tooltip\n content={\n <span className=\"flex flex-col gap-0.5\">\n {coding.map((c) => (\n <span key={`${c.system}:${c.code}`}>\n {c.system} {c.code}\n {c.display ? ` — ${c.display}` : ''}\n {c.primary ? m(' · primary') : ''}\n {c.mappedFrom\n ? m(' · mapped from {source}', { source: c.mappedFrom })\n : ''}\n </span>\n ))}\n </span>\n }\n >\n {/* focusable so the coding provenance is reachable by keyboard */}\n <span\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n className=\"text-muted-foreground focus-visible:ring-ring rounded text-xs whitespace-nowrap focus-visible:ring-2 focus-visible:outline-none\"\n >\n ({label || m('coded')})\n </span>\n </Tooltip>\n );\n}\n\n/**\n * Full concern background for a hover/long-press tooltip: assertion history,\n * coding background, and recent observations.\n */\nexport function concernHistoryContent(\n concern: ConditionConcern,\n m: MessageTranslator = (message) => message\n): React.ReactNode {\n return (\n <span className=\"flex max-w-xs flex-col gap-1\">\n <span className=\"font-semibold\">{m('History')}</span>\n {[...concern.assertions].reverse().map((a) => (\n <span key={a.id}>\n {a.date} — {a.text}\n {a.changeType\n ? ` (${m(CHANGE_TYPE_LABELS[a.changeType]).toLocaleLowerCase()})`\n : ''}\n {a.verificationStatus === 'refuted'\n ? ` — ${m('Refuted').toLocaleLowerCase()}`\n : ''}\n </span>\n ))}\n {concern.observations && concern.observations.length > 0 && (\n <>\n <span className=\"mt-1 font-semibold\">{m('Observations')}</span>\n {[...concern.observations]\n .reverse()\n .slice(0, 3)\n .map((o) => (\n <span key={o.id}>\n {o.date} — {o.text}\n </span>\n ))}\n </>\n )}\n {(currentAssertion(concern)?.coding?.length ?? 0) > 0 && (\n <>\n <span className=\"mt-1 font-semibold\">{m('Coding')}</span>\n {currentAssertion(concern)!.coding!.map((c) => (\n <span key={`${c.system}:${c.code}`}>\n {c.system} {c.code}\n {c.display ? ` — ${c.display}` : ''}\n </span>\n ))}\n </>\n )}\n </span>\n );\n}\n\n/** Badge summarizing an assertion's uncertainty block (§4 of the design doc). */\nexport function UncertaintyBadge({\n uncertainty,\n}: {\n uncertainty?: Uncertainty;\n}) {\n const m = useMessages();\n if (!uncertainty) return null;\n const fieldEntries = Object.entries(uncertainty.fields ?? {}) as Array<\n [UncertainConditionField, FieldUncertainty]\n >;\n const overall =\n uncertainty.overall && uncertainty.overall !== 'confirmed'\n ? uncertainty.overall\n : null;\n if (!overall && fieldEntries.length === 0) return null;\n const lines = [\n ...(overall\n ? [m('Overall certainty: {certainty}', { certainty: m(overall) })]\n : []),\n ...fieldEntries.map(([field, f]) => describeFieldUncertainty(field, f, m)),\n ];\n return (\n <Tooltip content={lines.join(' · ')}>\n <Badge variant=\"warning\" size=\"sm\" className=\"gap-1\">\n <HelpCircleIcon size={10} />\n {overall\n ? m('{certainty} certainty', { certainty: m(overall) })\n : m('{count} uncertain', { count: fieldEntries.length })}\n </Badge>\n </Tooltip>\n );\n}\n\nfunction AssertionTimeline({ concern }: { concern: ConditionConcern }) {\n const m = useMessages();\n const items = [...concern.assertions].reverse(); // newest first\n return (\n <ol\n aria-label={m('Assertion history')}\n className=\"border-border ms-1.5 mt-2 space-y-2 border-s ps-4\"\n >\n {items.map((a) => {\n const refuted =\n a.verificationStatus === 'refuted' ||\n a.verificationStatus === 'entered-in-error';\n const verification = VERIFICATION_BADGE[a.verificationStatus];\n return (\n <li key={a.id} className=\"relative text-sm\">\n <span\n aria-hidden\n className=\"bg-border absolute -start-5 top-1.5 h-2 w-2 rounded-full\"\n />\n <span className=\"flex flex-wrap items-center gap-x-2 gap-y-1\">\n <span className=\"text-muted-foreground text-xs tabular-nums\">\n {a.date}\n </span>\n <span\n className={cn(\n 'text-foreground font-medium',\n refuted && 'text-muted-foreground line-through'\n )}\n >\n {a.text}\n </span>\n {a.changeType && (\n <Badge variant=\"secondary\" size=\"sm\">\n {m(CHANGE_TYPE_LABELS[a.changeType])}\n </Badge>\n )}\n <Badge variant={verification.variant} size=\"sm\">\n {m(verification.label)}\n </Badge>\n <UncertaintyBadge uncertainty={a.uncertainty} />\n <CodingChips coding={a.coding} />\n </span>\n {a.note && (\n <p className=\"text-muted-foreground mt-0.5 text-xs\">{a.note}</p>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n\nfunction ConcernRow({\n concern,\n actions,\n inlineActions,\n readOnly,\n canReorder,\n drag,\n onAction,\n}: {\n concern: ConditionConcern;\n actions: ProblemListAction[];\n inlineActions: boolean;\n readOnly: boolean;\n canReorder: boolean;\n drag: UseDragReorderReturn;\n onAction?: (concern: ConditionConcern, action: ProblemListAction) => void;\n}) {\n const m = useMessages();\n const [expanded, setExpanded] = React.useState(false);\n const current = currentAssertion(concern);\n const hasHistory = concern.assertions.length > 1;\n\n const visibleActions = actions.filter(\n (a) => canReorder || (a !== 'move-up' && a !== 'move-down')\n );\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 if (!canReorder) return;\n e.preventDefault();\n onAction?.(concern, e.key === 'ArrowUp' ? 'move-up' : 'move-down');\n } else if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n // Roving focus between rows\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-concern-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 } else if ((e.key === 'Enter' || e.key === ' ') && hasHistory) {\n e.preventDefault();\n setExpanded((v) => !v);\n }\n };\n\n if (!current) return null;\n\n return (\n // Roving-focus row (WAI-ARIA listbox-like keyboard pattern): the row is a\n // legitimate focus stop so ↑/↓ navigate rows, Enter toggles history, and\n // Alt+↑/↓ reorders — required for 508 keyboard operability.\n /* eslint-disable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */\n <li\n data-slot=\"clinical-list-row\"\n data-concern-id={concern.concernId}\n tabIndex={0}\n onKeyDown={handleRowKeyDown}\n {...drag.rowProps(concern.concernId)}\n aria-label={[\n `${current.text}.`,\n hasHistory ? m('Press Enter to toggle history.') : '',\n canReorder ? m('Alt plus arrow keys to reorder.') : '',\n ]\n .filter(Boolean)\n .join(' ')}\n className={cn(\n 'group border-border/60 relative 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, concern.concernId)\n )}\n >\n {/* eslint-enable jsx-a11y/no-noninteractive-element-interactions, jsx-a11y/no-noninteractive-tabindex */}\n <div className=\"flex min-h-9 flex-wrap items-center gap-x-2 gap-y-1\">\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 {/* Hover (or long-press on touch) the name for the complete background:\n assertion history, observations, and coding provenance. */}\n <Tooltip content={concernHistoryContent(concern, m)}>\n <span className=\"text-foreground font-medium\">{current.text}</span>\n </Tooltip>\n <CodingChips coding={current.coding} />\n {/* 'unconfirmed' is conveyed by the Unconfirmed group header */}\n {current.verificationStatus !== 'confirmed' &&\n current.verificationStatus !== 'unconfirmed' && (\n <Badge\n variant={VERIFICATION_BADGE[current.verificationStatus].variant}\n size=\"sm\"\n >\n {m(VERIFICATION_BADGE[current.verificationStatus].label)}\n </Badge>\n )}\n <UncertaintyBadge uncertainty={current.uncertainty} />\n {concern.relationships?.map((r) => (\n <Badge key={`${r.type}:${r.concernId}`} variant=\"outline\" size=\"sm\">\n <LinkIcon size={10} className=\"me-1\" />\n {m(r.type.replace(/-/g, ' '))}\n {r.display ? `: ${r.display}` : ''}\n </Badge>\n ))}\n {hasHistory && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded((v) => !v)}\n aria-expanded={expanded}\n leftIcon={<HistoryIcon size={12} />}\n rightIcon={\n expanded ? (\n <ChevronUpIcon size={12} />\n ) : (\n <ChevronDownIcon size={12} />\n )\n }\n className=\"text-muted-foreground h-auto px-1.5 py-0.5 text-xs\"\n >\n {m('{count} assertions', { count: concern.assertions.length })}\n </Button>\n )}\n\n {!readOnly && (\n <RowActionToolbar\n label={m('Actions for {name}', { name: current.text })}\n align=\"top\"\n reveal={inlineActions ? 'always' : 'hover'}\n >\n {visibleActions.map((action) => (\n <RowIconButton\n key={action}\n label={m(ACTION_META[action].label)}\n icon={ACTION_META[action].icon}\n onClick={() => onAction?.(concern, action)}\n />\n ))}\n </RowActionToolbar>\n )}\n </div>\n\n {expanded && (\n <>\n <AssertionTimeline concern={concern} />\n {concern.observations && concern.observations.length > 0 && (\n <div className=\"ms-1.5 mt-2 ps-4\">\n <h5 className=\"text-muted-foreground text-xs font-semibold tracking-wide uppercase\">\n {m('Observations')}\n </h5>\n <ol aria-label={m('Observations')} className=\"mt-1 space-y-1\">\n {[...concern.observations].reverse().map((o) => (\n <li key={o.id} className=\"flex flex-wrap gap-x-2 text-sm\">\n <span className=\"text-muted-foreground text-xs tabular-nums\">\n {o.date}\n </span>\n <span className=\"text-foreground\">{o.text}</span>\n {o.author && (\n <span className=\"text-muted-foreground text-xs\">\n — {o.author}\n </span>\n )}\n </li>\n ))}\n </ol>\n </div>\n )}\n </>\n )}\n </li>\n );\n}\n\n// =============================================================================\n// ProblemList\n// =============================================================================\n\n/**\n * Patient-level problem list built on the concern/assertion model: each row is\n * a stable ConditionConcern whose coded characterization evolves through an\n * assertion history (refinement / revision / progression). Rows expand to show\n * the assertion timeline; refuted assertions render struck-through.\n *\n * Controlled component: concerns come in via props; every user interaction is\n * reported through callbacks.\n *\n * @example\n * ```tsx\n * <ProblemList\n * concerns={concerns}\n * onAction={(concern, action) => handleAction(concern, action)}\n * onAddProblem={(text) => addConcern(text)}\n * />\n * ```\n */\nexport const ProblemList = React.forwardRef<HTMLDivElement, ProblemListProps>(\n (\n {\n concerns,\n title = 'Problem list',\n onAction,\n onAddProblem,\n onReorder,\n actions = DEFAULT_ACTIONS,\n inlineActions = false,\n readOnly = false,\n emptyMessage = 'No problems recorded.',\n className,\n 'data-testid': dataTestId,\n ...props\n },\n ref\n ) => {\n const m = useMessages();\n const [draft, setDraft] = React.useState('');\n // clears-then-sets so repeated identical messages re-announce\n const [announcement, setAnnouncement] = useLiveAnnouncement();\n\n const submitDraft = () => {\n const text = draft.trim();\n if (!text) return;\n onAddProblem?.(text);\n setDraft('');\n };\n\n /** Swap with the adjacent concern in the same group, then report the full order. */\n const moveConcern = React.useCallback(\n (concern: ConditionConcern, dir: -1 | 1) => {\n if (!onReorder || readOnly) return;\n const groupKey = concernGroupKey(concern);\n const ids = concerns.map((c) => c.concernId);\n const from = ids.indexOf(concern.concernId);\n // nearest neighbor in the same group\n let to = from + dir;\n while (\n to >= 0 &&\n to < concerns.length &&\n concernGroupKey(concerns[to]) !== groupKey\n ) {\n to += dir;\n }\n if (to < 0 || to >= concerns.length) return;\n [ids[from], ids[to]] = [ids[to], ids[from]];\n const current = currentAssertion(concern);\n setAnnouncement(\n m(dir === -1 ? '{name} moved up' : '{name} moved down', {\n name: current?.text ?? concern.concernId,\n })\n );\n onReorder(ids);\n },\n [concerns, onReorder, readOnly, setAnnouncement, m]\n );\n\n const handleAction = React.useCallback(\n (concern: ConditionConcern, action: ProblemListAction) => {\n if (action === 'move-up') moveConcern(concern, -1);\n else if (action === 'move-down') moveConcern(concern, 1);\n else onAction?.(concern, action);\n },\n [moveConcern, onAction]\n );\n\n // Drag & drop reordering, restricted to the same group (a cross-group\n // drop would silently imply a status change). Precomputed map — dragover\n // fires too frequently for a linear concern scan per event.\n const groupById = React.useMemo(\n () =>\n new Map(\n concerns.map((c) => [c.concernId, concernGroupKey(c)] as const)\n ),\n [concerns]\n );\n const groupOf = React.useCallback(\n (id: string) => groupById.get(id),\n [groupById]\n );\n const drag = useDragReorder({\n ids: concerns.map((c) => c.concernId),\n onReorder:\n readOnly || !onReorder\n ? undefined\n : (newIds) => {\n // announce pointer drops too, not just keyboard moves\n setAnnouncement(m('Problem list reordered'));\n onReorder(newIds);\n },\n canDropOn: (dragged, target) => groupOf(dragged) === groupOf(target),\n });\n\n // Unconfirmed concerns get their own list, ahead of Active / Resolved.\n const groups = [\n {\n key: 'unconfirmed',\n label: 'Unconfirmed',\n items: concerns.filter((c) => concernGroupKey(c) === 'unconfirmed'),\n },\n ...GROUP_ORDER.map(({ key, label }) => ({\n key,\n label,\n items: concerns.filter((c) => concernGroupKey(c) === key),\n })),\n // Active stays visible as the empty state only when nothing is recorded\n // at all — an empty Active section next to populated groups would\n // misleadingly read \"No problems recorded\".\n ].filter(\n (g) => g.items.length > 0 || (g.key === 'active' && concerns.length === 0)\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 {m(title)}\n </h3>\n </CardHeader>\n )}\n\n <CardContent className=\"space-y-6 px-4 py-4\">\n {groups.map(({ key, label, items }) => (\n <section key={key} aria-label={m(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 {m(label)}\n </h4>\n {items.length > 0 ? (\n <ul className=\"mt-1\">\n {items.map((concern) => (\n <ConcernRow\n key={concern.concernId}\n concern={concern}\n actions={actions}\n inlineActions={inlineActions}\n readOnly={readOnly}\n canReorder={drag.enabled}\n drag={drag}\n onAction={handleAction}\n />\n ))}\n </ul>\n ) : (\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {m(emptyMessage)}\n </p>\n )}\n </section>\n ))}\n\n {!readOnly && onAddProblem && (\n <div className=\"flex items-center gap-1.5\">\n <input\n type=\"text\"\n data-slot=\"input\"\n value={draft}\n onChange={(e) => setDraft(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') submitDraft();\n }}\n placeholder={m('Add problem (name is enough)…')}\n aria-label={m('Add problem')}\n className={cn(\n 'border-border bg-background text-foreground placeholder:text-muted-foreground',\n 'h-8 flex-1 rounded-md border px-2.5 text-sm',\n 'focus:ring-ring focus:ring-2 focus:outline-none'\n )}\n />\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={submitDraft}\n disabled={!draft.trim()}\n leftIcon={<PlusIcon size={12} />}\n className=\"h-8\"\n >\n {m('Add')}\n </Button>\n </div>\n )}\n </CardContent>\n\n {/* Reorder announcements for screen readers */}\n <div aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </div>\n </Card>\n );\n }\n);\n\nProblemList.displayName = 'ProblemList';\n\nexport default ProblemList;\n"]}
@@ -4,7 +4,7 @@ import { Dropdown, DropdownSeparator, DropdownLabel, DropdownItem, DropdownSubme
4
4
  import { Input } from './chunk-3IMM2PM4.js';
5
5
  import { isHtmlEmpty } from './chunk-ERLPVXOV.js';
6
6
  import { X, Search, History, BookOpen, ChevronRight, ChevronDown, Plus } from './chunk-BKSPDTX4.js';
7
- import { Button } from './chunk-WFBUBT54.js';
7
+ import { Button } from './chunk-WX2XB6FP.js';
8
8
  import { AnimatedPresence, Animated } from './chunk-F4N67NAF.js';
9
9
  import { cn } from './chunk-TQONQSJO.js';
10
10
  import * as React2 from 'react';
@@ -1600,5 +1600,5 @@ var RichTextEditor = React2.forwardRef(
1600
1600
  RichTextEditor.displayName = "RichTextEditor";
1601
1601
 
1602
1602
  export { MacroLibrary, RichTextEditor, convertAngleBracketsToMustache, processDictation };
1603
- //# sourceMappingURL=chunk-QR7B6UPR.js.map
1604
- //# sourceMappingURL=chunk-QR7B6UPR.js.map
1603
+ //# sourceMappingURL=chunk-JN2CL7MK.js.map
1604
+ //# sourceMappingURL=chunk-JN2CL7MK.js.map