@medplum/react-hooks 5.1.18 → 5.1.21

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.
@@ -1,8 +1,8 @@
1
- "use strict";var de=Object.defineProperty;var Ze=Object.getOwnPropertyDescriptor;var en=Object.getOwnPropertyNames;var nn=Object.prototype.hasOwnProperty;var tn=(e,t)=>{for(var n in t)de(e,n,{get:t[n],enumerable:!0})},rn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of en(t))!nn.call(e,r)&&r!==n&&de(e,r,{get:()=>t[r],enumerable:!(o=Ze(t,r))||o.enumerable});return e};var on=e=>rn(de({},"__esModule",{value:!0}),e);var Gn={};tn(Gn,{MedplumProvider:()=>an,QUESTIONNAIRE_CALCULATED_EXPRESSION_URL:()=>we,QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL:()=>Me,QUESTIONNAIRE_HIDDEN_URL:()=>Ae,QUESTIONNAIRE_ITEM_CONTROL_URL:()=>Re,QUESTIONNAIRE_REFERENCE_FILTER_URL:()=>Ce,QUESTIONNAIRE_REFERENCE_RESOURCE_URL:()=>te,QUESTIONNAIRE_SIGNATURE_REQUIRED_URL:()=>In,QUESTIONNAIRE_SIGNATURE_RESPONSE_URL:()=>z,QUESTIONNAIRE_VALIDATION_ERROR_URL:()=>Oe,QuestionnaireItemType:()=>M,buildInitialResponse:()=>ie,buildInitialResponseItem:()=>se,convertToPCM16:()=>je,evaluateCalculatedExpressionsInQuestionnaire:()=>oe,getItemAnswerOptionValue:()=>ye,getItemEnableWhenValueAnswer:()=>We,getItemInitialValue:()=>_n,getNewMultiSelectValues:()=>Qn,getQuestionnaireItemReferenceFilter:()=>wn,getQuestionnaireItemReferenceTargetTypes:()=>On,getResponseItemAnswerValue:()=>De,isChoiceQuestion:()=>Sn,isQuestionEnabled:()=>ke,reactContext:()=>X,removeDisabledItems:()=>re,setQuestionnaireItemReferenceTargetTypes:()=>Mn,typedValueToResponseItem:()=>Ue,useCachedBinaryUrl:()=>cn,useMedicationIFrame:()=>dn,useMedicationOrder:()=>pn,useMedicationOrderSet:()=>fn,useMedplum:()=>T,useMedplumContext:()=>Y,useMedplumNavigate:()=>sn,useMedplumProfile:()=>pe,useNotificationCount:()=>mn,usePatientSummaryData:()=>yn,usePharmacySearch:()=>Rn,usePrevious:()=>gn,useQuestionnaireForm:()=>kn,useResource:()=>ne,useSearch:()=>Wn,useSearchOne:()=>Dn,useSearchResources:()=>Fn,useSubscription:()=>me,useSyncOrderSet:()=>Vn,useThreadInbox:()=>$n,useWhisper:()=>Bn});module.exports=on(Gn);var K=require("react");var H=require("react"),X=(0,H.createContext)(void 0);function Y(){return(0,H.useContext)(X)}function T(){return Y().medplum}function sn(){return Y().navigate}function pe(){return Y().profile}var be=require("react/jsx-runtime"),xe=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function an(e){let t=e.medplum,n=e.navigate??un,[o,r]=(0,K.useState)({profile:t.getProfile(),loading:t.isLoading()});(0,K.useEffect)(()=>{function s(){r(u=>({...u,profile:t.getProfile(),loading:t.isLoading()}))}for(let u of xe)t.addEventListener(u,s);return()=>{for(let u of xe)t.removeEventListener(u,s)}},[t]);let i=(0,K.useMemo)(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return(0,be.jsx)(X.Provider,{value:i,children:e.children})}function un(e){window.location.assign(e)}var Pe=require("react"),Ee=new Map,cn=e=>(0,Pe.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let o=n.get("Expires");if(!o||o.length>13)return e;let r=Ee.get(t);if(r){let s=new URLSearchParams(new URL(r).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return r}return Ee.set(t,e),e},[e]);var W=require("react");function dn(e,t,n){let o=T(),{patientId:r,onPatientSyncSuccess:i,onIframeSuccess:s,onError:u}=n,[m,x]=(0,W.useState)(void 0),E=(0,W.useRef)(i),P=(0,W.useRef)(s),I=(0,W.useRef)(u);return(0,W.useEffect)(()=>{E.current=i,P.current=s,I.current=u},[i,s,u]),(0,W.useEffect)(()=>{let y=!1;return(async()=>{try{if(r){if(await o.executeBot(e,{patientId:r}),y)return;E.current?.()}let c=await o.executeBot(t,{patientId:r});if(y)return;c.url&&(x(c.url),P.current?.(c.url))}catch(c){y||I.current?.(c)}})().catch(()=>{}),()=>{y=!0}},[o,e,t,r]),m}var w=require("@medplum/core"),fe=require("react");function pn(){let e=T(),t=(0,fe.useCallback)(async o=>{let r=e.fhirUrl("Medication","$drug-search"),i=(0,w.medicationSearchParamsToParameters)(o),s=await e.post(r,i);if(!(0,w.isResource)(s,"Bundle"))throw new Error(w.INVALID_MEDICATION_SEARCH_RESPONSE);return(s.entry??[]).map(u=>u.resource).filter(u=>(0,w.isResource)(u,"Medication"))},[e]),n=(0,fe.useCallback)(async o=>{let r=e.fhirUrl("MedicationRequest","$order-medication"),i=(0,w.medicationOrderRequestToParameters)(o),s=await e.post(r,i);if(!(0,w.isResource)(s,"Parameters"))throw new Error(w.INVALID_MEDICATION_ORDER_RESPONSE);return(0,w.parametersToMedicationOrderResponse)(s)},[e]);return{searchMedications:t,orderMedication:n}}var V=require("@medplum/core"),k=require("react");function fn(e){let t=T(),{patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i}=e,[s,u]=(0,k.useState)(void 0),[m,x]=(0,k.useState)(!1),[E,P]=(0,k.useState)(void 0),I=(0,k.useRef)({patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i});I.current={patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i};let y=()=>{let d=I.current;if(!d.patientId)return;let l=!!d.planDefinitionId,p=d.vendorOrderSetId!==void 0&&d.vendorOrderSetId!==null&&d.vendorOrderSetId!=="";return!l&&!p?void 0:{patientId:d.patientId,planDefinitionId:l?d.planDefinitionId:void 0,vendorOrderSetId:p?d.vendorOrderSetId:void 0,appId:d.appId}},R=(0,k.useCallback)(async d=>{let l=t.fhirUrl("PlanDefinition","$order-set-url"),p=(0,V.medicationOrderSetRequestToParameters)(d),g=await t.post(l,p);if(!(0,V.isResource)(g,"Parameters"))throw new Error(V.INVALID_MEDICATION_ORDER_SET_RESPONSE);return(0,V.parametersToMedicationOrderSetResponse)(g).launchUrl},[t]),c=(0,k.useRef)(0),f=(0,k.useCallback)(async()=>{let d=y();if(!d)return;c.current+=1;let l=c.current;x(!0),P(void 0);try{let p=await R(d);return c.current!==l?void 0:(u(p),p)}catch(p){c.current===l&&(P(p),u(void 0));return}finally{c.current===l&&x(!1)}},[R]);return(0,k.useEffect)(()=>{let d=!1,l=y();if(!l){c.current+=1,u(void 0),x(!1),P(void 0);return}c.current+=1;let p=c.current;return x(!0),P(void 0),R(l).then(g=>{d||c.current!==p||u(g)}).catch(g=>{d||c.current!==p||(P(g),u(void 0))}).finally(()=>{!d&&c.current===p&&x(!1)}),()=>{d=!0}},[R,n,o,r,i]),{url:s,loading:m,error:E,refresh:f}}var B=require("react");var le=require("@medplum/core"),C=require("react");var ln=3e3;function me(e,t,n){let o=T(),i=pe()?e:void 0,[s,u]=(0,C.useState)(),[m,x]=(0,C.useState)(n?.subscriptionProps),E=(0,C.useRef)(!1),P=(0,C.useRef)(void 0),I=(0,C.useRef)(void 0),y=(0,C.useRef)(void 0),R=(0,C.useRef)(t);R.current=t;let c=(0,C.useRef)(n?.onWebSocketOpen);c.current=n?.onWebSocketOpen;let f=(0,C.useRef)(n?.onWebSocketClose);f.current=n?.onWebSocketClose;let d=(0,C.useRef)(n?.onSubscriptionConnect);d.current=n?.onSubscriptionConnect;let l=(0,C.useRef)(n?.onSubscriptionDisconnect);l.current=n?.onSubscriptionDisconnect;let p=(0,C.useRef)(n?.onError);p.current=n?.onError,(0,C.useEffect)(()=>{(0,le.deepEquals)(n?.subscriptionProps,m)||x(n?.subscriptionProps)},[m,n]),(0,C.useEffect)(()=>{P.current&&(clearTimeout(P.current),P.current=void 0);let O=!1;return(I.current!==i||!(0,le.deepEquals)(y.current,m))&&(O=!0),O&&I.current&&o.unsubscribeFromCriteria(I.current,y.current),I.current=i,y.current=m,O&&i?u(o.subscribeToCriteria(i,m)):i||u(void 0),()=>{P.current=setTimeout(()=>{u(void 0),i&&o.unsubscribeFromCriteria(i,m)},ln)}},[o,i,m]);let g=(0,C.useCallback)(O=>{R.current?.(O.payload)},[]),v=(0,C.useCallback)(()=>{c.current?.()},[]),Q=(0,C.useCallback)(()=>{f.current?.()},[]),h=(0,C.useCallback)(O=>{d.current?.(O.payload.subscriptionId)},[]),q=(0,C.useCallback)(O=>{l.current?.(O.payload.subscriptionId)},[]),A=(0,C.useCallback)(O=>{p.current?.(O.payload)},[]);(0,C.useEffect)(()=>s?(E.current||(s.addEventListener("message",g),s.addEventListener("open",v),s.addEventListener("close",Q),s.addEventListener("connect",h),s.addEventListener("disconnect",q),s.addEventListener("error",A),E.current=!0),()=>{E.current=!1,s.removeEventListener("message",g),s.removeEventListener("open",v),s.removeEventListener("close",Q),s.removeEventListener("connect",h),s.removeEventListener("disconnect",q),s.removeEventListener("error",A)}):()=>{},[s,g,v,Q,h,q,A])}function mn(e){let t=T(),{resourceType:n,countCriteria:o,subscriptionCriteria:r}=e,[i,s]=(0,B.useState)(0),u=(0,B.useCallback)(m=>{t.search(n,o,{cache:m}).then(x=>s(x.total)).catch(console.error)},[t,n,o]);return(0,B.useEffect)(()=>{u("default")},[u]),me(r,()=>{u("reload")}),i}var ve=require("@medplum/core"),D=require("react");function Qe(e){let t=e.patientParam??"subject",n=e.query,o="";if(n!=null)if(typeof n=="string")o=n;else if(n instanceof URLSearchParams){let r=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else if(Array.isArray(n)){let r=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else{let r=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));o=JSON.stringify(r)}return`${e.resourceType}:${t}:${o}`}function hn(e){return e.map(t=>{let n=t.searches?t.searches.map(Qe).join(","):"";return`${t.key}:[${n}]`}).join("|")}function yn(e,t){let n=T(),[o,r]=(0,D.useState)([]),[i,s]=(0,D.useState)(!0),[u,m]=(0,D.useState)(),x=hn(t),E=(0,D.useMemo)(()=>t,[x]),P=(0,D.useMemo)(()=>(0,ve.resolveId)(e),[e]);return(0,D.useEffect)(()=>{if(!P)return;let I=!1,y=`Patient/${P}`,R={_count:100,_sort:"-_lastUpdated"},c=[],f=new Map,d=[];for(let p of E){let g=[];if(p.searches)for(let v of p.searches){let Q=Qe(v),h=f.get(Q);h===void 0&&(h=c.length,f.set(Q,h),c.push(v)),g.push({searchIdx:h,resultKey:v.key})}d.push(g)}if(c.length===0){r(E.map(()=>({}))),s(!1);return}let l=c.map(p=>{let g=p.patientParam??"subject",v={[g]:y};if(p.query){if(typeof p.query=="string")return n.searchResources(p.resourceType,`${g}=${y}&${p.query}&_count=100&_sort=-_lastUpdated`);if(p.query instanceof URLSearchParams)p.query.forEach((Q,h)=>{v[h]=Q});else if(Array.isArray(p.query))for(let[Q,h]of p.query)v[Q]=h;else for(let[Q,h]of Object.entries(p.query))h!==void 0&&(v[Q]=h)}return n.searchResources(p.resourceType,{...R,...v})});return s(!0),m(void 0),Promise.allSettled(l).then(p=>{if(I)return;let g=d.map(Q=>{let h={};for(let{searchIdx:q,resultKey:A}of Q){let O=p[q];h[A]=O.status==="fulfilled"?O.value:[]}return h});r(g),s(!1);let v=p.filter(Q=>Q.status==="rejected");if(v.length>0){console.error("Some patient summary searches failed:",v.map(h=>h.reason));let Q=v[0].reason;m(Q instanceof Error?Q:new Error(String(Q)))}}).catch(p=>{I||(m(p instanceof Error?p:new Error(String(p))),s(!1))}),()=>{I=!0}},[n,P,E]),{sectionData:o,loading:i,error:u}}var Z=require("@medplum/core"),he=require("react");function Rn(e,t){let n=T(),o=(0,he.useCallback)(async i=>{let s=await n.executeBot(e,i);if(!(0,Z.isOrganizationArray)(s))throw new Error("Invalid response from pharmacy search");return s},[n,e]),r=(0,he.useCallback)(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary});if(!(0,Z.isAddPharmacyResponse)(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:o,addToFavorites:r}}var ee=require("react");function gn(e){let t=(0,ee.useRef)(void 0);return(0,ee.useEffect)(()=>{t.current=e}),t.current}var Fe=require("@medplum/core"),ae=require("react");var F=require("@medplum/core"),j=require("react");function ne(e,t){let n=T(),[o,r]=(0,j.useState)(()=>Te(n,e)),i=(0,j.useCallback)(s=>{(0,F.deepEquals)(s,o)||r(s)},[o]);return(0,j.useEffect)(()=>{let s=!0,u=Te(n,e);return!u&&(0,F.isReference)(e)?n.readReference(e).then(m=>{s&&i(m)}).catch(m=>{s&&(i(void 0),t&&t((0,F.normalizeOperationOutcome)(m)))}):i(u),(()=>s=!1)},[n,e,i,t]),o}function Te(e,t){if(t){if((0,F.isResource)(t))return t;if((0,F.isReference)(t))return e.getCachedReference(t)}}var a=require("@medplum/core"),M={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"},Re=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-itemControl`,Ce=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceFilter`,te=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,Oe=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,Me=`${a.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,we=`${a.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,In=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-signatureRequired`,z=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaireresponse-signature`,Ae=`${a.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-hidden`;function Sn(e){return e.type==="choice"||e.type==="open-choice"}function re(e,t){return{...t,item:_e(e.item,t.item,t)}}function _e(e,t,n){if(!t)return t;let o=[];for(let r of t){let i=e?.find(s=>s.linkId===r.linkId);i&&!ke(i,n)||(i?.item&&r.item?o.push({...r,item:_e(i.item,r.item,n)}):o.push(r))}return o}function ke(e,t){if((0,a.getExtension)(e,Ae)?.valueBoolean===!0)return!1;let o=xn(e,t);return o!==void 0?o:bn(e,t)}function xn(e,t){let n=(0,a.getExtension)(e,Me);if(t&&n){let o=n.valueExpression?.expression;if(o){let r=(0,a.toTypedValue)(t),i=(0,a.evalFhirPathTyped)(o,[r],{"%resource":r});return(0,a.toJsBoolean)(i)}}}function bn(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let o of e.enableWhen){let r=Ne(t?.item,o.question);if(o.operator==="exists"&&!o.answerBoolean&&!r?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=Cn(o,r,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function oe(e,t,n=t.item){for(let o of e){let r=n?.find(i=>i.linkId===o.linkId);r&&(En(t,o,r),o.item&&r.item&&oe(o.item,t,r.item))}}function En(e,t,n){try{let o=vn(t,e);if(!o)return;let r=Ue(t,o);if(!r)return;n.answer=[r]}catch(o){n.extension=[{url:Oe,valueString:`Expression evaluation failed: ${(0,a.normalizeErrorString)(o)}`}]}}var Pn={[M.boolean]:[a.PropertyType.boolean],[M.date]:[a.PropertyType.date],[M.dateTime]:[a.PropertyType.dateTime],[M.time]:[a.PropertyType.time],[M.url]:[a.PropertyType.string,a.PropertyType.uri,a.PropertyType.url],[M.attachment]:[a.PropertyType.Attachment],[M.reference]:[a.PropertyType.Reference],[M.quantity]:[a.PropertyType.Quantity],[M.decimal]:[a.PropertyType.decimal,a.PropertyType.integer],[M.integer]:[a.PropertyType.decimal,a.PropertyType.integer]};function Ue(e,t){if(!e.type)return;if(e.type===M.choice||e.type===M.openChoice)return{[`value${(0,a.capitalize)(t.type)}`]:t.value};if(e.type===M.string||e.type===M.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if(Pn[e.type]?.includes(t.type))return{[`value${(0,a.capitalize)(e.type)}`]:t.value}}function vn(e,t){if(!t)return;let n=(0,a.getExtension)(e,we);if(n){let o=n.valueExpression?.expression;if(o){let r=(0,a.toTypedValue)(t),i=(0,a.evalFhirPathTyped)(o,[r],{"%resource":r});return i.length!==0?i[0]:void 0}}}function Qn(e,t,n){let o=[];for(let r of e){let i=n.answerOption?.find(s=>(0,a.typedValueToString)(ye(s))===r);if(i){let s=ye(i);s&&o.push({[t]:s.value})}}return o}function Ne(e,t){for(let n of e??a.EMPTY){if(n.linkId===t)return n.answer;if(n.item){let o=Ne(n.item,t);if(o)return o}}}function Tn(e,t,n){if(n==="exists")return!!e===t.value;if(e){let o=n==="="||n==="!="?n?.replace("=","~"):n,[{value:r}]=(0,a.evalFhirPathTyped)(`%actualAnswer ${o} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return r}else return!1}function Cn(e,t,n){let o=t||[],r=We(e),i=!1,s=!0;for(let u of o){let m=De(u),{operator:x}=e;if(Tn(m,r,x)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function On(e){let t=(0,a.getExtension)(e,te);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function Mn(e,t){let n=(0,a.deepClone)(e),o=(0,a.getExtension)(n,te);return!t||t.length===0?(o&&(n.extension=n.extension?.filter(r=>r!==o)),n):(o||(n.extension??=[],o={url:te},n.extension.push(o)),t.length===1?(o.valueCode=t[0],delete o.valueCodeableConcept):(o.valueCodeableConcept={coding:t.map(r=>({code:r}))},delete o.valueCode),n)}function wn(e,t,n){let o=(0,a.getExtension)(e,Ce);if(!o?.valueString)return;let r=o.valueString;t?.reference&&(r=r.replaceAll("$subj",t.reference)),n?.reference&&(r=r.replaceAll("$encounter",n.reference));let i={},s=r.split("&");for(let u of s){let[m,x]=(0,a.splitN)(u,"=",2);i[m]=x}return i}function ie(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??(0,a.getReferenceString)(e),item:ge(e.item,t?.item),status:"in-progress"}}function ge(e,t){let n;for(let o of e??a.EMPTY){if(o.type===M.display)continue;let r=t?.filter(i=>i.linkId===o.linkId);if(r?.length)for(let i of r)i.id=i.id??qe(),i.text=i.text??o.text,i.item=ge(o.item,i.item),i.answer=Le(o,i),n=(0,a.append)(n,i);else n=(0,a.append)(n,se(o))}return n}function se(e){return{id:qe(),linkId:e.linkId,text:e.text,item:ge(e.item,void 0),answer:Le(e)}}var An=1;function qe(){return"id-"+An++}function Le(e,t){if(!(e.type===M.display||e.type===M.group)){if(t?.answer&&t.answer.length>0)return t.answer;if(e.initial&&e.initial.length>0)return e.initial.map(n=>({...n}));if(e.answerOption)return e.answerOption.filter(n=>n.initialSelected).map(n=>({...n,initialSelected:void 0}))}}function _n(e){return(0,a.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:e},"value")}function ye(e){return(0,a.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:e},"value")}function We(e){return(0,a.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function De(e){return(0,a.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function kn(e){let t=ne(e.questionnaire),n=ne(e.defaultValue),[,o]=(0,ae.useReducer)(R=>R+1,0),r=(0,ae.useRef)({activePage:0});if(!r.current.questionnaire&&t&&(r.current.questionnaire=t,r.current.pages=e.disablePagination?void 0:Un(t)),t&&e.defaultValue&&n&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=ie(t,n),y()),t&&!e.defaultValue&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=ie(t),y()),!r.current.questionnaire||!r.current.questionnaireResponse)return{loading:!0};function i(R,c){let f=r.current.questionnaireResponse;for(let d of R)f=f?.item?.find(l=>d.id?l.id===d.id:l.linkId===d.linkId);return c&&(f=f?.item?.find(d=>d.linkId===c.linkId)),f}function s(){r.current.activePage=(r.current.activePage??0)+1,o()}function u(){r.current.activePage=(r.current.activePage??0)-1,o()}function m(R,c){let f=i(R);f&&(f.item??=[],f.item.push(se(c)),y())}function x(R,c){let f=i(R,c);f&&(f.answer??=[],f.answer.push({}),y())}function E(R,c,f){let d=i(R,c);d&&(d.answer=f,y())}function P(R){let c=r.current.questionnaireResponse;c&&(R?(c.extension=c.extension??[],c.extension=c.extension.filter(f=>f.url!==z),c.extension.push({url:z,valueSignature:R})):c.extension=c.extension?.filter(f=>f.url!==z),y())}function I(){let R=r.current.questionnaire;if(R?.item){let c=r.current.questionnaireResponse;oe(R.item,c)}}function y(){let R=r.current.questionnaireResponse,c=r.current.questionnaire;!R||!c||(I(),o(),e.onChange?.(re(c,R)))}return{loading:!1,pagination:!!r.current.pages,questionnaire:r.current.questionnaire,questionnaireResponse:re(r.current.questionnaire,r.current.questionnaireResponse),subject:e.subject,encounter:e.encounter,activePage:r.current.activePage,pages:r.current.pages,items:Nn(r.current.questionnaire,r.current.pages,r.current.activePage),responseItems:qn(r.current.questionnaireResponse,r.current.pages,r.current.activePage),onNextPage:s,onPrevPage:u,onAddGroup:m,onAddAnswer:x,onChangeAnswer:E,onChangeSignature:P}}function Un(e){if(!(!e?.item||(0,Fe.getExtension)(e?.item?.[0],Re)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,o)=>({linkId:n.linkId,title:n.text??`Page ${o+1}`,group:n}))}function Nn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function qn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}var ue=require("@medplum/core"),$=require("react");var U=require("react");function Ve(e,t,n={leading:!1}){let[o,r]=(0,U.useState)(e),i=(0,U.useRef)(!1),s=(0,U.useRef)(void 0),u=(0,U.useRef)(!1),m=(0,U.useCallback)(()=>window.clearTimeout(s.current),[]);return(0,U.useEffect)(()=>{i.current&&(!u.current&&n.leading?(u.current=!0,r(e),s.current=setTimeout(()=>{u.current=!1},t)):(m(),s.current=setTimeout(()=>{u.current=!1,r(e)},t)))},[e,n.leading,t,m]),(0,U.useEffect)(()=>(i.current=!0,m),[m]),[o,m]}var Ln=250;function Wn(e,t,n){return Ie("search",e,t,n)}function Dn(e,t,n){return Ie("searchOne",e,t,n)}function Fn(e,t,n){return Ie("searchResources",e,t,n)}function Ie(e,t,n,o){let r=T(),[i,s]=(0,$.useState)(!1),[u,m]=(0,$.useState)(),[x,E]=(0,$.useState)(),P=r.fhirSearchUrl(t,n).toString(),I=(0,$.useMemo)(()=>({resourceType:t,query:n}),[P]),y=o?.enabled??!0,R=o?.debounceMs??Ln,[c]=Ve(I,R,{leading:!0});return(0,$.useEffect)(()=>{if(!y)return()=>{};s(!0);let f=!0;return r[e](c.resourceType,c.query).then(d=>{f&&(s(!1),m(d),E(ue.allOk))}).catch(d=>{f&&(s(!1),m(void 0),E((0,ue.normalizeOperationOutcome)(d)))}),()=>{f=!1}},[r,e,c,y]),[u,i,x]}var $e=require("@medplum/core"),Ke=require("react");function Vn(){let e=T();return(0,Ke.useCallback)(async t=>{try{await e.post(e.fhirUrl("PlanDefinition","$sync-orderset"),{planDefinitionId:t})}catch(n){if(n instanceof $e.OperationOutcomeError&&n.outcome.issue?.some(o=>o.code==="not-found"))return;throw n}},[e])}var Be=require("@medplum/core"),N=require("react");function $n({query:e,threadId:t}){let n=T(),[o,r]=(0,N.useState)(!0),[i,s]=(0,N.useState)([]),[u,m]=(0,N.useState)(void 0),[x,E]=(0,N.useState)(null),[P,I]=(0,N.useState)(void 0),y=(0,N.useCallback)(async()=>{let f=new URLSearchParams(e);f.append("identifier:not","http://medplum.com/ai-message|"),f.append("part-of:missing","true"),f.append("_has:Communication:part-of:_id:not","null");let d=await n.search("Communication",f.toString(),{cache:"no-cache"}),l=d.entry?.map(h=>h.resource).filter(h=>h!==void 0)||[];if(d.total!==void 0&&I(d.total),l.length===0){s([]);return}let g=`
1
+ "use strict";var fe=Object.defineProperty;var nn=Object.getOwnPropertyDescriptor;var tn=Object.getOwnPropertyNames;var rn=Object.prototype.hasOwnProperty;var on=(e,t)=>{for(var n in t)fe(e,n,{get:t[n],enumerable:!0})},sn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of tn(t))!rn.call(e,r)&&r!==n&&fe(e,r,{get:()=>t[r],enumerable:!(o=nn(t,r))||o.enumerable});return e};var an=e=>sn(fe({},"__esModule",{value:!0}),e);var Zn={};on(Zn,{MedplumProvider:()=>cn,QUESTIONNAIRE_CALCULATED_EXPRESSION_URL:()=>_e,QUESTIONNAIRE_ENABLED_WHEN_EXPRESSION_URL:()=>Ae,QUESTIONNAIRE_HIDDEN_URL:()=>ke,QUESTIONNAIRE_ITEM_CONTROL_URL:()=>Ie,QUESTIONNAIRE_REFERENCE_FILTER_URL:()=>Me,QUESTIONNAIRE_REFERENCE_RESOURCE_URL:()=>re,QUESTIONNAIRE_SIGNATURE_REQUIRED_URL:()=>xn,QUESTIONNAIRE_SIGNATURE_RESPONSE_URL:()=>G,QUESTIONNAIRE_VALIDATION_ERROR_URL:()=>we,QuestionnaireItemType:()=>w,buildInitialResponse:()=>se,buildInitialResponseItem:()=>ae,convertToPCM16:()=>Je,evaluateCalculatedExpressionsInQuestionnaire:()=>ie,getItemAnswerOptionValue:()=>ge,getItemEnableWhenValueAnswer:()=>De,getItemInitialValue:()=>Un,getNewMultiSelectValues:()=>Cn,getQuestionnaireItemReferenceFilter:()=>_n,getQuestionnaireItemReferenceTargetTypes:()=>wn,getResponseItemAnswerValue:()=>Ve,isChoiceQuestion:()=>bn,isQuestionEnabled:()=>qe,reactContext:()=>Y,removeDisabledItems:()=>oe,setQuestionnaireItemReferenceTargetTypes:()=>An,typedValueToResponseItem:()=>Ne,useCachedBinaryUrl:()=>pn,useMedicationIFrame:()=>fn,useMedicationOrder:()=>ln,useMedicationOrderSet:()=>mn,useMedplum:()=>Q,useMedplumContext:()=>Z,useMedplumNavigate:()=>un,useMedplumProfile:()=>le,useNotificationCount:()=>yn,usePatientSummaryData:()=>gn,usePharmacySearch:()=>In,usePrevious:()=>Sn,useQuestionnaireForm:()=>qn,useResource:()=>te,useResourceBoard:()=>Dn,useSearch:()=>$n,useSearchOne:()=>Bn,useSearchResources:()=>Kn,useSubscription:()=>ye,useSyncOrderSet:()=>jn,useThreadInbox:()=>zn,useWhisper:()=>Gn});module.exports=an(Zn);var j=require("react");var X=require("react"),Y=(0,X.createContext)(void 0);function Z(){return(0,X.useContext)(Y)}function Q(){return Z().medplum}function un(){return Z().navigate}function le(){return Z().profile}var Te=require("react/jsx-runtime"),Ee=["change","storageInitialized","storageInitFailed","profileRefreshing","profileRefreshed"];function cn(e){let t=e.medplum,n=e.navigate??dn,[o,r]=(0,j.useState)({profile:t.getProfile(),loading:t.isLoading()});(0,j.useEffect)(()=>{function s(){r(a=>({...a,profile:t.getProfile(),loading:t.isLoading()}))}for(let a of Ee)t.addEventListener(a,s);return()=>{for(let a of Ee)t.removeEventListener(a,s)}},[t]);let i=(0,j.useMemo)(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return(0,Te.jsx)(Y.Provider,{value:i,children:e.children})}function dn(e){window.location.assign(e)}var Pe=require("react"),ve=new Map,pn=e=>(0,Pe.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let o=n.get("Expires");if(!o||o.length>13)return e;let r=ve.get(t);if(r){let s=new URLSearchParams(new URL(r).search).get("Expires");if(s&&Number.parseInt(s,10)*1e3-5e3>Date.now())return r}return ve.set(t,e),e},[e]);var F=require("react");function fn(e,t,n){let o=Q(),{patientId:r,onPatientSyncSuccess:i,onIframeSuccess:s,onError:a}=n,[l,x]=(0,F.useState)(void 0),v=(0,F.useRef)(i),P=(0,F.useRef)(s),I=(0,F.useRef)(a);return(0,F.useEffect)(()=>{v.current=i,P.current=s,I.current=a},[i,s,a]),(0,F.useEffect)(()=>{let y=!1;return(async()=>{try{if(r){if(await o.executeBot(e,{patientId:r}),y)return;v.current?.()}let c=await o.executeBot(t,{patientId:r});if(y)return;c.url&&(x(c.url),P.current?.(c.url))}catch(c){y||I.current?.(c)}})().catch(()=>{}),()=>{y=!0}},[o,e,t,r]),l}var _=require("@medplum/core"),me=require("react");function ln(){let e=Q(),t=(0,me.useCallback)(async o=>{let r=e.fhirUrl("Medication","$drug-search"),i=(0,_.medicationSearchParamsToParameters)(o),s=await e.post(r,i);if(!(0,_.isResource)(s,"Bundle"))throw new Error(_.INVALID_MEDICATION_SEARCH_RESPONSE);return(s.entry??[]).map(a=>a.resource).filter(a=>(0,_.isResource)(a,"Medication"))},[e]),n=(0,me.useCallback)(async o=>{let r=e.fhirUrl("MedicationRequest","$order-medication"),i=(0,_.medicationOrderRequestToParameters)(o),s=await e.post(r,i);if(!(0,_.isResource)(s,"Parameters"))throw new Error(_.INVALID_MEDICATION_ORDER_RESPONSE);return(0,_.parametersToMedicationOrderResponse)(s)},[e]);return{searchMedications:t,orderMedication:n}}var $=require("@medplum/core"),U=require("react");function mn(e){let t=Q(),{patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i}=e,[s,a]=(0,U.useState)(void 0),[l,x]=(0,U.useState)(!1),[v,P]=(0,U.useState)(void 0),I=(0,U.useRef)({patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i});I.current={patientId:n,planDefinitionId:o,vendorOrderSetId:r,appId:i};let y=()=>{let d=I.current;if(!d.patientId)return;let m=!!d.planDefinitionId,p=d.vendorOrderSetId!==void 0&&d.vendorOrderSetId!==null&&d.vendorOrderSetId!=="";return!m&&!p?void 0:{patientId:d.patientId,planDefinitionId:m?d.planDefinitionId:void 0,vendorOrderSetId:p?d.vendorOrderSetId:void 0,appId:d.appId}},R=(0,U.useCallback)(async d=>{let m=t.fhirUrl("PlanDefinition","$order-set-url"),p=(0,$.medicationOrderSetRequestToParameters)(d),g=await t.post(m,p);if(!(0,$.isResource)(g,"Parameters"))throw new Error($.INVALID_MEDICATION_ORDER_SET_RESPONSE);return(0,$.parametersToMedicationOrderSetResponse)(g).launchUrl},[t]),c=(0,U.useRef)(0),f=(0,U.useCallback)(async()=>{let d=y();if(!d)return;c.current+=1;let m=c.current;x(!0),P(void 0);try{let p=await R(d);return c.current!==m?void 0:(a(p),p)}catch(p){c.current===m&&(P(p),a(void 0));return}finally{c.current===m&&x(!1)}},[R]);return(0,U.useEffect)(()=>{let d=!1,m=y();if(!m){c.current+=1,a(void 0),x(!1),P(void 0);return}c.current+=1;let p=c.current;return x(!0),P(void 0),R(m).then(g=>{d||c.current!==p||a(g)}).catch(g=>{d||c.current!==p||(P(g),a(void 0))}).finally(()=>{!d&&c.current===p&&x(!1)}),()=>{d=!0}},[R,n,o,r,i]),{url:s,loading:l,error:v,refresh:f}}var z=require("react");var he=require("@medplum/core"),O=require("react");var hn=3e3;function ye(e,t,n){let o=Q(),i=le()?e:void 0,[s,a]=(0,O.useState)(),[l,x]=(0,O.useState)(n?.subscriptionProps),v=(0,O.useRef)(!1),P=(0,O.useRef)(void 0),I=(0,O.useRef)(void 0),y=(0,O.useRef)(void 0),R=(0,O.useRef)(t);R.current=t;let c=(0,O.useRef)(n?.onWebSocketOpen);c.current=n?.onWebSocketOpen;let f=(0,O.useRef)(n?.onWebSocketClose);f.current=n?.onWebSocketClose;let d=(0,O.useRef)(n?.onSubscriptionConnect);d.current=n?.onSubscriptionConnect;let m=(0,O.useRef)(n?.onSubscriptionDisconnect);m.current=n?.onSubscriptionDisconnect;let p=(0,O.useRef)(n?.onError);p.current=n?.onError,(0,O.useEffect)(()=>{(0,he.deepEquals)(n?.subscriptionProps,l)||x(n?.subscriptionProps)},[l,n]),(0,O.useEffect)(()=>{P.current&&(clearTimeout(P.current),P.current=void 0);let C=!1;return(I.current!==i||!(0,he.deepEquals)(y.current,l))&&(C=!0),C&&I.current&&o.unsubscribeFromCriteria(I.current,y.current),I.current=i,y.current=l,C&&i?a(o.subscribeToCriteria(i,l)):i||a(void 0),()=>{P.current=setTimeout(()=>{a(void 0),i&&o.unsubscribeFromCriteria(i,l)},hn)}},[o,i,l]);let g=(0,O.useCallback)(C=>{R.current?.(C.payload)},[]),E=(0,O.useCallback)(()=>{c.current?.()},[]),S=(0,O.useCallback)(()=>{f.current?.()},[]),h=(0,O.useCallback)(C=>{d.current?.(C.payload.subscriptionId)},[]),q=(0,O.useCallback)(C=>{m.current?.(C.payload.subscriptionId)},[]),M=(0,O.useCallback)(C=>{p.current?.(C.payload)},[]);(0,O.useEffect)(()=>s?(v.current||(s.addEventListener("message",g),s.addEventListener("open",E),s.addEventListener("close",S),s.addEventListener("connect",h),s.addEventListener("disconnect",q),s.addEventListener("error",M),v.current=!0),()=>{v.current=!1,s.removeEventListener("message",g),s.removeEventListener("open",E),s.removeEventListener("close",S),s.removeEventListener("connect",h),s.removeEventListener("disconnect",q),s.removeEventListener("error",M)}):()=>{},[s,g,E,S,h,q,M])}function yn(e){let t=Q(),{resourceType:n,countCriteria:o,subscriptionCriteria:r}=e,[i,s]=(0,z.useState)(0),a=(0,z.useCallback)(l=>{t.search(n,o,{cache:l}).then(x=>s(x.total)).catch(console.error)},[t,n,o]);return(0,z.useEffect)(()=>{a("default")},[a]),ye(r,()=>{a("reload")}),i}var Qe=require("@medplum/core"),D=require("react");function Ce(e){let t=e.patientParam??"subject",n=e.query,o="";if(n!=null)if(typeof n=="string")o=n;else if(n instanceof URLSearchParams){let r=Array.from(n.entries()).sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else if(Array.isArray(n)){let r=[...n].sort((i,s)=>i[0].localeCompare(s[0])||i[1].localeCompare(s[1]));o=JSON.stringify(r)}else{let r=Object.entries(n).filter(([,i])=>i!==void 0).sort(([i],[s])=>i.localeCompare(s));o=JSON.stringify(r)}return`${e.resourceType}:${t}:${o}`}function Rn(e){return e.map(t=>{let n=t.searches?t.searches.map(Ce).join(","):"";return`${t.key}:[${n}]`}).join("|")}function gn(e,t){let n=Q(),[o,r]=(0,D.useState)([]),[i,s]=(0,D.useState)(!0),[a,l]=(0,D.useState)(),x=Rn(t),v=(0,D.useMemo)(()=>t,[x]),P=(0,D.useMemo)(()=>(0,Qe.resolveId)(e),[e]);return(0,D.useEffect)(()=>{if(!P)return;let I=!1,y=`Patient/${P}`,R={_count:100,_sort:"-_lastUpdated"},c=[],f=new Map,d=[];for(let p of v){let g=[];if(p.searches)for(let E of p.searches){let S=Ce(E),h=f.get(S);h===void 0&&(h=c.length,f.set(S,h),c.push(E)),g.push({searchIdx:h,resultKey:E.key})}d.push(g)}if(c.length===0){r(v.map(()=>({}))),s(!1);return}let m=c.map(p=>{let g=p.patientParam??"subject",E={[g]:y};if(p.query){if(typeof p.query=="string")return n.searchResources(p.resourceType,`${g}=${y}&${p.query}&_count=100&_sort=-_lastUpdated`);if(p.query instanceof URLSearchParams)p.query.forEach((S,h)=>{E[h]=S});else if(Array.isArray(p.query))for(let[S,h]of p.query)E[S]=h;else for(let[S,h]of Object.entries(p.query))h!==void 0&&(E[S]=h)}return n.searchResources(p.resourceType,{...R,...E})});return s(!0),l(void 0),Promise.allSettled(m).then(p=>{if(I)return;let g=d.map(S=>{let h={};for(let{searchIdx:q,resultKey:M}of S){let C=p[q];h[M]=C.status==="fulfilled"?C.value:[]}return h});r(g),s(!1);let E=p.filter(S=>S.status==="rejected");if(E.length>0){console.error("Some patient summary searches failed:",E.map(h=>h.reason));let S=E[0].reason;l(S instanceof Error?S:new Error(String(S)))}}).catch(p=>{I||(l(p instanceof Error?p:new Error(String(p))),s(!1))}),()=>{I=!0}},[n,P,v]),{sectionData:o,loading:i,error:a}}var ee=require("@medplum/core"),Re=require("react");function In(e,t){let n=Q(),o=(0,Re.useCallback)(async i=>{let s=await n.executeBot(e,i);if(!(0,ee.isOrganizationArray)(s))throw new Error("Invalid response from pharmacy search");return s},[n,e]),r=(0,Re.useCallback)(async i=>{let s=await n.executeBot(t,{patientId:i.patientId,pharmacy:i.pharmacy,setAsPrimary:i.setAsPrimary});if(!(0,ee.isAddPharmacyResponse)(s))throw new Error("Invalid response from add pharmacy bot");return s},[n,t]);return{searchPharmacies:o,addToFavorites:r}}var ne=require("react");function Sn(e){let t=(0,ne.useRef)(void 0);return(0,ne.useEffect)(()=>{t.current=e}),t.current}var $e=require("@medplum/core"),ue=require("react");var V=require("@medplum/core"),J=require("react");function te(e,t){let n=Q(),[o,r]=(0,J.useState)(()=>Oe(n,e)),i=(0,J.useCallback)(s=>{(0,V.deepEquals)(s,o)||r(s)},[o]);return(0,J.useEffect)(()=>{let s=!0,a=Oe(n,e);return!a&&(0,V.isReference)(e)?n.readReference(e).then(l=>{s&&i(l)}).catch(l=>{s&&(i(void 0),t&&t((0,V.normalizeOperationOutcome)(l)))}):i(a),(()=>s=!1)},[n,e,i,t]),o}function Oe(e,t){if(t){if((0,V.isResource)(t))return t;if((0,V.isReference)(t))return e.getCachedReference(t)}}var u=require("@medplum/core"),w={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"},Ie=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-itemControl`,Me=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceFilter`,re=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,we=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,Ae=`${u.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression`,_e=`${u.HTTP_HL7_ORG}/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression`,xn=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-signatureRequired`,G=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaireresponse-signature`,ke=`${u.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-hidden`;function bn(e){return e.type==="choice"||e.type==="open-choice"}function oe(e,t){return{...t,item:Ue(e.item,t.item,t)}}function Ue(e,t,n){if(!t)return t;let o=[];for(let r of t){let i=e?.find(s=>s.linkId===r.linkId);i&&!qe(i,n)||(i?.item&&r.item?o.push({...r,item:Ue(i.item,r.item,n)}):o.push(r))}return o}function qe(e,t){if((0,u.getExtension)(e,ke)?.valueBoolean===!0)return!1;let o=En(e,t);return o!==void 0?o:Tn(e,t)}function En(e,t){let n=(0,u.getExtension)(e,Ae);if(t&&n){let o=n.valueExpression?.expression;if(o){let r=(0,u.toTypedValue)(t),i=(0,u.evalFhirPathTyped)(o,[r],{"%resource":r});return(0,u.toJsBoolean)(i)}}}function Tn(e,t){if(!e.enableWhen)return!0;let n=e.enableBehavior??"any";for(let o of e.enableWhen){let r=Le(t?.item,o.question);if(o.operator==="exists"&&!o.answerBoolean&&!r?.length){if(n==="any")return!0;continue}let{anyMatch:i,allMatch:s}=Mn(o,r,n);if(n==="any"&&i)return!0;if(n==="all"&&!s)return!1}return n!=="any"}function ie(e,t,n=t.item){for(let o of e){let r=n?.find(i=>i.linkId===o.linkId);r&&(vn(t,o,r),o.item&&r.item&&ie(o.item,t,r.item))}}function vn(e,t,n){try{let o=Qn(t,e);if(!o)return;let r=Ne(t,o);if(!r)return;n.answer=[r]}catch(o){n.extension=[{url:we,valueString:`Expression evaluation failed: ${(0,u.normalizeErrorString)(o)}`}]}}var Pn={[w.boolean]:[u.PropertyType.boolean],[w.date]:[u.PropertyType.date],[w.dateTime]:[u.PropertyType.dateTime],[w.time]:[u.PropertyType.time],[w.url]:[u.PropertyType.string,u.PropertyType.uri,u.PropertyType.url],[w.attachment]:[u.PropertyType.Attachment],[w.reference]:[u.PropertyType.Reference],[w.quantity]:[u.PropertyType.Quantity],[w.decimal]:[u.PropertyType.decimal,u.PropertyType.integer],[w.integer]:[u.PropertyType.decimal,u.PropertyType.integer]};function Ne(e,t){if(!e.type)return;if(e.type===w.choice||e.type===w.openChoice)return{[`value${(0,u.capitalize)(t.type)}`]:t.value};if(e.type===w.string||e.type===w.text)return typeof t.value=="string"?{valueString:t.value}:void 0;if(Pn[e.type]?.includes(t.type))return{[`value${(0,u.capitalize)(e.type)}`]:t.value}}function Qn(e,t){if(!t)return;let n=(0,u.getExtension)(e,_e);if(n){let o=n.valueExpression?.expression;if(o){let r=(0,u.toTypedValue)(t),i=(0,u.evalFhirPathTyped)(o,[r],{"%resource":r});return i.length!==0?i[0]:void 0}}}function Cn(e,t,n){let o=[];for(let r of e){let i=n.answerOption?.find(s=>(0,u.typedValueToString)(ge(s))===r);if(i){let s=ge(i);s&&o.push({[t]:s.value})}}return o}function Le(e,t){for(let n of e??u.EMPTY){if(n.linkId===t)return n.answer;if(n.item){let o=Le(n.item,t);if(o)return o}}}function On(e,t,n){if(n==="exists")return!!e===t.value;if(e){let o=n==="="||n==="!="?n?.replace("=","~"):n,[{value:r}]=(0,u.evalFhirPathTyped)(`%actualAnswer ${o} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":t});return r}else return!1}function Mn(e,t,n){let o=t||[],r=De(e),i=!1,s=!0;for(let a of o){let l=Ve(a),{operator:x}=e;if(On(l,r,x)?i=!0:s=!1,n==="any"&&i)break}return{anyMatch:i,allMatch:s}}function wn(e){let t=(0,u.getExtension)(e,re);if(t){if(t.valueCode!==void 0)return[t.valueCode];if(t.valueCodeableConcept)return t.valueCodeableConcept?.coding?.map(n=>n.code)}}function An(e,t){let n=(0,u.deepClone)(e),o=(0,u.getExtension)(n,re);return!t||t.length===0?(o&&(n.extension=n.extension?.filter(r=>r!==o)),n):(o||(n.extension??=[],o={url:re},n.extension.push(o)),t.length===1?(o.valueCode=t[0],delete o.valueCodeableConcept):(o.valueCodeableConcept={coding:t.map(r=>({code:r}))},delete o.valueCode),n)}function _n(e,t,n){let o=(0,u.getExtension)(e,Me);if(!o?.valueString)return;let r=o.valueString;t?.reference&&(r=r.replaceAll("$subj",t.reference)),n?.reference&&(r=r.replaceAll("$encounter",n.reference));let i={},s=r.split("&");for(let a of s){let[l,x]=(0,u.splitN)(a,"=",2);i[l]=x}return i}function se(e,t){return{resourceType:"QuestionnaireResponse",questionnaire:e.url??(0,u.getReferenceString)(e),item:Se(e.item,t?.item),status:"in-progress"}}function Se(e,t){let n;for(let o of e??u.EMPTY){if(o.type===w.display)continue;let r=t?.filter(i=>i.linkId===o.linkId);if(r?.length)for(let i of r)i.id=i.id??We(),i.text=i.text??o.text,i.item=Se(o.item,i.item),i.answer=Fe(o,i),n=(0,u.append)(n,i);else n=(0,u.append)(n,ae(o))}return n}function ae(e){return{id:We(),linkId:e.linkId,text:e.text,item:Se(e.item,void 0),answer:Fe(e)}}var kn=1;function We(){return"id-"+kn++}function Fe(e,t){if(!(e.type===w.display||e.type===w.group)){if(t?.answer&&t.answer.length>0)return t.answer;if(e.initial&&e.initial.length>0)return e.initial.map(n=>({...n}));if(e.answerOption)return e.answerOption.filter(n=>n.initialSelected).map(n=>({...n,initialSelected:void 0}))}}function Un(e){return(0,u.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:e},"value")}function ge(e){return(0,u.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:e},"value")}function De(e){return(0,u.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:e},"answer")}function Ve(e){return(0,u.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:e},"value")}function qn(e){let t=te(e.questionnaire),n=te(e.defaultValue),[,o]=(0,ue.useReducer)(R=>R+1,0),r=(0,ue.useRef)({activePage:0});if(!r.current.questionnaire&&t&&(r.current.questionnaire=t,r.current.pages=e.disablePagination?void 0:Nn(t)),t&&e.defaultValue&&n&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=se(t,n),y()),t&&!e.defaultValue&&!r.current.questionnaireResponse&&(r.current.questionnaireResponse=se(t),y()),!r.current.questionnaire||!r.current.questionnaireResponse)return{loading:!0};function i(R,c){let f=r.current.questionnaireResponse;for(let d of R)f=f?.item?.find(m=>d.id?m.id===d.id:m.linkId===d.linkId);return c&&(f=f?.item?.find(d=>d.linkId===c.linkId)),f}function s(){r.current.activePage=(r.current.activePage??0)+1,o()}function a(){r.current.activePage=(r.current.activePage??0)-1,o()}function l(R,c){let f=i(R);f&&(f.item??=[],f.item.push(ae(c)),y())}function x(R,c){let f=i(R,c);f&&(f.answer??=[],f.answer.push({}),y())}function v(R,c,f){let d=i(R,c);d&&(d.answer=f,y())}function P(R){let c=r.current.questionnaireResponse;c&&(R?(c.extension=c.extension??[],c.extension=c.extension.filter(f=>f.url!==G),c.extension.push({url:G,valueSignature:R})):c.extension=c.extension?.filter(f=>f.url!==G),y())}function I(){let R=r.current.questionnaire;if(R?.item){let c=r.current.questionnaireResponse;ie(R.item,c)}}function y(){let R=r.current.questionnaireResponse,c=r.current.questionnaire;!R||!c||(I(),o(),e.onChange?.(oe(c,R)))}return{loading:!1,pagination:!!r.current.pages,questionnaire:r.current.questionnaire,questionnaireResponse:oe(r.current.questionnaire,r.current.questionnaireResponse),subject:e.subject,encounter:e.encounter,activePage:r.current.activePage,pages:r.current.pages,items:Ln(r.current.questionnaire,r.current.pages,r.current.activePage),responseItems:Wn(r.current.questionnaireResponse,r.current.pages,r.current.activePage),onNextPage:s,onPrevPage:a,onAddGroup:l,onAddAnswer:x,onChangeAnswer:v,onChangeSignature:P}}function Nn(e){if(!(!e?.item||(0,$e.getExtension)(e?.item?.[0],Ie)?.valueCodeableConcept?.coding?.[0]?.code!=="page"))return e.item.map((n,o)=>({linkId:n.linkId,title:n.text??`Page ${o+1}`,group:n}))}function Ln(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}function Wn(e,t,n=0){return t&&e?.item?.[n]?[e.item[n]]:e.item??[]}var ce=require("@medplum/core"),A=require("react");async function Fn(e,t){let n=await t.search(e.resourceType,(0,ce.formatSearchQuery)({...e,total:e.total??"accurate"}),{cache:"no-cache"});return{items:n.entry?.map(r=>r.resource).filter(r=>r!==void 0)??[],total:n.total}}function Dn(e){let{search:t,selectedId:n,loadItems:o,reloadKey:r}=e,i=Q(),[s,a]=(0,A.useState)(t),[l,x]=(0,A.useState)([]),[v,P]=(0,A.useState)(),[I,y]=(0,A.useState)(!0),[R,c]=(0,A.useState)(),f=(0,A.useRef)(e),d=(0,A.useRef)(0),m=(0,A.useRef)(0),p=s.resourceType,g=n!==void 0&&R?.id===n?R.value:void 0;(0,ce.deepEquals)(t,s)||(a(t),y(!0));let E=(0,A.useCallback)(async()=>{let S=++d.current;try{let h=o?await o(s,i):await Fn(s,i);if(S!==d.current)return;x(h.items),P(h.total),f.current.onLoad?.(h.items,h.total),f.current.selectedId===void 0&&h.items.length>0&&f.current.onSelectFirst?.(h.items[0])}catch(h){S===d.current&&(f.current.onError??console.error)(h)}finally{S===d.current&&y(!1)}},[s,o,i]);return(0,A.useEffect)(()=>{f.current=e}),(0,A.useEffect)(()=>{E().catch(console.error)},[E,r]),(0,A.useEffect)(()=>{let S=++m.current;if(!n)return;let h=async()=>{let M=f.current.resolveSelected;if(M)return M(n,l,i);let C=l.find(K=>K.id===n);return C!==void 0?C:await i.readResource(p,n)};(async()=>{try{let M=await h();S===m.current&&c({id:n,value:M})}catch(M){S===m.current&&(c({id:n,value:void 0}),(f.current.onError??console.error)(M))}})().catch(console.error)},[n,l,i,p]),{items:l,total:v,loading:I,selected:g,search:s,refresh:E}}var de=require("@medplum/core"),B=require("react");var N=require("react");function Be(e,t,n={leading:!1}){let[o,r]=(0,N.useState)(e),i=(0,N.useRef)(!1),s=(0,N.useRef)(void 0),a=(0,N.useRef)(!1),l=(0,N.useCallback)(()=>window.clearTimeout(s.current),[]);return(0,N.useEffect)(()=>{i.current&&(!a.current&&n.leading?(a.current=!0,r(e),s.current=setTimeout(()=>{a.current=!1},t)):(l(),s.current=setTimeout(()=>{a.current=!1,r(e)},t)))},[e,n.leading,t,l]),(0,N.useEffect)(()=>(i.current=!0,l),[l]),[o,l]}var Vn=250;function $n(e,t,n){return xe("search",e,t,n)}function Bn(e,t,n){return xe("searchOne",e,t,n)}function Kn(e,t,n){return xe("searchResources",e,t,n)}function xe(e,t,n,o){let r=Q(),[i,s]=(0,B.useState)(!1),[a,l]=(0,B.useState)(),[x,v]=(0,B.useState)(),P=r.fhirSearchUrl(t,n).toString(),I=(0,B.useMemo)(()=>({resourceType:t,query:n}),[P]),y=o?.enabled??!0,R=o?.debounceMs??Vn,[c]=Be(I,R,{leading:!0});return(0,B.useEffect)(()=>{if(!y)return()=>{};s(!0);let f=!0;return r[e](c.resourceType,c.query).then(d=>{f&&(s(!1),l(d),v(de.allOk))}).catch(d=>{f&&(s(!1),l(void 0),v((0,de.normalizeOperationOutcome)(d)))}),()=>{f=!1}},[r,e,c,y]),[a,i,x]}var Ke=require("@medplum/core"),je=require("react");function jn(){let e=Q();return(0,je.useCallback)(async t=>{try{await e.post(e.fhirUrl("PlanDefinition","$sync-orderset"),{planDefinitionId:t})}catch(n){if(n instanceof Ke.OperationOutcomeError&&n.outcome.issue?.some(o=>o.code==="not-found"))return;throw n}},[e])}var ze=require("@medplum/core"),L=require("react");function zn({query:e,threadId:t}){let n=Q(),[o,r]=(0,L.useState)(!0),[i,s]=(0,L.useState)([]),[a,l]=(0,L.useState)(void 0),[x,v]=(0,L.useState)(null),[P,I]=(0,L.useState)(void 0),y=(0,L.useCallback)(async()=>{let f=new URLSearchParams(e);f.append("identifier:not","http://medplum.com/ai-message|"),f.append("part-of:missing","true"),f.append("_has:Communication:part-of:_id:not","null");let d=await n.search("Communication",f.toString(),{cache:"no-cache"}),m=d.entry?.map(h=>h.resource).filter(h=>h!==void 0)||[];if(d.total!==void 0&&I(d.total),m.length===0){s([]);return}let g=`
2
2
  query {
3
- ${l.map(h=>{let A=`thread_${h.id?.replaceAll("-","")||""}`,O=(0,Be.getReferenceString)(h);return`
4
- ${A}: CommunicationList(
5
- part_of: "${O}"
3
+ ${m.map(h=>{let M=`thread_${h.id?.replaceAll("-","")||""}`,C=(0,ze.getReferenceString)(h);return`
4
+ ${M}: CommunicationList(
5
+ part_of: "${C}"
6
6
  _sort: "-sent"
7
7
  _count: 1
8
8
  ) {
@@ -26,7 +26,7 @@
26
26
  `}).join(`
27
27
  `)}
28
28
  }
29
- `,v=await n.graphql(g),Q=l.map(h=>{let A=`thread_${h.id?.replaceAll("-","")||""}`,O=v.data[A],J=O&&O.length>0?O[0]:void 0;return[h,J]}).filter(h=>h[1]!==void 0);s(Q)},[n,e]);return(0,N.useEffect)(()=>{r(!0),y().catch(f=>{E(f)}).finally(()=>{r(!1)})},[y]),(0,N.useEffect)(()=>{(async()=>{if(!t){m(void 0);return}let d=i.find(p=>p[0].id===t);if(d){m(d[0]);return}let l=await n.readResource("Communication",t);if(l.partOf===void 0)m(l);else{let p=l.partOf[0].reference;if(p){let g=await n.readReference({reference:p});m(g)}}})().catch(d=>{E(d)})},[t,i,n]),{loading:o,error:x,threadMessages:i,selectedThread:u,total:P,addThreadMessage:f=>{(async()=>{await y(),s(l=>[[f,void 0],...l])})().catch(l=>E(l))},handleThreadStatusChange:f=>{if(!u)return;(async()=>{let l=await n.updateResource({...u,status:f});m(l),s(p=>p.map(([g,v])=>g.id===l.id?[l,v]:[g,v]))})().catch(l=>E(l))},refreshThreadMessages:y}}var ce=require("@medplum/core"),b=require("react");var Kn=12e4;function Bn({language:e="en",model:t="gpt-4o-transcribe",onTranscript:n,idleTimeoutMs:o=Kn}){let r=T(),i=(0,b.useRef)(n);(0,b.useEffect)(()=>{i.current=n},[n]);let[s,u]=(0,b.useState)("idle"),[m,x]=(0,b.useState)(void 0),[E,P]=(0,b.useState)([]),I=(0,b.useRef)(void 0),y=(0,b.useRef)(void 0),R=(0,b.useRef)(void 0),c=(0,b.useRef)(void 0),f=(0,b.useRef)(!1),d=(0,b.useRef)(!1),l=(0,b.useRef)(!1),p=(0,b.useCallback)(()=>{l.current=!1,c.current?.disconnect(),c.current=void 0,R.current?.close().catch(()=>{}),R.current=void 0,y.current?.getTracks().forEach(S=>S.stop()),y.current=void 0,u(I.current?"idle":"disconnected")},[]),g=(0,b.useCallback)(()=>{p(),I.current?.close(),I.current=void 0,d.current=!1,u("disconnected")},[p]),v=(0,b.useCallback)(()=>{I.current?.send(JSON.stringify({type:"session.update",session:{type:"transcription",audio:{input:{format:{type:"audio/pcm",rate:24e3},transcription:{model:t,language:e},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},noise_reduction:{type:"near_field"}}}}}))},[e,t]),Q=(0,b.useCallback)(async()=>{if(!(c.current||f.current)&&!(!y.current||!I.current)){f.current=!0;try{let S=new AudioContext({sampleRate:24e3});await S.audioWorklet.addModule(Jn());let _=y.current,L=I.current;if(!l.current||!_||!L){await S.close().catch(()=>{});return}let Ge=S.createMediaStreamSource(_),G=new AudioWorkletNode(S,ze);G.port.onmessage=He=>{if(L.readyState!==WebSocket.OPEN){console.warn("WebSocket is not open. Unable to send audio data.");return}let Xe=je(He.data),Ye=btoa(String.fromCharCode(...Xe));L.send(JSON.stringify({type:"input_audio_buffer.append",audio:Ye}))},Ge.connect(G),G.connect(S.destination),R.current=S,c.current=G,u("listening")}catch(S){x(S),u("error"),p()}finally{f.current=!1}}},[p]),h=(0,b.useCallback)(()=>{l.current&&d.current&&y.current&&(c.current||(I.current?.send(JSON.stringify({type:"input_audio_buffer.clear"})),Q().catch(()=>{})))},[Q]),q=(0,b.useCallback)(S=>{switch(S.type){case"session.created":v();break;case"session.updated":d.current=!0,h();break;case"input_audio_buffer.speech_started":u("speech_started");break;case"input_audio_buffer.speech_stopped":u("speech_stopped");break;case"conversation.item.input_audio_transcription.completed":case"input_audio_transcription.completed":if(S.transcript){let _={text:S.transcript,timestamp:new Date().toISOString()};P(L=>[...L,_]),i.current?.(S.transcript)}break;case"ai-realtime:connected":console.debug("[useWhisper] upstream connected");break;case"ai-realtime:error":case"error":console.error("[useWhisper] error event",S),x(S),u("error");break;default:console.debug("[useWhisper] unhandled message",S.type,S);break}},[v,h]),A=(0,b.useCallback)(async()=>{u("requesting_microphone");let S=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:24e3,channelCount:1,echoCancellation:!0,noiseSuppression:!0}});return y.current=S,S},[]),O=(0,b.useCallback)(()=>{u("connecting");let S=jn(r.getBaseUrl());console.debug("[useWhisper] connecting to",S);let _=new ce.ReconnectingWebSocket(S);return I.current=_,_.onopen=()=>{d.current=!1,l.current?u("connected"):u("idle"),_.send(JSON.stringify({type:"ai-realtime:connect",accessToken:r.getAccessToken()}))},_.onmessage=L=>q(JSON.parse(L.data)),_.onerror=L=>{l.current&&(x(L),g(),u("error"))},_.onclose=()=>{d.current=!1,I.current&&u(l.current?"connecting":"idle")},_},[r,q,g]),J=(0,b.useCallback)(()=>I.current??O(),[O]),Je=(0,b.useCallback)(async()=>{try{x(void 0),l.current=!0,J(),await A(),h()}catch(S){x(S),u("error"),p()}},[A,J,p,h]);return(0,b.useEffect)(()=>{if(s!=="idle"||!I.current||!Number.isFinite(o)||o<=0)return;let S=new AbortController;return(0,ce.sleep)(o,{signal:S.signal}).then(()=>g()).catch(()=>{}),()=>S.abort()},[s,o,g]),(0,b.useEffect)(()=>()=>g(),[g]),{status:s,error:m,transcripts:E,start:Je,stop:p,isListening:s==="listening"||s==="speech_started"||s==="speech_stopped"}}function je(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++){let o=Math.max(-1,Math.min(1,e[n]));t[n]=o*32767}return new Uint8Array(t.buffer)}function jn(e){let t=new URL("ws/ai-realtime",e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}var ze="medplum-pcm-worklet",zn=`
29
+ `,E=await n.graphql(g),S=m.map(h=>{let M=`thread_${h.id?.replaceAll("-","")||""}`,C=E.data[M],K=C&&C.length>0?C[0]:void 0;return[h,K]}).filter(h=>h[1]!==void 0);s(S)},[n,e]);return(0,L.useEffect)(()=>{r(!0),y().catch(f=>{v(f)}).finally(()=>{r(!1)})},[y]),(0,L.useEffect)(()=>{(async()=>{if(!t){l(void 0);return}let d=i.find(p=>p[0].id===t);if(d){l(d[0]);return}let m=await n.readResource("Communication",t);if(m.partOf===void 0)l(m);else{let p=m.partOf[0].reference;if(p){let g=await n.readReference({reference:p});l(g)}}})().catch(d=>{v(d)})},[t,i,n]),{loading:o,error:x,threadMessages:i,selectedThread:a,total:P,addThreadMessage:f=>{(async()=>{await y(),s(m=>[[f,void 0],...m])})().catch(m=>v(m))},handleThreadStatusChange:f=>{if(!a)return;(async()=>{let m=await n.updateResource({...a,status:f});l(m),s(p=>p.map(([g,E])=>g.id===m.id?[m,E]:[g,E]))})().catch(m=>v(m))},refreshThreadMessages:y}}var pe=require("@medplum/core"),T=require("react");var Jn=12e4;function Gn({language:e="en",model:t="gpt-4o-transcribe",onTranscript:n,idleTimeoutMs:o=Jn}){let r=Q(),i=(0,T.useRef)(n);(0,T.useEffect)(()=>{i.current=n},[n]);let[s,a]=(0,T.useState)("idle"),[l,x]=(0,T.useState)(void 0),[v,P]=(0,T.useState)([]),I=(0,T.useRef)(void 0),y=(0,T.useRef)(void 0),R=(0,T.useRef)(void 0),c=(0,T.useRef)(void 0),f=(0,T.useRef)(!1),d=(0,T.useRef)(!1),m=(0,T.useRef)(!1),p=(0,T.useCallback)(()=>{m.current=!1,c.current?.disconnect(),c.current=void 0,R.current?.close().catch(()=>{}),R.current=void 0,y.current?.getTracks().forEach(b=>b.stop()),y.current=void 0,a(I.current?"idle":"disconnected")},[]),g=(0,T.useCallback)(()=>{p(),I.current?.close(),I.current=void 0,d.current=!1,a("disconnected")},[p]),E=(0,T.useCallback)(()=>{I.current?.send(JSON.stringify({type:"session.update",session:{type:"transcription",audio:{input:{format:{type:"audio/pcm",rate:24e3},transcription:{model:t,language:e},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},noise_reduction:{type:"near_field"}}}}}))},[e,t]),S=(0,T.useCallback)(async()=>{if(!(c.current||f.current)&&!(!y.current||!I.current)){f.current=!0;try{let b=new AudioContext({sampleRate:24e3});await b.audioWorklet.addModule(Yn());let k=y.current,W=I.current;if(!m.current||!k||!W){await b.close().catch(()=>{});return}let Xe=b.createMediaStreamSource(k),H=new AudioWorkletNode(b,Ge);H.port.onmessage=Ye=>{if(W.readyState!==WebSocket.OPEN){console.warn("WebSocket is not open. Unable to send audio data.");return}let Ze=Je(Ye.data),en=btoa(String.fromCharCode(...Ze));W.send(JSON.stringify({type:"input_audio_buffer.append",audio:en}))},Xe.connect(H),H.connect(b.destination),R.current=b,c.current=H,a("listening")}catch(b){x(b),a("error"),p()}finally{f.current=!1}}},[p]),h=(0,T.useCallback)(()=>{m.current&&d.current&&y.current&&(c.current||(I.current?.send(JSON.stringify({type:"input_audio_buffer.clear"})),S().catch(()=>{})))},[S]),q=(0,T.useCallback)(b=>{switch(b.type){case"session.created":E();break;case"session.updated":d.current=!0,h();break;case"input_audio_buffer.speech_started":a("speech_started");break;case"input_audio_buffer.speech_stopped":a("speech_stopped");break;case"conversation.item.input_audio_transcription.completed":case"input_audio_transcription.completed":if(b.transcript){let k={text:b.transcript,timestamp:new Date().toISOString()};P(W=>[...W,k]),i.current?.(b.transcript)}break;case"ai-realtime:connected":console.debug("[useWhisper] upstream connected");break;case"ai-realtime:error":case"error":console.error("[useWhisper] error event",b),x(b),a("error");break;default:console.debug("[useWhisper] unhandled message",b.type,b);break}},[E,h]),M=(0,T.useCallback)(async()=>{a("requesting_microphone");let b=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:24e3,channelCount:1,echoCancellation:!0,noiseSuppression:!0}});return y.current=b,b},[]),C=(0,T.useCallback)(()=>{a("connecting");let b=Hn(r.getBaseUrl());console.debug("[useWhisper] connecting to",b);let k=new pe.ReconnectingWebSocket(b);return I.current=k,k.onopen=()=>{d.current=!1,m.current?a("connected"):a("idle"),k.send(JSON.stringify({type:"ai-realtime:connect",accessToken:r.getAccessToken()}))},k.onmessage=W=>q(JSON.parse(W.data)),k.onerror=W=>{m.current&&(x(W),g(),a("error"))},k.onclose=()=>{d.current=!1,I.current&&a(m.current?"connecting":"idle")},k},[r,q,g]),K=(0,T.useCallback)(()=>I.current??C(),[C]),He=(0,T.useCallback)(async()=>{try{x(void 0),m.current=!0,K(),await M(),h()}catch(b){x(b),a("error"),p()}},[M,K,p,h]);return(0,T.useEffect)(()=>{if(s!=="idle"||!I.current||!Number.isFinite(o)||o<=0)return;let b=new AbortController;return(0,pe.sleep)(o,{signal:b.signal}).then(()=>g()).catch(()=>{}),()=>b.abort()},[s,o,g]),(0,T.useEffect)(()=>()=>g(),[g]),{status:s,error:l,transcripts:v,start:He,stop:p,isListening:s==="listening"||s==="speech_started"||s==="speech_stopped"}}function Je(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++){let o=Math.max(-1,Math.min(1,e[n]));t[n]=o*32767}return new Uint8Array(t.buffer)}function Hn(e){let t=new URL("ws/ai-realtime",e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.toString()}var Ge="medplum-pcm-worklet",Xn=`
30
30
  class PcmWorkletProcessor extends AudioWorkletProcessor {
31
31
  constructor() {
32
32
  super();
@@ -58,6 +58,6 @@ class PcmWorkletProcessor extends AudioWorkletProcessor {
58
58
  }
59
59
  }
60
60
 
61
- registerProcessor('${ze}', PcmWorkletProcessor);
62
- `,Se;function Jn(){if(!Se){let e=new Blob([zn],{type:"application/javascript"});Se=URL.createObjectURL(e)}return Se}
61
+ registerProcessor('${Ge}', PcmWorkletProcessor);
62
+ `,be;function Yn(){if(!be){let e=new Blob([Xn],{type:"application/javascript"});be=URL.createObjectURL(e)}return be}
63
63
  //# sourceMappingURL=index.cjs.map