@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.
- 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 +2020 -249
- package/dist/index.d.ts +2020 -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
package/dist/index.d.ts
CHANGED
|
@@ -3,22 +3,36 @@ import * as class_variance_authority_types from 'class-variance-authority/types'
|
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import React__default, { ReactNode } from 'react';
|
|
5
5
|
import { VariantProps } from 'class-variance-authority';
|
|
6
|
+
import { d as MCPToolCall, M as MCPResourceLink, e as MCPToolStatus, f as AIMessage, b as AIRenderTextContent, g as AIChatCallbacks, h as AIChatSession, i as AISuggestedAction } from './types-BYnLjEFg.js';
|
|
7
|
+
export { A as AIMessageContent, j as AIMessageRole, a as AIMessageStatus, c as AITextRenderContext, k as MCPResource, l as MCPToolInfo, m as MCPToolParameter, n as MCPToolResult } from './types-BYnLjEFg.js';
|
|
6
8
|
export { Alert, AlertDescription, AlertProps, AlertTitle, alertVariants } from './components/Alert/index.js';
|
|
9
|
+
export { AlertDialog, AlertDialogProps } from './components/AlertDialog/index.js';
|
|
10
|
+
import { M as Medication, a as MedicationAction, C as CodeLookupConfig, A as Allergy } from './MedicationEditor-Bp4NLy7y.js';
|
|
11
|
+
export { b as ALLERGY_TYPE_LABELS, c as AllergyAction, d as AllergyCode, e as AllergyKind, f as AllergyList, g as AllergyListProps, h as AllergySeverity, i as AllergyType, j as MEDICATION_STATUS_LABELS, k as MedicationCode, l as MedicationEditor, m as MedicationEditorProps, n as MedicationList, o as MedicationListProps, p as MedicationLookupProps, q as MedicationLookupResult, r as MedicationStatus, s as labelToMedicationFields, t as lookupToMedicationFields, u as parseMedicationLabel, v as parseSig } from './MedicationEditor-Bp4NLy7y.js';
|
|
7
12
|
export { AudioPlayer, AudioPlayerProps, AudioPlayerRef, AudioPlayerState, ProgressBar, audioPlayerVariants, formatAudioTime, playButtonVariants } from './components/AudioPlayer/index.js';
|
|
8
13
|
export { AudioRecorder, AudioRecorderControlsRenderProps, AudioRecorderProps, AudioRecorderState, audioRecorderVariants, controlButtonVariants, formatTime, waveformContainerVariants } from './components/AudioRecorder/index.js';
|
|
14
|
+
export { Autocomplete, AutocompleteProps } from './components/Autocomplete/index.js';
|
|
9
15
|
export { Avatar, AvatarGroup, AvatarGroupProps, AvatarProps, avatarVariants, getInitials } from './components/Avatar/index.js';
|
|
10
16
|
export { Badge, BadgeProps, badgeVariants } from './components/Badge/index.js';
|
|
11
17
|
export { Breadcrumb, BreadcrumbItem, BreadcrumbProps, BreadcrumbSlash } from './components/Breadcrumb/index.js';
|
|
12
18
|
export { Button, ButtonProps, buttonVariants } from './components/Button/index.js';
|
|
13
19
|
export { Card, CardActions, CardActionsProps, CardBadge, CardBadgeProps, CardCollapsible, CardCollapsibleProps, CardContent, CardDescription, CardDivider, CardFooter, CardHeader, CardMedia, CardMediaProps, CardProps, CardStat, CardStatProps, CardTitle, CardTitleProps, cardAccentVariants, cardVariants } from './components/Card/index.js';
|
|
14
20
|
export { Checkbox, CheckboxGroup, CheckboxGroupProps, CheckboxProps, checkboxVariants } from './components/Checkbox/index.js';
|
|
21
|
+
export { Collapsible, CollapsibleContent, CollapsibleContentProps, CollapsibleProps, CollapsibleTrigger, CollapsibleTriggerProps } from './components/Collapsible/index.js';
|
|
15
22
|
export { CountryCodeDropdown, CountryCodeDropdownProps, CountryData, formatE164, validatePhoneNumber } from './components/CountryCodeDropdown/index.js';
|
|
16
|
-
export { DateInput, DateInputMode, DateInputProps } from './components/DateInput/index.js';
|
|
23
|
+
export { DateInput, DateInputMode, DateInputProps, DateInputType } from './components/DateInput/index.js';
|
|
17
24
|
export { Dropdown, DropdownContent, DropdownContentProps, DropdownHeader, DropdownHeaderProps, DropdownItem, DropdownItemProps, DropdownLabel, DropdownPlacement, DropdownProps, DropdownSeparator } from './components/Dropdown/index.js';
|
|
25
|
+
export { FloatingWindow, FloatingWindowProps, MinimizedWindow, MinimizedWindowProps } from './components/FloatingWindow/index.js';
|
|
26
|
+
import { P as PatientHistory, a as ProgramsMap } from './orderRows-BUJYgSc7.js';
|
|
27
|
+
export { D as DueItem, b as DueStatus, H as HistoryAllergy, c as HistoryCondition, d as HistoryImmunization, e as HistoryMedication, f as HistoryObservation, g as HistoryOrder, h as HistoryProcedure, I as IsoDate, O as OrderRow, i as OrderRowStatus, j as OrderRowsOptions, k as ProgramMeta, l as buildChartOrderRows, m as buildEncounterOrderRows, n as dueForOrder, o as evaluateDue, p as evaluateProgram, q as isApplicable } from './orderRows-BUJYgSc7.js';
|
|
18
28
|
import { InputProps } from './components/Input/index.js';
|
|
19
29
|
export { Input, inputVariants } from './components/Input/index.js';
|
|
30
|
+
export { Label, LabelProps, labelVariants } from './components/Label/index.js';
|
|
20
31
|
import { SpinnerProps } from './components/Spinner/index.js';
|
|
21
32
|
export { FullPageSpinner, FullPageSpinnerProps, Spinner, SpinnerWithLabel, SpinnerWithLabelProps, spinnerVariants } from './components/Spinner/index.js';
|
|
33
|
+
export { CodeBlock, CsvBlock, FenceBlock, FenceBlockProps, HtmlPreviewBlock, MarkdownRenderer, MarkdownRendererProps, MermaidBlock, SurveyBlock, UseMarkdownResult, highlightCode, useMarkdown } from './components/Markdown/index.js';
|
|
34
|
+
export { FillerWordsModal, FillerWordsModalProps, MediaEditor, MediaEditorProps, SilenceSettingsModal, SilenceSettingsModalProps, SpeedMarkerMenu, SpeedMarkerMenuProps, WordEditorModal, WordEditorModalProps } from './components/MediaEditor/index.js';
|
|
35
|
+
export { MediaKind, MediaPlayer, MediaPlayerProps, MediaPlayerRef, MediaPlayerState, inferMediaKind, mediaPlayerVariants } from './components/MediaPlayer/index.js';
|
|
22
36
|
export { Modal, ModalBody, ModalBodyProps, ModalClose, ModalCloseProps, ModalFooter, ModalFooterProps, ModalHeader, ModalHeaderProps, ModalProps, ModalTitle, ModalTitleProps, modalContentVariants, modalOverlayVariants } from './components/Modal/index.js';
|
|
23
37
|
export { Pagination, PaginationProps, SimplePagination, SimplePaginationProps, paginationButtonVariants } from './components/Pagination/index.js';
|
|
24
38
|
export { PhoneEntry, PhoneInput, PhoneInputGroup, PhoneInputGroupProps, PhoneInputProps, PhoneType } from './components/PhoneInput/index.js';
|
|
@@ -26,22 +40,32 @@ export { CircularProgress, CircularProgressProps, Progress, ProgressProps, circu
|
|
|
26
40
|
export { QuickAction, QuickActionColor, QuickActionGroup, QuickActionGroupProps, QuickActionIcons, QuickActionProps, quickActionIconVariants, quickActionVariants } from './components/QuickAction/index.js';
|
|
27
41
|
export { Radio, RadioGroup, RadioGroupProps, RadioProps, radioVariants } from './components/Radio/index.js';
|
|
28
42
|
export { RecordButton, RecordButtonProps, RecordButtonSize, RecordButtonState, RecordButtonVariant, TranscriptionResult, TranscriptionState, formatDuration, recordButtonVariants } from './components/RecordButton/index.js';
|
|
43
|
+
export { RichTextEditor, RichTextEditorProps, RichTextVariable, RichTextVariableGroup, convertAngleBracketsToMustache, processDictation } from './components/RichTextEditor/index.js';
|
|
29
44
|
export { DateButton, DateButtonProps, DatePicker, DatePickerProps, RadioOption, RadioOptionProps, SchedulePicker, SchedulePickerProps, TimeButton, TimeButtonProps, TimePicker, TimePickerProps, dateButtonVariants, radioOptionVariants, timeButtonVariants } from './components/SchedulePicker/index.js';
|
|
45
|
+
export { ScrollArea, ScrollAreaProps, scrollAreaVariants } from './components/ScrollArea/index.js';
|
|
30
46
|
export { Select, SelectGroup, SelectOption, SelectProps, selectTriggerVariants } from './components/Select/index.js';
|
|
47
|
+
export { Separator, SeparatorProps, separatorVariants } from './components/Separator/index.js';
|
|
48
|
+
export { Sheet, SheetBody, SheetBodyProps, SheetClose, SheetCloseProps, SheetDescription, SheetDescriptionProps, SheetFooter, SheetFooterProps, SheetHeader, SheetHeaderProps, SheetProps, SheetTitle, SheetTitleProps, sheetContentVariants, sheetOverlayVariants } from './components/Sheet/index.js';
|
|
31
49
|
export { Skeleton, SkeletonCard, SkeletonCardProps, SkeletonProps, SkeletonTable, SkeletonTableProps, SkeletonText, SkeletonTextProps, skeletonVariants } from './components/Skeleton/index.js';
|
|
32
50
|
export { Slider, SliderProps, sliderRangeVariants, sliderThumbVariants, sliderTrackVariants } from './components/Slider/index.js';
|
|
33
51
|
export { Switch, SwitchProps, switchThumbVariants, switchTrackVariants } from './components/Switch/index.js';
|
|
34
52
|
export { Table, TableBody, TableBodyProps, TableCaption, TableCaptionProps, TableCell, TableCellProps, TableFooter, TableFooterProps, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableProps, TableRow, TableRowProps } from './components/Table/index.js';
|
|
35
53
|
import { UseScrollSpyOptions } from './hooks/index.js';
|
|
36
|
-
export { KeyboardShortcutOptions, UseScrollSpyReturn, useClickOutside, useCommandK, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useMediaQuery, usePrefersReducedMotion, useScrollSpy } from './hooks/index.js';
|
|
54
|
+
export { DragOverState, KeyboardShortcutOptions, MediaTransportState, UseDragReorderOptions, UseDragReorderReturn, UseMediaTransportOptions, UseMediaTransportReturn, UseScrollSpyReturn, dragIndicatorClasses, reorderIds, useClickOutside, useCommandK, useDragReorder, useEscapeKey, useFocusTrap, useIsDesktop, useIsLargeDesktop, useIsMobile, useIsMobileOrTablet, useIsSmallTablet, useIsTablet, useKeyboardShortcut, useLiveAnnouncement, useMediaQuery, useMediaTransport, usePrefersReducedMotion, useScrollSpy } from './hooks/index.js';
|
|
37
55
|
export { Tabs, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTrigger, TabsTriggerProps, tabsListVariants, tabsTriggerVariants } from './components/Tabs/index.js';
|
|
38
56
|
export { SmallMuted, Text, TextProps, textVariants } from './components/Text/index.js';
|
|
39
57
|
export { Textarea, TextareaProps, textareaVariants } from './components/Textarea/index.js';
|
|
40
58
|
export { ThemeProvider, ThemeProviderContext, ThemeProviderContextValue, ThemeProviderProps, ThemeToggle, ThemeToggleProps, themeToggleIconVariants, themeToggleVariants, useThemeContext } from './components/ThemeProvider/index.js';
|
|
59
|
+
export { Toggle, ToggleProps, toggleVariants } from './components/Toggle/index.js';
|
|
41
60
|
export { Tooltip, TooltipPlacement, TooltipProps } from './components/Tooltip/index.js';
|
|
61
|
+
export { TranscriptGranularity, TranscriptView, TranscriptViewProps, formatTimestampMs } from './components/TranscriptView/index.js';
|
|
62
|
+
export { E as EditableWord, c as PLAYBACK_SPEEDS, a as PlaybackSegment, P as PlaybackSpeed, d as Speaker, S as SpeedMarker, T as Transcript, b as TranscriptWord, W as WordType } from './transcript-oaWqY3yr.js';
|
|
42
63
|
export { VisuallyHidden, VisuallyHiddenProps } from './components/VisuallyHidden/index.js';
|
|
43
64
|
export { R as ResolvedTheme, T as Theme, u as useTheme } from './useTheme-B9SWu6ui.js';
|
|
65
|
+
export { A as AnchoredPlacement, U as UseAnchoredPositionOptions, a as UseAnchoredPositionReturn, u as useAnchoredPosition } from './useAnchoredPosition-nXdSFKHf.js';
|
|
66
|
+
export { D as DEFAULT_FILLER_WORDS, a as DEFAULT_MIN_SILENCE_MS, b as DEFAULT_NL_SILENCE_MS, F as FillerAnalysis, S as SilenceThresholdCount, T as TranscriptClipboard, c as TranscriptEditStats, U as UseTranscriptEditsOptions, d as UseTranscriptEditsResult, e as buildPlaybackSegments, g as getSpeedAtIndex, i as initEditableWords, f as insertSilences, u as useTranscriptEdits } from './useTranscriptEdits-CWYnjbGP.js';
|
|
44
67
|
export { calculateAge, cn, dateToDisplayFormat, displayFormatToDateString, formatDateValue, formatPhoneNumber, isDateEmpty, isDateInFuture, isDateInPast, isPhoneNumberEmpty, isStorybookDocsMode, isValidDate, isValidDrivingAge, isValidPhoneNumber, parseDateValue, unformatPhoneNumber } from './utils/index.js';
|
|
68
|
+
export { i as isHtmlEmpty, s as stripHtmlTags } from './html-MdxqSzjD.js';
|
|
45
69
|
export { default as miewebUIPreset, miewebUISafelist } from './tailwind-preset.js';
|
|
46
70
|
export { brands, defaultBrand, enterpriseHealthBrand, miewebBrand, wagglelineBrand, webchartBrand } from './brands/index.js';
|
|
47
71
|
export { BrandBorderRadius, BrandBoxShadow, BrandColors, BrandConfig, BrandTypography, ColorScale, SemanticColors, createBrandPreset, generateBrandCSS, generateTailwindTheme } from './brands/types.js';
|
|
@@ -410,235 +434,6 @@ declare namespace AddressForm {
|
|
|
410
434
|
var displayName: string;
|
|
411
435
|
}
|
|
412
436
|
|
|
413
|
-
/**
|
|
414
|
-
* AI Component Types
|
|
415
|
-
*
|
|
416
|
-
* Type definitions for AI-related components including MCP (Model Context Protocol)
|
|
417
|
-
* interactions, tool calls, and chat messages.
|
|
418
|
-
*/
|
|
419
|
-
|
|
420
|
-
/**
|
|
421
|
-
* Status of an MCP tool invocation
|
|
422
|
-
*/
|
|
423
|
-
type MCPToolStatus = 'pending' | 'running' | 'success' | 'error' | 'cancelled';
|
|
424
|
-
/**
|
|
425
|
-
* MCP Tool parameter definition
|
|
426
|
-
*/
|
|
427
|
-
interface MCPToolParameter {
|
|
428
|
-
name: string;
|
|
429
|
-
type: string;
|
|
430
|
-
value: unknown;
|
|
431
|
-
description?: string;
|
|
432
|
-
}
|
|
433
|
-
/**
|
|
434
|
-
* MCP Tool invocation
|
|
435
|
-
*/
|
|
436
|
-
interface MCPToolCall {
|
|
437
|
-
/** Unique identifier for this tool call */
|
|
438
|
-
id: string;
|
|
439
|
-
/** Name of the tool being invoked */
|
|
440
|
-
toolName: string;
|
|
441
|
-
/** Human-readable description of what the tool does */
|
|
442
|
-
description?: string;
|
|
443
|
-
/** Parameters passed to the tool */
|
|
444
|
-
parameters: MCPToolParameter[];
|
|
445
|
-
/** Current status of the tool execution */
|
|
446
|
-
status: MCPToolStatus;
|
|
447
|
-
/** Timestamp when tool was invoked */
|
|
448
|
-
startedAt: Date | string;
|
|
449
|
-
/** Timestamp when tool completed */
|
|
450
|
-
completedAt?: Date | string;
|
|
451
|
-
/** Duration in milliseconds */
|
|
452
|
-
duration?: number;
|
|
453
|
-
/** Result data if successful */
|
|
454
|
-
result?: MCPToolResult;
|
|
455
|
-
/** Error message if failed */
|
|
456
|
-
error?: string;
|
|
457
|
-
}
|
|
458
|
-
/**
|
|
459
|
-
* Result from an MCP tool execution
|
|
460
|
-
*/
|
|
461
|
-
interface MCPToolResult {
|
|
462
|
-
/** Type of result data */
|
|
463
|
-
type: 'text' | 'json' | 'link' | 'resource' | 'error';
|
|
464
|
-
/** The result data */
|
|
465
|
-
data: unknown;
|
|
466
|
-
/** Human-readable summary of the result */
|
|
467
|
-
summary?: string;
|
|
468
|
-
/** Link to a resource (for link type) */
|
|
469
|
-
link?: MCPResourceLink;
|
|
470
|
-
/** Resources created or modified */
|
|
471
|
-
resources?: MCPResource[];
|
|
472
|
-
}
|
|
473
|
-
/**
|
|
474
|
-
* Link to a resource
|
|
475
|
-
*/
|
|
476
|
-
interface MCPResourceLink {
|
|
477
|
-
/** URL or path to the resource */
|
|
478
|
-
href: string;
|
|
479
|
-
/** Display text for the link */
|
|
480
|
-
label: string;
|
|
481
|
-
/** Type of resource */
|
|
482
|
-
type?: 'patient' | 'document' | 'appointment' | 'order' | 'provider' | 'external' | 'internal';
|
|
483
|
-
/** Icon name or component */
|
|
484
|
-
icon?: string;
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* MCP Resource definition
|
|
488
|
-
*/
|
|
489
|
-
interface MCPResource {
|
|
490
|
-
/** Unique identifier */
|
|
491
|
-
id: string;
|
|
492
|
-
/** Resource type (e.g., 'patient', 'appointment', 'document') */
|
|
493
|
-
type: string;
|
|
494
|
-
/** Display name */
|
|
495
|
-
name: string;
|
|
496
|
-
/** URL to access the resource */
|
|
497
|
-
uri?: string;
|
|
498
|
-
/** Brief description */
|
|
499
|
-
description?: string;
|
|
500
|
-
/** Additional metadata */
|
|
501
|
-
metadata?: Record<string, unknown>;
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Role of the message sender
|
|
505
|
-
*/
|
|
506
|
-
type AIMessageRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
507
|
-
/**
|
|
508
|
-
* Status of an AI message
|
|
509
|
-
*/
|
|
510
|
-
type AIMessageStatus = 'pending' | 'streaming' | 'complete' | 'error';
|
|
511
|
-
/**
|
|
512
|
-
* Content block within a message
|
|
513
|
-
*/
|
|
514
|
-
interface AIMessageContent {
|
|
515
|
-
/** Type of content */
|
|
516
|
-
type: 'text' | 'tool_use' | 'tool_result' | 'thinking' | 'code';
|
|
517
|
-
/** Text content */
|
|
518
|
-
text?: string;
|
|
519
|
-
/** Tool call reference */
|
|
520
|
-
toolCall?: MCPToolCall;
|
|
521
|
-
/** Language for code blocks */
|
|
522
|
-
language?: string;
|
|
523
|
-
/** Whether this content is collapsed by default */
|
|
524
|
-
collapsed?: boolean;
|
|
525
|
-
}
|
|
526
|
-
/**
|
|
527
|
-
* AI Chat Message
|
|
528
|
-
*/
|
|
529
|
-
interface AIMessage {
|
|
530
|
-
/** Unique identifier */
|
|
531
|
-
id: string;
|
|
532
|
-
/** Role of sender */
|
|
533
|
-
role: AIMessageRole;
|
|
534
|
-
/** Message content blocks */
|
|
535
|
-
content: AIMessageContent[];
|
|
536
|
-
/** Timestamp */
|
|
537
|
-
timestamp: Date | string;
|
|
538
|
-
/** Current status */
|
|
539
|
-
status: AIMessageStatus;
|
|
540
|
-
/** Model used (for assistant messages) */
|
|
541
|
-
model?: string;
|
|
542
|
-
/** Token usage info */
|
|
543
|
-
usage?: {
|
|
544
|
-
promptTokens?: number;
|
|
545
|
-
completionTokens?: number;
|
|
546
|
-
totalTokens?: number;
|
|
547
|
-
};
|
|
548
|
-
/** Custom metadata */
|
|
549
|
-
metadata?: Record<string, unknown>;
|
|
550
|
-
}
|
|
551
|
-
/** Context passed to a custom text content renderer. */
|
|
552
|
-
interface AITextRenderContext {
|
|
553
|
-
/** id of the parent message (useful as a render cache key) */
|
|
554
|
-
messageId: string;
|
|
555
|
-
/** true while the message is still streaming */
|
|
556
|
-
streaming: boolean;
|
|
557
|
-
/** role of the parent message */
|
|
558
|
-
role: AIMessage['role'];
|
|
559
|
-
}
|
|
560
|
-
/**
|
|
561
|
-
* Render-prop for customizing `text` content blocks. Host is responsible
|
|
562
|
-
* for sanitizing untrusted input.
|
|
563
|
-
*/
|
|
564
|
-
type AIRenderTextContent = (text: string, ctx: AITextRenderContext) => React$1.ReactNode;
|
|
565
|
-
/**
|
|
566
|
-
* Suggested action/prompt
|
|
567
|
-
*/
|
|
568
|
-
interface AISuggestedAction {
|
|
569
|
-
/** Unique identifier */
|
|
570
|
-
id: string;
|
|
571
|
-
/** Display label */
|
|
572
|
-
label: string;
|
|
573
|
-
/** Full prompt text */
|
|
574
|
-
prompt: string;
|
|
575
|
-
/** Icon name */
|
|
576
|
-
icon?: string;
|
|
577
|
-
/** Category for grouping */
|
|
578
|
-
category?: string;
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
|
-
* AI Chat session
|
|
582
|
-
*/
|
|
583
|
-
interface AIChatSession {
|
|
584
|
-
/** Unique session identifier */
|
|
585
|
-
id: string;
|
|
586
|
-
/** Session title */
|
|
587
|
-
title?: string;
|
|
588
|
-
/** Messages in the session */
|
|
589
|
-
messages: AIMessage[];
|
|
590
|
-
/** Available tools */
|
|
591
|
-
availableTools?: MCPToolInfo[];
|
|
592
|
-
/** Created timestamp */
|
|
593
|
-
createdAt: Date | string;
|
|
594
|
-
/** Last updated timestamp */
|
|
595
|
-
updatedAt: Date | string;
|
|
596
|
-
/** Whether the assistant is currently generating */
|
|
597
|
-
isGenerating: boolean;
|
|
598
|
-
/** Context information */
|
|
599
|
-
context?: {
|
|
600
|
-
/** Current page/location */
|
|
601
|
-
page?: string;
|
|
602
|
-
/** Selected entity */
|
|
603
|
-
entity?: MCPResource;
|
|
604
|
-
/** Additional context */
|
|
605
|
-
custom?: Record<string, unknown>;
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* Information about an available MCP tool
|
|
610
|
-
*/
|
|
611
|
-
interface MCPToolInfo {
|
|
612
|
-
/** Tool name */
|
|
613
|
-
name: string;
|
|
614
|
-
/** Human-readable description */
|
|
615
|
-
description: string;
|
|
616
|
-
/** Input schema */
|
|
617
|
-
inputSchema?: Record<string, unknown>;
|
|
618
|
-
/** Category for grouping */
|
|
619
|
-
category?: string;
|
|
620
|
-
/** Whether the tool is enabled */
|
|
621
|
-
enabled?: boolean;
|
|
622
|
-
}
|
|
623
|
-
interface AIChatCallbacks {
|
|
624
|
-
/** Called when user sends a message */
|
|
625
|
-
onSendMessage?: (message: string) => void | Promise<void>;
|
|
626
|
-
/** Called when a tool call is initiated */
|
|
627
|
-
onToolCall?: (toolCall: MCPToolCall) => void | Promise<void>;
|
|
628
|
-
/** Called when a tool call completes */
|
|
629
|
-
onToolComplete?: (toolCall: MCPToolCall, result: MCPToolResult) => void;
|
|
630
|
-
/** Called when user clicks a resource link */
|
|
631
|
-
onResourceClick?: (resource: MCPResource | MCPResourceLink) => void;
|
|
632
|
-
/** Called when user selects a suggested action */
|
|
633
|
-
onSuggestedAction?: (action: AISuggestedAction) => void;
|
|
634
|
-
/** Called when user wants to cancel generation */
|
|
635
|
-
onCancel?: () => void;
|
|
636
|
-
/** Called when user wants to retry */
|
|
637
|
-
onRetry?: () => void;
|
|
638
|
-
/** Called when session is cleared */
|
|
639
|
-
onClear?: () => void;
|
|
640
|
-
}
|
|
641
|
-
|
|
642
437
|
/**
|
|
643
438
|
* AI Component Icons
|
|
644
439
|
*
|
|
@@ -734,6 +529,24 @@ declare function MessageAvatar({ role, size, userName, className, }: MessageAvat
|
|
|
734
529
|
declare function AITypingIndicator({ className }: {
|
|
735
530
|
className?: string;
|
|
736
531
|
}): react_jsx_runtime.JSX.Element;
|
|
532
|
+
declare const bubbleVariants$1: (props?: ({
|
|
533
|
+
variant?: "user" | "assistant" | "system" | "tool" | null | undefined;
|
|
534
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
535
|
+
interface ChatBubbleProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bubbleVariants$1> {
|
|
536
|
+
/** Show error styling (red border). */
|
|
537
|
+
hasError?: boolean;
|
|
538
|
+
/**
|
|
539
|
+
* Optional left-border accent color. Used by multi-participant surfaces
|
|
540
|
+
* (e.g. SuperChat) to tint a speaker's bubble; AI chat leaves it unset.
|
|
541
|
+
*/
|
|
542
|
+
accent?: string;
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* The shared chat bubble shell. This is the single source of truth for how a
|
|
546
|
+
* chat message bubble looks across the library (AI chat, SuperChat, etc.).
|
|
547
|
+
* Presentational only — callers render their own content inside.
|
|
548
|
+
*/
|
|
549
|
+
declare const ChatBubble: React$1.ForwardRefExoticComponent<ChatBubbleProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
737
550
|
interface AIMessageDisplayProps {
|
|
738
551
|
/** The message to display */
|
|
739
552
|
message: AIMessage;
|
|
@@ -1020,6 +833,24 @@ interface MessageGroup {
|
|
|
1020
833
|
messages: Message[];
|
|
1021
834
|
}
|
|
1022
835
|
|
|
836
|
+
/**
|
|
837
|
+
* A candidate for the composer's `@mention` autocomplete. Generic so any
|
|
838
|
+
* surface (multi-party chat, agent picker, …) can supply its own list.
|
|
839
|
+
*/
|
|
840
|
+
interface MentionOption {
|
|
841
|
+
/** Stable id (returned to the host so it can map a selection back). */
|
|
842
|
+
id: string;
|
|
843
|
+
/** Display name shown in the suggestion list. */
|
|
844
|
+
label: string;
|
|
845
|
+
/** Text inserted after `@` on selection. Defaults to the first word of `label`. */
|
|
846
|
+
value?: string;
|
|
847
|
+
/** Optional secondary text shown after the label. */
|
|
848
|
+
description?: string;
|
|
849
|
+
/** Optional leading node (e.g. an avatar). */
|
|
850
|
+
icon?: React$1.ReactNode;
|
|
851
|
+
/** Optional trailing meta text (e.g. a kind tag). */
|
|
852
|
+
meta?: string;
|
|
853
|
+
}
|
|
1023
854
|
interface CharacterCounterProps {
|
|
1024
855
|
current: number;
|
|
1025
856
|
max: number;
|
|
@@ -1051,6 +882,10 @@ interface MessageComposerProps {
|
|
|
1051
882
|
onTypingStart?: () => void;
|
|
1052
883
|
/** Called when the user stops typing */
|
|
1053
884
|
onTypingStop?: () => void;
|
|
885
|
+
/** Controlled value for the textarea */
|
|
886
|
+
value?: string;
|
|
887
|
+
/** Callback when value changes (for controlled mode) */
|
|
888
|
+
onValueChange?: (value: string) => void;
|
|
1054
889
|
/** Placeholder text */
|
|
1055
890
|
placeholder?: string;
|
|
1056
891
|
/** Maximum message length */
|
|
@@ -1085,6 +920,13 @@ interface MessageComposerProps {
|
|
|
1085
920
|
onCancelReply?: () => void;
|
|
1086
921
|
/** Visual variant - 'default' shows border-t, 'minimal' has no border */
|
|
1087
922
|
variant?: 'default' | 'minimal';
|
|
923
|
+
/** Content to render inside the input wrapper (e.g. a mic button) */
|
|
924
|
+
inputTrailing?: React$1.ReactNode;
|
|
925
|
+
/**
|
|
926
|
+
* Candidates for `@mention` autocomplete. When provided (non-empty), typing
|
|
927
|
+
* `@` opens a picker. Omit to disable mentions entirely (default).
|
|
928
|
+
*/
|
|
929
|
+
mentionOptions?: MentionOption[];
|
|
1088
930
|
/** Additional class name */
|
|
1089
931
|
className?: string;
|
|
1090
932
|
}
|
|
@@ -1139,6 +981,12 @@ interface AIChatProps extends VariantProps<typeof chatVariants>, AIChatCallbacks
|
|
|
1139
981
|
height?: string | number;
|
|
1140
982
|
/** Props to pass to the MessageComposer */
|
|
1141
983
|
composerProps?: Partial<MessageComposerProps>;
|
|
984
|
+
/** Enable talk-to-text microphone button inside the input */
|
|
985
|
+
talkToText?: boolean;
|
|
986
|
+
/** Callback when recording starts */
|
|
987
|
+
onRecordingStart?: () => void;
|
|
988
|
+
/** Callback when recording completes (receives audio blob and duration) */
|
|
989
|
+
onRecordingComplete?: (blob: Blob, duration: number) => void;
|
|
1142
990
|
/** Callback when close button is clicked (shows close button when provided) */
|
|
1143
991
|
onClose?: () => void;
|
|
1144
992
|
/**
|
|
@@ -1153,7 +1001,307 @@ interface AIChatProps extends VariantProps<typeof chatVariants>, AIChatCallbacks
|
|
|
1153
1001
|
* A complete AI chat interface with message history, input, and tool call support.
|
|
1154
1002
|
* Reuses MessageComposer from the Messaging components for consistent UX.
|
|
1155
1003
|
*/
|
|
1156
|
-
declare function AIChat({ session, messages: messagesProp, isGenerating: isGeneratingProp, userName, title, suggestions, showHeader, showTimestamps, inputPlaceholder, variant, size, height, composerProps, className, onSendMessage, onToolCall: _onToolCall, onResourceClick, onSuggestedAction, onCancel, onClear, onClose, renderTextContent, }: AIChatProps): react_jsx_runtime.JSX.Element;
|
|
1004
|
+
declare function AIChat({ session, messages: messagesProp, isGenerating: isGeneratingProp, userName, title, suggestions, showHeader, showTimestamps, inputPlaceholder, variant, size, height, composerProps, talkToText, onRecordingStart, onRecordingComplete, className, onSendMessage, onToolCall: _onToolCall, onResourceClick, onSuggestedAction, onCancel, onClear, onClose, renderTextContent, }: AIChatProps): react_jsx_runtime.JSX.Element;
|
|
1005
|
+
|
|
1006
|
+
/**
|
|
1007
|
+
* Hey Ozwell — the in-header toggle (mieweb/ui#287).
|
|
1008
|
+
*
|
|
1009
|
+
* The Ozwell octopus that lives in the top bar. Off, it sits gray and muted.
|
|
1010
|
+
* Activated, it turns full colour and pulses with the room volume — the same
|
|
1011
|
+
* mic-reactive glow as the Voice Setup enrollment screen.
|
|
1012
|
+
*
|
|
1013
|
+
* Click toggles on/off. Right-click or long-press fires `onOpenSettings` — the host
|
|
1014
|
+
* surfaces "Ozwell settings" (voice enrollment / re-enroll / add a condition / test).
|
|
1015
|
+
*
|
|
1016
|
+
* Presentational: the host owns on/off and feeds the live `level` (0..1) from its
|
|
1017
|
+
* single wake-word analyser — this component never opens the mic itself (one shared
|
|
1018
|
+
* mic; a second getUserMedia would silence the detector).
|
|
1019
|
+
*/
|
|
1020
|
+
interface HeyOzwellToggleProps {
|
|
1021
|
+
/** Whether Hey Ozwell is on. Off → gray + muted; on → colour + volume pulse. */
|
|
1022
|
+
active?: boolean;
|
|
1023
|
+
/** Called with the next active state when clicked. */
|
|
1024
|
+
onToggle?: (active: boolean) => void;
|
|
1025
|
+
/**
|
|
1026
|
+
* Room volume, 0..1, driving the colour pulse while active. Wire this to the
|
|
1027
|
+
* wake-word analyser (see Voice Setup). Ignored when inactive.
|
|
1028
|
+
*/
|
|
1029
|
+
level?: number;
|
|
1030
|
+
/**
|
|
1031
|
+
* Whether the primary (wake-detection) ring is loading — this gates whether the octopus is
|
|
1032
|
+
* actually usable. Fast: off → green flash → ready. Off-ramp keeps the octopus from looking
|
|
1033
|
+
* "unavailable" for the slower transcription warm-up (see `warm*`).
|
|
1034
|
+
*/
|
|
1035
|
+
loading?: boolean;
|
|
1036
|
+
/**
|
|
1037
|
+
* Wake-detection load progress, 0..1, for the primary determinate fill ring. When omitted
|
|
1038
|
+
* while `loading`, the ring falls back to an indeterminate spin. Completion flashes green.
|
|
1039
|
+
*/
|
|
1040
|
+
loadProgress?: number;
|
|
1041
|
+
/**
|
|
1042
|
+
* Whether transcription is still warming in the background. Shows as a thin, muted secondary
|
|
1043
|
+
* arc OUTSIDE the primary ring — purely informational, never implies the octopus isn't ready
|
|
1044
|
+
* (you can press and talk immediately; audio is captured and transcribed once this finishes).
|
|
1045
|
+
*/
|
|
1046
|
+
warmActive?: boolean;
|
|
1047
|
+
/** Background transcription warm progress, 0..1, for the secondary arc. */
|
|
1048
|
+
warmProgress?: number;
|
|
1049
|
+
/** Optional status appended to the tooltip, e.g. "Transcription 80%". */
|
|
1050
|
+
loadLabel?: string;
|
|
1051
|
+
/** Ozwell logo source. Defaults to the bundled Storybook public asset. */
|
|
1052
|
+
logoSrc?: string;
|
|
1053
|
+
/** Logo diameter in px. */
|
|
1054
|
+
size?: number;
|
|
1055
|
+
/** Additional class name. */
|
|
1056
|
+
className?: string;
|
|
1057
|
+
/** Fired on right-click or long-press — host opens "Ozwell settings" (enrollment / test). */
|
|
1058
|
+
onOpenSettings?: () => void;
|
|
1059
|
+
/** Long-press duration (ms) before settings fire. */
|
|
1060
|
+
longPressMs?: number;
|
|
1061
|
+
}
|
|
1062
|
+
/**
|
|
1063
|
+
* The header Ozwell octopus. Click to turn the assistant on/off; while on it
|
|
1064
|
+
* glows and pulses with the room volume passed via `level`. Right-click or
|
|
1065
|
+
* long-press opens settings.
|
|
1066
|
+
*/
|
|
1067
|
+
declare function HeyOzwellToggle({ active, onToggle, level, loading, loadProgress, warmActive, warmProgress, loadLabel, logoSrc, size, className, onOpenSettings, longPressMs, }: HeyOzwellToggleProps): react_jsx_runtime.JSX.Element;
|
|
1068
|
+
|
|
1069
|
+
/**
|
|
1070
|
+
* Hey Ozwell — model manifest (mieweb/ui#288).
|
|
1071
|
+
*
|
|
1072
|
+
* A lightweight, manifest-pinned list of the on-device models the assistant runs, so the Ozwell
|
|
1073
|
+
* settings menu can show "what am I using, what version, how big, loaded from where" (per Doug).
|
|
1074
|
+
*
|
|
1075
|
+
* Values are grounded in the actual runtime config:
|
|
1076
|
+
* - wake + speaker-verify currently load from the personal HF repo `jlocala/ozwell-voice-assets`
|
|
1077
|
+
* (the small models Doug wants moved to Git LFS — see MODEL-HOSTING.md).
|
|
1078
|
+
* - transcription (Whisper turbo) loads from our Cloudflare R2 bucket (config-driven R2_HOST).
|
|
1079
|
+
* Sizes are approximate (remote weights, not bundled). Versions are pinned identifiers, not semver.
|
|
1080
|
+
*/
|
|
1081
|
+
/** Which live load-store (if any) reflects this model's readiness in the UI. */
|
|
1082
|
+
type ModelStatusKey = 'wake' | 'transcription' | 'static';
|
|
1083
|
+
interface ModelInfo {
|
|
1084
|
+
id: string;
|
|
1085
|
+
/** Coarse role grouping shown as the row's eyebrow. */
|
|
1086
|
+
role: 'Wake word' | 'Speaker verify' | 'Transcription';
|
|
1087
|
+
/** Human-facing name. */
|
|
1088
|
+
label: string;
|
|
1089
|
+
/** Architecture / precision detail. */
|
|
1090
|
+
variant: string;
|
|
1091
|
+
/** Pinned identifier (model id or repo ref) — not semver. */
|
|
1092
|
+
version: string;
|
|
1093
|
+
/** Approximate download size (remote weights). */
|
|
1094
|
+
approxSize: string;
|
|
1095
|
+
/** Where the weights load from today. */
|
|
1096
|
+
source: string;
|
|
1097
|
+
/** Inference engine. */
|
|
1098
|
+
runtime: string;
|
|
1099
|
+
/** Live-status hook: which load store reflects readiness, or 'static' (loads on first use). */
|
|
1100
|
+
statusKey: ModelStatusKey;
|
|
1101
|
+
}
|
|
1102
|
+
declare const MODEL_MANIFEST: ModelInfo[];
|
|
1103
|
+
/** Per-model readiness for the UI status dot. */
|
|
1104
|
+
type ModelStatus = 'idle' | 'loading' | 'ready';
|
|
1105
|
+
|
|
1106
|
+
/**
|
|
1107
|
+
* Speaker diarization core — pure clustering + transcript attribution (mieweb/ui, Hey Ozwell).
|
|
1108
|
+
*
|
|
1109
|
+
* No models here: given per-segment speaker embeddings (from TitaNet) + a timestamped transcript (from
|
|
1110
|
+
* Whisper), group segments by speaker and label them. Everything is deterministic + framework-free so it's
|
|
1111
|
+
* unit-testable without the WASM/mic. See DIARIZATION.md for the full pipeline; `useDiarization` wires the
|
|
1112
|
+
* embedder + transcriber to these functions.
|
|
1113
|
+
*/
|
|
1114
|
+
/** A transcript chunk with timing (Whisper output). */
|
|
1115
|
+
interface TranscriptSegment {
|
|
1116
|
+
start: number;
|
|
1117
|
+
end: number;
|
|
1118
|
+
text: string;
|
|
1119
|
+
}
|
|
1120
|
+
/** A transcript chunk after diarization: which cluster + a human speaker label. */
|
|
1121
|
+
interface DiarizedSegment extends TranscriptSegment {
|
|
1122
|
+
cluster: number;
|
|
1123
|
+
speaker: string;
|
|
1124
|
+
}
|
|
1125
|
+
interface ClusterOptions {
|
|
1126
|
+
/** Merge clusters while their cosine DISTANCE (1 − cosine) is ≤ this. Higher = fewer speakers (merges
|
|
1127
|
+
* more). Default 0.65 (merge when cosine similarity ≥ 0.35) — biased toward NOT over-splitting one
|
|
1128
|
+
* person into several, which is the common failure on short/varied segments. */
|
|
1129
|
+
threshold?: number;
|
|
1130
|
+
/** Hard cap on speaker count — keep merging past `threshold` until at most this many clusters remain. */
|
|
1131
|
+
maxSpeakers?: number;
|
|
1132
|
+
}
|
|
1133
|
+
/** Cosine similarity of two vectors (computes norms, so inputs needn't be normalized). */
|
|
1134
|
+
declare function cosine(a: Float32Array, b: Float32Array): number;
|
|
1135
|
+
/** Mean of vectors, L2-normalized — a cluster's representative embedding. */
|
|
1136
|
+
declare function centroid(vectors: Float32Array[]): Float32Array;
|
|
1137
|
+
/**
|
|
1138
|
+
* Average-linkage agglomerative clustering over speaker embeddings, with auto speaker count via a cosine
|
|
1139
|
+
* threshold (+ optional hard `maxSpeakers` cap). Returns a cluster id (0-based, in first-appearance order)
|
|
1140
|
+
* per input embedding.
|
|
1141
|
+
*/
|
|
1142
|
+
declare function clusterEmbeddings(embeddings: Float32Array[], opts?: ClusterOptions): number[];
|
|
1143
|
+
/**
|
|
1144
|
+
* Human labels per cluster id. `names[clusterId]` (from voiceprint anchoring / LLM / manual) wins;
|
|
1145
|
+
* otherwise a generic "Speaker N". Returns an array indexed by cluster id.
|
|
1146
|
+
*/
|
|
1147
|
+
declare function labelClusters(clusters: number[], names?: Record<number, string>): string[];
|
|
1148
|
+
/** Attach cluster id + speaker label to each transcript segment. */
|
|
1149
|
+
declare function attributeSegments(segments: TranscriptSegment[], clusters: number[], labels: string[]): DiarizedSegment[];
|
|
1150
|
+
interface RoleInferenceOptions {
|
|
1151
|
+
/** Candidate roles the model may assign. Default: a clinical-visit set. */
|
|
1152
|
+
roles?: string[];
|
|
1153
|
+
/** Which speaker labels to (re)infer — default the generic "Speaker N" ones, leaving enrolled names. */
|
|
1154
|
+
isGeneric?: (speaker: string) => boolean;
|
|
1155
|
+
}
|
|
1156
|
+
/**
|
|
1157
|
+
* Ask an LLM to infer the ROLE of each unknown speaker (patient / caregiver / clinician …) from what they
|
|
1158
|
+
* say, and relabel them. Enrolled/named speakers are left untouched. `ask` is injected (e.g. askOzwell) so
|
|
1159
|
+
* this stays pure + testable. Falls back to the input unchanged on any parse/LLM failure.
|
|
1160
|
+
*/
|
|
1161
|
+
declare function inferSpeakerRoles(segments: DiarizedSegment[], ask: (prompt: string) => Promise<string>, opts?: RoleInferenceOptions): Promise<DiarizedSegment[]>;
|
|
1162
|
+
/** Collapse consecutive same-speaker segments into turns — nicer for a scribe note. */
|
|
1163
|
+
declare function mergeTurns(segments: DiarizedSegment[]): DiarizedSegment[];
|
|
1164
|
+
|
|
1165
|
+
interface UseDiarizationOptions {
|
|
1166
|
+
/** Cluster merge cutoff (cosine distance). Higher → fewer speakers (merges more). Default 0.65. */
|
|
1167
|
+
threshold?: number;
|
|
1168
|
+
/** Hard cap on detected speakers — forces merging down to at most this many. Unset = auto. */
|
|
1169
|
+
maxSpeakers?: number;
|
|
1170
|
+
/** Minimum segment length (seconds) to trust for a speaker embedding — shorter segments are attributed
|
|
1171
|
+
* to a neighbor instead of forming their own (noisy) cluster. Raising this cuts phantom speakers from
|
|
1172
|
+
* brief interjections. Default 1.0. */
|
|
1173
|
+
minSegmentSeconds?: number;
|
|
1174
|
+
/** Min cosine to name a cluster from an enrolled voice (else it stays "Speaker N"). Default 0.45. */
|
|
1175
|
+
identifyThreshold?: number;
|
|
1176
|
+
/** Collapse consecutive same-speaker segments into turns. Default true. */
|
|
1177
|
+
merge?: boolean;
|
|
1178
|
+
/** After anchoring, ask Ozwell to infer roles (Patient / Caregiver / …) for the still-generic speakers.
|
|
1179
|
+
* Requires the chat backend to be configured; best-effort (keeps "Speaker N" on failure). Default false. */
|
|
1180
|
+
inferRoles?: boolean;
|
|
1181
|
+
/** Load the ~50 MB speaker runtime + warm Whisper. Set false to keep it dormant until it's needed
|
|
1182
|
+
* (e.g. a host feature that's off). Default true. */
|
|
1183
|
+
enabled?: boolean;
|
|
1184
|
+
}
|
|
1185
|
+
interface UseDiarizationResult {
|
|
1186
|
+
/** TitaNet runtime is loaded (diarization can run). */
|
|
1187
|
+
ready: boolean;
|
|
1188
|
+
/** A diarization pass is in flight. */
|
|
1189
|
+
busy: boolean;
|
|
1190
|
+
error: string | null;
|
|
1191
|
+
/** Last result (also returned by `diarize`). */
|
|
1192
|
+
result: DiarizedSegment[] | null;
|
|
1193
|
+
/** Diarize a recorded visit Blob → attributed transcript. */
|
|
1194
|
+
diarize: (blob: Blob) => Promise<DiarizedSegment[]>;
|
|
1195
|
+
}
|
|
1196
|
+
declare function useDiarization(options?: UseDiarizationOptions): UseDiarizationResult;
|
|
1197
|
+
|
|
1198
|
+
type HeyOzwellPhase = 'listening' | 'dictating' | 'transcribing';
|
|
1199
|
+
interface UseHeyOzwellOptions {
|
|
1200
|
+
/** ON: "hey ozwell" opens the chat AND starts dictating. OFF: it just opens the chat and waits. */
|
|
1201
|
+
autoDictateOnWake?: boolean;
|
|
1202
|
+
/** Close the chat popup after "ozwell I'm done" transcribes + sends. */
|
|
1203
|
+
closeChatOnDone?: boolean;
|
|
1204
|
+
/** Transcribe on-device (browser, PHI-safe) or POST audio to the server. */
|
|
1205
|
+
transcription?: 'browser' | 'server';
|
|
1206
|
+
/**
|
|
1207
|
+
* Override the default send. By default the hook appends the user turn and either a canned keyless
|
|
1208
|
+
* reply or a streamed Ozwell response (see `ozwellChat`). Provide this to route sends to your own
|
|
1209
|
+
* backend / message store instead; the hook still appends the user turn first.
|
|
1210
|
+
*/
|
|
1211
|
+
onSend?: (text: string) => void;
|
|
1212
|
+
/** Wake-model asset base, forwarded to `useWakeWord`. */
|
|
1213
|
+
assetBase?: string;
|
|
1214
|
+
/**
|
|
1215
|
+
* Doctor-only gate. When true, each wake is verified INVISIBLY against the enrolled voiceprint —
|
|
1216
|
+
* only the enrolled doctor (WHO) actually saying the phrase (WHAT) acts; everyone else is ignored.
|
|
1217
|
+
* If nothing is enrolled yet it stays open (so the chat works before voice setup). Loads the ~50 MB
|
|
1218
|
+
* speaker runtime only when enabled. Enroll via `useVoiceSetup`.
|
|
1219
|
+
*/
|
|
1220
|
+
requireDoctor?: boolean;
|
|
1221
|
+
/** Start listening immediately on mount instead of waiting for a click (e.g. an always-on surface). */
|
|
1222
|
+
autoStart?: boolean;
|
|
1223
|
+
/** Live caption: while dictating, re-transcribe the growing utterance every ~2s and show the recognized
|
|
1224
|
+
* text in the chat composer as it's heard (the final send still uses the full-clip transcription).
|
|
1225
|
+
* On-device only (browser transcription); costs extra compute during dictation. Default false. */
|
|
1226
|
+
liveTranscript?: boolean;
|
|
1227
|
+
/**
|
|
1228
|
+
* Conversation mode: on "done", DIARIZE the captured clip (who-said-what) and send a speaker-labeled
|
|
1229
|
+
* transcript instead of a flat one — so the assistant gets "Dr. Jane: … / Patient: …" for a multi-person
|
|
1230
|
+
* room. On-device (loads the ~50 MB speaker runtime); slower than plain transcription, and it overrides
|
|
1231
|
+
* server transcription (diarization needs the audio locally). Default false.
|
|
1232
|
+
*/
|
|
1233
|
+
conversationMode?: boolean;
|
|
1234
|
+
/** Review before send: on "done", drop the transcript into the composer as EDITABLE text (glance / fix a
|
|
1235
|
+
* mishearing, then press send) instead of sending it automatically. An accuracy safety net for clinical
|
|
1236
|
+
* use — off by default so the hands-free flow stays hands-free. */
|
|
1237
|
+
reviewBeforeSend?: boolean;
|
|
1238
|
+
/** Diarization tuning for conversation mode (threshold, maxSpeakers, minSegmentSeconds, inferRoles). */
|
|
1239
|
+
diarizationOptions?: Omit<UseDiarizationOptions, 'enabled'>;
|
|
1240
|
+
}
|
|
1241
|
+
/** Props to spread onto <HeyOzwellToggle>. */
|
|
1242
|
+
interface HeyOzwellToggleBindings {
|
|
1243
|
+
active: boolean;
|
|
1244
|
+
level: number;
|
|
1245
|
+
loading: boolean;
|
|
1246
|
+
/** Determinate ring fill 0..1. Omitted (undefined) during the live-detector cold-start, where there's
|
|
1247
|
+
* no byte progress to show — the ring falls back to an indeterminate spin. */
|
|
1248
|
+
loadProgress?: number;
|
|
1249
|
+
warmActive: boolean;
|
|
1250
|
+
warmProgress: number;
|
|
1251
|
+
loadLabel?: string;
|
|
1252
|
+
onToggle: (next: boolean) => void;
|
|
1253
|
+
onOpenSettings: () => void;
|
|
1254
|
+
}
|
|
1255
|
+
/** Props to spread onto <FloatingAIChat> (host supplies suggestions / userName). */
|
|
1256
|
+
interface HeyOzwellChatBindings {
|
|
1257
|
+
open: boolean;
|
|
1258
|
+
onOpenChange: (open: boolean) => void;
|
|
1259
|
+
messages: AIMessage[];
|
|
1260
|
+
isGenerating: boolean;
|
|
1261
|
+
inputPlaceholder: string;
|
|
1262
|
+
onSendMessage: (text: string) => void;
|
|
1263
|
+
/** Controlled composer wiring — fills the box with the live caption while dictating, else the typed
|
|
1264
|
+
* text. Spread onto the chat; a host adding its own composerProps should merge (not replace) this. */
|
|
1265
|
+
composerProps: {
|
|
1266
|
+
value: string;
|
|
1267
|
+
onValueChange: (v: string) => void;
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1270
|
+
interface UseHeyOzwellResult {
|
|
1271
|
+
/** Whether Ozwell is on (mic listening). */
|
|
1272
|
+
active: boolean;
|
|
1273
|
+
/** Turn Ozwell on/off — also tears down dictation + closes popups when turning off. */
|
|
1274
|
+
toggle: (next: boolean) => void;
|
|
1275
|
+
phase: HeyOzwellPhase;
|
|
1276
|
+
chatOpen: boolean;
|
|
1277
|
+
setChatOpen: (open: boolean) => void;
|
|
1278
|
+
settingsOpen: boolean;
|
|
1279
|
+
setSettingsOpen: (open: boolean) => void;
|
|
1280
|
+
messages: AIMessage[];
|
|
1281
|
+
isGenerating: boolean;
|
|
1282
|
+
/** Room volume 0..1 from the detector's own mic stream (drives the octopus pulse). */
|
|
1283
|
+
level: number;
|
|
1284
|
+
/** Wake detector ready / error passthrough. */
|
|
1285
|
+
ready: boolean;
|
|
1286
|
+
error: string | null;
|
|
1287
|
+
/** Live readiness per model, for the settings menu's "Models & versions" readout. */
|
|
1288
|
+
modelStatus: Partial<Record<ModelStatusKey, ModelStatus>>;
|
|
1289
|
+
/** Send a (typed or dictated) message through the active flow. */
|
|
1290
|
+
send: (text: string) => void;
|
|
1291
|
+
/** Start recording dictation into the active turn (e.g. wire to a mic button). */
|
|
1292
|
+
startDictation: () => void;
|
|
1293
|
+
/** Stop dictation → transcribe → send. Pass `true` only for a spoken "ozwell i'm done" stop (it trims the
|
|
1294
|
+
* phrase off the audio); a manual/button stop should call it with no argument. */
|
|
1295
|
+
stopDictation: (viaPhrase?: boolean) => void;
|
|
1296
|
+
/** Doctor-only gate is on AND a voiceprint is enrolled, so only the enrolled doctor is acted on. */
|
|
1297
|
+
locked: boolean;
|
|
1298
|
+
/** Live-caption text recognized so far during dictation (empty unless `liveTranscript` is on). Host can
|
|
1299
|
+
* render it in the composer as it's spoken; the final send still uses the full-clip transcription. */
|
|
1300
|
+
liveText: string;
|
|
1301
|
+
toggleProps: HeyOzwellToggleBindings;
|
|
1302
|
+
chatProps: HeyOzwellChatBindings;
|
|
1303
|
+
}
|
|
1304
|
+
declare function useHeyOzwell(options?: UseHeyOzwellOptions): UseHeyOzwellResult;
|
|
1157
1305
|
|
|
1158
1306
|
interface AIChatTriggerProps {
|
|
1159
1307
|
/** Whether the chat is open */
|
|
@@ -1185,25 +1333,775 @@ interface AIChatModalProps extends Omit<AIChatProps, 'variant' | 'size'> {
|
|
|
1185
1333
|
modalClassName?: string;
|
|
1186
1334
|
}
|
|
1187
1335
|
/**
|
|
1188
|
-
* A modal chat window that can be positioned in the corner or center.
|
|
1336
|
+
* A modal chat window that can be positioned in the corner or center.
|
|
1337
|
+
*/
|
|
1338
|
+
declare function AIChatModal({ open, onOpenChange, position, width, height, modalClassName, ...chatProps }: AIChatModalProps): react_jsx_runtime.JSX.Element | null;
|
|
1339
|
+
interface FloatingAIChatProps extends Omit<AIChatModalProps, 'open' | 'onOpenChange'> {
|
|
1340
|
+
/** Initial open state */
|
|
1341
|
+
defaultOpen?: boolean;
|
|
1342
|
+
/** Controlled open state */
|
|
1343
|
+
open?: boolean;
|
|
1344
|
+
/** Callback when open state changes */
|
|
1345
|
+
onOpenChange?: (open: boolean) => void;
|
|
1346
|
+
/** Button position */
|
|
1347
|
+
buttonPosition?: AIChatTriggerProps['position'];
|
|
1348
|
+
/** Show pulse animation */
|
|
1349
|
+
pulse?: boolean;
|
|
1350
|
+
}
|
|
1351
|
+
/**
|
|
1352
|
+
* A complete floating AI chat with trigger button and modal.
|
|
1353
|
+
*/
|
|
1354
|
+
declare function FloatingAIChat({ defaultOpen, open: controlledOpen, onOpenChange: controlledOnOpenChange, buttonPosition, position, pulse, ...chatProps }: FloatingAIChatProps): react_jsx_runtime.JSX.Element;
|
|
1355
|
+
|
|
1356
|
+
interface HeyOzwellProps extends UseHeyOzwellOptions {
|
|
1357
|
+
/** Octopus diameter in px. */
|
|
1358
|
+
size?: number;
|
|
1359
|
+
/** Octopus logo source. */
|
|
1360
|
+
logoSrc?: string;
|
|
1361
|
+
/** Long-press duration (ms) before settings open. */
|
|
1362
|
+
longPressMs?: number;
|
|
1363
|
+
/** Class name applied to the octopus toggle button. */
|
|
1364
|
+
className?: string;
|
|
1365
|
+
/** Open the central voice page (set up / add / rename / remove authorized voices). Settings item hidden when omitted. */
|
|
1366
|
+
onManageVoices?: () => void;
|
|
1367
|
+
/**
|
|
1368
|
+
* Extra props forwarded to the FloatingAIChat (e.g. `suggestions`, `userName`). The open state,
|
|
1369
|
+
* messages, placeholder and send handler are wired from the hook; anything here overrides them.
|
|
1370
|
+
*/
|
|
1371
|
+
chatProps?: Partial<FloatingAIChatProps>;
|
|
1372
|
+
}
|
|
1373
|
+
/** The Hey Ozwell octopus + settings menu + floating chat, wired end-to-end. */
|
|
1374
|
+
declare function HeyOzwell({ size, logoSrc, longPressMs, className, onManageVoices, chatProps, ...options }: HeyOzwellProps): react_jsx_runtime.JSX.Element;
|
|
1375
|
+
|
|
1376
|
+
interface OzwellSettingsMenuProps {
|
|
1377
|
+
/** The trigger element — usually the <HeyOzwellToggle>. The Dropdown anchors the menu to it. */
|
|
1378
|
+
trigger: React$1.ReactElement;
|
|
1379
|
+
/** Controlled open state (drive from `useHeyOzwell().settingsOpen`). */
|
|
1380
|
+
open?: boolean;
|
|
1381
|
+
/** Open-state change (Dropdown fires this on click-outside / escape). */
|
|
1382
|
+
onOpenChange?: (open: boolean) => void;
|
|
1383
|
+
/** Live readiness per model for the "Models & versions" readout. */
|
|
1384
|
+
modelStatus?: Partial<Record<ModelStatusKey, ModelStatus>>;
|
|
1385
|
+
/** Open the central voice page (set up / add / rename / remove authorized voices). Item hidden when omitted. */
|
|
1386
|
+
onManageVoices?: () => void;
|
|
1387
|
+
}
|
|
1388
|
+
/** The "Ozwell settings" dropdown menu, on the shared MIE Dropdown. */
|
|
1389
|
+
declare function OzwellSettingsMenu({ trigger, open, onOpenChange, modelStatus, onManageVoices, }: OzwellSettingsMenuProps): react_jsx_runtime.JSX.Element;
|
|
1390
|
+
|
|
1391
|
+
interface ModelInfoListProps {
|
|
1392
|
+
/** Readiness per status key; 'static' models default to 'ready' (load on first use). */
|
|
1393
|
+
status?: Partial<Record<ModelStatusKey, ModelStatus>>;
|
|
1394
|
+
}
|
|
1395
|
+
/** The model · version · size · source rows with a status dot, for the settings menu. */
|
|
1396
|
+
declare function ModelInfoList({ status }: ModelInfoListProps): react_jsx_runtime.JSX.Element;
|
|
1397
|
+
|
|
1398
|
+
interface HandsFreeChatProps {
|
|
1399
|
+
/** Chat header title. */
|
|
1400
|
+
title?: string;
|
|
1401
|
+
/** Suggested-action chips for the empty state. */
|
|
1402
|
+
suggestions?: AISuggestedAction[];
|
|
1403
|
+
/** Display name for the user's messages. */
|
|
1404
|
+
userName?: string;
|
|
1405
|
+
/** Octopus logo source, forwarded to the toggle + the enrollment screen. */
|
|
1406
|
+
logoSrc?: string;
|
|
1407
|
+
/** Transcription mode — on-device (default, PHI-safe) or POST the recorded clip to the server ASR model. */
|
|
1408
|
+
transcription?: 'browser' | 'server';
|
|
1409
|
+
/** Doctor-only gate — only the enrolled voice(s) act. Default true. */
|
|
1410
|
+
requireDoctor?: boolean;
|
|
1411
|
+
/** Live caption — fill the message box with recognized words as you dictate (on-device only). Default false. */
|
|
1412
|
+
liveTranscript?: boolean;
|
|
1413
|
+
/** Conversation mode — on "done", diarize the clip and send a speaker-labeled transcript ("Dr. Jane: … /
|
|
1414
|
+
* Patient: …") so the assistant knows who said what in a multi-person room. On-device; overrides server
|
|
1415
|
+
* transcription. Default false. */
|
|
1416
|
+
conversationMode?: boolean;
|
|
1417
|
+
/** Review before send — on "done", put the transcript in the message box to edit before sending, instead
|
|
1418
|
+
* of sending automatically. Default false. */
|
|
1419
|
+
reviewBeforeSend?: boolean;
|
|
1420
|
+
/** Auto-dictate — "hey ozwell" starts dictating hands-free. Default true. */
|
|
1421
|
+
autoDictateOnWake?: boolean;
|
|
1422
|
+
}
|
|
1423
|
+
/** Say "hey ozwell" to dictate, "ozwell I'm done" to send — wake + speaker-verify + dictation + AIChat. */
|
|
1424
|
+
declare function HandsFreeChat({ title, suggestions, userName, logoSrc, transcription, requireDoctor, liveTranscript, conversationMode, reviewBeforeSend, autoDictateOnWake, }: HandsFreeChatProps): react_jsx_runtime.JSX.Element;
|
|
1425
|
+
|
|
1426
|
+
interface VoiceSetupProps {
|
|
1427
|
+
/**
|
|
1428
|
+
* 'enroll' (default) = fresh first-time setup. 'add' = jump straight into appending a new voice/condition
|
|
1429
|
+
* to the existing voiceprints — what the settings menu's "Add a voice" uses, so the user doesn't have to
|
|
1430
|
+
* re-do a full enroll first.
|
|
1431
|
+
*/
|
|
1432
|
+
mode?: 'enroll' | 'add';
|
|
1433
|
+
/** Which voice to enroll — pass a fresh id (with `label`) to add a different person (an assistant). */
|
|
1434
|
+
voiceId?: string;
|
|
1435
|
+
/** Human label for the voice being enrolled (e.g., "Dr. Smith", "My MA"). */
|
|
1436
|
+
label?: string;
|
|
1437
|
+
/** Octopus logo source. */
|
|
1438
|
+
logoSrc?: string;
|
|
1439
|
+
/** Fired when the user taps "Done" after enrollment — host closes/advances the setup surface. */
|
|
1440
|
+
onDone?: () => void;
|
|
1441
|
+
/** Fired when the user cancels/backs out — host closes the setup surface. Shows a Cancel control. */
|
|
1442
|
+
onCancel?: () => void;
|
|
1443
|
+
}
|
|
1444
|
+
/** On-device voice enrollment — tap the octopus, it pulses as you talk. Brand-aligned. */
|
|
1445
|
+
declare function VoiceSetup({ mode, voiceId, label, logoSrc, onDone, onCancel, }: VoiceSetupProps): react_jsx_runtime.JSX.Element;
|
|
1446
|
+
|
|
1447
|
+
interface VoiceManagerProps {
|
|
1448
|
+
/** Octopus logo source, forwarded to the enrollment screen. */
|
|
1449
|
+
logoSrc?: string;
|
|
1450
|
+
}
|
|
1451
|
+
/** The central voice-enrollment management page. */
|
|
1452
|
+
declare function VoiceManager({ logoSrc }: VoiceManagerProps): react_jsx_runtime.JSX.Element;
|
|
1453
|
+
|
|
1454
|
+
type VoiceSetupPhase = 'intro' | 'getready' | 'speak' | 'gotit' | 'deny' | 'done';
|
|
1455
|
+
interface UseVoiceSetupOptions {
|
|
1456
|
+
/** Start directly in "add a voice" (append) mode instead of a fresh enroll — for the settings menu's
|
|
1457
|
+
* "Add a voice", which appends another authorized voice / condition to the existing voiceprints. */
|
|
1458
|
+
startAdding?: boolean;
|
|
1459
|
+
/** Which voice this enrollment belongs to. Defaults to "you" (fresh) or a generated id (add mode).
|
|
1460
|
+
* Pass a fresh id to enroll a different person (an assistant). */
|
|
1461
|
+
voiceId?: string;
|
|
1462
|
+
/** Human label for the voice (e.g., "You", "Dr. Smith", "My MA"). */
|
|
1463
|
+
label?: string;
|
|
1464
|
+
}
|
|
1465
|
+
interface UseVoiceSetupResult {
|
|
1466
|
+
/** Both the speaker runtime and wake detector are loaded — enrollment can start. */
|
|
1467
|
+
ready: boolean;
|
|
1468
|
+
error: string | null;
|
|
1469
|
+
phase: VoiceSetupPhase;
|
|
1470
|
+
/** The phrase currently being captured (human label). */
|
|
1471
|
+
phrase: string;
|
|
1472
|
+
/** Reps captured so far (0..total). */
|
|
1473
|
+
step: number;
|
|
1474
|
+
/** Total reps across all phrases (PHRASES × REPS). */
|
|
1475
|
+
total: number;
|
|
1476
|
+
/** This pass appends a new condition (room/distance) instead of replacing. */
|
|
1477
|
+
adding: boolean;
|
|
1478
|
+
/** Room volume 0..1 for the octopus pulse while enrolling. */
|
|
1479
|
+
level: number;
|
|
1480
|
+
/** Begin the guided enrollment pass (no-op until ready / already running). */
|
|
1481
|
+
start: () => void;
|
|
1482
|
+
/** After "done", start another appended pass (a new room / distance / background). */
|
|
1483
|
+
addAnotherSpot: () => void;
|
|
1484
|
+
/** Abort an in-progress pass and reset to intro — nothing is enrolled. */
|
|
1485
|
+
cancel: () => void;
|
|
1486
|
+
}
|
|
1487
|
+
declare function useVoiceSetup(options?: UseVoiceSetupOptions): UseVoiceSetupResult;
|
|
1488
|
+
|
|
1489
|
+
interface UseWakeWordOpts {
|
|
1490
|
+
/** Fired with the phrase name ("hey-ozwell" | "ozwell-i'm-done") on a detection. */
|
|
1491
|
+
onWake?: (name: string) => void;
|
|
1492
|
+
/** Fired with the CAPTURED audio of a wake utterance (the phrase the model just heard) + which phrase.
|
|
1493
|
+
* Use for phrase-validated enrollment: the wake firing IS the proof it was actually the phrase. */
|
|
1494
|
+
onUtterance?: (name: string, samples: Float32Array) => void;
|
|
1495
|
+
/** Per-phrase fire thresholds (0..1). Default 0.8 (hey-ozwell) / 0.5 (ozwell I'm done). Updates apply
|
|
1496
|
+
* live (read per-frame). */
|
|
1497
|
+
thresholds?: Record<string, number>;
|
|
1498
|
+
/** VAD gate (0..1): `positive` = speech-detect, `negative` = silence. Defaults 0.05 / 0.03. Live. */
|
|
1499
|
+
vadThresholds?: {
|
|
1500
|
+
positive?: number;
|
|
1501
|
+
negative?: number;
|
|
1502
|
+
};
|
|
1503
|
+
/** Set false to not start listening. */
|
|
1504
|
+
enabled?: boolean;
|
|
1505
|
+
/** ROOT base URL the wake model files are served from (`/wakeword/*` is appended). Defaults to the hosted
|
|
1506
|
+
* assets (`DEFAULT_ASSET_BASE`). Same shape as the string `window.__ozwellAssets` /
|
|
1507
|
+
* `localStorage['ozwellAssetBase']` override — see AI/MODEL-HOSTING.md. */
|
|
1508
|
+
assetBase?: string;
|
|
1509
|
+
/** Auto-register the model-cache service worker (opt-out). Default true. Set false in a host that doesn't
|
|
1510
|
+
* serve `/ozwell-model-sw.js` (avoids repeated registration failures) — models still load, just uncached. */
|
|
1511
|
+
registerServiceWorker?: boolean;
|
|
1512
|
+
}
|
|
1513
|
+
interface WakeWordState {
|
|
1514
|
+
ready: boolean;
|
|
1515
|
+
error: string | null;
|
|
1516
|
+
/** VAD speech probability, 0..1 (is someone talking). */
|
|
1517
|
+
speech: number;
|
|
1518
|
+
/** Live per-phrase wake probability, 0..1. */
|
|
1519
|
+
probs: Record<string, number>;
|
|
1520
|
+
}
|
|
1521
|
+
interface WakeWordControls {
|
|
1522
|
+
/** The detector's mic stream (so a host can add a 2nd consumer — never a 2nd getUserMedia). */
|
|
1523
|
+
getStream: () => MediaStream | null;
|
|
1524
|
+
/** The frozen fire-frame embedding from the last wake — the WHAT-gate input (capture at enroll, check at verify). */
|
|
1525
|
+
getLastEmbedding: () => Float32Array | null;
|
|
1526
|
+
/** The peak fire confidence (probability) of the last wake — frozen at the fire, so not stale. */
|
|
1527
|
+
getLastProb: () => number;
|
|
1528
|
+
/** Approx spoken duration (seconds) of the last wake phrase, from its detection run — used to trim the
|
|
1529
|
+
* phrase off the recorded audio without needing a pause before it. 0 if unknown. */
|
|
1530
|
+
getLastWakeDuration: () => number;
|
|
1531
|
+
/** Store / check / clear a phrase's enrolled phrase-print templates (the WHAT gate). */
|
|
1532
|
+
setVoiceprint: (name: string, vectors: Float32Array[]) => void;
|
|
1533
|
+
hasVoiceprint: (name: string) => boolean;
|
|
1534
|
+
clearVoiceprint: (name: string) => void;
|
|
1535
|
+
/** Raw cosine of an embedding to a phrase's templates (max over templates); null if not enrolled. */
|
|
1536
|
+
phraseCosine: (name: string, vec: Float32Array | null) => number | null;
|
|
1537
|
+
}
|
|
1538
|
+
interface WakeWarmState {
|
|
1539
|
+
/** A pre-fetch is in flight. */ active: boolean;
|
|
1540
|
+
/** Fraction of model files cached, 0..1. */ progress: number;
|
|
1541
|
+
/** All files cached. */ done: boolean;
|
|
1542
|
+
}
|
|
1543
|
+
/** Current wake-model pre-fetch state (for a load ring). */
|
|
1544
|
+
declare function getWakeWarm(): WakeWarmState;
|
|
1545
|
+
/** Subscribe to pre-fetch changes; pair with getWakeWarm in React.useSyncExternalStore. */
|
|
1546
|
+
declare function subscribeWakeWarm(cb: () => void): () => void;
|
|
1547
|
+
/** Pre-fetch the wake model files into OPFS (no mic, no detector). Memoized PER resolved base, so a host
|
|
1548
|
+
* that later repoints model hosting re-prefetches the new base instead of reusing the first pre-warm. */
|
|
1549
|
+
declare function warmWakeModels(assetBase?: string): Promise<void>;
|
|
1550
|
+
declare function useWakeWord(opts?: UseWakeWordOpts): WakeWordState & WakeWordControls;
|
|
1551
|
+
|
|
1552
|
+
interface VerifyResult {
|
|
1553
|
+
score: number;
|
|
1554
|
+
znorm: number | null;
|
|
1555
|
+
pass: boolean;
|
|
1556
|
+
enrolled: boolean;
|
|
1557
|
+
}
|
|
1558
|
+
/** An enrolled voice (the doctor, an assistant, or you under a condition), aggregated across phrases. */
|
|
1559
|
+
interface VoiceInfo {
|
|
1560
|
+
id: string;
|
|
1561
|
+
label: string;
|
|
1562
|
+
createdAt: number;
|
|
1563
|
+
conditions: number;
|
|
1564
|
+
}
|
|
1565
|
+
/** Best-matching enrolled voice for an utterance (from `identify`). */
|
|
1566
|
+
interface VoiceMatch {
|
|
1567
|
+
voiceId: string;
|
|
1568
|
+
label: string;
|
|
1569
|
+
score: number;
|
|
1570
|
+
}
|
|
1571
|
+
/** Options for enrolling/appending a voice. */
|
|
1572
|
+
interface EnrollOpts {
|
|
1573
|
+
/** Append as another condition of the SAME voice (vs replace that voice's conditions). */
|
|
1574
|
+
append?: boolean;
|
|
1575
|
+
/** Which voice this enrollment belongs to (default "you"). Use a fresh id to add another person. */
|
|
1576
|
+
voiceId?: string;
|
|
1577
|
+
/** Human label for the voice (e.g., "You", "Dr. Smith", "My MA"). */
|
|
1578
|
+
label?: string;
|
|
1579
|
+
}
|
|
1580
|
+
interface SpeakerVerifyHandle {
|
|
1581
|
+
ready: boolean;
|
|
1582
|
+
error: string | null;
|
|
1583
|
+
/** Build/append a voiceprint for a phrase from recorded utterances (Float32 samples + their sample rate). */
|
|
1584
|
+
enroll: (phrase: string, utterances: {
|
|
1585
|
+
samples: Float32Array;
|
|
1586
|
+
sampleRate: number;
|
|
1587
|
+
}[], opts?: EnrollOpts) => {
|
|
1588
|
+
n: number;
|
|
1589
|
+
conditions: number;
|
|
1590
|
+
voiceId: string;
|
|
1591
|
+
} | null;
|
|
1592
|
+
/** Verify a live utterance against the enrolled voiceprints (passes if ANY enrolled voice matches). */
|
|
1593
|
+
verify: (phrase: string, samples: Float32Array, sampleRate: number) => VerifyResult | null;
|
|
1594
|
+
conditionCount: (phrase: string) => number;
|
|
1595
|
+
/** TitaNet speaker embedding for a raw utterance — for diarization/clustering. Null if not ready. */
|
|
1596
|
+
embed: (samples: Float32Array, sampleRate: number) => Float32Array | null;
|
|
1597
|
+
/** Best-matching enrolled voice for an utterance (text-independent). Null if nothing enrolled/not ready. */
|
|
1598
|
+
identify: (samples: Float32Array, sampleRate: number) => VoiceMatch | null;
|
|
1599
|
+
/** List enrolled voices (aggregated across phrases). */
|
|
1600
|
+
listVoices: () => VoiceInfo[];
|
|
1601
|
+
/** Remove a voice across all phrases (revokes that person). */
|
|
1602
|
+
removeVoice: (voiceId: string) => void;
|
|
1603
|
+
/** Rename a voice across all phrases. */
|
|
1604
|
+
renameVoice: (voiceId: string, label: string) => void;
|
|
1605
|
+
/** Clear ALL enrolled voices. */
|
|
1606
|
+
clear: () => void;
|
|
1607
|
+
/** Tune the WHO gate live (read at verify-time): `cosine` threshold, `znorm` (AS-norm) threshold, and
|
|
1608
|
+
* `useAsnorm` = gate on the z-score vs the raw cosine. */
|
|
1609
|
+
setGates: (g: {
|
|
1610
|
+
cosine?: number;
|
|
1611
|
+
znorm?: number;
|
|
1612
|
+
useAsnorm?: boolean;
|
|
1613
|
+
}) => void;
|
|
1614
|
+
}
|
|
1615
|
+
interface UseSpeakerVerifyOpts {
|
|
1616
|
+
/** Set false to skip loading the ~50 MB sherpa/TitaNet runtime (e.g. when the doctor-only gate is off).
|
|
1617
|
+
* Defaults to true so existing callers are unchanged. */
|
|
1618
|
+
enabled?: boolean;
|
|
1619
|
+
}
|
|
1620
|
+
declare function useSpeakerVerify(opts?: UseSpeakerVerifyOpts): SpeakerVerifyHandle;
|
|
1621
|
+
|
|
1622
|
+
interface WhisperLoadState {
|
|
1623
|
+
/** A load is in flight. */ active: boolean;
|
|
1624
|
+
/** Overall fraction 0..1 (averaged over the model's files). */ progress: number;
|
|
1625
|
+
/** The model is loaded. */ done: boolean;
|
|
1626
|
+
}
|
|
1627
|
+
/** Current dictation-model load state (for a progress indicator). */
|
|
1628
|
+
declare function getDictationLoad(): WhisperLoadState;
|
|
1629
|
+
/** Subscribe to dictation-model load changes; returns an unsubscribe. Pair with getDictationLoad in
|
|
1630
|
+
* React.useSyncExternalStore. */
|
|
1631
|
+
declare function subscribeDictationLoad(cb: () => void): () => void;
|
|
1632
|
+
/** True only once the dictation model has actually finished loading (not merely started, not rejected). */
|
|
1633
|
+
declare function isWhisperLoaded(): boolean;
|
|
1634
|
+
/** Start loading the dictation model NOW (in the worker) so the first dictation doesn't pay the load. */
|
|
1635
|
+
declare function warmWhisper(): void;
|
|
1636
|
+
/** Start loading the stop-confirm gate model (base.en) in the worker. Warm this BEFORE warmWhisper so the
|
|
1637
|
+
* fast model isn't queued behind slow turbo. */
|
|
1638
|
+
declare function warmStopGate(): void;
|
|
1639
|
+
declare function decodeTo16kMono(blob: Blob): Promise<Float32Array>;
|
|
1640
|
+
/**
|
|
1641
|
+
* Trim the spoken "ozwell i'm done" off the END of a clip BEFORE it reaches ASR. Whisper mishears the phrase
|
|
1642
|
+
* differently every time ("all was well" / "I was long done" / …), so stripping the transcript text can
|
|
1643
|
+
* never catch them all — the reliable fix is to cut the audio so the phrase is never transcribed.
|
|
1644
|
+
*
|
|
1645
|
+
* `phraseHintSec` (from the wake detector's detection run) is an estimate of the phrase's length. When
|
|
1646
|
+
* given, the cut is anchored at `end - phraseHintSec` and snapped to the nearest pause within ~0.35 s — so
|
|
1647
|
+
* it works whether or not the speaker paused (the pause-independent case that pure energy can't handle).
|
|
1648
|
+
* Without a hint, it walks back from the end to the last natural pause (energy only). Capped so it never
|
|
1649
|
+
* removes too much. Returns a trimmed WAV blob (or the original on failure / nothing sensible to cut). Only
|
|
1650
|
+
* call on a PHRASE-triggered stop — not a manual button stop, where there's no phrase to remove.
|
|
1651
|
+
*/
|
|
1652
|
+
declare function trimTrailingStopPhrase(blob: Blob, phraseHintSec?: number): Promise<Blob>;
|
|
1653
|
+
declare function transcribeBlob(blob: Blob, trimEndSeconds?: number): Promise<string>;
|
|
1654
|
+
/** Transcribe raw mono samples (any sample rate) → text. For the live dictation caption, where we re-run
|
|
1655
|
+
* the growing utterance every couple seconds; the FINAL send still uses transcribeBlob. */
|
|
1656
|
+
declare function transcribeSamples(samples: Float32Array, sampleRate: number): Promise<string>;
|
|
1657
|
+
/** Transcribe with timestamps → segments `[{ start, end, text }]`, for diarization (align speaker turns to
|
|
1658
|
+
* text). Returns 16 kHz-relative seconds. See `useDiarization`. */
|
|
1659
|
+
declare function transcribeSegments(blob: Blob): Promise<TranscriptSegment[]>;
|
|
1660
|
+
/** Server-side transcription: POST the recorded audio to the OpenAI-compatible /v1/audio/transcriptions
|
|
1661
|
+
* endpoint (same baseURL/apiKey as the chat). NOTE: audio LEAVES the browser — the on-device path
|
|
1662
|
+
* (transcribeBlob) is the PHI-safe default; this is the experiment alternative. Throws on HTTP error so
|
|
1663
|
+
* the caller can fall back to on-device. */
|
|
1664
|
+
declare function transcribeServer(blob: Blob): Promise<string>;
|
|
1665
|
+
/** Stop-confirm gate: transcribe a short raw-sample window (e.g. the rolling recorder's last ~2s) with the
|
|
1666
|
+
* FAST model and return the text. Used to verify a "ozwell i'm done" wake actually ended with "done"
|
|
1667
|
+
* before committing the stop. Cheap — accuracy on the lone word "done" is all it needs. */
|
|
1668
|
+
declare function transcribeGate(samples: Float32Array, sampleRate: number): Promise<string>;
|
|
1669
|
+
/** Peel a trailing "ozwell i'm done"-style stop phrase off the end of a transcript. Mirrors the
|
|
1670
|
+
* standalone demo: handles Whisper's mishearings (Ozwell / As well / All('s/was) well / Also / Oswald /
|
|
1671
|
+
* "I am done") including the bare word alone. Bare "as well" is NOT stripped (too common) unless joined
|
|
1672
|
+
* to "i'm done". */
|
|
1673
|
+
declare function stripStopPhrase(text: string): string;
|
|
1674
|
+
/** True if a transcript ENDS with a clear "done" stop ("…done" / "…I'm done" / "…all done" / "…well done"),
|
|
1675
|
+
* tolerating trailing punctuation. Deliberately STRICTER than stripStopPhrase: the stop-confirm gate must
|
|
1676
|
+
* NOT fire on a bare "ozwell" or a mid-sentence "done" — "we're almost done here" ends on "here", so no
|
|
1677
|
+
* match. Favors precision: a missed real stop just means "say it again"; a false stop loses dictation. */
|
|
1678
|
+
declare function endsWithDone(text: string): boolean;
|
|
1679
|
+
|
|
1680
|
+
interface UseVisitScribeOptions extends UseDiarizationOptions {
|
|
1681
|
+
/** Show a rough live transcript while recording (chunked). The clean diarized version replaces it on
|
|
1682
|
+
* stop. On-device; costs extra compute during the visit. Default false. */
|
|
1683
|
+
liveTranscript?: boolean;
|
|
1684
|
+
}
|
|
1685
|
+
interface UseVisitScribeResult {
|
|
1686
|
+
/** Speaker runtime + Whisper are loaded enough to record and diarize. */
|
|
1687
|
+
ready: boolean;
|
|
1688
|
+
/** Currently capturing the room. */
|
|
1689
|
+
recording: boolean;
|
|
1690
|
+
/** A diarization pass is in flight (after stop). */
|
|
1691
|
+
busy: boolean;
|
|
1692
|
+
error: string | null;
|
|
1693
|
+
/** The attributed transcript from the last visit (null until the first diarize completes). */
|
|
1694
|
+
result: DiarizedSegment[] | null;
|
|
1695
|
+
/** Rough live transcript accumulated while recording (empty unless `liveTranscript` is on). */
|
|
1696
|
+
liveText: string;
|
|
1697
|
+
/** Milliseconds recorded in the current/last take (drives the timer readout). */
|
|
1698
|
+
elapsedMs: number;
|
|
1699
|
+
/** There's a recorded clip in hand that can be re-analyzed with current settings. */
|
|
1700
|
+
canReanalyze: boolean;
|
|
1701
|
+
/** Start capturing the room (asks for mic permission on first use). */
|
|
1702
|
+
start: () => Promise<void>;
|
|
1703
|
+
/** Stop capturing → kick off diarization → populate `result`. */
|
|
1704
|
+
stop: () => void;
|
|
1705
|
+
/** Re-run diarization on the LAST recording with the current options (e.g. after changing threshold /
|
|
1706
|
+
* maxSpeakers) — tune without re-recording. No-op if there's no stored clip. */
|
|
1707
|
+
reanalyze: () => void;
|
|
1708
|
+
/** Reset the local take state (timer, live text, error, stored clip). NOTE: the last diarized `result`
|
|
1709
|
+
* stays until the next recording overwrites it — starting a new visit is the clean way to clear it. */
|
|
1710
|
+
reset: () => void;
|
|
1711
|
+
}
|
|
1712
|
+
declare function useVisitScribe(options?: UseVisitScribeOptions): UseVisitScribeResult;
|
|
1713
|
+
|
|
1714
|
+
interface VisitScribeProps {
|
|
1715
|
+
/** Heading. */
|
|
1716
|
+
title?: string;
|
|
1717
|
+
/** Sub-heading under the title. */
|
|
1718
|
+
subtitle?: string;
|
|
1719
|
+
/** Initial state of the "label unknown speakers with AI" toggle. Default false. */
|
|
1720
|
+
inferRoles?: boolean;
|
|
1721
|
+
/** Initial state of the "live transcript" toggle. Default false. */
|
|
1722
|
+
liveTranscript?: boolean;
|
|
1723
|
+
/** Diarization tuning passthrough (threshold, maxSpeakers, identifyThreshold, merge). */
|
|
1724
|
+
diarizationOptions?: Omit<UseVisitScribeOptions, 'inferRoles' | 'liveTranscript'>;
|
|
1725
|
+
className?: string;
|
|
1726
|
+
}
|
|
1727
|
+
/** Record a visit → speaker-labeled transcript, on-device. */
|
|
1728
|
+
declare function VisitScribe({ title, subtitle, inferRoles: inferRolesProp, liveTranscript: liveTranscriptProp, diarizationOptions, className, }: VisitScribeProps): react_jsx_runtime.JSX.Element;
|
|
1729
|
+
|
|
1730
|
+
/**
|
|
1731
|
+
* Ozwell chat backend — the real call that replaces the demo stub.
|
|
1732
|
+
*
|
|
1733
|
+
* Mirrors the ozwellai-api TypeScript SDK (clients/typescript/src/index.ts) with plain `fetch`,
|
|
1734
|
+
* so there's no SDK dependency to install: OpenAI-compatible POST /v1/chat/completions, Bearer auth,
|
|
1735
|
+
* `messages` array in / `choices[0].message.content` (or streamed `delta.content`) out.
|
|
1736
|
+
*
|
|
1737
|
+
* KEY HANDLING (deliberate): the API key is NEVER hardcoded or committed. It's read at runtime from
|
|
1738
|
+
* - `window.__ozwell` (e.g. `window.__ozwell = { apiKey: 'sk-...' }` in the console), or
|
|
1739
|
+
* - `localStorage['ozwellConfig']` (JSON, survives reloads).
|
|
1740
|
+
* If no key is configured, `isOzwellConfigured()` is false and the chat falls back to its canned reply —
|
|
1741
|
+
* so this file is always safe to push and the demo still works keyless. For a PUBLIC deploy the key
|
|
1742
|
+
* should live server-side behind a proxy (a browser-direct Bearer key is visible to anyone with the page);
|
|
1743
|
+
* point `baseURL` at that proxy then. See AI/MODEL-HOSTING.md / the hosted-demo plan.
|
|
1744
|
+
*/
|
|
1745
|
+
interface OzwellMessage {
|
|
1746
|
+
role: 'system' | 'user' | 'assistant';
|
|
1747
|
+
content: string;
|
|
1748
|
+
}
|
|
1749
|
+
interface OzwellConfig {
|
|
1750
|
+
/** API base. Defaults to https://api.ozwell.ai (or http://localhost:11434 when apiKey === 'ollama'). */
|
|
1751
|
+
baseURL: string;
|
|
1752
|
+
/** Bearer key. Empty = not configured → callers fall back to the stub. */
|
|
1753
|
+
apiKey: string;
|
|
1754
|
+
/** Model id. */
|
|
1755
|
+
model: string;
|
|
1756
|
+
/** System prompt prepended to the conversation (omit by setting to ''). */
|
|
1757
|
+
system: string;
|
|
1758
|
+
/** Sampling temperature. */
|
|
1759
|
+
temperature: number;
|
|
1760
|
+
}
|
|
1761
|
+
/** Resolve the effective config from runtime sources + defaults. */
|
|
1762
|
+
declare function getOzwellConfig(): OzwellConfig;
|
|
1763
|
+
/** True once a key is configured — gate the real call on this; otherwise keep the stub reply. */
|
|
1764
|
+
declare function isOzwellConfigured(): boolean;
|
|
1765
|
+
/** Map AIChat's message blocks to the API's role/content shape (user+assistant text only) for multi-turn. */
|
|
1766
|
+
declare function toOzwellMessages(msgs: {
|
|
1767
|
+
role: string;
|
|
1768
|
+
content: {
|
|
1769
|
+
type?: string;
|
|
1770
|
+
text?: string;
|
|
1771
|
+
}[];
|
|
1772
|
+
}[]): OzwellMessage[];
|
|
1773
|
+
interface AskOpts extends Partial<OzwellConfig> {
|
|
1774
|
+
signal?: AbortSignal;
|
|
1775
|
+
}
|
|
1776
|
+
/** One-shot (non-streaming) completion → the answer text. Throws on HTTP error. */
|
|
1777
|
+
declare function askOzwell(messages: OzwellMessage[] | string, opts?: AskOpts): Promise<string>;
|
|
1778
|
+
/**
|
|
1779
|
+
* Streaming completion (SSE). Calls `onToken(delta, full)` as text arrives and resolves with the full text.
|
|
1780
|
+
* Token-by-token is the natural fit for a spoken/hands-free reply. Throws on HTTP error.
|
|
1781
|
+
*/
|
|
1782
|
+
declare function askOzwellStream(messages: OzwellMessage[] | string, onToken: (delta: string, full: string) => void, opts?: AskOpts): Promise<string>;
|
|
1783
|
+
|
|
1784
|
+
/**
|
|
1785
|
+
* IndexedDB store for on-device voiceprints (enrollment vectors), replacing localStorage for this data.
|
|
1786
|
+
*
|
|
1787
|
+
* Why IndexedDB and not localStorage: it's asynchronous (off the main thread), stores `Float32Array`
|
|
1788
|
+
* natively via structured clone (no JSON-stringifying embeddings into bloated number arrays), and isn't
|
|
1789
|
+
* capped at ~5 MB. Why not OPFS: these are small *structured records* keyed by id, not large files —
|
|
1790
|
+
* IndexedDB is the right tool; OPFS is for the big model files.
|
|
1791
|
+
*
|
|
1792
|
+
* One object store, keyed by a string id; values are any structured-cloneable object, so `Float32Array`s
|
|
1793
|
+
* survive the round-trip intact. On first read of a key it migrates a legacy localStorage value (if a
|
|
1794
|
+
* parser is supplied) and then clears it.
|
|
1795
|
+
*/
|
|
1796
|
+
/**
|
|
1797
|
+
* Read a voiceprint record. If IndexedDB has nothing for `key` but localStorage does, migrate it via
|
|
1798
|
+
* `migrateLegacy` (parse the old JSON string → the new shape), persist it to IndexedDB, and clear the
|
|
1799
|
+
* localStorage copy. Returns `undefined` if neither has it. Never throws (best-effort storage).
|
|
1800
|
+
*/
|
|
1801
|
+
declare function getVoiceprints<T>(key: string, migrateLegacy?: (raw: string) => T): Promise<T | undefined>;
|
|
1802
|
+
/** Persist a voiceprint record (Float32Arrays stored natively). Best-effort — resolves even on failure. */
|
|
1803
|
+
declare function setVoiceprints(key: string, value: unknown): Promise<void>;
|
|
1804
|
+
/** Remove a voiceprint record (and any stale localStorage copy). */
|
|
1805
|
+
declare function clearVoiceprints(key: string): Promise<void>;
|
|
1806
|
+
declare function loadWhatPrints(): Promise<Record<string, Float32Array[]>>;
|
|
1807
|
+
declare function saveWhatPrints(map: Record<string, Float32Array[]>): Promise<void>;
|
|
1808
|
+
declare function clearWhatPrints(): Promise<void>;
|
|
1809
|
+
|
|
1810
|
+
/**
|
|
1811
|
+
* Shared on-device audio helpers for Hey Ozwell — previously copy-pasted across the enrollment,
|
|
1812
|
+
* hands-free, and diagnostic stories. Centralized so all surfaces use one implementation.
|
|
1813
|
+
*/
|
|
1814
|
+
interface RollingRecorder {
|
|
1815
|
+
/** The AudioContext sample rate the snapshot is captured at. */
|
|
1816
|
+
sampleRate: number;
|
|
1817
|
+
/** The last ~2s of mono audio as Float32 samples (copies the whole retained buffer). */
|
|
1818
|
+
snapshot: () => Float32Array;
|
|
1819
|
+
/** Total samples captured so far (cheap; no copy). For an unbounded accumulator this grows with the
|
|
1820
|
+
* recording — pair with `snapshotFrom` to read only new audio without re-copying everything. */
|
|
1821
|
+
totalSamples: () => number;
|
|
1822
|
+
/** Copy only the samples from absolute index `startSample` to the end — O(new audio), not O(total).
|
|
1823
|
+
* Lets a live loop read just the fresh tail each tick instead of the whole accumulator (avoids O(n²)). */
|
|
1824
|
+
snapshotFrom: (startSample: number) => Float32Array;
|
|
1825
|
+
/** Free already-processed audio: drop whole chunks entirely before `sampleIndex`. Callers that read
|
|
1826
|
+
* forward via a cursor (live caption/transcript) call this to keep an unbounded accumulator from growing
|
|
1827
|
+
* without bound. Absolute indices are preserved (snapshotFrom/totalSamples still use them). */
|
|
1828
|
+
discardBefore: (sampleIndex: number) => void;
|
|
1829
|
+
/** Tear down the audio graph + context. */
|
|
1830
|
+
close: () => void;
|
|
1831
|
+
}
|
|
1832
|
+
/**
|
|
1833
|
+
* Open a rolling ~2s recorder as a SECOND consumer of an existing mic stream (e.g. the wake-word
|
|
1834
|
+
* detector's `getStream()`) — never a second getUserMedia, which would silence the detector. Used to
|
|
1835
|
+
* capture the wake-utterance audio for the speaker-verify (WHO) gate and for enrollment.
|
|
1836
|
+
*/
|
|
1837
|
+
declare function openRollingRecorder(stream: MediaStream, maxSeconds?: number): RollingRecorder;
|
|
1838
|
+
/** A short sine-wave feedback tone (enrollment "get ready" / "got it" cues). Best-effort; no-ops if audio out is unavailable. */
|
|
1839
|
+
declare function chime(freq: number, ms?: number): void;
|
|
1840
|
+
|
|
1841
|
+
type ReconciliationConfidenceLevel = 'high' | 'medium' | 'low';
|
|
1842
|
+
/**
|
|
1843
|
+
* A single field-level change being proposed by an AI source.
|
|
1844
|
+
*
|
|
1845
|
+
* The component compares `current` and `proposed` using `isEqual` (or the
|
|
1846
|
+
* default normalizer) and silently drops rows that are effectively equal,
|
|
1847
|
+
* so callers can pass every candidate field without pre-filtering.
|
|
1848
|
+
*/
|
|
1849
|
+
interface ReconciliationProposal {
|
|
1850
|
+
/** Stable id used as the key in the `onApply` payload (e.g. `address`). */
|
|
1851
|
+
id: string;
|
|
1852
|
+
/** Short, user-facing label for the field (e.g. `Date of birth`). */
|
|
1853
|
+
label: string;
|
|
1854
|
+
/** Optional subtext describing the field. */
|
|
1855
|
+
description?: string;
|
|
1856
|
+
/** Current value on file (null / undefined / `''` render as `—`). */
|
|
1857
|
+
current: unknown;
|
|
1858
|
+
/** Proposed value from the AI source. */
|
|
1859
|
+
proposed: unknown;
|
|
1860
|
+
/** Optional grouping key. Rows with the same `group` render together. */
|
|
1861
|
+
group?: string;
|
|
1862
|
+
/**
|
|
1863
|
+
* Model confidence in [0, 1]. When provided and not overridden by
|
|
1864
|
+
* `confidenceLevel`, values < 0.6 are treated as `low` (row defaults to
|
|
1865
|
+
* unchecked), 0.6–0.85 as `medium`, ≥ 0.85 as `high`.
|
|
1866
|
+
*/
|
|
1867
|
+
confidence?: number;
|
|
1868
|
+
/** Explicit confidence level override. Wins over numeric `confidence`. */
|
|
1869
|
+
confidenceLevel?: ReconciliationConfidenceLevel;
|
|
1870
|
+
/**
|
|
1871
|
+
* Force the row's initial accepted state. Defaults to `true` for high /
|
|
1872
|
+
* medium confidence and `false` for low confidence.
|
|
1873
|
+
*/
|
|
1874
|
+
defaultAccepted?: boolean;
|
|
1875
|
+
/** Custom renderer for the current / proposed values. */
|
|
1876
|
+
renderValue?: (value: unknown) => React$1.ReactNode;
|
|
1877
|
+
/**
|
|
1878
|
+
* Inline editor. When provided, an `Edit` button appears that expands the
|
|
1879
|
+
* proposed value into the editor. Call `onChange` with the new value.
|
|
1880
|
+
*/
|
|
1881
|
+
renderEditor?: (value: unknown, onChange: (next: unknown) => void) => React$1.ReactNode;
|
|
1882
|
+
/** Optional hint shown under the row. */
|
|
1883
|
+
hint?: string;
|
|
1884
|
+
/** Required rows cannot be unchecked. */
|
|
1885
|
+
required?: boolean;
|
|
1886
|
+
}
|
|
1887
|
+
/** Identifies where the proposals came from. Shown in the header. */
|
|
1888
|
+
interface ReconciliationSource {
|
|
1889
|
+
/** Short label, e.g. `Driver's License` or `Ozwell extraction`. */
|
|
1890
|
+
label: string;
|
|
1891
|
+
/** Optional thumbnail / preview URL shown beside the source label. */
|
|
1892
|
+
thumbnailUrl?: string;
|
|
1893
|
+
/** When the source produced these values. */
|
|
1894
|
+
generatedAt?: Date;
|
|
1895
|
+
/** Override the default sparkles icon. */
|
|
1896
|
+
icon?: React$1.ReactNode;
|
|
1897
|
+
}
|
|
1898
|
+
interface ReconciliationAcceptedChange {
|
|
1899
|
+
id: string;
|
|
1900
|
+
value: unknown;
|
|
1901
|
+
}
|
|
1902
|
+
interface AIReconciliationPanelBaseProps extends VariantProps<typeof panelVariants> {
|
|
1903
|
+
/** Headline, e.g. `Update your profile from your license?` */
|
|
1904
|
+
title: string;
|
|
1905
|
+
/** Optional explainer rendered under the title. */
|
|
1906
|
+
description?: React$1.ReactNode;
|
|
1907
|
+
/** Provenance metadata shown in the header. */
|
|
1908
|
+
source: ReconciliationSource;
|
|
1909
|
+
/** All candidate changes. Equal rows are filtered out automatically. */
|
|
1910
|
+
proposals: ReconciliationProposal[];
|
|
1911
|
+
/**
|
|
1912
|
+
* Called when the user clicks Apply. Receives only the accepted rows
|
|
1913
|
+
* (with their possibly-edited value). Async — the button shows a spinner
|
|
1914
|
+
* while the promise is pending.
|
|
1915
|
+
*/
|
|
1916
|
+
onApply: (accepted: ReconciliationAcceptedChange[]) => Promise<void> | void;
|
|
1917
|
+
/** Called when the user dismisses without applying. */
|
|
1918
|
+
onSkip?: () => void;
|
|
1919
|
+
/** Override button labels. */
|
|
1920
|
+
applyLabel?: string;
|
|
1921
|
+
skipLabel?: string;
|
|
1922
|
+
acceptAllLabel?: string;
|
|
1923
|
+
rejectAllLabel?: string;
|
|
1924
|
+
/** Hide the bulk accept / reject toggle. */
|
|
1925
|
+
hideBulkActions?: boolean;
|
|
1926
|
+
/**
|
|
1927
|
+
* Equality test used to drop `no real change` rows. Default normalizes
|
|
1928
|
+
* strings (trim, collapse whitespace, case-insensitive), compares Dates by
|
|
1929
|
+
* epoch, and falls back to JSON for plain objects / arrays.
|
|
1930
|
+
*/
|
|
1931
|
+
isEqual?: (current: unknown, proposed: unknown) => boolean;
|
|
1932
|
+
/** Fires once when every proposal is filtered out as equal. */
|
|
1933
|
+
onNothingToReconcile?: () => void;
|
|
1934
|
+
/** Additional class names on the outer container. */
|
|
1935
|
+
className?: string;
|
|
1936
|
+
}
|
|
1937
|
+
interface AIReconciliationPanelVariantProps extends AIReconciliationPanelBaseProps {
|
|
1938
|
+
/** Render mode. Defaults to `panel`. */
|
|
1939
|
+
variant?: 'panel';
|
|
1940
|
+
open?: never;
|
|
1941
|
+
onOpenChange?: never;
|
|
1942
|
+
}
|
|
1943
|
+
interface AIReconciliationModalProps extends AIReconciliationPanelBaseProps {
|
|
1944
|
+
variant: 'modal';
|
|
1945
|
+
/** Controls modal visibility. */
|
|
1946
|
+
open: boolean;
|
|
1947
|
+
/** Modal open-state change handler. */
|
|
1948
|
+
onOpenChange: (open: boolean) => void;
|
|
1949
|
+
}
|
|
1950
|
+
type AIReconciliationPanelProps = AIReconciliationPanelVariantProps | AIReconciliationModalProps;
|
|
1951
|
+
/**
|
|
1952
|
+
* Default equality used to filter out cosmetic-only diffs. Treats null,
|
|
1953
|
+
* undefined, and `''` as equivalent; ignores case and whitespace for strings;
|
|
1954
|
+
* compares Dates by epoch; compares plain objects / arrays via a key-sorted
|
|
1955
|
+
* stringify so insertion order doesn't matter.
|
|
1956
|
+
*/
|
|
1957
|
+
declare function defaultReconciliationIsEqual(current: unknown, proposed: unknown): boolean;
|
|
1958
|
+
declare const panelVariants: (props?: ({
|
|
1959
|
+
tone?: "default" | "accent" | null | undefined;
|
|
1960
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
1961
|
+
/**
|
|
1962
|
+
* Human-in-the-loop review panel for AI-proposed changes.
|
|
1963
|
+
*
|
|
1964
|
+
* Render this whenever an AI process has produced a set of values you'd like
|
|
1965
|
+
* the user to confirm before persisting. The panel handles diff filtering,
|
|
1966
|
+
* per-row accept / reject, bulk actions, inline editing, and confidence-aware
|
|
1967
|
+
* defaults.
|
|
1968
|
+
*
|
|
1969
|
+
* @see {@link ReconciliationProposal} for per-field options.
|
|
1970
|
+
*/
|
|
1971
|
+
declare function AIReconciliationPanel({ title, description, source, proposals, onApply, onSkip, variant, open, onOpenChange, tone, applyLabel, skipLabel, acceptAllLabel, rejectAllLabel, hideBulkActions, isEqual, onNothingToReconcile, className, }: AIReconciliationPanelProps): react_jsx_runtime.JSX.Element | null;
|
|
1972
|
+
declare namespace AIReconciliationPanel {
|
|
1973
|
+
var displayName: string;
|
|
1974
|
+
}
|
|
1975
|
+
|
|
1976
|
+
/**
|
|
1977
|
+
* MedicationReconciliation — batteries-included medication reconciliation.
|
|
1978
|
+
*
|
|
1979
|
+
* Wraps the presentational `MedicationList` with the full interaction layer:
|
|
1980
|
+
* status changes, Correct / Notes / Add Task modal dialogs, reordering,
|
|
1981
|
+
* removal, and adding medications (quick-add pills + "Other…" modal).
|
|
1982
|
+
*
|
|
1983
|
+
* Works standalone (uncontrolled with `defaultMedications`, or controlled
|
|
1984
|
+
* with `medications` + `onChange`) and is the engine behind the eSheet
|
|
1985
|
+
* `medicationList` question type.
|
|
1986
|
+
*/
|
|
1987
|
+
|
|
1988
|
+
interface MedicationReconciliationProps {
|
|
1989
|
+
/** Controlled medication list (use with `onChange`) */
|
|
1990
|
+
medications?: Medication[];
|
|
1991
|
+
/** Initial medication list (uncontrolled) */
|
|
1992
|
+
defaultMedications?: Medication[];
|
|
1993
|
+
/** Called with the next list after every mutation */
|
|
1994
|
+
onChange?: (medications: Medication[]) => void;
|
|
1995
|
+
/** Header title (pass null to hide) */
|
|
1996
|
+
title?: string | null;
|
|
1997
|
+
/** Common medication names for the quick-add list (omit to hide) */
|
|
1998
|
+
quickAddOptions?: string[];
|
|
1999
|
+
/** Row actions to show (default: correct, add-task, note, remove) */
|
|
2000
|
+
actions?: MedicationAction[];
|
|
2001
|
+
/**
|
|
2002
|
+
* Called for host-specific actions this component does not manage
|
|
2003
|
+
* (e.g. 'open', 'refill' when included in `actions`).
|
|
2004
|
+
*/
|
|
2005
|
+
onAction?: (medication: Medication, action: MedicationAction) => void;
|
|
2006
|
+
/**
|
|
2007
|
+
* CodeLookup wiring for the medication editor (Correct / Add Medication):
|
|
2008
|
+
* pass the CodeLookup component + shard location to enable RxNorm/FDB
|
|
2009
|
+
* coding. Defaults to the ambient `CodeLookupProvider` when one is mounted;
|
|
2010
|
+
* pass `false` to force a plain-text medication name input.
|
|
2011
|
+
*
|
|
2012
|
+
* ```tsx
|
|
2013
|
+
* import { CodeLookup } from '@mieweb/ui/…/CodeLookup';
|
|
2014
|
+
* <MedicationReconciliation codeLookup={{ component: CodeLookup, indexUrl: '/codify' }} … />
|
|
2015
|
+
* ```
|
|
2016
|
+
*/
|
|
2017
|
+
codeLookup?: CodeLookupConfig | false;
|
|
2018
|
+
/**
|
|
2019
|
+
* Render an inline CodeLookup search bar in the add-medication section
|
|
2020
|
+
* (requires `codeLookup`). Picks add immediately as Unreconciled — the
|
|
2021
|
+
* fastest entry path, and non-leading (no suggested medications), which
|
|
2022
|
+
* makes it the right choice for patient-facing intake.
|
|
2023
|
+
*/
|
|
2024
|
+
inlineAddSearch?: boolean;
|
|
2025
|
+
/** Hide all action buttons (display only) */
|
|
2026
|
+
readOnly?: boolean;
|
|
2027
|
+
/** Message shown when the Unreconciled group is empty */
|
|
2028
|
+
reconciledMessage?: string;
|
|
2029
|
+
/** Message shown when the medication list has no entries at all */
|
|
2030
|
+
emptyMessage?: string;
|
|
2031
|
+
/** Additional CSS classes */
|
|
2032
|
+
className?: string;
|
|
2033
|
+
/** Test ID for testing */
|
|
2034
|
+
'data-testid'?: string;
|
|
2035
|
+
}
|
|
2036
|
+
/**
|
|
2037
|
+
* @example Standalone (uncontrolled)
|
|
2038
|
+
* ```tsx
|
|
2039
|
+
* <MedicationReconciliation
|
|
2040
|
+
* defaultMedications={presentingMeds}
|
|
2041
|
+
* quickAddOptions={['aspirin 81 mg tablet']}
|
|
2042
|
+
* onChange={(meds) => save(meds)}
|
|
2043
|
+
* />
|
|
2044
|
+
* ```
|
|
2045
|
+
*
|
|
2046
|
+
* @example Controlled
|
|
2047
|
+
* ```tsx
|
|
2048
|
+
* <MedicationReconciliation medications={meds} onChange={setMeds} />
|
|
2049
|
+
* ```
|
|
1189
2050
|
*/
|
|
1190
|
-
declare function
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
2051
|
+
declare function MedicationReconciliation({ medications: controlledMedications, defaultMedications, onChange, title, quickAddOptions, actions, onAction, codeLookup, inlineAddSearch, readOnly, reconciledMessage, emptyMessage, className, 'data-testid': dataTestId, }: MedicationReconciliationProps): React$1.JSX.Element;
|
|
2052
|
+
|
|
2053
|
+
/**
|
|
2054
|
+
* AllergyManager — batteries-included allergy list.
|
|
2055
|
+
*
|
|
2056
|
+
* Wraps the presentational `AllergyList` with the interaction layer: the
|
|
2057
|
+
* allergy editor (Correct / Add with CodeLookup allergen coding), the note
|
|
2058
|
+
* dialog, removal, and the no-known-allergies (NKA) flow. Uncontrolled via
|
|
2059
|
+
* `defaultAllergies` / controlled via `allergies` + `onChange` — same
|
|
2060
|
+
* pattern as `MedicationReconciliation`.
|
|
2061
|
+
*/
|
|
2062
|
+
|
|
2063
|
+
interface AllergyManagerProps {
|
|
2064
|
+
/** Controlled allergy list (use with `onChange`) */
|
|
2065
|
+
allergies?: Allergy[];
|
|
2066
|
+
/** Initial allergy list (uncontrolled) */
|
|
2067
|
+
defaultAllergies?: Allergy[];
|
|
2068
|
+
/** Called with the next list after every mutation */
|
|
2069
|
+
onChange?: (allergies: Allergy[]) => void;
|
|
2070
|
+
/** No-known-allergies flag (controlled; see AllergyList) */
|
|
2071
|
+
noKnownAllergies?: boolean;
|
|
2072
|
+
/** Called when NKA is toggled */
|
|
2073
|
+
onNoKnownAllergiesChange?: (value: boolean) => void;
|
|
2074
|
+
/** Header title (pass null to hide) */
|
|
2075
|
+
title?: string | null;
|
|
2076
|
+
/**
|
|
2077
|
+
* CodeLookup wiring for allergen search (drug shard). Enables both the
|
|
2078
|
+
* inline add bar and coded allergens in the editor. Defaults to the ambient
|
|
2079
|
+
* `CodeLookupProvider`; pass `false` to force plain text.
|
|
2080
|
+
*/
|
|
2081
|
+
codeLookup?: CodeLookupConfig | false;
|
|
2082
|
+
/** Render an inline allergen search bar in the add section (requires codeLookup) */
|
|
2083
|
+
inlineAddSearch?: boolean;
|
|
2084
|
+
/** Hide all action affordances (display only) */
|
|
2085
|
+
readOnly?: boolean;
|
|
2086
|
+
/** Additional CSS classes */
|
|
2087
|
+
className?: string;
|
|
2088
|
+
/** Test ID for testing */
|
|
2089
|
+
'data-testid'?: string;
|
|
1202
2090
|
}
|
|
1203
2091
|
/**
|
|
1204
|
-
*
|
|
2092
|
+
* @example Patient intake (uncontrolled, inline search, NKA)
|
|
2093
|
+
* ```tsx
|
|
2094
|
+
* <AllergyManager
|
|
2095
|
+
* defaultAllergies={[]}
|
|
2096
|
+
* inlineAddSearch
|
|
2097
|
+
* codeLookup={{ component: CodeLookup, indexUrl: '/codify' }}
|
|
2098
|
+
* noKnownAllergies={nka}
|
|
2099
|
+
* onNoKnownAllergiesChange={setNka}
|
|
2100
|
+
* onChange={save}
|
|
2101
|
+
* />
|
|
2102
|
+
* ```
|
|
1205
2103
|
*/
|
|
1206
|
-
declare function
|
|
2104
|
+
declare function AllergyManager({ allergies: controlled, defaultAllergies, onChange, noKnownAllergies, onNoKnownAllergiesChange, title, codeLookup, inlineAddSearch, readOnly, className, 'data-testid': dataTestId, }: AllergyManagerProps): React$1.JSX.Element;
|
|
1207
2105
|
|
|
1208
2106
|
interface AppHeaderProps {
|
|
1209
2107
|
children: ReactNode;
|
|
@@ -1305,6 +2203,372 @@ interface AppHeaderUserMenuProps {
|
|
|
1305
2203
|
}
|
|
1306
2204
|
declare function AppHeaderUserMenu({ name, email, avatarUrl, initials, isOpen, onClick, className, 'data-testid': testId, }: AppHeaderUserMenuProps): React__default.JSX.Element;
|
|
1307
2205
|
|
|
2206
|
+
/** A single coding on a condition assertion (ICD-10 / ICD-11 / SNOMED). */
|
|
2207
|
+
interface ConditionCoding {
|
|
2208
|
+
/** Coding system, e.g. 'ICD-10-CM', 'ICD-11', 'SNOMED' */
|
|
2209
|
+
system: 'ICD-10-CM' | 'ICD-11' | 'SNOMED' | string;
|
|
2210
|
+
code: string;
|
|
2211
|
+
display?: string;
|
|
2212
|
+
/** Which coding is authoritative for this assertion */
|
|
2213
|
+
primary?: boolean;
|
|
2214
|
+
/** Provenance when derived via a crosswalk (e.g. SNOMED→ICD-10 map) */
|
|
2215
|
+
mappedFrom?: string;
|
|
2216
|
+
}
|
|
2217
|
+
/** Longitudinal status of the concern (the stable problem thread). */
|
|
2218
|
+
type ConcernStatus = 'active' | 'recurrence' | 'relapse' | 'inactive' | 'remission' | 'resolved';
|
|
2219
|
+
/** FHIR-aligned verification status of an assertion. */
|
|
2220
|
+
type VerificationStatus = 'unconfirmed' | 'provisional' | 'differential' | 'confirmed' | 'refuted' | 'entered-in-error';
|
|
2221
|
+
/** Why an assertion superseded its predecessor. */
|
|
2222
|
+
type AssertionChangeType = 'refinement' | 'revision' | 'progression' | 'reattribution';
|
|
2223
|
+
/** Three-state flag for an optional field: confident / uncertain / explicitly unknown. */
|
|
2224
|
+
interface FieldUncertainty {
|
|
2225
|
+
/** false = explicitly unknown ("asked; patient doesn't know") — distinct from untouched */
|
|
2226
|
+
known: boolean;
|
|
2227
|
+
/** Why the value is absent (~ FHIR data-absent-reason) */
|
|
2228
|
+
reason?: 'asked-unknown' | 'not-asked' | 'masked' | 'unavailable';
|
|
2229
|
+
/** Softness of a value that IS present */
|
|
2230
|
+
confidence?: 'low' | 'medium' | 'high';
|
|
2231
|
+
note?: string;
|
|
2232
|
+
}
|
|
2233
|
+
/** Condition fields that can carry per-field uncertainty. */
|
|
2234
|
+
type UncertainConditionField = 'coding' | 'onset' | 'severity' | 'laterality' | 'bodySite';
|
|
2235
|
+
/** First-class uncertainty block for a condition assertion. */
|
|
2236
|
+
interface Uncertainty {
|
|
2237
|
+
overall?: 'confirmed' | 'low' | 'medium' | 'high';
|
|
2238
|
+
fields?: Partial<Record<UncertainConditionField, FieldUncertainty>>;
|
|
2239
|
+
}
|
|
2240
|
+
/** A time-stamped, coded characterization of a concern. */
|
|
2241
|
+
interface ConditionAssertion {
|
|
2242
|
+
id: string;
|
|
2243
|
+
/** Display date the assertion was made, e.g. "2023-06-14" */
|
|
2244
|
+
date: string;
|
|
2245
|
+
/** Free-text condition name — the only hard-required clinical field */
|
|
2246
|
+
text: string;
|
|
2247
|
+
coding?: ConditionCoding[];
|
|
2248
|
+
verificationStatus: VerificationStatus;
|
|
2249
|
+
/** How this assertion relates to the one it supersedes */
|
|
2250
|
+
changeType?: AssertionChangeType;
|
|
2251
|
+
/** Id of the assertion this one supersedes */
|
|
2252
|
+
supersedes?: string;
|
|
2253
|
+
severity?: 'mild' | 'moderate' | 'severe';
|
|
2254
|
+
/** Onset — exact date and/or fuzzy human string ("since her twenties") */
|
|
2255
|
+
onset?: {
|
|
2256
|
+
date?: string;
|
|
2257
|
+
fuzzy?: string;
|
|
2258
|
+
};
|
|
2259
|
+
/** First-class uncertainty (§4 of the design doc) */
|
|
2260
|
+
uncertainty?: Uncertainty;
|
|
2261
|
+
note?: string;
|
|
2262
|
+
}
|
|
2263
|
+
/** Relationship between two concerns. */
|
|
2264
|
+
interface ConcernRelationship {
|
|
2265
|
+
type: 'caused-by' | 'evolved-from' | 'differential-sibling' | 'complication-of';
|
|
2266
|
+
/** concernId of the related concern */
|
|
2267
|
+
concernId: string;
|
|
2268
|
+
/** Display name of the related concern */
|
|
2269
|
+
display?: string;
|
|
2270
|
+
}
|
|
2271
|
+
/** A quick, dated progress note about a concern — lighter than an assertion. */
|
|
2272
|
+
interface ConditionObservation {
|
|
2273
|
+
id: string;
|
|
2274
|
+
/** Display date, e.g. "2026-07-03" */
|
|
2275
|
+
date: string;
|
|
2276
|
+
text: string;
|
|
2277
|
+
author?: string;
|
|
2278
|
+
}
|
|
2279
|
+
/**
|
|
2280
|
+
* A stable problem thread. The concernId is the durable identity that orders
|
|
2281
|
+
* and encounters reference; assertions carry the evolving codes.
|
|
2282
|
+
*/
|
|
2283
|
+
interface ConditionConcern {
|
|
2284
|
+
concernId: string;
|
|
2285
|
+
clinicalStatus: ConcernStatus;
|
|
2286
|
+
/** Ordered oldest → newest; the last non-refuted assertion is current */
|
|
2287
|
+
assertions: ConditionAssertion[];
|
|
2288
|
+
/** Quick progress notes over time (newest last) */
|
|
2289
|
+
observations?: ConditionObservation[];
|
|
2290
|
+
relationships?: ConcernRelationship[];
|
|
2291
|
+
/** Where the concern came from */
|
|
2292
|
+
source?: 'ehrProblemList' | 'patientReported' | 'manuallyAdded' | 'claimsHistory';
|
|
2293
|
+
}
|
|
2294
|
+
/** Row actions on a concern. */
|
|
2295
|
+
type ProblemListAction = 'open' | 'observe' | 'refine' | 'revise' | 'resolve' | 'relate' | 'move-up' | 'move-down';
|
|
2296
|
+
interface ProblemListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'className' | 'title'> {
|
|
2297
|
+
/** Patient-level concerns (controlled) */
|
|
2298
|
+
concerns: ConditionConcern[];
|
|
2299
|
+
/** Header title (pass null to hide) */
|
|
2300
|
+
title?: string | null;
|
|
2301
|
+
/** Called when a row action is clicked */
|
|
2302
|
+
onAction?: (concern: ConditionConcern, action: ProblemListAction) => void;
|
|
2303
|
+
/** Called when a new problem is added via the capture-first input */
|
|
2304
|
+
onAddProblem?: (text: string) => void;
|
|
2305
|
+
/**
|
|
2306
|
+
* Called with the full ordered list of concernIds after a move — via drag
|
|
2307
|
+
* and drop, the move buttons, or Alt+Arrow keys. Enables reordering. The
|
|
2308
|
+
* component renders concerns in props order — persist the ids wherever the
|
|
2309
|
+
* encounter/patient object lives and feed them back in.
|
|
2310
|
+
*/
|
|
2311
|
+
onReorder?: (concernIds: string[]) => void;
|
|
2312
|
+
/** Which row actions to show (default: all) */
|
|
2313
|
+
actions?: ProblemListAction[];
|
|
2314
|
+
/** Hide all action buttons (display only) */
|
|
2315
|
+
readOnly?: boolean;
|
|
2316
|
+
/** Message shown when there are no concerns */
|
|
2317
|
+
emptyMessage?: string;
|
|
2318
|
+
/** Additional CSS classes */
|
|
2319
|
+
className?: string;
|
|
2320
|
+
/** Test ID for testing */
|
|
2321
|
+
'data-testid'?: string;
|
|
2322
|
+
}
|
|
2323
|
+
/**
|
|
2324
|
+
* Grouping key for a concern. Unconfirmed concerns (current assertion not yet
|
|
2325
|
+
* verified) live in their own group, separate from Active / Resolved.
|
|
2326
|
+
*/
|
|
2327
|
+
declare function concernGroupKey(concern: ConditionConcern): string;
|
|
2328
|
+
declare const CONCERN_STATUS_LABELS: Record<ConcernStatus, string>;
|
|
2329
|
+
declare const CHANGE_TYPE_LABELS: Record<AssertionChangeType, string>;
|
|
2330
|
+
/** The current (last non-refuted, non-error) assertion of a concern. */
|
|
2331
|
+
declare function currentAssertion(concern: ConditionConcern): ConditionAssertion | undefined;
|
|
2332
|
+
/**
|
|
2333
|
+
* Parenthetical coding display. Clinicians don't need chip noise: inline we
|
|
2334
|
+
* show only ICD-10/ICD-11 codes, unlabeled (the code format is obvious), and
|
|
2335
|
+
* SNOMED stays out of the way. The full coding background — every system,
|
|
2336
|
+
* display name, and crosswalk provenance — lives in the tooltip.
|
|
2337
|
+
*/
|
|
2338
|
+
declare function CodingChips({ coding }: {
|
|
2339
|
+
coding?: ConditionCoding[];
|
|
2340
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
2341
|
+
/**
|
|
2342
|
+
* Full concern background for a hover/long-press tooltip: assertion history,
|
|
2343
|
+
* coding background, and recent observations.
|
|
2344
|
+
*/
|
|
2345
|
+
declare function concernHistoryContent(concern: ConditionConcern): React$1.ReactNode;
|
|
2346
|
+
/** Badge summarizing an assertion's uncertainty block (§4 of the design doc). */
|
|
2347
|
+
declare function UncertaintyBadge({ uncertainty, }: {
|
|
2348
|
+
uncertainty?: Uncertainty;
|
|
2349
|
+
}): react_jsx_runtime.JSX.Element | null;
|
|
2350
|
+
/**
|
|
2351
|
+
* Patient-level problem list built on the concern/assertion model: each row is
|
|
2352
|
+
* a stable ConditionConcern whose coded characterization evolves through an
|
|
2353
|
+
* assertion history (refinement / revision / progression). Rows expand to show
|
|
2354
|
+
* the assertion timeline; refuted assertions render struck-through.
|
|
2355
|
+
*
|
|
2356
|
+
* Controlled component: concerns come in via props; every user interaction is
|
|
2357
|
+
* reported through callbacks.
|
|
2358
|
+
*
|
|
2359
|
+
* @example
|
|
2360
|
+
* ```tsx
|
|
2361
|
+
* <ProblemList
|
|
2362
|
+
* concerns={concerns}
|
|
2363
|
+
* onAction={(concern, action) => handleAction(concern, action)}
|
|
2364
|
+
* onAddProblem={(text) => addConcern(text)}
|
|
2365
|
+
* />
|
|
2366
|
+
* ```
|
|
2367
|
+
*/
|
|
2368
|
+
declare const ProblemList: React$1.ForwardRefExoticComponent<ProblemListProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
2369
|
+
|
|
2370
|
+
/** Order categories that can nest under an assessed problem. */
|
|
2371
|
+
type OrderType = 'medication' | 'lab' | 'imaging' | 'procedure' | 'referral';
|
|
2372
|
+
/**
|
|
2373
|
+
* An order placed this visit. Links to a problem via concernId (durable
|
|
2374
|
+
* IndicationLink) — orders without a concernId collect in the unlinked bucket.
|
|
2375
|
+
*/
|
|
2376
|
+
interface AssessmentOrder {
|
|
2377
|
+
orderId: string;
|
|
2378
|
+
type: OrderType;
|
|
2379
|
+
/** Display text, e.g. "insulin glargine 10 units qhs" */
|
|
2380
|
+
display: string;
|
|
2381
|
+
/** Durable link to the problem this order is for */
|
|
2382
|
+
concernId?: string;
|
|
2383
|
+
/** Secondary display text, e.g. status or sig */
|
|
2384
|
+
detail?: string;
|
|
2385
|
+
/** Coding from the code lookup, when the order was picked from it */
|
|
2386
|
+
code?: {
|
|
2387
|
+
fullid: string;
|
|
2388
|
+
codetype: string;
|
|
2389
|
+
fullcode: string;
|
|
2390
|
+
};
|
|
2391
|
+
/** Urgency — routine when omitted */
|
|
2392
|
+
priority?: 'routine' | 'urgent' | 'stat';
|
|
2393
|
+
/** When to perform/collect, e.g. 'in 3 months', 'next visit' */
|
|
2394
|
+
timing?: string;
|
|
2395
|
+
/** Why the order is placed (diagnosis / reason) */
|
|
2396
|
+
indication?: string;
|
|
2397
|
+
/** Notes to the performing party (lab, radiology, consultant) */
|
|
2398
|
+
notes?: string;
|
|
2399
|
+
/** Imaging/procedure: body site, e.g. 'chest, PA and lateral', 'left knee' */
|
|
2400
|
+
bodySite?: string;
|
|
2401
|
+
/** Referral: target specialty or provider */
|
|
2402
|
+
referTo?: string;
|
|
2403
|
+
}
|
|
2404
|
+
/** A code picked from a lookup (structurally matches CodifyResult). */
|
|
2405
|
+
interface OrderCodePick {
|
|
2406
|
+
fullid: string;
|
|
2407
|
+
label: string;
|
|
2408
|
+
codetype: string;
|
|
2409
|
+
fullcode: string;
|
|
2410
|
+
}
|
|
2411
|
+
/** What the unified add row hands back: a coded pick or free text. */
|
|
2412
|
+
interface AssessmentAddPick {
|
|
2413
|
+
label: string;
|
|
2414
|
+
/** Absent for free-text entries */
|
|
2415
|
+
code?: {
|
|
2416
|
+
fullid: string;
|
|
2417
|
+
codetype: string;
|
|
2418
|
+
fullcode: string;
|
|
2419
|
+
};
|
|
2420
|
+
}
|
|
2421
|
+
/**
|
|
2422
|
+
* Render-prop that draws the add-order / add-problem code search. `domains`
|
|
2423
|
+
* reflects the user's order-type filter ('auto' = undefined = search
|
|
2424
|
+
* everything) and `placeholder` is context-specific; call `onPick` with the
|
|
2425
|
+
* chosen code (or `onFreeText` when free text is supported).
|
|
2426
|
+
*/
|
|
2427
|
+
type RenderOrderSearch = (args: {
|
|
2428
|
+
domains?: string[];
|
|
2429
|
+
/** Rank results from these domains first (auto mode: concerns before orders) */
|
|
2430
|
+
preferDomains?: string[];
|
|
2431
|
+
/** Boost these coding systems (assessments prefer ICD-10 over SNOMED) */
|
|
2432
|
+
preferCodetypes?: string[];
|
|
2433
|
+
/** Restrict condition results to billable (leaf) ICD-10 codes */
|
|
2434
|
+
billableOnly?: boolean;
|
|
2435
|
+
placeholder: string;
|
|
2436
|
+
onPick: (pick: OrderCodePick) => void;
|
|
2437
|
+
/** Present when free-text entry is supported in this context */
|
|
2438
|
+
onFreeText?: (text: string) => void;
|
|
2439
|
+
}) => React$1.ReactNode;
|
|
2440
|
+
/** Infer the order type from the picked code's coding system. */
|
|
2441
|
+
declare function orderTypeForCodetype(codetype: string): OrderType;
|
|
2442
|
+
/** Coding systems that represent a diagnosis/problem rather than an order.
|
|
2443
|
+
* Occupational surveillance programs (OSHA/FMCSA/NFPA/FAA) are concerns too —
|
|
2444
|
+
* a program joins the problem list and its required orders link under it. */
|
|
2445
|
+
declare function isConditionCodetype(codetype: string): boolean;
|
|
2446
|
+
/** Code-lookup domains to search for an order-type filter. */
|
|
2447
|
+
declare const ORDER_TYPE_SEARCH_DOMAINS: Record<OrderType, string[]>;
|
|
2448
|
+
/** One assessed problem this visit. */
|
|
2449
|
+
interface AssessmentItem {
|
|
2450
|
+
concernId: string;
|
|
2451
|
+
/** Today's assertion for the concern (even a no-change "addressed today" one) */
|
|
2452
|
+
assertionId: string;
|
|
2453
|
+
note?: string;
|
|
2454
|
+
}
|
|
2455
|
+
/** Row actions on an assessed problem. */
|
|
2456
|
+
type AssessmentAction = 'refine' | 'revise' | 'add-order';
|
|
2457
|
+
interface AssessmentProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'className' | 'title'> {
|
|
2458
|
+
/** Concerns addressed this visit (with their assertion history) */
|
|
2459
|
+
concerns: ConditionConcern[];
|
|
2460
|
+
/** Assessment entries — one per assessed concern (controlled) */
|
|
2461
|
+
items: AssessmentItem[];
|
|
2462
|
+
/** Orders placed this visit */
|
|
2463
|
+
orders?: AssessmentOrder[];
|
|
2464
|
+
/** Header title (pass null to hide) */
|
|
2465
|
+
title?: string | null;
|
|
2466
|
+
/** Show the plan (orders nested under each problem). Default true. */
|
|
2467
|
+
showPlan?: boolean;
|
|
2468
|
+
/** Called when the plan toggle changes (omit to hide the toggle) */
|
|
2469
|
+
onShowPlanChange?: (show: boolean) => void;
|
|
2470
|
+
/** Called when a row action is clicked */
|
|
2471
|
+
onAction?: (item: AssessmentItem, action: AssessmentAction) => void;
|
|
2472
|
+
/**
|
|
2473
|
+
* Called when a new order is created from the inline order form.
|
|
2474
|
+
* Enables the "Add order" affordances — `item` is null when the order is
|
|
2475
|
+
* added from the unlinked bucket. The new order should come back in via
|
|
2476
|
+
* `orders` (with `concernId` set to the item's concern when linked).
|
|
2477
|
+
*/
|
|
2478
|
+
onAddOrder?: (item: AssessmentItem | null, order: {
|
|
2479
|
+
type: OrderType;
|
|
2480
|
+
display: string;
|
|
2481
|
+
code?: AssessmentOrder['code'];
|
|
2482
|
+
}) => void;
|
|
2483
|
+
/**
|
|
2484
|
+
* Called when a diagnosis (coded or free text) is added as a new problem
|
|
2485
|
+
* via the unified add row. Enables it together with renderOrderSearch.
|
|
2486
|
+
*/
|
|
2487
|
+
onAddAssessment?: (pick: AssessmentAddPick) => void;
|
|
2488
|
+
/**
|
|
2489
|
+
* Render a code-lookup search for the add-order / add-problem forms
|
|
2490
|
+
* (dependency-injected so the library build doesn't bundle the lookup's
|
|
2491
|
+
* worker — pass e.g. a CodeLookup wired to your index). Defaults to the
|
|
2492
|
+
* ambient `CodeLookupProvider`; pass `false` to fall back to free-text
|
|
2493
|
+
* order entry.
|
|
2494
|
+
*/
|
|
2495
|
+
renderOrderSearch?: RenderOrderSearch | false;
|
|
2496
|
+
/** Called when an unlinked order is linked to a problem — also used when an
|
|
2497
|
+
* order is dragged onto another problem (re-link = move) */
|
|
2498
|
+
onLinkOrder?: (order: AssessmentOrder, concernId: string) => void;
|
|
2499
|
+
/**
|
|
2500
|
+
* Called when the user chooses Edit on an order, before the built-in
|
|
2501
|
+
* inline form opens. Return true to take over editing — e.g. open a
|
|
2502
|
+
* `MedicationEditor` for medication orders — and feed the change back in
|
|
2503
|
+
* via `orders`. Anything falsy falls through to the inline display/detail
|
|
2504
|
+
* form (when `onEditOrder` is set).
|
|
2505
|
+
*/
|
|
2506
|
+
onEditOrderStart?: (order: AssessmentOrder) => boolean | void;
|
|
2507
|
+
/**
|
|
2508
|
+
* Called with the edited display/detail when an order's inline edit is
|
|
2509
|
+
* saved — enables the Edit action on every order row (any type).
|
|
2510
|
+
* Persist and feed the change back in via `orders`.
|
|
2511
|
+
*/
|
|
2512
|
+
onEditOrder?: (order: AssessmentOrder, changes: {
|
|
2513
|
+
display: string;
|
|
2514
|
+
detail?: string;
|
|
2515
|
+
}) => void;
|
|
2516
|
+
/** Called when an order is removed — enables the Remove action on order rows */
|
|
2517
|
+
onRemoveOrder?: (order: AssessmentOrder) => void;
|
|
2518
|
+
/**
|
|
2519
|
+
* Called with the full new order-id sequence after an order is dragged to a
|
|
2520
|
+
* new position — enables drag & drop reordering of orders within a plan.
|
|
2521
|
+
* Orders render in `orders` array order per problem; persist and feed back.
|
|
2522
|
+
*/
|
|
2523
|
+
onReorderOrders?: (orderIds: string[]) => void;
|
|
2524
|
+
/**
|
|
2525
|
+
* Called with the new concernId order after a problem block is dragged —
|
|
2526
|
+
* enables drag & drop reordering of the assessment. The list renders in
|
|
2527
|
+
* `items` order; persist and feed the order back in.
|
|
2528
|
+
*/
|
|
2529
|
+
onReorderItems?: (concernIds: string[]) => void;
|
|
2530
|
+
/** Hide all controls (display only) */
|
|
2531
|
+
readOnly?: boolean;
|
|
2532
|
+
/**
|
|
2533
|
+
* Restrict concern searches to billable (leaf) ICD-10 codes — category
|
|
2534
|
+
* roots (E11) and SNOMED synonyms are dropped. Forwarded to
|
|
2535
|
+
* renderOrderSearch as `billableOnly`.
|
|
2536
|
+
*/
|
|
2537
|
+
billableOnly?: boolean;
|
|
2538
|
+
/** Additional CSS classes */
|
|
2539
|
+
className?: string;
|
|
2540
|
+
/** Test ID for testing */
|
|
2541
|
+
'data-testid'?: string;
|
|
2542
|
+
}
|
|
2543
|
+
declare const ORDER_TYPE_META: Record<OrderType, {
|
|
2544
|
+
label: string;
|
|
2545
|
+
icon: React$1.ComponentType<{
|
|
2546
|
+
size?: number | string;
|
|
2547
|
+
}>;
|
|
2548
|
+
}>;
|
|
2549
|
+
/**
|
|
2550
|
+
* Visit-specific Assessment (& Plan). One block per assessed problem showing
|
|
2551
|
+
* today's assertion; with the plan enabled, orders linked to the problem (via
|
|
2552
|
+
* concernId — the durable IndicationLink) render indented under it. Orders
|
|
2553
|
+
* without a problem link collect in an unlinked bucket with a one-click link
|
|
2554
|
+
* affordance.
|
|
2555
|
+
*
|
|
2556
|
+
* Controlled component: concerns, items and orders come in via props; every
|
|
2557
|
+
* user interaction is reported through callbacks.
|
|
2558
|
+
*
|
|
2559
|
+
* @example
|
|
2560
|
+
* ```tsx
|
|
2561
|
+
* <Assessment
|
|
2562
|
+
* concerns={touchedConcerns}
|
|
2563
|
+
* items={assessment}
|
|
2564
|
+
* orders={orders}
|
|
2565
|
+
* onAction={(item, action) => handleAction(item, action)}
|
|
2566
|
+
* onLinkOrder={(order, concernId) => linkOrder(order.orderId, concernId)}
|
|
2567
|
+
* />
|
|
2568
|
+
* ```
|
|
2569
|
+
*/
|
|
2570
|
+
declare const Assessment: React$1.ForwardRefExoticComponent<AssessmentProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
2571
|
+
|
|
1308
2572
|
type AuthMode = 'login' | 'signup' | 'forgotPassword' | 'resetPassword' | 'verify';
|
|
1309
2573
|
interface SocialProvider {
|
|
1310
2574
|
id: string;
|
|
@@ -1578,6 +2842,242 @@ declare function createDefaultSchedule(): DaySchedule[];
|
|
|
1578
2842
|
declare function create24HourSchedule(): DaySchedule[];
|
|
1579
2843
|
declare function createWeekdaySchedule(start?: string, end?: string): DaySchedule[];
|
|
1580
2844
|
|
|
2845
|
+
interface CodifyResult {
|
|
2846
|
+
fullid: string;
|
|
2847
|
+
label: string;
|
|
2848
|
+
codetype: string;
|
|
2849
|
+
fullcode: string;
|
|
2850
|
+
domain: string;
|
|
2851
|
+
score: number;
|
|
2852
|
+
/** true when the match came (partly) from an alias token */
|
|
2853
|
+
viaAlias: boolean;
|
|
2854
|
+
/** true when the match came (partly) from the edit-distance typo fallback */
|
|
2855
|
+
viaFuzzy?: boolean;
|
|
2856
|
+
}
|
|
2857
|
+
|
|
2858
|
+
/**
|
|
2859
|
+
* CodeLookup — offline medical-code autocomplete combobox.
|
|
2860
|
+
*
|
|
2861
|
+
* Full pipeline & design docs:
|
|
2862
|
+
* https://github.com/mieweb/ui/blob/main/src/components/CodeLookup/README.md
|
|
2863
|
+
* (local: ./README.md)
|
|
2864
|
+
*/
|
|
2865
|
+
|
|
2866
|
+
type CodifyDomain = 'condition' | 'med' | 'lab' | 'procedure' | 'vaccine' | 'occupational' | 'quality';
|
|
2867
|
+
interface CodeLookupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'className' | 'onSelect'> {
|
|
2868
|
+
/** Base URL where per-locale index directories are served */
|
|
2869
|
+
indexUrl: string;
|
|
2870
|
+
/**
|
|
2871
|
+
* Locale of the shard set to load: shards are fetched from
|
|
2872
|
+
* `{indexUrl}/{locale}/manifest.json`. Non-en locales may be sample
|
|
2873
|
+
* subsets (see README). Default: 'en'.
|
|
2874
|
+
*/
|
|
2875
|
+
locale?: string;
|
|
2876
|
+
/** Domains to load & search (default: all in the manifest) */
|
|
2877
|
+
domains?: CodifyDomain[];
|
|
2878
|
+
/**
|
|
2879
|
+
* Override the program-metadata sidecar URL (defaults to
|
|
2880
|
+
* `{indexUrl}/{locale}/programs.json`). Lets a deployment serve
|
|
2881
|
+
* employer-specific protocols — required orders, periodicity — without
|
|
2882
|
+
* rebuilding shards. See mieweb/codify programs.json for the format.
|
|
2883
|
+
*/
|
|
2884
|
+
programsUrl?: string;
|
|
2885
|
+
/**
|
|
2886
|
+
* Restrict searches to these domains at query time without reloading
|
|
2887
|
+
* shards (e.g. an order-type filter). Default: all loaded domains.
|
|
2888
|
+
*/
|
|
2889
|
+
searchDomains?: CodifyDomain[];
|
|
2890
|
+
/**
|
|
2891
|
+
* Rank matches from these domains ahead of the rest (still searched
|
|
2892
|
+
* together). E.g. `['condition', 'occupational']` so an "add (auto)" box
|
|
2893
|
+
* surfaces concerns before the many med/lab matches.
|
|
2894
|
+
*/
|
|
2895
|
+
preferDomains?: CodifyDomain[];
|
|
2896
|
+
/**
|
|
2897
|
+
* Boost these coding systems within their domain — e.g. `['ICD10']` so
|
|
2898
|
+
* billing codes outrank SNOMED synonyms in an assessment context.
|
|
2899
|
+
*/
|
|
2900
|
+
preferCodetypes?: string[];
|
|
2901
|
+
/**
|
|
2902
|
+
* Conditions: only billable (leaf) ICD-10 codes — category roots (E11)
|
|
2903
|
+
* and SNOMED entries are dropped. Other domains are unaffected.
|
|
2904
|
+
*/
|
|
2905
|
+
billableOnly?: boolean;
|
|
2906
|
+
/** Called when a result is picked */
|
|
2907
|
+
onSelect?: (result: CodifyResult) => void;
|
|
2908
|
+
/**
|
|
2909
|
+
* Seed the search box with this query on mount. By default the search
|
|
2910
|
+
* runs as soon as the index is ready and the results open — lets an
|
|
2911
|
+
* editor opened on an uncoded entry immediately offer the closest coded
|
|
2912
|
+
* matches. Only read once (remount — e.g. via key — to reseed).
|
|
2913
|
+
*/
|
|
2914
|
+
initialQuery?: string;
|
|
2915
|
+
/**
|
|
2916
|
+
* Whether the seeded `initialQuery` searches on mount (default true).
|
|
2917
|
+
* Pass false to just prefill the box — e.g. an already-coded entry whose
|
|
2918
|
+
* name should be visible without the results dropdown popping open.
|
|
2919
|
+
*/
|
|
2920
|
+
initialSearch?: boolean;
|
|
2921
|
+
/**
|
|
2922
|
+
* Allow free-text entry: called when the user presses Enter without a
|
|
2923
|
+
* highlighted result, or clicks the "use as free text" footer row.
|
|
2924
|
+
*/
|
|
2925
|
+
onFreeText?: (text: string) => void;
|
|
2926
|
+
/** Max results to show */
|
|
2927
|
+
limit?: number;
|
|
2928
|
+
placeholder?: string;
|
|
2929
|
+
/**
|
|
2930
|
+
* Render just the search input + dropdown (no card, no status line) for
|
|
2931
|
+
* embedding in forms. Loading/error state shows in the placeholder.
|
|
2932
|
+
*/
|
|
2933
|
+
bare?: boolean;
|
|
2934
|
+
/**
|
|
2935
|
+
* Clear the input after a selection so the next entry can be typed
|
|
2936
|
+
* immediately (defaults to true in bare mode, false otherwise).
|
|
2937
|
+
*/
|
|
2938
|
+
clearOnSelect?: boolean;
|
|
2939
|
+
/** Additional CSS classes */
|
|
2940
|
+
className?: string;
|
|
2941
|
+
/** Test ID for testing */
|
|
2942
|
+
'data-testid'?: string;
|
|
2943
|
+
}
|
|
2944
|
+
|
|
2945
|
+
/**
|
|
2946
|
+
* CodeLookupProvider — supply an offline `CodeLookup` once so the clinical
|
|
2947
|
+
* components (allergies, medications, conditions, orders, assessment) default
|
|
2948
|
+
* to coded search without per-component wiring.
|
|
2949
|
+
*
|
|
2950
|
+
* `CodeLookup` ships a module Web Worker the library's tsup build can't bundle,
|
|
2951
|
+
* so it can't be imported here — the app injects the component (import it from
|
|
2952
|
+
* its own bundler, e.g. Vite/Next) and this context distributes it:
|
|
2953
|
+
*
|
|
2954
|
+
* ```tsx
|
|
2955
|
+
* import { CodeLookupProvider } from '@mieweb/ui';
|
|
2956
|
+
* import { CodeLookup } from '…/CodeLookup'; // app bundler resolves the worker
|
|
2957
|
+
*
|
|
2958
|
+
* <CodeLookupProvider component={CodeLookup} indexUrl="/codify">
|
|
2959
|
+
* <App />
|
|
2960
|
+
* </CodeLookupProvider>
|
|
2961
|
+
* ```
|
|
2962
|
+
*
|
|
2963
|
+
* Components read the context as their default; an explicit `codeLookup` /
|
|
2964
|
+
* `renderCodeSearch` prop overrides it, and `codeLookup={false}` (or
|
|
2965
|
+
* `renderCodeSearch={false}`) opts a component out back to plain text.
|
|
2966
|
+
*
|
|
2967
|
+
* This module is intentionally worker-free (only a `import type` of
|
|
2968
|
+
* `CodeLookupProps`, which is erased at build) so it is safe to ship in the
|
|
2969
|
+
* main `@mieweb/ui` entry.
|
|
2970
|
+
*/
|
|
2971
|
+
|
|
2972
|
+
/**
|
|
2973
|
+
* The CodeLookup component the provider distributes to consumers.
|
|
2974
|
+
*
|
|
2975
|
+
* Typed as a bare function component (not `ComponentType`) so it stays
|
|
2976
|
+
* structurally assignable into the narrower per-domain lookup configs
|
|
2977
|
+
* (`MedicationLookupProps`, `OrderLookupProps`, …) — a `ComponentType` union
|
|
2978
|
+
* drags in `ComponentClass.defaultProps`, whose contravariance breaks that
|
|
2979
|
+
* assignment. `CodeLookup` is a function component, so this is exact.
|
|
2980
|
+
*/
|
|
2981
|
+
type CodeLookupComponent = (props: CodeLookupProps) => React$1.ReactElement | null;
|
|
2982
|
+
/** Resolved lookup wiring a component consumes (from prop or context). */
|
|
2983
|
+
interface CodeLookupProviderConfig {
|
|
2984
|
+
/** The injected CodeLookup component (worker-capable, from the app bundle). */
|
|
2985
|
+
component: CodeLookupComponent;
|
|
2986
|
+
/** Base URL the codify worker fetches `{locale}/manifest.json` + shards from. */
|
|
2987
|
+
indexUrl: string;
|
|
2988
|
+
/** Shard-set locale (default 'en'). */
|
|
2989
|
+
locale?: string;
|
|
2990
|
+
}
|
|
2991
|
+
interface CodeLookupProviderProps {
|
|
2992
|
+
/** The CodeLookup component to distribute (import it in your app). */
|
|
2993
|
+
component: CodeLookupComponent;
|
|
2994
|
+
/** Where the codify index is served (default '/codify'). */
|
|
2995
|
+
indexUrl?: string;
|
|
2996
|
+
/** Shard-set locale (default 'en'). */
|
|
2997
|
+
locale?: string;
|
|
2998
|
+
children: React$1.ReactNode;
|
|
2999
|
+
}
|
|
3000
|
+
declare function CodeLookupProvider({ component, indexUrl, locale, children, }: CodeLookupProviderProps): React$1.ReactElement;
|
|
3001
|
+
/**
|
|
3002
|
+
* The ambient CodeLookup config supplied by the nearest `CodeLookupProvider`,
|
|
3003
|
+
* or `null` when none is mounted (components then fall back to plain text).
|
|
3004
|
+
*/
|
|
3005
|
+
declare function useCodeLookupConfig(): CodeLookupProviderConfig | null;
|
|
3006
|
+
|
|
3007
|
+
/** What the editor is doing. Determines the resulting changeType / operation. */
|
|
3008
|
+
type ConditionEditorMode = 'add' | 'observe' | 'refine' | 'revise' | 'relate';
|
|
3009
|
+
/** Draft assertion returned by onSave — id/date assignment is the caller's job. */
|
|
3010
|
+
type ConditionAssertionDraft = Omit<ConditionAssertion, 'id' | 'date'>;
|
|
3011
|
+
/** A code picked from an injected lookup (structurally matches CodifyResult). */
|
|
3012
|
+
interface ConditionCodePick {
|
|
3013
|
+
fullid: string;
|
|
3014
|
+
label: string;
|
|
3015
|
+
codetype: string;
|
|
3016
|
+
fullcode: string;
|
|
3017
|
+
}
|
|
3018
|
+
/**
|
|
3019
|
+
* Render-prop that draws the coding-section code search. Picking a result
|
|
3020
|
+
* calls `onPick` (appends a coding row, fills an empty name); free text calls
|
|
3021
|
+
* `onFreeText` (fills the name).
|
|
3022
|
+
*/
|
|
3023
|
+
type RenderConditionCodeSearch = (args: {
|
|
3024
|
+
placeholder: string;
|
|
3025
|
+
onPick: (pick: ConditionCodePick) => void;
|
|
3026
|
+
onFreeText: (text: string) => void;
|
|
3027
|
+
}) => React$1.ReactNode;
|
|
3028
|
+
interface ConditionEditorProps {
|
|
3029
|
+
/** Editor operation */
|
|
3030
|
+
mode: ConditionEditorMode;
|
|
3031
|
+
/** Whether the dialog is open */
|
|
3032
|
+
open: boolean;
|
|
3033
|
+
/** Called when the dialog requests closing (cancel / overlay / Esc) */
|
|
3034
|
+
onOpenChange: (open: boolean) => void;
|
|
3035
|
+
/** The concern being refined / revised / related (omit for add) */
|
|
3036
|
+
concern?: ConditionConcern;
|
|
3037
|
+
/** Concerns available as relate targets (mode 'relate') */
|
|
3038
|
+
relatableConcerns?: ConditionConcern[];
|
|
3039
|
+
/** Called with the new assertion draft (modes add / refine / revise) */
|
|
3040
|
+
onSave?: (draft: ConditionAssertionDraft) => void;
|
|
3041
|
+
/** Called with the relationship (mode 'relate') */
|
|
3042
|
+
onRelate?: (relationship: ConcernRelationship) => void;
|
|
3043
|
+
/** Called with a quick progress note (mode 'observe', or the observation box in other modes) */
|
|
3044
|
+
onAddObservation?: (text: string) => void;
|
|
3045
|
+
/**
|
|
3046
|
+
* Render a code-lookup search for the coding section (dependency-injected
|
|
3047
|
+
* so the library build doesn't bundle the lookup's worker — pass e.g. a
|
|
3048
|
+
* `CodeLookup` wired to your index, the same pattern as Assessment's
|
|
3049
|
+
* `renderOrderSearch`). Picking a result appends a coding row and fills an
|
|
3050
|
+
* empty problem name; free text fills the problem name. Defaults to the
|
|
3051
|
+
* ambient `CodeLookupProvider` (condition shard, ICD-10 preferred); pass
|
|
3052
|
+
* `false` for manual code entry only.
|
|
3053
|
+
*/
|
|
3054
|
+
renderCodeSearch?: RenderConditionCodeSearch | false;
|
|
3055
|
+
/** Additional CSS classes for the dialog content */
|
|
3056
|
+
className?: string;
|
|
3057
|
+
/** Test ID for testing */
|
|
3058
|
+
'data-testid'?: string;
|
|
3059
|
+
}
|
|
3060
|
+
/**
|
|
3061
|
+
* Dialog editor for condition assertions — the condition analog of the
|
|
3062
|
+
* planned MedicationEditor. Capture-first: only the problem name is required;
|
|
3063
|
+
* coding, severity, and onset are progressive enrichment. Every optional
|
|
3064
|
+
* field carries the §4.1 three-state affordance (confident / uncertain /
|
|
3065
|
+
* explicitly unknown), written to the assertion's uncertainty block.
|
|
3066
|
+
*
|
|
3067
|
+
* Modes:
|
|
3068
|
+
* - `add` — new concern, first assertion
|
|
3069
|
+
* - `observe` — quick progress note on the concern; shows the full observation
|
|
3070
|
+
* history over time
|
|
3071
|
+
* - `refine` — new assertion, changeType 'refinement' (or 'progression')
|
|
3072
|
+
* - `revise` — new assertion, changeType 'revision'; warns that the prior
|
|
3073
|
+
* assertion will be refuted
|
|
3074
|
+
* - `relate` — picks a relationship type + target concern
|
|
3075
|
+
*/
|
|
3076
|
+
declare function ConditionEditor({ mode, open, onOpenChange, concern, relatableConcerns, onSave, onRelate, onAddObservation, renderCodeSearch, className, 'data-testid': dataTestId, }: ConditionEditorProps): react_jsx_runtime.JSX.Element;
|
|
3077
|
+
declare namespace ConditionEditor {
|
|
3078
|
+
var displayName: string;
|
|
3079
|
+
}
|
|
3080
|
+
|
|
1581
3081
|
interface BackgroundCheckCandidate {
|
|
1582
3082
|
/** Candidate ID */
|
|
1583
3083
|
id: string;
|
|
@@ -1760,6 +3260,28 @@ interface CommandPaletteProps {
|
|
|
1760
3260
|
isLoading?: boolean;
|
|
1761
3261
|
/** Called when an item is selected */
|
|
1762
3262
|
onSelect?: (item: CommandPaletteItem) => void;
|
|
3263
|
+
/**
|
|
3264
|
+
* Fires whenever the search query changes. Consumers should debounce
|
|
3265
|
+
* inside this callback if they're hitting a network. Provider's `items`
|
|
3266
|
+
* is still the source of truth for what renders.
|
|
3267
|
+
*/
|
|
3268
|
+
onQueryChange?: (query: string) => void;
|
|
3269
|
+
/**
|
|
3270
|
+
* Items always shown at the top, regardless of query. Use for smart
|
|
3271
|
+
* actions ("Call John", "Ask AI: …") or other affordances that should
|
|
3272
|
+
* remain reachable while typing. Filtered out when a category filter
|
|
3273
|
+
* is active so the category view stays scoped.
|
|
3274
|
+
*/
|
|
3275
|
+
pinnedItems?: CommandPaletteItem[];
|
|
3276
|
+
/** Group label rendered above pinned items. Defaults to "Actions". */
|
|
3277
|
+
pinnedCategoryLabel?: string;
|
|
3278
|
+
/**
|
|
3279
|
+
* Items shown only when the query is empty and there are no provider
|
|
3280
|
+
* items to display. Use for recent searches / recently opened records.
|
|
3281
|
+
*/
|
|
3282
|
+
recentItems?: CommandPaletteItem[];
|
|
3283
|
+
/** Group label rendered above recent items. Defaults to "Recent". */
|
|
3284
|
+
recentCategoryLabel?: string;
|
|
1763
3285
|
/** Custom empty state content */
|
|
1764
3286
|
emptyState?: React__default.ReactNode;
|
|
1765
3287
|
/** Custom render function for items */
|
|
@@ -1773,8 +3295,14 @@ interface CommandPaletteProps {
|
|
|
1773
3295
|
className?: string;
|
|
1774
3296
|
/** Test ID for testing */
|
|
1775
3297
|
'data-testid'?: string;
|
|
3298
|
+
/**
|
|
3299
|
+
* Skip the built-in client-side query filter. Use when `items` are
|
|
3300
|
+
* already filtered server-side (e.g. semantic search) and labels
|
|
3301
|
+
* won't necessarily contain the query as a substring.
|
|
3302
|
+
*/
|
|
3303
|
+
serverFiltered?: boolean;
|
|
1776
3304
|
}
|
|
1777
|
-
declare function CommandPalette({ placeholder, isLoading, onSelect, emptyState, renderItem, footer, className, 'data-testid': testId, }: CommandPaletteProps): React__default.JSX.Element | null;
|
|
3305
|
+
declare function CommandPalette({ placeholder, isLoading, onSelect, onQueryChange, pinnedItems, pinnedCategoryLabel, recentItems, recentCategoryLabel, emptyState, renderItem, footer, className, 'data-testid': testId, serverFiltered, }: CommandPaletteProps): React__default.JSX.Element | null;
|
|
1778
3306
|
interface CommandPaletteTriggerProps {
|
|
1779
3307
|
/** Button content (default shows search icon and keyboard hint) */
|
|
1780
3308
|
children?: React__default.ReactNode;
|
|
@@ -3915,6 +5443,51 @@ interface FileManagerProps {
|
|
|
3915
5443
|
*/
|
|
3916
5444
|
declare function FileManager({ files, totalStorageUsed, storageLimit, onUpload, onDelete, onDownload, onPreview, uploadProgress, isUploading, showDropzone, acceptedFileTypes, errorMessage, className, }: FileManagerProps): react_jsx_runtime.JSX.Element;
|
|
3917
5445
|
|
|
5446
|
+
/**
|
|
5447
|
+
* HealthSurveillance — the patient's health-surveillance due list.
|
|
5448
|
+
*
|
|
5449
|
+
* Renders the output of the due-evaluation engine (see ./evaluate.ts) over a
|
|
5450
|
+
* PatientHistory and program metadata (programs.json from mieweb/codify or a
|
|
5451
|
+
* deployment's own): occupational surveillance programs (OSHA, DOT, …) and
|
|
5452
|
+
* quality measures (CMS eCQMs) grouped into what's **due/overdue/pending**
|
|
5453
|
+
* and what's **done**. Each due item expands into a multi-select picklist of
|
|
5454
|
+
* its satisfying orders so several can be placed at once (`onOrderMany`) —
|
|
5455
|
+
* designed to sit next to the Assessment component, which receives the picks
|
|
5456
|
+
* as orders linked to the program's concern.
|
|
5457
|
+
*/
|
|
5458
|
+
|
|
5459
|
+
interface SurveillanceOrderPick {
|
|
5460
|
+
/** CODETYPE|FULLCODE of the picked order */
|
|
5461
|
+
key: string;
|
|
5462
|
+
label: string;
|
|
5463
|
+
/** Program the order satisfies (CODETYPE|FULLCODE) */
|
|
5464
|
+
programKey: string;
|
|
5465
|
+
/** Program display label */
|
|
5466
|
+
programLabel: string;
|
|
5467
|
+
}
|
|
5468
|
+
interface HealthSurveillanceProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'className'> {
|
|
5469
|
+
history: PatientHistory;
|
|
5470
|
+
/** Program metadata — programs.json contents (`programs` field) */
|
|
5471
|
+
programs: ProgramsMap;
|
|
5472
|
+
/** Occupational enrollments; quality measures apply to everyone in-gate */
|
|
5473
|
+
enrolledKeys?: string[];
|
|
5474
|
+
/** Display labels for program keys (falls back to the key) */
|
|
5475
|
+
programLabels?: Record<string, string>;
|
|
5476
|
+
/** Display labels for order keys (falls back to history labels, then key) */
|
|
5477
|
+
orderLabels?: Record<string, string>;
|
|
5478
|
+
/** Single order requested from a due item's picklist */
|
|
5479
|
+
onOrder?: (pick: SurveillanceOrderPick) => void;
|
|
5480
|
+
/** Batch of orders requested from a due item's picklist */
|
|
5481
|
+
onOrderMany?: (picks: SurveillanceOrderPick[]) => void;
|
|
5482
|
+
/** Evaluation clock (defaults to today; inject for deterministic stories) */
|
|
5483
|
+
now?: Date;
|
|
5484
|
+
/** Additional CSS classes */
|
|
5485
|
+
className?: string;
|
|
5486
|
+
/** Test ID for testing */
|
|
5487
|
+
'data-testid'?: string;
|
|
5488
|
+
}
|
|
5489
|
+
declare const HealthSurveillance: React$1.ForwardRefExoticComponent<HealthSurveillanceProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
5490
|
+
|
|
3918
5491
|
interface FAQItem {
|
|
3919
5492
|
id: string;
|
|
3920
5493
|
question: string;
|
|
@@ -5425,6 +6998,82 @@ interface OrderListProps<T> {
|
|
|
5425
6998
|
declare function OrderList<T>({ orders, activeTab, tabs, onTabChange, renderOrder, getOrderStatus, isLoading, emptyMessage, emptyIcon, searchPlaceholder, searchValue, onSearchChange, showSearch, actions, className, }: OrderListProps<T>): react_jsx_runtime.JSX.Element;
|
|
5426
6999
|
declare const defaultOrderTabs: OrderListTab[];
|
|
5427
7000
|
|
|
7001
|
+
/** Code-lookup domains the order editors search. */
|
|
7002
|
+
type OrderSearchDomain = 'med' | 'vaccine' | 'lab' | 'procedure';
|
|
7003
|
+
/** Minimal shape of a CodeLookup selection the editors consume. */
|
|
7004
|
+
interface OrderLookupResult {
|
|
7005
|
+
fullid: string;
|
|
7006
|
+
label: string;
|
|
7007
|
+
codetype: string;
|
|
7008
|
+
fullcode: string;
|
|
7009
|
+
}
|
|
7010
|
+
/**
|
|
7011
|
+
* Structural subset of `CodeLookupProps` the order editors use. `CodeLookup`
|
|
7012
|
+
* satisfies this — it is injected (not imported) because its Web Worker
|
|
7013
|
+
* keeps it out of the library build (see CodeLookup/index.ts).
|
|
7014
|
+
*/
|
|
7015
|
+
interface OrderLookupProps {
|
|
7016
|
+
indexUrl: string;
|
|
7017
|
+
locale?: string;
|
|
7018
|
+
domains?: OrderSearchDomain[];
|
|
7019
|
+
bare?: boolean;
|
|
7020
|
+
clearOnSelect?: boolean;
|
|
7021
|
+
placeholder?: string;
|
|
7022
|
+
initialQuery?: string;
|
|
7023
|
+
initialSearch?: boolean;
|
|
7024
|
+
onSelect?: (result: OrderLookupResult) => void;
|
|
7025
|
+
onFreeText?: (text: string) => void;
|
|
7026
|
+
}
|
|
7027
|
+
/** CodeLookup wiring for the editors (component injected by the consumer). */
|
|
7028
|
+
interface OrderCodeLookupConfig {
|
|
7029
|
+
/** The CodeLookup component: `import { CodeLookup } from '…/CodeLookup'` */
|
|
7030
|
+
component: React$1.ComponentType<OrderLookupProps>;
|
|
7031
|
+
/** Base URL of the codify index, e.g. '/codify' */
|
|
7032
|
+
indexUrl: string;
|
|
7033
|
+
/** Shard locale (default 'en') */
|
|
7034
|
+
locale?: string;
|
|
7035
|
+
}
|
|
7036
|
+
interface OrderEditorProps {
|
|
7037
|
+
/** Whether the editor is open */
|
|
7038
|
+
open: boolean;
|
|
7039
|
+
/** Order being edited — omit for "add" mode */
|
|
7040
|
+
order?: AssessmentOrder;
|
|
7041
|
+
/** Order type used in add mode (edit mode follows `order.type`) */
|
|
7042
|
+
defaultType?: OrderType;
|
|
7043
|
+
/**
|
|
7044
|
+
* Codify shard location for coded order search. Defaults to the ambient
|
|
7045
|
+
* `CodeLookupProvider`; pass `false` to force a plain name input.
|
|
7046
|
+
*/
|
|
7047
|
+
codeLookup?: OrderCodeLookupConfig | false;
|
|
7048
|
+
/** Called when the editor is dismissed without saving */
|
|
7049
|
+
onClose: () => void;
|
|
7050
|
+
/** Called with the complete order on save */
|
|
7051
|
+
onSave: (order: AssessmentOrder) => void;
|
|
7052
|
+
}
|
|
7053
|
+
/** Map an order onto the `Medication` shape `MedicationEditor` edits —
|
|
7054
|
+
* strength/dose form/quantity unit are parsed from the display label and
|
|
7055
|
+
* route/frequency/PRN from the sig, so the editor opens fully populated. */
|
|
7056
|
+
declare function orderToMedication(order: AssessmentOrder): Medication;
|
|
7057
|
+
/** Fold a saved `Medication` back into the order it was opened from. */
|
|
7058
|
+
declare function medicationToOrder(med: Medication, base: AssessmentOrder): AssessmentOrder;
|
|
7059
|
+
/** Type-specific editor props: `OrderEditorProps` minus the morphing. */
|
|
7060
|
+
type TypedOrderEditorProps = Omit<OrderEditorProps, 'defaultType'>;
|
|
7061
|
+
/** Lab order editor — coded lab search, priority, collection timing. */
|
|
7062
|
+
declare function LabOrderEditor(props: TypedOrderEditorProps): react_jsx_runtime.JSX.Element;
|
|
7063
|
+
/** Imaging order editor — coded study search, body site, priority. */
|
|
7064
|
+
declare function ImagingOrderEditor(props: TypedOrderEditorProps): react_jsx_runtime.JSX.Element;
|
|
7065
|
+
/** Procedure order editor — coded procedure search, body site, priority. */
|
|
7066
|
+
declare function ProcedureOrderEditor(props: TypedOrderEditorProps): react_jsx_runtime.JSX.Element;
|
|
7067
|
+
/** Referral editor — refer-to specialty/provider, reason, urgency. */
|
|
7068
|
+
declare function ReferralEditor(props: TypedOrderEditorProps): react_jsx_runtime.JSX.Element;
|
|
7069
|
+
/**
|
|
7070
|
+
* Order editor that morphs by order type: medications get the full
|
|
7071
|
+
* `MedicationEditor` (NCPDP prescription), every other type gets its
|
|
7072
|
+
* dedicated editor. API-compatible with `MedicationEditor` — see the module
|
|
7073
|
+
* doc for the mapping.
|
|
7074
|
+
*/
|
|
7075
|
+
declare function OrderEditor({ open, order, defaultType, codeLookup, onClose, onSave, }: OrderEditorProps): React$1.JSX.Element | null;
|
|
7076
|
+
|
|
5428
7077
|
interface OrderLookupFormProps {
|
|
5429
7078
|
/** Handler for form submission */
|
|
5430
7079
|
onSubmit?: (data: OrderLookupData) => void;
|
|
@@ -5968,6 +7617,69 @@ interface PermissionsEditorProps {
|
|
|
5968
7617
|
*/
|
|
5969
7618
|
declare function PermissionsEditor({ userName, groups, assignedPermissions, onPermissionsChange, showEmployerAccess, employers, selectedEmployers, onEmployersChange, labels, className, }: PermissionsEditorProps): react_jsx_runtime.JSX.Element;
|
|
5970
7619
|
|
|
7620
|
+
/** How the encounter is scoped — gates how it merges into the patient record. */
|
|
7621
|
+
type EncounterScope = 'problem-focused' | 'comprehensive';
|
|
7622
|
+
/** Encounter-scoped relevance of a concern. Lives on the reference, never on the concern. */
|
|
7623
|
+
type ProblemRelevance = 'addressed' | 'relevant-history' | 'noted';
|
|
7624
|
+
/** A reference from the encounter to a patient concern. */
|
|
7625
|
+
interface PresentingEntry {
|
|
7626
|
+
concernId: string;
|
|
7627
|
+
relevance: ProblemRelevance;
|
|
7628
|
+
comments?: string;
|
|
7629
|
+
}
|
|
7630
|
+
interface PresentingProblemsProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'className' | 'title'> {
|
|
7631
|
+
/** Patient-level concerns to select from */
|
|
7632
|
+
patientConcerns: ConditionConcern[];
|
|
7633
|
+
/** Encounter-scoped references (controlled) */
|
|
7634
|
+
presenting: PresentingEntry[];
|
|
7635
|
+
/** Encounter scope — problem-focused encounters assert nothing about unselected concerns */
|
|
7636
|
+
scope: EncounterScope;
|
|
7637
|
+
/** Header title (pass null to hide) */
|
|
7638
|
+
title?: string | null;
|
|
7639
|
+
/** Called when a concern's relevance is set (null = deselected) */
|
|
7640
|
+
onRelevanceChange?: (concern: ConditionConcern, relevance: ProblemRelevance | null) => void;
|
|
7641
|
+
/** Called when a new (ad-hoc) problem is added by name */
|
|
7642
|
+
onAddProblem?: (text: string) => void;
|
|
7643
|
+
/**
|
|
7644
|
+
* Called with the new concernId order of the "Relevant this visit" list
|
|
7645
|
+
* after a drag — enables drag & drop reordering. The list renders in
|
|
7646
|
+
* `presenting` order; persist and feed the order back in.
|
|
7647
|
+
*/
|
|
7648
|
+
onReorder?: (concernIds: string[]) => void;
|
|
7649
|
+
/** Negative assertion — only assertable when scope is comprehensive */
|
|
7650
|
+
noKnownProblems?: boolean;
|
|
7651
|
+
/** Called when the no-known-problems toggle changes */
|
|
7652
|
+
onNoKnownProblemsChange?: (value: boolean) => void;
|
|
7653
|
+
/** Hide all controls (display only) */
|
|
7654
|
+
readOnly?: boolean;
|
|
7655
|
+
/** Additional CSS classes */
|
|
7656
|
+
className?: string;
|
|
7657
|
+
/** Test ID for testing */
|
|
7658
|
+
'data-testid'?: string;
|
|
7659
|
+
}
|
|
7660
|
+
declare const RELEVANCE_LABELS: Record<ProblemRelevance, string>;
|
|
7661
|
+
/**
|
|
7662
|
+
* Encounter-scoped relevant problem list (a.k.a. Medical History), fed by the
|
|
7663
|
+
* patient-level ProblemList. Providers select which concerns are relevant this
|
|
7664
|
+
* visit and tag each reference with a relevance — the tag lives on the
|
|
7665
|
+
* encounter reference, never on the concern itself.
|
|
7666
|
+
*
|
|
7667
|
+
* In problem-focused scope, unselected concerns are visually out of scope (not
|
|
7668
|
+
* absent) and the negative assertion (no known problems) is disabled.
|
|
7669
|
+
*
|
|
7670
|
+
* @example
|
|
7671
|
+
* ```tsx
|
|
7672
|
+
* <PresentingProblems
|
|
7673
|
+
* patientConcerns={concerns}
|
|
7674
|
+
* presenting={presenting}
|
|
7675
|
+
* scope="problem-focused"
|
|
7676
|
+
* onRelevanceChange={(concern, relevance) => setRelevance(concern.concernId, relevance)}
|
|
7677
|
+
* onAddProblem={(text) => addAdHocConcern(text)}
|
|
7678
|
+
* />
|
|
7679
|
+
* ```
|
|
7680
|
+
*/
|
|
7681
|
+
declare const PresentingProblems: React$1.ForwardRefExoticComponent<PresentingProblemsProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
7682
|
+
|
|
5971
7683
|
interface ProductVersionProps {
|
|
5972
7684
|
/** Product name */
|
|
5973
7685
|
name: string;
|
|
@@ -7020,6 +8732,65 @@ interface ResultsEntryCardProps extends Omit<ResultsEntryModalProps, 'open' | 'o
|
|
|
7020
8732
|
*/
|
|
7021
8733
|
declare function ResultsEntryCard({ isOpen, onClose, onSubmit, ...restProps }: ResultsEntryCardProps): react_jsx_runtime.JSX.Element;
|
|
7022
8734
|
|
|
8735
|
+
/**
|
|
8736
|
+
* Toolbar / group arrow-key navigation (WAI-ARIA toolbar pattern).
|
|
8737
|
+
* Attach to a container's onKeyDown: ←/→ move focus between enabled
|
|
8738
|
+
* buttons, Home/End jump to first/last.
|
|
8739
|
+
*/
|
|
8740
|
+
declare function toolbarKeyNav(e: React$1.KeyboardEvent<HTMLElement>): void;
|
|
8741
|
+
declare const ALIGN: {
|
|
8742
|
+
/** Vertically centered on the row's right edge (single-line rows). */
|
|
8743
|
+
readonly center: "pointer-fine:top-1/2 pointer-fine:right-0 pointer-fine:-translate-y-1/2";
|
|
8744
|
+
/** Pinned near the row's top-right corner (multi-line rows). */
|
|
8745
|
+
readonly top: "pointer-fine:top-1.5 pointer-fine:right-1.5";
|
|
8746
|
+
};
|
|
8747
|
+
declare const REVEAL: {
|
|
8748
|
+
readonly row: string;
|
|
8749
|
+
readonly order: string;
|
|
8750
|
+
readonly grid: string;
|
|
8751
|
+
};
|
|
8752
|
+
interface RowActionToolbarProps {
|
|
8753
|
+
/** Accessible name, e.g. `Actions for penicillin`. */
|
|
8754
|
+
label: string;
|
|
8755
|
+
/** Overlay alignment on fine-pointer devices. @default 'center' */
|
|
8756
|
+
align?: keyof typeof ALIGN;
|
|
8757
|
+
/**
|
|
8758
|
+
* Hover scope for the reveal. Use `'order'` when the row is a
|
|
8759
|
+
* `group/order` nested inside another `group`; use `'grid'` inside a
|
|
8760
|
+
* datavis (NITRO) grid cell — the toolbar then stays in flow (the cell
|
|
8761
|
+
* reserves its space) and reveals when the `.wcdv-tr` row is hovered.
|
|
8762
|
+
* @default 'row'
|
|
8763
|
+
*/
|
|
8764
|
+
group?: keyof typeof REVEAL;
|
|
8765
|
+
className?: string;
|
|
8766
|
+
children: React$1.ReactNode;
|
|
8767
|
+
}
|
|
8768
|
+
/**
|
|
8769
|
+
* Per-row action toolbar for clinical lists.
|
|
8770
|
+
*
|
|
8771
|
+
* On hover-capable (fine pointer) devices it floats over the row's right
|
|
8772
|
+
* edge as a card-styled overlay, hidden until the row is hovered or
|
|
8773
|
+
* keyboard-focused. Touch devices can't hover, so the toolbar stays in
|
|
8774
|
+
* flow at the end of the row (`ml-auto`) and is always visible.
|
|
8775
|
+
*
|
|
8776
|
+
* Implements WAI-ARIA toolbar arrow-key navigation. The parent row must be
|
|
8777
|
+
* `relative` and carry the matching `group` (or `group/order`) class.
|
|
8778
|
+
*/
|
|
8779
|
+
declare function RowActionToolbar({ label, align, group, className, children, }: RowActionToolbarProps): react_jsx_runtime.JSX.Element;
|
|
8780
|
+
interface RowIconButtonProps {
|
|
8781
|
+
label: string;
|
|
8782
|
+
icon: React$1.ComponentType<{
|
|
8783
|
+
size?: number | string;
|
|
8784
|
+
}>;
|
|
8785
|
+
onClick: () => void;
|
|
8786
|
+
/** Toggle-button state (renders `aria-pressed` + tinted background). */
|
|
8787
|
+
active?: boolean;
|
|
8788
|
+
/** `md` = 32px button / 16px icon; `sm` = 28px / 14px. @default 'md' */
|
|
8789
|
+
size?: 'md' | 'sm';
|
|
8790
|
+
}
|
|
8791
|
+
/** Tooltip-labeled ghost icon button for `RowActionToolbar`. */
|
|
8792
|
+
declare function RowIconButton({ label, icon: Icon, onClick, active, size, }: RowIconButtonProps): react_jsx_runtime.JSX.Element;
|
|
8793
|
+
|
|
7023
8794
|
interface CalendarAppointment {
|
|
7024
8795
|
id: string;
|
|
7025
8796
|
title: string;
|
|
@@ -8555,4 +10326,4 @@ declare namespace WebsiteInputGroup {
|
|
|
8555
10326
|
var displayName: string;
|
|
8556
10327
|
}
|
|
8557
10328
|
|
|
8558
|
-
export { AIChat, type AIChatCallbacks, AIChatModal, type AIChatModalProps, type AIChatProps, type AIChatSession, AIChatTrigger, type AIChatTriggerProps, AILogoIcon, type AILogoIconProps, type AIMessage, type AIMessageContent, AIMessageDisplay, type AIMessageDisplayProps, type AIMessageRole, type AIMessageStatus, type AIRenderTextContent, type AISuggestedAction, type AITextRenderContext, AITypingIndicator, AccessDeniedPage, type AccessDeniedPageProps, ActionButton, type ActionButtonProps, ActionButtonsBar, type ActionButtonsBarProps, ActiveFilters, type ActiveFiltersProps, AddContactModal, type AddContactModalProps, AddServiceCard, type AddServiceCardProps, AdditionalFields, type AdditionalFieldsProps, Address, AddressCard, type AddressCardProps, AddressCompact, type AddressCompactProps, type AddressData, AddressDisplay, type AddressDisplayProps, AddressForm, type AddressFormData, type AddressFormProps, AddressInline, type AddressInlineProps, type AddressProps, type AllergyItem, AppHeader, AppHeaderActions, type AppHeaderActionsProps, AppHeaderBrand, type AppHeaderBrandProps, AppHeaderDivider, type AppHeaderDividerProps, AppHeaderIconButton, type AppHeaderIconButtonProps, type AppHeaderProps, AppHeaderSearch, type AppHeaderSearchProps, AppHeaderSection, type AppHeaderSectionProps, AppHeaderTitle, type AppHeaderTitleProps, AppHeaderUserMenu, type AppHeaderUserMenuProps, AttachmentPicker, type AttachmentPickerProps, AttachmentPreview, AttachmentPreviewItem, type AttachmentPreviewItemProps, type AttachmentPreviewProps, type AttachmentState, type AttachmentType, AuthButtons, type AuthButtonsProps, AuthDialog, type AuthDialogProps, type AuthMode, type BackgroundCheckCandidate, type BackgroundCheckReport, type BankAccountData, BookAppointmentButton, type BookAppointmentButtonProps, BookingDialog, type BookingDialogProps, type BookingFormData, type BookingProvider, type BookingService, BusinessHours, BusinessHoursEditor, type BusinessHoursEditorProps, type BusinessHoursProps, type BusinessHoursSchedule, type CSVColumn, CSVColumnMapper, type CSVColumnMapperProps, CSVFileUpload, type CSVFileUploadProps, type CalendarAppointment, CameraButton, type CameraButtonProps, type CameraPermission, CardSkeleton, type CardSkeletonProps, CharacterCounter, type CharacterCounterProps, type ChartDataPoint, CheckrIntegration, type CheckrIntegrationProps, ChevronIcon, type ChevronIconProps, type ClaimFormData, ClaimListingButton, type ClaimListingButtonProps, ClaimProviderForm, type ClaimProviderFormProps, CloseIcon, type CloseIconProps, CommandPalette, type CommandPaletteCategory, type CommandPaletteContextValue, type CommandPaletteItem, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, CommandPaletteTrigger, type CommandPaletteTriggerProps, CompactCookieBanner, type CompactCookieBannerProps, CompactFilterBar, type CompactFilterBarProps, CompactHeader, type CompactHeaderProps, CompactHours, type CompactHoursProps, CompactProviderHeader, type CompactProviderHeaderProps, type ConfirmationResult, type ConnectionInfo, type ConnectionState, ConnectionStatusBadge, type ConnectionStatusBadgeProps, ConnectionStatusBar, type ConnectionStatusBarProps, ConnectionStatusOverlay, type ConnectionStatusOverlayProps, ConsentSwitch, type ConsentSwitchProps, type Contact, type ContactAddress, type ContactFormData, type Conversation, ConversationHeader, type ConversationHeaderProps, ConversationListItem, type ConversationListItemProps, ConversationListSkeleton, type ConversationListSkeletonProps, type ConversationType, CookieConsentBanner, type CookieConsentBannerProps, type CookieConsentLink, CopyrightText, type CopyrightTextProps, CountBadge, type CountBadgeAction, type CountBadgeItem, type CountBadgeItemStatus, type CountBadgeProps, type CreateInvoiceData, CreateInvoiceModal, type CreateInvoiceModalProps, CreateReferralModal, type CreateReferralModalProps, type CreditCardData, type CustomField, DEFAULT_ACCEPTED_FILE_TYPES, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_MAX_FILE_SIZE_MB, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, type DOTBadgeProps, DashboardWidget, DashboardWidgetActions, type DashboardWidgetActionsProps, DashboardWidgetDataCards, type DashboardWidgetDataCardsProps, DashboardWidgetInfo, type DashboardWidgetInfoProps, type DashboardWidgetProps, DashboardWidgetTable, type DashboardWidgetTableProps, type DataCardItem, type DateRange$1 as DateRange, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangePresetKey, DateSeparator, type DateSeparatorProps, type DayHours, type DaySchedule, type Department, type DetectionConfig, type DetectionMetrics, type DetectionState, DialogOverlay, type DialogOverlayProps, DisclaimerText, type DisclaimerTextProps, type DocumentBoundary, DocumentDetectionOverlay, DocumentScanner, type DocumentScannerProps, DragDropZone, type DragDropZoneProps, DropZone, type DropZoneProps, DropzoneOverlay, type DropzoneOverlayProps, EditUserRoleModal, type EditUserRoleModalProps, type Employee, type EmployeeAddress, type EmployeeData, EmployeeForm, type EmployeeFormData, type EmployeeFormProps, type EmployeePhone, EmployeeProfileCard, type EmployeeProfileCardProps, type Employer, type EmployerAccess, type EmployerAddress, type EmployerContact, EmployerContactCard, type EmployerContactCardProps, type EmployerDetails, type EmployerInvoice, EmployerList, type EmployerListProps, type EmployerOption, type EmployerOrder, EmployerPricingCard, type EmployerPricingCardProps, type EmployerServiceConfig, EmployerServiceModal, type EmployerServiceModalProps, EmployerView, type EmployerViewProps, EmptyState, type EmptyStateProps, ErrorPage, type ErrorPageConfig, type ErrorPageProps, type ErrorType, type FAQItem, type FieldOption, type FileItem, FileManager, type FileManagerProps, FilePreview, type FilePreviewProps, FloatingAIChat, type FloatingAIChatProps, FloatingInput, type FloatingInputProps, type FooterLink, type FooterLinkGroup, FooterLinkSection, type FooterLinkSectionProps, SocialMediaLinks as FooterSocialLinks, type SocialMediaLinksProps as FooterSocialLinksProps, type GeolocationStatus, type HRISProvider, HRISProviderSelector, type HRISProviderSelectorProps, HelpSupportPanel, type HelpSupportPanelProps, HeroSearchBar, type HeroSearchBarProps, HoursSummary, type HoursSummaryProps, type InfoItem, InlineBookingForm, type InlineBookingFormProps, InputProps, type InventoryLogEntry, InventoryManager, type InventoryManagerProps, InviteUserModal, type InviteUserModalProps, type Invoice, type InvoiceLineItem$1 as InvoiceLineItem, InvoiceList, type InvoiceListProps, type InvoicePaymentDetails, InvoicePaymentPage, type InvoicePaymentPageProps, InvoiceView, type InvoiceViewProps, type KeyValueEntry, type Language, LanguageSelector, LanguageSelectorInline, type LanguageSelectorInlineProps, LanguageSelectorNative, type LanguageSelectorNativeProps, type LanguageSelectorProps, LegalLinks, type LegalLinksProps, LightboxModal, type LightboxModalProps, LoadMoreButton, type LoadMoreButtonProps, LoadingBar, type LoadingBarProps, LoadingDots, type LoadingDotsProps, LoadingOverlay, type LoadingOverlayProps, LoadingPage, type LoadingPageProps, LoadingSkeleton, type LoadingSkeletonProps, type MCPResource, type MCPResourceLink, type MCPToolCall, MCPToolCallDisplay, type MCPToolCallDisplayProps, type MCPToolInfo, type MCPToolParameter, type MCPToolResult, type MCPToolStatus, MaintenancePage, type MaintenancePageProps, type MedicationItem, type Message, type MessageAction, type MessageAttachment, MessageAvatar, MessageBubble, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageGroup, MessageList, type MessageListProps, type MessageParticipant, type MessageReaction, type MessageStatus, MessageStatusIcon, type MessageStatusIconProps, type MessageStatusIndicator, MessageThread, type MessageThreadProps, type MessageType, type MessagingEventHandlers, type MessagingLoadingState, MessagingSplitView, type MessagingSplitViewProps, type MetricData, MobileBackButton, type MobileBackButtonProps, MobileMenuButton, type MobileMenuButtonProps, MobileMenuPanel, type MobileMenuPanelProps, type NavLink, NavLinks, type NavLinksProps, type NewMessage, NewsletterForm, type NewsletterFormProps, NotFoundPage, type NotFoundPageProps, type Notification, NotificationCenter, type NotificationCenterProps, OfflinePage, type OfflinePageProps, OnboardingCompletion, type OnboardingCompletionProps, type OnboardingStep, OnboardingStepQuestion, type OnboardingStepQuestionProps, OnboardingWizard, type OnboardingWizardProps, OpenStatusBadge, OrderCard, type OrderCardProps, OrderConfirmation, type OrderConfirmationProps, OrderConfirmationWizard, type OrderConfirmationWizardProps, OrderDetailSidebar, type OrderDetailSidebarProps, type OrderDetails, type OrderEmployee, type OrderEmployer, OrderList, type OrderListProps, type OrderListTab, type OrderLookupData, OrderLookupForm, type OrderLookupFormProps, type OrderOption, type OrderService, OrderSidebar, type OrderSidebarProps, type OrderSidebarTab, OrderSidebarTabs, type OrderSidebarTabsProps, type OrderStatus$1 as OrderStatus, PageHeader, type PageHeaderProps, type PatientData, PatientHeader, type PatientHeaderProps, type PatientName, type PatientOverflowAction, type Payment, type PaymentFormData, PaymentHistoryTable, type PaymentHistoryTableProps, type PaymentMethod, PaymentMethodBank, type PaymentMethodBankProps, PaymentMethodCard, type PaymentMethodCardProps, PaymentMethodList, type PaymentMethodListProps, type PendingClaim, PendingClaimsTable, type PendingClaimsTableProps, type Permission, type PermissionGroup, PermissionsEditor, type PermissionsEditorProps, type Point, type PostalCodeInfo, type PreviewFile, type PricingTier, ProductVersion, ProductVersionBadge, type ProductVersionBadgeProps, type ProductVersionProps, type Provider, type ProviderAddress$1 as ProviderAddress, Breadcrumb as ProviderBreadcrumb, type BreadcrumbItem as ProviderBreadcrumbItem, type BreadcrumbProps as ProviderBreadcrumbProps, ProviderCard, ProviderCardGrid, type ProviderCardGridProps, type ProviderCardProps, ProviderCardSkeleton, type ProviderCardSkeletonProps, type ProviderContact, type ProviderAddress as ProviderDetailAddress, type ProviderDetailData, ProviderDetailHeader, type ProviderDetailHeaderProps, ProviderDetailHeaderSkeleton, type ProviderDetailHeaderSkeletonProps, type ProviderFilters, ProviderLogo, type ProviderLogoProps, type ProviderOption, ProviderOverview, type ProviderOverviewProps, ProviderSearchBar, type ProviderSearchBarProps, ProviderSearchFilters, type ProviderSearchFiltersProps, ProviderSelector, type ProviderSelectorProps, type ProviderService, ProviderSettings, type ProviderSettingsData, type ProviderSettingsProps, SocialMediaLinks$1 as ProviderSocialLinks, type SocialMediaLinksProps$1 as ProviderSocialLinksProps, type ProviderStats, type ProviderUrls, type ProviderUser, ProviderUsersTable, type ProviderUsersTableProps, QuickBookCard, type QuickBookCardProps, type QuickLink, QuickLinksCard, type QuickLinksCardProps, type RadiusOption, type ReadReceipt, ReadReceiptIndicator, type ReadReceiptIndicatorProps, type RecentActivity, type RecurringService, RecurringServiceAddCard, type RecurringServiceAddCardProps, RecurringServiceCard, type RecurringServiceCardProps, type RecurringServiceCardState, type RecurringServiceFormData, RecurringServiceGrid, type RecurringServiceGridProps, RecurringServiceSetupModal, type RecurringServiceSetupModalProps, type ReferralData, RefreshIcon, type RefreshIconProps, RejectionModal, type RejectionModalProps, type RejectionReason, ReportDashboard, type ReportDashboardProps, ReportDatePicker, type ReportDatePickerProps, ReportLink, type ReportLinkProps, type ReportResult, ReportTimeRange, type ReportTimeRangeProps, ResourceLink, type ResourceLinkProps, type ResultStatus, ResultsEntryCard, type ResultsEntryData, ResultsEntryForm, type ResultsEntryFormProps, ResultsEntryModal, type ResultsEntryModalProps, type Role, type SSOConfigData, SSOConfigForm, type SSOConfigFormProps, type ScannerSource, type ScannerState, ScheduleCalendar, type ScheduleCalendarProps, type SearchResults, SearchResultsMessage, type SearchResultsMessageProps, type SelectableService, SelectedServicesBadges, type SelectedServicesBadgesProps, SendButton, type SendButtonProps, SendIcon, type SendIconProps, ServerErrorPage, type ServerErrorPageProps, ServiceAccordion, type ServiceAccordionProps, ServiceBadge, ServiceBadgeGroup, type ServiceBadgeGroupProps, type ServiceBadgeProps, ServiceCard, type ServiceCardProps, type ServiceCategory$1 as ServiceCategory, ServiceCategoryBadge, type ServiceCategoryBadgeProps, type ServiceFormData, ServiceGeneralSettings, type ServiceGeneralSettingsProps, ServiceGrid, type ServiceGridProps, type ServiceGroup, type ServiceItem, ServiceLink, ServiceList, type ServiceListProps, ServiceMultiSelect, type ServiceOption, ServicePicker, type ServicePickerProps, type ServicePrice, ServicePricingManager, type ServicePricingManagerProps, ServiceSelect, type ServiceSelectProps, ServiceShippingSettings, type ServiceShippingSettingsProps, type ServiceSubCategory, ServiceTagCloud, ServiceTagCloudBadges, type ServiceTagCloudProps as ServiceTagCloudBadgesProps, type ServiceTagCloudProps$1 as ServiceTagCloudProps, SetupServiceModal, type SetupServiceModalProps, type ShippingAddress, Sidebar, SidebarContent, type SidebarContentProps, type SidebarContextValue, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarMobileToggle, type SidebarMobileToggleProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarSearch, type SidebarSearchProps, SidebarToggle, type SidebarToggleProps, type SignupData, SimpleFooter, type SimpleFooterProps, SiteFooter, type SiteFooterProps, SiteHeader, type SiteHeaderProps, SiteLogo, type SiteLogoProps, SkeletonMessage, type SkeletonMessageProps, type SocialLink, type SocialProvider, SparklesIcon, type SparklesIconProps, SpinnerIcon, type SpinnerIconProps, SpinnerProps, type Step, StepIndicator, type StepIndicatorProps, StripeBadge, type StripeBadgeProps, StripeSecureBadge, type StripeSecureBadgeProps, SuggestedActions, type SuggestedActionsProps, type SupportContact, type SystemMessageType, type SystemReport, TableOfContents, type TableOfContentsProps, type TimeRange, type TimeSlot, type TimelineEvent, TimelineEventList, type TimelineEventListProps, TimelineProgress, type TimelineProgressProps, type TimelineSize, type TimelineStep, type TimelineStepState, Toast, ToastContainer, type ToastContainerProps, type ToastContextValue, type ToastData, type ToastOptions, type ToastPosition, type ToastProps, ToastProvider, type ToastProviderProps, type ToastVariant, type TocItem, ToolStatusIcon, type TopItem, TypingIndicator, type TypingIndicatorProps, type TypingState, UpdateAvailableOverlay, type UpdateAvailableOverlayProps, type UpdateInfo, type UseConnectionStatusOptions, type UseConnectionStatusReturn, type UseCookieConsentOptions, type UseCookieConsentReturn, type UseDropzoneOptions, type UseDropzoneReturn, type UseMessageScrollOptions, type UseMessageScrollReturn, type UseMessagesOptions, type UseMessagesReturn, type UseReadReceiptsOptions, UseScrollSpyOptions, type UseTypingIndicatorOptions, type UseTypingIndicatorReturn, UserMenu, type UserMenuProps, type UserProfile, type UserRole, type ValidationError, VerifiedBadge, type VerifiedBadgeProps, WEBSITE_TYPES, WebChartReportViewer, type WebChartReportViewerProps, WebcamModal, type WebcamModalProps, type WebsiteEntry, WebsiteInput, WebsiteInputGroup, type WebsiteInputGroupProps, type WebsiteInputProps, type WebsiteType, type WidgetAction, type WidgetTableAction, type WidgetTableColumn, bubbleVariants, calculateDateRange, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, defaultOrderTabs, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, formatDateLabel, formatFileSize, formatLastSeen, generateAttachmentId, generateId, getConversationSubtitle, getConversationTitle, getDefaultPresets, getExtendedPresets, getFileType, getGoogleMapsSearchUrl, getGoogleMapsUrl, getToolIcon, groupMessagesByDate, headerVariants$2 as headerVariants, isSameSenderGroup, isValidUrl, sendButtonVariants, useCamera, useCommandPalette, useConnectionStatus, useCookieConsent, useDocumentDetection, useDropzone, useFileUpload, useMessageScroll, useMessages, useReadReceipts, useSidebar, useToast, useTypingIndicator, validateFile, widgetVariants };
|
|
10329
|
+
export { AIChat, AIChatCallbacks, AIChatModal, type AIChatModalProps, type AIChatProps, AIChatSession, AIChatTrigger, type AIChatTriggerProps, AILogoIcon, type AILogoIconProps, AIMessage, AIMessageDisplay, type AIMessageDisplayProps, AIReconciliationPanel, type AIReconciliationPanelProps, AIRenderTextContent, AISuggestedAction, AITypingIndicator, AccessDeniedPage, type AccessDeniedPageProps, ActionButton, type ActionButtonProps, ActionButtonsBar, type ActionButtonsBarProps, ActiveFilters, type ActiveFiltersProps, AddContactModal, type AddContactModalProps, AddServiceCard, type AddServiceCardProps, AdditionalFields, type AdditionalFieldsProps, Address, AddressCard, type AddressCardProps, AddressCompact, type AddressCompactProps, type AddressData, AddressDisplay, type AddressDisplayProps, AddressForm, type AddressFormData, type AddressFormProps, AddressInline, type AddressInlineProps, type AddressProps, Allergy, type AllergyItem, AllergyManager, type AllergyManagerProps, AppHeader, AppHeaderActions, type AppHeaderActionsProps, AppHeaderBrand, type AppHeaderBrandProps, AppHeaderDivider, type AppHeaderDividerProps, AppHeaderIconButton, type AppHeaderIconButtonProps, type AppHeaderProps, AppHeaderSearch, type AppHeaderSearchProps, AppHeaderSection, type AppHeaderSectionProps, AppHeaderTitle, type AppHeaderTitleProps, AppHeaderUserMenu, type AppHeaderUserMenuProps, type AskOpts, type AssertionChangeType, Assessment, type AssessmentAction, type AssessmentAddPick, type AssessmentItem, type AssessmentOrder, type AssessmentProps, AttachmentPicker, type AttachmentPickerProps, AttachmentPreview, AttachmentPreviewItem, type AttachmentPreviewItemProps, type AttachmentPreviewProps, type AttachmentState, type AttachmentType, AuthButtons, type AuthButtonsProps, AuthDialog, type AuthDialogProps, type AuthMode, type BackgroundCheckCandidate, type BackgroundCheckReport, type BankAccountData, BookAppointmentButton, type BookAppointmentButtonProps, BookingDialog, type BookingDialogProps, type BookingFormData, type BookingProvider, type BookingService, BusinessHours, BusinessHoursEditor, type BusinessHoursEditorProps, type BusinessHoursProps, type BusinessHoursSchedule, CHANGE_TYPE_LABELS, CONCERN_STATUS_LABELS, type CSVColumn, CSVColumnMapper, type CSVColumnMapperProps, CSVFileUpload, type CSVFileUploadProps, type CalendarAppointment, CameraButton, type CameraButtonProps, type CameraPermission, CardSkeleton, type CardSkeletonProps, CharacterCounter, type CharacterCounterProps, type ChartDataPoint, ChatBubble, type ChatBubbleProps, CheckrIntegration, type CheckrIntegrationProps, ChevronIcon, type ChevronIconProps, type ClaimFormData, ClaimListingButton, type ClaimListingButtonProps, ClaimProviderForm, type ClaimProviderFormProps, CloseIcon, type CloseIconProps, type ClusterOptions, type CodeLookupComponent, CodeLookupConfig, CodeLookupProvider, type CodeLookupProviderConfig, type CodeLookupProviderProps, CodingChips, CommandPalette, type CommandPaletteCategory, type CommandPaletteContextValue, type CommandPaletteItem, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, CommandPaletteTrigger, type CommandPaletteTriggerProps, CompactCookieBanner, type CompactCookieBannerProps, CompactFilterBar, type CompactFilterBarProps, CompactHeader, type CompactHeaderProps, CompactHours, type CompactHoursProps, CompactProviderHeader, type CompactProviderHeaderProps, type ConcernRelationship, type ConcernStatus, type ConditionAssertion, type ConditionAssertionDraft, type ConditionCodePick, type ConditionCoding, type ConditionConcern, ConditionEditor, type ConditionEditorMode, type ConditionEditorProps, type ConditionObservation, type ConfirmationResult, type ConnectionInfo, type ConnectionState, ConnectionStatusBadge, type ConnectionStatusBadgeProps, ConnectionStatusBar, type ConnectionStatusBarProps, ConnectionStatusOverlay, type ConnectionStatusOverlayProps, ConsentSwitch, type ConsentSwitchProps, type Contact, type ContactAddress, type ContactFormData, type Conversation, ConversationHeader, type ConversationHeaderProps, ConversationListItem, type ConversationListItemProps, ConversationListSkeleton, type ConversationListSkeletonProps, type ConversationType, CookieConsentBanner, type CookieConsentBannerProps, type CookieConsentLink, CopyrightText, type CopyrightTextProps, CountBadge, type CountBadgeAction, type CountBadgeItem, type CountBadgeItemStatus, type CountBadgeProps, type CreateInvoiceData, CreateInvoiceModal, type CreateInvoiceModalProps, CreateReferralModal, type CreateReferralModalProps, type CreditCardData, type CustomField, DEFAULT_ACCEPTED_FILE_TYPES, DEFAULT_ERROR_CONFIGS, DEFAULT_LANGUAGES, DEFAULT_MAX_FILE_SIZE_MB, DEFAULT_RADIUS_OPTIONS, DEFAULT_SOCIAL_PROVIDERS, DOTBadge, type DOTBadgeProps, DashboardWidget, DashboardWidgetActions, type DashboardWidgetActionsProps, DashboardWidgetDataCards, type DashboardWidgetDataCardsProps, DashboardWidgetInfo, type DashboardWidgetInfoProps, type DashboardWidgetProps, DashboardWidgetTable, type DashboardWidgetTableProps, type DataCardItem, type DateRange$1 as DateRange, DateRangeFilter, type DateRangeFilterProps, DateRangePicker, type DateRangePickerProps, type DateRangePreset, type DateRangePresetKey, DateSeparator, type DateSeparatorProps, type DayHours, type DaySchedule, type Department, type DetectionConfig, type DetectionMetrics, type DetectionState, DialogOverlay, type DialogOverlayProps, type DiarizedSegment, DisclaimerText, type DisclaimerTextProps, type DocumentBoundary, DocumentDetectionOverlay, DocumentScanner, type DocumentScannerProps, DragDropZone, type DragDropZoneProps, DropZone, type DropZoneProps, DropzoneOverlay, type DropzoneOverlayProps, EditUserRoleModal, type EditUserRoleModalProps, type Employee, type EmployeeAddress, type EmployeeData, EmployeeForm, type EmployeeFormData, type EmployeeFormProps, type EmployeePhone, EmployeeProfileCard, type EmployeeProfileCardProps, type Employer, type EmployerAccess, type EmployerAddress, type EmployerContact, EmployerContactCard, type EmployerContactCardProps, type EmployerDetails, type EmployerInvoice, EmployerList, type EmployerListProps, type EmployerOption, type EmployerOrder, EmployerPricingCard, type EmployerPricingCardProps, type EmployerServiceConfig, EmployerServiceModal, type EmployerServiceModalProps, EmployerView, type EmployerViewProps, EmptyState, type EmptyStateProps, type EncounterScope, type EnrollOpts, ErrorPage, type ErrorPageConfig, type ErrorPageProps, type ErrorType, type FAQItem, type FieldOption, type FieldUncertainty, type FileItem, FileManager, type FileManagerProps, FilePreview, type FilePreviewProps, FloatingAIChat, type FloatingAIChatProps, FloatingInput, type FloatingInputProps, type FooterLink, type FooterLinkGroup, FooterLinkSection, type FooterLinkSectionProps, SocialMediaLinks as FooterSocialLinks, type SocialMediaLinksProps as FooterSocialLinksProps, type GeolocationStatus, type HRISProvider, HRISProviderSelector, type HRISProviderSelectorProps, HandsFreeChat, type HandsFreeChatProps, HealthSurveillance, type HealthSurveillanceProps, HelpSupportPanel, type HelpSupportPanelProps, HeroSearchBar, type HeroSearchBarProps, HeyOzwell, type HeyOzwellChatBindings, type HeyOzwellPhase, type HeyOzwellProps, HeyOzwellToggle, type HeyOzwellToggleBindings, type HeyOzwellToggleProps, HoursSummary, type HoursSummaryProps, ImagingOrderEditor, type InfoItem, InlineBookingForm, type InlineBookingFormProps, InputProps, type InventoryLogEntry, InventoryManager, type InventoryManagerProps, InviteUserModal, type InviteUserModalProps, type Invoice, type InvoiceLineItem$1 as InvoiceLineItem, InvoiceList, type InvoiceListProps, type InvoicePaymentDetails, InvoicePaymentPage, type InvoicePaymentPageProps, InvoiceView, type InvoiceViewProps, type KeyValueEntry, LabOrderEditor, type Language, LanguageSelector, LanguageSelectorInline, type LanguageSelectorInlineProps, LanguageSelectorNative, type LanguageSelectorNativeProps, type LanguageSelectorProps, LegalLinks, type LegalLinksProps, LightboxModal, type LightboxModalProps, LoadMoreButton, type LoadMoreButtonProps, LoadingBar, type LoadingBarProps, LoadingDots, type LoadingDotsProps, LoadingOverlay, type LoadingOverlayProps, LoadingPage, type LoadingPageProps, LoadingSkeleton, type LoadingSkeletonProps, MCPResourceLink, MCPToolCall, MCPToolCallDisplay, type MCPToolCallDisplayProps, MCPToolStatus, MODEL_MANIFEST, MaintenancePage, type MaintenancePageProps, Medication, MedicationAction, type MedicationItem, MedicationReconciliation, type MedicationReconciliationProps, type MentionOption, type Message, type MessageAction, type MessageAttachment, MessageAvatar, MessageBubble, type MessageBubbleProps, MessageComposer, type MessageComposerProps, type MessageGroup, MessageList, type MessageListProps, type MessageParticipant, type MessageReaction, type MessageStatus, MessageStatusIcon, type MessageStatusIconProps, type MessageStatusIndicator, MessageThread, type MessageThreadProps, type MessageType, type MessagingEventHandlers, type MessagingLoadingState, MessagingSplitView, type MessagingSplitViewProps, type MetricData, MobileBackButton, type MobileBackButtonProps, MobileMenuButton, type MobileMenuButtonProps, MobileMenuPanel, type MobileMenuPanelProps, type ModelInfo, ModelInfoList, type ModelInfoListProps, type ModelStatus, type ModelStatusKey, type NavLink, NavLinks, type NavLinksProps, type NewMessage, NewsletterForm, type NewsletterFormProps, NotFoundPage, type NotFoundPageProps, type Notification, NotificationCenter, type NotificationCenterProps, ORDER_TYPE_META, ORDER_TYPE_SEARCH_DOMAINS, OfflinePage, type OfflinePageProps, OnboardingCompletion, type OnboardingCompletionProps, type OnboardingStep, OnboardingStepQuestion, type OnboardingStepQuestionProps, OnboardingWizard, type OnboardingWizardProps, OpenStatusBadge, OrderCard, type OrderCardProps, type OrderCodeLookupConfig, type OrderCodePick, OrderConfirmation, type OrderConfirmationProps, OrderConfirmationWizard, type OrderConfirmationWizardProps, OrderDetailSidebar, type OrderDetailSidebarProps, type OrderDetails, OrderEditor, type OrderEditorProps, type OrderEmployee, type OrderEmployer, OrderList, type OrderListProps, type OrderListTab, type OrderLookupData, OrderLookupForm, type OrderLookupFormProps, type OrderLookupProps, type OrderLookupResult, type OrderOption, type OrderSearchDomain, type OrderService, OrderSidebar, type OrderSidebarProps, type OrderSidebarTab, OrderSidebarTabs, type OrderSidebarTabsProps, type OrderStatus$1 as OrderStatus, type OrderType, type OzwellConfig, type OzwellMessage, OzwellSettingsMenu, type OzwellSettingsMenuProps, PageHeader, type PageHeaderProps, type PatientData, PatientHeader, type PatientHeaderProps, PatientHistory, type PatientName, type PatientOverflowAction, type Payment, type PaymentFormData, PaymentHistoryTable, type PaymentHistoryTableProps, type PaymentMethod, PaymentMethodBank, type PaymentMethodBankProps, PaymentMethodCard, type PaymentMethodCardProps, PaymentMethodList, type PaymentMethodListProps, type PendingClaim, PendingClaimsTable, type PendingClaimsTableProps, type Permission, type PermissionGroup, PermissionsEditor, type PermissionsEditorProps, type Point, type PostalCodeInfo, type PresentingEntry, PresentingProblems, type PresentingProblemsProps, type PreviewFile, type PricingTier, ProblemList, type ProblemListAction, type ProblemListProps, type ProblemRelevance, ProcedureOrderEditor, ProductVersion, ProductVersionBadge, type ProductVersionBadgeProps, type ProductVersionProps, ProgramsMap, type Provider, type ProviderAddress$1 as ProviderAddress, Breadcrumb as ProviderBreadcrumb, type BreadcrumbItem as ProviderBreadcrumbItem, type BreadcrumbProps as ProviderBreadcrumbProps, ProviderCard, ProviderCardGrid, type ProviderCardGridProps, type ProviderCardProps, ProviderCardSkeleton, type ProviderCardSkeletonProps, type ProviderContact, type ProviderAddress as ProviderDetailAddress, type ProviderDetailData, ProviderDetailHeader, type ProviderDetailHeaderProps, ProviderDetailHeaderSkeleton, type ProviderDetailHeaderSkeletonProps, type ProviderFilters, ProviderLogo, type ProviderLogoProps, type ProviderOption, ProviderOverview, type ProviderOverviewProps, ProviderSearchBar, type ProviderSearchBarProps, ProviderSearchFilters, type ProviderSearchFiltersProps, ProviderSelector, type ProviderSelectorProps, type ProviderService, ProviderSettings, type ProviderSettingsData, type ProviderSettingsProps, SocialMediaLinks$1 as ProviderSocialLinks, type SocialMediaLinksProps$1 as ProviderSocialLinksProps, type ProviderStats, type ProviderUrls, type ProviderUser, ProviderUsersTable, type ProviderUsersTableProps, QuickBookCard, type QuickBookCardProps, type QuickLink, QuickLinksCard, type QuickLinksCardProps, RELEVANCE_LABELS, type RadiusOption, type ReadReceipt, ReadReceiptIndicator, type ReadReceiptIndicatorProps, type RecentActivity, type ReconciliationAcceptedChange, type ReconciliationConfidenceLevel, type ReconciliationProposal, type ReconciliationSource, type RecurringService, RecurringServiceAddCard, type RecurringServiceAddCardProps, RecurringServiceCard, type RecurringServiceCardProps, type RecurringServiceCardState, type RecurringServiceFormData, RecurringServiceGrid, type RecurringServiceGridProps, RecurringServiceSetupModal, type RecurringServiceSetupModalProps, type ReferralData, ReferralEditor, RefreshIcon, type RefreshIconProps, RejectionModal, type RejectionModalProps, type RejectionReason, ReportDashboard, type ReportDashboardProps, ReportDatePicker, type ReportDatePickerProps, ReportLink, type ReportLinkProps, type ReportResult, ReportTimeRange, type ReportTimeRangeProps, ResourceLink, type ResourceLinkProps, type ResultStatus, ResultsEntryCard, type ResultsEntryData, ResultsEntryForm, type ResultsEntryFormProps, ResultsEntryModal, type ResultsEntryModalProps, type Role, type RoleInferenceOptions, type RollingRecorder, RowActionToolbar, type RowActionToolbarProps, RowIconButton, type RowIconButtonProps, type SSOConfigData, SSOConfigForm, type SSOConfigFormProps, type ScannerSource, type ScannerState, ScheduleCalendar, type ScheduleCalendarProps, type SearchResults, SearchResultsMessage, type SearchResultsMessageProps, type SelectableService, SelectedServicesBadges, type SelectedServicesBadgesProps, SendButton, type SendButtonProps, SendIcon, type SendIconProps, ServerErrorPage, type ServerErrorPageProps, ServiceAccordion, type ServiceAccordionProps, ServiceBadge, ServiceBadgeGroup, type ServiceBadgeGroupProps, type ServiceBadgeProps, ServiceCard, type ServiceCardProps, type ServiceCategory$1 as ServiceCategory, ServiceCategoryBadge, type ServiceCategoryBadgeProps, type ServiceFormData, ServiceGeneralSettings, type ServiceGeneralSettingsProps, ServiceGrid, type ServiceGridProps, type ServiceGroup, type ServiceItem, ServiceLink, ServiceList, type ServiceListProps, ServiceMultiSelect, type ServiceOption, ServicePicker, type ServicePickerProps, type ServicePrice, ServicePricingManager, type ServicePricingManagerProps, ServiceSelect, type ServiceSelectProps, ServiceShippingSettings, type ServiceShippingSettingsProps, type ServiceSubCategory, ServiceTagCloud, ServiceTagCloudBadges, type ServiceTagCloudProps as ServiceTagCloudBadgesProps, type ServiceTagCloudProps$1 as ServiceTagCloudProps, SetupServiceModal, type SetupServiceModalProps, type ShippingAddress, Sidebar, SidebarContent, type SidebarContentProps, type SidebarContextValue, SidebarFooter, type SidebarFooterProps, SidebarHeader, type SidebarHeaderProps, SidebarMobileToggle, type SidebarMobileToggleProps, SidebarNav, SidebarNavGroup, type SidebarNavGroupProps, SidebarNavItem, type SidebarNavItemProps, type SidebarNavProps, type SidebarProps, SidebarProvider, type SidebarProviderProps, SidebarSearch, type SidebarSearchProps, SidebarToggle, type SidebarToggleProps, type SignupData, SimpleFooter, type SimpleFooterProps, SiteFooter, type SiteFooterProps, SiteHeader, type SiteHeaderProps, SiteLogo, type SiteLogoProps, SkeletonMessage, type SkeletonMessageProps, type SocialLink, type SocialProvider, SparklesIcon, type SparklesIconProps, type SpeakerVerifyHandle, SpinnerIcon, type SpinnerIconProps, SpinnerProps, type Step, StepIndicator, type StepIndicatorProps, StripeBadge, type StripeBadgeProps, StripeSecureBadge, type StripeSecureBadgeProps, SuggestedActions, type SuggestedActionsProps, type SupportContact, type SurveillanceOrderPick, type SystemMessageType, type SystemReport, TableOfContents, type TableOfContentsProps, type TimeRange, type TimeSlot, type TimelineEvent, TimelineEventList, type TimelineEventListProps, TimelineProgress, type TimelineProgressProps, type TimelineSize, type TimelineStep, type TimelineStepState, Toast, ToastContainer, type ToastContainerProps, type ToastContextValue, type ToastData, type ToastOptions, type ToastPosition, type ToastProps, ToastProvider, type ToastProviderProps, type ToastVariant, type TocItem, ToolStatusIcon, type TopItem, type TranscriptSegment, type TypedOrderEditorProps, TypingIndicator, type TypingIndicatorProps, type TypingState, type UncertainConditionField, type Uncertainty, UncertaintyBadge, UpdateAvailableOverlay, type UpdateAvailableOverlayProps, type UpdateInfo, type UseConnectionStatusOptions, type UseConnectionStatusReturn, type UseCookieConsentOptions, type UseCookieConsentReturn, type UseDiarizationOptions, type UseDiarizationResult, type UseDropzoneOptions, type UseDropzoneReturn, type UseHeyOzwellOptions, type UseHeyOzwellResult, type UseMessageScrollOptions, type UseMessageScrollReturn, type UseMessagesOptions, type UseMessagesReturn, type UseReadReceiptsOptions, UseScrollSpyOptions, type UseSpeakerVerifyOpts, type UseTypingIndicatorOptions, type UseTypingIndicatorReturn, type UseVisitScribeOptions, type UseVisitScribeResult, type UseVoiceSetupOptions, type UseVoiceSetupResult, type UseWakeWordOpts, UserMenu, type UserMenuProps, type UserProfile, type UserRole, type ValidationError, type VerificationStatus, VerifiedBadge, type VerifiedBadgeProps, type VerifyResult, VisitScribe, type VisitScribeProps, type VoiceInfo, VoiceManager, type VoiceManagerProps, type VoiceMatch, VoiceSetup, type VoiceSetupPhase, type VoiceSetupProps, WEBSITE_TYPES, type WakeWarmState, type WakeWordControls, type WakeWordState, WebChartReportViewer, type WebChartReportViewerProps, WebcamModal, type WebcamModalProps, type WebsiteEntry, WebsiteInput, WebsiteInputGroup, type WebsiteInputGroupProps, type WebsiteInputProps, type WebsiteType, type WhisperLoadState, type WidgetAction, type WidgetTableAction, type WidgetTableColumn, askOzwell, askOzwellStream, attributeSegments, bubbleVariants, calculateDateRange, centroid, chime, clearVoiceprints, clearWhatPrints, clusterEmbeddings, concernGroupKey, concernHistoryContent, cosine, countBadgeVariants, countChipVariants, create24HourSchedule, createDefaultSchedule, createWeekdaySchedule, currentAssertion, decodeTo16kMono, defaultOrderTabs, defaultReconciliationIsEqual, endsWithDone, formatAddressLines, formatAddressSingleLine, formatCityState, formatCityStateZip, formatDateLabel, formatFileSize, formatLastSeen, generateAttachmentId, generateId, getConversationSubtitle, getConversationTitle, getDefaultPresets, getDictationLoad, getExtendedPresets, getFileType, getGoogleMapsSearchUrl, getGoogleMapsUrl, getOzwellConfig, getToolIcon, getVoiceprints, getWakeWarm, groupMessagesByDate, headerVariants$2 as headerVariants, inferSpeakerRoles, isConditionCodetype, isOzwellConfigured, isSameSenderGroup, isValidUrl, isWhisperLoaded, labelClusters, loadWhatPrints, medicationToOrder, mergeTurns, openRollingRecorder, orderToMedication, orderTypeForCodetype, panelVariants as reconciliationPanelVariants, saveWhatPrints, sendButtonVariants, setVoiceprints, stripStopPhrase, subscribeDictationLoad, subscribeWakeWarm, toOzwellMessages, toolbarKeyNav, transcribeBlob, transcribeGate, transcribeSamples, transcribeSegments, transcribeServer, trimTrailingStopPhrase, useCamera, useCodeLookupConfig, useCommandPalette, useConnectionStatus, useCookieConsent, useDiarization, useDocumentDetection, useDropzone, useFileUpload, useHeyOzwell, useMessageScroll, useMessages, useReadReceipts, useSidebar, useSpeakerVerify, useToast, useTypingIndicator, useVisitScribe, useVoiceSetup, useWakeWord, validateFile, warmStopGate, warmWakeModels, warmWhisper, widgetVariants };
|