@mieweb/ui 0.6.1 → 0.7.0-dev.179
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.
- package/README.md +90 -53
- package/dist/CsvBlock-2A5VEDD3.cjs +15 -0
- package/dist/CsvBlock-2A5VEDD3.cjs.map +1 -0
- package/dist/CsvBlock-D6PWAJ5X.js +6 -0
- package/dist/CsvBlock-D6PWAJ5X.js.map +1 -0
- package/dist/HtmlPreviewBlock-PEHTJ6C3.js +6 -0
- package/dist/HtmlPreviewBlock-PEHTJ6C3.js.map +1 -0
- package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +15 -0
- package/dist/HtmlPreviewBlock-SYXCV5RH.cjs.map +1 -0
- package/dist/MedicationEditor-Bp4NLy7y.d.cts +352 -0
- package/dist/MedicationEditor-Bp4NLy7y.d.ts +352 -0
- package/dist/MermaidBlock-7NK3AVK2.js +6 -0
- package/dist/MermaidBlock-7NK3AVK2.js.map +1 -0
- package/dist/MermaidBlock-AFXNP5NK.cjs +15 -0
- package/dist/MermaidBlock-AFXNP5NK.cjs.map +1 -0
- package/dist/SurveyBlock-6KRNKFH5.cjs +15 -0
- package/dist/SurveyBlock-6KRNKFH5.cjs.map +1 -0
- package/dist/SurveyBlock-NNDGXGG4.js +6 -0
- package/dist/SurveyBlock-NNDGXGG4.js.map +1 -0
- package/dist/ag-grid.cjs +6 -6
- package/dist/ag-grid.cjs.map +1 -1
- package/dist/ag-grid.js +2 -2
- package/dist/ag-grid.js.map +1 -1
- package/dist/brands/index.cjs +17 -17
- package/dist/brands/index.js +4 -4
- package/dist/chunk-372IIHUA.cjs +2017 -0
- package/dist/chunk-372IIHUA.cjs.map +1 -0
- package/dist/{chunk-2DS3RJ2D.js → chunk-3TERETXH.js} +112 -3
- package/dist/chunk-3TERETXH.js.map +1 -0
- package/dist/chunk-44CK4CT2.cjs +336 -0
- package/dist/chunk-44CK4CT2.cjs.map +1 -0
- package/dist/{chunk-FSBFQBNE.cjs → chunk-4GXECTPS.cjs} +2 -2
- package/dist/{chunk-FSBFQBNE.cjs.map → chunk-4GXECTPS.cjs.map} +1 -1
- package/dist/chunk-4LVPQ44A.js +228 -0
- package/dist/chunk-4LVPQ44A.js.map +1 -0
- package/dist/{chunk-6555OYRU.js → chunk-5BQE6BEL.js} +2 -2
- package/dist/{chunk-6555OYRU.js.map → chunk-5BQE6BEL.js.map} +1 -1
- package/dist/chunk-62ZOA6PX.js +31 -0
- package/dist/chunk-62ZOA6PX.js.map +1 -0
- package/dist/chunk-63KVQHGQ.cjs +1802 -0
- package/dist/chunk-63KVQHGQ.cjs.map +1 -0
- package/dist/chunk-6AHYYWVB.js +78 -0
- package/dist/chunk-6AHYYWVB.js.map +1 -0
- package/dist/chunk-6I7IDZ4A.js +51 -0
- package/dist/chunk-6I7IDZ4A.js.map +1 -0
- package/dist/chunk-6ZYE6JUK.cjs +80 -0
- package/dist/chunk-6ZYE6JUK.cjs.map +1 -0
- package/dist/chunk-7QXG5BBB.cjs +164 -0
- package/dist/chunk-7QXG5BBB.cjs.map +1 -0
- package/dist/chunk-7WMSUXOQ.js +182 -0
- package/dist/chunk-7WMSUXOQ.js.map +1 -0
- package/dist/chunk-7XUN3OQT.js +3 -0
- package/dist/{chunk-V2DF2GUE.js.map → chunk-7XUN3OQT.js.map} +1 -1
- package/dist/chunk-7ZVTLTJF.js +109 -0
- package/dist/chunk-7ZVTLTJF.js.map +1 -0
- package/dist/chunk-AES2BKEW.cjs +229 -0
- package/dist/chunk-AES2BKEW.cjs.map +1 -0
- package/dist/chunk-AFKKJEV5.cjs +72 -0
- package/dist/chunk-AFKKJEV5.cjs.map +1 -0
- package/dist/chunk-AT732HC6.cjs +4 -0
- package/dist/{chunk-74K3RRU7.cjs.map → chunk-AT732HC6.cjs.map} +1 -1
- package/dist/chunk-BB4WQ4LV.cjs +137 -0
- package/dist/chunk-BB4WQ4LV.cjs.map +1 -0
- package/dist/chunk-BIT27PPD.js +49 -0
- package/dist/chunk-BIT27PPD.js.map +1 -0
- package/dist/chunk-BLPCYP4D.cjs +537 -0
- package/dist/chunk-BLPCYP4D.cjs.map +1 -0
- package/dist/chunk-BT3ZQJGT.cjs +130 -0
- package/dist/chunk-BT3ZQJGT.cjs.map +1 -0
- package/dist/chunk-BX6BTDTR.js +34 -0
- package/dist/chunk-BX6BTDTR.js.map +1 -0
- package/dist/chunk-C2544GKZ.js +313 -0
- package/dist/chunk-C2544GKZ.js.map +1 -0
- package/dist/chunk-C7RVKV25.cjs +25 -0
- package/dist/chunk-C7RVKV25.cjs.map +1 -0
- package/dist/chunk-CKD554XR.cjs +100 -0
- package/dist/chunk-CKD554XR.cjs.map +1 -0
- package/dist/chunk-CVC4NWFA.cjs +154 -0
- package/dist/chunk-CVC4NWFA.cjs.map +1 -0
- package/dist/{chunk-K3IVCUPP.js → chunk-CYMZ2QS5.js} +2 -2
- package/dist/{chunk-K3IVCUPP.js.map → chunk-CYMZ2QS5.js.map} +1 -1
- package/dist/{chunk-FRT6RQND.cjs → chunk-DAPZPT5N.cjs} +92 -56
- package/dist/chunk-DAPZPT5N.cjs.map +1 -0
- package/dist/chunk-DHKYGVP7.js +3 -0
- package/dist/{chunk-LEMY57MI.js.map → chunk-DHKYGVP7.js.map} +1 -1
- package/dist/chunk-DLNJLCNO.cjs +101 -0
- package/dist/chunk-DLNJLCNO.cjs.map +1 -0
- package/dist/chunk-DUPR6FEL.js +43 -0
- package/dist/chunk-DUPR6FEL.js.map +1 -0
- package/dist/{chunk-4FALCEJI.cjs → chunk-EL2RSQTJ.cjs} +2 -2
- package/dist/{chunk-4FALCEJI.cjs.map → chunk-EL2RSQTJ.cjs.map} +1 -1
- package/dist/chunk-ERLPVXOV.js +22 -0
- package/dist/chunk-ERLPVXOV.js.map +1 -0
- package/dist/chunk-FIWKHLWY.js +197 -0
- package/dist/chunk-FIWKHLWY.js.map +1 -0
- package/dist/chunk-FJH7P5WG.js +513 -0
- package/dist/chunk-FJH7P5WG.js.map +1 -0
- package/dist/chunk-FSGEDDF2.cjs +33 -0
- package/dist/chunk-FSGEDDF2.cjs.map +1 -0
- package/dist/chunk-GLXTVCHN.cjs +4 -0
- package/dist/{chunk-4ZU53GNR.cjs.map → chunk-GLXTVCHN.cjs.map} +1 -1
- package/dist/chunk-HRS6W74P.js +1568 -0
- package/dist/chunk-HRS6W74P.js.map +1 -0
- package/dist/chunk-I2W24RHW.js +196 -0
- package/dist/chunk-I2W24RHW.js.map +1 -0
- package/dist/chunk-I6CY5C6A.js +12 -0
- package/dist/chunk-I6CY5C6A.js.map +1 -0
- package/dist/chunk-IQ4KQJAO.js +3 -0
- package/dist/chunk-IQ4KQJAO.js.map +1 -0
- package/dist/chunk-IWDQPSJN.cjs +1452 -0
- package/dist/chunk-IWDQPSJN.cjs.map +1 -0
- package/dist/chunk-J7KWQJOB.js +14 -0
- package/dist/chunk-J7KWQJOB.js.map +1 -0
- package/dist/{chunk-R25H4N4Z.js → chunk-J7Z7467B.js} +92 -56
- package/dist/chunk-J7Z7467B.js.map +1 -0
- package/dist/{chunk-NINI4WVS.cjs → chunk-JC6Y3LGF.cjs} +297 -84
- package/dist/chunk-JC6Y3LGF.cjs.map +1 -0
- package/dist/chunk-JCNPVK74.cjs +347 -0
- package/dist/chunk-JCNPVK74.cjs.map +1 -0
- package/dist/chunk-JFLC7SHM.cjs +35 -0
- package/dist/chunk-JFLC7SHM.cjs.map +1 -0
- package/dist/chunk-JHYFHEHS.js +1967 -0
- package/dist/chunk-JHYFHEHS.js.map +1 -0
- package/dist/{chunk-IBZXDX4L.cjs → chunk-JQEY53SH.cjs} +112 -3
- package/dist/chunk-JQEY53SH.cjs.map +1 -0
- package/dist/chunk-JTBQNOSL.cjs +1605 -0
- package/dist/chunk-JTBQNOSL.cjs.map +1 -0
- package/dist/chunk-JYZW2PZS.cjs +166 -0
- package/dist/chunk-JYZW2PZS.cjs.map +1 -0
- package/dist/chunk-KBEKQMVY.cjs +198 -0
- package/dist/chunk-KBEKQMVY.cjs.map +1 -0
- package/dist/chunk-KJ5BSGEO.cjs +258 -0
- package/dist/chunk-KJ5BSGEO.cjs.map +1 -0
- package/dist/{chunk-DNPRRYPQ.js → chunk-KL2S36FM.js} +2 -2
- package/dist/chunk-KL2S36FM.js.map +1 -0
- package/dist/chunk-LIH3IZYK.js +689 -0
- package/dist/chunk-LIH3IZYK.js.map +1 -0
- package/dist/chunk-MAMY5HTT.cjs +1177 -0
- package/dist/chunk-MAMY5HTT.cjs.map +1 -0
- package/dist/{chunk-WFS6R2F5.js → chunk-MKWGKASO.js} +114 -101
- package/dist/chunk-MKWGKASO.js.map +1 -0
- package/dist/{chunk-CV4CVGLO.cjs → chunk-MZPF2QGM.cjs} +95 -74
- package/dist/chunk-MZPF2QGM.cjs.map +1 -0
- package/dist/chunk-NQME7MCK.js +1416 -0
- package/dist/chunk-NQME7MCK.js.map +1 -0
- package/dist/chunk-NTYGCBCL.js +543 -0
- package/dist/chunk-NTYGCBCL.js.map +1 -0
- package/dist/chunk-OF7NTZ2I.js +3 -0
- package/dist/chunk-OF7NTZ2I.js.map +1 -0
- package/dist/chunk-OXYFTCRW.cjs +57 -0
- package/dist/chunk-OXYFTCRW.cjs.map +1 -0
- package/dist/chunk-QA6ZDHFP.js +117 -0
- package/dist/chunk-QA6ZDHFP.js.map +1 -0
- package/dist/chunk-RHNPILZQ.cjs +4 -0
- package/dist/chunk-RHNPILZQ.cjs.map +1 -0
- package/dist/chunk-RHYIFIT5.js +98 -0
- package/dist/chunk-RHYIFIT5.js.map +1 -0
- package/dist/chunk-RI56YPED.cjs +201 -0
- package/dist/chunk-RI56YPED.cjs.map +1 -0
- package/dist/chunk-RISZWWEQ.js +3 -0
- package/dist/chunk-RISZWWEQ.js.map +1 -0
- package/dist/chunk-S6Z3KDEM.js +140 -0
- package/dist/chunk-S6Z3KDEM.js.map +1 -0
- package/dist/chunk-S7JQ3FV5.cjs +16 -0
- package/dist/chunk-S7JQ3FV5.cjs.map +1 -0
- package/dist/{chunk-OXGUG57G.cjs → chunk-SNEQXSC5.cjs} +2 -2
- package/dist/{chunk-OXGUG57G.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
- package/dist/chunk-SQHMGT4W.js +164 -0
- package/dist/chunk-SQHMGT4W.js.map +1 -0
- package/dist/{chunk-JHPFOG2N.cjs → chunk-ST2RE5UB.cjs} +30 -18
- package/dist/chunk-ST2RE5UB.cjs.map +1 -0
- package/dist/{chunk-QVJBUWJQ.js → chunk-STPK44AU.js} +46 -12
- package/dist/chunk-STPK44AU.js.map +1 -0
- package/dist/chunk-T3C4RNJ4.js +106 -0
- package/dist/chunk-T3C4RNJ4.js.map +1 -0
- package/dist/chunk-T3RWXOCM.js +148 -0
- package/dist/chunk-T3RWXOCM.js.map +1 -0
- package/dist/{chunk-DCER2QQB.js → chunk-T42BCIUA.js} +2 -2
- package/dist/{chunk-DCER2QQB.js.map → chunk-T42BCIUA.js.map} +1 -1
- package/dist/{chunk-OYKS2JBB.cjs → chunk-TN33E2VN.cjs} +2 -2
- package/dist/chunk-TN33E2VN.cjs.map +1 -0
- package/dist/{chunk-K7IGBNZA.cjs → chunk-TR2OJKQ4.cjs} +46 -12
- package/dist/chunk-TR2OJKQ4.cjs.map +1 -0
- package/dist/chunk-UFYXU7KV.js +135 -0
- package/dist/chunk-UFYXU7KV.js.map +1 -0
- package/dist/chunk-UM6NA7HL.js +1145 -0
- package/dist/chunk-UM6NA7HL.js.map +1 -0
- package/dist/chunk-UO3KEUYK.cjs +220 -0
- package/dist/chunk-UO3KEUYK.cjs.map +1 -0
- package/dist/chunk-UOOH356R.cjs +66 -0
- package/dist/chunk-UOOH356R.cjs.map +1 -0
- package/dist/{chunk-4ZU53GNR.cjs → chunk-UTYUT5YY.cjs} +62 -2
- package/dist/chunk-UTYUT5YY.cjs.map +1 -0
- package/dist/chunk-UVSODK6V.cjs +53 -0
- package/dist/chunk-UVSODK6V.cjs.map +1 -0
- package/dist/chunk-V25Z5GR6.cjs +184 -0
- package/dist/chunk-V25Z5GR6.cjs.map +1 -0
- package/dist/chunk-VBWRH4UW.cjs +4 -0
- package/dist/chunk-VBWRH4UW.cjs.map +1 -0
- package/dist/chunk-VJOVJTFP.cjs +370 -0
- package/dist/chunk-VJOVJTFP.cjs.map +1 -0
- package/dist/{chunk-7BARESXI.cjs → chunk-VPNURIAY.cjs} +114 -101
- package/dist/chunk-VPNURIAY.cjs.map +1 -0
- package/dist/{chunk-I56VBDSC.js → chunk-XDFDVF2O.js} +30 -18
- package/dist/chunk-XDFDVF2O.js.map +1 -0
- package/dist/chunk-XL7TTKHP.js +327 -0
- package/dist/chunk-XL7TTKHP.js.map +1 -0
- package/dist/chunk-Y2S6QMKU.js +78 -0
- package/dist/chunk-Y2S6QMKU.js.map +1 -0
- package/dist/chunk-Y4ESBDQ5.cjs +552 -0
- package/dist/chunk-Y4ESBDQ5.cjs.map +1 -0
- package/dist/chunk-Y5KEFV5O.js +192 -0
- package/dist/chunk-Y5KEFV5O.js.map +1 -0
- package/dist/chunk-YBLIDESO.js +365 -0
- package/dist/chunk-YBLIDESO.js.map +1 -0
- package/dist/chunk-YVLP3ATI.js +1776 -0
- package/dist/chunk-YVLP3ATI.js.map +1 -0
- package/dist/chunk-YVPC65ZJ.cjs +134 -0
- package/dist/chunk-YVPC65ZJ.cjs.map +1 -0
- package/dist/{chunk-MPOWJVV4.js → chunk-YZT62IMX.js} +95 -74
- package/dist/chunk-YZT62IMX.js.map +1 -0
- package/dist/chunk-ZAIEQWRA.js +207 -0
- package/dist/chunk-ZAIEQWRA.js.map +1 -0
- package/dist/chunk-ZDEYV373.cjs +139 -0
- package/dist/chunk-ZDEYV373.cjs.map +1 -0
- package/dist/{chunk-Q7NBJFEB.js → chunk-ZGSC2CB2.js} +2 -2
- package/dist/{chunk-Q7NBJFEB.js.map → chunk-ZGSC2CB2.js.map} +1 -1
- package/dist/{chunk-3M4P2KMG.cjs → chunk-ZHBANUBI.cjs} +2 -2
- package/dist/{chunk-3M4P2KMG.cjs.map → chunk-ZHBANUBI.cjs.map} +1 -1
- package/dist/components/AlertDialog/index.cjs +18 -0
- package/dist/components/AlertDialog/index.cjs.map +1 -0
- package/dist/components/AlertDialog/index.d.cts +56 -0
- package/dist/components/AlertDialog/index.d.ts +56 -0
- package/dist/components/AlertDialog/index.js +9 -0
- package/dist/components/AlertDialog/index.js.map +1 -0
- package/dist/components/AudioRecorder/index.d.cts +1 -1
- package/dist/components/AudioRecorder/index.d.ts +1 -1
- package/dist/components/Autocomplete/index.cjs +16 -0
- package/dist/components/Autocomplete/index.cjs.map +1 -0
- package/dist/components/Autocomplete/index.d.cts +77 -0
- package/dist/components/Autocomplete/index.d.ts +77 -0
- package/dist/components/Autocomplete/index.js +7 -0
- package/dist/components/Autocomplete/index.js.map +1 -0
- package/dist/components/Badge/index.cjs +4 -3
- package/dist/components/Badge/index.js +2 -1
- package/dist/components/Card/index.cjs +16 -15
- package/dist/components/Card/index.js +2 -1
- package/dist/components/Collapsible/index.cjs +21 -0
- package/dist/components/Collapsible/index.cjs.map +1 -0
- package/dist/components/Collapsible/index.d.cts +33 -0
- package/dist/components/Collapsible/index.d.ts +33 -0
- package/dist/components/Collapsible/index.js +4 -0
- package/dist/components/Collapsible/index.js.map +1 -0
- package/dist/components/CountryCodeDropdown/index.cjs +6 -5
- package/dist/components/CountryCodeDropdown/index.js +3 -2
- package/dist/components/DateInput/index.cjs +2 -2
- package/dist/components/DateInput/index.d.cts +8 -2
- package/dist/components/DateInput/index.d.ts +8 -2
- package/dist/components/DateInput/index.js +1 -1
- package/dist/components/Dropdown/index.cjs +9 -8
- package/dist/components/Dropdown/index.d.cts +2 -1
- package/dist/components/Dropdown/index.d.ts +2 -1
- package/dist/components/Dropdown/index.js +3 -2
- package/dist/components/FloatingWindow/index.cjs +18 -0
- package/dist/components/FloatingWindow/index.cjs.map +1 -0
- package/dist/components/FloatingWindow/index.d.cts +64 -0
- package/dist/components/FloatingWindow/index.d.ts +64 -0
- package/dist/components/FloatingWindow/index.js +5 -0
- package/dist/components/FloatingWindow/index.js.map +1 -0
- package/dist/components/Label/index.cjs +17 -0
- package/dist/components/Label/index.cjs.map +1 -0
- package/dist/components/Label/index.d.cts +23 -0
- package/dist/components/Label/index.d.ts +23 -0
- package/dist/components/Label/index.js +4 -0
- package/dist/components/Label/index.js.map +1 -0
- package/dist/components/Markdown/index.cjs +51 -0
- package/dist/components/Markdown/index.cjs.map +1 -0
- package/dist/components/Markdown/index.css +331 -0
- package/dist/components/Markdown/index.css.map +1 -0
- package/dist/components/Markdown/index.d.cts +82 -0
- package/dist/components/Markdown/index.d.ts +82 -0
- package/dist/components/Markdown/index.js +10 -0
- package/dist/components/Markdown/index.js.map +1 -0
- package/dist/components/Markdown/styles.css +354 -0
- package/dist/components/MediaEditor/index.cjs +44 -0
- package/dist/components/MediaEditor/index.cjs.map +1 -0
- package/dist/components/MediaEditor/index.d.cts +151 -0
- package/dist/components/MediaEditor/index.d.ts +151 -0
- package/dist/components/MediaEditor/index.js +19 -0
- package/dist/components/MediaEditor/index.js.map +1 -0
- package/dist/components/MediaPlayer/index.cjs +24 -0
- package/dist/components/MediaPlayer/index.cjs.map +1 -0
- package/dist/components/MediaPlayer/index.d.cts +71 -0
- package/dist/components/MediaPlayer/index.d.ts +71 -0
- package/dist/components/MediaPlayer/index.js +7 -0
- package/dist/components/MediaPlayer/index.js.map +1 -0
- package/dist/components/RecordButton/index.cjs +4 -4
- package/dist/components/RecordButton/index.js +1 -1
- package/dist/components/RichTextEditor/index.cjs +33 -0
- package/dist/components/RichTextEditor/index.cjs.map +1 -0
- package/dist/components/RichTextEditor/index.d.cts +62 -0
- package/dist/components/RichTextEditor/index.d.ts +62 -0
- package/dist/components/RichTextEditor/index.js +12 -0
- package/dist/components/RichTextEditor/index.js.map +1 -0
- package/dist/components/ScrollArea/index.cjs +17 -0
- package/dist/components/ScrollArea/index.cjs.map +1 -0
- package/dist/components/ScrollArea/index.d.cts +22 -0
- package/dist/components/ScrollArea/index.d.ts +22 -0
- package/dist/components/ScrollArea/index.js +4 -0
- package/dist/components/ScrollArea/index.js.map +1 -0
- package/dist/components/Select/index.cjs +5 -3
- package/dist/components/Select/index.js +3 -1
- package/dist/components/Separator/index.cjs +17 -0
- package/dist/components/Separator/index.cjs.map +1 -0
- package/dist/components/Separator/index.d.cts +27 -0
- package/dist/components/Separator/index.d.ts +27 -0
- package/dist/components/Separator/index.js +4 -0
- package/dist/components/Separator/index.js.map +1 -0
- package/dist/components/Sheet/index.cjs +48 -0
- package/dist/components/Sheet/index.cjs.map +1 -0
- package/dist/components/Sheet/index.d.cts +62 -0
- package/dist/components/Sheet/index.d.ts +62 -0
- package/dist/components/Sheet/index.js +7 -0
- package/dist/components/Sheet/index.js.map +1 -0
- package/dist/components/SuperChat/index.cjs +1373 -0
- package/dist/components/SuperChat/index.cjs.map +1 -0
- package/dist/components/SuperChat/index.d.cts +189 -0
- package/dist/components/SuperChat/index.d.ts +189 -0
- package/dist/components/SuperChat/index.js +1336 -0
- package/dist/components/SuperChat/index.js.map +1 -0
- package/dist/components/SuperChat/plugins/index.cjs +1292 -0
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -0
- package/dist/components/SuperChat/plugins/index.d.cts +233 -0
- package/dist/components/SuperChat/plugins/index.d.ts +233 -0
- package/dist/components/SuperChat/plugins/index.js +1252 -0
- package/dist/components/SuperChat/plugins/index.js.map +1 -0
- package/dist/components/Table/index.cjs +9 -9
- package/dist/components/Table/index.d.cts +4 -0
- package/dist/components/Table/index.d.ts +4 -0
- package/dist/components/Table/index.js +1 -1
- package/dist/components/ThemeProvider/index.cjs +7 -7
- package/dist/components/ThemeProvider/index.js +1 -1
- package/dist/components/Toggle/index.cjs +17 -0
- package/dist/components/Toggle/index.cjs.map +1 -0
- package/dist/components/Toggle/index.d.cts +28 -0
- package/dist/components/Toggle/index.d.ts +28 -0
- package/dist/components/Toggle/index.js +4 -0
- package/dist/components/Toggle/index.js.map +1 -0
- package/dist/components/TranscriptView/index.cjs +21 -0
- package/dist/components/TranscriptView/index.cjs.map +1 -0
- package/dist/components/TranscriptView/index.d.cts +55 -0
- package/dist/components/TranscriptView/index.d.ts +55 -0
- package/dist/components/TranscriptView/index.js +4 -0
- package/dist/components/TranscriptView/index.js.map +1 -0
- package/dist/datavis.cjs +268 -227
- package/dist/datavis.cjs.map +1 -1
- package/dist/datavis.d.cts +83 -9
- package/dist/datavis.d.ts +83 -9
- package/dist/datavis.js +235 -229
- package/dist/datavis.js.map +1 -1
- package/dist/esheet.cjs +184 -0
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.d.cts +117 -0
- package/dist/esheet.d.ts +117 -0
- package/dist/esheet.js +163 -0
- package/dist/esheet.js.map +1 -1
- package/dist/hey-buddy-CLUVAY2X.cjs +1133 -0
- package/dist/hey-buddy-CLUVAY2X.cjs.map +1 -0
- package/dist/hey-buddy-NMSWZ4TN.js +1131 -0
- package/dist/hey-buddy-NMSWZ4TN.js.map +1 -0
- package/dist/hooks/index.cjs +76 -16
- package/dist/hooks/index.d.cts +151 -2
- package/dist/hooks/index.d.ts +151 -2
- package/dist/hooks/index.js +6 -2
- package/dist/html-MdxqSzjD.d.cts +13 -0
- package/dist/html-MdxqSzjD.d.ts +13 -0
- package/dist/index.cjs +10394 -6565
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +331 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +2022 -249
- package/dist/index.d.ts +2022 -249
- package/dist/index.js +9223 -5969
- package/dist/index.js.map +1 -1
- package/dist/kerebron.cjs +119 -0
- package/dist/kerebron.cjs.map +1 -0
- package/dist/kerebron.css +11 -0
- package/dist/kerebron.d.cts +23 -0
- package/dist/kerebron.d.ts +23 -0
- package/dist/kerebron.js +116 -0
- package/dist/kerebron.js.map +1 -0
- package/dist/nitroTableGrid-3J2GY6CK.cjs +47 -0
- package/dist/nitroTableGrid-3J2GY6CK.cjs.map +1 -0
- package/dist/nitroTableGrid-SIMT7635.js +25 -0
- package/dist/nitroTableGrid-SIMT7635.js.map +1 -0
- package/dist/orderRows-BUJYgSc7.d.cts +221 -0
- package/dist/orderRows-BUJYgSc7.d.ts +221 -0
- package/dist/speaker-verify-5GTWAN5Y.cjs +357 -0
- package/dist/speaker-verify-5GTWAN5Y.cjs.map +1 -0
- package/dist/speaker-verify-R67P433H.js +355 -0
- package/dist/speaker-verify-R67P433H.js.map +1 -0
- package/dist/styles/init.css +5 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/transcript-oaWqY3yr.d.cts +81 -0
- package/dist/transcript-oaWqY3yr.d.ts +81 -0
- package/dist/types-BYnLjEFg.d.cts +248 -0
- package/dist/types-BYnLjEFg.d.ts +248 -0
- package/dist/types-CBh8Zlje.d.cts +240 -0
- package/dist/types-CyCwYBlr.d.ts +240 -0
- package/dist/useAnchoredPosition-nXdSFKHf.d.cts +65 -0
- package/dist/useAnchoredPosition-nXdSFKHf.d.ts +65 -0
- package/dist/useTranscriptEdits-BUylQFg0.d.cts +168 -0
- package/dist/useTranscriptEdits-CWYnjbGP.d.ts +168 -0
- package/dist/utils/index.cjs +27 -18
- package/dist/utils/index.d.cts +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +3 -2
- package/package.json +180 -55
- package/dist/chunk-2DS3RJ2D.js.map +0 -1
- package/dist/chunk-74K3RRU7.cjs +0 -4
- package/dist/chunk-7BARESXI.cjs.map +0 -1
- package/dist/chunk-CV4CVGLO.cjs.map +0 -1
- package/dist/chunk-DNPRRYPQ.js.map +0 -1
- package/dist/chunk-FRT6RQND.cjs.map +0 -1
- package/dist/chunk-HYEJLKXI.js +0 -476
- package/dist/chunk-HYEJLKXI.js.map +0 -1
- package/dist/chunk-I56VBDSC.js.map +0 -1
- package/dist/chunk-IBZXDX4L.cjs.map +0 -1
- package/dist/chunk-IKMR2ADM.cjs +0 -25
- package/dist/chunk-IKMR2ADM.cjs.map +0 -1
- package/dist/chunk-JHPFOG2N.cjs.map +0 -1
- package/dist/chunk-K7IGBNZA.cjs.map +0 -1
- package/dist/chunk-LEMY57MI.js +0 -3
- package/dist/chunk-MPOWJVV4.js.map +0 -1
- package/dist/chunk-NINI4WVS.cjs.map +0 -1
- package/dist/chunk-OKBR6PX4.js +0 -23
- package/dist/chunk-OKBR6PX4.js.map +0 -1
- package/dist/chunk-OYKS2JBB.cjs.map +0 -1
- package/dist/chunk-QVJBUWJQ.js.map +0 -1
- package/dist/chunk-R25H4N4Z.js.map +0 -1
- package/dist/chunk-V2DF2GUE.js +0 -3
- package/dist/chunk-WFS6R2F5.js.map +0 -1
- package/dist/ozwell.cjs +0 -385
- package/dist/ozwell.cjs.map +0 -1
- package/dist/ozwell.d.cts +0 -15
- package/dist/ozwell.d.ts +0 -15
- package/dist/ozwell.js +0 -360
- package/dist/ozwell.js.map +0 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// src/components/HealthSurveillance/evaluate.ts
|
|
2
|
+
function normalizeOrders(orders) {
|
|
3
|
+
return (orders ?? []).map(
|
|
4
|
+
(o) => typeof o === "string" ? { keys: [o], after: [] } : { keys: o.alt ?? (o.key ? [o.key] : []), after: o.after ?? [] }
|
|
5
|
+
).filter((s) => s.keys.length > 0);
|
|
6
|
+
}
|
|
7
|
+
function flattenOrderKeys(orders) {
|
|
8
|
+
return normalizeOrders(orders).flatMap((s) => s.keys);
|
|
9
|
+
}
|
|
10
|
+
function completedKeys(history) {
|
|
11
|
+
const done = /* @__PURE__ */ new Set();
|
|
12
|
+
for (const o of history.orders) {
|
|
13
|
+
if (o.status === "completed") done.add(o.key);
|
|
14
|
+
}
|
|
15
|
+
for (const p of history.procedures ?? []) done.add(p.key);
|
|
16
|
+
for (const i of history.immunizations ?? []) done.add(i.key);
|
|
17
|
+
return done;
|
|
18
|
+
}
|
|
19
|
+
function addMonths(iso, months) {
|
|
20
|
+
const [y, m, d] = iso.slice(0, 10).split("-").map(Number);
|
|
21
|
+
const total = m - 1 + months;
|
|
22
|
+
const ty = y + Math.floor(total / 12);
|
|
23
|
+
const tm = (total % 12 + 12) % 12;
|
|
24
|
+
const lastDay = new Date(Date.UTC(ty, tm + 1, 0)).getUTCDate();
|
|
25
|
+
return new Date(Date.UTC(ty, tm, Math.min(d, lastDay))).toISOString().slice(0, 10);
|
|
26
|
+
}
|
|
27
|
+
function isApplicable(history, program) {
|
|
28
|
+
if (program.sex && program.sex !== history.sex) return false;
|
|
29
|
+
if (program.ageMin !== void 0 && history.age < program.ageMin)
|
|
30
|
+
return false;
|
|
31
|
+
if (program.ageMax !== void 0 && history.age > program.ageMax)
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
function evaluateProgram(key, program, history, now = /* @__PURE__ */ new Date()) {
|
|
36
|
+
const base = { key, program, pendingKeys: [] };
|
|
37
|
+
if (!isApplicable(history, program)) {
|
|
38
|
+
return { ...base, status: "not-applicable" };
|
|
39
|
+
}
|
|
40
|
+
const satisfying = new Set(flattenOrderKeys(program.orders));
|
|
41
|
+
const completions = [];
|
|
42
|
+
for (const o of history.orders) {
|
|
43
|
+
if (!satisfying.has(o.key)) continue;
|
|
44
|
+
if (o.status === "completed") completions.push(o.date);
|
|
45
|
+
else base.pendingKeys.push(o.key);
|
|
46
|
+
}
|
|
47
|
+
for (const p of history.procedures ?? []) {
|
|
48
|
+
if (satisfying.has(p.key)) completions.push(p.date);
|
|
49
|
+
}
|
|
50
|
+
for (const i of history.immunizations ?? []) {
|
|
51
|
+
if (satisfying.has(i.key)) completions.push(i.date);
|
|
52
|
+
}
|
|
53
|
+
const lastCompleted = completions.sort().at(-1);
|
|
54
|
+
if (!lastCompleted) {
|
|
55
|
+
return base.pendingKeys.length > 0 ? { ...base, status: "pending" } : { ...base, status: "due" };
|
|
56
|
+
}
|
|
57
|
+
if (program.periodicityMonths === void 0) {
|
|
58
|
+
return { ...base, status: "satisfied", lastCompleted };
|
|
59
|
+
}
|
|
60
|
+
const dueDate = addMonths(lastCompleted, program.periodicityMonths);
|
|
61
|
+
if (dueDate > now.toISOString().slice(0, 10)) {
|
|
62
|
+
return { ...base, status: "satisfied", lastCompleted, dueDate };
|
|
63
|
+
}
|
|
64
|
+
return base.pendingKeys.length > 0 ? { ...base, status: "pending", lastCompleted, dueDate } : { ...base, status: "overdue", lastCompleted, dueDate };
|
|
65
|
+
}
|
|
66
|
+
function evaluateDue(history, programs, options) {
|
|
67
|
+
const enrolled = options?.enrolledKeys ? new Set(options.enrolledKeys) : null;
|
|
68
|
+
const now = options?.now ?? /* @__PURE__ */ new Date();
|
|
69
|
+
const items = [];
|
|
70
|
+
for (const [key, program] of Object.entries(programs)) {
|
|
71
|
+
if (enrolled && program.kind !== "quality" && !enrolled.has(key)) continue;
|
|
72
|
+
const item = evaluateProgram(key, program, history, now);
|
|
73
|
+
if (item.status === "not-applicable" && !options?.includeNotApplicable)
|
|
74
|
+
continue;
|
|
75
|
+
items.push(item);
|
|
76
|
+
}
|
|
77
|
+
const rank = {
|
|
78
|
+
overdue: 0,
|
|
79
|
+
due: 1,
|
|
80
|
+
pending: 2,
|
|
81
|
+
satisfied: 3,
|
|
82
|
+
"not-applicable": 4
|
|
83
|
+
};
|
|
84
|
+
return items.sort(
|
|
85
|
+
(a, b) => rank[a.status] - rank[b.status] || (a.dueDate ?? "").localeCompare(b.dueDate ?? "") || a.key.localeCompare(b.key)
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
function dueForOrder(orderKey, dueItems) {
|
|
89
|
+
return dueItems.filter(
|
|
90
|
+
(i) => (i.status === "due" || i.status === "overdue") && flattenOrderKeys(i.program.orders).includes(orderKey)
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// src/components/HealthSurveillance/orderRows.ts
|
|
95
|
+
var KIND_LABEL = {
|
|
96
|
+
surveillance: "surveillance",
|
|
97
|
+
fitness: "fitness for duty",
|
|
98
|
+
credential: "credential",
|
|
99
|
+
quality: "quality measure"
|
|
100
|
+
};
|
|
101
|
+
function labelLookup(history, orderLabels) {
|
|
102
|
+
const m = /* @__PURE__ */ new Map();
|
|
103
|
+
const scan = (list) => {
|
|
104
|
+
for (const e of list ?? []) {
|
|
105
|
+
if (e.key && e.label && !m.has(e.key)) m.set(e.key, e.label);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
scan(history.orders);
|
|
109
|
+
scan(history.observations);
|
|
110
|
+
scan(history.procedures);
|
|
111
|
+
scan(history.immunizations);
|
|
112
|
+
return (key) => orderLabels?.[key] ?? m.get(key) ?? key;
|
|
113
|
+
}
|
|
114
|
+
function reasonIndex(items) {
|
|
115
|
+
const idx = /* @__PURE__ */ new Map();
|
|
116
|
+
for (const item of items) {
|
|
117
|
+
for (const spec of normalizeOrders(item.program.orders)) {
|
|
118
|
+
for (const k of spec.keys) {
|
|
119
|
+
if (!idx.has(k)) idx.set(k, item);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return idx;
|
|
124
|
+
}
|
|
125
|
+
function buildChartOrderRows(history, programs, options = {}) {
|
|
126
|
+
const {
|
|
127
|
+
enrolledKeys,
|
|
128
|
+
now,
|
|
129
|
+
programLabels,
|
|
130
|
+
orderLabels,
|
|
131
|
+
includeDue = true
|
|
132
|
+
} = options;
|
|
133
|
+
const items = evaluateDue(history, programs, { enrolledKeys, now });
|
|
134
|
+
const byOrderKey = reasonIndex(items);
|
|
135
|
+
const orderLabel = labelLookup(history, orderLabels);
|
|
136
|
+
const programLabel = (key) => programLabels?.[key] ?? key;
|
|
137
|
+
const completed = completedKeys(history);
|
|
138
|
+
const rows = [];
|
|
139
|
+
const reasonFields = (item) => ({
|
|
140
|
+
reason: item ? programLabel(item.key) : "",
|
|
141
|
+
reasonKey: item?.key ?? "",
|
|
142
|
+
kind: item?.program.kind ? KIND_LABEL[item.program.kind] ?? item.program.kind : "",
|
|
143
|
+
dueDate: item?.dueDate?.slice(0, 10) ?? ""
|
|
144
|
+
});
|
|
145
|
+
for (const o of history.orders) {
|
|
146
|
+
rows.push({
|
|
147
|
+
orderKey: o.key,
|
|
148
|
+
order: orderLabel(o.key),
|
|
149
|
+
...reasonFields(byOrderKey.get(o.key)),
|
|
150
|
+
status: o.status,
|
|
151
|
+
date: o.date.slice(0, 10),
|
|
152
|
+
provider: o.provider ?? "",
|
|
153
|
+
requisitionId: o.requisitionId ?? "",
|
|
154
|
+
encounterId: o.encounterId ?? "",
|
|
155
|
+
blockedBy: ""
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
if (includeDue) {
|
|
159
|
+
const placed = new Set(history.orders.map((o) => o.key));
|
|
160
|
+
for (const item of items) {
|
|
161
|
+
if (item.status === "satisfied" || item.status === "not-applicable")
|
|
162
|
+
continue;
|
|
163
|
+
for (const spec of normalizeOrders(item.program.orders)) {
|
|
164
|
+
const unmet = spec.after.filter((k) => !completed.has(k));
|
|
165
|
+
for (const k of spec.keys) {
|
|
166
|
+
if (placed.has(k)) continue;
|
|
167
|
+
rows.push({
|
|
168
|
+
orderKey: k,
|
|
169
|
+
order: orderLabel(k),
|
|
170
|
+
...reasonFields(item),
|
|
171
|
+
status: unmet.length > 0 ? "blocked" : "available",
|
|
172
|
+
date: "",
|
|
173
|
+
provider: "",
|
|
174
|
+
requisitionId: "",
|
|
175
|
+
encounterId: "",
|
|
176
|
+
blockedBy: unmet.map(orderLabel).join(", ")
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return rows;
|
|
183
|
+
}
|
|
184
|
+
function buildEncounterOrderRows(history, programs, encounterId, options = {}) {
|
|
185
|
+
return buildChartOrderRows(history, programs, options).filter(
|
|
186
|
+
(r) => r.encounterId === encounterId || r.status === "available" || r.status === "blocked"
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
export { buildChartOrderRows, buildEncounterOrderRows, completedKeys, dueForOrder, evaluateDue, evaluateProgram, isApplicable, normalizeOrders };
|
|
191
|
+
//# sourceMappingURL=chunk-Y5KEFV5O.js.map
|
|
192
|
+
//# sourceMappingURL=chunk-Y5KEFV5O.js.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-Y5KEFV5O.js","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,365 @@
|
|
|
1
|
+
import { createContext, useRef, useContext, useMemo, useState, useCallback } from 'react';
|
|
2
|
+
import { Source, ComputedView } from 'datavis-ace';
|
|
3
|
+
import { useView, buildAggregateFunctions, getBuiltinGroupFunctions, DataGrid, TableRenderer, GraphView, determineColumns } from '@mieweb/datavis';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
// src/components/DataVisNITRO/DataVisNITRO.tsx
|
|
7
|
+
var DataVisNitroContext = createContext(null);
|
|
8
|
+
function isObject(value) {
|
|
9
|
+
return typeof value === "object" && value !== null;
|
|
10
|
+
}
|
|
11
|
+
function normalizeTypeInfo(typeInfo) {
|
|
12
|
+
if (Array.isArray(typeInfo)) {
|
|
13
|
+
return Object.fromEntries(
|
|
14
|
+
typeInfo.filter(isObject).map((entry) => [entry.field, entry])
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
if (!isObject(typeInfo)) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
const maybeOrdMap = typeInfo;
|
|
21
|
+
if (typeof maybeOrdMap.keys === "function" && typeof maybeOrdMap.get === "function") {
|
|
22
|
+
return Object.fromEntries(
|
|
23
|
+
maybeOrdMap.keys().map((field) => [field, maybeOrdMap.get?.(field) ?? {}])
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
return Object.fromEntries(
|
|
27
|
+
Object.entries(typeInfo).filter(([, value]) => isObject(value))
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
function normalizeFieldType(type) {
|
|
31
|
+
if (!type) return void 0;
|
|
32
|
+
if (type === "integer") return "number";
|
|
33
|
+
if (type === "boolean") return "string";
|
|
34
|
+
return type;
|
|
35
|
+
}
|
|
36
|
+
function buildColumnFromField(field, typeInfo) {
|
|
37
|
+
const info = typeInfo[field];
|
|
38
|
+
const normalizedType = normalizeFieldType(info?.type);
|
|
39
|
+
return {
|
|
40
|
+
field,
|
|
41
|
+
header: info?.displayText ?? field,
|
|
42
|
+
sortable: true,
|
|
43
|
+
filterable: true,
|
|
44
|
+
resizable: true,
|
|
45
|
+
reorderable: true,
|
|
46
|
+
...normalizedType ? {
|
|
47
|
+
typeInfo: {
|
|
48
|
+
type: normalizedType,
|
|
49
|
+
...info?.format !== void 0 ? { format: info.format } : {},
|
|
50
|
+
...info?.internalType !== void 0 ? { internalType: info.internalType } : {}
|
|
51
|
+
}
|
|
52
|
+
} : {}
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function mergeColumnWithTypeInfo(column, typeInfo) {
|
|
56
|
+
const fallbackColumn = buildColumnFromField(column.field, typeInfo);
|
|
57
|
+
return {
|
|
58
|
+
...fallbackColumn,
|
|
59
|
+
...column,
|
|
60
|
+
header: column.header ?? fallbackColumn.header,
|
|
61
|
+
typeInfo: column.typeInfo ?? fallbackColumn.typeInfo
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function buildResolvedColumns(columns, fallbackFields, typeInfo) {
|
|
65
|
+
if (columns && columns.length > 0) {
|
|
66
|
+
return columns.map((column) => {
|
|
67
|
+
if (typeof column === "string") {
|
|
68
|
+
return buildColumnFromField(column, typeInfo);
|
|
69
|
+
}
|
|
70
|
+
return mergeColumnWithTypeInfo(column, typeInfo);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return fallbackFields.map((field) => buildColumnFromField(field, typeInfo));
|
|
74
|
+
}
|
|
75
|
+
function buildFallbackFieldOrder(typeInfo, data) {
|
|
76
|
+
const rows = Array.isArray(data) ? data.filter((row) => isObject(row)) : null;
|
|
77
|
+
const normalizedEntries = Object.fromEntries(
|
|
78
|
+
Object.entries(typeInfo).map(([field, info]) => [
|
|
79
|
+
field,
|
|
80
|
+
{
|
|
81
|
+
type: normalizeFieldType(info.type) ?? "string",
|
|
82
|
+
...info.displayText !== void 0 ? { displayText: info.displayText } : {}
|
|
83
|
+
}
|
|
84
|
+
])
|
|
85
|
+
);
|
|
86
|
+
return determineColumns(null, normalizedEntries, rows);
|
|
87
|
+
}
|
|
88
|
+
function buildControlFields(columns) {
|
|
89
|
+
return columns.map((column) => ({
|
|
90
|
+
field: column.field,
|
|
91
|
+
displayName: column.header,
|
|
92
|
+
type: column.typeInfo?.type
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
function buildAggregateFields(columns) {
|
|
96
|
+
return columns.map((column) => ({
|
|
97
|
+
field: column.field,
|
|
98
|
+
displayName: column.header
|
|
99
|
+
}));
|
|
100
|
+
}
|
|
101
|
+
function mergeTableDef(tableDef, features) {
|
|
102
|
+
if (!tableDef && !features) {
|
|
103
|
+
return void 0;
|
|
104
|
+
}
|
|
105
|
+
const { rowMode, ...featureFlags } = features ?? {};
|
|
106
|
+
const mergedFeatures = Object.keys(featureFlags).length > 0 ? {
|
|
107
|
+
...tableDef?.features ?? {},
|
|
108
|
+
...featureFlags
|
|
109
|
+
} : void 0;
|
|
110
|
+
return {
|
|
111
|
+
...tableDef,
|
|
112
|
+
...rowMode !== void 0 ? { rowMode } : {},
|
|
113
|
+
...mergedFeatures ? { features: mergedFeatures } : {}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function DataVisNitroSource(props) {
|
|
117
|
+
const { type, children } = props;
|
|
118
|
+
const url = props.type === "http" ? props.url : void 0;
|
|
119
|
+
const varName = props.type === "local" ? props.varName : void 0;
|
|
120
|
+
const viewRef = useRef(null);
|
|
121
|
+
if (viewRef.current === null || viewRef.current._dvType !== type || viewRef.current._dvUrl !== url || viewRef.current._dvVarName !== varName) {
|
|
122
|
+
const source = props.type === "http" ? new Source({ type, url: props.url }) : new Source(
|
|
123
|
+
props.type === "local" && props.varName ? { type, varName: props.varName } : { type }
|
|
124
|
+
);
|
|
125
|
+
viewRef.current = Object.assign(
|
|
126
|
+
new ComputedView(source),
|
|
127
|
+
{ _dvType: type, _dvUrl: url, _dvVarName: varName }
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
return /* @__PURE__ */ jsx(DataVisNitroContext.Provider, { value: viewRef.current, children });
|
|
131
|
+
}
|
|
132
|
+
function DataVisNitroGridInner({
|
|
133
|
+
computedView,
|
|
134
|
+
columns,
|
|
135
|
+
allColumns,
|
|
136
|
+
features,
|
|
137
|
+
filterColumns,
|
|
138
|
+
controlFields,
|
|
139
|
+
aggregateFields,
|
|
140
|
+
aggregateFunctions,
|
|
141
|
+
groupFunctionDefs,
|
|
142
|
+
tableDef,
|
|
143
|
+
formatCell,
|
|
144
|
+
onColumnReorder,
|
|
145
|
+
onColumnResize,
|
|
146
|
+
onHeaderContextMenu,
|
|
147
|
+
onRowClick,
|
|
148
|
+
onRowDoubleClick,
|
|
149
|
+
onSelectionChange,
|
|
150
|
+
style,
|
|
151
|
+
trans,
|
|
152
|
+
...dataGridProps
|
|
153
|
+
}) {
|
|
154
|
+
const viewState = useView(computedView, false);
|
|
155
|
+
const normalizedTypeInfo = useMemo(
|
|
156
|
+
() => normalizeTypeInfo(viewState.typeInfo ?? computedView?.typeInfo ?? null),
|
|
157
|
+
[computedView, viewState.typeInfo]
|
|
158
|
+
);
|
|
159
|
+
const fallbackFields = useMemo(
|
|
160
|
+
() => buildFallbackFieldOrder(normalizedTypeInfo, viewState.data?.data ?? null),
|
|
161
|
+
[normalizedTypeInfo, viewState.data?.data]
|
|
162
|
+
);
|
|
163
|
+
const resolvedAllColumns = useMemo(() => {
|
|
164
|
+
if (allColumns && allColumns.length > 0) {
|
|
165
|
+
return allColumns.map(
|
|
166
|
+
(column) => mergeColumnWithTypeInfo(column, normalizedTypeInfo)
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return buildResolvedColumns(columns, fallbackFields, normalizedTypeInfo);
|
|
170
|
+
}, [allColumns, columns, fallbackFields, normalizedTypeInfo]);
|
|
171
|
+
const resolvedColumns = useMemo(() => {
|
|
172
|
+
if (columns && columns.length > 0) {
|
|
173
|
+
return buildResolvedColumns(
|
|
174
|
+
columns,
|
|
175
|
+
fallbackFields,
|
|
176
|
+
normalizedTypeInfo
|
|
177
|
+
).filter((column) => column.visible !== false);
|
|
178
|
+
}
|
|
179
|
+
return resolvedAllColumns.filter((column) => column.visible !== false);
|
|
180
|
+
}, [columns, fallbackFields, normalizedTypeInfo, resolvedAllColumns]);
|
|
181
|
+
const effectiveAggregateFunctions = useMemo(
|
|
182
|
+
() => aggregateFunctions ?? buildAggregateFunctions(),
|
|
183
|
+
[aggregateFunctions]
|
|
184
|
+
);
|
|
185
|
+
const effectiveGroupFunctionDefs = useMemo(
|
|
186
|
+
() => groupFunctionDefs ?? getBuiltinGroupFunctions(trans),
|
|
187
|
+
[groupFunctionDefs, trans]
|
|
188
|
+
);
|
|
189
|
+
const effectiveTableDef = useMemo(
|
|
190
|
+
() => mergeTableDef(tableDef, features),
|
|
191
|
+
[tableDef, features]
|
|
192
|
+
);
|
|
193
|
+
const aggFnLabels = useMemo(
|
|
194
|
+
() => Object.fromEntries(
|
|
195
|
+
effectiveAggregateFunctions.map((fn) => [fn.name, fn.label])
|
|
196
|
+
),
|
|
197
|
+
[effectiveAggregateFunctions]
|
|
198
|
+
);
|
|
199
|
+
return /* @__PURE__ */ jsx("div", { style, children: /* @__PURE__ */ jsx(
|
|
200
|
+
DataGrid,
|
|
201
|
+
{
|
|
202
|
+
...dataGridProps,
|
|
203
|
+
view: computedView,
|
|
204
|
+
tableDef: effectiveTableDef,
|
|
205
|
+
allColumns: resolvedAllColumns,
|
|
206
|
+
filterColumns: filterColumns ?? [],
|
|
207
|
+
controlFields: controlFields ?? buildControlFields(resolvedAllColumns),
|
|
208
|
+
aggregateFields: aggregateFields ?? buildAggregateFields(resolvedAllColumns),
|
|
209
|
+
aggregateFunctions: effectiveAggregateFunctions,
|
|
210
|
+
groupFunctionDefs: effectiveGroupFunctionDefs,
|
|
211
|
+
children: /* @__PURE__ */ jsx(
|
|
212
|
+
TableRenderer,
|
|
213
|
+
{
|
|
214
|
+
viewData: viewState.data,
|
|
215
|
+
columns: resolvedColumns,
|
|
216
|
+
features: effectiveTableDef?.features ?? features,
|
|
217
|
+
totalRows: viewState.totalRowCount ?? viewState.rowCount,
|
|
218
|
+
loading: viewState.loading || !viewState.ready,
|
|
219
|
+
formatCell,
|
|
220
|
+
aggFnLabels,
|
|
221
|
+
onColumnReorder,
|
|
222
|
+
onColumnResize,
|
|
223
|
+
onHeaderContextMenu,
|
|
224
|
+
onRowClick,
|
|
225
|
+
onRowDoubleClick,
|
|
226
|
+
onSelectionChange
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
}
|
|
230
|
+
) });
|
|
231
|
+
}
|
|
232
|
+
function DataVisNitroGrid(props) {
|
|
233
|
+
const computedView = useContext(DataVisNitroContext);
|
|
234
|
+
if (computedView === null) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
return /* @__PURE__ */ jsx(DataVisNitroGridInner, { ...props, computedView });
|
|
238
|
+
}
|
|
239
|
+
DataVisNitroSource.displayName = "DataVisNitroSource";
|
|
240
|
+
DataVisNitroGrid.displayName = "DataVisNitroGrid";
|
|
241
|
+
function isObject2(value) {
|
|
242
|
+
return typeof value === "object" && value !== null;
|
|
243
|
+
}
|
|
244
|
+
function normalizeTypeInfo2(typeInfo) {
|
|
245
|
+
if (Array.isArray(typeInfo)) {
|
|
246
|
+
return Object.fromEntries(
|
|
247
|
+
typeInfo.filter(isObject2).map((entry) => [entry.field, entry])
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
if (!isObject2(typeInfo)) {
|
|
251
|
+
return {};
|
|
252
|
+
}
|
|
253
|
+
const maybeOrdMap = typeInfo;
|
|
254
|
+
if (typeof maybeOrdMap.keys === "function" && typeof maybeOrdMap.get === "function") {
|
|
255
|
+
return Object.fromEntries(
|
|
256
|
+
maybeOrdMap.keys().map((field) => [field, maybeOrdMap.get?.(field) ?? {}])
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
return Object.fromEntries(
|
|
260
|
+
Object.entries(typeInfo).filter(([, value]) => isObject2(value))
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
function normalizeFieldType2(type) {
|
|
264
|
+
if (!type) return void 0;
|
|
265
|
+
if (type === "integer") return "number";
|
|
266
|
+
if (type === "boolean") return "string";
|
|
267
|
+
return type;
|
|
268
|
+
}
|
|
269
|
+
function buildColumnFromField2(field, typeInfo) {
|
|
270
|
+
const info = typeInfo[field];
|
|
271
|
+
const normalizedType = normalizeFieldType2(info?.type);
|
|
272
|
+
return {
|
|
273
|
+
field,
|
|
274
|
+
header: info?.displayText ?? field,
|
|
275
|
+
sortable: true,
|
|
276
|
+
filterable: true,
|
|
277
|
+
resizable: true,
|
|
278
|
+
reorderable: true,
|
|
279
|
+
...normalizedType ? {
|
|
280
|
+
typeInfo: {
|
|
281
|
+
type: normalizedType,
|
|
282
|
+
...info?.format !== void 0 ? { format: info.format } : {},
|
|
283
|
+
...info?.internalType !== void 0 ? { internalType: info.internalType } : {}
|
|
284
|
+
}
|
|
285
|
+
} : {}
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
function buildResolvedColumns2(columns, fallbackFields, typeInfo) {
|
|
289
|
+
if (columns && columns.length > 0) {
|
|
290
|
+
return columns.map((column) => {
|
|
291
|
+
if (typeof column === "string") {
|
|
292
|
+
return buildColumnFromField2(column, typeInfo);
|
|
293
|
+
}
|
|
294
|
+
return column;
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
return fallbackFields.map((field) => buildColumnFromField2(field, typeInfo));
|
|
298
|
+
}
|
|
299
|
+
function buildFallbackFieldOrder2(typeInfo, data) {
|
|
300
|
+
const rows = Array.isArray(data) ? data.filter((row) => isObject2(row)) : null;
|
|
301
|
+
const normalizedEntries = Object.fromEntries(
|
|
302
|
+
Object.entries(typeInfo).map(([field, info]) => [
|
|
303
|
+
field,
|
|
304
|
+
{
|
|
305
|
+
type: normalizeFieldType2(info.type) ?? "string",
|
|
306
|
+
...info.displayText !== void 0 ? { displayText: info.displayText } : {}
|
|
307
|
+
}
|
|
308
|
+
])
|
|
309
|
+
);
|
|
310
|
+
return determineColumns(null, normalizedEntries, rows);
|
|
311
|
+
}
|
|
312
|
+
function DataVisNitroGraphInner({
|
|
313
|
+
computedView,
|
|
314
|
+
columns,
|
|
315
|
+
config: initialConfig,
|
|
316
|
+
locale,
|
|
317
|
+
className,
|
|
318
|
+
height,
|
|
319
|
+
onConfigChange
|
|
320
|
+
}) {
|
|
321
|
+
const viewState = useView(computedView);
|
|
322
|
+
const [liveConfig, setLiveConfig] = useState(initialConfig);
|
|
323
|
+
const handleConfigChange = useCallback(
|
|
324
|
+
(newConfig) => {
|
|
325
|
+
setLiveConfig(newConfig);
|
|
326
|
+
onConfigChange?.(newConfig);
|
|
327
|
+
},
|
|
328
|
+
[onConfigChange]
|
|
329
|
+
);
|
|
330
|
+
const normalizedTypeInfo = useMemo(
|
|
331
|
+
() => normalizeTypeInfo2(viewState.typeInfo ?? computedView?.typeInfo ?? null),
|
|
332
|
+
[computedView, viewState.typeInfo]
|
|
333
|
+
);
|
|
334
|
+
const fallbackFields = useMemo(
|
|
335
|
+
() => buildFallbackFieldOrder2(normalizedTypeInfo, viewState.data?.data ?? null),
|
|
336
|
+
[normalizedTypeInfo, viewState.data?.data]
|
|
337
|
+
);
|
|
338
|
+
const resolvedColumns = useMemo(
|
|
339
|
+
() => buildResolvedColumns2(columns, fallbackFields, normalizedTypeInfo),
|
|
340
|
+
[columns, fallbackFields, normalizedTypeInfo]
|
|
341
|
+
);
|
|
342
|
+
return /* @__PURE__ */ jsx("div", { className: "wcdv-graph", style: height ? { height } : void 0, children: /* @__PURE__ */ jsx(
|
|
343
|
+
GraphView,
|
|
344
|
+
{
|
|
345
|
+
viewData: viewState.data,
|
|
346
|
+
columns: resolvedColumns,
|
|
347
|
+
config: liveConfig,
|
|
348
|
+
locale,
|
|
349
|
+
className,
|
|
350
|
+
onConfigChange: handleConfigChange
|
|
351
|
+
}
|
|
352
|
+
) });
|
|
353
|
+
}
|
|
354
|
+
function DataVisNitroGraph(props) {
|
|
355
|
+
const computedView = useContext(DataVisNitroContext);
|
|
356
|
+
if (computedView === null) {
|
|
357
|
+
return null;
|
|
358
|
+
}
|
|
359
|
+
return /* @__PURE__ */ jsx(DataVisNitroGraphInner, { ...props, computedView });
|
|
360
|
+
}
|
|
361
|
+
DataVisNitroGraph.displayName = "DataVisNitroGraph";
|
|
362
|
+
|
|
363
|
+
export { DataVisNitroContext, DataVisNitroGraph, DataVisNitroGrid, DataVisNitroSource };
|
|
364
|
+
//# sourceMappingURL=chunk-YBLIDESO.js.map
|
|
365
|
+
//# sourceMappingURL=chunk-YBLIDESO.js.map
|