@medplum/react-hooks 5.1.13 → 5.1.14

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