@mieweb/ui 0.6.1 → 0.7.0-dev.178

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 (450) hide show
  1. package/README.md +90 -53
  2. package/dist/CsvBlock-2A5VEDD3.cjs +15 -0
  3. package/dist/CsvBlock-2A5VEDD3.cjs.map +1 -0
  4. package/dist/CsvBlock-D6PWAJ5X.js +6 -0
  5. package/dist/CsvBlock-D6PWAJ5X.js.map +1 -0
  6. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +6 -0
  7. package/dist/HtmlPreviewBlock-PEHTJ6C3.js.map +1 -0
  8. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +15 -0
  9. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs.map +1 -0
  10. package/dist/MedicationEditor-Bp4NLy7y.d.cts +352 -0
  11. package/dist/MedicationEditor-Bp4NLy7y.d.ts +352 -0
  12. package/dist/MermaidBlock-7NK3AVK2.js +6 -0
  13. package/dist/MermaidBlock-7NK3AVK2.js.map +1 -0
  14. package/dist/MermaidBlock-AFXNP5NK.cjs +15 -0
  15. package/dist/MermaidBlock-AFXNP5NK.cjs.map +1 -0
  16. package/dist/SurveyBlock-6KRNKFH5.cjs +15 -0
  17. package/dist/SurveyBlock-6KRNKFH5.cjs.map +1 -0
  18. package/dist/SurveyBlock-NNDGXGG4.js +6 -0
  19. package/dist/SurveyBlock-NNDGXGG4.js.map +1 -0
  20. package/dist/ag-grid.cjs +6 -6
  21. package/dist/ag-grid.cjs.map +1 -1
  22. package/dist/ag-grid.js +2 -2
  23. package/dist/ag-grid.js.map +1 -1
  24. package/dist/brands/index.cjs +17 -17
  25. package/dist/brands/index.js +4 -4
  26. package/dist/chunk-372IIHUA.cjs +2017 -0
  27. package/dist/chunk-372IIHUA.cjs.map +1 -0
  28. package/dist/{chunk-2DS3RJ2D.js → chunk-3TERETXH.js} +112 -3
  29. package/dist/chunk-3TERETXH.js.map +1 -0
  30. package/dist/chunk-44CK4CT2.cjs +336 -0
  31. package/dist/chunk-44CK4CT2.cjs.map +1 -0
  32. package/dist/{chunk-FSBFQBNE.cjs → chunk-4GXECTPS.cjs} +2 -2
  33. package/dist/{chunk-FSBFQBNE.cjs.map → chunk-4GXECTPS.cjs.map} +1 -1
  34. package/dist/chunk-4LVPQ44A.js +228 -0
  35. package/dist/chunk-4LVPQ44A.js.map +1 -0
  36. package/dist/{chunk-6555OYRU.js → chunk-5BQE6BEL.js} +2 -2
  37. package/dist/{chunk-6555OYRU.js.map → chunk-5BQE6BEL.js.map} +1 -1
  38. package/dist/chunk-62ZOA6PX.js +31 -0
  39. package/dist/chunk-62ZOA6PX.js.map +1 -0
  40. package/dist/chunk-63KVQHGQ.cjs +1802 -0
  41. package/dist/chunk-63KVQHGQ.cjs.map +1 -0
  42. package/dist/chunk-6AHYYWVB.js +78 -0
  43. package/dist/chunk-6AHYYWVB.js.map +1 -0
  44. package/dist/chunk-6I7IDZ4A.js +51 -0
  45. package/dist/chunk-6I7IDZ4A.js.map +1 -0
  46. package/dist/chunk-6ZYE6JUK.cjs +80 -0
  47. package/dist/chunk-6ZYE6JUK.cjs.map +1 -0
  48. package/dist/chunk-7QXG5BBB.cjs +164 -0
  49. package/dist/chunk-7QXG5BBB.cjs.map +1 -0
  50. package/dist/chunk-7WMSUXOQ.js +182 -0
  51. package/dist/chunk-7WMSUXOQ.js.map +1 -0
  52. package/dist/chunk-7XUN3OQT.js +3 -0
  53. package/dist/{chunk-V2DF2GUE.js.map → chunk-7XUN3OQT.js.map} +1 -1
  54. package/dist/chunk-7ZVTLTJF.js +109 -0
  55. package/dist/chunk-7ZVTLTJF.js.map +1 -0
  56. package/dist/chunk-AES2BKEW.cjs +229 -0
  57. package/dist/chunk-AES2BKEW.cjs.map +1 -0
  58. package/dist/chunk-AFKKJEV5.cjs +72 -0
  59. package/dist/chunk-AFKKJEV5.cjs.map +1 -0
  60. package/dist/chunk-AT732HC6.cjs +4 -0
  61. package/dist/{chunk-74K3RRU7.cjs.map → chunk-AT732HC6.cjs.map} +1 -1
  62. package/dist/chunk-BB4WQ4LV.cjs +137 -0
  63. package/dist/chunk-BB4WQ4LV.cjs.map +1 -0
  64. package/dist/chunk-BIT27PPD.js +49 -0
  65. package/dist/chunk-BIT27PPD.js.map +1 -0
  66. package/dist/chunk-BLPCYP4D.cjs +537 -0
  67. package/dist/chunk-BLPCYP4D.cjs.map +1 -0
  68. package/dist/chunk-BT3ZQJGT.cjs +130 -0
  69. package/dist/chunk-BT3ZQJGT.cjs.map +1 -0
  70. package/dist/chunk-BX6BTDTR.js +34 -0
  71. package/dist/chunk-BX6BTDTR.js.map +1 -0
  72. package/dist/chunk-C2544GKZ.js +313 -0
  73. package/dist/chunk-C2544GKZ.js.map +1 -0
  74. package/dist/chunk-C7RVKV25.cjs +25 -0
  75. package/dist/chunk-C7RVKV25.cjs.map +1 -0
  76. package/dist/chunk-CKD554XR.cjs +100 -0
  77. package/dist/chunk-CKD554XR.cjs.map +1 -0
  78. package/dist/chunk-CVC4NWFA.cjs +154 -0
  79. package/dist/chunk-CVC4NWFA.cjs.map +1 -0
  80. package/dist/{chunk-K3IVCUPP.js → chunk-CYMZ2QS5.js} +2 -2
  81. package/dist/{chunk-K3IVCUPP.js.map → chunk-CYMZ2QS5.js.map} +1 -1
  82. package/dist/{chunk-FRT6RQND.cjs → chunk-DAPZPT5N.cjs} +92 -56
  83. package/dist/chunk-DAPZPT5N.cjs.map +1 -0
  84. package/dist/chunk-DHKYGVP7.js +3 -0
  85. package/dist/{chunk-LEMY57MI.js.map → chunk-DHKYGVP7.js.map} +1 -1
  86. package/dist/chunk-DLNJLCNO.cjs +101 -0
  87. package/dist/chunk-DLNJLCNO.cjs.map +1 -0
  88. package/dist/chunk-DUPR6FEL.js +43 -0
  89. package/dist/chunk-DUPR6FEL.js.map +1 -0
  90. package/dist/{chunk-4FALCEJI.cjs → chunk-EL2RSQTJ.cjs} +2 -2
  91. package/dist/{chunk-4FALCEJI.cjs.map → chunk-EL2RSQTJ.cjs.map} +1 -1
  92. package/dist/chunk-ERLPVXOV.js +22 -0
  93. package/dist/chunk-ERLPVXOV.js.map +1 -0
  94. package/dist/chunk-FIWKHLWY.js +197 -0
  95. package/dist/chunk-FIWKHLWY.js.map +1 -0
  96. package/dist/chunk-FJH7P5WG.js +513 -0
  97. package/dist/chunk-FJH7P5WG.js.map +1 -0
  98. package/dist/chunk-FSGEDDF2.cjs +33 -0
  99. package/dist/chunk-FSGEDDF2.cjs.map +1 -0
  100. package/dist/chunk-GLXTVCHN.cjs +4 -0
  101. package/dist/{chunk-4ZU53GNR.cjs.map → chunk-GLXTVCHN.cjs.map} +1 -1
  102. package/dist/chunk-HRS6W74P.js +1568 -0
  103. package/dist/chunk-HRS6W74P.js.map +1 -0
  104. package/dist/chunk-I2W24RHW.js +196 -0
  105. package/dist/chunk-I2W24RHW.js.map +1 -0
  106. package/dist/chunk-I6CY5C6A.js +12 -0
  107. package/dist/chunk-I6CY5C6A.js.map +1 -0
  108. package/dist/chunk-IQ4KQJAO.js +3 -0
  109. package/dist/chunk-IQ4KQJAO.js.map +1 -0
  110. package/dist/chunk-IWDQPSJN.cjs +1452 -0
  111. package/dist/chunk-IWDQPSJN.cjs.map +1 -0
  112. package/dist/chunk-J7KWQJOB.js +14 -0
  113. package/dist/chunk-J7KWQJOB.js.map +1 -0
  114. package/dist/{chunk-R25H4N4Z.js → chunk-J7Z7467B.js} +92 -56
  115. package/dist/chunk-J7Z7467B.js.map +1 -0
  116. package/dist/{chunk-NINI4WVS.cjs → chunk-JC6Y3LGF.cjs} +297 -84
  117. package/dist/chunk-JC6Y3LGF.cjs.map +1 -0
  118. package/dist/chunk-JCNPVK74.cjs +347 -0
  119. package/dist/chunk-JCNPVK74.cjs.map +1 -0
  120. package/dist/chunk-JFLC7SHM.cjs +35 -0
  121. package/dist/chunk-JFLC7SHM.cjs.map +1 -0
  122. package/dist/chunk-JHYFHEHS.js +1967 -0
  123. package/dist/chunk-JHYFHEHS.js.map +1 -0
  124. package/dist/{chunk-IBZXDX4L.cjs → chunk-JQEY53SH.cjs} +112 -3
  125. package/dist/chunk-JQEY53SH.cjs.map +1 -0
  126. package/dist/chunk-JTBQNOSL.cjs +1605 -0
  127. package/dist/chunk-JTBQNOSL.cjs.map +1 -0
  128. package/dist/chunk-JYZW2PZS.cjs +166 -0
  129. package/dist/chunk-JYZW2PZS.cjs.map +1 -0
  130. package/dist/chunk-KBEKQMVY.cjs +198 -0
  131. package/dist/chunk-KBEKQMVY.cjs.map +1 -0
  132. package/dist/chunk-KJ5BSGEO.cjs +258 -0
  133. package/dist/chunk-KJ5BSGEO.cjs.map +1 -0
  134. package/dist/{chunk-DNPRRYPQ.js → chunk-KL2S36FM.js} +2 -2
  135. package/dist/chunk-KL2S36FM.js.map +1 -0
  136. package/dist/chunk-LIH3IZYK.js +689 -0
  137. package/dist/chunk-LIH3IZYK.js.map +1 -0
  138. package/dist/chunk-MAMY5HTT.cjs +1177 -0
  139. package/dist/chunk-MAMY5HTT.cjs.map +1 -0
  140. package/dist/{chunk-WFS6R2F5.js → chunk-MKWGKASO.js} +114 -101
  141. package/dist/chunk-MKWGKASO.js.map +1 -0
  142. package/dist/{chunk-CV4CVGLO.cjs → chunk-MZPF2QGM.cjs} +95 -74
  143. package/dist/chunk-MZPF2QGM.cjs.map +1 -0
  144. package/dist/chunk-NQME7MCK.js +1416 -0
  145. package/dist/chunk-NQME7MCK.js.map +1 -0
  146. package/dist/chunk-NTYGCBCL.js +543 -0
  147. package/dist/chunk-NTYGCBCL.js.map +1 -0
  148. package/dist/chunk-OF7NTZ2I.js +3 -0
  149. package/dist/chunk-OF7NTZ2I.js.map +1 -0
  150. package/dist/chunk-OXYFTCRW.cjs +57 -0
  151. package/dist/chunk-OXYFTCRW.cjs.map +1 -0
  152. package/dist/chunk-QA6ZDHFP.js +117 -0
  153. package/dist/chunk-QA6ZDHFP.js.map +1 -0
  154. package/dist/chunk-RHNPILZQ.cjs +4 -0
  155. package/dist/chunk-RHNPILZQ.cjs.map +1 -0
  156. package/dist/chunk-RHYIFIT5.js +98 -0
  157. package/dist/chunk-RHYIFIT5.js.map +1 -0
  158. package/dist/chunk-RI56YPED.cjs +201 -0
  159. package/dist/chunk-RI56YPED.cjs.map +1 -0
  160. package/dist/chunk-RISZWWEQ.js +3 -0
  161. package/dist/chunk-RISZWWEQ.js.map +1 -0
  162. package/dist/chunk-S6Z3KDEM.js +140 -0
  163. package/dist/chunk-S6Z3KDEM.js.map +1 -0
  164. package/dist/chunk-S7JQ3FV5.cjs +16 -0
  165. package/dist/chunk-S7JQ3FV5.cjs.map +1 -0
  166. package/dist/{chunk-OXGUG57G.cjs → chunk-SNEQXSC5.cjs} +2 -2
  167. package/dist/{chunk-OXGUG57G.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
  168. package/dist/chunk-SQHMGT4W.js +164 -0
  169. package/dist/chunk-SQHMGT4W.js.map +1 -0
  170. package/dist/{chunk-JHPFOG2N.cjs → chunk-ST2RE5UB.cjs} +30 -18
  171. package/dist/chunk-ST2RE5UB.cjs.map +1 -0
  172. package/dist/{chunk-QVJBUWJQ.js → chunk-STPK44AU.js} +46 -12
  173. package/dist/chunk-STPK44AU.js.map +1 -0
  174. package/dist/chunk-T3C4RNJ4.js +106 -0
  175. package/dist/chunk-T3C4RNJ4.js.map +1 -0
  176. package/dist/chunk-T3RWXOCM.js +148 -0
  177. package/dist/chunk-T3RWXOCM.js.map +1 -0
  178. package/dist/{chunk-DCER2QQB.js → chunk-T42BCIUA.js} +2 -2
  179. package/dist/{chunk-DCER2QQB.js.map → chunk-T42BCIUA.js.map} +1 -1
  180. package/dist/{chunk-OYKS2JBB.cjs → chunk-TN33E2VN.cjs} +2 -2
  181. package/dist/chunk-TN33E2VN.cjs.map +1 -0
  182. package/dist/{chunk-K7IGBNZA.cjs → chunk-TR2OJKQ4.cjs} +46 -12
  183. package/dist/chunk-TR2OJKQ4.cjs.map +1 -0
  184. package/dist/chunk-UFYXU7KV.js +135 -0
  185. package/dist/chunk-UFYXU7KV.js.map +1 -0
  186. package/dist/chunk-UM6NA7HL.js +1145 -0
  187. package/dist/chunk-UM6NA7HL.js.map +1 -0
  188. package/dist/chunk-UO3KEUYK.cjs +220 -0
  189. package/dist/chunk-UO3KEUYK.cjs.map +1 -0
  190. package/dist/chunk-UOOH356R.cjs +66 -0
  191. package/dist/chunk-UOOH356R.cjs.map +1 -0
  192. package/dist/{chunk-4ZU53GNR.cjs → chunk-UTYUT5YY.cjs} +62 -2
  193. package/dist/chunk-UTYUT5YY.cjs.map +1 -0
  194. package/dist/chunk-UVSODK6V.cjs +53 -0
  195. package/dist/chunk-UVSODK6V.cjs.map +1 -0
  196. package/dist/chunk-V25Z5GR6.cjs +184 -0
  197. package/dist/chunk-V25Z5GR6.cjs.map +1 -0
  198. package/dist/chunk-VBWRH4UW.cjs +4 -0
  199. package/dist/chunk-VBWRH4UW.cjs.map +1 -0
  200. package/dist/chunk-VJOVJTFP.cjs +370 -0
  201. package/dist/chunk-VJOVJTFP.cjs.map +1 -0
  202. package/dist/{chunk-7BARESXI.cjs → chunk-VPNURIAY.cjs} +114 -101
  203. package/dist/chunk-VPNURIAY.cjs.map +1 -0
  204. package/dist/{chunk-I56VBDSC.js → chunk-XDFDVF2O.js} +30 -18
  205. package/dist/chunk-XDFDVF2O.js.map +1 -0
  206. package/dist/chunk-XL7TTKHP.js +327 -0
  207. package/dist/chunk-XL7TTKHP.js.map +1 -0
  208. package/dist/chunk-Y2S6QMKU.js +78 -0
  209. package/dist/chunk-Y2S6QMKU.js.map +1 -0
  210. package/dist/chunk-Y4ESBDQ5.cjs +552 -0
  211. package/dist/chunk-Y4ESBDQ5.cjs.map +1 -0
  212. package/dist/chunk-Y5KEFV5O.js +192 -0
  213. package/dist/chunk-Y5KEFV5O.js.map +1 -0
  214. package/dist/chunk-YBLIDESO.js +365 -0
  215. package/dist/chunk-YBLIDESO.js.map +1 -0
  216. package/dist/chunk-YVLP3ATI.js +1776 -0
  217. package/dist/chunk-YVLP3ATI.js.map +1 -0
  218. package/dist/chunk-YVPC65ZJ.cjs +134 -0
  219. package/dist/chunk-YVPC65ZJ.cjs.map +1 -0
  220. package/dist/{chunk-MPOWJVV4.js → chunk-YZT62IMX.js} +95 -74
  221. package/dist/chunk-YZT62IMX.js.map +1 -0
  222. package/dist/chunk-ZAIEQWRA.js +207 -0
  223. package/dist/chunk-ZAIEQWRA.js.map +1 -0
  224. package/dist/chunk-ZDEYV373.cjs +139 -0
  225. package/dist/chunk-ZDEYV373.cjs.map +1 -0
  226. package/dist/{chunk-Q7NBJFEB.js → chunk-ZGSC2CB2.js} +2 -2
  227. package/dist/{chunk-Q7NBJFEB.js.map → chunk-ZGSC2CB2.js.map} +1 -1
  228. package/dist/{chunk-3M4P2KMG.cjs → chunk-ZHBANUBI.cjs} +2 -2
  229. package/dist/{chunk-3M4P2KMG.cjs.map → chunk-ZHBANUBI.cjs.map} +1 -1
  230. package/dist/components/AlertDialog/index.cjs +18 -0
  231. package/dist/components/AlertDialog/index.cjs.map +1 -0
  232. package/dist/components/AlertDialog/index.d.cts +56 -0
  233. package/dist/components/AlertDialog/index.d.ts +56 -0
  234. package/dist/components/AlertDialog/index.js +9 -0
  235. package/dist/components/AlertDialog/index.js.map +1 -0
  236. package/dist/components/AudioRecorder/index.d.cts +1 -1
  237. package/dist/components/AudioRecorder/index.d.ts +1 -1
  238. package/dist/components/Autocomplete/index.cjs +16 -0
  239. package/dist/components/Autocomplete/index.cjs.map +1 -0
  240. package/dist/components/Autocomplete/index.d.cts +77 -0
  241. package/dist/components/Autocomplete/index.d.ts +77 -0
  242. package/dist/components/Autocomplete/index.js +7 -0
  243. package/dist/components/Autocomplete/index.js.map +1 -0
  244. package/dist/components/Badge/index.cjs +4 -3
  245. package/dist/components/Badge/index.js +2 -1
  246. package/dist/components/Card/index.cjs +16 -15
  247. package/dist/components/Card/index.js +2 -1
  248. package/dist/components/Collapsible/index.cjs +21 -0
  249. package/dist/components/Collapsible/index.cjs.map +1 -0
  250. package/dist/components/Collapsible/index.d.cts +33 -0
  251. package/dist/components/Collapsible/index.d.ts +33 -0
  252. package/dist/components/Collapsible/index.js +4 -0
  253. package/dist/components/Collapsible/index.js.map +1 -0
  254. package/dist/components/CountryCodeDropdown/index.cjs +6 -5
  255. package/dist/components/CountryCodeDropdown/index.js +3 -2
  256. package/dist/components/DateInput/index.cjs +2 -2
  257. package/dist/components/DateInput/index.d.cts +8 -2
  258. package/dist/components/DateInput/index.d.ts +8 -2
  259. package/dist/components/DateInput/index.js +1 -1
  260. package/dist/components/Dropdown/index.cjs +9 -8
  261. package/dist/components/Dropdown/index.d.cts +2 -1
  262. package/dist/components/Dropdown/index.d.ts +2 -1
  263. package/dist/components/Dropdown/index.js +3 -2
  264. package/dist/components/FloatingWindow/index.cjs +18 -0
  265. package/dist/components/FloatingWindow/index.cjs.map +1 -0
  266. package/dist/components/FloatingWindow/index.d.cts +64 -0
  267. package/dist/components/FloatingWindow/index.d.ts +64 -0
  268. package/dist/components/FloatingWindow/index.js +5 -0
  269. package/dist/components/FloatingWindow/index.js.map +1 -0
  270. package/dist/components/Label/index.cjs +17 -0
  271. package/dist/components/Label/index.cjs.map +1 -0
  272. package/dist/components/Label/index.d.cts +23 -0
  273. package/dist/components/Label/index.d.ts +23 -0
  274. package/dist/components/Label/index.js +4 -0
  275. package/dist/components/Label/index.js.map +1 -0
  276. package/dist/components/Markdown/index.cjs +51 -0
  277. package/dist/components/Markdown/index.cjs.map +1 -0
  278. package/dist/components/Markdown/index.css +331 -0
  279. package/dist/components/Markdown/index.css.map +1 -0
  280. package/dist/components/Markdown/index.d.cts +82 -0
  281. package/dist/components/Markdown/index.d.ts +82 -0
  282. package/dist/components/Markdown/index.js +10 -0
  283. package/dist/components/Markdown/index.js.map +1 -0
  284. package/dist/components/Markdown/styles.css +354 -0
  285. package/dist/components/MediaEditor/index.cjs +44 -0
  286. package/dist/components/MediaEditor/index.cjs.map +1 -0
  287. package/dist/components/MediaEditor/index.d.cts +151 -0
  288. package/dist/components/MediaEditor/index.d.ts +151 -0
  289. package/dist/components/MediaEditor/index.js +19 -0
  290. package/dist/components/MediaEditor/index.js.map +1 -0
  291. package/dist/components/MediaPlayer/index.cjs +24 -0
  292. package/dist/components/MediaPlayer/index.cjs.map +1 -0
  293. package/dist/components/MediaPlayer/index.d.cts +71 -0
  294. package/dist/components/MediaPlayer/index.d.ts +71 -0
  295. package/dist/components/MediaPlayer/index.js +7 -0
  296. package/dist/components/MediaPlayer/index.js.map +1 -0
  297. package/dist/components/RecordButton/index.cjs +4 -4
  298. package/dist/components/RecordButton/index.js +1 -1
  299. package/dist/components/RichTextEditor/index.cjs +33 -0
  300. package/dist/components/RichTextEditor/index.cjs.map +1 -0
  301. package/dist/components/RichTextEditor/index.d.cts +62 -0
  302. package/dist/components/RichTextEditor/index.d.ts +62 -0
  303. package/dist/components/RichTextEditor/index.js +12 -0
  304. package/dist/components/RichTextEditor/index.js.map +1 -0
  305. package/dist/components/ScrollArea/index.cjs +17 -0
  306. package/dist/components/ScrollArea/index.cjs.map +1 -0
  307. package/dist/components/ScrollArea/index.d.cts +22 -0
  308. package/dist/components/ScrollArea/index.d.ts +22 -0
  309. package/dist/components/ScrollArea/index.js +4 -0
  310. package/dist/components/ScrollArea/index.js.map +1 -0
  311. package/dist/components/Select/index.cjs +5 -3
  312. package/dist/components/Select/index.js +3 -1
  313. package/dist/components/Separator/index.cjs +17 -0
  314. package/dist/components/Separator/index.cjs.map +1 -0
  315. package/dist/components/Separator/index.d.cts +27 -0
  316. package/dist/components/Separator/index.d.ts +27 -0
  317. package/dist/components/Separator/index.js +4 -0
  318. package/dist/components/Separator/index.js.map +1 -0
  319. package/dist/components/Sheet/index.cjs +48 -0
  320. package/dist/components/Sheet/index.cjs.map +1 -0
  321. package/dist/components/Sheet/index.d.cts +62 -0
  322. package/dist/components/Sheet/index.d.ts +62 -0
  323. package/dist/components/Sheet/index.js +7 -0
  324. package/dist/components/Sheet/index.js.map +1 -0
  325. package/dist/components/SuperChat/index.cjs +1373 -0
  326. package/dist/components/SuperChat/index.cjs.map +1 -0
  327. package/dist/components/SuperChat/index.d.cts +189 -0
  328. package/dist/components/SuperChat/index.d.ts +189 -0
  329. package/dist/components/SuperChat/index.js +1336 -0
  330. package/dist/components/SuperChat/index.js.map +1 -0
  331. package/dist/components/SuperChat/plugins/index.cjs +1292 -0
  332. package/dist/components/SuperChat/plugins/index.cjs.map +1 -0
  333. package/dist/components/SuperChat/plugins/index.d.cts +233 -0
  334. package/dist/components/SuperChat/plugins/index.d.ts +233 -0
  335. package/dist/components/SuperChat/plugins/index.js +1252 -0
  336. package/dist/components/SuperChat/plugins/index.js.map +1 -0
  337. package/dist/components/Table/index.cjs +9 -9
  338. package/dist/components/Table/index.d.cts +4 -0
  339. package/dist/components/Table/index.d.ts +4 -0
  340. package/dist/components/Table/index.js +1 -1
  341. package/dist/components/ThemeProvider/index.cjs +7 -7
  342. package/dist/components/ThemeProvider/index.js +1 -1
  343. package/dist/components/Toggle/index.cjs +17 -0
  344. package/dist/components/Toggle/index.cjs.map +1 -0
  345. package/dist/components/Toggle/index.d.cts +28 -0
  346. package/dist/components/Toggle/index.d.ts +28 -0
  347. package/dist/components/Toggle/index.js +4 -0
  348. package/dist/components/Toggle/index.js.map +1 -0
  349. package/dist/components/TranscriptView/index.cjs +21 -0
  350. package/dist/components/TranscriptView/index.cjs.map +1 -0
  351. package/dist/components/TranscriptView/index.d.cts +55 -0
  352. package/dist/components/TranscriptView/index.d.ts +55 -0
  353. package/dist/components/TranscriptView/index.js +4 -0
  354. package/dist/components/TranscriptView/index.js.map +1 -0
  355. package/dist/datavis.cjs +268 -227
  356. package/dist/datavis.cjs.map +1 -1
  357. package/dist/datavis.d.cts +83 -9
  358. package/dist/datavis.d.ts +83 -9
  359. package/dist/datavis.js +235 -229
  360. package/dist/datavis.js.map +1 -1
  361. package/dist/esheet.cjs +184 -0
  362. package/dist/esheet.cjs.map +1 -1
  363. package/dist/esheet.d.cts +117 -0
  364. package/dist/esheet.d.ts +117 -0
  365. package/dist/esheet.js +163 -0
  366. package/dist/esheet.js.map +1 -1
  367. package/dist/hey-buddy-CLUVAY2X.cjs +1133 -0
  368. package/dist/hey-buddy-CLUVAY2X.cjs.map +1 -0
  369. package/dist/hey-buddy-NMSWZ4TN.js +1131 -0
  370. package/dist/hey-buddy-NMSWZ4TN.js.map +1 -0
  371. package/dist/hooks/index.cjs +76 -16
  372. package/dist/hooks/index.d.cts +151 -2
  373. package/dist/hooks/index.d.ts +151 -2
  374. package/dist/hooks/index.js +6 -2
  375. package/dist/html-MdxqSzjD.d.cts +13 -0
  376. package/dist/html-MdxqSzjD.d.ts +13 -0
  377. package/dist/index.cjs +10394 -6565
  378. package/dist/index.cjs.map +1 -1
  379. package/dist/index.css +331 -0
  380. package/dist/index.css.map +1 -0
  381. package/dist/index.d.cts +2020 -249
  382. package/dist/index.d.ts +2020 -249
  383. package/dist/index.js +9223 -5969
  384. package/dist/index.js.map +1 -1
  385. package/dist/kerebron.cjs +119 -0
  386. package/dist/kerebron.cjs.map +1 -0
  387. package/dist/kerebron.css +11 -0
  388. package/dist/kerebron.d.cts +23 -0
  389. package/dist/kerebron.d.ts +23 -0
  390. package/dist/kerebron.js +116 -0
  391. package/dist/kerebron.js.map +1 -0
  392. package/dist/nitroTableGrid-3J2GY6CK.cjs +47 -0
  393. package/dist/nitroTableGrid-3J2GY6CK.cjs.map +1 -0
  394. package/dist/nitroTableGrid-SIMT7635.js +25 -0
  395. package/dist/nitroTableGrid-SIMT7635.js.map +1 -0
  396. package/dist/orderRows-BUJYgSc7.d.cts +221 -0
  397. package/dist/orderRows-BUJYgSc7.d.ts +221 -0
  398. package/dist/speaker-verify-5GTWAN5Y.cjs +357 -0
  399. package/dist/speaker-verify-5GTWAN5Y.cjs.map +1 -0
  400. package/dist/speaker-verify-R67P433H.js +355 -0
  401. package/dist/speaker-verify-R67P433H.js.map +1 -0
  402. package/dist/styles/init.css +5 -0
  403. package/dist/styles.css +1 -1
  404. package/dist/tailwind-preset.cjs +4 -4
  405. package/dist/tailwind-preset.js +1 -1
  406. package/dist/transcript-oaWqY3yr.d.cts +81 -0
  407. package/dist/transcript-oaWqY3yr.d.ts +81 -0
  408. package/dist/types-BYnLjEFg.d.cts +248 -0
  409. package/dist/types-BYnLjEFg.d.ts +248 -0
  410. package/dist/types-CBh8Zlje.d.cts +240 -0
  411. package/dist/types-CyCwYBlr.d.ts +240 -0
  412. package/dist/useAnchoredPosition-nXdSFKHf.d.cts +65 -0
  413. package/dist/useAnchoredPosition-nXdSFKHf.d.ts +65 -0
  414. package/dist/useTranscriptEdits-BUylQFg0.d.cts +168 -0
  415. package/dist/useTranscriptEdits-CWYnjbGP.d.ts +168 -0
  416. package/dist/utils/index.cjs +27 -18
  417. package/dist/utils/index.d.cts +1 -0
  418. package/dist/utils/index.d.ts +1 -0
  419. package/dist/utils/index.js +3 -2
  420. package/package.json +180 -55
  421. package/dist/chunk-2DS3RJ2D.js.map +0 -1
  422. package/dist/chunk-74K3RRU7.cjs +0 -4
  423. package/dist/chunk-7BARESXI.cjs.map +0 -1
  424. package/dist/chunk-CV4CVGLO.cjs.map +0 -1
  425. package/dist/chunk-DNPRRYPQ.js.map +0 -1
  426. package/dist/chunk-FRT6RQND.cjs.map +0 -1
  427. package/dist/chunk-HYEJLKXI.js +0 -476
  428. package/dist/chunk-HYEJLKXI.js.map +0 -1
  429. package/dist/chunk-I56VBDSC.js.map +0 -1
  430. package/dist/chunk-IBZXDX4L.cjs.map +0 -1
  431. package/dist/chunk-IKMR2ADM.cjs +0 -25
  432. package/dist/chunk-IKMR2ADM.cjs.map +0 -1
  433. package/dist/chunk-JHPFOG2N.cjs.map +0 -1
  434. package/dist/chunk-K7IGBNZA.cjs.map +0 -1
  435. package/dist/chunk-LEMY57MI.js +0 -3
  436. package/dist/chunk-MPOWJVV4.js.map +0 -1
  437. package/dist/chunk-NINI4WVS.cjs.map +0 -1
  438. package/dist/chunk-OKBR6PX4.js +0 -23
  439. package/dist/chunk-OKBR6PX4.js.map +0 -1
  440. package/dist/chunk-OYKS2JBB.cjs.map +0 -1
  441. package/dist/chunk-QVJBUWJQ.js.map +0 -1
  442. package/dist/chunk-R25H4N4Z.js.map +0 -1
  443. package/dist/chunk-V2DF2GUE.js +0 -3
  444. package/dist/chunk-WFS6R2F5.js.map +0 -1
  445. package/dist/ozwell.cjs +0 -385
  446. package/dist/ozwell.cjs.map +0 -1
  447. package/dist/ozwell.d.cts +0 -15
  448. package/dist/ozwell.d.ts +0 -15
  449. package/dist/ozwell.js +0 -360
  450. package/dist/ozwell.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ 'use strict';
2
+
3
+ var chunkOR5DRJCW_cjs = require('./chunk-OR5DRJCW.cjs');
4
+ var React = require('react');
5
+ var classVarianceAuthority = require('class-variance-authority');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n.default = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
27
+
28
+ var separatorVariants = classVarianceAuthority.cva("shrink-0 bg-border", {
29
+ variants: {
30
+ orientation: {
31
+ horizontal: "h-px w-full",
32
+ vertical: "h-full w-px"
33
+ }
34
+ },
35
+ defaultVariants: {
36
+ orientation: "horizontal"
37
+ }
38
+ });
39
+ var Separator = React__namespace.forwardRef(
40
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
41
+ "div",
42
+ {
43
+ ref,
44
+ "data-slot": "separator",
45
+ role: decorative ? "none" : "separator",
46
+ "aria-orientation": decorative ? void 0 : orientation ?? "horizontal",
47
+ className: chunkOR5DRJCW_cjs.cn(separatorVariants({ orientation }), className),
48
+ ...props
49
+ }
50
+ )
51
+ );
52
+ Separator.displayName = "Separator";
53
+
54
+ exports.Separator = Separator;
55
+ exports.separatorVariants = separatorVariants;
56
+ //# sourceMappingURL=chunk-OXYFTCRW.cjs.map
57
+ //# sourceMappingURL=chunk-OXYFTCRW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Separator/Separator.tsx"],"names":["cva","React","jsx","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAM,iBAAA,GAAoBA,2BAAI,oBAAA,EAAsB;AAAA,EAClD,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,aAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC;AAuBD,IAAM,SAAA,GAAkBC,gBAAA,CAAA,UAAA;AAAA,EACtB,CACE,EAAE,SAAA,EAAW,WAAA,GAAc,YAAA,EAAc,aAAa,IAAA,EAAM,GAAG,KAAA,EAAM,EACrE,GAAA,qBAEAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,aAAa,MAAA,GAAS,WAAA;AAAA,MAC5B,kBAAA,EAAkB,UAAA,GAAa,MAAA,GAAa,WAAA,IAAe,YAAA;AAAA,MAC3D,WAAWC,oBAAA,CAAG,iBAAA,CAAkB,EAAE,WAAA,EAAa,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG;AAAA;AAAA;AAGV;AAEA,SAAA,CAAU,WAAA,GAAc,WAAA","file":"chunk-OXYFTCRW.cjs","sourcesContent":["import * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\nconst separatorVariants = cva('shrink-0 bg-border', {\n variants: {\n orientation: {\n horizontal: 'h-px w-full',\n vertical: 'h-full w-px',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\nexport interface SeparatorProps\n extends\n React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof separatorVariants> {\n /**\n * Whether the separator is purely decorative. When `true` (default) the\n * separator is hidden from assistive technologies. Set to `false` when the\n * separator conveys meaningful structure.\n */\n decorative?: boolean;\n}\n\n/**\n * A visual or semantic divider between content.\n *\n * @example\n * ```tsx\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\nconst Separator = React.forwardRef<HTMLDivElement, SeparatorProps>(\n (\n { className, orientation = 'horizontal', decorative = true, ...props },\n ref\n ) => (\n <div\n ref={ref}\n data-slot=\"separator\"\n role={decorative ? 'none' : 'separator'}\n aria-orientation={decorative ? undefined : (orientation ?? 'horizontal')}\n className={cn(separatorVariants({ orientation }), className)}\n {...props}\n />\n )\n);\n\nSeparator.displayName = 'Separator';\n\nexport { Separator, separatorVariants };\n"]}
@@ -0,0 +1,117 @@
1
+ import * as React from 'react';
2
+
3
+ // src/hooks/useAnchoredPosition.ts
4
+ var HIDDEN_STYLE = {
5
+ position: "fixed",
6
+ top: 0,
7
+ left: 0,
8
+ visibility: "hidden",
9
+ zIndex: 9999,
10
+ // Never let `transition-*` utilities animate top/left from the hidden
11
+ // (0,0) mount position to the computed one (keyframe animations like
12
+ // `animate-in` are unaffected).
13
+ transition: "none"
14
+ };
15
+ function useAnchoredPosition({
16
+ open,
17
+ placement = "bottom-start",
18
+ offset = 4,
19
+ matchWidth = false,
20
+ matchMinWidth = false,
21
+ viewportPadding = 8,
22
+ maxHeight
23
+ }) {
24
+ const anchorRef = React.useRef(null);
25
+ const floatingRef = React.useRef(null);
26
+ const [style, setStyle] = React.useState(HIDDEN_STYLE);
27
+ const [actualSide, setActualSide] = React.useState(
28
+ placement.startsWith("top") ? "top" : "bottom"
29
+ );
30
+ const update = React.useCallback(() => {
31
+ const anchor = anchorRef.current;
32
+ const floating = floatingRef.current;
33
+ if (!anchor || !floating) return;
34
+ const rect = anchor.getBoundingClientRect();
35
+ const viewportWidth = window.innerWidth;
36
+ const viewportHeight = window.innerHeight;
37
+ const contentHeight = Math.min(
38
+ floating.scrollHeight,
39
+ maxHeight ?? Infinity
40
+ );
41
+ const floatingWidth = matchWidth ? rect.width : Math.max(floating.offsetWidth, matchMinWidth ? rect.width : 0);
42
+ const spaceBelow = viewportHeight - rect.bottom - offset - viewportPadding;
43
+ const spaceAbove = rect.top - offset - viewportPadding;
44
+ const preferTop = placement.startsWith("top");
45
+ let side;
46
+ if (preferTop) {
47
+ side = spaceAbove < contentHeight && spaceBelow > spaceAbove ? "bottom" : "top";
48
+ } else {
49
+ side = spaceBelow < contentHeight && spaceAbove > spaceBelow ? "top" : "bottom";
50
+ }
51
+ const availableHeight = Math.max(
52
+ side === "top" ? spaceAbove : spaceBelow,
53
+ 0
54
+ );
55
+ const align = placement.endsWith("-start") ? "left" : placement.endsWith("-end") ? "right" : "center";
56
+ let left = align === "left" ? rect.left : align === "right" ? rect.right - floatingWidth : rect.left + rect.width / 2 - floatingWidth / 2;
57
+ left = Math.min(
58
+ Math.max(left, viewportPadding),
59
+ Math.max(viewportWidth - floatingWidth - viewportPadding, viewportPadding)
60
+ );
61
+ setActualSide(side);
62
+ setStyle({
63
+ position: "fixed",
64
+ left,
65
+ ...side === "top" ? { bottom: viewportHeight - rect.top + offset } : { top: rect.bottom + offset },
66
+ ...matchWidth ? { width: rect.width } : {},
67
+ ...matchMinWidth ? { minWidth: rect.width } : {},
68
+ maxHeight: Math.min(availableHeight, maxHeight ?? Infinity),
69
+ zIndex: 9999,
70
+ transition: "none"
71
+ });
72
+ }, [
73
+ matchMinWidth,
74
+ matchWidth,
75
+ maxHeight,
76
+ offset,
77
+ placement,
78
+ viewportPadding
79
+ ]);
80
+ React.useLayoutEffect(() => {
81
+ if (open) {
82
+ update();
83
+ } else {
84
+ setStyle(HIDDEN_STYLE);
85
+ }
86
+ }, [open, update]);
87
+ React.useEffect(() => {
88
+ if (!open) return;
89
+ let frame = 0;
90
+ const scheduleUpdate = () => {
91
+ if (frame) return;
92
+ frame = window.requestAnimationFrame(() => {
93
+ frame = 0;
94
+ update();
95
+ });
96
+ };
97
+ window.addEventListener("scroll", scheduleUpdate, true);
98
+ window.addEventListener("resize", scheduleUpdate);
99
+ let resizeObserver;
100
+ if (typeof globalThis.ResizeObserver !== "undefined") {
101
+ resizeObserver = new globalThis.ResizeObserver(scheduleUpdate);
102
+ if (anchorRef.current) resizeObserver.observe(anchorRef.current);
103
+ if (floatingRef.current) resizeObserver.observe(floatingRef.current);
104
+ }
105
+ return () => {
106
+ if (frame) window.cancelAnimationFrame(frame);
107
+ window.removeEventListener("scroll", scheduleUpdate, true);
108
+ window.removeEventListener("resize", scheduleUpdate);
109
+ resizeObserver?.disconnect();
110
+ };
111
+ }, [open, update]);
112
+ return { anchorRef, floatingRef, style, actualSide, update };
113
+ }
114
+
115
+ export { useAnchoredPosition };
116
+ //# sourceMappingURL=chunk-QA6ZDHFP.js.map
117
+ //# sourceMappingURL=chunk-QA6ZDHFP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useAnchoredPosition.ts"],"names":[],"mappings":"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","file":"chunk-QA6ZDHFP.js","sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nexport type AnchoredPlacement =\n | 'bottom-start'\n | 'bottom-end'\n | 'bottom'\n | 'top-start'\n | 'top-end'\n | 'top';\n\nexport interface UseAnchoredPositionOptions {\n /** Whether the floating element is currently shown */\n open: boolean;\n /** Preferred placement relative to the anchor (flips when out of space) */\n placement?: AnchoredPlacement;\n /** Gap between the anchor and the floating element, in px */\n offset?: number;\n /** Force the floating element to the anchor's width */\n matchWidth?: boolean;\n /** Use the anchor's width as the floating element's minimum width */\n matchMinWidth?: boolean;\n /** Minimum distance from the viewport edges, in px */\n viewportPadding?: number;\n /**\n * Additional cap on the floating element's height, in px. The height is\n * always clamped to the available viewport space; this only lowers that\n * limit further (omitting it does not remove the viewport constraint).\n */\n maxHeight?: number;\n}\n\nexport interface UseAnchoredPositionReturn<\n TAnchor extends HTMLElement,\n TFloating extends HTMLElement,\n> {\n /** Attach to the element the popup is anchored to (trigger/input) */\n anchorRef: React.RefObject<TAnchor | null>;\n /** Attach to the floating element (menu/listbox/panel) */\n floatingRef: React.RefObject<TFloating | null>;\n /** Fixed-position style for the floating element — spread onto it */\n style: React.CSSProperties;\n /** Vertical side in use after flipping ('top' or 'bottom') */\n actualSide: 'top' | 'bottom';\n /** Recompute the position (e.g. after async content loads) */\n update: () => void;\n}\n\nconst HIDDEN_STYLE: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n visibility: 'hidden',\n zIndex: 9999,\n // Never let `transition-*` utilities animate top/left from the hidden\n // (0,0) mount position to the computed one (keyframe animations like\n // `animate-in` are unaffected).\n transition: 'none',\n};\n\n/**\n * Positions a floating element (dropdown menu, autocomplete listbox,\n * date-picker calendar, …) relative to an anchor using `position: fixed`,\n * so it is never clipped by `overflow: hidden` ancestors.\n *\n * Render the floating element through `createPortal(..., document.body)`\n * and spread the returned `style` onto it. The hook:\n * - flips vertically when there is not enough space on the preferred side\n * - clamps horizontally to the viewport\n * - constrains `maxHeight` to the available space (add `overflow-auto`)\n * - tracks scroll, resize, and anchor/content size changes while open\n *\n * @example\n * ```tsx\n * const { anchorRef, floatingRef, style } = useAnchoredPosition<\n * HTMLButtonElement,\n * HTMLDivElement\n * >({ open, placement: 'bottom-start' });\n *\n * <button ref={anchorRef} onClick={() => setOpen(!open)}>Open</button>\n * {open &&\n * createPortal(\n * <div ref={floatingRef} style={style} className=\"overflow-auto …\">…</div>,\n * document.body\n * )}\n * ```\n */\nexport function useAnchoredPosition<\n TAnchor extends HTMLElement = HTMLElement,\n TFloating extends HTMLElement = HTMLElement,\n>({\n open,\n placement = 'bottom-start',\n offset = 4,\n matchWidth = false,\n matchMinWidth = false,\n viewportPadding = 8,\n maxHeight,\n}: UseAnchoredPositionOptions): UseAnchoredPositionReturn<TAnchor, TFloating> {\n const anchorRef = React.useRef<TAnchor | null>(null);\n const floatingRef = React.useRef<TFloating | null>(null);\n const [style, setStyle] = React.useState<React.CSSProperties>(HIDDEN_STYLE);\n const [actualSide, setActualSide] = React.useState<'top' | 'bottom'>(\n placement.startsWith('top') ? 'top' : 'bottom'\n );\n\n const update = React.useCallback(() => {\n const anchor = anchorRef.current;\n const floating = floatingRef.current;\n if (!anchor || !floating) return;\n\n const rect = anchor.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Natural content size (scrollHeight so a previously applied maxHeight\n // doesn't skew the flip decision).\n const contentHeight = Math.min(\n floating.scrollHeight,\n maxHeight ?? Infinity\n );\n // With matchMinWidth the rendered width is at least the anchor's width,\n // even if offsetWidth was measured before minWidth applied.\n const floatingWidth = matchWidth\n ? rect.width\n : Math.max(floating.offsetWidth, matchMinWidth ? rect.width : 0);\n\n // --- Vertical: preferred side, flip when out of space -------------------\n const spaceBelow = viewportHeight - rect.bottom - offset - viewportPadding;\n const spaceAbove = rect.top - offset - viewportPadding;\n const preferTop = placement.startsWith('top');\n let side: 'top' | 'bottom';\n if (preferTop) {\n side =\n spaceAbove < contentHeight && spaceBelow > spaceAbove\n ? 'bottom'\n : 'top';\n } else {\n side =\n spaceBelow < contentHeight && spaceAbove > spaceBelow\n ? 'top'\n : 'bottom';\n }\n const availableHeight = Math.max(\n side === 'top' ? spaceAbove : spaceBelow,\n 0\n );\n\n // --- Horizontal: -start aligns left edges, -end aligns right edges ------\n const align = placement.endsWith('-start')\n ? 'left'\n : placement.endsWith('-end')\n ? 'right'\n : 'center';\n let left =\n align === 'left'\n ? rect.left\n : align === 'right'\n ? rect.right - floatingWidth\n : rect.left + rect.width / 2 - floatingWidth / 2;\n left = Math.min(\n Math.max(left, viewportPadding),\n Math.max(viewportWidth - floatingWidth - viewportPadding, viewportPadding)\n );\n\n setActualSide(side);\n setStyle({\n position: 'fixed',\n left,\n ...(side === 'top'\n ? { bottom: viewportHeight - rect.top + offset }\n : { top: rect.bottom + offset }),\n ...(matchWidth ? { width: rect.width } : {}),\n ...(matchMinWidth ? { minWidth: rect.width } : {}),\n maxHeight: Math.min(availableHeight, maxHeight ?? Infinity),\n zIndex: 9999,\n transition: 'none',\n });\n }, [\n matchMinWidth,\n matchWidth,\n maxHeight,\n offset,\n placement,\n viewportPadding,\n ]);\n\n // Position synchronously before paint when opening / re-rendering open.\n React.useLayoutEffect(() => {\n if (open) {\n update();\n } else {\n setStyle(HIDDEN_STYLE);\n }\n }, [open, update]);\n\n // Track scroll/resize and anchor/content size changes while open.\n React.useEffect(() => {\n if (!open) return;\n\n // Coalesce bursts (scroll/resize fire per event) into one layout\n // read + state update per frame.\n let frame = 0;\n const scheduleUpdate = () => {\n if (frame) return;\n frame = window.requestAnimationFrame(() => {\n frame = 0;\n update();\n });\n };\n\n window.addEventListener('scroll', scheduleUpdate, true);\n window.addEventListener('resize', scheduleUpdate);\n\n let resizeObserver: globalThis.ResizeObserver | undefined;\n if (typeof globalThis.ResizeObserver !== 'undefined') {\n resizeObserver = new globalThis.ResizeObserver(scheduleUpdate);\n if (anchorRef.current) resizeObserver.observe(anchorRef.current);\n if (floatingRef.current) resizeObserver.observe(floatingRef.current);\n }\n\n return () => {\n if (frame) window.cancelAnimationFrame(frame);\n window.removeEventListener('scroll', scheduleUpdate, true);\n window.removeEventListener('resize', scheduleUpdate);\n resizeObserver?.disconnect();\n };\n }, [open, update]);\n\n return { anchorRef, floatingRef, style, actualSide, update };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=chunk-RHNPILZQ.cjs.map
4
+ //# sourceMappingURL=chunk-RHNPILZQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RHNPILZQ.cjs"}
@@ -0,0 +1,98 @@
1
+ import { Button } from './chunk-ZVSW2KS6.js';
2
+ import { Eye, Code, Check, ClipboardCopy } from 'lucide-react';
3
+ import { useState, useRef, useEffect, useCallback } from 'react';
4
+ import { jsxs, jsx } from 'react/jsx-runtime';
5
+
6
+ var FenceBlock = ({
7
+ code,
8
+ language,
9
+ supportsRawView = false,
10
+ error,
11
+ children,
12
+ headerActions
13
+ }) => {
14
+ const [copyState, setCopyState] = useState("idle");
15
+ const [showRaw, setShowRaw] = useState(false);
16
+ const timerRef = useRef(null);
17
+ useEffect(
18
+ () => () => {
19
+ if (timerRef.current) clearTimeout(timerRef.current);
20
+ },
21
+ []
22
+ );
23
+ const scheduleReset = useCallback(() => {
24
+ if (timerRef.current) clearTimeout(timerRef.current);
25
+ timerRef.current = setTimeout(() => setCopyState("idle"), 2e3);
26
+ }, []);
27
+ const handleCopy = useCallback(async () => {
28
+ if (copyState === "copying") return;
29
+ setCopyState("copying");
30
+ try {
31
+ await navigator.clipboard.writeText(code);
32
+ setCopyState("success");
33
+ scheduleReset();
34
+ } catch {
35
+ try {
36
+ const textarea = document.createElement("textarea");
37
+ textarea.value = code;
38
+ textarea.style.position = "fixed";
39
+ textarea.style.opacity = "0";
40
+ document.body.appendChild(textarea);
41
+ textarea.select();
42
+ document.execCommand("copy");
43
+ document.body.removeChild(textarea);
44
+ setCopyState("success");
45
+ } catch {
46
+ setCopyState("error");
47
+ }
48
+ scheduleReset();
49
+ }
50
+ }, [code, copyState, scheduleReset]);
51
+ return /* @__PURE__ */ jsxs("div", { className: "group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]", children: [
52
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]", children: [
53
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-neutral-500 dark:text-neutral-400", children: language ? language.charAt(0).toUpperCase() + language.slice(1) : "Text" }),
54
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
55
+ headerActions,
56
+ supportsRawView && /* @__PURE__ */ jsx(
57
+ Button,
58
+ {
59
+ variant: "ghost",
60
+ size: "sm",
61
+ onClick: () => setShowRaw((v) => !v),
62
+ "aria-label": showRaw ? "Show rendered view" : "Show raw code",
63
+ className: "h-7 w-7 p-0",
64
+ children: showRaw ? /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Code, { className: "h-3.5 w-3.5" })
65
+ }
66
+ ),
67
+ /* @__PURE__ */ jsx(
68
+ Button,
69
+ {
70
+ variant: "ghost",
71
+ size: "sm",
72
+ onClick: handleCopy,
73
+ "aria-label": "Copy code",
74
+ className: "h-7 w-7 p-0",
75
+ children: copyState === "success" ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 text-green-500" }) : /* @__PURE__ */ jsx(ClipboardCopy, { className: "h-3.5 w-3.5" })
76
+ }
77
+ )
78
+ ] })
79
+ ] }),
80
+ error ? /* @__PURE__ */ jsxs("div", { className: "p-3", children: [
81
+ /* @__PURE__ */ jsx("div", { className: "rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300", children: error }),
82
+ /* @__PURE__ */ jsx("pre", { className: "mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400", children: /* @__PURE__ */ jsx("code", { children: code }) })
83
+ ] }) : showRaw ? /* @__PURE__ */ jsx(
84
+ "pre",
85
+ {
86
+ className: "overflow-x-auto p-3 text-sm",
87
+ tabIndex: 0,
88
+ role: "region",
89
+ "aria-label": "Raw code",
90
+ children: /* @__PURE__ */ jsx("code", { children: code })
91
+ }
92
+ ) : /* @__PURE__ */ jsx("div", { className: "overflow-x-auto", children })
93
+ ] });
94
+ };
95
+
96
+ export { FenceBlock };
97
+ //# sourceMappingURL=chunk-RHYIFIT5.js.map
98
+ //# sourceMappingURL=chunk-RHYIFIT5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Markdown/FenceBlock.tsx"],"names":[],"mappings":"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","file":"chunk-RHYIFIT5.js","sourcesContent":["/**\n * FenceBlock — Base wrapper for code blocks with copy, raw view toggle, and errors.\n */\nimport { Check, ClipboardCopy, Code, Eye } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\n\nexport interface FenceBlockProps {\n code: string;\n language?: string;\n supportsRawView?: boolean;\n error?: string;\n children: React.ReactNode;\n /** Extra buttons rendered in the header before the copy button */\n headerActions?: React.ReactNode;\n}\n\ntype CopyState = 'idle' | 'copying' | 'success' | 'error';\n\nexport const FenceBlock: React.FC<FenceBlockProps> = ({\n code,\n language,\n supportsRawView = false,\n error,\n children,\n headerActions,\n}) => {\n const [copyState, setCopyState] = useState<CopyState>('idle');\n const [showRaw, setShowRaw] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current);\n },\n []\n );\n\n const scheduleReset = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n timerRef.current = setTimeout(() => setCopyState('idle'), 2000);\n }, []);\n\n const handleCopy = useCallback(async () => {\n if (copyState === 'copying') return;\n setCopyState('copying');\n try {\n await navigator.clipboard.writeText(code);\n setCopyState('success');\n scheduleReset();\n } catch {\n try {\n const textarea = document.createElement('textarea');\n textarea.value = code;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n setCopyState('success');\n } catch {\n setCopyState('error');\n }\n scheduleReset();\n }\n }, [code, copyState, scheduleReset]);\n\n return (\n <div className=\"group relative my-3 overflow-hidden rounded-lg border border-neutral-200 bg-neutral-50 dark:border-neutral-700 dark:bg-[#1a1d24]\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-white/[0.08]\">\n <span className=\"text-xs font-medium text-neutral-500 dark:text-neutral-400\">\n {language\n ? language.charAt(0).toUpperCase() + language.slice(1)\n : 'Text'}\n </span>\n <div className=\"flex items-center gap-1\">\n {headerActions}\n {supportsRawView && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowRaw((v) => !v)}\n aria-label={showRaw ? 'Show rendered view' : 'Show raw code'}\n className=\"h-7 w-7 p-0\"\n >\n {showRaw ? (\n <Eye className=\"h-3.5 w-3.5\" />\n ) : (\n <Code className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n )}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleCopy}\n aria-label=\"Copy code\"\n className=\"h-7 w-7 p-0\"\n >\n {copyState === 'success' ? (\n <Check className=\"h-3.5 w-3.5 text-green-500\" />\n ) : (\n <ClipboardCopy className=\"h-3.5 w-3.5\" />\n )}\n </Button>\n </div>\n </div>\n\n {error ? (\n <div className=\"p-3\">\n <div className=\"rounded-md bg-red-50 p-3 text-sm text-red-800 dark:bg-red-900/20 dark:text-red-300\">\n {error}\n </div>\n <pre className=\"mt-2 overflow-x-auto text-xs whitespace-pre-wrap text-neutral-600 dark:text-neutral-400\">\n <code>{code}</code>\n </pre>\n </div>\n ) : showRaw ? (\n <pre\n className=\"overflow-x-auto p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus (axe: scrollable-region-focusable)\n tabIndex={0}\n role=\"region\"\n aria-label=\"Raw code\"\n >\n <code>{code}</code>\n </pre>\n ) : (\n <div className=\"overflow-x-auto\">{children}</div>\n )}\n </div>\n );\n};\n"]}
@@ -0,0 +1,201 @@
1
+ 'use strict';
2
+
3
+ // src/components/HealthSurveillance/evaluate.ts
4
+ function normalizeOrders(orders) {
5
+ return (orders ?? []).map(
6
+ (o) => typeof o === "string" ? { keys: [o], after: [] } : { keys: o.alt ?? (o.key ? [o.key] : []), after: o.after ?? [] }
7
+ ).filter((s) => s.keys.length > 0);
8
+ }
9
+ function flattenOrderKeys(orders) {
10
+ return normalizeOrders(orders).flatMap((s) => s.keys);
11
+ }
12
+ function completedKeys(history) {
13
+ const done = /* @__PURE__ */ new Set();
14
+ for (const o of history.orders) {
15
+ if (o.status === "completed") done.add(o.key);
16
+ }
17
+ for (const p of history.procedures ?? []) done.add(p.key);
18
+ for (const i of history.immunizations ?? []) done.add(i.key);
19
+ return done;
20
+ }
21
+ function addMonths(iso, months) {
22
+ const [y, m, d] = iso.slice(0, 10).split("-").map(Number);
23
+ const total = m - 1 + months;
24
+ const ty = y + Math.floor(total / 12);
25
+ const tm = (total % 12 + 12) % 12;
26
+ const lastDay = new Date(Date.UTC(ty, tm + 1, 0)).getUTCDate();
27
+ return new Date(Date.UTC(ty, tm, Math.min(d, lastDay))).toISOString().slice(0, 10);
28
+ }
29
+ function isApplicable(history, program) {
30
+ if (program.sex && program.sex !== history.sex) return false;
31
+ if (program.ageMin !== void 0 && history.age < program.ageMin)
32
+ return false;
33
+ if (program.ageMax !== void 0 && history.age > program.ageMax)
34
+ return false;
35
+ return true;
36
+ }
37
+ function evaluateProgram(key, program, history, now = /* @__PURE__ */ new Date()) {
38
+ const base = { key, program, pendingKeys: [] };
39
+ if (!isApplicable(history, program)) {
40
+ return { ...base, status: "not-applicable" };
41
+ }
42
+ const satisfying = new Set(flattenOrderKeys(program.orders));
43
+ const completions = [];
44
+ for (const o of history.orders) {
45
+ if (!satisfying.has(o.key)) continue;
46
+ if (o.status === "completed") completions.push(o.date);
47
+ else base.pendingKeys.push(o.key);
48
+ }
49
+ for (const p of history.procedures ?? []) {
50
+ if (satisfying.has(p.key)) completions.push(p.date);
51
+ }
52
+ for (const i of history.immunizations ?? []) {
53
+ if (satisfying.has(i.key)) completions.push(i.date);
54
+ }
55
+ const lastCompleted = completions.sort().at(-1);
56
+ if (!lastCompleted) {
57
+ return base.pendingKeys.length > 0 ? { ...base, status: "pending" } : { ...base, status: "due" };
58
+ }
59
+ if (program.periodicityMonths === void 0) {
60
+ return { ...base, status: "satisfied", lastCompleted };
61
+ }
62
+ const dueDate = addMonths(lastCompleted, program.periodicityMonths);
63
+ if (dueDate > now.toISOString().slice(0, 10)) {
64
+ return { ...base, status: "satisfied", lastCompleted, dueDate };
65
+ }
66
+ return base.pendingKeys.length > 0 ? { ...base, status: "pending", lastCompleted, dueDate } : { ...base, status: "overdue", lastCompleted, dueDate };
67
+ }
68
+ function evaluateDue(history, programs, options) {
69
+ const enrolled = options?.enrolledKeys ? new Set(options.enrolledKeys) : null;
70
+ const now = options?.now ?? /* @__PURE__ */ new Date();
71
+ const items = [];
72
+ for (const [key, program] of Object.entries(programs)) {
73
+ if (enrolled && program.kind !== "quality" && !enrolled.has(key)) continue;
74
+ const item = evaluateProgram(key, program, history, now);
75
+ if (item.status === "not-applicable" && !options?.includeNotApplicable)
76
+ continue;
77
+ items.push(item);
78
+ }
79
+ const rank = {
80
+ overdue: 0,
81
+ due: 1,
82
+ pending: 2,
83
+ satisfied: 3,
84
+ "not-applicable": 4
85
+ };
86
+ return items.sort(
87
+ (a, b) => rank[a.status] - rank[b.status] || (a.dueDate ?? "").localeCompare(b.dueDate ?? "") || a.key.localeCompare(b.key)
88
+ );
89
+ }
90
+ function dueForOrder(orderKey, dueItems) {
91
+ return dueItems.filter(
92
+ (i) => (i.status === "due" || i.status === "overdue") && flattenOrderKeys(i.program.orders).includes(orderKey)
93
+ );
94
+ }
95
+
96
+ // src/components/HealthSurveillance/orderRows.ts
97
+ var KIND_LABEL = {
98
+ surveillance: "surveillance",
99
+ fitness: "fitness for duty",
100
+ credential: "credential",
101
+ quality: "quality measure"
102
+ };
103
+ function labelLookup(history, orderLabels) {
104
+ const m = /* @__PURE__ */ new Map();
105
+ const scan = (list) => {
106
+ for (const e of list ?? []) {
107
+ if (e.key && e.label && !m.has(e.key)) m.set(e.key, e.label);
108
+ }
109
+ };
110
+ scan(history.orders);
111
+ scan(history.observations);
112
+ scan(history.procedures);
113
+ scan(history.immunizations);
114
+ return (key) => orderLabels?.[key] ?? m.get(key) ?? key;
115
+ }
116
+ function reasonIndex(items) {
117
+ const idx = /* @__PURE__ */ new Map();
118
+ for (const item of items) {
119
+ for (const spec of normalizeOrders(item.program.orders)) {
120
+ for (const k of spec.keys) {
121
+ if (!idx.has(k)) idx.set(k, item);
122
+ }
123
+ }
124
+ }
125
+ return idx;
126
+ }
127
+ function buildChartOrderRows(history, programs, options = {}) {
128
+ const {
129
+ enrolledKeys,
130
+ now,
131
+ programLabels,
132
+ orderLabels,
133
+ includeDue = true
134
+ } = options;
135
+ const items = evaluateDue(history, programs, { enrolledKeys, now });
136
+ const byOrderKey = reasonIndex(items);
137
+ const orderLabel = labelLookup(history, orderLabels);
138
+ const programLabel = (key) => programLabels?.[key] ?? key;
139
+ const completed = completedKeys(history);
140
+ const rows = [];
141
+ const reasonFields = (item) => ({
142
+ reason: item ? programLabel(item.key) : "",
143
+ reasonKey: item?.key ?? "",
144
+ kind: item?.program.kind ? KIND_LABEL[item.program.kind] ?? item.program.kind : "",
145
+ dueDate: item?.dueDate?.slice(0, 10) ?? ""
146
+ });
147
+ for (const o of history.orders) {
148
+ rows.push({
149
+ orderKey: o.key,
150
+ order: orderLabel(o.key),
151
+ ...reasonFields(byOrderKey.get(o.key)),
152
+ status: o.status,
153
+ date: o.date.slice(0, 10),
154
+ provider: o.provider ?? "",
155
+ requisitionId: o.requisitionId ?? "",
156
+ encounterId: o.encounterId ?? "",
157
+ blockedBy: ""
158
+ });
159
+ }
160
+ if (includeDue) {
161
+ const placed = new Set(history.orders.map((o) => o.key));
162
+ for (const item of items) {
163
+ if (item.status === "satisfied" || item.status === "not-applicable")
164
+ continue;
165
+ for (const spec of normalizeOrders(item.program.orders)) {
166
+ const unmet = spec.after.filter((k) => !completed.has(k));
167
+ for (const k of spec.keys) {
168
+ if (placed.has(k)) continue;
169
+ rows.push({
170
+ orderKey: k,
171
+ order: orderLabel(k),
172
+ ...reasonFields(item),
173
+ status: unmet.length > 0 ? "blocked" : "available",
174
+ date: "",
175
+ provider: "",
176
+ requisitionId: "",
177
+ encounterId: "",
178
+ blockedBy: unmet.map(orderLabel).join(", ")
179
+ });
180
+ }
181
+ }
182
+ }
183
+ }
184
+ return rows;
185
+ }
186
+ function buildEncounterOrderRows(history, programs, encounterId, options = {}) {
187
+ return buildChartOrderRows(history, programs, options).filter(
188
+ (r) => r.encounterId === encounterId || r.status === "available" || r.status === "blocked"
189
+ );
190
+ }
191
+
192
+ exports.buildChartOrderRows = buildChartOrderRows;
193
+ exports.buildEncounterOrderRows = buildEncounterOrderRows;
194
+ exports.completedKeys = completedKeys;
195
+ exports.dueForOrder = dueForOrder;
196
+ exports.evaluateDue = evaluateDue;
197
+ exports.evaluateProgram = evaluateProgram;
198
+ exports.isApplicable = isApplicable;
199
+ exports.normalizeOrders = normalizeOrders;
200
+ //# sourceMappingURL=chunk-RI56YPED.cjs.map
201
+ //# sourceMappingURL=chunk-RI56YPED.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/HealthSurveillance/evaluate.ts","../src/components/HealthSurveillance/orderRows.ts"],"names":[],"mappings":"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","file":"chunk-RI56YPED.cjs","sourcesContent":["/**\n * Due-evaluation engine — the \"knowledge\" layer of health surveillance.\n * Given a patient's history and the program metadata (programs.json from\n * mieweb/codify, or a deployment's own), decides which programs/measures are\n * due, overdue, pending, or satisfied. Pure functions, no I/O — the metadata\n * is small, so this runs on the main thread.\n */\n\nimport type { PatientHistory } from './history';\n\n/**\n * One entry in a program's order set:\n * - `\"CODETYPE|FULLCODE\"` — a plain required order\n * - `{ alt: [a, b] }` — mutually exclusive alternatives (one-of): a\n * colonoscopy OR a FIT satisfies colorectal screening\n * - `{ key, after: […] }` — depends on completed prerequisites (Gantt edge):\n * the RMO's fitness-for-duty determination needs the panel results first,\n * and a program may carry several determinations (per panel / per SEG)\n */\nexport type ProgramOrder =\n | string\n | {\n key?: string;\n alt?: string[];\n after?: string[];\n };\n\n/** Normalized order entry: alternative keys + prerequisite keys. */\nexport interface OrderSpec {\n /** Alternatives — exactly one should be ordered */\n keys: string[];\n /** Order keys that must be completed before this one can be performed */\n after: string[];\n}\n\nexport function normalizeOrders(orders?: ProgramOrder[]): OrderSpec[] {\n return (orders ?? [])\n .map((o) =>\n typeof o === 'string'\n ? { keys: [o], after: [] }\n : { keys: o.alt ?? (o.key ? [o.key] : []), after: o.after ?? [] }\n )\n .filter((s) => s.keys.length > 0);\n}\n\n/** Every key that can satisfy/appear in the program's order set. */\nexport function flattenOrderKeys(orders?: ProgramOrder[]): string[] {\n return normalizeOrders(orders).flatMap((s) => s.keys);\n}\n\n/** Keys of everything completed in the history (orders, procedures,\n * immunizations) — used to unlock dependent orders. */\nexport function completedKeys(history: PatientHistory): Set<string> {\n const done = new Set<string>();\n for (const o of history.orders) {\n if (o.status === 'completed') done.add(o.key);\n }\n for (const p of history.procedures ?? []) done.add(p.key);\n for (const i of history.immunizations ?? []) done.add(i.key);\n return done;\n}\n\n/** Program metadata — mirrors programs.json (see mieweb/codify). */\nexport interface ProgramMeta {\n kind?: 'surveillance' | 'fitness' | 'credential' | 'quality';\n /** Omitted = one-time / event-driven (satisfied forever once done) */\n periodicityMonths?: number;\n ageMin?: number;\n ageMax?: number;\n sex?: 'M' | 'F';\n /** Satisfying orders — plain keys, one-of alternatives, or dependent\n * entries (see ProgramOrder) */\n orders?: ProgramOrder[];\n}\n\nexport type ProgramsMap = Record<string, ProgramMeta>;\n\nexport type DueStatus =\n | 'due' // applicable, never satisfied (or history silent)\n | 'overdue' // applicable, last satisfied longer ago than the periodicity\n | 'pending' // a satisfying order is in flight\n | 'satisfied' // satisfied within the periodicity window (or one-time done)\n | 'not-applicable'; // age/sex gates exclude the patient\n\nexport interface DueItem {\n /** Program key, CODETYPE|FULLCODE (e.g. \"OSHA|1910.95\", \"eCQM|CMS125\") */\n key: string;\n program: ProgramMeta;\n status: DueStatus;\n /** Most recent completion date of any satisfying order */\n lastCompleted?: string;\n /** When the current/last satisfaction lapses (satisfied/overdue only) */\n dueDate?: string;\n /** Satisfying orders currently pending */\n pendingKeys: string[];\n}\n\n/** Add months to an ISO date, returning an ISO date (YYYY-MM-DD).\n * Computed in UTC (a local-time Date would shift the day in non-UTC zones)\n * with the day-of-month clamped (Jan 31 + 1 month → Feb 28/29, not Mar 2/3). */\nfunction addMonths(iso: string, months: number): string {\n const [y, m, d] = iso.slice(0, 10).split('-').map(Number);\n const total = m - 1 + months;\n const ty = y + Math.floor(total / 12);\n const tm = ((total % 12) + 12) % 12;\n // day 0 of the next month = last day of the target month\n const lastDay = new Date(Date.UTC(ty, tm + 1, 0)).getUTCDate();\n return new Date(Date.UTC(ty, tm, Math.min(d, lastDay)))\n .toISOString()\n .slice(0, 10);\n}\n\n/** Is the patient inside the program's age/sex gates? */\nexport function isApplicable(\n history: Pick<PatientHistory, 'age' | 'sex'>,\n program: ProgramMeta\n): boolean {\n if (program.sex && program.sex !== history.sex) return false;\n if (program.ageMin !== undefined && history.age < program.ageMin)\n return false;\n if (program.ageMax !== undefined && history.age > program.ageMax)\n return false;\n return true;\n}\n\n/**\n * Evaluate one program against the history.\n * `now` defaults to today; injectable for tests.\n */\nexport function evaluateProgram(\n key: string,\n program: ProgramMeta,\n history: PatientHistory,\n now: Date = new Date()\n): DueItem {\n const base = { key, program, pendingKeys: [] as string[] };\n if (!isApplicable(history, program)) {\n return { ...base, status: 'not-applicable' };\n }\n\n const satisfying = new Set(flattenOrderKeys(program.orders));\n // Completions come from finished orders, procedures and immunizations —\n // whatever the source system recorded them as.\n const completions: string[] = [];\n for (const o of history.orders) {\n if (!satisfying.has(o.key)) continue;\n if (o.status === 'completed') completions.push(o.date);\n else base.pendingKeys.push(o.key);\n }\n for (const p of history.procedures ?? []) {\n if (satisfying.has(p.key)) completions.push(p.date);\n }\n for (const i of history.immunizations ?? []) {\n if (satisfying.has(i.key)) completions.push(i.date);\n }\n\n const lastCompleted = completions.sort().at(-1);\n\n if (!lastCompleted) {\n return base.pendingKeys.length > 0\n ? { ...base, status: 'pending' }\n : { ...base, status: 'due' };\n }\n\n // One-time programs (no periodicity) stay satisfied once completed.\n if (program.periodicityMonths === undefined) {\n return { ...base, status: 'satisfied', lastCompleted };\n }\n\n const dueDate = addMonths(lastCompleted, program.periodicityMonths);\n if (dueDate > now.toISOString().slice(0, 10)) {\n return { ...base, status: 'satisfied', lastCompleted, dueDate };\n }\n return base.pendingKeys.length > 0\n ? { ...base, status: 'pending', lastCompleted, dueDate }\n : { ...base, status: 'overdue', lastCompleted, dueDate };\n}\n\n/**\n * Evaluate a set of programs against the history, most actionable first\n * (overdue → due → pending → satisfied; not-applicable omitted unless\n * `includeNotApplicable`).\n *\n * `enrolledKeys` restricts occupational programs to the patient's actual\n * enrollments (a clerk isn't due for cadmium surveillance just because the\n * program exists); quality measures apply to everyone passing their gates.\n */\nexport function evaluateDue(\n history: PatientHistory,\n programs: ProgramsMap,\n options?: {\n enrolledKeys?: string[];\n includeNotApplicable?: boolean;\n now?: Date;\n }\n): DueItem[] {\n const enrolled = options?.enrolledKeys ? new Set(options.enrolledKeys) : null;\n const now = options?.now ?? new Date();\n const items: DueItem[] = [];\n for (const [key, program] of Object.entries(programs)) {\n if (enrolled && program.kind !== 'quality' && !enrolled.has(key)) continue;\n const item = evaluateProgram(key, program, history, now);\n if (item.status === 'not-applicable' && !options?.includeNotApplicable)\n continue;\n items.push(item);\n }\n const rank: Record<DueStatus, number> = {\n overdue: 0,\n due: 1,\n pending: 2,\n satisfied: 3,\n 'not-applicable': 4,\n };\n return items.sort(\n (a, b) =>\n rank[a.status] - rank[b.status] ||\n (a.dueDate ?? '').localeCompare(b.dueDate ?? '') ||\n a.key.localeCompare(b.key)\n );\n}\n\n/**\n * Ordering-time prompt: is this order key part of a due/overdue program?\n * Returns the matching due items so the UI can badge \"due for OSHA 1910.95\"\n * or warn \"already satisfied\" while the clinician is ordering.\n */\nexport function dueForOrder(orderKey: string, dueItems: DueItem[]): DueItem[] {\n return dueItems.filter(\n (i) =>\n (i.status === 'due' || i.status === 'overdue') &&\n flattenOrderKeys(i.program.orders).includes(orderKey)\n );\n}\n","/**\n * Order-row builders — flatten the order history and the due-evaluation\n * output into grid-friendly rows (one row per encounter order) for the\n * NITRO-backed ChartOrdersGrid / EncounterOrdersGrid.\n *\n * Pure functions, no I/O. Every field is a flat string so the DataVis engine\n * can group/filter/aggregate on any of them (reason, provider, requisition,\n * status, kind, date).\n */\n\nimport {\n evaluateDue,\n normalizeOrders,\n completedKeys,\n type DueItem,\n type ProgramsMap,\n} from './evaluate';\nimport type { PatientHistory } from './history';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/** Per-order status — finer grained than the program-level DueStatus. */\nexport type OrderRowStatus = 'completed' | 'pending' | 'available' | 'blocked';\n\n/** One encounter order as a flat grid row. */\nexport interface OrderRow {\n /** CODETYPE|FULLCODE of the order */\n orderKey: string;\n /** Order display label */\n order: string;\n /** Reason/concern — the surveillance program or quality measure label */\n reason: string;\n /** Program key (CODETYPE|FULLCODE); '' when no program matches */\n reasonKey: string;\n /** Program kind label ('surveillance', 'quality measure', …) */\n kind: string;\n status: OrderRowStatus;\n /** Completion date (completed) or order date (pending); '' otherwise */\n date: string;\n /** Program due date, when known */\n dueDate: string;\n /** Ordering/performing provider; '' when unknown */\n provider: string;\n /** Requisition the order is bundled into; '' = unprocessed */\n requisitionId: string;\n /** Encounter the order was placed in; '' for not-yet-placed rows */\n encounterId: string;\n /** Unmet prerequisite labels, comma-joined ('' when unblocked) */\n blockedBy: string;\n}\n\nexport interface OrderRowsOptions {\n /** Occupational enrollments; quality measures apply to everyone in-gate */\n enrolledKeys?: string[];\n /** Evaluation clock (defaults to today; inject for determinism) */\n now?: Date;\n /** Display labels for program keys (falls back to the key) */\n programLabels?: Record<string, string>;\n /** Display labels for order keys (falls back to history labels, then key) */\n orderLabels?: Record<string, string>;\n /** Include not-yet-placed due-list orders as available/blocked rows\n * (default true) */\n includeDue?: boolean;\n}\n\nconst KIND_LABEL: Record<string, string> = {\n surveillance: 'surveillance',\n fitness: 'fitness for duty',\n credential: 'credential',\n quality: 'quality measure',\n};\n\n// =============================================================================\n// Internals\n// =============================================================================\n\nfunction labelLookup(\n history: PatientHistory,\n orderLabels?: Record<string, string>\n): (key: string) => string {\n const m = new Map<string, string>();\n const scan = (list?: { key?: string; label?: string }[]) => {\n for (const e of list ?? []) {\n if (e.key && e.label && !m.has(e.key)) m.set(e.key, e.label);\n }\n };\n scan(history.orders);\n scan(history.observations);\n scan(history.procedures);\n scan(history.immunizations);\n return (key) => orderLabels?.[key] ?? m.get(key) ?? key;\n}\n\n/** Map every order key to the due item whose program's order set contains it\n * (first program wins when several share an order). */\nfunction reasonIndex(items: DueItem[]): Map<string, DueItem> {\n const idx = new Map<string, DueItem>();\n for (const item of items) {\n for (const spec of normalizeOrders(item.program.orders)) {\n for (const k of spec.keys) {\n if (!idx.has(k)) idx.set(k, item);\n }\n }\n }\n return idx;\n}\n\n// =============================================================================\n// Builders\n// =============================================================================\n\n/**\n * Chart-wide rows: every past + in-flight order in the history, plus (by\n * default) the actionable due-list orders that haven't been placed yet\n * (`available`, or `blocked` while prerequisites are incomplete).\n */\nexport function buildChartOrderRows(\n history: PatientHistory,\n programs: ProgramsMap,\n options: OrderRowsOptions = {}\n): OrderRow[] {\n const {\n enrolledKeys,\n now,\n programLabels,\n orderLabels,\n includeDue = true,\n } = options;\n const items = evaluateDue(history, programs, { enrolledKeys, now });\n const byOrderKey = reasonIndex(items);\n const orderLabel = labelLookup(history, orderLabels);\n const programLabel = (key: string) => programLabels?.[key] ?? key;\n const completed = completedKeys(history);\n\n const rows: OrderRow[] = [];\n\n const reasonFields = (item?: DueItem) => ({\n reason: item ? programLabel(item.key) : '',\n reasonKey: item?.key ?? '',\n kind: item?.program.kind\n ? (KIND_LABEL[item.program.kind] ?? item.program.kind)\n : '',\n dueDate: item?.dueDate?.slice(0, 10) ?? '',\n });\n\n // 1) Every order in the history (all encounters)\n for (const o of history.orders) {\n rows.push({\n orderKey: o.key,\n order: orderLabel(o.key),\n ...reasonFields(byOrderKey.get(o.key)),\n status: o.status,\n date: o.date.slice(0, 10),\n provider: o.provider ?? '',\n requisitionId: o.requisitionId ?? '',\n encounterId: o.encounterId ?? '',\n blockedBy: '',\n });\n }\n\n // 2) Actionable due-list orders not yet placed\n if (includeDue) {\n const placed = new Set(history.orders.map((o) => o.key));\n for (const item of items) {\n if (item.status === 'satisfied' || item.status === 'not-applicable')\n continue;\n for (const spec of normalizeOrders(item.program.orders)) {\n const unmet = spec.after.filter((k) => !completed.has(k));\n for (const k of spec.keys) {\n if (placed.has(k)) continue;\n rows.push({\n orderKey: k,\n order: orderLabel(k),\n ...reasonFields(item),\n status: unmet.length > 0 ? 'blocked' : 'available',\n date: '',\n provider: '',\n requisitionId: '',\n encounterId: '',\n blockedBy: unmet.map(orderLabel).join(', '),\n });\n }\n }\n }\n }\n\n return rows;\n}\n\n/**\n * Current-encounter rows: the encounter's own orders (pending unprocessed\n * ones are the mass-operation targets) plus the actionable due-list orders\n * available to place this visit.\n */\nexport function buildEncounterOrderRows(\n history: PatientHistory,\n programs: ProgramsMap,\n encounterId: string,\n options: OrderRowsOptions = {}\n): OrderRow[] {\n return buildChartOrderRows(history, programs, options).filter(\n (r) =>\n r.encounterId === encounterId ||\n r.status === 'available' ||\n r.status === 'blocked'\n );\n}\n"]}
@@ -0,0 +1,3 @@
1
+
2
+ //# sourceMappingURL=chunk-RISZWWEQ.js.map
3
+ //# sourceMappingURL=chunk-RISZWWEQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-RISZWWEQ.js"}