@medplum/react 2.1.7 → 2.1.8

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.
@@ -61,8 +61,8 @@ import{formatAddress as Ys}from"@medplum/core";import un from"react";function dn
61
61
  display
62
62
  }
63
63
  }
64
- }`.replace(/\s+/g," ")}function Yi(e,o){let t=[];return e.data.Patients1&&t.push(...e.data.Patients1),e.data.Patients2&&t.push(...e.data.Patients2),e.data.ServiceRequestList&&t.push(...e.data.ServiceRequestList),ou(eu(t),o).slice(0,5)}function eu(e){let o=new Set,t=[];for(let r of e)o.has(r.id)||(o.add(r.id),t.push(r));return t}function ou(e,o){return e.sort((t,r)=>On(r,o)-On(t,o))}function On(e,o){let t=0;if(e.identifier)for(let r of e.identifier)t=Math.max(t,En(r.value,o));if(e.resourceType==="Patient"&&e.name)for(let r of e.name)t=Math.max(t,En(zi(r),o));return t}function En(e,o){if(!e)return 0;let t=e.toLowerCase().indexOf(o.toLowerCase());return t<0?0:100-t}var su=ru(e=>({logoButton:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},user:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},userName:{fontWeight:500,lineHeight:1,marginRight:3,[e.fn.smallerThan("xs")]:{display:"none"}},userActive:{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}}));function Vn(e){let o=Qo(),{medplum:t,profile:r,navigate:a}=o,n=t.getLogins(),{classes:f,cx:s}=su(),[l,i]=lu(!1);return U.createElement(au,{height:60,p:8,style:{zIndex:101}},U.createElement(Ct,{position:"apart"},U.createElement(Ct,{spacing:"xs"},U.createElement(Nn,{className:f.logoButton,onClick:e.navbarToggle},e.logo),!e.headerSearchDisabled&&U.createElement(Rn,{pathname:e.pathname,searchParams:e.searchParams})),U.createElement(He,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:l,onClose:()=>i(!1)},U.createElement(He.Target,null,U.createElement(Nn,{className:s(f.user,{[f.userActive]:l}),onClick:()=>i(u=>!u)},U.createElement(Ct,{spacing:7},U.createElement(ge,{value:r,radius:"xl",size:24}),U.createElement($o,{size:"sm",className:f.userName},fu(r?.name?.[0])),U.createElement(Ar,{size:12,stroke:1.5})))),U.createElement(He.Dropdown,null,U.createElement(nu,{align:"center",p:"xl"},U.createElement(ge,{size:"xl",radius:100,value:o.profile}),U.createElement(gt,{value:o.profile?.name?.[0]}),U.createElement($o,{color:"dimmed",size:"xs"},t.getActiveLogin()?.project.display)),n.length>1&&U.createElement(He.Divider,null),n.map(u=>u.profile.reference!==Hn(o.profile)&&U.createElement(He.Item,{key:u.profile.reference,onClick:()=>{t.setActiveLogin(u).then(()=>window.location.reload()).catch(console.log)}},U.createElement(Ct,null,U.createElement(tu,{radius:"xl"}),U.createElement("div",{style:{flex:1}},U.createElement($o,{size:"sm",weight:500},u.profile.display),U.createElement($o,{color:"dimmed",size:"xs"},u.project.display))))),U.createElement(He.Divider,null),U.createElement(He.Item,{icon:U.createElement(Jr,{size:14,stroke:1.5}),onClick:()=>a("/signin")},"Add another account"),U.createElement(He.Item,{icon:U.createElement(go,{size:14,stroke:1.5}),onClick:()=>a(`/${Hn(r)}`)},"Account settings"),U.createElement(He.Item,{icon:U.createElement(Vr,{size:14,stroke:1.5}),onClick:async()=>{await t.signOut(),a("/signin")}},"Sign out"),U.createElement($o,{size:"xs",color:"dimmed",align:"center"},e.version)))))}import{Button as Ou,createStyles as Eu,Navbar as ea,ScrollArea as Lu,Space as Ru,Text as Nu}from"@mantine/core";import le,{useState as Hu}from"react";import{Button as cu,Group as mu,Modal as pu,NativeSelect as xu,Stack as Iu,TextInput as gu}from"@mantine/core";import{showNotification as Gn}from"@mantine/notifications";import{deepClone as hu,normalizeErrorString as Cu}from"@medplum/core";import Je from"react";import du from"react";function qn(e){let o={};for(let t of Array.from(e.elements))t instanceof HTMLInputElement?iu(o,t):t instanceof HTMLTextAreaElement?o[t.name]=t.value:t instanceof HTMLSelectElement&&uu(o,t);return o}function iu(e,o){o.disabled||(o.type==="checkbox"||o.type==="radio")&&!o.checked||(e[o.name]=o.value)}function uu(e,o){e[o.name]=o.value}function K(e){return du.createElement("form",{style:e.style,"data-testid":e.testid,onSubmit:o=>{o.preventDefault();let t=qn(o.target);e.onSubmit&&e.onSubmit(t)}},e.children)}function Un(e){let o=v(),t=o.getUserConfiguration();function r(a){let{menuname:n,bookmarkname:f}=a,s=`${e.pathname}?${e.searchParams.toString()}`,l=hu(t);l.menu?.find(({title:u})=>u===n)?.link?.push({name:f,target:s}),o.updateResource(l).then(u=>{t.menu=u.menu,o.dispatchEvent({type:"change"}),Gn({color:"green",message:"Success"}),e.onOk()}).catch(u=>{Gn({color:"red",message:Cu(u)})})}return Je.createElement(pu,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},Je.createElement(K,{onSubmit:r},Je.createElement(Iu,null,Je.createElement(yu,{config:t}),Je.createElement(gu,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),Je.createElement(mu,{position:"right"},Je.createElement(cu,{mt:"sm",type:"submit"},"OK")))))}function yu(e){function o(r){return r?.menu?.map(a=>a.title)}let t=o(e.config);return Je.createElement(xu,{name:"menuname",defaultValue:t[0],label:"Select Menu Option",placeholder:"Menu",data:t,withAsterisk:!0})}import Fu,{useCallback as Mu,useState as wu}from"react";import Du,{useState as ku}from"react";import vu,{useCallback as Su}from"react";function Yr(e){return typeof e.code=="string"?e.code:JSON.stringify(e)}function bu(e){return typeof e.display=="string"?e.display:Yr(e)}function Pu(e){return{value:Yr(e),label:bu(e),resource:e}}function Tu(e){return{code:e,display:e}}function bo(e){let o=v(),{binding:t,creatable:r,clearable:a,...n}=e,f=Su(async(s,l)=>{if(!t)return[];let u=(await o.searchValueSet(t,s,{signal:l})).expansion?.contains,d=[];for(let c of u)c.code&&!d.some(x=>x.code===c.code)&&d.push(c);return d},[o,t]);return vu.createElement(So,{...n,creatable:r??!0,clearable:a??!0,toKey:Yr,toOption:Pu,loadOptions:f,onCreate:Tu,getCreateLabel:r===!1?void 0:s=>`+ Create ${s}`})}function yt(e){let[o,t]=ku(e.defaultValue);function r(a){let n=a[0],f=Au(n);t(f),e.onChange&&e.onChange(f)}return Du.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:Bu(o),onChange:r,creatable:e.creatable,maxSelectedValues:e.maxSelectedValues??1,clearSearchOnChange:e.clearSearchOnChange,clearable:e.clearable})}function Bu(e){return e?{code:e}:void 0}function Au(e){return e?.code}function Po(e){let[o,t]=wu(e.defaultValue),r=e.onChange,a=Mu(n=>{t(n),r&&r(n)},[r]);return Fu.createElement(yt,{"data-autofocus":e.autoFocus,"data-testid":e.testId,defaultValue:o,onChange:a,name:e.name,placeholder:e.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxSelectedValues:0,clearSearchOnChange:!0,clearable:!1})}var Qn=Eu(e=>({menuTitle:{margin:"20px 0 4px 6px",fontSize:"9px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"2px"},link:{...e.fn.focusStyles(),display:"flex",alignItems:"center",textDecoration:"none",fontSize:e.fontSizes.sm,color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7],padding:"8px 12px",borderRadius:e.radius.sm,fontWeight:500,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],color:e.colorScheme==="dark"?e.white:e.black,textDecoration:"none","& svg":{color:e.colorScheme==="dark"?e.white:e.black}},"& svg":{color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],marginRight:e.spacing.sm,strokeWidth:1.5,width:18,height:18}},linkActive:{"&, &:hover":{backgroundColor:e.fn.variant({variant:"light",color:e.primaryColor}).background,color:e.fn.variant({variant:"light",color:e.primaryColor}).color,"& svg":{color:e.fn.variant({variant:"light",color:e.primaryColor}).color}}}}));function zn(e){let{classes:o}=Qn(),t=ze(),r=Gu(e.pathname,e.searchParams,e.menus),[a,n]=Hu(!1);function f(l,i){l.stopPropagation(),l.preventDefault(),t(i),window.innerWidth<768&&e.closeNavbar()}function s(l){l&&t(`/${l}`)}return le.createElement(le.Fragment,null,le.createElement(ea,{width:{sm:250},p:"xs"},le.createElement(Lu,null,!e.resourceTypeSearchDisabled&&le.createElement(ea.Section,{mb:"sm"},le.createElement(Po,{key:window.location.pathname,name:"resourceType",placeholder:"Resource Type",onChange:l=>s(l)})),le.createElement(ea.Section,{grow:!0},e.menus?.map(l=>le.createElement(le.Fragment,{key:`menu-${l.title}`},le.createElement(Nu,{className:o.menuTitle},l.title),l.links?.map(i=>le.createElement(Vu,{key:i.href,to:i.href,active:i.href===r?.href,onClick:u=>f(u,i.href)},le.createElement(qu,{to:i.href,icon:i.icon}),le.createElement("span",null,i.label))))),e.displayAddBookmark&&le.createElement(Ou,{variant:"subtle",size:"xs",mt:"xl",leftIcon:le.createElement(Qr,{size:"0.75rem"}),onClick:()=>n(!0)},"Add Bookmark")))),e.pathname&&e.searchParams&&le.createElement(Un,{pathname:e.pathname,searchParams:e.searchParams,visible:a,onOk:()=>n(!1),onCancel:()=>n(!1)}))}function Vu(e){let{classes:o,cx:t}=Qn();return le.createElement(se,{onClick:e.onClick,to:e.to,className:t(o.link,{[o.linkActive]:e.active})},e.children)}function qu(e){return e.icon?e.icon:le.createElement(Ru,{w:30})}function Gu(e,o,t){if(!e||!o||!t)return;let r,a=0;for(let n of t)if(n.links)for(let f of n.links){let s=Uu(e,o,f.href);s>a&&(a=s,r=f)}return r}function Uu(e,o,t){let r=new URL(t,"https://example.com");if(e!==r.pathname)return 0;let a=["_count","_offset"];for(let[f,s]of r.searchParams.entries())if(!a.includes(f)&&o.get(f)!==s)return 0;let n=1;for(let[f,s]of o.entries())a.includes(f)||r.searchParams.get(f)===s&&n++;return n}function wb(e){let o=zu(),[t,r]=Xu(localStorage.navbarOpen==="true"),a=v(),n=mt();function f(i){localStorage.navbarOpen=i.toString(),r(i)}function s(){f(!1)}function l(){f(!t)}return a.isLoading()?ao.createElement(_r,null):ao.createElement(Qu,{styles:{main:{background:o.colorScheme==="dark"?o.colors.dark[8]:o.colors.gray[0]}},padding:0,fixed:!0,header:n&&ao.createElement(Vn,{pathname:e.pathname,searchParams:e.searchParams,headerSearchDisabled:e.headerSearchDisabled,logo:e.logo,version:e.version,navbarToggle:l}),navbar:n&&t?ao.createElement(zn,{pathname:e.pathname,searchParams:e.searchParams,menus:e.menus,closeNavbar:s,displayAddBookmark:e.displayAddBookmark,resourceTypeSearchDisabled:e.resourceTypeSearchDisabled}):void 0},ao.createElement(ho,{key:`${e.pathname}?${e.searchParams?.toString()}`},ao.createElement(Wu,{fallback:ao.createElement(_r,null)},e.children)))}import oa from"react";import{Anchor as Ju}from"@mantine/core";import Ke from"react";function Oe(e){let o=e.value,{contentType:t,url:r,title:a}=o??{};return r?Ke.createElement("div",{"data-testid":"attachment-display"},t?.startsWith("image/")&&Ke.createElement("img",{"data-testid":"attachment-image",style:{maxWidth:e.maxWidth},src:r,alt:o?.title}),t?.startsWith("video/")&&Ke.createElement("video",{"data-testid":"attachment-video",style:{maxWidth:e.maxWidth},controls:!0},Ke.createElement("source",{type:t,src:r})),t==="application/pdf"&&!a?.endsWith(".pdf")&&Ke.createElement("div",{"data-testid":"attachment-pdf",style:{maxWidth:e.maxWidth,minHeight:400}},Ke.createElement("iframe",{width:"100%",height:"400",src:r+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})),Ke.createElement("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"}},Ke.createElement(Ju,{href:o?.url,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer"},o?.title||"Download"))):null}function Wn(e){return oa.createElement("div",null,e.values?.map((o,t)=>oa.createElement("div",{key:"attatchment-"+t},oa.createElement(Oe,{value:o,maxWidth:e.maxWidth}))))}import{ActionIcon as Xn}from"@mantine/core";import ie,{useRef as $u,useState as ju}from"react";import ta,{useRef as Ku}from"react";function To(e){let o=v(),t=Ku(null);function r(f){H(f),t.current?.click()}function a(f){H(f);let s=f.target.files;s&&Array.from(s).forEach(n)}function n(f){if(!f||!f.name)return;e.onUploadStart&&e.onUploadStart();let l=f.name,i=f.type||"application/octet-stream";o.createBinary(f,l,i,e.onUploadProgress).then(u=>{e.onUpload({contentType:u.contentType,url:u.url,title:l})}).catch(u=>{alert(u.issue?.[0]?.details?.text)})}return ta.createElement(ta.Fragment,null,ta.createElement("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:t,onChange:f=>a(f)}),e.children({onClick:r}))}function Jn(e){let[o,t]=ju(e.defaultValue??[]),r=$u();r.current=o;function a(n){t(n),e.onChange&&e.onChange(n)}return ie.createElement("table",{style:{width:"100%"}},ie.createElement("colgroup",null,ie.createElement("col",{width:"97%"}),ie.createElement("col",{width:"3%"})),ie.createElement("tbody",null,o.map((n,f)=>ie.createElement("tr",{key:`${f}-${o.length}`},ie.createElement("td",null,ie.createElement(Oe,{value:n,maxWidth:200})),ie.createElement("td",null,ie.createElement(Xn,{title:"Remove",size:"sm",onClick:s=>{H(s);let l=o.slice();l.splice(f,1),a(l)}},ie.createElement(We,null))))),ie.createElement("tr",null,ie.createElement("td",null),ie.createElement("td",null,ie.createElement(To,{onUpload:n=>{a([...r.current,n])}},n=>ie.createElement(Xn,{...n,title:"Add",size:"sm",color:"green"},ie.createElement(Wo,{size:16})))))))}import{Button as Kn}from"@mantine/core";import Do,{useState as _u}from"react";function vt(e){let[o,t]=_u(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return o?Do.createElement(Do.Fragment,null,Do.createElement(Oe,{value:o,maxWidth:200}),Do.createElement(Kn,{onClick:a=>{H(a),r(void 0)}},"Remove")):Do.createElement(To,{onUpload:r},a=>Do.createElement(Kn,{...a},"Upload..."))}import{normalizeOperationOutcome as Fd}from"@medplum/core";import At,{useEffect as Md,useState as af}from"react";import $n from"react";import{Container as Zu,createStyles as Yu}from"@mantine/core";import ed from"react";var od=Yu(()=>({root:{"@media (max-width: 800px)":{paddingLeft:4,paddingRight:4}}}));function $e(e){let{children:o,...t}=e,{classes:r}=od();return ed.createElement(Zu,{className:r.root,...t},o)}import{createStyles as td,Paper as rd,useComponentDefaultProps as ad}from"@mantine/core";import nd from"react";var fd=td((e,{width:o,fill:t})=>({paper:{maxWidth:o,margin:`${e.spacing.xl} auto`,padding:t?0:e.spacing.md,"@media (max-width: 800px)":{padding:t?0:8},"& img":{width:"100%",maxWidth:"100%"},"& video":{width:"100%",maxWidth:"100%"}}})),ld={shadow:"xs",radius:"md",withBorder:!0};function ko(e){let{className:o,children:t,width:r,fill:a,unstyled:n,...f}=ad("Panel",ld,e),{classes:s,cx:l}=fd({width:r,fill:a},{name:"Panel",unstyled:n});return nd.createElement(rd,{className:l(s.paper,o),...f},t)}function St(e){let{children:o,...t}=e;return $n.createElement($e,null,$n.createElement(ko,{...t},o))}import{Anchor as _n,Button as sd,Center as id,Group as ud,Stack as dd,Text as cd,TextInput as md,Title as pd}from"@mantine/core";import{normalizeOperationOutcome as xd}from"@medplum/core";import Be,{useState as Id}from"react";import no from"react";function je(e){return no.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:e.size,height:e.size}},no.createElement("title",null,"Medplum Logo"),no.createElement("path",{fill:e.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),no.createElement("path",{fill:e.fill??"#946af9",d:"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z"}),no.createElement("path",{fill:e.fill??"#7857c5",d:"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z"}),no.createElement("path",{fill:e.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),no.createElement("path",{fill:e.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"}))}function me(e,o){return e?.issue?.filter(t=>jn(t.expression?.[0],o))?.map(t=>t.details?.text)?.join(`
65
- `)}function bt(e,o){return e?.issue?.filter(t=>jn(t.expression?.[0],o))}function jn(e,o){if(e===o)return!0;if(!e||!o)return!1;let t=e.indexOf(".");if(t>=0&&e.substring(t+1)===o)return!0;let r=o.indexOf(".");return r>=0&&o.substring(r+1)===e}function Pt(e){let o=v(),[t,r]=Id();return Be.createElement(K,{style:{maxWidth:400},onSubmit:async a=>{try{e.handleAuthResponse(await o.startNewProject({login:e.login,projectName:a.projectName}))}catch(n){r(xd(n))}}},Be.createElement(id,{sx:{flexDirection:"column"}},Be.createElement(je,{size:32}),Be.createElement(pd,null,"Create project")),Be.createElement(dd,{spacing:"xl"},Be.createElement(md,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:me(t,"firstName")}),Be.createElement(cd,{color:"dimmed",size:"xs"},"By clicking submit you agree to the Medplum"," ",Be.createElement(_n,{href:"https://www.medplum.com/privacy"},"Privacy\xA0Policy")," and ",Be.createElement(_n,{href:"https://www.medplum.com/terms"},"Terms\xA0of\xA0Service"),".")),Be.createElement(ud,{position:"right",mt:"xl",noWrap:!0},Be.createElement(sd,{type:"submit"},"Create project")))}import{Anchor as Bt,Button as Sd,Center as bd,Checkbox as Pd,Divider as Td,Group as ef,PasswordInput as Dd,Stack as kd,Text as of,TextInput as na}from"@mantine/core";import{normalizeOperationOutcome as tf}from"@medplum/core";import _,{useEffect as Bd,useState as Ad}from"react";import gd,{useEffect as hd,useRef as Cd,useState as ra}from"react";function Tt(e,o){let t=document.getElementsByTagName("head")[0],r=document.createElement("script");r.async=!0,r.src=e,r.onload=o??null,t.appendChild(r)}function Dt(e){let o=v(),{googleClientId:t,handleGoogleCredential:r}=e,a=Cd(null),[n,f]=ra(typeof google<"u"),[s,l]=ra(!1),[i,u]=ra(!1);return hd(()=>{if(typeof google>"u"){Tt("https://accounts.google.com/gsi/client",()=>f(!0));return}s||(google.accounts.id.initialize({client_id:t,callback:r}),l(!0)),a.current&&!i&&(google.accounts.id.renderButton(a.current,{}),u(!0))},[o,t,s,n,a,i,r]),t?gd.createElement("div",{ref:a}):null}function kt(e){if(e)return e;if(typeof window<"u"){let o=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(o))return"__GOOGLE_CLIENT_ID__"}}import{Alert as yd}from"@mantine/core";import{operationOutcomeIssueToString as vd}from"@medplum/core";import aa from"react";function Bo(e){let o=e.outcome?.issue||e.issues;return!o||o.length===0?null:aa.createElement(yd,{icon:aa.createElement(ro,{size:16}),color:"red"},o.map(t=>aa.createElement("div",{"data-testid":"text-field-error",key:t.details?.text},vd(t))))}function Zn(e){typeof grecaptcha>"u"&&Tt("https://www.google.com/recaptcha/api.js?render="+e)}function Yn(e){return new Promise((o,t)=>{grecaptcha.ready(async()=>{try{o(await grecaptcha.execute(e,{action:"submit"}))}catch(r){t(r)}})})}function rf(e){let o=kt(e.googleClientId),t=e.recaptchaSiteKey,r=v(),[a,n]=Ad(),f=bt(a,void 0);return Bd(()=>{t&&Zn(t)},[t]),_.createElement(K,{style:{maxWidth:400},onSubmit:async s=>{try{let l="";t&&(l=await Yn(t)),e.handleAuthResponse(await r.startNewUser({projectId:e.projectId,clientId:e.clientId,firstName:s.firstName,lastName:s.lastName,email:s.email,password:s.password,remember:s.remember==="true",recaptchaSiteKey:t,recaptchaToken:l}))}catch(l){n(tf(l))}}},_.createElement(bd,{sx:{flexDirection:"column"}},e.children),_.createElement(Bo,{issues:f}),o&&_.createElement(_.Fragment,null,_.createElement(ef,{position:"center",p:"xl",style:{height:70}},_.createElement(Dt,{googleClientId:o,handleGoogleCredential:async s=>{try{e.handleAuthResponse(await r.startGoogleLogin({googleClientId:s.clientId,googleCredential:s.credential,createUser:!0}))}catch(l){n(tf(l))}}})),_.createElement(Td,{label:"or",labelPosition:"center",my:"lg"})),_.createElement(kd,{spacing:"xl"},_.createElement(na,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:me(a,"firstName")}),_.createElement(na,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:me(a,"lastName")}),_.createElement(na,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:me(a,"email")}),_.createElement(Dd,{name:"password",label:"Password",autoComplete:"off",required:!0,error:me(a,"password")}),_.createElement(of,{color:"dimmed",size:"xs"},"By clicking submit you agree to the Medplum"," ",_.createElement(Bt,{href:"https://www.medplum.com/privacy"},"Privacy\xA0Policy")," and ",_.createElement(Bt,{href:"https://www.medplum.com/terms"},"Terms\xA0of\xA0Service"),"."),_.createElement(of,{color:"dimmed",size:"xs"},"This site is protected by reCAPTCHA and the Google"," ",_.createElement(Bt,{href:"https://policies.google.com/privacy"},"Privacy\xA0Policy")," and ",_.createElement(Bt,{href:"https://policies.google.com/terms"},"Terms\xA0of\xA0Service")," apply.")),_.createElement(ef,{position:"apart",mt:"xl",noWrap:!0},_.createElement(Pd,{name:"remember",label:"Remember me",size:"xs"}),_.createElement(Sd,{type:"submit"},"Create account")))}function lT(e){let{type:o,projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,onSuccess:f}=e,s=v(),[l,i]=af(),[u,d]=af();Md(()=>{o==="patient"&&l&&s.startNewPatient({login:l,projectId:t}).then(x=>s.processCode(x.code)).then(()=>f()).catch(x=>d(Fd(x)))},[s,o,t,l,f]);function c(x){x.code?s.processCode(x.code).then(()=>f()).catch(console.log):x.login&&i(x.login)}return At.createElement(St,{width:450},u&&At.createElement("pre",null,JSON.stringify(u,null,2)),!l&&At.createElement(rf,{projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,handleAuthResponse:c},e.children),l&&o==="project"&&At.createElement(Pt,{login:l,handleAuthResponse:c}))}import{showNotification as gf}from"@mantine/notifications";import{normalizeErrorString as hf}from"@medplum/core";import fo,{useCallback as la,useEffect as lc,useState as sa}from"react";import{Anchor as nf,Button as ff,Center as lf,Checkbox as wd,Divider as Od,Group as fa,PasswordInput as Ed,Stack as Ld,TextInput as Rd}from"@mantine/core";import{normalizeOperationOutcome as Nd}from"@medplum/core";import $,{useCallback as Ft,useState as sf}from"react";function uf(e){let[o,t]=sf();return o?$.createElement(Vd,{email:o,...e}):$.createElement(Hd,{setEmail:t,...e})}function Hd(e){let{setEmail:o,onRegister:t,handleAuthResponse:r,children:a,disableEmailAuth:n,...f}=e,s=v(),l=!e.disableGoogleAuth&&kt(e.googleClientId),i=Ft(async c=>{if(!c.authorizeUrl)return!1;let x=JSON.stringify({...await s.ensureCodeChallenge(f),domain:c.domain}),y=new URL(c.authorizeUrl);return y.searchParams.set("state",x),window.location.assign(y.toString()),!0},[s,f]),u=Ft(async c=>{let x=await s.post("auth/method",{email:c.email});await i(x)||o(c.email)},[s,i,o]),d=Ft(async c=>{let x=await s.startGoogleLogin({...f,googleCredential:c.credential});await i(x)||r(x)},[s,f,i,r]);return $.createElement(K,{style:{maxWidth:400},onSubmit:u},$.createElement(lf,{sx:{flexDirection:"column"}},a),l&&$.createElement($.Fragment,null,$.createElement(fa,{position:"center",p:"xl",style:{height:70}},$.createElement(Dt,{googleClientId:l,handleGoogleCredential:d})),!n&&$.createElement(Od,{label:"or",labelPosition:"center",my:"lg"})),!n&&$.createElement(Rd,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0}),$.createElement(fa,{position:"apart",mt:"xl",spacing:0,noWrap:!0},$.createElement("div",null,t&&$.createElement(nf,{component:"button",type:"button",color:"dimmed",onClick:t,size:"xs"},"Register")),!n&&$.createElement(ff,{type:"submit"},"Next")))}function Vd(e){let{onForgotPassword:o,handleAuthResponse:t,children:r,...a}=e,n=v(),[f,s]=sf(),l=bt(f,void 0),i=Ft(u=>{n.startLogin({...a,password:u.password,remember:u.remember==="on"}).then(t).catch(d=>s(Nd(d)))},[n,a,t]);return $.createElement(K,{style:{maxWidth:400},onSubmit:i},$.createElement(lf,{sx:{flexDirection:"column"}},r),$.createElement(Bo,{issues:l}),$.createElement(Ld,{spacing:"xl"},$.createElement(Ed,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:me(f,"password")})),$.createElement(fa,{position:"apart",mt:"xl",spacing:0,noWrap:!0},o&&$.createElement(nf,{component:"button",type:"button",color:"dimmed",onClick:o,size:"xs"},"Forgot password"),$.createElement(wd,{id:"remember",name:"remember",label:"Remember me",size:"xs",sx:{lineHeight:1}}),$.createElement(ff,{type:"submit"},"Sign in")))}import{Avatar as qd,Center as Gd,Group as Ud,Stack as Qd,Text as df,Title as zd,UnstyledButton as Wd}from"@mantine/core";import{normalizeOperationOutcome as Xd}from"@medplum/core";import Ae,{useState as Jd}from"react";function cf(e){let o=v(),[t,r]=Jd();return Ae.createElement(Qd,null,Ae.createElement(Gd,{sx:{flexDirection:"column"}},Ae.createElement(je,{size:32}),Ae.createElement(zd,{order:3},"Choose profile")),Ae.createElement(Bo,{outcome:t}),e.memberships.map(a=>Ae.createElement(Wd,{key:a.id,onClick:()=>{o.post("auth/profile",{login:e.login,profile:a.id}).then(e.handleAuthResponse).catch(n=>r(Xd(n)))}},Ae.createElement(Ud,null,Ae.createElement(qd,{radius:"xl"}),Ae.createElement("div",{style:{flex:1}},Ae.createElement(df,{size:"sm",weight:500},a.profile?.display),Ae.createElement(df,{color:"dimmed",size:"xs"},a.project?.display))))))}import{Button as Kd,Center as $d,Checkbox as jd,Group as _d,Stack as mf,Title as Zd}from"@mantine/core";import Ve from"react";function pf(e){let o=v();return Ve.createElement(K,{style:{maxWidth:400},onSubmit:t=>{o.post("auth/scope",{login:e.login,scope:Object.keys(t).join(" ")}).then(e.handleAuthResponse).catch(console.log)}},Ve.createElement(mf,null,Ve.createElement($d,{sx:{flexDirection:"column"}},Ve.createElement(je,{size:32}),Ve.createElement(Zd,null,"Choose scope")),Ve.createElement(mf,null,(e.scope??"openid").split(" ").map(t=>Ve.createElement(jd,{key:t,id:t,name:t,label:t,defaultChecked:!0}))),Ve.createElement(_d,{position:"right",mt:"xl"},Ve.createElement(Kd,{type:"submit"},"Set scope"))))}import{Alert as Yd,Button as ec,Center as oc,Group as tc,Stack as xf,TextInput as rc,Title as ac}from"@mantine/core";import{normalizeErrorString as nc}from"@medplum/core";import Fe,{useState as fc}from"react";function If(e){let o=v(),[t,r]=fc();return Fe.createElement(K,{style:{maxWidth:400},onSubmit:a=>{r(void 0),o.post("auth/mfa/verify",{login:e.login,token:a.token}).then(e.handleAuthResponse).catch(n=>r(nc(n)))}},Fe.createElement(xf,null,Fe.createElement(oc,{sx:{flexDirection:"column"}},Fe.createElement(je,{size:32}),Fe.createElement(ac,null,"Enter MFA code")),t&&Fe.createElement(Yd,{icon:Fe.createElement(ro,{size:16}),title:"Error",color:"red"},t),Fe.createElement(xf,null,Fe.createElement(rc,{name:"token",label:"MFA code",required:!0})),Fe.createElement(tc,{position:"right",mt:"xl"},Fe.createElement(ec,{type:"submit"},"Submit code"))))}function aD(e){let{login:o,chooseScopes:t,onSuccess:r,onForgotPassword:a,onRegister:n,onCode:f,...s}=e,l=v(),[i,u]=sa(),[d,c]=sa(!1),[x,y]=sa(),k=la(A=>{f?f(A):l.processCode(A).then(()=>{r&&r()}).catch(I=>gf({color:"red",message:hf(I)}))},[l,f,r]),T=la(A=>{c(!!A.mfaRequired),A.login&&u(A.login),A.memberships&&y(A.memberships),A.code&&(t?y(void 0):k(A.code))},[t,k]),B=la(A=>{k(A.code)},[k]);return lc(()=>{o&&!i&&l.get("auth/login/"+o).then(T).catch(A=>gf({color:"red",message:hf(A)}))},[l,o,i,T]),fo.createElement(St,{width:450},(()=>i?d?fo.createElement(If,{login:i,handleAuthResponse:T}):x?fo.createElement(cf,{login:i,memberships:x,handleAuthResponse:T}):e.projectId==="new"?fo.createElement(Pt,{login:i,handleAuthResponse:T}):e.chooseScopes?fo.createElement(pf,{login:i,scope:e.scope,handleAuthResponse:B}):fo.createElement("div",null,"Success"):fo.createElement(uf,{onForgotPassword:a,onRegister:n,handleAuthResponse:T,disableGoogleAuth:e.disableGoogleAuth,disableEmailAuth:e.disableEmailAuth,...s},e.children))())}import{getPropertyDisplayName as Tc,tryGetDataType as Dc}from"@medplum/core";import Yo from"react";var Mt=["meta","implicitRules","language","text","contained","extension","modifierExtension"];import{createStyles as sc}from"@mantine/core";import jo from"react";var ic=sc(e=>({root:{display:"grid",gridTemplateColumns:"30% 70%",margin:0,"& > dt, & > dd":{padding:`${e.spacing.sm} ${e.spacing.sm}`,borderTop:`0.1px solid ${e.colors.gray[3]}`,margin:0}},compact:{gridTemplateColumns:"20% 80%","& > dt, & > dd":{padding:`0 ${e.spacing.xs} ${e.spacing.xs} 0`,border:0}}}));function Cf(e){let{children:o,compact:t}=e,{classes:r,cx:a}=ic();return jo.createElement("dl",{className:a(r.root,{[r.compact]:t})},o)}function yf(e){return jo.createElement(jo.Fragment,null,jo.createElement("dt",null,e.term),jo.createElement("dd",null,e.children))}import{ActionIcon as gc,Box as hc,CopyButton as Cc,Tooltip as yc}from"@mantine/core";import{formatDateTime as vc,formatPeriod as Sc,formatTiming as bc,PropertyType as V}from"@medplum/core";import E from"react";import{formatCodeableConcept as uc}from"@medplum/core";import vf from"react";function Ao(e){return vf.createElement(vf.Fragment,null,uc(e.value))}import{formatCoding as dc}from"@medplum/core";import Sf from"react";function bf(e){return Sf.createElement(Sf.Fragment,null,dc(e.value))}import ia from"react";import Pf from"react";function wt(e){let o=e.value;if(!o)return null;let t=[];return o.value&&t.push(o.value),(o.use||o.system)&&(t.push(" ["),o.use&&t.push(o.use),o.use&&o.system&&t.push(" "),o.system&&t.push(o.system),t.push("]")),Pf.createElement(Pf.Fragment,null,t.join("").trim())}function Tf(e){let o=e.value;return o?ia.createElement(ia.Fragment,null,o.name,o.name&&": ",o.telecom?.map(t=>ia.createElement(wt,{key:`telecom-${o.name}-${t.value}`,value:t}))):null}import cc from"react";function Df(e){return cc.createElement("div",null,e.value?.system,": ",e.value?.value)}import{formatMoney as mc}from"@medplum/core";import kf from"react";function Bf(e){return kf.createElement(kf.Fragment,null,mc(e.value))}import{formatQuantity as pc}from"@medplum/core";import Af from"react";function _o(e){return Af.createElement(Af.Fragment,null,pc(e.value))}import{formatRange as xc}from"@medplum/core";import Ff from"react";function Ot(e){return Ff.createElement(Ff.Fragment,null,xc(e.value))}import Et from"react";function Mf(e){let o=e.value;return o?Et.createElement(Et.Fragment,null,Et.createElement(_o,{value:o.numerator}),"\xA0/\xA0",Et.createElement(_o,{value:o.denominator})):null}import{stringify as Ic}from"@medplum/core";import ua from"react";function lo(e){if(!e.value)return null;let o=e.value.display||e.value.reference||Ic(e.value);return e.link!==!1&&e.value.reference?ua.createElement(se,{to:e.value},o):ua.createElement(ua.Fragment,null,o)}import Fo from"react";function wf(e){let{property:o,values:t}=e,r=o.type[0].code;return e.values?Fo.createElement(Fo.Fragment,null,t.map((a,n)=>Fo.createElement("div",{key:`${n}-${t.length}`},Fo.createElement(pe,{arrayElement:!0,property:o,propertyType:r,value:a,ignoreMissingValues:e.ignoreMissingValues,link:e.link})))):Fo.createElement(Fo.Fragment,null)}function pe(e){let{property:o,propertyType:t,value:r}=e;if(o?.path?.endsWith(".id"))return E.createElement(hc,{component:"div",sx:{display:"flex",gap:3,alignItems:"center"}},r,E.createElement(Cc,{value:r,timeout:2e3},({copied:n,copy:f})=>E.createElement(yc,{label:n?"Copied":"Copy",withArrow:!0,position:"right"},E.createElement(gc,{color:n?"teal":"gray",onClick:f},n?E.createElement(zo,{size:"1rem"}):E.createElement(Mr,{size:"1rem"})))));if(o?.max&&o.max>1&&!e.arrayElement)return t===V.Attachment?E.createElement(Wn,{values:r,maxWidth:e.maxWidth}):E.createElement(wf,{property:o,values:r,ignoreMissingValues:e.ignoreMissingValues,link:e.link});switch(t){case V.boolean:return E.createElement(E.Fragment,null,r===void 0?"":(!!r).toString());case V.SystemString:case V.string:return E.createElement("div",{style:{whiteSpace:"pre-wrap"}},r);case V.code:case V.date:case V.decimal:case V.integer:case V.positiveInt:case V.unsignedInt:case V.uri:case V.url:return E.createElement(E.Fragment,null,r);case V.canonical:return E.createElement(lo,{value:{reference:r},link:e.link});case V.dateTime:case V.instant:return E.createElement(E.Fragment,null,vc(r));case V.markdown:return E.createElement("pre",null,r);case V.Address:return E.createElement(dn,{value:r});case V.Annotation:return E.createElement(E.Fragment,null,r?.text);case V.Attachment:return E.createElement(Oe,{value:r,maxWidth:e.maxWidth});case V.CodeableConcept:return E.createElement(Ao,{value:r});case V.Coding:return E.createElement(bf,{value:r});case V.ContactDetail:return E.createElement(Tf,{value:r});case V.ContactPoint:return E.createElement(wt,{value:r});case V.HumanName:return E.createElement(gt,{value:r});case V.Identifier:return E.createElement(Df,{value:r});case V.Money:return E.createElement(Bf,{value:r});case V.Period:return E.createElement(E.Fragment,null,Sc(r));case V.Quantity:case V.Duration:return E.createElement(_o,{value:r});case V.Range:return E.createElement(Ot,{value:r});case V.Ratio:return E.createElement(Mf,{value:r});case V.Reference:return E.createElement(lo,{value:r,link:e.link});case V.Timing:return E.createElement(E.Fragment,null,bc(r));case V.Dosage:case V.UsageContext:return E.createElement(Zo,{value:{type:t,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues});default:if(!o)throw Error(`Displaying property of type ${e.propertyType} requires element schema`);return E.createElement(Zo,{value:{type:o.type[0].code,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues})}}import{getTypedPropertyValue as Pc}from"@medplum/core";function ye(e,o){let t=Pc(e,o);return t?Array.isArray(t)?[t.map(r=>r.value),t[0].type]:[t.value,t.type]:[void 0,"undefined"]}function Zo(e){let o=e.value,t=o.value;if(!t)return null;let r=o.type,a=Dc(r);return a?typeof t=="object"&&"name"in t&&Object.keys(t).length===1&&typeof t.name=="string"?Yo.createElement("div",null,t.name):Yo.createElement(Cf,{compact:e.compact},Object.entries(a.elements).map(n=>{let[f,s]=n;if(Mt.includes(f))return null;let[l,i]=ye(o,f);return e.ignoreMissingValues&&(!l||Array.isArray(l)&&l.length===0)?null:Yo.createElement(yf,{key:f,term:Tc(f)},Yo.createElement(pe,{property:s,propertyType:i,value:l,ignoreMissingValues:e.ignoreMissingValues,link:e.link}))})):Yo.createElement("div",null,r,"\xA0not implemented")}import{Stack as Zm}from"@mantine/core";import{getPropertyDisplayName as nl,tryGetDataType as Ym}from"@medplum/core";import Oo,{useState as ep}from"react";import{Group as kc,Input as Bc}from"@mantine/core";import Lt from"react";function Rt(e){return Lt.createElement(kc,{noWrap:!0},Lt.createElement("div",null,e.children),Lt.createElement("div",null,Lt.createElement(Bc.Wrapper,{id:e.htmlFor,label:e.title,description:e.description,withAsterisk:e.withAsterisk},(()=>null)())))}import{Input as Ac}from"@mantine/core";import Fc from"react";function ve(e){return Fc.createElement(Ac.Wrapper,{id:e.htmlFor,label:e.title,description:e.description,withAsterisk:e.withAsterisk,error:me(e.outcome,e.htmlFor)},e.children)}import{capitalize as Mc}from"@medplum/core";function et(e,o,t,r,a){let n=r.type;if(n.length>1)for(let f of n){let s=o.replace("[x]",Mc(f.code));s in e&&delete e[s]}return e[t]=a,e}import{Checkbox as zm,Group as Wm,NativeSelect as Xm,Textarea as Jm,TextInput as Ca}from"@mantine/core";import{capitalize as Km,PropertyType as L}from"@medplum/core";import G,{useState as $m}from"react";import wc,{useState as Oc}from"react";function Of(e){let[o,t]=Oc(e.defaultValue);function r(a){let n=Lc(a);t(n),e.onChange&&e.onChange(n)}return wc.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:o&&Ec(o),maxSelectedValues:1,onChange:r})}function Ec(e){return e.coding?.map(o=>({system:o.system,code:o.code,display:o.display}))}function Lc(e){if(e.length!==0)return{coding:e.map(o=>({system:o.system,code:o.code,display:o.display}))}}import Rc,{useState as Nc}from"react";function Nt(e){let[o,t]=Nc(e.defaultValue);function r(a){let n=a[0],f=n&&Vc(n);t(f),e.onChange&&e.onChange(f)}return Rc.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:o&&Hc(o),maxSelectedValues:1,onChange:r})}function Hc(e){return{system:e.system,code:e.code,display:e.display}}function Vc(e){return{system:e.system,code:e.code,display:e.display}}import{Group as zc,TextInput as Wc}from"@mantine/core";import da,{useRef as Xc,useState as Jc}from"react";import{Group as qc,NativeSelect as Ef,TextInput as Gc}from"@mantine/core";import Ht,{useRef as Uc,useState as Qc}from"react";function Vt(e){let[o,t]=Qc(e.defaultValue),r=Uc();r.current=o;function a(l){l&&Object.keys(l).length===0&&(l=void 0),t(l),e.onChange&&e.onChange(l)}function n(l){let i={...r.current,system:l};l||delete i.system,a(i)}function f(l){let i={...r.current,use:l};l||delete i.use,a(i)}function s(l){let i={...r.current,value:l};l||delete i.value,a(i)}return Ht.createElement(qc,{spacing:"xs",grow:!0,noWrap:!0},Ht.createElement(Ef,{"data-testid":"system",defaultValue:o?.system,onChange:l=>n(l.currentTarget.value),data:["","email","phone","fax","pager","sms","other"]}),Ht.createElement(Ef,{"data-testid":"use",defaultValue:o?.use,onChange:l=>f(l.currentTarget.value),data:["","home","work","temp","old","mobile"]}),Ht.createElement(Gc,{placeholder:"Value",defaultValue:o?.value,onChange:l=>s(l.currentTarget.value)}))}function Lf(e){let[o,t]=Jc(e.defaultValue),r=Xc();r.current=o;function a(s){t(s),e.onChange&&e.onChange(s)}function n(s){let l={...r.current,name:s};s||delete l.name,a(l)}function f(s){let l={...r.current,telecom:s&&[s]};s||delete l.telecom,a(l)}return da.createElement(zc,{spacing:"xs",grow:!0,noWrap:!0},da.createElement(Wc,{"data-testid":e.name+"-name",name:e.name+"-name",placeholder:"Name",style:{width:180},defaultValue:o?.name,onChange:s=>n(s.currentTarget.value)}),da.createElement(Vt,{name:e.name+"-telecom",defaultValue:o?.telecom?.[0],onChange:f}))}import{TextInput as Kc}from"@mantine/core";import $c from"react";import{isValidDate as Rf}from"@medplum/core";function Nf(e){if(!e)return"";let o=new Date(e);return Rf(o)?o.toLocaleDateString("sv")+"T"+o.toLocaleTimeString("sv"):""}function Hf(e){if(!e)return"";let o=new Date(e);return Rf(o)?o.toISOString():""}function Me(e){return $c.createElement(Kc,{id:e.name,name:e.name,"data-autofocus":e.autoFocus,"data-testid":e.name,placeholder:e.placeholder,required:e.required,type:jc(),defaultValue:Nf(e.defaultValue),autoFocus:e.autoFocus,error:me(e.outcome,e.name),onChange:o=>{if(e.onChange){let t=o.currentTarget.value;e.onChange(Hf(t))}}})}function jc(){return"datetime-local"}import{JsonInput as _c}from"@mantine/core";import{stringify as Zc}from"@medplum/core";import Yc from"react";function Vf(e){return Yc.createElement(_c,{id:e.name,name:e.name,"data-testid":"extension-input",defaultValue:Zc(e.defaultValue),deserialize:JSON.parse,onChange:o=>{e.onChange&&e.onChange(JSON.parse(o))}})}import{Group as em,NativeSelect as om,TextInput as qt}from"@mantine/core";import Mo,{useRef as tm,useState as rm}from"react";function qf(e){let[o,t]=rm(e.defaultValue),r=tm();r.current=o;function a(u){t(u),e.onChange&&e.onChange(u)}function n(u){a({...r.current,use:u||void 0})}function f(u){a({...r.current,prefix:u?u.split(" "):void 0})}function s(u){a({...r.current,given:u?u.split(" "):void 0})}function l(u){a({...r.current,family:u||void 0})}function i(u){a({...r.current,suffix:u?u.split(" "):void 0})}return Mo.createElement(em,{spacing:"xs",grow:!0,noWrap:!0},Mo.createElement(om,{defaultValue:o?.use,name:e.name+"-use","data-testid":"use",onChange:u=>n(u.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"]}),Mo.createElement(qt,{placeholder:"Prefix",name:e.name+"-prefix",defaultValue:o?.prefix?.join(" "),onChange:u=>f(u.currentTarget.value)}),Mo.createElement(qt,{placeholder:"Given",name:e.name+"-given",defaultValue:o?.given?.join(" "),onChange:u=>s(u.currentTarget.value)}),Mo.createElement(qt,{name:e.name+"-family",placeholder:"Family",defaultValue:o?.family,onChange:u=>l(u.currentTarget.value)}),Mo.createElement(qt,{placeholder:"Suffix",name:e.name+"-suffix",defaultValue:o?.suffix?.join(" "),onChange:u=>i(u.currentTarget.value)}))}import{Group as am,TextInput as Gf}from"@mantine/core";import ca,{useState as nm}from"react";function Uf(e){let[o,t]=nm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return ca.createElement(am,{spacing:"xs",grow:!0,noWrap:!0},ca.createElement(Gf,{placeholder:"System",defaultValue:o?.system,onChange:a=>r({...o,system:a.currentTarget.value})}),ca.createElement(Gf,{placeholder:"Value",defaultValue:o?.value,onChange:a=>r({...o,value:a.currentTarget.value})}))}import{NativeSelect as fm,TextInput as lm}from"@mantine/core";import ma,{useCallback as pa,useState as sm}from"react";var im=["USD","EUR","CAD","GBP","AUD"];function Qf(e){let{onChange:o}=e,[t,r]=sm(e.defaultValue),a=pa(l=>{r(l),o&&o(l)},[o]),n=pa(l=>{a({...t,currency:l.currentTarget.value})},[t,a]),f=pa(l=>{a({...t,value:l.currentTarget.valueAsNumber})},[t,a]),s=ma.createElement(fm,{defaultValue:t?.currency,data:im,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:n});return ma.createElement(lm,{type:"number",label:e.label,placeholder:e.placeholder??"Value",defaultValue:t?.value?.toString()??"USD",icon:ma.createElement(wr,{size:14}),rightSection:s,rightSectionWidth:92,onChange:f})}import{Group as um}from"@mantine/core";import xa,{useState as dm}from"react";function zf(e){let[o,t]=dm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return xa.createElement(um,{spacing:"xs",grow:!0,noWrap:!0},xa.createElement(Me,{name:e.name+".start",placeholder:"Start",defaultValue:o?.start,onChange:a=>r({...o,start:a})}),xa.createElement(Me,{name:e.name+".end",placeholder:"End",defaultValue:o?.end,onChange:a=>r({...o,end:a})}))}import{Group as cm,NativeSelect as mm,TextInput as Wf}from"@mantine/core";import Gt,{useState as pm}from"react";function Pe(e){let[o,t]=pm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return Gt.createElement(cm,{spacing:"xs",grow:!0,noWrap:!0},Gt.createElement(mm,{style:{width:80},"data-testid":e.name+"-comparator",defaultValue:o?.comparator,data:["","<","<=",">=",">"],onChange:a=>r({...o,comparator:a.currentTarget.value})}),Gt.createElement(Wf,{id:e.name,name:e.name,"data-autofocus":e.autoFocus,"data-testid":e.name+"-value",type:"number",placeholder:"Value",defaultValue:o?.value,autoFocus:e.autoFocus,step:"any",onWheel:a=>{e.disableWheel&&a.currentTarget.blur()},onChange:a=>{r({...o,value:xm(a.currentTarget.value)})}}),Gt.createElement(Wf,{placeholder:"Unit","data-testid":e.name+"-unit",defaultValue:o?.unit,onChange:a=>r({...o,unit:a.currentTarget.value})}))}function xm(e){if(e)return parseFloat(e)}import{Group as Im}from"@mantine/core";import Ia,{useState as gm}from"react";function ot(e){let[o,t]=gm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return Ia.createElement(Im,{spacing:"xs",grow:!0,noWrap:!0},Ia.createElement(Pe,{name:e.name+"-low",defaultValue:o?.low,onChange:a=>r({...o,low:a})}),Ia.createElement(Pe,{name:e.name+"-high",defaultValue:o?.high,onChange:a=>r({...o,high:a})}))}import{Group as hm}from"@mantine/core";import ga,{useState as Cm}from"react";function Xf(e){let[o,t]=Cm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return ga.createElement(hm,{spacing:"xs",grow:!0,noWrap:!0},ga.createElement(Pe,{name:e.name+"-numerator",defaultValue:o?.numerator,onChange:a=>r({...o,numerator:a})}),ga.createElement(Pe,{name:e.name+"-denominator",defaultValue:o?.denominator,onChange:a=>r({...o,denominator:a})}))}import{Group as Am,NativeSelect as Fm}from"@mantine/core";import{createReference as Mm}from"@medplum/core";import Qt,{useState as jf}from"react";import{Group as ym,Text as Jf}from"@mantine/core";import{getDisplayString as vm,getReferenceString as $f}from"@medplum/core";import so,{forwardRef as Sm,useCallback as Kf,useState as bm}from"react";var Pm={Observation:"code",User:"email:contains"},Tm=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","HealthcareService","ImplementationGuide","InsurancePlan","Library","Location","Measure","MedicinalProduct","MessageDefinition","NamingSystem","OperationDefinition","Organization","Patient","Person","PlanDefinition","Practitioner","Project","Questionnaire","RelatedPerson","ResearchDefinition","ResearchElementDefinition","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function Dm(e){return{value:$f(e),label:vm(e),resource:e}}function Ut(e){let o=v(),t=e.resourceType,[r,a]=bm(),n=X(e.defaultValue,a),f=e.onChange,s=Kf(async(i,u)=>{let d=Bm(t),c=new URLSearchParams({[d]:i,_count:"10"});return await o.searchResources(t,c,{signal:u})},[o,t]),l=Kf(i=>{f&&f(i[0])},[f]);return e.defaultValue&&!r&&!n?null:so.createElement(So,{name:e.name,itemComponent:km,defaultValue:n,placeholder:e.placeholder,maxSelectedValues:1,toKey:$f,toOption:Dm,loadOptions:s,onChange:l,clearable:!0})}var km=Sm(({label:e,resource:o,...t},r)=>so.createElement("div",{ref:r,...t},so.createElement(ym,{noWrap:!0},so.createElement(ge,{value:o}),so.createElement("div",null,so.createElement(Jf,null,e),so.createElement(Jf,{size:"xs",color:"dimmed"},o.birthDate)))));function Bm(e){return Pm[e]??(Tm.includes(e)?"name":"_id")}function wo(e){let o=wm(e.targetTypes),t=Om(e.defaultValue,o),[r,a]=jf(e.defaultValue),[n,f]=jf(t);function s(l){a(l),e.onChange&&e.onChange(l)}return Qt.createElement(Am,{spacing:"xs",grow:!0,noWrap:!0},o&&o.length>1&&Qt.createElement(Fm,{"data-autofocus":e.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:n,autoFocus:e.autoFocus,onChange:l=>f(l.currentTarget.value),data:o}),!o&&Qt.createElement(Po,{autoFocus:e.autoFocus,testId:"reference-input-resource-type-input",defaultValue:n,onChange:f,name:e.name+"-resourceType",placeholder:"Resource Type"}),Qt.createElement(Ut,{resourceType:n,name:e.name+"-id",placeholder:e.placeholder,defaultValue:r,onChange:l=>{s(l?Mm(l):void 0)}}))}function wm(e){if(!(!e||e.length===0||e.length===1&&e[0]==="Resource"))return e}function Om(e,o){let t=e?.reference?.split("/")[0];if(t)return t;if(o&&o.length>0)return o[0]}import{ActionIcon as _f}from"@mantine/core";import xe,{useRef as Em,useState as Lm}from"react";function Zf(e){let[o,t]=Lm(e.defaultValue&&Array.isArray(e.defaultValue)?e.defaultValue:[]),r=Em();r.current=o;function a(n){t(n),e.onChange&&e.onChange(n)}return xe.createElement("table",{style:{width:"100%",borderCollapse:"collapse"}},xe.createElement("colgroup",null,xe.createElement("col",{width:"97%"}),xe.createElement("col",{width:"3%"})),xe.createElement("tbody",null,o.map((n,f)=>xe.createElement("tr",{key:`${f}-${o.length}`},xe.createElement("td",null,xe.createElement(qe,{arrayElement:!0,property:e.property,name:e.name+"."+f,defaultValue:n,onChange:s=>{let l=[...r.current];l[f]=s,a(l)}})),xe.createElement("td",{style:{textAlign:"right"}},xe.createElement(_f,{title:"Remove",size:"sm",onClick:s=>{H(s);let l=[...r.current];l.splice(f,1),a(l)}},xe.createElement(We,null))))),xe.createElement("tr",null,xe.createElement("td",null),xe.createElement("td",{style:{textAlign:"right"}},xe.createElement(_f,{title:"Add",size:"sm",color:"green",onClick:n=>{H(n);let f=[...r.current];f.push(void 0),a(f)}},xe.createElement(po,null))))))}import{Button as ol,Chip as Yf,Group as zt,Modal as Rm,NativeSelect as Nm,Stack as Hm,Switch as Vm,TextInput as qm}from"@mantine/core";import{formatTiming as Gm}from"@medplum/core";import j,{useRef as tl,useState as ha}from"react";var Um=["sun","mon","tue","wed","thu","fri","sat"];function rl(e){let[o,t]=ha(e.defaultValue),[r,a]=ha(!1),n=tl();return n.current=o,j.createElement(j.Fragment,null,j.createElement(zt,{spacing:"xs",grow:!0,noWrap:!0},j.createElement("span",null,Gm(n.current)||"No repeat"),j.createElement(ol,{onClick:()=>a(!0)},"Edit")),j.createElement(Qm,{visible:r,defaultValue:n.current,onOk:f=>{e.onChange&&e.onChange(f),t(f),a(!1)},onCancel:()=>a(!1)}))}var el={repeat:{period:1,periodUnit:"d"}};function Qm(e){let[o,t]=ha(e.defaultValue||el),r=tl();r.current=o;function a(i){t({...r.current,event:[i]})}function n(i){t({...r.current,repeat:i})}function f(i){n({...r.current?.repeat,period:i})}function s(i){n({...r.current?.repeat,periodUnit:i})}function l(i){n({...r.current?.repeat,dayOfWeek:i})}return j.createElement(Rm,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:()=>e.onCancel()},j.createElement(Hm,null,j.createElement(ve,{title:"Starts on",htmlFor:"timing-dialog-start"},j.createElement(Me,{name:"timing-dialog-start",onChange:i=>a(i)})),j.createElement(Vm,{label:"Repeat",checked:!!o.repeat,onChange:i=>n(i.currentTarget.checked?el.repeat:void 0)}),o.repeat&&j.createElement(j.Fragment,null,j.createElement(ve,{title:"Repeat every",htmlFor:"timing-dialog-period"},j.createElement(zt,{spacing:"xs",grow:!0,noWrap:!0},j.createElement(qm,{type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:o.repeat.period||1,onChange:i=>f(parseInt(i.currentTarget.value,10)||1)}),j.createElement(Nm,{id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:o.repeat.periodUnit,onChange:i=>s(i.currentTarget.value),data:[{label:"second",value:"s"},{label:"minute",value:"min"},{label:"hour",value:"h"},{label:"day",value:"d"},{label:"week",value:"wk"},{label:"month",value:"mo"},{label:"year",value:"a"}]}))),o.repeat.periodUnit==="wk"&&j.createElement(ve,{title:"Repeat on"},j.createElement(Yf.Group,{multiple:!0,onChange:l},j.createElement(zt,{position:"apart",mt:"md",spacing:"xs"},Um.map(i=>j.createElement(Yf,{key:i,value:i,size:"xs",radius:"xl"},i.charAt(0).toUpperCase())))))),j.createElement(zt,{position:"right"},j.createElement(ol,{onClick:()=>e.onOk(o)},"OK"))))}function qe(e){let o=e.property,t=e.defaultPropertyType??o.type[0].code,r=e.name,a=e.defaultValue;if(o.max>1&&!e.arrayElement)return t===L.Attachment?G.createElement(Jn,{name:r,defaultValue:a,onChange:e.onChange}):G.createElement(Zf,{property:o,name:r,defaultValue:a,onChange:e.onChange});let n=o.type;return n.length>1?G.createElement(jm,{elementDefinitionTypes:n,...e}):G.createElement(al,{elementDefinitionType:n[0],...e})}function jm(e){let o=e.elementDefinitionTypes,t;e.defaultPropertyType&&(t=o.find(n=>n.code===e.defaultPropertyType)),t||(t=o[0]);let[r,a]=$m(t);return G.createElement(Wm,{spacing:"xs",grow:!0,noWrap:!0},G.createElement(Xm,{style:{width:"200px"},defaultValue:r.code,onChange:n=>{a(o.find(f=>f.code===n.currentTarget.value))},data:o.map(n=>({value:n.code,label:n.code}))}),G.createElement(al,{...e,elementDefinitionType:r,onChange:n=>{e.onChange&&e.onChange(n,e.name.replace("[x]",Km(r.code)))}}))}function al(e){let o=e.property,t=e.elementDefinitionType.code,r=e.name,a=e.defaultValue,n=o.min!==void 0&&o.min>0;switch(t){case L.SystemString:case L.canonical:case L.string:case L.time:case L.uri:case L.url:return G.createElement(Ca,{id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)},error:me(e.outcome,r)});case L.date:return G.createElement(Ca,{type:"date",id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)},error:me(e.outcome,r)});case L.dateTime:case L.instant:return G.createElement(Me,{name:r,defaultValue:a,onChange:e.onChange,outcome:e.outcome});case L.decimal:case L.integer:case L.positiveInt:case L.unsignedInt:return G.createElement(Ca,{type:"number",step:t===L.decimal?"any":"1",id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.valueAsNumber)}});case L.code:return G.createElement(yt,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.boolean:return G.createElement(zm,{id:r,name:r,"data-testid":r,defaultChecked:!!a,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.checked)}});case L.markdown:return G.createElement(Jm,{id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)}});case L.Address:return G.createElement(xn,{name:r,defaultValue:a,onChange:e.onChange});case L.Annotation:return G.createElement(In,{name:r,defaultValue:a,onChange:e.onChange});case L.Attachment:return G.createElement(vt,{name:r,defaultValue:a,onChange:e.onChange});case L.CodeableConcept:return G.createElement(Of,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.Coding:return G.createElement(Nt,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.ContactDetail:return G.createElement(Lf,{name:r,defaultValue:a,onChange:e.onChange});case L.ContactPoint:return G.createElement(Vt,{name:r,defaultValue:a,onChange:e.onChange});case L.Extension:return G.createElement(Vf,{name:r,defaultValue:a,onChange:e.onChange});case L.HumanName:return G.createElement(qf,{name:r,defaultValue:a,onChange:e.onChange});case L.Identifier:return G.createElement(Uf,{name:r,defaultValue:a,onChange:e.onChange});case L.Money:return G.createElement(Qf,{name:r,defaultValue:a,onChange:e.onChange});case L.Period:return G.createElement(zf,{name:r,defaultValue:a,onChange:e.onChange});case L.Duration:case L.Quantity:return G.createElement(Pe,{name:r,defaultValue:a,onChange:e.onChange});case L.Range:return G.createElement(ot,{name:r,defaultValue:a,onChange:e.onChange});case L.Ratio:return G.createElement(Xf,{name:r,defaultValue:a,onChange:e.onChange});case L.Reference:return G.createElement(wo,{name:r,defaultValue:a,targetTypes:_m(o),onChange:e.onChange});case L.Timing:return G.createElement(rl,{name:r,defaultValue:a,onChange:e.onChange});case L.Dosage:case L.UsageContext:return G.createElement(tt,{typeName:t,defaultValue:a,onChange:e.onChange,outcome:e.outcome});default:return G.createElement(tt,{typeName:o.type[0].code,defaultValue:a,onChange:e.onChange,outcome:e.outcome})}}function _m(e){return e?.type?.[0]?.targetProfile?.map(o=>o.split("/").pop())}function tt(e){let[o,t]=ep(e.defaultValue??{});function r(s){t(s),e.onChange&&e.onChange(s)}let a=e.typeName,n=Ym(a);if(!n)return Oo.createElement("div",null,a,"\xA0not implemented");let f={type:a,value:o};return Oo.createElement(Zm,null,Object.entries(n.elements).map(([s,l])=>{if(s==="id"||Mt.includes(s)||!l.type)return null;let[i,u]=ye(f,s),d=l.min!==void 0&&l.min>0;return l.type.length===1&&l.type[0].code==="boolean"?Oo.createElement(Rt,{key:s,title:nl(s),description:l.description,htmlFor:s},Oo.createElement(qe,{property:l,name:s,defaultValue:i,defaultPropertyType:u,outcome:e.outcome,onChange:(c,x)=>{r(et(o,s,x??s,l,c))}})):Oo.createElement(ve,{key:s,title:nl(s),description:l.description,withAsterisk:d,htmlFor:s,outcome:e.outcome},Oo.createElement(qe,{property:l,name:s,defaultValue:i,defaultPropertyType:u,onChange:(c,x)=>{r(et(o,s,x??s,l,c))}}))}))}import{Button as ya,createStyles as op,Group as ll}from"@mantine/core";import oe,{useMemo as tp,useState as rp}from"react";function fl(e){return e.toLocaleString("default",{month:"long"})+" "+e.getFullYear()}function Wt(){let e=new Date;return e.setDate(1),e.setHours(0,0,0,0),e}var ap=op(e=>({table:{width:350,"& th":{fontWeight:"normal",fontSize:11,padding:8,textAlign:"center"},"& td":{padding:"2px 4px"},"& td button":{width:44,height:44,color:e.colors[e.primaryColor][5],fontSize:16,fontWeight:500,textAlign:"center",padding:0,backgroundColor:e.colors[e.primaryColor][0],border:0,borderRadius:"50%",cursor:"pointer"},"& td button:hover":{backgroundColor:e.colors[e.primaryColor][1]},"& td button:disabled":{backgroundColor:"transparent",cursor:"default",color:e.colors.gray[4],fontWeight:"normal"}}}));function sl(e){let{classes:o}=ap(),{onChangeMonth:t,onClick:r}=e,[a,n]=rp(Wt);function f(l){n(i=>{let u=new Date(i.getTime());return u.setMonth(i.getMonth()+l),t(u),u})}let s=tp(()=>np(a,e.slots),[a,e.slots]);return oe.createElement("div",null,oe.createElement(ll,{position:"apart",spacing:"xs",grow:!0,noWrap:!0},oe.createElement("p",{style:{flex:1}},fl(a)),oe.createElement(ll,{position:"right",spacing:"xs"},oe.createElement(ya,{variant:"outline","aria-label":"Previous month",onClick:()=>f(-1)},"<"),oe.createElement(ya,{variant:"outline","aria-label":"Next month",onClick:()=>f(1)},">"))),oe.createElement("table",{className:o.table},oe.createElement("thead",null,oe.createElement("tr",null,oe.createElement("th",null,"SUN"),oe.createElement("th",null,"MON"),oe.createElement("th",null,"TUE"),oe.createElement("th",null,"WED"),oe.createElement("th",null,"THU"),oe.createElement("th",null,"FRI"),oe.createElement("th",null,"SAT"))),oe.createElement("tbody",null,s.map((l,i)=>oe.createElement("tr",{key:"week-"+i},l.map((u,d)=>oe.createElement("td",{key:"day-"+d},u&&oe.createElement(ya,{disabled:!u.available,onClick:()=>r(u.date)},u.date.getDate()))))))))}function np(e,o){let t=new Date(e.getFullYear(),e.getMonth()),r=[],a=[];for(let n=0;n<t.getDay();n++)a.push(void 0);for(;t.getMonth()===e.getMonth();)a.push({date:new Date(t.getTime()),available:fp(t,o)}),t.getDay()===6&&(r.push(a),a=[]),t.setDate(t.getDate()+1);if(t.getDay()!==0){for(let n=t.getDay();n<7;n++)a.push(void 0);r.push(a)}return r}function fp(e,o){for(let t of o){let r=new Date(t.start);if(r.getFullYear()===e.getFullYear()&&r.getMonth()===e.getMonth()&&r.getDate()===e.getDate())return!0}return!1}import ux from"react";import{ActionIcon as Dl,Center as Jp,createStyles as Kp,Group as $p,Loader as jp,Menu as Ge,ScrollArea as _p,TextInput as Zp}from"@mantine/core";import{showNotification as Yp,updateNotification as ka}from"@mantine/notifications";import{getReferenceString as rt,normalizeErrorString as ex}from"@medplum/core";import D,{useCallback as Kt,useEffect as ox,useRef as kl,useState as Bl}from"react";import{createStyles as yp,Group as Jt,List as dl,Stack as cl,Text as Te,Title as ml}from"@mantine/core";import{capitalize as vp,formatCodeableConcept as Sp,formatDateTime as ba,formatObservationValue as bp,isReference as Pp}from"@medplum/core";import h,{useEffect as Tp,useState as Dp}from"react";import{Blockquote as lp,createStyles as sp,Stack as ip}from"@mantine/core";import il from"react";var up=sp(e=>({noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));function va({value:e}){let{classes:o}=up();return e?il.createElement(ip,{justify:"flex-start",spacing:"xs"},e.map(t=>t.text&&il.createElement(lp,{key:`note-${t.text}`,classNames:{cite:o.noteCite,body:o.noteBody,root:o.noteRoot},cite:t.authorReference?.display||t.authorString,icon:null},t.text))):null}import{Group as Ip}from"@mantine/core";import Sa from"react";import{Text as dp}from"@mantine/core";import{getDisplayString as cp,isOk as mp,normalizeErrorString as pp}from"@medplum/core";import ul,{useState as xp}from"react";function Ee(e){let{value:o,link:t,...r}=e,[a,n]=xp(),f=X(o,n),s;if(a&&!mp(a))s=`[${pp(a)}]`;else if(f)s=cp(f);else return null;return t?ul.createElement(se,{to:o,...r},s):ul.createElement(dp,{component:"span",...r},s)}function _e(e){return Sa.createElement(Ip,{spacing:"xs"},Sa.createElement(ge,{size:24,radius:12,value:e.value,link:e.link}),Sa.createElement(Ee,{value:e.value,link:e.link}))}import{Badge as gp}from"@mantine/core";import hp from"react";var Cp={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red"};function Xt(e){return hp.createElement(gp,{color:Cp[e.status]},e.status)}var pl=yp(e=>({table:{border:`0.1px solid ${e.colors.gray[5]}`,borderCollapse:"collapse","& td, & th":{border:`0.1px solid ${e.colors.gray[5]}`,padding:4}},criticalRow:{background:e.colorScheme==="dark"?e.colors.red[7]:e.colors.red[1],border:`0.1px solid ${e.colors.red[5]}`,color:e.colors.red[5],fontWeight:500,"& td":{border:`0.1px solid ${e.colors.red[5]}`}},noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));Pa.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function Pa(e){let o=v(),t=X(e.value),[r,a]=Dp();if(Tp(()=>{t?.specimen&&Promise.allSettled(t.specimen.map(f=>o.readReference(f))).then(f=>f.filter(s=>s.status==="fulfilled").map(s=>s.value)).then(a).catch(console.error)},[o,t]),!t)return null;let n=r?.flatMap(f=>f.note||[])||[];if(t.presentedForm&&t.presentedForm.length>0){let f=t.presentedForm[0];f.contentType?.startsWith("text/plain")&&f.data&&n.push({text:window.atob(f.data)})}return h.createElement(cl,null,h.createElement(ml,null,"Diagnostic Report"),h.createElement(kp,{value:t}),r&&!e.hideSpecimenInfo&&Bp(r),t.result&&h.createElement(Ap,{hideObservationNotes:e.hideObservationNotes,value:t.result}),n.length>0&&h.createElement(va,{value:n}))}function kp({value:e}){return h.createElement(Jt,{mt:"md",spacing:30},e.subject&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Subject"),h.createElement(Te,null,h.createElement(_e,{value:e.subject,link:!0}))),e.resultsInterpreter?.map(o=>h.createElement("div",{key:o.reference},h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Interpreter"),h.createElement(Te,null,h.createElement(_e,{value:o,link:!0})))),e.performer?.map(o=>h.createElement("div",{key:o.reference},h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Performer"),h.createElement(Te,null,h.createElement(_e,{value:o,link:!0})))),e.issued&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Issued"),h.createElement(Te,null,ba(e.issued))),e.status&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Status"),h.createElement(Te,null,vp(e.status))))}function Bp(e){return h.createElement(cl,{spacing:"xs"},h.createElement(ml,{order:2,size:"h6"},"Specimens"),h.createElement(dl,{type:"ordered"},e?.map(o=>h.createElement(dl.Item,{ml:"sm",key:`specimen-${o.id}`},h.createElement(Jt,{spacing:20},h.createElement(Jt,{spacing:5},h.createElement(Te,{fw:500},"Collected:")," ",ba(o.collection?.collectedDateTime)),h.createElement(Jt,{spacing:5},h.createElement(Te,{fw:500},"Received:")," ",ba(o.receivedTime)))))))}function Ap(e){let{classes:o}=pl();return h.createElement("table",{className:o.table},h.createElement("thead",null,h.createElement("tr",null,h.createElement("th",null,"Test"),h.createElement("th",null,"Value"),h.createElement("th",null,"Reference Range"),h.createElement("th",null,"Interpretation"),h.createElement("th",null,"Category"),h.createElement("th",null,"Performer"),h.createElement("th",null,"Status"))),h.createElement("tbody",null,h.createElement(xl,{value:e.value,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes})))}function xl(e){return h.createElement(h.Fragment,null,e.value?.map(o=>h.createElement(Fp,{key:`obs-${Pp(o)?o.reference:o.id}`,value:o,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes})))}function Fp(e){let{classes:o,cx:t}=pl(),r=X(e.value);if(!r||e.ancestorIds?.includes(r.id))return null;let a=!e.hideObservationNotes&&r.note,n=Op(r);return h.createElement(h.Fragment,null,h.createElement("tr",{className:t({[o.criticalRow]:n})},h.createElement("td",{rowSpan:a?2:1},h.createElement(se,{to:r},h.createElement(Ao,{value:r.code}))),h.createElement("td",null,h.createElement(Mp,{value:r})),h.createElement("td",null,h.createElement(wp,{value:r.referenceRange})),h.createElement("td",null,r.interpretation&&r.interpretation.length>0&&h.createElement(Ao,{value:r.interpretation[0]})),h.createElement("td",null,r.category&&r.category.length>0&&h.createElement(h.Fragment,null,r.category.map(f=>h.createElement("div",{key:`category-${Sp(f)}`},h.createElement(Ao,{value:f}))))),h.createElement("td",null,r.performer?.map(f=>h.createElement(lo,{key:f.reference,value:f}))),h.createElement("td",null,r.status&&h.createElement(Xt,{status:r.status}))),r.hasMember&&h.createElement(xl,{value:r.hasMember,ancestorIds:e.ancestorIds?[...e.ancestorIds,r.id]:[r.id],hideObservationNotes:e.hideObservationNotes}),a&&h.createElement("tr",null,h.createElement("td",{colSpan:6},h.createElement(va,{value:r.note}))))}function Mp(e){let o=e.value;return h.createElement(h.Fragment,null,bp(o))}function wp(e){let o=e.value&&e.value.length>0&&e.value[0];return o?o.text?h.createElement(h.Fragment,null,o.text):h.createElement(Ot,{value:o}):null}function Op(e){let o=e.interpretation?.[0]?.coding?.[0]?.code;return o==="AA"||o==="LL"||o==="HH"||o==="A"}import{createStyles as Ep}from"@mantine/core";import{getDataType as Lp,getPropertyDisplayName as Rp,stringify as Il,toTypedValue as gl}from"@medplum/core";import ue,{useEffect as Np,useState as Hp}from"react";var Vp=Ep(e=>({root:{borderCollapse:"collapse",width:"100%","& tr":{borderTop:`0.1px solid ${e.colors.gray[3]}`},"& th, & td":{padding:`${e.spacing.sm} ${e.spacing.sm}`,verticalAlign:"top"}},removed:{color:e.colors.red[7],textDecoration:"line-through"},added:{color:e.colors.green[7]}}));function Cl(e){let{classes:o}=Vp(),t=v(),[r,a]=Hp(!1);if(Np(()=>{t.requestSchema(e.original.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.original.resourceType]),!r)return null;let n=Lp(e.original.resourceType);return ue.createElement("table",{className:o.root},ue.createElement("colgroup",null,ue.createElement("col",{style:{width:"30%"}}),ue.createElement("col",{style:{width:"35%"}}),ue.createElement("col",{style:{width:"35%"}})),ue.createElement("thead",null,ue.createElement("tr",null,ue.createElement("th",null,"Property"),ue.createElement("th",null,"Before"),ue.createElement("th",null,"After"))),ue.createElement("tbody",null,Object.entries(n.elements).map(([f,s])=>{if(f==="id"||f==="meta")return null;let[l,i]=ye(gl(e.original),f),[u,d]=ye(gl(e.revised),f);return hl(l)&&hl(u)||Il(l)===Il(u)?null:ue.createElement("tr",{key:f},ue.createElement("td",null,Rp(f)),ue.createElement("td",{className:o.removed},ue.createElement(pe,{property:s,propertyType:i,value:l,ignoreMissingValues:!0})),ue.createElement("td",{className:o.added},ue.createElement(pe,{property:s,propertyType:d,value:u,ignoreMissingValues:!0})))})))}function hl(e){return!e||Array.isArray(e)&&e.length===0||typeof e=="object"&&Object.keys(e).length===0}import qp,{useEffect as Gp,useState as Up}from"react";function Ta(e){let o=v(),t=X(e.value),[r,a]=Up(!1);return Gp(()=>{t&&o.requestSchema(t.resourceType).then(()=>a(!0)).catch(console.log)},[o,t]),!r||!t?null:qp.createElement(Zo,{value:{type:t.resourceType,value:e.forceUseInput?e.value:t},ignoreMissingValues:e.ignoreMissingValues})}import{ActionIcon as Qp,Group as zp,Menu as yl,Text as Da}from"@mantine/core";import{formatDateTime as Wp,getReferenceString as Xp}from"@medplum/core";import re from"react";function vl(e){return re.createElement($e,null,e.children)}function Ze(e){let{resource:o,profile:t,padding:r,popupMenuItems:a,...n}=e,f=t??o.meta?.author,s=e.dateTime??o.meta?.lastUpdated;return re.createElement(ko,{"data-testid":"timeline-item",fill:!0,...n},re.createElement(zp,{position:"apart",spacing:8,mx:"xs",my:"sm"},re.createElement(ge,{value:f,link:!0,size:"md"}),re.createElement("div",{style:{flex:1}},re.createElement(Da,{size:"sm"},re.createElement(Ee,{color:"dark",weight:500,value:f,link:!0})),re.createElement(Da,{size:"xs"},re.createElement(se,{color:"dimmed",to:e.resource},Wp(s)),re.createElement(Da,{component:"span",color:"dimmed",mx:8},"\xB7"),re.createElement(se,{color:"dimmed",to:e.resource},e.resource.resourceType))),a&&re.createElement(yl,{position:"bottom-end",shadow:"md",width:200},re.createElement(yl.Target,null,re.createElement(Qp,{radius:"xl","aria-label":`Actions for ${Xp(e.resource)}`},re.createElement(Or,null))),a)),re.createElement(ho,null,r&&re.createElement("div",{style:{padding:"0 16px 16px 16px"}},e.children),!r&&re.createElement(re.Fragment,null,e.children)))}function Pl(e,o){e.sort((t,r)=>{let a=Sl(t,o),n=Sl(r,o);return a>n?1:a<n?-1:bl(t,o)-bl(r,o)})}function Sl(e,o){if(!Tl(e,o)){let t=e.priority;if(typeof t=="string")return{stat:4,asap:3,urgent:2}[t]??0}return 0}function bl(e,o){if(!Tl(e,o)){if(e.resourceType==="Communication"&&e.sent)return new Date(e.sent).getTime();if((e.resourceType==="DiagnosticReport"||e.resourceType==="Media"||e.resourceType==="Observation")&&e.issued)return new Date(e.issued).getTime();if(e.resourceType==="DocumentReference"&&e.date)return new Date(e.date).getTime()}let t=e.meta?.lastUpdated;return t?new Date(t).getTime():0}function Tl(e,o){return!!o&&e.resourceType===o.resourceType&&e.id===o.id}var tx=Kp(e=>({pinnedComment:{backgroundColor:e.colors.blue[0]}}));function Ye(e){let o=v(),t=ze(),r=o.getProfile(),a=kl(null),n=X(e.value),[f,s]=Bl(),[l,i]=Bl([]),u=e.loadTimelineResources,d=kl(l);d.current=l;let c=Kt(C=>{Pl(C,n),C.reverse(),i(C)},[n]),x=Kt(C=>{let N=[];for(let ke of C){if(ke.status!=="fulfilled")continue;let Se=ke.value;if(Se.type==="history"&&s(Se),Se.entry)for(let b of Se.entry)N.push(b.resource)}c(N)},[c]),y=Kt(C=>c([...d.current,C]),[c]),k=Kt(()=>{let C,N;"resourceType"in e.value?(C=e.value.resourceType,N=e.value.id):[C,N]=e.value.reference?.split("/"),u(o,C,N).then(x).catch(console.log)},[o,e.value,u,x]);ox(()=>k(),[k]);function T(C){!n||!e.createCommunication||o.createResource(e.createCommunication(n,r,C)).then(N=>y(N)).catch(console.log)}function B(C){!n||!e.createMedia||o.createResource(e.createMedia(n,r,C)).then(N=>y(N)).then(()=>ka({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:D.createElement(zo,{size:16}),autoClose:2e3})).catch(N=>ka({id:"upload-notification",color:"red",title:"Upload error",message:ex(N),icon:D.createElement(Lr,{size:16}),autoClose:2e3}))}function A(C,N){return o.updateResource({...C,priority:N})}function I(C){A(C,"stat").then(k).catch(console.log)}function O(C){A(C,"routine").then(k).catch(console.log)}function g(C){t(`/${C.resourceType}/${C.id}`)}function M(C){t(`/${C.resourceType}/${C.id}/edit`)}function Y(C){t(`/${C.resourceType}/${C.id}/delete`)}function ne(C){t(`/${C.resourceType}/${C.id}/_history/${C.meta?.versionId}`)}function Le(){Yp({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function oo(C){ka({id:"upload-notification",loading:!0,title:"Uploading...",message:ix(C),autoClose:!1,withCloseButton:!1})}return n?D.createElement(vl,null,e.createCommunication&&D.createElement(ko,null,D.createElement(K,{testid:"timeline-form",onSubmit:C=>{T(C.text);let N=a.current;N&&(N.value="",N.focus())}},D.createElement($p,{spacing:"xs",noWrap:!0,style:{width:"100%"}},D.createElement(ge,{value:r}),D.createElement(Zp,{name:"text",ref:a,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),D.createElement(Dl,{type:"submit",radius:"xl",color:"blue",variant:"filled"},D.createElement(qr,{size:16})),D.createElement(To,{onUpload:B,onUploadStart:Le,onUploadProgress:oo},C=>D.createElement(Dl,{...C,radius:"xl",color:"blue",variant:"filled"},D.createElement(Wo,{size:16})))))),l.map(C=>{if(!C)return null;let N=`${C.resourceType}/${C.id}/${C.meta?.versionId}`;if(C.resourceType===n.resourceType&&C.id===n.id)return D.createElement(rx,{key:N,history:f,resource:C,onDetails:ne});switch(C.resourceType){case"AuditEvent":return D.createElement(lx,{key:N,resource:C,onDetails:g});case"Communication":return D.createElement(nx,{key:N,resource:C,onPin:C.priority!=="stat"?I:void 0,onUnpin:C.priority==="stat"?O:void 0,onDetails:g,onEdit:M,onDelete:Y});case"DiagnosticReport":return D.createElement(sx,{key:N,resource:C,onDetails:g,onEdit:M,onDelete:Y});case"Media":return D.createElement(fx,{key:N,resource:C,onDetails:g,onEdit:M,onDelete:Y});default:return D.createElement(Ze,{key:N,resource:C,padding:!0},D.createElement(Ta,{value:C,ignoreMissingValues:!0}))}})):D.createElement(Jp,{style:{width:"100%",height:"100%"}},D.createElement(jp,null))}function Eo(e){return D.createElement(Ge.Dropdown,null,D.createElement(Ge.Label,null,"Resource"),e.onPin&&D.createElement(Ge.Item,{icon:D.createElement(Gr,{size:14}),onClick:()=>e.onPin(e.resource),"aria-label":`Pin ${rt(e.resource)}`},"Pin"),e.onUnpin&&D.createElement(Ge.Item,{icon:D.createElement(Ur,{size:14}),onClick:()=>e.onUnpin(e.resource),"aria-label":`Unpin ${rt(e.resource)}`},"Unpin"),e.onDetails&&D.createElement(Ge.Item,{icon:D.createElement(Hr,{size:14}),onClick:()=>e.onDetails(e.resource),"aria-label":`Details ${rt(e.resource)}`},"Details"),e.onEdit&&D.createElement(Ge.Item,{icon:D.createElement(Er,{size:14}),onClick:()=>e.onEdit(e.resource),"aria-label":`Edit ${rt(e.resource)}`},"Edit"),e.onDelete&&D.createElement(D.Fragment,null,D.createElement(Ge.Divider,null),D.createElement(Ge.Label,null,"Danger zone"),D.createElement(Ge.Item,{color:"red",icon:D.createElement(Ko,{size:14}),onClick:()=>e.onDelete(e.resource),"aria-label":`Delete ${rt(e.resource)}`},"Delete")))}function rx(e){let o=ax(e.history,e.resource);return o?D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Cl,{original:o,revised:e.resource})):D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement("h3",null,"Created"),D.createElement(Ta,{value:e.resource,ignoreMissingValues:!0,forceUseInput:!0}))}function ax(e,o){let t=e.entry,r=t.findIndex(a=>a.resource?.meta?.versionId===o.meta?.versionId);if(!(r>=t.length-1))return t[r+1].resource}function nx(e){let{classes:o}=tx(),r=!e.resource.priority||e.resource.priority==="routine"?void 0:o.pinnedComment;return D.createElement(Ze,{resource:e.resource,profile:e.resource.sender,dateTime:e.resource.sent,padding:!0,className:r,popupMenuItems:D.createElement(Eo,{...e})},D.createElement("p",null,e.resource.payload?.[0]?.contentString))}function fx(e){let o=e.resource.content?.contentType,t=o&&!o.startsWith("image/")&&!o.startsWith("video/")&&o!=="application/pdf";return D.createElement(Ze,{resource:e.resource,padding:!!t,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Oe,{value:e.resource.content}))}function lx(e){return D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(_p,null,D.createElement("pre",null,e.resource.outcomeDesc)))}function sx(e){return D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Pa,{value:e.resource}))}function ix(e){if(e.lengthComputable){let o=100*e.loaded/e.total;return`Uploaded: ${Ba(e.loaded)} / ${Ba(e.total)} ${o.toFixed(2)}%`}return`Uploaded: ${Ba(e.loaded)}`}function Ba(e){if(e===0)return"0.00 B";let o=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,o)).toFixed(2)+" "+" KMGTP".charAt(o)+"B"}function pM(e){return ux.createElement(Ye,{value:e.resource,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`,n=100;return Promise.allSettled([o.readHistory(t,r),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:n})])}})}import{createReference as $t}from"@medplum/core";import dx from"react";function vM(e){return dx.createElement(Ye,{value:e.encounter,loadTimelineResources:async(o,t,r)=>Promise.allSettled([o.readHistory("Encounter",r),o.search("Communication","encounter=Encounter/"+r),o.search("Media","encounter=Encounter/"+r)]),createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",encounter:$t(o),subject:o.subject,sender:$t(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",encounter:$t(o),subject:o.subject,operator:$t(t),issued:new Date().toISOString(),content:r})})}import{Button as yI,Loader as vI,Table as SI}from"@mantine/core";import{normalizeOperationOutcome as bI}from"@medplum/core";import ae,{useEffect as fs,useRef as ls,useState as rr}from"react";import{evalFhirPath as cx}from"@medplum/core";import mx from"react";function Al(e){let o;try{o=cx(e.path,e.resource)}catch(t){return console.warn("FhirPathDisplay:",t),null}if(o.length>1)throw new Error(`Component "path" for "FhirPathDisplay" must resolve to a single element. Received ${o.length} elements [${JSON.stringify(o,null,2)}]`);return mx.createElement(pe,{value:o[0]||"",propertyType:e.propertyType})}import{ActionIcon as nI,Button as Ho,Center as or,createStyles as fI,Group as tr,Loader as lI,Menu as rs,Pagination as sI,Table as iI,Text as Na,UnstyledButton as uI}from"@mantine/core";import{DEFAULT_SEARCH_COUNT as Ga,formatSearchQuery as dI}from"@medplum/core";import S,{useCallback as as,useEffect as ns,useRef as cI,useState as Ha}from"react";import{Box as px,Button as xx,Modal as Ix,Text as gx}from"@mantine/core";import Lo from"react";function Ml(e){return Lo.createElement(Ix,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},Lo.createElement(px,{display:"flex",sx:{justifyContent:"space-between"}},e.exportCsv&&Lo.createElement(Fl,{text:"CSV",exportLogic:e.exportCsv,onCancel:e.onCancel}),e.exportTransactionBundle&&Lo.createElement(Fl,{text:"Transaction Bundle",exportLogic:e.exportTransactionBundle,onCancel:e.onCancel})),Lo.createElement(gx,{sx:{marginTop:"10px",marginLeft:"2px"}},"Limited to 1000 records"))}function Fl(e){return Lo.createElement(xx,{onClick:()=>{e.exportLogic(),e.onCancel()}},`Export as ${e.text}`)}import{Button as ft,Modal as kx}from"@mantine/core";import{getDataType as Bx,getSearchParameters as Ax,stringify as Fx}from"@medplum/core";import J,{useEffect as Mx,useRef as Xl,useState as wx}from"react";import{capitalize as hx,DEFAULT_SEARCH_COUNT as Cx,evalFhirPathTyped as yx,formatDateTime as vx,Operator as w}from"@medplum/core";import jt from"react";var Sx={string:[w.EQUALS,w.NOT,w.CONTAINS,w.EXACT],fulltext:[w.EQUALS,w.NOT,w.CONTAINS,w.EXACT],token:[w.EQUALS,w.NOT],reference:[w.EQUALS,w.NOT],numeric:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS],quantity:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS],date:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS,w.STARTS_AFTER,w.ENDS_BEFORE,w.APPROXIMATELY],datetime:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS,w.STARTS_AFTER,w.ENDS_BEFORE,w.APPROXIMATELY]},bx={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",identifier:"identifier",iterate:"iterate"};function at(e,o){return{...e,filters:o,offset:0,name:void 0}}function NM(e){return at(e,[])}function _t(e,o){return at(e,(e.filters??[]).filter(t=>t.code!==o))}function Ro(e,o,t,r,a){a&&(e=_t(e,o));let n=[];return e.filters&&n.push(...e.filters),n.push({code:o,operator:t,value:r??""}),at(e,n)}function HM(e,o){if(e.fields?.includes(o))return e;let t=[];return e.fields&&t.push(...e.fields),t.push(o),{...e,fields:t,name:void 0}}function Ol(e,o){if(!e.filters)return e;let t=[...e.filters];return t.splice(o,1),{...e,filters:t,name:void 0}}function El(e,o){return Aa(e,o,-1)}function Ll(e,o){return Aa(e,o,0)}function Rl(e,o){return Aa(e,o,1)}function Aa(e,o,t){let r=new Date;r.setDate(r.getDate()+t),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setDate(a.getDate()+1),a.setTime(a.getTime()-1),Ma(e,o,r,a)}function Nl(e,o){return Fa(e,o,-1)}function Hl(e,o){return Fa(e,o,0)}function Vl(e,o){return Fa(e,o,1)}function Fa(e,o,t){let r=new Date;r.setMonth(r.getMonth()+t),r.setDate(1),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setMonth(a.getMonth()+1),a.setDate(1),a.setHours(0,0,0,0),a.setTime(a.getTime()-1),Ma(e,o,r,a)}function ql(e,o){let t=new Date;return t.setMonth(0),t.setDate(1),t.setHours(0,0,0,0),Ma(e,o,t,new Date)}function Ma(e,o,t,r){return e=_t(e,o),e=wl(e,o,w.GREATER_THAN_OR_EQUALS,t),e=wl(e,o,w.LESS_THAN_OR_EQUALS,r),e}function wl(e,o,t,r){return Ro(e,o,t,r.toISOString())}function wa(e,o,t=!0){return Ro(e,o,w.MISSING,t.toString())}function Px(e,o){return e.offset===o?e:{...e,offset:o,name:void 0}}function Gl(e,o){let t=e.count??Cx,r=(o-1)*t;return Px(e,r)}function Oa(e,o,t){return o===Ul(e)&&t!==void 0&&t===Ql(e)?e:{...e,sortRules:[{code:o,descending:!!t}],name:void 0}}function VM(e,o){let t=!1;return Ul(e)===o&&(t=!Ql(e)),Oa(e,o,t)}function Ul(e){let o=e.sortRules;if(!o||o.length===0)return;let t=o[0].code;return t.startsWith("-")?t.substr(1):t}function Ql(e){let o=e.sortRules;return!o||o.length===0?!1:!!o[0].descending}function zl(e){return Sx[e.type]}function nt(e){return bx[e]??""}function he(e){let o=e;return o.includes(".")&&(o=o.split(".").pop()),o==="id"||o==="Id"?"ID":o==="versionId"?"Version ID":(o=o.replace("[x]",""),o=o.replace(/([A-Z])/g," $1"),o=o.replace(/[-_]/g," "),o=o.replace(/\s+/g," "),o=o.trim(),o.split(/\s/).map(hx).join(" "))}function Wl(e,o){let t=o.name;return t==="id"?e.id:t==="meta.versionId"?e.meta?.versionId:t==="_lastUpdated"?vx(e.meta?.lastUpdated):o.elementDefinition&&`${e.resourceType}.${o.name}`===o.elementDefinition.path?Tx(e,o.elementDefinition):o.searchParams&&o.searchParams.length===1&&o.name===o.searchParams[0].code?Dx(e,o.searchParams[0]):null}function Tx(e,o){let t=o.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[r,a]=ye({type:e.resourceType,value:e},t);return r?jt.createElement(pe,{property:o,propertyType:a,value:r,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function Dx(e,o){let t=yx(o.expression,[{type:e.resourceType,value:e}]);return!t||t.length===0?null:jt.createElement(jt.Fragment,null,t.map((r,a)=>jt.createElement(pe,{key:`${a}-${t.length}`,propertyType:r.type,value:r.value,maxWidth:200,ignoreMissingValues:!0,link:!1})))}function Jl(e){let[o,t]=wx({search:JSON.parse(Fx(e.search))}),r=Xl(null),a=Xl(null);Mx(()=>{t({search:e.search})},[e.search]);function n(I){I.key==="Enter"&&i()}function f(){i()}function s(I){I.key==="Enter"&&u()}function l(){u()}function i(){let I=o.search.fields??[],O=r.current?.value;if(O){let g=[...I,O];t({search:{...o.search,fields:g}})}}function u(){let I=o.search.fields??[],O=a.current?.value;if(O){let g=[...I];g.splice(g.indexOf(O),1),t({search:{...o.search,fields:g}})}}function d(){let I=o.search.fields??[],O=a.current?.value;if(!O)return;let g=[...I],M=g.indexOf(O);M<=0||(x(g,M,M-1),t({search:{...o.search,fields:g}}))}function c(){let I=o.search.fields??[],O=a.current?.value;if(!O)return;let g=[...I],M=g.indexOf(O);M>=g.length-1||(x(g,M,M+1),t({search:{...o.search,fields:g}}))}function x(I,O,g){let M=I[O];I[O]=I[g],I[g]=M}if(!e.visible)return null;let y=e.search.resourceType,k=Bx(y),T=Ax(y),B=o.search.fields??[],A=Ox(k,T).filter(I=>!B.includes(I)).sort((I,O)=>I.localeCompare(O));return J.createElement(kx,{title:"Fields",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},J.createElement("div",null,J.createElement("table",{style:{margin:"auto"}},J.createElement("thead",null,J.createElement("tr",null,J.createElement("th",{colSpan:2,align:"center"},"Available"),J.createElement("th",{colSpan:2,align:"center"},"Selected"))),J.createElement("tbody",null,J.createElement("tr",null,J.createElement("td",{colSpan:2,align:"center"},J.createElement("select",{ref:r,size:15,tabIndex:1,style:{width:"200px"},onKeyDown:I=>n(I),onDoubleClick:()=>f(),"data-testid":"available"},A.map(I=>J.createElement("option",{key:I,value:I},he(I))))),J.createElement("td",{colSpan:2,align:"center"},J.createElement("select",{ref:a,size:15,tabIndex:4,style:{width:"200px"},onKeyDown:I=>s(I),onDoubleClick:()=>l(),"data-testid":"selected"},B.map(I=>J.createElement("option",{key:I,value:I},he(I))))))),J.createElement("tfoot",null,J.createElement("tr",null,J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:i},"Add")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:u},"Remove")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:d},"Up")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:c},"Down")))))),J.createElement(ft,{onClick:()=>e.onOk(o.search)},"OK"))}function Ox(e,o){let t=[],r=new Set,a=new Set;for(let n of Object.keys(e.elements))t.push(n),r.add(n.toLowerCase()),a.add(he(n));if(o)for(let n of Object.keys(o)){let f=he(n);!r.has(n)&&!a.has(f)&&(t.push(n),r.add(n),a.add(he(n)))}return t}import{Button as st,Group as Gx,Modal as Ux,NativeSelect as $l}from"@mantine/core";import{getSearchParameters as Qx,stringify as jl}from"@medplum/core";import R,{useEffect as zx,useRef as Zl,useState as La}from"react";import{formatDateTime as Ex,getSearchParameterDetails as Lx,globalSchema as Rx,Operator as Kl,SearchParameterType as Nx}from"@medplum/core";import lt from"react";function Zt(e){let{resourceType:o,filter:t}=e,r=Rx.types[o].searchParams?.[t.code];if(r){if(r.type==="reference"&&(t.operator===Kl.EQUALS||t.operator===Kl.NOT_EQUALS))return lt.createElement(Ee,{value:{reference:t.value}});let a=Lx(o,r);if(t.code==="_lastUpdated"||a.type===Nx.DATETIME)return lt.createElement(lt.Fragment,null,Ex(t.value))}return lt.createElement(lt.Fragment,null,t.value)}import{Checkbox as Hx,TextInput as Ea}from"@mantine/core";import{getSearchParameterDetails as Vx,SearchParameterType as No}from"@medplum/core";import io from"react";function Yt(e){let o=Vx(e.resourceType,e.searchParam),t="filter-value";switch(o.type){case No.REFERENCE:return io.createElement(wo,{name:t,defaultValue:e.defaultValue?{reference:e.defaultValue}:void 0,targetTypes:e.searchParam.target,autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(r.reference):e.onChange("")}});case No.BOOLEAN:return io.createElement(Hx,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultChecked:e.defaultValue==="true",autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.checked.toString())});case No.DATE:return io.createElement(Ea,{type:"date",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case No.DATETIME:return io.createElement(Me,{name:t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:e.onChange});case No.NUMBER:return io.createElement(Ea,{type:"number",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case No.QUANTITY:return io.createElement(Pe,{name:t,defaultValue:qx(e.defaultValue),autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(`${r.value}`):e.onChange("")}});default:return io.createElement(Ea,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value),placeholder:"Search value"})}}function qx(e){if(e){let[o,t,r]=e.split("|");if(o)return{value:parseFloat(o),system:t,unit:r}}}function Yl(e){let[o,t]=La(JSON.parse(jl(e.search))),[r,a]=La(-1),n=Zl(o);n.current=o,zx(()=>{t(JSON.parse(jl(e.search)))},[e.search]);function f(u){t(Ro(n.current,u.code,u.operator,u.value))}if(!e.visible)return null;let s=e.search.resourceType,l=Qx(s)??{},i=o.filters||[];return R.createElement(Ux,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:e.visible,onClose:e.onCancel},R.createElement("div",null,R.createElement("table",null,R.createElement("colgroup",null,R.createElement("col",{style:{width:200}}),R.createElement("col",{style:{width:200}}),R.createElement("col",{style:{width:380}}),R.createElement("col",{style:{width:120}})),R.createElement("thead",null,R.createElement("tr",null,R.createElement("th",null,"Field"),R.createElement("th",null,"Operation"),R.createElement("th",null,"Value"),R.createElement("th",null,"Actions"))),R.createElement("tbody",null,i.map((u,d)=>d===r?R.createElement(_l,{key:`filter-${u.code}-${u.operator}-${u.value}-input`,resourceType:s,searchParams:l,defaultValue:u,okText:"Save",onOk:c=>{let x=[...i];x[d]=c,t(at(n.current,x)),a(-1)},onCancel:()=>a(-1)}):R.createElement(Wx,{key:`filter-${u.code}-${u.operator}-${u.value}-display`,resourceType:s,searchParams:l,filter:u,onEdit:()=>a(d),onDelete:()=>t(Ol(n.current,d))})),R.createElement(_l,{resourceType:s,searchParams:l,okText:"Add",onOk:f})))),R.createElement(Gx,{position:"right",mt:"xl"},R.createElement(st,{onClick:()=>e.onOk(n.current)},"OK")))}function Wx(e){let{filter:o}=e;return R.createElement("tr",null,R.createElement("td",null,he(o.code)),R.createElement("td",null,nt(o.operator)),R.createElement("td",null,R.createElement(Zt,{resourceType:e.resourceType,filter:o})),R.createElement("td",null,R.createElement(st,{compact:!0,variant:"outline",onClick:e.onEdit},"Edit"),R.createElement(st,{compact:!0,variant:"outline",onClick:e.onDelete},"Delete")))}function _l(e){let[o,t]=La(e.defaultValue??{}),r=Zl(o);r.current=o;function a(i){t({...r.current,code:i})}function n(i){t({...r.current,operator:i})}function f(i){t({...r.current,value:i})}let s=e.searchParams[o.code],l=s&&zl(s);return R.createElement("tr",null,R.createElement("td",null,R.createElement($l,{"data-testid":"filter-field",defaultValue:r.current.code,onChange:i=>a(i.currentTarget.value),data:["",...Object.keys(e.searchParams).map(i=>({value:i,label:he(i)}))]})),R.createElement("td",null,l&&R.createElement($l,{"data-testid":"filter-operation",defaultValue:o.operator,onChange:i=>n(i.currentTarget.value),data:["",...l.map(i=>({value:i,label:nt(i)}))]})),R.createElement("td",null,s&&o.operator&&R.createElement(Yt,{resourceType:e.resourceType,searchParam:s,defaultValue:o.value,onChange:f})),R.createElement("td",null,o.code&&o.operator&&R.createElement(st,{compact:!0,variant:"outline",onClick:()=>{e.onOk(r.current),t({})}},e.okText),e.onCancel&&R.createElement(st,{compact:!0,variant:"outline",onClick:e.onCancel},"Cancel")))}import{Button as Xx,Grid as Ra,Modal as Jx}from"@mantine/core";import uo,{useState as Kx}from"react";function es(e){let[o,t]=Kx(e.defaultValue??"");if(!e.visible||!e.searchParam||!e.filter)return null;function r(){e.onOk({...e.filter,value:o})}return uo.createElement(Jx,{title:e.title,size:"xl",opened:e.visible,onClose:e.onCancel},uo.createElement(K,{onSubmit:r},uo.createElement(Ra,null,uo.createElement(Ra.Col,{span:10},uo.createElement(Yt,{resourceType:e.resourceType,searchParam:e.searchParam,defaultValue:o,autoFocus:!0,onChange:t})),uo.createElement(Ra.Col,{span:2},uo.createElement(Xx,{onClick:r,fullWidth:!0},"OK")))))}import{Menu as F}from"@mantine/core";import{Operator as de}from"@medplum/core";import m from"react";function os(e){if(!e.searchParams)return null;function o(n,f){a(Oa(e.search,n.code,f))}function t(n){a(_t(e.search,n.code))}function r(n,f){e.onPrompt(n,{code:n.code,operator:f,value:""})}function a(n){e.onChange(n)}return e.searchParams.length===1?m.createElement($x,{search:e.search,searchParam:e.searchParams[0],onSort:o,onPrompt:r,onChange:a,onClear:t}):m.createElement(F.Dropdown,null,e.searchParams.map(n=>m.createElement(F.Item,{key:n.code},he(n.code))))}function $x(e){switch(e.searchParam.type){case"date":return m.createElement(jx,{...e});case"number":case"quantity":return m.createElement(_x,{...e});case"reference":return m.createElement(Zx,{...e});case"string":case"token":case"uri":return m.createElement(Yx,{...e});default:return m.createElement(m.Fragment,null,"Unknown search param type: ",e.searchParam.type)}}function jx(e){let{searchParam:o}=e,t=o.code;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort Oldest to Newest"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Newest to Oldest"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT_EQUALS)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(It,{size:14}),onClick:()=>e.onPrompt(o,de.ENDS_BEFORE)},"Before..."),m.createElement(F.Item,{icon:m.createElement(xt,{size:14}),onClick:()=>e.onPrompt(o,de.STARTS_AFTER)},"After..."),m.createElement(F.Item,{icon:m.createElement(Tr,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Between..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Rl(e.search,t))},"Tomorrow"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Ll(e.search,t))},"Today"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(El(e.search,t))},"Yesterday"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Vl(e.search,t))},"Next Month"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Hl(e.search,t))},"This Month"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Nl(e.search,t))},"Last Month"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(ql(e.search,t))},"Year to date"),m.createElement(er,{...e}))}function _x(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort Smallest to Largest"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Largest to Smallest"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT_EQUALS)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(xt,{size:14}),onClick:()=>e.onPrompt(o,de.GREATER_THAN)},"Greater than..."),m.createElement(F.Item,{icon:m.createElement(go,{size:14}),onClick:()=>e.onPrompt(o,de.GREATER_THAN_OR_EQUALS)},"Greater than or equal to..."),m.createElement(F.Item,{icon:m.createElement(It,{size:14}),onClick:()=>e.onPrompt(o,de.LESS_THAN)},"Less than..."),m.createElement(F.Item,{icon:m.createElement(go,{size:14}),onClick:()=>e.onPrompt(o,de.LESS_THAN_OR_EQUALS)},"Less than or equal to..."),m.createElement(er,{...e}))}function Zx(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT)},"Does not equal..."),m.createElement(er,{...e}))}function Yx(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort A to Z"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Z to A"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(kr,{size:14}),onClick:()=>e.onPrompt(o,de.CONTAINS)},"Contains..."),m.createElement(F.Item,{icon:m.createElement(Dr,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Does not contain..."),m.createElement(er,{...e}))}function er(e){let{searchParam:o}=e,t=o.code;return m.createElement(m.Fragment,null,m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(br,{size:14}),onClick:()=>e.onChange(wa(e.search,t))},"Missing"),m.createElement(F.Item,{icon:m.createElement(Sr,{size:14}),onClick:()=>e.onChange(wa(e.search,t,!1))},"Not missing"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement($r,{size:14}),onClick:()=>e.onClear(o)},"Clear filters"))}import{getElementDefinition as eI,getSearchParameter as oI,getSearchParameterDetails as tI,getSearchParameters as rI}from"@medplum/core";function ts(e){let o=e.resourceType,t=[];for(let r of e.fields||["id","_lastUpdated"])t.push(aI(o,r));return t}function aI(e,o){if(o==="_lastUpdated")return{name:"_lastUpdated",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_lastUpdated",name:"_lastUpdated",type:"date",expression:"Resource.meta.lastUpdated"}]};if(o==="meta.versionId")return{name:"meta.versionId",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_versionId",name:"_versionId",type:"token",expression:"Resource.meta.versionId"}]};let t=eI(e,o),r=oI(e,o.toLowerCase());if(t&&r)return{name:o,elementDefinition:t,searchParams:[r]};if(t){let a=rI(e),n;if(a){let f=`${e}.${o.replaceAll("[x]","")}`;n=Object.values(a).filter(s=>s.expression?.includes(f)),n.length===0&&(n=void 0)}return{name:o,elementDefinition:t,searchParams:n}}if(r){let a=tI(e,r);return{name:o,elementDefinition:a.elementDefinitions?.[0],searchParams:[r]}}return{name:o}}var Va=class extends Event{constructor(t){super("change");this.definition=t}},qa=class extends Event{constructor(t){super("load");this.response=t}},co=class extends Event{constructor(t,r){super("click");this.resource=t,this.browserEvent=r}},mI=fI(e=>({root:{maxWidth:"100%",overflow:"auto",textAlign:"left",marginBottom:"20px"},table:{cursor:"pointer"},tr:{"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.colors.gray[0]}},th:{padding:"0 !important"},control:{width:"100%",padding:`${e.spacing.xs} ${e.spacing.md}`,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0]}},icon:{width:21,height:21,borderRadius:21}}));function pI(e){let{classes:o}=mI(),t=v(),[r,a]=Ha(!1),[n,f]=Ha(),{search:s,onLoad:l}=e,[i,u]=Ha({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),d=cI(i);d.current=i;let c=s.total??"accurate",x=as(b=>{f(void 0),t.search(s.resourceType,dI({...s,total:c,fields:void 0}),b).then(W=>{u({...d.current,searchResponse:W}),l&&l(new qa(W))}).catch(W=>{u({...d.current,searchResponse:void 0}),f(W)})},[t,s,c,l]),y=as(()=>{u({...d.current,searchResponse:void 0}),x({cache:"reload"})},[x]);ns(()=>{x()},[x]);function k(b,W){b.stopPropagation();let fe=b.target.checked,te={...d.current.selected};fe?te[W]=!0:delete te[W],u({...d.current,selected:te})}function T(b){b.stopPropagation();let Re=b.target.checked,fe={},te=d.current.searchResponse;Re&&te?.entry&&te.entry.forEach(be=>{be.resource?.id&&(fe[be.resource.id]=!0)}),u({...d.current,selected:fe})}function B(){let b=d.current;if(!b.searchResponse?.entry||b.searchResponse.entry.length===0)return!1;for(let W of b.searchResponse.entry)if(W.resource?.id&&!b.selected[W.resource.id])return!1;return!0}function A(b){e.onChange&&e.onChange(new Va(b))}function I(b,W){if(ht(b.target)||b.button===2)return;H(b);let Re=b.button===1||b.ctrlKey||b.metaKey;!Re&&e.onClick&&e.onClick(new co(W,b)),Re&&e.onAuxClick&&e.onAuxClick(new co(W,b))}function O(){return!!(e.onExport??e.onExportCsv??e.onExportTransactionBundle)}if(ns(()=>{a(!1),t.requestSchema(e.search.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.search.resourceType]),!r)return S.createElement(or,{style:{width:"100%",height:"100%"}},S.createElement(lI,null));let g=e.checkboxesEnabled,M=ts(s),Y=s.resourceType,ne=i.searchResponse,oo=ne?.entry?.map(b=>b.resource),C="subtle",N="gray",ke=16,Se=window.innerWidth<768;return S.createElement("div",{className:o.root,"data-testid":"search-control"},!e.hideToolbar&&S.createElement(tr,{position:"apart",mb:"xl"},S.createElement(tr,{spacing:2},S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Fr,{size:ke}),onClick:()=>u({...d.current,fieldEditorVisible:!0})},"Fields"),S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Nr,{size:ke}),onClick:()=>u({...d.current,filterEditorVisible:!0})},"Filters"),e.onNew&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Rr,{size:ke}),onClick:e.onNew},"New..."),!Se&&O()&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Kr,{size:ke}),onClick:e.onExport?e.onExport:()=>u({...d.current,exportDialogVisible:!0})},"Export..."),!Se&&e.onDelete&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Ko,{size:ke}),onClick:()=>e.onDelete(Object.keys(i.selected))},"Delete..."),!Se&&e.onBulk&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Pr,{size:ke}),onClick:()=>e.onBulk(Object.keys(i.selected))},"Bulk...")),S.createElement(tr,{spacing:2},ne&&S.createElement(Na,{size:"xs",color:"dimmed"},hI(s,ne.total),"-",CI(s,ne.total)," of"," ",`${c==="estimate"?"~":""}${ne.total?.toLocaleString()}`),S.createElement(nI,{title:"Refresh",onClick:y},S.createElement(zr,{size:"1.125rem"})))),S.createElement(iI,{className:o.table},S.createElement("thead",null,S.createElement("tr",null,g&&S.createElement("th",null,S.createElement("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:B(),onChange:b=>T(b)})),M.map(b=>S.createElement("th",{key:b.name},S.createElement(rs,{shadow:"md",width:240,position:"bottom-end"},S.createElement(rs.Target,null,S.createElement(uI,{className:o.control},S.createElement(tr,{position:"apart",noWrap:!0},S.createElement(Na,{weight:500,size:"sm"},he(b.name)),S.createElement(or,{className:o.icon},S.createElement(Cr,{size:14,stroke:1.5}))))),S.createElement(os,{search:e.search,searchParams:b.searchParams,onPrompt:(W,Re)=>{u({...d.current,filterDialogVisible:!0,filterDialogSearchParam:W,filterDialogFilter:Re})},onChange:W=>{A(W)}}))))),!e.hideFilters&&S.createElement("tr",null,g&&S.createElement("th",null),M.map(b=>S.createElement("th",{key:b.name},b.searchParams&&S.createElement(xI,{resourceType:Y,searchParams:b.searchParams,filters:e.search.filters}))))),S.createElement("tbody",null,oo?.map(b=>b&&S.createElement("tr",{key:b.id,className:o.tr,"data-testid":"search-control-row",onClick:W=>I(W,b),onAuxClick:W=>I(W,b)},g&&S.createElement("td",null,S.createElement("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${b.id}`,checked:!!i.selected[b.id],onChange:W=>k(W,b.id)})),M.map(W=>S.createElement("td",{key:W.name},Wl(b,W))))))),oo?.length===0&&S.createElement($e,null,S.createElement(or,{style:{height:150}},S.createElement(Na,{size:"xl",color:"dimmed"},"No results"))),ne?.total!==void 0&&ne.total>0&&S.createElement(or,{m:"md",p:"md"},S.createElement(sI,{value:II(s),total:gI(s,ne.total),onChange:b=>A(Gl(s,b)),getControlProps:b=>{switch(b){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})),n&&S.createElement("div",{"data-testid":"search-error"},S.createElement("pre",{style:{textAlign:"left"}},JSON.stringify(n,void 0,2))),S.createElement(Jl,{search:e.search,visible:d.current.fieldEditorVisible,onOk:b=>{A(b),u({...d.current,fieldEditorVisible:!1})},onCancel:()=>{u({...d.current,fieldEditorVisible:!1})}}),S.createElement(Yl,{search:e.search,visible:d.current.filterEditorVisible,onOk:b=>{A(b),u({...d.current,filterEditorVisible:!1})},onCancel:()=>{u({...d.current,filterEditorVisible:!1})}}),S.createElement(Ml,{visible:d.current.exportDialogVisible,exportCsv:e.onExportCsv,exportTransactionBundle:e.onExportTransactionBundle,onCancel:()=>{u({...d.current,exportDialogVisible:!1})}}),S.createElement(es,{key:i.filterDialogSearchParam?.code,visible:d.current.filterDialogVisible,title:i.filterDialogSearchParam?.code?he(i.filterDialogSearchParam.code):"",resourceType:Y,searchParam:i.filterDialogSearchParam,filter:i.filterDialogFilter,defaultValue:"",onOk:b=>{A(Ro(e.search,b.code,b.operator,b.value)),u({...d.current,filterDialogVisible:!1})},onCancel:()=>{u({...d.current,filterDialogVisible:!1})}}))}var jw=S.memo(pI);function xI(e){let o=(e.filters??[]).filter(t=>e.searchParams.find(r=>r.code===t.code));return o.length===0?S.createElement("span",null,"no filters"):S.createElement(S.Fragment,null,o.map(t=>S.createElement("div",{key:`filter-${t.code}-${t.operator}-${t.value}`},nt(t.operator),"\xA0",S.createElement(Zt,{resourceType:e.resourceType,filter:t}))))}function II(e){return Math.floor((e.offset??0)/(e.count??Ga))+1}function gI(e,o){let t=e.count??Ga;return Math.ceil(o/t)}function hI(e,o){return Math.min(o,(e.offset??0)+1)}function CI(e,o){return Math.min(o,((e.offset??0)+1)*(e.count??Ga))}function PI(e){let o=v(),[t,r]=rr(!1),[a,n]=rr(),{query:f,fields:s}=e,[l,i]=rr(),[u,d]=rr({}),c=ls();c.current=l;let x=ls({});x.current=u,fs(()=>{n(void 0),o.graphql(f).then(i).catch(I=>n(bI(I)))},[o,f]);function y(I,O){I.stopPropagation();let M=I.target.checked,Y={...x.current};M?Y[O]=!0:delete Y[O],d(Y)}function k(I){I.stopPropagation();let g=I.target.checked,M={},Y=c.current?.data.ResourceList;g&&Y&&Y.forEach(ne=>{ne.id&&(M[ne.id]=!0)}),d(M)}function T(){let I=c.current?.data.ResourceList;if(!I||I.length===0)return!1;for(let O of I)if(O.id&&!x.current[O.id])return!1;return!0}function B(I,O){ht(I.target)||(H(I),I.button!==1&&e.onClick&&e.onClick(new co(O,I)),I.button===1&&e.onAuxClick&&e.onAuxClick(new co(O,I)))}if(fs(()=>{o.requestSchema(e.resourceType).then(()=>r(!0)).catch(console.log)},[o,e.resourceType]),!t)return ae.createElement(vI,null);let A=e.checkboxesEnabled;return ae.createElement("div",{onContextMenu:I=>H(I),"data-testid":"search-control"},ae.createElement(SI,null,ae.createElement("thead",null,ae.createElement("tr",null,A&&ae.createElement("th",null,ae.createElement("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:T(),onChange:I=>k(I)})),s.map(I=>ae.createElement("th",{key:I.name},I.name)))),ae.createElement("tbody",null,l?.data.ResourceList.map(I=>I&&ae.createElement("tr",{key:I.id,"data-testid":"search-control-row",onClick:O=>B(O,I),onAuxClick:O=>B(O,I)},A&&ae.createElement("td",null,ae.createElement("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${I.id}`,checked:!!u[I.id],onChange:O=>y(O,I.id)})),s.map(O=>ae.createElement("td",{key:O.name},ae.createElement(Al,{propertyType:O.propertyType,path:O.fhirPath,resource:I}))))))),l?.data.ResourceList.length===0&&ae.createElement("div",{"data-testid":"empty-search"},"No results"),a&&ae.createElement("div",{"data-testid":"search-error"},ae.createElement("pre",{style:{textAlign:"left"}},JSON.stringify(a,void 0,2))),e.onBulk&&ae.createElement(yI,{onClick:()=>e.onBulk(Object.keys(x.current))},"Bulk..."))}var nO=ae.memo(PI);import{showNotification as TI}from"@mantine/notifications";import DI,{useEffect as ss,useMemo as kI,useState as BI}from"react";function dO(e){let o=e.medplum,t=e.navigate??AI,[r,a]=BI({profile:o.getProfile(),loading:!1});ss(()=>{function f(){a({...r,profile:o.getProfile()})}return o.addEventListener("change",f),()=>o.removeEventListener("change",f)},[o,r]),ss(()=>{function f(){TI({color:"red",message:"No connection to server",autoClose:!1})}return o.addEventListener("offline",f),()=>o.removeEventListener("offline",f)},[o]);let n=kI(()=>({...r,medplum:o,navigate:t}),[r,o,t]);return DI.createElement(hr.Provider,{value:n},e.children)}function AI(e){window.location.assign(e)}import{createReference as ar}from"@medplum/core";import FI,{useCallback as MI}from"react";function hO(e){let o=MI((t,r,a)=>{let n=`${r}/${a}`,f=100;return Promise.allSettled([t.readHistory("Patient",a),t.search("Communication",{subject:n,_count:f}),t.search("Device",{patient:n,_count:f}),t.search("DeviceRequest",{patient:n,_count:f}),t.search("DiagnosticReport",{subject:n,_count:f}),t.search("Media",{subject:n,_count:f}),t.search("ServiceRequest",{subject:n,_count:f}),t.search("Task",{subject:n,_count:f})])},[]);return FI.createElement(Ye,{value:e.patient,loadTimelineResources:o,createCommunication:(t,r,a)=>({resourceType:"Communication",status:"completed",subject:ar(t),sender:ar(r),sent:new Date().toISOString(),payload:[{contentString:a}]}),createMedia:(t,r,a)=>({resourceType:"Media",status:"completed",subject:ar(t),operator:ar(r),issued:new Date().toISOString(),content:a})})}import{Anchor as us,Button as wI,createStyles as OI,NativeSelect as EI,Stack as LI,TextInput as Qa}from"@mantine/core";import{getReferenceString as RI}from"@medplum/core";import q,{useEffect as is,useRef as ds,useState as it}from"react";var cs=OI(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}}}));function LO(e){let o=v(),t=X(e.value),[r,a]=it(!1),[n,f]=it(),[s,l]=it(),[i,u]=it();function d(){l(void 0)}function c(){f(void 0)}let x=ds();if(x.current=i,is(()=>{o.requestSchema("PlanDefinition").then(()=>a(!0)).catch(console.log)},[o]),is(()=>(u(UI(t??{resourceType:"PlanDefinition"})),document.addEventListener("mouseover",d),document.addEventListener("click",c),()=>{document.removeEventListener("mouseover",d),document.removeEventListener("click",c)}),[t]),!r||!i)return null;function y(k,T){u({...x.current,[k]:T})}return q.createElement("div",null,q.createElement(K,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(i)},q.createElement(Qa,{label:"Plan Title",defaultValue:i.title,onChange:k=>y("title",k.currentTarget.value)}),q.createElement(ms,{actions:i.action||[],selectedKey:n,setSelectedKey:f,hoverKey:s,setHoverKey:l,onChange:k=>y("action",k)}),q.createElement(wI,{type:"submit"},"Save")))}function ms(e){let{classes:o}=cs(),t=ds();t.current=e.actions;function r(f){e.onChange(t.current.map(s=>s.id===f.id?f:s))}function a(f){e.onChange([...t.current,f]),e.setSelectedKey(f.id)}function n(f){e.onChange(t.current.filter(s=>s!==f))}return q.createElement("div",{className:o.section},e.actions.map(f=>q.createElement("div",{key:f.id},q.createElement(NI,{action:f,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:r,onRemove:()=>n(f)}))),q.createElement("div",{className:o.bottomActions},q.createElement(us,{href:"#",onClick:f=>{H(f),a({id:xs()})}},"Add action")))}function NI(e){let{classes:o,cx:t}=cs(),{action:r}=e,a=GI(r),n=e.selectedKey===e.action.id,f=e.hoverKey===e.action.id;function s(u){u.stopPropagation(),e.setSelectedKey(e.action.id)}function l(u){H(u),e.setHoverKey(e.action.id)}let i=t(o.section,{[o.editing]:n,[o.hovering]:f&&!n});return q.createElement("div",{"data-testid":r.id,className:i,onClick:s,onMouseOver:l},n?q.createElement(VI,{action:r,actionType:a,onChange:e.onChange,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onRemove:e.onRemove}):q.createElement(HI,{action:r,actionType:a}),q.createElement("div",{className:o.bottomActions},q.createElement(us,{href:"#",onClick:u=>{u.preventDefault(),e.onRemove()}},"Remove")))}var za={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(e=>({code:e}))};function HI(e){let{action:o,actionType:t}=e,[r,a]=ps(o);return q.createElement("div",null,q.createElement("div",null,o.title||"Untitled"," ",t&&`(${t})`),o.definitionCanonical&&q.createElement("div",null,q.createElement(lo,{value:{reference:o.definitionCanonical}})),r&&q.createElement("div",null,q.createElement(pe,{property:za,propertyType:a,value:r})))}function VI(e){let{action:o}=e,[t,r]=it(e.actionType);function a(n,f){e.onChange({...o,[n]:f})}return q.createElement(LI,{spacing:"xl"},q.createElement(Qa,{name:`actionTitle-${o.id}`,label:"Title",defaultValue:o.title,onChange:n=>a("title",n.currentTarget.value)}),q.createElement(Qa,{name:`actionDescription-${o.id}`,label:"Description",defaultValue:o.description,onChange:n=>a("description",n.currentTarget.value)}),q.createElement(EI,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${o.id}`,defaultValue:t,onChange:n=>r(n.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),o.action&&o.action.length>0&&q.createElement(ms,{actions:o.action,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:n=>a("action",n)}),(()=>{switch(t){case"appointment":return q.createElement(nr,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action:o,onChange:e.onChange});case"lab":return q.createElement(nr,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});case"questionnaire":return q.createElement(nr,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action:o,onChange:e.onChange});case"task":return q.createElement(nr,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});default:return null}})(),q.createElement(ve,{title:"Timing",description:"When the action should take place."},q.createElement(qI,{name:"timing-"+o.id,action:o,onChange:e.onChange})))}function nr(e){let{id:o,definitionCanonical:t}=e.action,r=t?.startsWith(e.resourceType+"/")?{reference:t}:void 0;return q.createElement(Ut,{name:o,resourceType:e.resourceType,defaultValue:r,loadOnFocus:!0,onChange:a=>{a?e.onChange({...e.action,definitionCanonical:RI(a)}):e.onChange({...e.action,definitionCanonical:void 0})}})}function qI(e){let o=e.action,t="timing",[r,a]=ps(o);return q.createElement(qe,{property:za,name:"timing[x]",defaultValue:r,defaultPropertyType:a,onChange:(n,f)=>{e.onChange(et(o,t,f??t,za,n))}})}function GI(e){if(e.definitionCanonical?.startsWith("Schedule"))return"appointment";if(e.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(e.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function ps(e){return ye({type:"PlanDefinitionAction",value:e},"timing")}var Ua=1;function xs(e){if(e){if(e.startsWith("id-")){let o=parseInt(e.substring(3),10);isNaN(o)||(Ua=Math.max(Ua,o+1))}return e}return"id-"+Ua++}function UI(e){return{...e,action:Is(e.action)}}function Is(e){if(e)return e.map(o=>({...o,id:xs(o.id),action:Is(o.action)}))}import{Anchor as De,Box as _a,Button as ig,createStyles as ug,Group as dg,NativeSelect as cg,Space as mg,Textarea as pg,TextInput as Za,Title as xg}from"@mantine/core";import{getElementDefinition as Ig,isResource as gg}from"@medplum/core";import P,{useEffect as Ds,useRef as hg,useState as ur}from"react";import{Checkbox as KI,Group as $I,MultiSelect as jI,NativeSelect as _I,Radio as Ss,Textarea as ZI,TextInput as ut}from"@mantine/core";import{capitalize as Ja,deepEquals as YI,formatCoding as Ka,getElementDefinition as eg,getTypedPropertyValue as Ue,stringify as bs}from"@medplum/core";import Z from"react";import{deepClone as QI,evalFhirPathTyped as zI,formatCoding as WI,getExtension as gs,getTypedPropertyValue as Wa}from"@medplum/core";var fr=(B=>(B.group="group",B.display="display",B.question="question",B.boolean="boolean",B.decimal="decimal",B.integer="integer",B.date="date",B.dateTime="dateTime",B.time="time",B.string="string",B.text="text",B.url="url",B.choice="choice",B.openChoice="open-choice",B.attachment="attachment",B.reference="reference",B.quantity="quantity",B))(fr||{});function hs(e){return e.type==="choice"||e.type==="open-choice"}function Cs(e,o){if(!e.enableWhen)return!0;let t=e.enableBehavior??"any";for(let r of e.enableWhen){let a=vs(o,r.question);if(r.operator==="exists"&&!r.answerBoolean&&!a?.length){if(t==="any")return!0;continue}let{anyMatch:n,allMatch:f}=JI(r,a,t);if(t==="any"&&n)return!0;if(t==="all"&&!f)return!1}return t!=="any"}function ys(e,o,t){return e.map(r=>{let a=t.answerOption?.find(f=>WI(f.valueCoding)===r||f[o]===r),n=Wa({type:"QuestionnaireItemAnswerOption",value:a},"value");return{[o]:n?.value}})}function vs(e,o){if(e)for(let t of e){if(t.linkId===o)return t.answer;if(t.item){let r=vs(t.item,o);if(r)return r}}}function XI(e,o,t){if(t==="exists")return!!e===o.value;if(e){let r=t==="="||t==="!="?t?.replace("=","~"):t,[{value:a}]=zI(`%actualAnswer ${r} %expectedAnswer`,[e],{actualAnswer:e,expectedAnswer:o});return a}else return!1}function JI(e,o,t){let r=o||[],a=Wa({type:"QuestionnaireItemEnableWhen",value:e},"answer[x]"),n=!1,f=!0;for(let s of r){let l=Wa({type:"QuestionnaireResponseItemAnswer",value:s},"value[x]"),{operator:i}=e;if(XI(l,a,i)?n=!0:f=!1,t==="any"&&n)break}return{anyMatch:n,allMatch:f}}function lr(e){let o=gs(e,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(o){if(o.valueCode!==void 0)return[o.valueCode];if(o.valueCodeableConcept)return o.valueCodeableConcept?.coding?.map(t=>t.code)}}function sr(e,o){let t=QI(e),r=gs(t,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!o||o.length===0?(r&&(t.extension=t.extension?.filter(a=>a!==r)),t):(r||(t.extension||(t.extension=[]),r={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},t.extension.push(r)),o.length===1?(r.valueCode=o[0],delete r.valueCodeableConcept):(r.valueCodeableConcept={coding:o.map(a=>({code:a}))},delete r.valueCode),t)}function ir(e){let o=e.item,t=e.index;function r(l,i){let u=i??0,d=e.currentResponseItems?.filter(x=>x.linkId===o.linkId)??[],c;Array.isArray(l)?c=l:c=ag(d[0]?.answer??[],u,l),e.onChange({id:d[0].id,linkId:o.linkId,text:o.text,answer:c})}let a=o.type;if(!a)return null;let n=o.linkId;if(!n)return null;let f=o.initial&&o.initial.length>0?o.initial[0]:void 0,s=ja(e.allResponses,o,e.index,e.groupSequence)??Ue({type:"QuestionnaireItemInitial",value:f},"value");switch(a){case"boolean":return Z.createElement(Rt,{key:e.item.linkId,title:e.item.text,htmlFor:e.item.linkId},Z.createElement(KI,{id:e.item.linkId,name:e.item.linkId,defaultChecked:s?.value,onChange:l=>r({valueBoolean:l.currentTarget.checked},t)}));case"decimal":return Z.createElement(ut,{type:"number",step:"any",id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueDecimal:l.currentTarget.valueAsNumber},t)});case"integer":return Z.createElement(ut,{type:"number",step:1,id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueInteger:l.currentTarget.valueAsNumber},t)});case"date":return Z.createElement(ut,{type:"date",id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueDate:l.currentTarget.value},t)});case"dateTime":return Z.createElement(Me,{name:n,defaultValue:s?.value,onChange:l=>r({valueDateTime:l},t)});case"time":return Z.createElement(ut,{type:"time",id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueTime:l.currentTarget.value},t)});case"string":case"url":return Z.createElement(ut,{id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueString:l.currentTarget.value},t)});case"text":return Z.createElement(ZI,{id:n,name:n,defaultValue:s?.value,onChange:l=>r({valueString:l.currentTarget.value},t)});case"attachment":return Z.createElement($I,{py:4},Z.createElement(vt,{name:n,defaultValue:s?.value,onChange:l=>r({valueAttachment:l},t)}));case"reference":return Z.createElement(wo,{name:n,targetTypes:lr(o),defaultValue:s?.value,onChange:l=>r({valueReference:l},t)});case"quantity":return Z.createElement(Pe,{name:n,defaultValue:s?.value,onChange:l=>r({valueQuantity:l},t),disableWheel:!0});case"choice":case"open-choice":return ng(o)?Z.createElement(og,{name:n,item:o,initial:f,allResponses:e.allResponses,index:t,groupSequence:e.groupSequence,onChangeAnswer:l=>r(l,t)}):Z.createElement(tg,{name:n,item:o,initial:f,allResponses:e.allResponses,onChangeAnswer:l=>r(l,t)});default:return null}}function og(e){let{name:o,item:t,initial:r}=e,a=Ue({type:"QuestionnaireItemInitial",value:r},"value"),n=[""];if(t.answerOption)for(let s of t.answerOption){let l=Ue({type:"QuestionnaireItemAnswerOption",value:s},"value");n.push(Xa(l))}let f=ja(e.allResponses,t,e.index,e.groupSequence)??Ue({type:"QuestionnaireItemInitial",value:r},"value");if(t.repeats){let{propertyName:s,data:l}=fg(e.item),i=lg(e.allResponses,t,e.groupSequence);return Z.createElement(jI,{data:l,placeholder:"Select items",searchable:!0,defaultValue:i||[Xa(a)],onChange:u=>{let d=ys(u,s,t);e.onChangeAnswer(d)}})}return Z.createElement(_I,{id:o,name:o,onChange:s=>{let l=s.currentTarget.selectedIndex;if(l===0){e.onChangeAnswer({});return}let i=t.answerOption[l-1],u=Ue({type:"QuestionnaireItemAnswerOption",value:i},"value"),d="value"+Ja(u.type);e.onChangeAnswer({[d]:u.value})},defaultValue:(Ka(f?.value)||f?.value)??Xa(a),data:n})}function tg(e){let{name:o,item:t,initial:r,onChangeAnswer:a,allResponses:n}=e;return t.answerValueSet?Z.createElement(Nt,{name:o,binding:t.answerValueSet,onChange:f=>a({valueCoding:f})}):Z.createElement(rg,{name:o,item:t,initial:r,allResponses:n,onChangeAnswer:a})}function rg(e){let{name:o,item:t,initial:r,onChangeAnswer:a}=e,n=eg("QuestionnaireItemAnswerOption","value[x]"),f=Ue({type:"QuestionnaireItemInitial",value:r},"value"),s=[],l;if(t.answerOption)for(let d=0;d<t.answerOption.length;d++){let c=t.answerOption[d],x=`${o}-option-${d}`,y=Ue({type:"QuestionnaireItemAnswerOption",value:c},"value");f&&bs(y)===bs(f)&&(l=x),s.push([x,y])}let i=ja(e.allResponses,t,e.index,e.groupSequence),u=sg(s,i);return Z.createElement(Ss.Group,{name:o,value:u??l,onChange:d=>{let c=s.find(x=>x[0]===d);if(c){let x=c[1],y="value"+Ja(x.type);a({[y]:x.value})}}},s.map(([d,c])=>Z.createElement(Ss,{key:d,id:d,value:d,py:4,label:Z.createElement(pe,{property:n,propertyType:c.type,value:c.value})})))}function ag(e,o,t){if(o<e.length)return e[o]=t,e;for(let r=e.length;r<o;r++)e.push({});return e.push(t),e}function ng(e){return!!e.extension?.some(o=>o.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&o.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function fg(e){if(e.answerOption?.length===0)return{propertyName:"",data:[]};let o=e.answerOption[0],t=Ue({type:"QuestionnaireItemAnswerOption",value:o},"value"),r="value"+Ja(t.type),a=(e.answerOption??[]).map(n=>({value:Ps(n,r),label:Ps(n,r)}));return{propertyName:r,data:a}}function Ps(e,o){return Ka(e.valueCoding)||e[o]?.toString()}function Xa(e){if(e)return e.type==="CodeableConcept"?e.value.coding[0].display:e.type==="Coding"?e.value.display:e.value.toString()}function $a(e,o){let t=[];for(let r of e)r.linkId===o&&t.push(r),r.item&&(t=t.concat($a(r.item,o)));return t}function Ts(e){return Ue({type:"QuestionnaireItemAnswer",value:e},"value")}function ja(e,o,t=0,r=0){let n=$a(e,o.linkId??"")[r]?.answer;return Ts(n?.[t]??{})}function lg(e,o,t=0){let a=$a(e,o.linkId??"")[t]?.answer;return a?a.map(f=>Ts(f)).map(f=>Ka(f?.value)||f?.value):[]}function sg(e,o){return e.find(t=>YI(t[1].value,o?.value))?.[0]}var Cg=ug(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},questionBody:{maxWidth:600},topActions:{position:"absolute",right:32,top:1,padding:4,color:e.colors.gray[5],fontSize:e.fontSizes.xs},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementActions:{position:"absolute",right:8,top:0,paddingTop:8,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementIcons:{color:e.colors.gray[5]},columnAlignment:{display:"flex",flexDirection:"column"},linkIdInput:{width:100,marginBottom:4},typeSelect:{width:100}}));function m0(e){let o=v(),t=X(e.questionnaire),[r,a]=ur(!1),[n,f]=ur(),[s,l]=ur(),[i,u]=ur();function d(){u(void 0)}function c(){l(void 0)}return Ds(()=>{o.requestSchema("Questionnaire").then(()=>a(!0)).catch(console.log)},[o]),Ds(()=>(f(bg(t??{resourceType:"Questionnaire"})),document.addEventListener("mouseover",d),document.addEventListener("click",c),()=>{document.removeEventListener("mouseover",d),document.removeEventListener("click",c)}),[t]),!r||!n?null:P.createElement("div",null,P.createElement(K,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(n)},P.createElement(ks,{item:n,selectedKey:s,setSelectedKey:l,hoverKey:i,setHoverKey:u,onChange:f}),P.createElement(ig,{type:"submit"},"Save")))}function ks(e){let{classes:o,cx:t}=Cg(),r=e.item,a=e.item,n=gg(e.item),f=n||a.type==="group",s=a.linkId??"[untitled]",l=e.selectedKey===e.item.id,i=e.hoverKey===e.item.id,u=hg();u.current=e.item;function d(g){H(g),e.setSelectedKey(e.item.id)}function c(g){H(g),e.setHoverKey(e.item.id)}function x(g){let M=u.current;e.onChange({...M,item:M.item?.map(Y=>Y.id===g.id?g:Y)})}function y(g){e.onChange({...e.item,item:[...e.item.item??[],g]})}function k(g){e.onChange({...e.item,item:e.item.item?.filter(M=>M!==g)})}function T(g,M){e.onChange({...u.current,[g]:M})}function B(g){e.onChange({...e.item,...g})}function A(g){e.onChange({...e.item,item:e.item.item?.map(M=>M===g?{...M,repeats:!M.repeats}:M)})}function I(g,M){let Y=Dg(e.item.item,g,M);e.onChange({...e.item,item:Y})}let O=t(o.section,{[o.editing]:l,[o.hovering]:i&&!l});return P.createElement("div",{"data-testid":a.linkId,className:O,onClick:d,onMouseOver:c},P.createElement("div",{className:o.questionBody},l?P.createElement(P.Fragment,null,n&&P.createElement(Za,{size:"xl",defaultValue:r.title,onChange:g=>T("title",g.currentTarget.value)}),!n&&P.createElement(pg,{autosize:!0,minRows:2,defaultValue:a.text,onChange:g=>T("text",g.currentTarget.value)}),a.type==="reference"&&P.createElement(Sg,{item:a,onChange:B}),hs(a)&&P.createElement(yg,{item:a,onChange:g=>B(g)})):P.createElement(P.Fragment,null,r.title&&P.createElement(xg,null,r.title),a.text&&P.createElement("div",null,a.text),!f&&P.createElement(ir,{item:a,index:0,allResponses:[],onChange:()=>{}}))),a.item?.map((g,M)=>P.createElement("div",{key:g.id},P.createElement(ks,{item:g,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,isFirst:M===0,isLast:M===(e.item.item??[]).length-1,setHoverKey:e.setHoverKey,onChange:x,onRemove:()=>k(g),onRepeatable:A,onMoveUp:()=>I(M,-1),onMoveDown:()=>I(M,1)}))),!f&&P.createElement("div",{className:o.topActions},l?P.createElement(P.Fragment,null,P.createElement(Za,{size:"xs",className:o.linkIdInput,defaultValue:a.linkId,onChange:g=>T("linkId",g.currentTarget.value)}),!f&&P.createElement(cg,{size:"xs",className:o.typeSelect,defaultValue:a.type,onChange:g=>T("type",g.currentTarget.value),data:[{value:"display",label:"Display"},{value:"boolean",label:"Boolean"},{value:"decimal",label:"Decimal"},{value:"integer",label:"Integer"},{value:"date",label:"Date"},{value:"dateTime",label:"Date/Time"},{value:"time",label:"Time"},{value:"string",label:"String"},{value:"text",label:"Text"},{value:"url",label:"URL"},{value:"choice",label:"Choice"},{value:"open-choice",label:"Open Choice"},{value:"attachment",label:"Attachment"},{value:"reference",label:"Reference"},{value:"quantity",label:"Quantity"}]})):P.createElement("div",null,s)),!n&&P.createElement(_a,{className:o.movementActions},P.createElement(_a,{className:o.columnAlignment},!e.isFirst&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onMoveUp&&e.onMoveUp()}},P.createElement(vr,{"data-testid":"up-button",size:15,className:o.movementIcons})),!e.isLast&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onMoveDown&&e.onMoveDown()}},P.createElement(yr,{"data-testid":"down-button",size:15,className:o.movementIcons})))),P.createElement("div",{className:o.bottomActions},f&&P.createElement(P.Fragment,null,P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y({id:mo(),linkId:on("q"),type:"string",text:"Question"})}},"Add item"),P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y({id:mo(),linkId:on("g"),type:"group",text:"Group"})}},"Add group")),n&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y(Tg())}},"Add Page"),l&&!n&&P.createElement(P.Fragment,null,P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onRepeatable&&e.onRepeatable(a)}},a.repeats?"Remove Repeatable":"Make Repeatable"),P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onRemove&&e.onRemove()}},"Remove"))))}function yg(e){let o=Ig("QuestionnaireItemAnswerOption","value[x]"),t=e.item.answerOption??[];return P.createElement("div",null,e.item.answerValueSet!==void 0?P.createElement(Za,{placeholder:"Enter Value Set",defaultValue:e.item.answerValueSet,onChange:r=>e.onChange({...e.item,answerValueSet:r.target.value})}):P.createElement(vg,{options:t,property:o,item:e.item,onChange:e.onChange}),P.createElement(_a,{display:"flex"},P.createElement(De,{href:"#",onClick:r=>{H(r),e.onChange({...e.item,answerValueSet:void 0,answerOption:[...t,{id:mo()}]})}},"Add choice"),P.createElement(mg,{w:"lg"}),P.createElement(De,{href:"#",onClick:r=>{H(r),e.onChange({...e.item,answerOption:[],answerValueSet:""})}},"Add value set")))}function vg(e){return P.createElement("div",null,e.options.map(o=>{let[t,r]=ye({type:"QuestionnaireItemAnswerOption",value:o},"value");return P.createElement("div",{key:o.id,style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"}},P.createElement("div",null,P.createElement(qe,{key:o.id,name:"value[x]",property:e.property,defaultPropertyType:r,defaultValue:t,onChange:(a,n)=>{let f=[...e.options],s=f.findIndex(l=>l.id===o.id);f[s]={id:o.id,[n]:a},e.onChange({...e.item,answerOption:f})}})),P.createElement("div",null,P.createElement(De,{href:"#",onClick:a=>{H(a),e.onChange({...e.item,answerOption:e.options.filter(n=>n.id!==o.id)})}},"Remove")))}))}function Sg(e){let o=lr(e.item)??[];return P.createElement(P.Fragment,null,o.map((t,r)=>P.createElement(dg,{key:`${t}-${r}`},P.createElement(Po,{name:"resourceType",placeholder:"Resource Type",defaultValue:t,onChange:a=>{e.onChange(sr(e.item,o.map(n=>n===t?a:n)))}}),P.createElement(De,{href:"#",onClick:a=>{H(a),e.onChange(sr(e.item,o.filter(n=>n!==t)))}},"Remove"))),P.createElement(De,{href:"#",onClick:t=>{H(t),e.onChange(sr(e.item,[...o,""]))}},"Add Resource Type"))}var Ya=1,en=1;function on(e){return e+Ya++}function mo(){return"id-"+en++}function bg(e){return{...e,id:e.id||mo(),item:Bs(e.item)}}function Bs(e){if(e)return e.forEach(o=>{o.id?.match(/^id-\d+$/)&&(en=Math.max(en,parseInt(o.id.substring(3),10)+1)),o.linkId?.match(/^q\d+$/)&&(Ya=Math.max(Ya,parseInt(o.linkId.substring(1),10)+1))}),e.map(o=>({...o,id:o.id||mo(),item:Bs(o.item),answerOption:Pg(o.answerOption)}))}function Pg(e){if(e)return e.map(o=>({...o,id:o.id||mo()}))}function Tg(){return{id:mo(),linkId:on("s"),type:"group",text:"New Page",extension:[{url:"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",valueCodeableConcept:{coding:[{system:"http://hl7.org/fhir/questionnaire-item-control",code:"page"}]}}]}}function Dg(e,o,t){let r=e??[],a=o+t;if(a<0||a>=r.length)return r;let n=[...r];return[n[o],n[a]]=[n[a],n[o]],n}import{Anchor as ws,Button as tn,Group as kg,Stack as Bg,Stepper as As,Title as Os}from"@mantine/core";import{createReference as Ag,getExtension as Fg,getReferenceString as Es}from"@medplum/core";import Q,{useEffect as Fs,useState as Vo}from"react";function Ls(e){let o=v(),t=o.getProfile(),[r,a]=Vo(!1),n=X(e.questionnaire),[f,s]=Vo(),[l,i]=Vo(0);Fs(()=>{o.requestSchema("Questionnaire").then(()=>o.requestSchema("QuestionnaireResponse")).then(()=>a(!0)).catch(console.log)},[o]),Fs(()=>{s(n?wg(n):void 0)},[n]);function u(y){let k=f?.item??[],B={resourceType:"QuestionnaireResponse",item:Hs(k,y)};s(B)}if(!r||!n)return null;let d=Rg(n),c=()=>i(y=>y+1),x=()=>i(y=>y-1);return Q.createElement(K,{testid:"questionnaire-form",onSubmit:()=>{e.onSubmit&&f&&e.onSubmit({...f,questionnaire:Es(n),subject:e.subject,source:Ag(t),authored:new Date().toISOString(),status:"completed"})}},n.title&&Q.createElement(Os,null,n.title),n.item&&Q.createElement(Rs,{items:n.item??[],allResponses:f?.item??[],onChange:u,renderPages:d>1,activePage:l}),Q.createElement(Mg,{activePage:l,numberOfPages:d,nextStep:c,prevStep:x,submitButtonText:e.submitButtonText}))}function Rs(e){let[o,t]=Vo(an(e.items));function r(n,f){let s=o.some(i=>i.id===n),l;s?l=o.map(i=>i.id===n?f:i):l=[...o,f],t(l),e.onChange(l)}let a=e.items.map((n,f)=>e.renderPages?Q.createElement(As.Step,{label:n.text,key:n.linkId},Q.createElement(Ms,{key:`${n.linkId}-${f}`,item:n,index:f,allResponses:e.allResponses,currentResponseItems:o,groupSequence:e.groupSequence,setResponseItem:r})):Q.createElement(Ms,{key:`${n.linkId}-${f}`,item:n,index:f,groupSequence:e.groupSequence,allResponses:e.allResponses,currentResponseItems:o,setResponseItem:r}));return e.renderPages?Q.createElement(As,{active:e.activePage??0,allowNextStepsSelect:!1,p:6},a):Q.createElement(Bg,null,a)}function Ms(e){return Cs(e.item,e.allResponses)?e.item.type==="display"?Q.createElement("p",{key:e.item.linkId},e.item.text):e.item.type==="group"?Q.createElement(rn,{key:e.item.linkId,item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)}):e.item.type==="boolean"?Q.createElement(rn,{item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)}):Q.createElement(ve,{key:e.item.linkId,htmlFor:e.item.linkId,title:e.item.text},Q.createElement(rn,{item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)})):null}function rn(e){let o=e.item;function t(r,a){let n=a??0,f=e.currentResponseItems.filter(s=>s.linkId===o.linkId);e.onChange({id:Vg(f,n),linkId:o.linkId,text:o.text,item:r})}return o.type==="group"?Q.createElement(Ng,{key:e.item.linkId,text:o.text??"",item:o??[],allResponses:e.allResponses,onChange:t}):Q.createElement(Hg,{item:e.item,key:e.item.linkId},({index:r})=>Q.createElement(ir,{...e,index:r}))}function Mg(e){let o=e.activePage>0,t=e.activePage<e.numberOfPages-1,r=e.activePage===e.numberOfPages-1;return Q.createElement(kg,{position:"right",mt:"xl",spacing:"xs"},o&&Q.createElement(tn,{onClick:e.prevStep},"Back"),t&&Q.createElement(tn,{onClick:e.nextStep},"Next"),r&&Q.createElement(tn,{type:"submit"},e.submitButtonText??"Submit"))}function wg(e){return{resourceType:"QuestionnaireResponse",questionnaire:Es(e),item:an(e.item)}}function an(e){return e?.map(Og)??[]}function Og(e){return{id:Ns(),linkId:e.linkId,text:e.text,item:an(e.item),answer:e.initial?.map(Lg)??[]}}var Eg=1;function Ns(){return"id-"+Eg++}function Lg(e){return{...e}}function Rg(e){let o=e?.item?.[0];return o&&Fg(o,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?e.item.length:1}function Ng(e){let[o,t]=Vo(qg(e.item,e.allResponses)),r=e.item;return Q.createElement(Q.Fragment,null,[...Array(o)].map((a,n)=>Q.createElement("div",{key:n},e.text&&Q.createElement(Os,{order:3,mb:"md"},e.text),Q.createElement(Rs,{items:r.item??[],allResponses:e.allResponses,groupSequence:n,onChange:f=>e.onChange(f,n)}))),e.item.repeats&&Q.createElement(ws,{onClick:()=>t(a=>a+1)},"Add Group"))}function Hg(e){let[o,t]=Vo(1),r=e.item?.repeats&&e.item.type!=="choice"&&e.item.type!=="open-choice";return Q.createElement(Q.Fragment,null,[...Array(o)].map((a,n)=>Q.createElement(Q.Fragment,{key:`${e.item.linkId}-${n}`},e.children({index:n}))),r&&Q.createElement(ws,{onClick:()=>t(a=>a+1)},"Add Item"))}function Vg(e,o){return e.length===0||e.length<o+1?Ns():e[o].id}function qg(e,o){let t=o.filter(r=>r.linkId===e.linkId).length;return t>0?t:1}function Gg(e,o){let t=Hs(e.item??[],o.item??[]);return{...o,item:t,answer:o.answer&&o.answer.length>0?o.answer:e.answer}}function Ug(e,o){let t=[],r=Math.max(e.length,o.length);for(let a=0;a<r;a++)e[a]&&o[a]?t.push(Gg(e[a],o[a])):o[a]&&t.push(o[a]);return t}function Hs(e,o){let t=[];for(let r of new Set(o.map(a=>a.linkId))){let a=e.filter(f=>f.linkId===r),n=o.filter(f=>f.linkId===r);t=t.concat(Ug(a,n))}return t}import{ActionIcon as dr,Button as Qg,createStyles as zg,Divider as Wg,Group as dt,NativeSelect as nn,Stack as cr,Text as Xg,TextInput as Jg}from"@mantine/core";import{formatRange as Vs,getCodeBySystem as Kg}from"@medplum/core";import z,{useEffect as $g,useState as fn}from"react";var jg=zg(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[3]}`,borderRadius:e.radius.sm,transition:"all 0.1s"}})),_g=["gender","age","gestationalAge","context","appliesTo","category"],Zg={definition:{resourceType:"ObservationDefinition"},onSubmit:()=>{}};function E0(e){e=Object.assign(Zg,e);let o=e.definition,[t,r]=fn([]),[a,n]=fn(1),[f,s]=fn(1);return $g(()=>{let y=oh(o,s);r(th(y.qualifiedInterval||[],n))},[o]),z.createElement(K,{testid:"reference-range-editor",onSubmit:l},z.createElement(cr,null,t.map(y=>z.createElement(Yg,{unit:ah(o.quantitativeDetails?.unit),onChange:d,onAdd:c,onRemove:x,onRemoveGroup:u,key:`group-${y.id}`,intervalGroup:y}))),z.createElement(dr,{title:"Add Group",size:"sm",onClick:y=>{H(y),i({id:`group-id-${a}`,filters:{},intervals:[]}),n(k=>k+1)}},z.createElement(po,null)),z.createElement(dt,{position:"right"},z.createElement(Qg,{type:"submit"},"Save")));function l(){let y=t.flatMap(k=>k.intervals).filter(k=>!nh(k));e.onSubmit({...o,qualifiedInterval:y})}function i(y){r(k=>[...k,y])}function u(y){r(k=>k.filter(T=>T.id!==y.id))}function d(y,k){r(T=>{T=[...T];let B=T.find(I=>I.id===y),A=B?.intervals.findIndex(I=>I.id===k.id);return A!==void 0&&B?.intervals[A]&&(B.intervals[A]=k),T})}function c(y,k){k.id===void 0&&(k.id=`id-${f}`,s(T=>T+1)),r(T=>{T=[...T];let B=T.findIndex(A=>A.id===y);if(B!==-1){let A={...T[B]};k={...k,...A.filters},A.intervals=[...A.intervals,k],T[B]=A}return T})}function x(y,k){r(T=>{T=[...T];let B=T.find(A=>A.id===y);return B&&(B.intervals=B.intervals.filter(A=>A.id!==k.id)),T})}}function Yg(e){let{intervalGroup:o,unit:t}=e,{classes:r}=jg();return z.createElement($e,{"data-testid":o.id,className:r.section},z.createElement(cr,{spacing:"lg"},z.createElement(dt,{position:"right"},z.createElement(dr,{title:"Remove Group","data-testid":`remove-group-button-${o.id}`,key:`remove-group-button-${o.id}`,size:"sm",onClick:a=>{H(a),e.onRemoveGroup(o)}},z.createElement(We,null))),z.createElement(eh,{intervalGroup:o,onChange:e.onChange}),z.createElement(Wg,null),o.intervals.map(a=>z.createElement(cr,{key:`interval-${a.id}`,spacing:"xs"},z.createElement(dt,null,z.createElement(Jg,{key:`condition-${a.id}`,"data-testid":`condition-${a.id}`,defaultValue:a.condition,label:"Condition: ",size:"sm",onChange:n=>{H(n),e.onChange(o.id,{...a,condition:n.currentTarget.value.trim()})}}),z.createElement(dr,{title:"Remove Interval",size:"sm",key:`remove-interval-${a.id}`,"data-testid":`remove-interval-${a.id}`,onClick:n=>{H(n),e.onRemove(o.id,a)}},z.createElement(We,null))),z.createElement(ot,{onChange:n=>{e.onChange(o.id,{...a,range:n})},key:`range-${a.id}`,name:`range-${a.id}`,defaultValue:a.range}))),z.createElement(dr,{title:"Add Interval",size:"sm",onClick:a=>{H(a),e.onAdd(o.id,{range:{low:{unit:t},high:{unit:t}}})}},z.createElement(po,null))))}function eh(e){let{intervalGroup:o,onChange:t}=e;o.filters.age||(o.filters.age={});for(let r of["low","high"])o.filters.age[r]?.unit||(o.filters.age[r]={...o.filters.age[r],unit:"years",system:"http://unitsofmeasure.org"});return z.createElement(cr,{style:{maxWidth:"50%"}},z.createElement(dt,null,z.createElement(nn,{data:["","male","female"],label:"Gender:",defaultValue:o.filters.gender||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""&&(n=void 0),t(o.id,{...a,gender:n})}}})),z.createElement(dt,{spacing:"xs"},z.createElement(Xg,{component:"label",htmlFor:`div-age-${o.id}`},"Age:"),z.createElement("div",{id:`div-age-${o.id}`},z.createElement(ot,{key:`age-${o.id}`,name:`age-${o.id}`,defaultValue:o.filters.age,onChange:r=>{for(let a of o.intervals)t(o.id,{...a,age:r})}}))),z.createElement(nn,{data:["","pre-puberty","follicular","midcycle","luteal","postmenopausal"],label:"Endocrine:",defaultValue:o.filters.context?.text||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?(n=void 0,t(o.id,{...a,context:void 0})):t(o.id,{...a,context:{text:n,coding:[{code:n,system:"http://terminology.hl7.org/CodeSystem/referencerange-meaning"}]}})}}}),z.createElement(nn,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:o.filters.category,onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?t(o.id,{...a,category:void 0}):t(o.id,{...a,category:n})}}}))}function oh(e,o){let t=e.qualifiedInterval||[],r=Math.max(...t.map(a=>{let n=parseInt(a.id?.substring(3)||"",10);return isNaN(n)?Number.NEGATIVE_INFINITY:n}))+1;return Number.isFinite(r)||(r=1),e={...e,qualifiedInterval:t.map(a=>({...a,id:a.id||`id-${r++}`}))},o(r),e}function th(e,o){let t=1,r={};for(let a of e){let n=rh(a);n in r||(r[n]={id:`group-id-${t++}`,filters:Object.fromEntries(_g.map(f=>[f,a[f]])),intervals:[]}),r[n].intervals.push(a)}return o(t),Object.values(r)}function rh(e){return[`gender=${e.gender}`,`age=${Vs(e.age)}`,`gestationalAge=${Vs(e.gestationalAge)}`,`context=${e.context?.text}`,`appliesTo=${e.appliesTo?.map(t=>t.text).join("+")}`,`category=${e.category}`].join(":")}function ah(e){return e&&(Kg(e,"http://unitsofmeasure.org")||e.text)}function nh(e){return e.range?.low?.value===void 0&&e.range?.high?.value===void 0}import{Button as qs,Grid as mr,Text as fh}from"@mantine/core";import{formatDateTime as lh,getReferenceString as sh}from"@medplum/core";import Ie,{useEffect as ih,useState as Gs}from"react";function z0(e){let o=v(),t=X(e.value),[r,a]=Gs(!1),[n,f]=Gs();if(ih(()=>{t&&!r&&(o.executeBatch(s(t)).then(f).catch(console.log),a(!0))},[o,t,r]),!t||!n)return null;return Ie.createElement(mr,null,t.action?.map((i,u)=>{let d=i.resource&&l(i.resource),c=d?.input?.[0]?.valueReference,x=d?.output?.[0]?.valueReference;return Ie.createElement(Ie.Fragment,{key:`action-${u}`},Ie.createElement(mr.Col,{span:1,p:"md"},d?.status==="completed"?Ie.createElement(Br,null):Ie.createElement(Xr,{color:"gray"})),Ie.createElement(mr.Col,{span:9,p:"xs"},Ie.createElement(fh,{weight:500},i.title),i.description&&Ie.createElement("div",null,i.description),Ie.createElement("div",null,"Last edited by\xA0",Ie.createElement(Ee,{value:d?.meta?.author}),"\xA0on\xA0",lh(d?.meta?.lastUpdated)),Ie.createElement("div",null,"Status: ",Ie.createElement(Xt,{status:d?.status||"unknown"}))),Ie.createElement(mr.Col,{span:2,p:"md"},c&&!x&&Ie.createElement(qs,{onClick:()=>e.onStart(d,c)},"Start"),c&&x&&Ie.createElement(qs,{onClick:()=>e.onEdit(d,c,x)},"Edit")))}));function s(i){let u=[];if(i.action)for(let d of i.action)d.resource?.reference&&u.push({request:{method:"GET",url:d.resource.reference}});return{resourceType:"Bundle",type:"batch",entry:u}}function l(i){for(let u of n?.entry)if(u.resource&&i.reference===sh(u.resource))return u.resource}}import{createStyles as Ih}from"@mantine/core";import Ce,{useEffect as gh,useState as hh}from"react";import{stringify as mh}from"@medplum/core";function pr(e,o){let t=uh(e,o);return dh(t,e,o)}function uh(e,o){let t=e.length,r=o.length,a=t+r+1,n=1+2*a,f=n/2|0,s=new Array(n);s[f+1]={i:0,j:-1,prev:void 0,snake:!0};for(let l=0;l<a;l++){for(let i=-l;i<=l;i+=2){let u=f+i,d=u+1,c=u-1,x=s[d],y=s[c],k,T=0;i===-l||i!==l&&y.i<x.i?(T=x.i,k=x):(T=y.i+1,k=y),s[c]=void 0;let B=T-i,A={i:T,j:B,prev:ch(k),snake:!1};for(;T<t&&B<r&&e[T]===o[B];)T++,B++;if(T>A.i&&(A={i:T,j:B,prev:A,snake:!0}),s[u]=A,T>=t&&B>=r)return s[u]}s[f+l-1]=void 0}}function dh(e,o,t){let r=[],a=e;for(a.snake&&(a=a.prev);a?.prev&&a.prev.j>=0;){let n=a.i,f=a.j;a=a.prev;let s=a.i,l=a.j,i={position:s,lines:o.slice(s,n)},u={position:l,lines:t.slice(l,f)},d;i.lines.length===0&&u.lines.length>0?d="insert":i.lines.length>0&&u.lines.length===0?d="delete":d="change",r.push({original:i,revised:u,type:d}),a.snake&&(a=a.prev)}return r}function ch(e){return e&&!e.snake&&e.prev?e.prev:e}function Us(e){let o=e.entry.filter(r=>!!r.resource).map(r=>({meta:r.resource?.meta,lines:mh(r.resource,!0).match(/[^\r\n]+/g)})).sort((r,a)=>r.meta.lastUpdated.localeCompare(a.meta.lastUpdated)),t=o[0].lines.map(r=>({id:o[0].meta.versionId,meta:o[0].meta,value:r,span:1}));return ph(t,o),xh(t),t}function ph(e,o){for(let t=1;t<o.length;t++){let r=pr(o[t-1].lines,o[t].lines);for(let a of r){let n=a.original.position,f=a.original.lines,s=a.revised.lines;if((a.type==="delete"||a.type==="change")&&e.splice(n,f.length),a.type==="insert"||a.type==="change")for(let l=0;l<a.revised.lines.length;l++)e.splice(n+l,0,{id:o[t].meta.versionId,meta:o[t].meta,value:s[l],span:1})}}}function xh(e){let o=0;for(;o<e.length;){let t=o;for(;t<e.length&&e[t].id===e[o].id;)e[t].span=-1,t++;e[o].span=t-o,o=t}}function Qs(e,o){return`/${e.resourceType}/${e.id}/_history/${o}`}function zs(e){let o=Math.floor((Date.now()-Date.parse(e))/1e3),t=Math.floor(o/31536e3);if(t>0)return qo(t,"year");let r=Math.floor(o/2592e3);if(r>0)return qo(r,"month");let a=Math.floor(o/86400);if(a>0)return qo(a,"day");let n=Math.floor(o/3600);if(n>0)return qo(n,"hour");let f=Math.floor(o/60);return f>0?qo(f,"minute"):qo(o,"second")}function qo(e,o){return`${e} ${e===1?o:o+"s"} ago`}var Ch=Ih(e=>({container:{overflowX:"auto"},root:{border:`0.1px solid ${e.colors.gray[3]}`,borderCollapse:"collapse",borderRadius:e.radius.sm,borderSpacing:0,fontSize:e.fontSizes.xs,width:"100%","& td":{padding:"2px 4px 0 4px",verticalAlign:"top",whiteSpace:"nowrap"}},startRow:{borderTop:`0.1px solid ${e.colors.gray[3]}`},normalRow:{borderTop:0},author:{lineHeight:"10px"},dateTime:{borderRight:`0.1px solid ${e.colors.gray[3]}`,lineHeight:"20px"},lineNumber:{backgroundColor:e.colors.gray[1],border:0,color:e.colors.gray[5],fontFamily:e.fontFamilyMonospace,padding:`${e.spacing.xs} ${e.spacing.sm}`,textAlign:"right"},line:{fontFamily:e.fontFamilyMonospace,fontSize:e.fontSizes.sm,padding:`${e.spacing.xs} ${e.spacing.sm}`},pre:{margin:0}}));function a1(e){let{classes:o}=Ch(),t=v(),[r,a]=hh(e.history);if(gh(()=>{!e.history&&e.resourceType&&e.id&&t.readHistory(e.resourceType,e.id).then(a).catch(console.log)},[t,e.history,e.resourceType,e.id]),!r)return Ce.createElement("div",null,"Loading...");let n=r.entry?.[0]?.resource;if(!n)return null;let f=Us(r);return Ce.createElement("div",{className:o.container},Ce.createElement("table",{className:o.root},Ce.createElement("tbody",null,f.map((s,l)=>Ce.createElement("tr",{key:"row-"+l,className:s.span>0?o.startRow:o.normalRow},s.span>0&&Ce.createElement(Ce.Fragment,null,Ce.createElement("td",{className:o.author,rowSpan:s.span},Ce.createElement(_e,{value:s.meta.author,link:!0})),Ce.createElement("td",{className:o.dateTime,rowSpan:s.span},Ce.createElement(se,{to:Qs(n,s.meta.versionId)},zs(s.meta.lastUpdated)))),Ce.createElement("td",{className:o.lineNumber},l+1),Ce.createElement("td",{className:o.line},Ce.createElement("pre",{className:o.pre},s.value)))))))}import{createStyles as yh}from"@mantine/core";import{stringify as Ws}from"@medplum/core";import eo from"react";var vh=yh(e=>({removed:{color:e.colors.red[7],textDecoration:"line-through"},added:{color:e.colors.green[7]}}));function d1(e){let o=e.original,t=e.revised;e.ignoreMeta&&(o={...o,meta:void 0},t={...t,meta:void 0});let r=Ws(o,!0).match(/[^\r\n]+/g),a=Ws(t,!0).match(/[^\r\n]+/g),n=pr(r,a);return eo.createElement("pre",{style:{color:"gray"}},n.map((f,s)=>eo.createElement(Sh,{key:"delta"+s,delta:f})))}function Sh(e){let{classes:o}=vh();return eo.createElement(eo.Fragment,null,"...",eo.createElement("br",null),e.delta.original.lines.length>0&&eo.createElement("div",{className:o.removed},e.delta.original.lines.join(`
64
+ }`.replace(/\s+/g," ")}function Yi(e,o){let t=[];return e.data.Patients1&&t.push(...e.data.Patients1),e.data.Patients2&&t.push(...e.data.Patients2),e.data.ServiceRequestList&&t.push(...e.data.ServiceRequestList),ou(eu(t),o).slice(0,5)}function eu(e){let o=new Set,t=[];for(let r of e)o.has(r.id)||(o.add(r.id),t.push(r));return t}function ou(e,o){return e.sort((t,r)=>On(r,o)-On(t,o))}function On(e,o){let t=0;if(e.identifier)for(let r of e.identifier)t=Math.max(t,En(r.value,o));if(e.resourceType==="Patient"&&e.name)for(let r of e.name)t=Math.max(t,En(zi(r),o));return t}function En(e,o){if(!e)return 0;let t=e.toLowerCase().indexOf(o.toLowerCase());return t<0?0:100-t}var su=ru(e=>({logoButton:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},user:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},userName:{fontWeight:500,lineHeight:1,marginRight:3,[e.fn.smallerThan("xs")]:{display:"none"}},userActive:{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}}));function Vn(e){let o=Qo(),{medplum:t,profile:r,navigate:a}=o,n=t.getLogins(),{classes:f,cx:s}=su(),[l,i]=lu(!1);return U.createElement(au,{height:60,p:8,style:{zIndex:101}},U.createElement(Ct,{position:"apart"},U.createElement(Ct,{spacing:"xs"},U.createElement(Nn,{className:f.logoButton,onClick:e.navbarToggle},e.logo),!e.headerSearchDisabled&&U.createElement(Rn,{pathname:e.pathname,searchParams:e.searchParams})),U.createElement(He,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:l,onClose:()=>i(!1)},U.createElement(He.Target,null,U.createElement(Nn,{className:s(f.user,{[f.userActive]:l}),onClick:()=>i(u=>!u)},U.createElement(Ct,{spacing:7},U.createElement(ge,{value:r,radius:"xl",size:24}),U.createElement($o,{size:"sm",className:f.userName},fu(r?.name?.[0])),U.createElement(Ar,{size:12,stroke:1.5})))),U.createElement(He.Dropdown,null,U.createElement(nu,{align:"center",p:"xl"},U.createElement(ge,{size:"xl",radius:100,value:o.profile}),U.createElement(gt,{value:o.profile?.name?.[0]}),U.createElement($o,{color:"dimmed",size:"xs"},t.getActiveLogin()?.project.display)),n.length>1&&U.createElement(He.Divider,null),n.map(u=>u.profile.reference!==Hn(o.profile)&&U.createElement(He.Item,{key:u.profile.reference,onClick:()=>{t.setActiveLogin(u).then(()=>window.location.reload()).catch(console.log)}},U.createElement(Ct,null,U.createElement(tu,{radius:"xl"}),U.createElement("div",{style:{flex:1}},U.createElement($o,{size:"sm",weight:500},u.profile.display),U.createElement($o,{color:"dimmed",size:"xs"},u.project.display))))),U.createElement(He.Divider,null),U.createElement(He.Item,{icon:U.createElement(Jr,{size:14,stroke:1.5}),onClick:()=>a("/signin")},"Add another account"),U.createElement(He.Item,{icon:U.createElement(go,{size:14,stroke:1.5}),onClick:()=>a(`/${Hn(r)}`)},"Account settings"),U.createElement(He.Item,{icon:U.createElement(Vr,{size:14,stroke:1.5}),onClick:async()=>{await t.signOut(),a("/signin")}},"Sign out"),U.createElement($o,{size:"xs",color:"dimmed",align:"center"},e.version)))))}import{Button as Ou,createStyles as Eu,Navbar as ea,ScrollArea as Lu,Space as Ru,Text as Nu}from"@mantine/core";import le,{useState as Hu}from"react";import{Button as cu,Group as mu,Modal as pu,NativeSelect as xu,Stack as Iu,TextInput as gu}from"@mantine/core";import{showNotification as Gn}from"@mantine/notifications";import{deepClone as hu,normalizeErrorString as Cu}from"@medplum/core";import Je from"react";import du from"react";function qn(e){let o={};for(let t of Array.from(e.elements))t instanceof HTMLInputElement?iu(o,t):t instanceof HTMLTextAreaElement?o[t.name]=t.value:t instanceof HTMLSelectElement&&uu(o,t);return o}function iu(e,o){o.disabled||(o.type==="checkbox"||o.type==="radio")&&!o.checked||(e[o.name]=o.value)}function uu(e,o){e[o.name]=o.value}function K(e){return du.createElement("form",{style:e.style,"data-testid":e.testid,onSubmit:o=>{o.preventDefault();let t=qn(o.target);e.onSubmit&&e.onSubmit(t)}},e.children)}function Un(e){let o=v(),t=o.getUserConfiguration();function r(a){let{menuname:n,bookmarkname:f}=a,s=`${e.pathname}?${e.searchParams.toString()}`,l=hu(t);l.menu?.find(({title:u})=>u===n)?.link?.push({name:f,target:s}),o.updateResource(l).then(u=>{t.menu=u.menu,o.dispatchEvent({type:"change"}),Gn({color:"green",message:"Success"}),e.onOk()}).catch(u=>{Gn({color:"red",message:Cu(u)})})}return Je.createElement(pu,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},Je.createElement(K,{onSubmit:r},Je.createElement(Iu,null,Je.createElement(yu,{config:t}),Je.createElement(gu,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),Je.createElement(mu,{position:"right"},Je.createElement(cu,{mt:"sm",type:"submit"},"OK")))))}function yu(e){function o(r){return r?.menu?.map(a=>a.title)}let t=o(e.config);return Je.createElement(xu,{name:"menuname",defaultValue:t[0],label:"Select Menu Option",placeholder:"Menu",data:t,withAsterisk:!0})}import Fu,{useCallback as Mu,useState as wu}from"react";import Du,{useState as ku}from"react";import vu,{useCallback as Su}from"react";function Yr(e){return typeof e.code=="string"?e.code:JSON.stringify(e)}function bu(e){return typeof e.display=="string"?e.display:Yr(e)}function Pu(e){return{value:Yr(e),label:bu(e),resource:e}}function Tu(e){return{code:e,display:e}}function bo(e){let o=v(),{binding:t,creatable:r,clearable:a,...n}=e,f=Su(async(s,l)=>{if(!t)return[];let u=(await o.searchValueSet(t,s,{signal:l})).expansion?.contains,d=[];for(let c of u)c.code&&!d.some(x=>x.code===c.code)&&d.push(c);return d},[o,t]);return vu.createElement(So,{...n,creatable:r??!0,clearable:a??!0,toKey:Yr,toOption:Pu,loadOptions:f,onCreate:Tu,getCreateLabel:r===!1?void 0:s=>`+ Create ${s}`})}function yt(e){let[o,t]=ku(e.defaultValue);function r(a){let n=a[0],f=Au(n);t(f),e.onChange&&e.onChange(f)}return Du.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:Bu(o),onChange:r,creatable:e.creatable,maxSelectedValues:e.maxSelectedValues??1,clearSearchOnChange:e.clearSearchOnChange,clearable:e.clearable})}function Bu(e){return e?{code:e}:void 0}function Au(e){return e?.code}function Po(e){let[o,t]=wu(e.defaultValue),r=e.onChange,a=Mu(n=>{t(n),r&&r(n)},[r]);return Fu.createElement(yt,{"data-autofocus":e.autoFocus,"data-testid":e.testId,defaultValue:o,onChange:a,name:e.name,placeholder:e.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxSelectedValues:0,clearSearchOnChange:!0,clearable:!1})}var Qn=Eu(e=>({menuTitle:{margin:"20px 0 4px 6px",fontSize:"9px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"2px"},link:{...e.fn.focusStyles(),display:"flex",alignItems:"center",textDecoration:"none",fontSize:e.fontSizes.sm,color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7],padding:"8px 12px",borderRadius:e.radius.sm,fontWeight:500,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],color:e.colorScheme==="dark"?e.white:e.black,textDecoration:"none","& svg":{color:e.colorScheme==="dark"?e.white:e.black}},"& svg":{color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],marginRight:e.spacing.sm,strokeWidth:1.5,width:18,height:18}},linkActive:{"&, &:hover":{backgroundColor:e.fn.variant({variant:"light",color:e.primaryColor}).background,color:e.fn.variant({variant:"light",color:e.primaryColor}).color,"& svg":{color:e.fn.variant({variant:"light",color:e.primaryColor}).color}}}}));function zn(e){let{classes:o}=Qn(),t=ze(),r=Gu(e.pathname,e.searchParams,e.menus),[a,n]=Hu(!1);function f(l,i){l.stopPropagation(),l.preventDefault(),t(i),window.innerWidth<768&&e.closeNavbar()}function s(l){l&&t(`/${l}`)}return le.createElement(le.Fragment,null,le.createElement(ea,{width:{sm:250},p:"xs"},le.createElement(Lu,null,!e.resourceTypeSearchDisabled&&le.createElement(ea.Section,{mb:"sm"},le.createElement(Po,{key:window.location.pathname,name:"resourceType",placeholder:"Resource Type",onChange:l=>s(l)})),le.createElement(ea.Section,{grow:!0},e.menus?.map(l=>le.createElement(le.Fragment,{key:`menu-${l.title}`},le.createElement(Nu,{className:o.menuTitle},l.title),l.links?.map(i=>le.createElement(Vu,{key:i.href,to:i.href,active:i.href===r?.href,onClick:u=>f(u,i.href)},le.createElement(qu,{to:i.href,icon:i.icon}),le.createElement("span",null,i.label))))),e.displayAddBookmark&&le.createElement(Ou,{variant:"subtle",size:"xs",mt:"xl",leftIcon:le.createElement(Qr,{size:"0.75rem"}),onClick:()=>n(!0)},"Add Bookmark")))),e.pathname&&e.searchParams&&le.createElement(Un,{pathname:e.pathname,searchParams:e.searchParams,visible:a,onOk:()=>n(!1),onCancel:()=>n(!1)}))}function Vu(e){let{classes:o,cx:t}=Qn();return le.createElement(se,{onClick:e.onClick,to:e.to,className:t(o.link,{[o.linkActive]:e.active})},e.children)}function qu(e){return e.icon?e.icon:le.createElement(Ru,{w:30})}function Gu(e,o,t){if(!e||!o||!t)return;let r,a=0;for(let n of t)if(n.links)for(let f of n.links){let s=Uu(e,o,f.href);s>a&&(a=s,r=f)}return r}function Uu(e,o,t){let r=new URL(t,"https://example.com");if(e!==r.pathname)return 0;let a=["_count","_offset"];for(let[f,s]of r.searchParams.entries())if(!a.includes(f)&&o.get(f)!==s)return 0;let n=1;for(let[f,s]of o.entries())a.includes(f)||r.searchParams.get(f)===s&&n++;return n}function Ob(e){let o=zu(),[t,r]=Xu(localStorage.navbarOpen==="true"),a=v(),n=mt();function f(i){localStorage.navbarOpen=i.toString(),r(i)}function s(){f(!1)}function l(){f(!t)}return a.isLoading()?ao.createElement(_r,null):ao.createElement(Qu,{styles:{main:{background:o.colorScheme==="dark"?o.colors.dark[8]:o.colors.gray[0]}},padding:0,fixed:!0,header:n&&ao.createElement(Vn,{pathname:e.pathname,searchParams:e.searchParams,headerSearchDisabled:e.headerSearchDisabled,logo:e.logo,version:e.version,navbarToggle:l}),navbar:n&&t?ao.createElement(zn,{pathname:e.pathname,searchParams:e.searchParams,menus:e.menus,closeNavbar:s,displayAddBookmark:e.displayAddBookmark,resourceTypeSearchDisabled:e.resourceTypeSearchDisabled}):void 0},ao.createElement(ho,{key:`${e.pathname}?${e.searchParams?.toString()}`},ao.createElement(Wu,{fallback:ao.createElement(_r,null)},e.children)))}import oa from"react";import{Anchor as Ju}from"@mantine/core";import Ke from"react";function Oe(e){let{contentType:o,url:t,title:r}=e.value??{};return t?Ke.createElement("div",{"data-testid":"attachment-display"},o?.startsWith("image/")&&Ke.createElement("img",{"data-testid":"attachment-image",style:{maxWidth:e.maxWidth},src:t,alt:r}),o?.startsWith("video/")&&Ke.createElement("video",{"data-testid":"attachment-video",style:{maxWidth:e.maxWidth},controls:!0},Ke.createElement("source",{type:o,src:t})),o==="application/pdf"&&Ke.createElement("div",{"data-testid":"attachment-pdf",style:{maxWidth:e.maxWidth,minHeight:400}},Ke.createElement("iframe",{width:"100%",height:"400",src:t+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})),Ke.createElement("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"}},Ke.createElement(Ju,{href:t,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:Ku(r)},r||"Download"))):null}function Ku(e){return e?.includes(".")?e:void 0}function Wn(e){return oa.createElement("div",null,e.values?.map((o,t)=>oa.createElement("div",{key:"attatchment-"+t},oa.createElement(Oe,{value:o,maxWidth:e.maxWidth}))))}import{ActionIcon as Xn}from"@mantine/core";import ie,{useRef as ju,useState as _u}from"react";import ta,{useRef as $u}from"react";function To(e){let o=v(),t=$u(null);function r(f){H(f),t.current?.click()}function a(f){H(f);let s=f.target.files;s&&Array.from(s).forEach(n)}function n(f){if(!f||!f.name)return;e.onUploadStart&&e.onUploadStart();let l=f.name,i=f.type||"application/octet-stream";o.createBinary(f,l,i,e.onUploadProgress).then(u=>{e.onUpload({contentType:u.contentType,url:u.url,title:l})}).catch(u=>{alert(u.issue?.[0]?.details?.text)})}return ta.createElement(ta.Fragment,null,ta.createElement("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:t,onChange:f=>a(f)}),e.children({onClick:r}))}function Jn(e){let[o,t]=_u(e.defaultValue??[]),r=ju();r.current=o;function a(n){t(n),e.onChange&&e.onChange(n)}return ie.createElement("table",{style:{width:"100%"}},ie.createElement("colgroup",null,ie.createElement("col",{width:"97%"}),ie.createElement("col",{width:"3%"})),ie.createElement("tbody",null,o.map((n,f)=>ie.createElement("tr",{key:`${f}-${o.length}`},ie.createElement("td",null,ie.createElement(Oe,{value:n,maxWidth:200})),ie.createElement("td",null,ie.createElement(Xn,{title:"Remove",size:"sm",onClick:s=>{H(s);let l=o.slice();l.splice(f,1),a(l)}},ie.createElement(We,null))))),ie.createElement("tr",null,ie.createElement("td",null),ie.createElement("td",null,ie.createElement(To,{onUpload:n=>{a([...r.current,n])}},n=>ie.createElement(Xn,{...n,title:"Add",size:"sm",color:"green"},ie.createElement(Wo,{size:16})))))))}import{Button as Kn}from"@mantine/core";import Do,{useState as Zu}from"react";function vt(e){let[o,t]=Zu(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return o?Do.createElement(Do.Fragment,null,Do.createElement(Oe,{value:o,maxWidth:200}),Do.createElement(Kn,{onClick:a=>{H(a),r(void 0)}},"Remove")):Do.createElement(To,{onUpload:r},a=>Do.createElement(Kn,{...a},"Upload..."))}import{normalizeOperationOutcome as Md}from"@medplum/core";import At,{useEffect as wd,useState as af}from"react";import $n from"react";import{Container as Yu,createStyles as ed}from"@mantine/core";import od from"react";var td=ed(()=>({root:{"@media (max-width: 800px)":{paddingLeft:4,paddingRight:4}}}));function $e(e){let{children:o,...t}=e,{classes:r}=td();return od.createElement(Yu,{className:r.root,...t},o)}import{createStyles as rd,Paper as ad,useComponentDefaultProps as nd}from"@mantine/core";import fd from"react";var ld=rd((e,{width:o,fill:t})=>({paper:{maxWidth:o,margin:`${e.spacing.xl} auto`,padding:t?0:e.spacing.md,"@media (max-width: 800px)":{padding:t?0:8},"& img":{width:"100%",maxWidth:"100%"},"& video":{width:"100%",maxWidth:"100%"}}})),sd={shadow:"xs",radius:"md",withBorder:!0};function ko(e){let{className:o,children:t,width:r,fill:a,unstyled:n,...f}=nd("Panel",sd,e),{classes:s,cx:l}=ld({width:r,fill:a},{name:"Panel",unstyled:n});return fd.createElement(ad,{className:l(s.paper,o),...f},t)}function St(e){let{children:o,...t}=e;return $n.createElement($e,null,$n.createElement(ko,{...t},o))}import{Anchor as _n,Button as id,Center as ud,Group as dd,Stack as cd,Text as md,TextInput as pd,Title as xd}from"@mantine/core";import{normalizeOperationOutcome as Id}from"@medplum/core";import Be,{useState as gd}from"react";import no from"react";function je(e){return no.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:e.size,height:e.size}},no.createElement("title",null,"Medplum Logo"),no.createElement("path",{fill:e.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),no.createElement("path",{fill:e.fill??"#946af9",d:"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z"}),no.createElement("path",{fill:e.fill??"#7857c5",d:"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z"}),no.createElement("path",{fill:e.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),no.createElement("path",{fill:e.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"}))}function me(e,o){return e?.issue?.filter(t=>jn(t.expression?.[0],o))?.map(t=>t.details?.text)?.join(`
65
+ `)}function bt(e,o){return e?.issue?.filter(t=>jn(t.expression?.[0],o))}function jn(e,o){if(e===o)return!0;if(!e||!o)return!1;let t=e.indexOf(".");if(t>=0&&e.substring(t+1)===o)return!0;let r=o.indexOf(".");return r>=0&&o.substring(r+1)===e}function Pt(e){let o=v(),[t,r]=gd();return Be.createElement(K,{style:{maxWidth:400},onSubmit:async a=>{try{e.handleAuthResponse(await o.startNewProject({login:e.login,projectName:a.projectName}))}catch(n){r(Id(n))}}},Be.createElement(ud,{sx:{flexDirection:"column"}},Be.createElement(je,{size:32}),Be.createElement(xd,null,"Create project")),Be.createElement(cd,{spacing:"xl"},Be.createElement(pd,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:me(t,"firstName")}),Be.createElement(md,{color:"dimmed",size:"xs"},"By clicking submit you agree to the Medplum"," ",Be.createElement(_n,{href:"https://www.medplum.com/privacy"},"Privacy\xA0Policy")," and ",Be.createElement(_n,{href:"https://www.medplum.com/terms"},"Terms\xA0of\xA0Service"),".")),Be.createElement(dd,{position:"right",mt:"xl",noWrap:!0},Be.createElement(id,{type:"submit"},"Create project")))}import{Anchor as Bt,Button as bd,Center as Pd,Checkbox as Td,Divider as Dd,Group as ef,PasswordInput as kd,Stack as Bd,Text as of,TextInput as na}from"@mantine/core";import{normalizeOperationOutcome as tf}from"@medplum/core";import _,{useEffect as Ad,useState as Fd}from"react";import hd,{useEffect as Cd,useRef as yd,useState as ra}from"react";function Tt(e,o){let t=document.getElementsByTagName("head")[0],r=document.createElement("script");r.async=!0,r.src=e,r.onload=o??null,t.appendChild(r)}function Dt(e){let o=v(),{googleClientId:t,handleGoogleCredential:r}=e,a=yd(null),[n,f]=ra(typeof google<"u"),[s,l]=ra(!1),[i,u]=ra(!1);return Cd(()=>{if(typeof google>"u"){Tt("https://accounts.google.com/gsi/client",()=>f(!0));return}s||(google.accounts.id.initialize({client_id:t,callback:r}),l(!0)),a.current&&!i&&(google.accounts.id.renderButton(a.current,{}),u(!0))},[o,t,s,n,a,i,r]),t?hd.createElement("div",{ref:a}):null}function kt(e){if(e)return e;if(typeof window<"u"){let o=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(o))return"__GOOGLE_CLIENT_ID__"}}import{Alert as vd}from"@mantine/core";import{operationOutcomeIssueToString as Sd}from"@medplum/core";import aa from"react";function Bo(e){let o=e.outcome?.issue||e.issues;return!o||o.length===0?null:aa.createElement(vd,{icon:aa.createElement(ro,{size:16}),color:"red"},o.map(t=>aa.createElement("div",{"data-testid":"text-field-error",key:t.details?.text},Sd(t))))}function Zn(e){typeof grecaptcha>"u"&&Tt("https://www.google.com/recaptcha/api.js?render="+e)}function Yn(e){return new Promise((o,t)=>{grecaptcha.ready(async()=>{try{o(await grecaptcha.execute(e,{action:"submit"}))}catch(r){t(r)}})})}function rf(e){let o=kt(e.googleClientId),t=e.recaptchaSiteKey,r=v(),[a,n]=Fd(),f=bt(a,void 0);return Ad(()=>{t&&Zn(t)},[t]),_.createElement(K,{style:{maxWidth:400},onSubmit:async s=>{try{let l="";t&&(l=await Yn(t)),e.handleAuthResponse(await r.startNewUser({projectId:e.projectId,clientId:e.clientId,firstName:s.firstName,lastName:s.lastName,email:s.email,password:s.password,remember:s.remember==="true",recaptchaSiteKey:t,recaptchaToken:l}))}catch(l){n(tf(l))}}},_.createElement(Pd,{sx:{flexDirection:"column"}},e.children),_.createElement(Bo,{issues:f}),o&&_.createElement(_.Fragment,null,_.createElement(ef,{position:"center",p:"xl",style:{height:70}},_.createElement(Dt,{googleClientId:o,handleGoogleCredential:async s=>{try{e.handleAuthResponse(await r.startGoogleLogin({googleClientId:s.clientId,googleCredential:s.credential,createUser:!0}))}catch(l){n(tf(l))}}})),_.createElement(Dd,{label:"or",labelPosition:"center",my:"lg"})),_.createElement(Bd,{spacing:"xl"},_.createElement(na,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:me(a,"firstName")}),_.createElement(na,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:me(a,"lastName")}),_.createElement(na,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:me(a,"email")}),_.createElement(kd,{name:"password",label:"Password",autoComplete:"off",required:!0,error:me(a,"password")}),_.createElement(of,{color:"dimmed",size:"xs"},"By clicking submit you agree to the Medplum"," ",_.createElement(Bt,{href:"https://www.medplum.com/privacy"},"Privacy\xA0Policy")," and ",_.createElement(Bt,{href:"https://www.medplum.com/terms"},"Terms\xA0of\xA0Service"),"."),_.createElement(of,{color:"dimmed",size:"xs"},"This site is protected by reCAPTCHA and the Google"," ",_.createElement(Bt,{href:"https://policies.google.com/privacy"},"Privacy\xA0Policy")," and ",_.createElement(Bt,{href:"https://policies.google.com/terms"},"Terms\xA0of\xA0Service")," apply.")),_.createElement(ef,{position:"apart",mt:"xl",noWrap:!0},_.createElement(Td,{name:"remember",label:"Remember me",size:"xs"}),_.createElement(bd,{type:"submit"},"Create account")))}function sT(e){let{type:o,projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,onSuccess:f}=e,s=v(),[l,i]=af(),[u,d]=af();wd(()=>{o==="patient"&&l&&s.startNewPatient({login:l,projectId:t}).then(x=>s.processCode(x.code)).then(()=>f()).catch(x=>d(Md(x)))},[s,o,t,l,f]);function c(x){x.code?s.processCode(x.code).then(()=>f()).catch(console.log):x.login&&i(x.login)}return At.createElement(St,{width:450},u&&At.createElement("pre",null,JSON.stringify(u,null,2)),!l&&At.createElement(rf,{projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,handleAuthResponse:c},e.children),l&&o==="project"&&At.createElement(Pt,{login:l,handleAuthResponse:c}))}import{showNotification as gf}from"@mantine/notifications";import{normalizeErrorString as hf}from"@medplum/core";import fo,{useCallback as la,useEffect as sc,useState as sa}from"react";import{Anchor as nf,Button as ff,Center as lf,Checkbox as Od,Divider as Ed,Group as fa,PasswordInput as Ld,Stack as Rd,TextInput as Nd}from"@mantine/core";import{normalizeOperationOutcome as Hd}from"@medplum/core";import $,{useCallback as Ft,useState as sf}from"react";function uf(e){let[o,t]=sf();return o?$.createElement(qd,{email:o,...e}):$.createElement(Vd,{setEmail:t,...e})}function Vd(e){let{setEmail:o,onRegister:t,handleAuthResponse:r,children:a,disableEmailAuth:n,...f}=e,s=v(),l=!e.disableGoogleAuth&&kt(e.googleClientId),i=Ft(async c=>{if(!c.authorizeUrl)return!1;let x=JSON.stringify({...await s.ensureCodeChallenge(f),domain:c.domain}),y=new URL(c.authorizeUrl);return y.searchParams.set("state",x),window.location.assign(y.toString()),!0},[s,f]),u=Ft(async c=>{let x=await s.post("auth/method",{email:c.email});await i(x)||o(c.email)},[s,i,o]),d=Ft(async c=>{let x=await s.startGoogleLogin({...f,googleCredential:c.credential});await i(x)||r(x)},[s,f,i,r]);return $.createElement(K,{style:{maxWidth:400},onSubmit:u},$.createElement(lf,{sx:{flexDirection:"column"}},a),l&&$.createElement($.Fragment,null,$.createElement(fa,{position:"center",p:"xl",style:{height:70}},$.createElement(Dt,{googleClientId:l,handleGoogleCredential:d})),!n&&$.createElement(Ed,{label:"or",labelPosition:"center",my:"lg"})),!n&&$.createElement(Nd,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0}),$.createElement(fa,{position:"apart",mt:"xl",spacing:0,noWrap:!0},$.createElement("div",null,t&&$.createElement(nf,{component:"button",type:"button",color:"dimmed",onClick:t,size:"xs"},"Register")),!n&&$.createElement(ff,{type:"submit"},"Next")))}function qd(e){let{onForgotPassword:o,handleAuthResponse:t,children:r,...a}=e,n=v(),[f,s]=sf(),l=bt(f,void 0),i=Ft(u=>{n.startLogin({...a,password:u.password,remember:u.remember==="on"}).then(t).catch(d=>s(Hd(d)))},[n,a,t]);return $.createElement(K,{style:{maxWidth:400},onSubmit:i},$.createElement(lf,{sx:{flexDirection:"column"}},r),$.createElement(Bo,{issues:l}),$.createElement(Rd,{spacing:"xl"},$.createElement(Ld,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:me(f,"password")})),$.createElement(fa,{position:"apart",mt:"xl",spacing:0,noWrap:!0},o&&$.createElement(nf,{component:"button",type:"button",color:"dimmed",onClick:o,size:"xs"},"Forgot password"),$.createElement(Od,{id:"remember",name:"remember",label:"Remember me",size:"xs",sx:{lineHeight:1}}),$.createElement(ff,{type:"submit"},"Sign in")))}import{Avatar as Gd,Center as Ud,Group as Qd,Stack as zd,Text as df,Title as Wd,UnstyledButton as Xd}from"@mantine/core";import{normalizeOperationOutcome as Jd}from"@medplum/core";import Ae,{useState as Kd}from"react";function cf(e){let o=v(),[t,r]=Kd();return Ae.createElement(zd,null,Ae.createElement(Ud,{sx:{flexDirection:"column"}},Ae.createElement(je,{size:32}),Ae.createElement(Wd,{order:3},"Choose profile")),Ae.createElement(Bo,{outcome:t}),e.memberships.map(a=>Ae.createElement(Xd,{key:a.id,onClick:()=>{o.post("auth/profile",{login:e.login,profile:a.id}).then(e.handleAuthResponse).catch(n=>r(Jd(n)))}},Ae.createElement(Qd,null,Ae.createElement(Gd,{radius:"xl"}),Ae.createElement("div",{style:{flex:1}},Ae.createElement(df,{size:"sm",weight:500},a.profile?.display),Ae.createElement(df,{color:"dimmed",size:"xs"},a.project?.display))))))}import{Button as $d,Center as jd,Checkbox as _d,Group as Zd,Stack as mf,Title as Yd}from"@mantine/core";import Ve from"react";function pf(e){let o=v();return Ve.createElement(K,{style:{maxWidth:400},onSubmit:t=>{o.post("auth/scope",{login:e.login,scope:Object.keys(t).join(" ")}).then(e.handleAuthResponse).catch(console.log)}},Ve.createElement(mf,null,Ve.createElement(jd,{sx:{flexDirection:"column"}},Ve.createElement(je,{size:32}),Ve.createElement(Yd,null,"Choose scope")),Ve.createElement(mf,null,(e.scope??"openid").split(" ").map(t=>Ve.createElement(_d,{key:t,id:t,name:t,label:t,defaultChecked:!0}))),Ve.createElement(Zd,{position:"right",mt:"xl"},Ve.createElement($d,{type:"submit"},"Set scope"))))}import{Alert as ec,Button as oc,Center as tc,Group as rc,Stack as xf,TextInput as ac,Title as nc}from"@mantine/core";import{normalizeErrorString as fc}from"@medplum/core";import Fe,{useState as lc}from"react";function If(e){let o=v(),[t,r]=lc();return Fe.createElement(K,{style:{maxWidth:400},onSubmit:a=>{r(void 0),o.post("auth/mfa/verify",{login:e.login,token:a.token}).then(e.handleAuthResponse).catch(n=>r(fc(n)))}},Fe.createElement(xf,null,Fe.createElement(tc,{sx:{flexDirection:"column"}},Fe.createElement(je,{size:32}),Fe.createElement(nc,null,"Enter MFA code")),t&&Fe.createElement(ec,{icon:Fe.createElement(ro,{size:16}),title:"Error",color:"red"},t),Fe.createElement(xf,null,Fe.createElement(ac,{name:"token",label:"MFA code",required:!0})),Fe.createElement(rc,{position:"right",mt:"xl"},Fe.createElement(oc,{type:"submit"},"Submit code"))))}function nD(e){let{login:o,chooseScopes:t,onSuccess:r,onForgotPassword:a,onRegister:n,onCode:f,...s}=e,l=v(),[i,u]=sa(),[d,c]=sa(!1),[x,y]=sa(),k=la(A=>{f?f(A):l.processCode(A).then(()=>{r&&r()}).catch(I=>gf({color:"red",message:hf(I)}))},[l,f,r]),T=la(A=>{c(!!A.mfaRequired),A.login&&u(A.login),A.memberships&&y(A.memberships),A.code&&(t?y(void 0):k(A.code))},[t,k]),B=la(A=>{k(A.code)},[k]);return sc(()=>{o&&!i&&l.get("auth/login/"+o).then(T).catch(A=>gf({color:"red",message:hf(A)}))},[l,o,i,T]),fo.createElement(St,{width:450},(()=>i?d?fo.createElement(If,{login:i,handleAuthResponse:T}):x?fo.createElement(cf,{login:i,memberships:x,handleAuthResponse:T}):e.projectId==="new"?fo.createElement(Pt,{login:i,handleAuthResponse:T}):e.chooseScopes?fo.createElement(pf,{login:i,scope:e.scope,handleAuthResponse:B}):fo.createElement("div",null,"Success"):fo.createElement(uf,{onForgotPassword:a,onRegister:n,handleAuthResponse:T,disableGoogleAuth:e.disableGoogleAuth,disableEmailAuth:e.disableEmailAuth,...s},e.children))())}import{getPropertyDisplayName as Dc,tryGetDataType as kc}from"@medplum/core";import Yo from"react";var Mt=["meta","implicitRules","language","text","contained","extension","modifierExtension"];import{createStyles as ic}from"@mantine/core";import jo from"react";var uc=ic(e=>({root:{display:"grid",gridTemplateColumns:"30% 70%",margin:0,"& > dt, & > dd":{padding:`${e.spacing.sm} ${e.spacing.sm}`,borderTop:`0.1px solid ${e.colors.gray[3]}`,margin:0}},compact:{gridTemplateColumns:"20% 80%","& > dt, & > dd":{padding:`0 ${e.spacing.xs} ${e.spacing.xs} 0`,border:0}}}));function Cf(e){let{children:o,compact:t}=e,{classes:r,cx:a}=uc();return jo.createElement("dl",{className:a(r.root,{[r.compact]:t})},o)}function yf(e){return jo.createElement(jo.Fragment,null,jo.createElement("dt",null,e.term),jo.createElement("dd",null,e.children))}import{ActionIcon as hc,Box as Cc,CopyButton as yc,Tooltip as vc}from"@mantine/core";import{formatDateTime as Sc,formatPeriod as bc,formatTiming as Pc,PropertyType as V}from"@medplum/core";import E from"react";import{formatCodeableConcept as dc}from"@medplum/core";import vf from"react";function Ao(e){return vf.createElement(vf.Fragment,null,dc(e.value))}import{formatCoding as cc}from"@medplum/core";import Sf from"react";function bf(e){return Sf.createElement(Sf.Fragment,null,cc(e.value))}import ia from"react";import Pf from"react";function wt(e){let o=e.value;if(!o)return null;let t=[];return o.value&&t.push(o.value),(o.use||o.system)&&(t.push(" ["),o.use&&t.push(o.use),o.use&&o.system&&t.push(" "),o.system&&t.push(o.system),t.push("]")),Pf.createElement(Pf.Fragment,null,t.join("").trim())}function Tf(e){let o=e.value;return o?ia.createElement(ia.Fragment,null,o.name,o.name&&": ",o.telecom?.map(t=>ia.createElement(wt,{key:`telecom-${o.name}-${t.value}`,value:t}))):null}import mc from"react";function Df(e){return mc.createElement("div",null,e.value?.system,": ",e.value?.value)}import{formatMoney as pc}from"@medplum/core";import kf from"react";function Bf(e){return kf.createElement(kf.Fragment,null,pc(e.value))}import{formatQuantity as xc}from"@medplum/core";import Af from"react";function _o(e){return Af.createElement(Af.Fragment,null,xc(e.value))}import{formatRange as Ic}from"@medplum/core";import Ff from"react";function Ot(e){return Ff.createElement(Ff.Fragment,null,Ic(e.value))}import Et from"react";function Mf(e){let o=e.value;return o?Et.createElement(Et.Fragment,null,Et.createElement(_o,{value:o.numerator}),"\xA0/\xA0",Et.createElement(_o,{value:o.denominator})):null}import{stringify as gc}from"@medplum/core";import ua from"react";function lo(e){if(!e.value)return null;let o=e.value.display||e.value.reference||gc(e.value);return e.link!==!1&&e.value.reference?ua.createElement(se,{to:e.value},o):ua.createElement(ua.Fragment,null,o)}import Fo from"react";function wf(e){let{property:o,values:t}=e,r=o.type[0].code;return e.values?Fo.createElement(Fo.Fragment,null,t.map((a,n)=>Fo.createElement("div",{key:`${n}-${t.length}`},Fo.createElement(pe,{arrayElement:!0,property:o,propertyType:r,value:a,ignoreMissingValues:e.ignoreMissingValues,link:e.link})))):Fo.createElement(Fo.Fragment,null)}function pe(e){let{property:o,propertyType:t,value:r}=e;if(o?.path?.endsWith(".id"))return E.createElement(Cc,{component:"div",sx:{display:"flex",gap:3,alignItems:"center"}},r,E.createElement(yc,{value:r,timeout:2e3},({copied:n,copy:f})=>E.createElement(vc,{label:n?"Copied":"Copy",withArrow:!0,position:"right"},E.createElement(hc,{color:n?"teal":"gray",onClick:f},n?E.createElement(zo,{size:"1rem"}):E.createElement(Mr,{size:"1rem"})))));if(o?.max&&o.max>1&&!e.arrayElement)return t===V.Attachment?E.createElement(Wn,{values:r,maxWidth:e.maxWidth}):E.createElement(wf,{property:o,values:r,ignoreMissingValues:e.ignoreMissingValues,link:e.link});switch(t){case V.boolean:return E.createElement(E.Fragment,null,r===void 0?"":(!!r).toString());case V.SystemString:case V.string:return E.createElement("div",{style:{whiteSpace:"pre-wrap"}},r);case V.code:case V.date:case V.decimal:case V.integer:case V.positiveInt:case V.unsignedInt:case V.uri:case V.url:return E.createElement(E.Fragment,null,r);case V.canonical:return E.createElement(lo,{value:{reference:r},link:e.link});case V.dateTime:case V.instant:return E.createElement(E.Fragment,null,Sc(r));case V.markdown:return E.createElement("pre",null,r);case V.Address:return E.createElement(dn,{value:r});case V.Annotation:return E.createElement(E.Fragment,null,r?.text);case V.Attachment:return E.createElement(Oe,{value:r,maxWidth:e.maxWidth});case V.CodeableConcept:return E.createElement(Ao,{value:r});case V.Coding:return E.createElement(bf,{value:r});case V.ContactDetail:return E.createElement(Tf,{value:r});case V.ContactPoint:return E.createElement(wt,{value:r});case V.HumanName:return E.createElement(gt,{value:r});case V.Identifier:return E.createElement(Df,{value:r});case V.Money:return E.createElement(Bf,{value:r});case V.Period:return E.createElement(E.Fragment,null,bc(r));case V.Quantity:case V.Duration:return E.createElement(_o,{value:r});case V.Range:return E.createElement(Ot,{value:r});case V.Ratio:return E.createElement(Mf,{value:r});case V.Reference:return E.createElement(lo,{value:r,link:e.link});case V.Timing:return E.createElement(E.Fragment,null,Pc(r));case V.Dosage:case V.UsageContext:return E.createElement(Zo,{value:{type:t,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues});default:if(!o)throw Error(`Displaying property of type ${e.propertyType} requires element schema`);return E.createElement(Zo,{value:{type:o.type[0].code,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues})}}import{getTypedPropertyValue as Tc}from"@medplum/core";function ye(e,o){let t=Tc(e,o);return t?Array.isArray(t)?[t.map(r=>r.value),t[0].type]:[t.value,t.type]:[void 0,"undefined"]}function Zo(e){let o=e.value,t=o.value;if(!t)return null;let r=o.type,a=kc(r);return a?typeof t=="object"&&"name"in t&&Object.keys(t).length===1&&typeof t.name=="string"?Yo.createElement("div",null,t.name):Yo.createElement(Cf,{compact:e.compact},Object.entries(a.elements).map(n=>{let[f,s]=n;if(Mt.includes(f))return null;let[l,i]=ye(o,f);return e.ignoreMissingValues&&(!l||Array.isArray(l)&&l.length===0)?null:Yo.createElement(yf,{key:f,term:Dc(f)},Yo.createElement(pe,{property:s,propertyType:i,value:l,ignoreMissingValues:e.ignoreMissingValues,link:e.link}))})):Yo.createElement("div",null,r,"\xA0not implemented")}import{Stack as Ym}from"@mantine/core";import{getPropertyDisplayName as nl,tryGetDataType as ep}from"@medplum/core";import Oo,{useState as op}from"react";import{Group as Bc,Input as Ac}from"@mantine/core";import Lt from"react";function Rt(e){return Lt.createElement(Bc,{noWrap:!0},Lt.createElement("div",null,e.children),Lt.createElement("div",null,Lt.createElement(Ac.Wrapper,{id:e.htmlFor,label:e.title,description:e.description,withAsterisk:e.withAsterisk},(()=>null)())))}import{Input as Fc}from"@mantine/core";import Mc from"react";function ve(e){return Mc.createElement(Fc.Wrapper,{id:e.htmlFor,label:e.title,description:e.description,withAsterisk:e.withAsterisk,error:me(e.outcome,e.htmlFor)},e.children)}import{capitalize as wc}from"@medplum/core";function et(e,o,t,r,a){let n=r.type;if(n.length>1)for(let f of n){let s=o.replace("[x]",wc(f.code));s in e&&delete e[s]}return e[t]=a,e}import{Checkbox as Wm,Group as Xm,NativeSelect as Jm,Textarea as Km,TextInput as Ca}from"@mantine/core";import{capitalize as $m,PropertyType as L}from"@medplum/core";import G,{useState as jm}from"react";import Oc,{useState as Ec}from"react";function Of(e){let[o,t]=Ec(e.defaultValue);function r(a){let n=Rc(a);t(n),e.onChange&&e.onChange(n)}return Oc.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:o&&Lc(o),maxSelectedValues:1,onChange:r})}function Lc(e){return e.coding?.map(o=>({system:o.system,code:o.code,display:o.display}))}function Rc(e){if(e.length!==0)return{coding:e.map(o=>({system:o.system,code:o.code,display:o.display}))}}import Nc,{useState as Hc}from"react";function Nt(e){let[o,t]=Hc(e.defaultValue);function r(a){let n=a[0],f=n&&qc(n);t(f),e.onChange&&e.onChange(f)}return Nc.createElement(bo,{binding:e.binding,name:e.name,placeholder:e.placeholder,defaultValue:o&&Vc(o),maxSelectedValues:1,onChange:r})}function Vc(e){return{system:e.system,code:e.code,display:e.display}}function qc(e){return{system:e.system,code:e.code,display:e.display}}import{Group as Wc,TextInput as Xc}from"@mantine/core";import da,{useRef as Jc,useState as Kc}from"react";import{Group as Gc,NativeSelect as Ef,TextInput as Uc}from"@mantine/core";import Ht,{useRef as Qc,useState as zc}from"react";function Vt(e){let[o,t]=zc(e.defaultValue),r=Qc();r.current=o;function a(l){l&&Object.keys(l).length===0&&(l=void 0),t(l),e.onChange&&e.onChange(l)}function n(l){let i={...r.current,system:l};l||delete i.system,a(i)}function f(l){let i={...r.current,use:l};l||delete i.use,a(i)}function s(l){let i={...r.current,value:l};l||delete i.value,a(i)}return Ht.createElement(Gc,{spacing:"xs",grow:!0,noWrap:!0},Ht.createElement(Ef,{"data-testid":"system",defaultValue:o?.system,onChange:l=>n(l.currentTarget.value),data:["","email","phone","fax","pager","sms","other"]}),Ht.createElement(Ef,{"data-testid":"use",defaultValue:o?.use,onChange:l=>f(l.currentTarget.value),data:["","home","work","temp","old","mobile"]}),Ht.createElement(Uc,{placeholder:"Value",defaultValue:o?.value,onChange:l=>s(l.currentTarget.value)}))}function Lf(e){let[o,t]=Kc(e.defaultValue),r=Jc();r.current=o;function a(s){t(s),e.onChange&&e.onChange(s)}function n(s){let l={...r.current,name:s};s||delete l.name,a(l)}function f(s){let l={...r.current,telecom:s&&[s]};s||delete l.telecom,a(l)}return da.createElement(Wc,{spacing:"xs",grow:!0,noWrap:!0},da.createElement(Xc,{"data-testid":e.name+"-name",name:e.name+"-name",placeholder:"Name",style:{width:180},defaultValue:o?.name,onChange:s=>n(s.currentTarget.value)}),da.createElement(Vt,{name:e.name+"-telecom",defaultValue:o?.telecom?.[0],onChange:f}))}import{TextInput as $c}from"@mantine/core";import jc from"react";import{isValidDate as Rf}from"@medplum/core";function Nf(e){if(!e)return"";let o=new Date(e);return Rf(o)?o.toLocaleDateString("sv")+"T"+o.toLocaleTimeString("sv"):""}function Hf(e){if(!e)return"";let o=new Date(e);return Rf(o)?o.toISOString():""}function Me(e){return jc.createElement($c,{id:e.name,name:e.name,"data-autofocus":e.autoFocus,"data-testid":e.name,placeholder:e.placeholder,required:e.required,type:_c(),defaultValue:Nf(e.defaultValue),autoFocus:e.autoFocus,error:me(e.outcome,e.name),onChange:o=>{if(e.onChange){let t=o.currentTarget.value;e.onChange(Hf(t))}}})}function _c(){return"datetime-local"}import{JsonInput as Zc}from"@mantine/core";import{stringify as Yc}from"@medplum/core";import em from"react";function Vf(e){return em.createElement(Zc,{id:e.name,name:e.name,"data-testid":"extension-input",defaultValue:Yc(e.defaultValue),deserialize:JSON.parse,onChange:o=>{e.onChange&&e.onChange(JSON.parse(o))}})}import{Group as om,NativeSelect as tm,TextInput as qt}from"@mantine/core";import Mo,{useRef as rm,useState as am}from"react";function qf(e){let[o,t]=am(e.defaultValue),r=rm();r.current=o;function a(u){t(u),e.onChange&&e.onChange(u)}function n(u){a({...r.current,use:u||void 0})}function f(u){a({...r.current,prefix:u?u.split(" "):void 0})}function s(u){a({...r.current,given:u?u.split(" "):void 0})}function l(u){a({...r.current,family:u||void 0})}function i(u){a({...r.current,suffix:u?u.split(" "):void 0})}return Mo.createElement(om,{spacing:"xs",grow:!0,noWrap:!0},Mo.createElement(tm,{defaultValue:o?.use,name:e.name+"-use","data-testid":"use",onChange:u=>n(u.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"]}),Mo.createElement(qt,{placeholder:"Prefix",name:e.name+"-prefix",defaultValue:o?.prefix?.join(" "),onChange:u=>f(u.currentTarget.value)}),Mo.createElement(qt,{placeholder:"Given",name:e.name+"-given",defaultValue:o?.given?.join(" "),onChange:u=>s(u.currentTarget.value)}),Mo.createElement(qt,{name:e.name+"-family",placeholder:"Family",defaultValue:o?.family,onChange:u=>l(u.currentTarget.value)}),Mo.createElement(qt,{placeholder:"Suffix",name:e.name+"-suffix",defaultValue:o?.suffix?.join(" "),onChange:u=>i(u.currentTarget.value)}))}import{Group as nm,TextInput as Gf}from"@mantine/core";import ca,{useState as fm}from"react";function Uf(e){let[o,t]=fm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return ca.createElement(nm,{spacing:"xs",grow:!0,noWrap:!0},ca.createElement(Gf,{placeholder:"System",defaultValue:o?.system,onChange:a=>r({...o,system:a.currentTarget.value})}),ca.createElement(Gf,{placeholder:"Value",defaultValue:o?.value,onChange:a=>r({...o,value:a.currentTarget.value})}))}import{NativeSelect as lm,TextInput as sm}from"@mantine/core";import ma,{useCallback as pa,useState as im}from"react";var um=["USD","EUR","CAD","GBP","AUD"];function Qf(e){let{onChange:o}=e,[t,r]=im(e.defaultValue),a=pa(l=>{r(l),o&&o(l)},[o]),n=pa(l=>{a({...t,currency:l.currentTarget.value})},[t,a]),f=pa(l=>{a({...t,value:l.currentTarget.valueAsNumber})},[t,a]),s=ma.createElement(lm,{defaultValue:t?.currency,data:um,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:n});return ma.createElement(sm,{type:"number",label:e.label,placeholder:e.placeholder??"Value",defaultValue:t?.value?.toString()??"USD",icon:ma.createElement(wr,{size:14}),rightSection:s,rightSectionWidth:92,onChange:f})}import{Group as dm}from"@mantine/core";import xa,{useState as cm}from"react";function zf(e){let[o,t]=cm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return xa.createElement(dm,{spacing:"xs",grow:!0,noWrap:!0},xa.createElement(Me,{name:e.name+".start",placeholder:"Start",defaultValue:o?.start,onChange:a=>r({...o,start:a})}),xa.createElement(Me,{name:e.name+".end",placeholder:"End",defaultValue:o?.end,onChange:a=>r({...o,end:a})}))}import{Group as mm,NativeSelect as pm,TextInput as Wf}from"@mantine/core";import Gt,{useState as xm}from"react";function Pe(e){let[o,t]=xm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return Gt.createElement(mm,{spacing:"xs",grow:!0,noWrap:!0},Gt.createElement(pm,{style:{width:80},"data-testid":e.name+"-comparator",defaultValue:o?.comparator,data:["","<","<=",">=",">"],onChange:a=>r({...o,comparator:a.currentTarget.value})}),Gt.createElement(Wf,{id:e.name,name:e.name,required:e.required,"data-autofocus":e.autoFocus,"data-testid":e.name+"-value",type:"number",placeholder:"Value",defaultValue:o?.value,autoFocus:e.autoFocus,step:"any",onWheel:a=>{e.disableWheel&&a.currentTarget.blur()},onChange:a=>{r({...o,value:Im(a.currentTarget.value)})}}),Gt.createElement(Wf,{placeholder:"Unit","data-testid":e.name+"-unit",defaultValue:o?.unit,onChange:a=>r({...o,unit:a.currentTarget.value})}))}function Im(e){if(e)return parseFloat(e)}import{Group as gm}from"@mantine/core";import Ia,{useState as hm}from"react";function ot(e){let[o,t]=hm(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return Ia.createElement(gm,{spacing:"xs",grow:!0,noWrap:!0},Ia.createElement(Pe,{name:e.name+"-low",defaultValue:o?.low,onChange:a=>r({...o,low:a})}),Ia.createElement(Pe,{name:e.name+"-high",defaultValue:o?.high,onChange:a=>r({...o,high:a})}))}import{Group as Cm}from"@mantine/core";import ga,{useState as ym}from"react";function Xf(e){let[o,t]=ym(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return ga.createElement(Cm,{spacing:"xs",grow:!0,noWrap:!0},ga.createElement(Pe,{name:e.name+"-numerator",defaultValue:o?.numerator,onChange:a=>r({...o,numerator:a})}),ga.createElement(Pe,{name:e.name+"-denominator",defaultValue:o?.denominator,onChange:a=>r({...o,denominator:a})}))}import{Group as Fm,NativeSelect as Mm}from"@mantine/core";import{createReference as wm}from"@medplum/core";import Qt,{useState as jf}from"react";import{Group as vm,Text as Jf}from"@mantine/core";import{getDisplayString as Sm,getReferenceString as $f}from"@medplum/core";import so,{forwardRef as bm,useCallback as Kf,useState as Pm}from"react";var Tm={Observation:"code",User:"email:contains"},Dm=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","HealthcareService","ImplementationGuide","InsurancePlan","Library","Location","Measure","MedicinalProduct","MessageDefinition","NamingSystem","OperationDefinition","Organization","Patient","Person","PlanDefinition","Practitioner","Project","Questionnaire","RelatedPerson","ResearchDefinition","ResearchElementDefinition","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function km(e){return{value:$f(e),label:Sm(e),resource:e}}function Ut(e){let o=v(),t=e.resourceType,[r,a]=Pm(),n=X(e.defaultValue,a),f=e.onChange,s=Kf(async(i,u)=>{let d=Am(t),c=new URLSearchParams({[d]:i,_count:"10"});return await o.searchResources(t,c,{signal:u})},[o,t]),l=Kf(i=>{f&&f(i[0])},[f]);return e.defaultValue&&!r&&!n?null:so.createElement(So,{name:e.name,required:e.required,itemComponent:Bm,defaultValue:n,placeholder:e.placeholder,maxSelectedValues:1,toKey:$f,toOption:km,loadOptions:s,onChange:l,clearable:!0})}var Bm=bm(({label:e,resource:o,...t},r)=>so.createElement("div",{ref:r,...t},so.createElement(vm,{noWrap:!0},so.createElement(ge,{value:o}),so.createElement("div",null,so.createElement(Jf,null,e),so.createElement(Jf,{size:"xs",color:"dimmed"},o.birthDate)))));function Am(e){return Tm[e]??(Dm.includes(e)?"name":"_id")}function wo(e){let o=Om(e.targetTypes),t=Em(e.defaultValue,o),[r,a]=jf(e.defaultValue),[n,f]=jf(t);function s(l){a(l),e.onChange&&e.onChange(l)}return Qt.createElement(Fm,{spacing:"xs",grow:!0,noWrap:!0},o&&o.length>1&&Qt.createElement(Mm,{"data-autofocus":e.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:n,autoFocus:e.autoFocus,onChange:l=>f(l.currentTarget.value),data:o}),!o&&Qt.createElement(Po,{autoFocus:e.autoFocus,testId:"reference-input-resource-type-input",defaultValue:n,onChange:f,name:e.name+"-resourceType",placeholder:"Resource Type"}),Qt.createElement(Ut,{resourceType:n,name:e.name+"-id",required:e.required,placeholder:e.placeholder,defaultValue:r,onChange:l=>{s(l?wm(l):void 0)}}))}function Om(e){if(!(!e||e.length===0||e.length===1&&e[0]==="Resource"))return e}function Em(e,o){let t=e?.reference?.split("/")[0];if(t)return t;if(o&&o.length>0)return o[0]}import{ActionIcon as _f}from"@mantine/core";import xe,{useRef as Lm,useState as Rm}from"react";function Zf(e){let[o,t]=Rm(e.defaultValue&&Array.isArray(e.defaultValue)?e.defaultValue:[]),r=Lm();r.current=o;function a(n){t(n),e.onChange&&e.onChange(n)}return xe.createElement("table",{style:{width:"100%",borderCollapse:"collapse"}},xe.createElement("colgroup",null,xe.createElement("col",{width:"97%"}),xe.createElement("col",{width:"3%"})),xe.createElement("tbody",null,o.map((n,f)=>xe.createElement("tr",{key:`${f}-${o.length}`},xe.createElement("td",null,xe.createElement(qe,{arrayElement:!0,property:e.property,name:e.name+"."+f,defaultValue:n,onChange:s=>{let l=[...r.current];l[f]=s,a(l)}})),xe.createElement("td",{style:{textAlign:"right"}},xe.createElement(_f,{title:"Remove",size:"sm",onClick:s=>{H(s);let l=[...r.current];l.splice(f,1),a(l)}},xe.createElement(We,null))))),xe.createElement("tr",null,xe.createElement("td",null),xe.createElement("td",{style:{textAlign:"right"}},xe.createElement(_f,{title:"Add",size:"sm",color:"green",onClick:n=>{H(n);let f=[...r.current];f.push(void 0),a(f)}},xe.createElement(po,null))))))}import{Button as ol,Chip as Yf,Group as zt,Modal as Nm,NativeSelect as Hm,Stack as Vm,Switch as qm,TextInput as Gm}from"@mantine/core";import{formatTiming as Um}from"@medplum/core";import j,{useRef as tl,useState as ha}from"react";var Qm=["sun","mon","tue","wed","thu","fri","sat"];function rl(e){let[o,t]=ha(e.defaultValue),[r,a]=ha(!1),n=tl();return n.current=o,j.createElement(j.Fragment,null,j.createElement(zt,{spacing:"xs",grow:!0,noWrap:!0},j.createElement("span",null,Um(n.current)||"No repeat"),j.createElement(ol,{onClick:()=>a(!0)},"Edit")),j.createElement(zm,{visible:r,defaultValue:n.current,onOk:f=>{e.onChange&&e.onChange(f),t(f),a(!1)},onCancel:()=>a(!1)}))}var el={repeat:{period:1,periodUnit:"d"}};function zm(e){let[o,t]=ha(e.defaultValue||el),r=tl();r.current=o;function a(i){t({...r.current,event:[i]})}function n(i){t({...r.current,repeat:i})}function f(i){n({...r.current?.repeat,period:i})}function s(i){n({...r.current?.repeat,periodUnit:i})}function l(i){n({...r.current?.repeat,dayOfWeek:i})}return j.createElement(Nm,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:()=>e.onCancel()},j.createElement(Vm,null,j.createElement(ve,{title:"Starts on",htmlFor:"timing-dialog-start"},j.createElement(Me,{name:"timing-dialog-start",onChange:i=>a(i)})),j.createElement(qm,{label:"Repeat",checked:!!o.repeat,onChange:i=>n(i.currentTarget.checked?el.repeat:void 0)}),o.repeat&&j.createElement(j.Fragment,null,j.createElement(ve,{title:"Repeat every",htmlFor:"timing-dialog-period"},j.createElement(zt,{spacing:"xs",grow:!0,noWrap:!0},j.createElement(Gm,{type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:o.repeat.period||1,onChange:i=>f(parseInt(i.currentTarget.value,10)||1)}),j.createElement(Hm,{id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:o.repeat.periodUnit,onChange:i=>s(i.currentTarget.value),data:[{label:"second",value:"s"},{label:"minute",value:"min"},{label:"hour",value:"h"},{label:"day",value:"d"},{label:"week",value:"wk"},{label:"month",value:"mo"},{label:"year",value:"a"}]}))),o.repeat.periodUnit==="wk"&&j.createElement(ve,{title:"Repeat on"},j.createElement(Yf.Group,{multiple:!0,onChange:l},j.createElement(zt,{position:"apart",mt:"md",spacing:"xs"},Qm.map(i=>j.createElement(Yf,{key:i,value:i,size:"xs",radius:"xl"},i.charAt(0).toUpperCase())))))),j.createElement(zt,{position:"right"},j.createElement(ol,{onClick:()=>e.onOk(o)},"OK"))))}function qe(e){let o=e.property,t=e.defaultPropertyType??o.type[0].code,r=e.name,a=e.defaultValue;if(o.max>1&&!e.arrayElement)return t===L.Attachment?G.createElement(Jn,{name:r,defaultValue:a,onChange:e.onChange}):G.createElement(Zf,{property:o,name:r,defaultValue:a,onChange:e.onChange});let n=o.type;return n.length>1?G.createElement(_m,{elementDefinitionTypes:n,...e}):G.createElement(al,{elementDefinitionType:n[0],...e})}function _m(e){let o=e.elementDefinitionTypes,t;e.defaultPropertyType&&(t=o.find(n=>n.code===e.defaultPropertyType)),t||(t=o[0]);let[r,a]=jm(t);return G.createElement(Xm,{spacing:"xs",grow:!0,noWrap:!0},G.createElement(Jm,{style:{width:"200px"},defaultValue:r.code,onChange:n=>{a(o.find(f=>f.code===n.currentTarget.value))},data:o.map(n=>({value:n.code,label:n.code}))}),G.createElement(al,{...e,elementDefinitionType:r,onChange:n=>{e.onChange&&e.onChange(n,e.name.replace("[x]",$m(r.code)))}}))}function al(e){let o=e.property,t=e.elementDefinitionType.code,r=e.name,a=e.defaultValue,n=o.min!==void 0&&o.min>0;switch(t){case L.SystemString:case L.canonical:case L.string:case L.time:case L.uri:case L.url:return G.createElement(Ca,{id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)},error:me(e.outcome,r)});case L.date:return G.createElement(Ca,{type:"date",id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)},error:me(e.outcome,r)});case L.dateTime:case L.instant:return G.createElement(Me,{name:r,defaultValue:a,onChange:e.onChange,outcome:e.outcome});case L.decimal:case L.integer:case L.positiveInt:case L.unsignedInt:return G.createElement(Ca,{type:"number",step:t===L.decimal?"any":"1",id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.valueAsNumber)}});case L.code:return G.createElement(yt,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.boolean:return G.createElement(Wm,{id:r,name:r,"data-testid":r,defaultChecked:!!a,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.checked)}});case L.markdown:return G.createElement(Km,{id:r,name:r,"data-testid":r,defaultValue:a,required:n,onChange:f=>{e.onChange&&e.onChange(f.currentTarget.value)}});case L.Address:return G.createElement(xn,{name:r,defaultValue:a,onChange:e.onChange});case L.Annotation:return G.createElement(In,{name:r,defaultValue:a,onChange:e.onChange});case L.Attachment:return G.createElement(vt,{name:r,defaultValue:a,onChange:e.onChange});case L.CodeableConcept:return G.createElement(Of,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.Coding:return G.createElement(Nt,{binding:o.binding?.valueSet,name:r,defaultValue:a,onChange:e.onChange});case L.ContactDetail:return G.createElement(Lf,{name:r,defaultValue:a,onChange:e.onChange});case L.ContactPoint:return G.createElement(Vt,{name:r,defaultValue:a,onChange:e.onChange});case L.Extension:return G.createElement(Vf,{name:r,defaultValue:a,onChange:e.onChange});case L.HumanName:return G.createElement(qf,{name:r,defaultValue:a,onChange:e.onChange});case L.Identifier:return G.createElement(Uf,{name:r,defaultValue:a,onChange:e.onChange});case L.Money:return G.createElement(Qf,{name:r,defaultValue:a,onChange:e.onChange});case L.Period:return G.createElement(zf,{name:r,defaultValue:a,onChange:e.onChange});case L.Duration:case L.Quantity:return G.createElement(Pe,{name:r,defaultValue:a,onChange:e.onChange});case L.Range:return G.createElement(ot,{name:r,defaultValue:a,onChange:e.onChange});case L.Ratio:return G.createElement(Xf,{name:r,defaultValue:a,onChange:e.onChange});case L.Reference:return G.createElement(wo,{name:r,defaultValue:a,targetTypes:Zm(o),onChange:e.onChange});case L.Timing:return G.createElement(rl,{name:r,defaultValue:a,onChange:e.onChange});case L.Dosage:case L.UsageContext:return G.createElement(tt,{typeName:t,defaultValue:a,onChange:e.onChange,outcome:e.outcome});default:return G.createElement(tt,{typeName:o.type[0].code,defaultValue:a,onChange:e.onChange,outcome:e.outcome})}}function Zm(e){return e?.type?.[0]?.targetProfile?.map(o=>o.split("/").pop())}function tt(e){let[o,t]=op(e.defaultValue??{});function r(s){t(s),e.onChange&&e.onChange(s)}let a=e.typeName,n=ep(a);if(!n)return Oo.createElement("div",null,a,"\xA0not implemented");let f={type:a,value:o};return Oo.createElement(Ym,null,Object.entries(n.elements).map(([s,l])=>{if(s==="id"||Mt.includes(s)||!l.type)return null;let[i,u]=ye(f,s),d=l.min!==void 0&&l.min>0;return l.type.length===1&&l.type[0].code==="boolean"?Oo.createElement(Rt,{key:s,title:nl(s),description:l.description,htmlFor:s},Oo.createElement(qe,{property:l,name:s,defaultValue:i,defaultPropertyType:u,outcome:e.outcome,onChange:(c,x)=>{r(et(o,s,x??s,l,c))}})):Oo.createElement(ve,{key:s,title:nl(s),description:l.description,withAsterisk:d,htmlFor:s,outcome:e.outcome},Oo.createElement(qe,{property:l,name:s,defaultValue:i,defaultPropertyType:u,onChange:(c,x)=>{r(et(o,s,x??s,l,c))}}))}))}import{Button as ya,createStyles as tp,Group as ll}from"@mantine/core";import oe,{useMemo as rp,useState as ap}from"react";function fl(e){return e.toLocaleString("default",{month:"long"})+" "+e.getFullYear()}function Wt(){let e=new Date;return e.setDate(1),e.setHours(0,0,0,0),e}var np=tp(e=>({table:{width:350,"& th":{fontWeight:"normal",fontSize:11,padding:8,textAlign:"center"},"& td":{padding:"2px 4px"},"& td button":{width:44,height:44,color:e.colors[e.primaryColor][5],fontSize:16,fontWeight:500,textAlign:"center",padding:0,backgroundColor:e.colors[e.primaryColor][0],border:0,borderRadius:"50%",cursor:"pointer"},"& td button:hover":{backgroundColor:e.colors[e.primaryColor][1]},"& td button:disabled":{backgroundColor:"transparent",cursor:"default",color:e.colors.gray[4],fontWeight:"normal"}}}));function sl(e){let{classes:o}=np(),{onChangeMonth:t,onClick:r}=e,[a,n]=ap(Wt);function f(l){n(i=>{let u=new Date(i.getTime());return u.setMonth(i.getMonth()+l),t(u),u})}let s=rp(()=>fp(a,e.slots),[a,e.slots]);return oe.createElement("div",null,oe.createElement(ll,{position:"apart",spacing:"xs",grow:!0,noWrap:!0},oe.createElement("p",{style:{flex:1}},fl(a)),oe.createElement(ll,{position:"right",spacing:"xs"},oe.createElement(ya,{variant:"outline","aria-label":"Previous month",onClick:()=>f(-1)},"<"),oe.createElement(ya,{variant:"outline","aria-label":"Next month",onClick:()=>f(1)},">"))),oe.createElement("table",{className:o.table},oe.createElement("thead",null,oe.createElement("tr",null,oe.createElement("th",null,"SUN"),oe.createElement("th",null,"MON"),oe.createElement("th",null,"TUE"),oe.createElement("th",null,"WED"),oe.createElement("th",null,"THU"),oe.createElement("th",null,"FRI"),oe.createElement("th",null,"SAT"))),oe.createElement("tbody",null,s.map((l,i)=>oe.createElement("tr",{key:"week-"+i},l.map((u,d)=>oe.createElement("td",{key:"day-"+d},u&&oe.createElement(ya,{disabled:!u.available,onClick:()=>r(u.date)},u.date.getDate()))))))))}function fp(e,o){let t=new Date(e.getFullYear(),e.getMonth()),r=[],a=[];for(let n=0;n<t.getDay();n++)a.push(void 0);for(;t.getMonth()===e.getMonth();)a.push({date:new Date(t.getTime()),available:lp(t,o)}),t.getDay()===6&&(r.push(a),a=[]),t.setDate(t.getDate()+1);if(t.getDay()!==0){for(let n=t.getDay();n<7;n++)a.push(void 0);r.push(a)}return r}function lp(e,o){for(let t of o){let r=new Date(t.start);if(r.getFullYear()===e.getFullYear()&&r.getMonth()===e.getMonth()&&r.getDate()===e.getDate())return!0}return!1}import dx from"react";import{ActionIcon as Dl,Center as Kp,createStyles as $p,Group as jp,Loader as _p,Menu as Ge,ScrollArea as Zp,TextInput as Yp}from"@mantine/core";import{showNotification as ex,updateNotification as ka}from"@mantine/notifications";import{getReferenceString as rt,normalizeErrorString as ox}from"@medplum/core";import D,{useCallback as Kt,useEffect as tx,useRef as kl,useState as Bl}from"react";import{createStyles as vp,Group as Jt,List as dl,Stack as cl,Text as Te,Title as ml}from"@mantine/core";import{capitalize as Sp,formatCodeableConcept as bp,formatDateTime as ba,formatObservationValue as Pp,isReference as Tp}from"@medplum/core";import h,{useEffect as Dp,useState as kp}from"react";import{Blockquote as sp,createStyles as ip,Stack as up}from"@mantine/core";import il from"react";var dp=ip(e=>({noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));function va({value:e}){let{classes:o}=dp();return e?il.createElement(up,{justify:"flex-start",spacing:"xs"},e.map(t=>t.text&&il.createElement(sp,{key:`note-${t.text}`,classNames:{cite:o.noteCite,body:o.noteBody,root:o.noteRoot},cite:t.authorReference?.display||t.authorString,icon:null},t.text))):null}import{Group as gp}from"@mantine/core";import Sa from"react";import{Text as cp}from"@mantine/core";import{getDisplayString as mp,isOk as pp,normalizeErrorString as xp}from"@medplum/core";import ul,{useState as Ip}from"react";function Ee(e){let{value:o,link:t,...r}=e,[a,n]=Ip(),f=X(o,n),s;if(a&&!pp(a))s=`[${xp(a)}]`;else if(f)s=mp(f);else return null;return t?ul.createElement(se,{to:o,...r},s):ul.createElement(cp,{component:"span",...r},s)}function _e(e){return Sa.createElement(gp,{spacing:"xs"},Sa.createElement(ge,{size:24,radius:12,value:e.value,link:e.link}),Sa.createElement(Ee,{value:e.value,link:e.link}))}import{Badge as hp}from"@mantine/core";import Cp from"react";var yp={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red"};function Xt(e){return Cp.createElement(hp,{color:yp[e.status]},e.status)}var pl=vp(e=>({table:{border:`0.1px solid ${e.colors.gray[5]}`,borderCollapse:"collapse","& td, & th":{border:`0.1px solid ${e.colors.gray[5]}`,padding:4}},criticalRow:{background:e.colorScheme==="dark"?e.colors.red[7]:e.colors.red[1],border:`0.1px solid ${e.colors.red[5]}`,color:e.colors.red[5],fontWeight:500,"& td":{border:`0.1px solid ${e.colors.red[5]}`}},noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));Pa.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function Pa(e){let o=v(),t=X(e.value),[r,a]=kp();if(Dp(()=>{t?.specimen&&Promise.allSettled(t.specimen.map(f=>o.readReference(f))).then(f=>f.filter(s=>s.status==="fulfilled").map(s=>s.value)).then(a).catch(console.error)},[o,t]),!t)return null;let n=r?.flatMap(f=>f.note||[])||[];if(t.presentedForm&&t.presentedForm.length>0){let f=t.presentedForm[0];f.contentType?.startsWith("text/plain")&&f.data&&n.push({text:window.atob(f.data)})}return h.createElement(cl,null,h.createElement(ml,null,"Diagnostic Report"),h.createElement(Bp,{value:t}),r&&!e.hideSpecimenInfo&&Ap(r),t.result&&h.createElement(Fp,{hideObservationNotes:e.hideObservationNotes,value:t.result}),n.length>0&&h.createElement(va,{value:n}))}function Bp({value:e}){return h.createElement(Jt,{mt:"md",spacing:30},e.subject&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Subject"),h.createElement(Te,null,h.createElement(_e,{value:e.subject,link:!0}))),e.resultsInterpreter?.map(o=>h.createElement("div",{key:o.reference},h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Interpreter"),h.createElement(Te,null,h.createElement(_e,{value:o,link:!0})))),e.performer?.map(o=>h.createElement("div",{key:o.reference},h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Performer"),h.createElement(Te,null,h.createElement(_e,{value:o,link:!0})))),e.issued&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Issued"),h.createElement(Te,null,ba(e.issued))),e.status&&h.createElement("div",null,h.createElement(Te,{size:"xs",transform:"uppercase",color:"dimmed"},"Status"),h.createElement(Te,null,Sp(e.status))))}function Ap(e){return h.createElement(cl,{spacing:"xs"},h.createElement(ml,{order:2,size:"h6"},"Specimens"),h.createElement(dl,{type:"ordered"},e?.map(o=>h.createElement(dl.Item,{ml:"sm",key:`specimen-${o.id}`},h.createElement(Jt,{spacing:20},h.createElement(Jt,{spacing:5},h.createElement(Te,{fw:500},"Collected:")," ",ba(o.collection?.collectedDateTime)),h.createElement(Jt,{spacing:5},h.createElement(Te,{fw:500},"Received:")," ",ba(o.receivedTime)))))))}function Fp(e){let{classes:o}=pl();return h.createElement("table",{className:o.table},h.createElement("thead",null,h.createElement("tr",null,h.createElement("th",null,"Test"),h.createElement("th",null,"Value"),h.createElement("th",null,"Reference Range"),h.createElement("th",null,"Interpretation"),h.createElement("th",null,"Category"),h.createElement("th",null,"Performer"),h.createElement("th",null,"Status"))),h.createElement("tbody",null,h.createElement(xl,{value:e.value,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes})))}function xl(e){return h.createElement(h.Fragment,null,e.value?.map(o=>h.createElement(Mp,{key:`obs-${Tp(o)?o.reference:o.id}`,value:o,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes})))}function Mp(e){let{classes:o,cx:t}=pl(),r=X(e.value);if(!r||e.ancestorIds?.includes(r.id))return null;let a=!e.hideObservationNotes&&r.note,n=Ep(r);return h.createElement(h.Fragment,null,h.createElement("tr",{className:t({[o.criticalRow]:n})},h.createElement("td",{rowSpan:a?2:1},h.createElement(se,{to:r},h.createElement(Ao,{value:r.code}))),h.createElement("td",null,h.createElement(wp,{value:r})),h.createElement("td",null,h.createElement(Op,{value:r.referenceRange})),h.createElement("td",null,r.interpretation&&r.interpretation.length>0&&h.createElement(Ao,{value:r.interpretation[0]})),h.createElement("td",null,r.category&&r.category.length>0&&h.createElement(h.Fragment,null,r.category.map(f=>h.createElement("div",{key:`category-${bp(f)}`},h.createElement(Ao,{value:f}))))),h.createElement("td",null,r.performer?.map(f=>h.createElement(lo,{key:f.reference,value:f}))),h.createElement("td",null,r.status&&h.createElement(Xt,{status:r.status}))),r.hasMember&&h.createElement(xl,{value:r.hasMember,ancestorIds:e.ancestorIds?[...e.ancestorIds,r.id]:[r.id],hideObservationNotes:e.hideObservationNotes}),a&&h.createElement("tr",null,h.createElement("td",{colSpan:6},h.createElement(va,{value:r.note}))))}function wp(e){let o=e.value;return h.createElement(h.Fragment,null,Pp(o))}function Op(e){let o=e.value&&e.value.length>0&&e.value[0];return o?o.text?h.createElement(h.Fragment,null,o.text):h.createElement(Ot,{value:o}):null}function Ep(e){let o=e.interpretation?.[0]?.coding?.[0]?.code;return o==="AA"||o==="LL"||o==="HH"||o==="A"}import{createStyles as Lp}from"@mantine/core";import{getDataType as Rp,getPropertyDisplayName as Np,stringify as Il,toTypedValue as gl}from"@medplum/core";import ue,{useEffect as Hp,useState as Vp}from"react";var qp=Lp(e=>({root:{borderCollapse:"collapse",width:"100%","& tr":{borderTop:`0.1px solid ${e.colors.gray[3]}`},"& th, & td":{padding:`${e.spacing.sm} ${e.spacing.sm}`,verticalAlign:"top"}},removed:{color:e.colors.red[7],textDecoration:"line-through"},added:{color:e.colors.green[7]}}));function Cl(e){let{classes:o}=qp(),t=v(),[r,a]=Vp(!1);if(Hp(()=>{t.requestSchema(e.original.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.original.resourceType]),!r)return null;let n=Rp(e.original.resourceType);return ue.createElement("table",{className:o.root},ue.createElement("colgroup",null,ue.createElement("col",{style:{width:"30%"}}),ue.createElement("col",{style:{width:"35%"}}),ue.createElement("col",{style:{width:"35%"}})),ue.createElement("thead",null,ue.createElement("tr",null,ue.createElement("th",null,"Property"),ue.createElement("th",null,"Before"),ue.createElement("th",null,"After"))),ue.createElement("tbody",null,Object.entries(n.elements).map(([f,s])=>{if(f==="id"||f==="meta")return null;let[l,i]=ye(gl(e.original),f),[u,d]=ye(gl(e.revised),f);return hl(l)&&hl(u)||Il(l)===Il(u)?null:ue.createElement("tr",{key:f},ue.createElement("td",null,Np(f)),ue.createElement("td",{className:o.removed},ue.createElement(pe,{property:s,propertyType:i,value:l,ignoreMissingValues:!0})),ue.createElement("td",{className:o.added},ue.createElement(pe,{property:s,propertyType:d,value:u,ignoreMissingValues:!0})))})))}function hl(e){return!e||Array.isArray(e)&&e.length===0||typeof e=="object"&&Object.keys(e).length===0}import Gp,{useEffect as Up,useState as Qp}from"react";function Ta(e){let o=v(),t=X(e.value),[r,a]=Qp(!1);return Up(()=>{t&&o.requestSchema(t.resourceType).then(()=>a(!0)).catch(console.log)},[o,t]),!r||!t?null:Gp.createElement(Zo,{value:{type:t.resourceType,value:e.forceUseInput?e.value:t},ignoreMissingValues:e.ignoreMissingValues})}import{ActionIcon as zp,Group as Wp,Menu as yl,Text as Da}from"@mantine/core";import{formatDateTime as Xp,getReferenceString as Jp}from"@medplum/core";import re from"react";function vl(e){return re.createElement($e,null,e.children)}function Ze(e){let{resource:o,profile:t,padding:r,popupMenuItems:a,...n}=e,f=t??o.meta?.author,s=e.dateTime??o.meta?.lastUpdated;return re.createElement(ko,{"data-testid":"timeline-item",fill:!0,...n},re.createElement(Wp,{position:"apart",spacing:8,mx:"xs",my:"sm"},re.createElement(ge,{value:f,link:!0,size:"md"}),re.createElement("div",{style:{flex:1}},re.createElement(Da,{size:"sm"},re.createElement(Ee,{color:"dark",weight:500,value:f,link:!0})),re.createElement(Da,{size:"xs"},re.createElement(se,{color:"dimmed",to:e.resource},Xp(s)),re.createElement(Da,{component:"span",color:"dimmed",mx:8},"\xB7"),re.createElement(se,{color:"dimmed",to:e.resource},e.resource.resourceType))),a&&re.createElement(yl,{position:"bottom-end",shadow:"md",width:200},re.createElement(yl.Target,null,re.createElement(zp,{radius:"xl","aria-label":`Actions for ${Jp(e.resource)}`},re.createElement(Or,null))),a)),re.createElement(ho,null,r&&re.createElement("div",{style:{padding:"0 16px 16px 16px"}},e.children),!r&&re.createElement(re.Fragment,null,e.children)))}function Pl(e,o){e.sort((t,r)=>{let a=Sl(t,o),n=Sl(r,o);return a>n?1:a<n?-1:bl(t,o)-bl(r,o)})}function Sl(e,o){if(!Tl(e,o)){let t=e.priority;if(typeof t=="string")return{stat:4,asap:3,urgent:2}[t]??0}return 0}function bl(e,o){if(!Tl(e,o)){if(e.resourceType==="Communication"&&e.sent)return new Date(e.sent).getTime();if((e.resourceType==="DiagnosticReport"||e.resourceType==="Media"||e.resourceType==="Observation")&&e.issued)return new Date(e.issued).getTime();if(e.resourceType==="DocumentReference"&&e.date)return new Date(e.date).getTime()}let t=e.meta?.lastUpdated;return t?new Date(t).getTime():0}function Tl(e,o){return!!o&&e.resourceType===o.resourceType&&e.id===o.id}var rx=$p(e=>({pinnedComment:{backgroundColor:e.colors.blue[0]}}));function Ye(e){let o=v(),t=ze(),r=o.getProfile(),a=kl(null),n=X(e.value),[f,s]=Bl(),[l,i]=Bl([]),u=e.loadTimelineResources,d=kl(l);d.current=l;let c=Kt(C=>{Pl(C,n),C.reverse(),i(C)},[n]),x=Kt(C=>{let N=[];for(let ke of C){if(ke.status!=="fulfilled")continue;let Se=ke.value;if(Se.type==="history"&&s(Se),Se.entry)for(let b of Se.entry)N.push(b.resource)}c(N)},[c]),y=Kt(C=>c([...d.current,C]),[c]),k=Kt(()=>{let C,N;"resourceType"in e.value?(C=e.value.resourceType,N=e.value.id):[C,N]=e.value.reference?.split("/"),u(o,C,N).then(x).catch(console.log)},[o,e.value,u,x]);tx(()=>k(),[k]);function T(C){!n||!e.createCommunication||o.createResource(e.createCommunication(n,r,C)).then(N=>y(N)).catch(console.log)}function B(C){!n||!e.createMedia||o.createResource(e.createMedia(n,r,C)).then(N=>y(N)).then(()=>ka({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:D.createElement(zo,{size:16}),autoClose:2e3})).catch(N=>ka({id:"upload-notification",color:"red",title:"Upload error",message:ox(N),icon:D.createElement(Lr,{size:16}),autoClose:2e3}))}function A(C,N){return o.updateResource({...C,priority:N})}function I(C){A(C,"stat").then(k).catch(console.log)}function O(C){A(C,"routine").then(k).catch(console.log)}function g(C){t(`/${C.resourceType}/${C.id}`)}function M(C){t(`/${C.resourceType}/${C.id}/edit`)}function Y(C){t(`/${C.resourceType}/${C.id}/delete`)}function ne(C){t(`/${C.resourceType}/${C.id}/_history/${C.meta?.versionId}`)}function Le(){ex({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function oo(C){ka({id:"upload-notification",loading:!0,title:"Uploading...",message:ux(C),autoClose:!1,withCloseButton:!1})}return n?D.createElement(vl,null,e.createCommunication&&D.createElement(ko,null,D.createElement(K,{testid:"timeline-form",onSubmit:C=>{T(C.text);let N=a.current;N&&(N.value="",N.focus())}},D.createElement(jp,{spacing:"xs",noWrap:!0,style:{width:"100%"}},D.createElement(ge,{value:r}),D.createElement(Yp,{name:"text",ref:a,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),D.createElement(Dl,{type:"submit",radius:"xl",color:"blue",variant:"filled"},D.createElement(qr,{size:16})),D.createElement(To,{onUpload:B,onUploadStart:Le,onUploadProgress:oo},C=>D.createElement(Dl,{...C,radius:"xl",color:"blue",variant:"filled"},D.createElement(Wo,{size:16})))))),l.map(C=>{if(!C)return null;let N=`${C.resourceType}/${C.id}/${C.meta?.versionId}`;if(C.resourceType===n.resourceType&&C.id===n.id)return D.createElement(ax,{key:N,history:f,resource:C,onDetails:ne});switch(C.resourceType){case"AuditEvent":return D.createElement(sx,{key:N,resource:C,onDetails:g});case"Communication":return D.createElement(fx,{key:N,resource:C,onPin:C.priority!=="stat"?I:void 0,onUnpin:C.priority==="stat"?O:void 0,onDetails:g,onEdit:M,onDelete:Y});case"DiagnosticReport":return D.createElement(ix,{key:N,resource:C,onDetails:g,onEdit:M,onDelete:Y});case"Media":return D.createElement(lx,{key:N,resource:C,onDetails:g,onEdit:M,onDelete:Y});default:return D.createElement(Ze,{key:N,resource:C,padding:!0},D.createElement(Ta,{value:C,ignoreMissingValues:!0}))}})):D.createElement(Kp,{style:{width:"100%",height:"100%"}},D.createElement(_p,null))}function Eo(e){return D.createElement(Ge.Dropdown,null,D.createElement(Ge.Label,null,"Resource"),e.onPin&&D.createElement(Ge.Item,{icon:D.createElement(Gr,{size:14}),onClick:()=>e.onPin(e.resource),"aria-label":`Pin ${rt(e.resource)}`},"Pin"),e.onUnpin&&D.createElement(Ge.Item,{icon:D.createElement(Ur,{size:14}),onClick:()=>e.onUnpin(e.resource),"aria-label":`Unpin ${rt(e.resource)}`},"Unpin"),e.onDetails&&D.createElement(Ge.Item,{icon:D.createElement(Hr,{size:14}),onClick:()=>e.onDetails(e.resource),"aria-label":`Details ${rt(e.resource)}`},"Details"),e.onEdit&&D.createElement(Ge.Item,{icon:D.createElement(Er,{size:14}),onClick:()=>e.onEdit(e.resource),"aria-label":`Edit ${rt(e.resource)}`},"Edit"),e.onDelete&&D.createElement(D.Fragment,null,D.createElement(Ge.Divider,null),D.createElement(Ge.Label,null,"Danger zone"),D.createElement(Ge.Item,{color:"red",icon:D.createElement(Ko,{size:14}),onClick:()=>e.onDelete(e.resource),"aria-label":`Delete ${rt(e.resource)}`},"Delete")))}function ax(e){let o=nx(e.history,e.resource);return o?D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Cl,{original:o,revised:e.resource})):D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement("h3",null,"Created"),D.createElement(Ta,{value:e.resource,ignoreMissingValues:!0,forceUseInput:!0}))}function nx(e,o){let t=e.entry,r=t.findIndex(a=>a.resource?.meta?.versionId===o.meta?.versionId);if(!(r>=t.length-1))return t[r+1].resource}function fx(e){let{classes:o}=rx(),r=!e.resource.priority||e.resource.priority==="routine"?void 0:o.pinnedComment;return D.createElement(Ze,{resource:e.resource,profile:e.resource.sender,dateTime:e.resource.sent,padding:!0,className:r,popupMenuItems:D.createElement(Eo,{...e})},D.createElement("p",null,e.resource.payload?.[0]?.contentString))}function lx(e){let o=e.resource.content?.contentType,t=o&&!o.startsWith("image/")&&!o.startsWith("video/")&&o!=="application/pdf";return D.createElement(Ze,{resource:e.resource,padding:!!t,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Oe,{value:e.resource.content}))}function sx(e){return D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Zp,null,D.createElement("pre",null,e.resource.outcomeDesc)))}function ix(e){return D.createElement(Ze,{resource:e.resource,padding:!0,popupMenuItems:D.createElement(Eo,{...e})},D.createElement(Pa,{value:e.resource}))}function ux(e){if(e.lengthComputable){let o=100*e.loaded/e.total;return`Uploaded: ${Ba(e.loaded)} / ${Ba(e.total)} ${o.toFixed(2)}%`}return`Uploaded: ${Ba(e.loaded)}`}function Ba(e){if(e===0)return"0.00 B";let o=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,o)).toFixed(2)+" "+" KMGTP".charAt(o)+"B"}function xM(e){return dx.createElement(Ye,{value:e.resource,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`,n=100;return Promise.allSettled([o.readHistory(t,r),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:n})])}})}import{createReference as $t}from"@medplum/core";import cx from"react";function SM(e){return cx.createElement(Ye,{value:e.encounter,loadTimelineResources:async(o,t,r)=>Promise.allSettled([o.readHistory("Encounter",r),o.search("Communication","encounter=Encounter/"+r),o.search("Media","encounter=Encounter/"+r)]),createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",encounter:$t(o),subject:o.subject,sender:$t(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",encounter:$t(o),subject:o.subject,operator:$t(t),issued:new Date().toISOString(),content:r})})}import{Button as vI,Loader as SI,Table as bI}from"@mantine/core";import{normalizeOperationOutcome as PI}from"@medplum/core";import ae,{useEffect as fs,useRef as ls,useState as rr}from"react";import{evalFhirPath as mx}from"@medplum/core";import px from"react";function Al(e){let o;try{o=mx(e.path,e.resource)}catch(t){return console.warn("FhirPathDisplay:",t),null}if(o.length>1)throw new Error(`Component "path" for "FhirPathDisplay" must resolve to a single element. Received ${o.length} elements [${JSON.stringify(o,null,2)}]`);return px.createElement(pe,{value:o[0]||"",propertyType:e.propertyType})}import{ActionIcon as fI,Button as Ho,Center as or,createStyles as lI,Group as tr,Loader as sI,Menu as rs,Pagination as iI,Table as uI,Text as Na,UnstyledButton as dI}from"@mantine/core";import{DEFAULT_SEARCH_COUNT as Ga,formatSearchQuery as cI}from"@medplum/core";import S,{useCallback as as,useEffect as ns,useRef as mI,useState as Ha}from"react";import{Box as xx,Button as Ix,Modal as gx,Text as hx}from"@mantine/core";import Lo from"react";function Ml(e){return Lo.createElement(gx,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},Lo.createElement(xx,{display:"flex",sx:{justifyContent:"space-between"}},e.exportCsv&&Lo.createElement(Fl,{text:"CSV",exportLogic:e.exportCsv,onCancel:e.onCancel}),e.exportTransactionBundle&&Lo.createElement(Fl,{text:"Transaction Bundle",exportLogic:e.exportTransactionBundle,onCancel:e.onCancel})),Lo.createElement(hx,{sx:{marginTop:"10px",marginLeft:"2px"}},"Limited to 1000 records"))}function Fl(e){return Lo.createElement(Ix,{onClick:()=>{e.exportLogic(),e.onCancel()}},`Export as ${e.text}`)}import{Button as ft,Modal as Bx}from"@mantine/core";import{getDataType as Ax,getSearchParameters as Fx,stringify as Mx}from"@medplum/core";import J,{useEffect as wx,useRef as Xl,useState as Ox}from"react";import{capitalize as Cx,DEFAULT_SEARCH_COUNT as yx,evalFhirPathTyped as vx,formatDateTime as Sx,Operator as w}from"@medplum/core";import jt from"react";var bx={string:[w.EQUALS,w.NOT,w.CONTAINS,w.EXACT],fulltext:[w.EQUALS,w.NOT,w.CONTAINS,w.EXACT],token:[w.EQUALS,w.NOT],reference:[w.EQUALS,w.NOT],numeric:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS],quantity:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS],date:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS,w.STARTS_AFTER,w.ENDS_BEFORE,w.APPROXIMATELY],datetime:[w.EQUALS,w.NOT_EQUALS,w.GREATER_THAN,w.LESS_THAN,w.GREATER_THAN_OR_EQUALS,w.LESS_THAN_OR_EQUALS,w.STARTS_AFTER,w.ENDS_BEFORE,w.APPROXIMATELY]},Px={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",identifier:"identifier",iterate:"iterate"};function at(e,o){return{...e,filters:o,offset:0,name:void 0}}function HM(e){return at(e,[])}function _t(e,o){return at(e,(e.filters??[]).filter(t=>t.code!==o))}function Ro(e,o,t,r,a){a&&(e=_t(e,o));let n=[];return e.filters&&n.push(...e.filters),n.push({code:o,operator:t,value:r??""}),at(e,n)}function VM(e,o){if(e.fields?.includes(o))return e;let t=[];return e.fields&&t.push(...e.fields),t.push(o),{...e,fields:t,name:void 0}}function Ol(e,o){if(!e.filters)return e;let t=[...e.filters];return t.splice(o,1),{...e,filters:t,name:void 0}}function El(e,o){return Aa(e,o,-1)}function Ll(e,o){return Aa(e,o,0)}function Rl(e,o){return Aa(e,o,1)}function Aa(e,o,t){let r=new Date;r.setDate(r.getDate()+t),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setDate(a.getDate()+1),a.setTime(a.getTime()-1),Ma(e,o,r,a)}function Nl(e,o){return Fa(e,o,-1)}function Hl(e,o){return Fa(e,o,0)}function Vl(e,o){return Fa(e,o,1)}function Fa(e,o,t){let r=new Date;r.setMonth(r.getMonth()+t),r.setDate(1),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setMonth(a.getMonth()+1),a.setDate(1),a.setHours(0,0,0,0),a.setTime(a.getTime()-1),Ma(e,o,r,a)}function ql(e,o){let t=new Date;return t.setMonth(0),t.setDate(1),t.setHours(0,0,0,0),Ma(e,o,t,new Date)}function Ma(e,o,t,r){return e=_t(e,o),e=wl(e,o,w.GREATER_THAN_OR_EQUALS,t),e=wl(e,o,w.LESS_THAN_OR_EQUALS,r),e}function wl(e,o,t,r){return Ro(e,o,t,r.toISOString())}function wa(e,o,t=!0){return Ro(e,o,w.MISSING,t.toString())}function Tx(e,o){return e.offset===o?e:{...e,offset:o,name:void 0}}function Gl(e,o){let t=e.count??yx,r=(o-1)*t;return Tx(e,r)}function Oa(e,o,t){return o===Ul(e)&&t!==void 0&&t===Ql(e)?e:{...e,sortRules:[{code:o,descending:!!t}],name:void 0}}function qM(e,o){let t=!1;return Ul(e)===o&&(t=!Ql(e)),Oa(e,o,t)}function Ul(e){let o=e.sortRules;if(!o||o.length===0)return;let t=o[0].code;return t.startsWith("-")?t.substr(1):t}function Ql(e){let o=e.sortRules;return!o||o.length===0?!1:!!o[0].descending}function zl(e){return bx[e.type]}function nt(e){return Px[e]??""}function he(e){let o=e;return o.includes(".")&&(o=o.split(".").pop()),o==="id"||o==="Id"?"ID":o==="versionId"?"Version ID":(o=o.replace("[x]",""),o=o.replace(/([A-Z])/g," $1"),o=o.replace(/[-_]/g," "),o=o.replace(/\s+/g," "),o=o.trim(),o.split(/\s/).map(Cx).join(" "))}function Wl(e,o){let t=o.name;return t==="id"?e.id:t==="meta.versionId"?e.meta?.versionId:t==="_lastUpdated"?Sx(e.meta?.lastUpdated):o.elementDefinition&&`${e.resourceType}.${o.name}`===o.elementDefinition.path?Dx(e,o.elementDefinition):o.searchParams&&o.searchParams.length===1&&o.name===o.searchParams[0].code?kx(e,o.searchParams[0]):null}function Dx(e,o){let t=o.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[r,a]=ye({type:e.resourceType,value:e},t);return r?jt.createElement(pe,{property:o,propertyType:a,value:r,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function kx(e,o){let t=vx(o.expression,[{type:e.resourceType,value:e}]);return!t||t.length===0?null:jt.createElement(jt.Fragment,null,t.map((r,a)=>jt.createElement(pe,{key:`${a}-${t.length}`,propertyType:r.type,value:r.value,maxWidth:200,ignoreMissingValues:!0,link:!1})))}function Jl(e){let[o,t]=Ox({search:JSON.parse(Mx(e.search))}),r=Xl(null),a=Xl(null);wx(()=>{t({search:e.search})},[e.search]);function n(I){I.key==="Enter"&&i()}function f(){i()}function s(I){I.key==="Enter"&&u()}function l(){u()}function i(){let I=o.search.fields??[],O=r.current?.value;if(O){let g=[...I,O];t({search:{...o.search,fields:g}})}}function u(){let I=o.search.fields??[],O=a.current?.value;if(O){let g=[...I];g.splice(g.indexOf(O),1),t({search:{...o.search,fields:g}})}}function d(){let I=o.search.fields??[],O=a.current?.value;if(!O)return;let g=[...I],M=g.indexOf(O);M<=0||(x(g,M,M-1),t({search:{...o.search,fields:g}}))}function c(){let I=o.search.fields??[],O=a.current?.value;if(!O)return;let g=[...I],M=g.indexOf(O);M>=g.length-1||(x(g,M,M+1),t({search:{...o.search,fields:g}}))}function x(I,O,g){let M=I[O];I[O]=I[g],I[g]=M}if(!e.visible)return null;let y=e.search.resourceType,k=Ax(y),T=Fx(y),B=o.search.fields??[],A=Ex(k,T).filter(I=>!B.includes(I)).sort((I,O)=>I.localeCompare(O));return J.createElement(Bx,{title:"Fields",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel},J.createElement("div",null,J.createElement("table",{style:{margin:"auto"}},J.createElement("thead",null,J.createElement("tr",null,J.createElement("th",{colSpan:2,align:"center"},"Available"),J.createElement("th",{colSpan:2,align:"center"},"Selected"))),J.createElement("tbody",null,J.createElement("tr",null,J.createElement("td",{colSpan:2,align:"center"},J.createElement("select",{ref:r,size:15,tabIndex:1,style:{width:"200px"},onKeyDown:I=>n(I),onDoubleClick:()=>f(),"data-testid":"available"},A.map(I=>J.createElement("option",{key:I,value:I},he(I))))),J.createElement("td",{colSpan:2,align:"center"},J.createElement("select",{ref:a,size:15,tabIndex:4,style:{width:"200px"},onKeyDown:I=>s(I),onDoubleClick:()=>l(),"data-testid":"selected"},B.map(I=>J.createElement("option",{key:I,value:I},he(I))))))),J.createElement("tfoot",null,J.createElement("tr",null,J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:i},"Add")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:u},"Remove")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:d},"Up")),J.createElement("td",{align:"center"},J.createElement(ft,{compact:!0,variant:"outline",onClick:c},"Down")))))),J.createElement(ft,{onClick:()=>e.onOk(o.search)},"OK"))}function Ex(e,o){let t=[],r=new Set,a=new Set;for(let n of Object.keys(e.elements))t.push(n),r.add(n.toLowerCase()),a.add(he(n));if(o)for(let n of Object.keys(o)){let f=he(n);!r.has(n)&&!a.has(f)&&(t.push(n),r.add(n),a.add(he(n)))}return t}import{Button as st,Group as Ux,Modal as Qx,NativeSelect as $l}from"@mantine/core";import{getSearchParameters as zx,stringify as jl}from"@medplum/core";import R,{useEffect as Wx,useRef as Zl,useState as La}from"react";import{formatDateTime as Lx,getSearchParameterDetails as Rx,globalSchema as Nx,Operator as Kl,SearchParameterType as Hx}from"@medplum/core";import lt from"react";function Zt(e){let{resourceType:o,filter:t}=e,r=Nx.types[o].searchParams?.[t.code];if(r){if(r.type==="reference"&&(t.operator===Kl.EQUALS||t.operator===Kl.NOT_EQUALS))return lt.createElement(Ee,{value:{reference:t.value}});let a=Rx(o,r);if(t.code==="_lastUpdated"||a.type===Hx.DATETIME)return lt.createElement(lt.Fragment,null,Lx(t.value))}return lt.createElement(lt.Fragment,null,t.value)}import{Checkbox as Vx,TextInput as Ea}from"@mantine/core";import{getSearchParameterDetails as qx,SearchParameterType as No}from"@medplum/core";import io from"react";function Yt(e){let o=qx(e.resourceType,e.searchParam),t="filter-value";switch(o.type){case No.REFERENCE:return io.createElement(wo,{name:t,defaultValue:e.defaultValue?{reference:e.defaultValue}:void 0,targetTypes:e.searchParam.target,autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(r.reference):e.onChange("")}});case No.BOOLEAN:return io.createElement(Vx,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultChecked:e.defaultValue==="true",autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.checked.toString())});case No.DATE:return io.createElement(Ea,{type:"date",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case No.DATETIME:return io.createElement(Me,{name:t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:e.onChange});case No.NUMBER:return io.createElement(Ea,{type:"number",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case No.QUANTITY:return io.createElement(Pe,{name:t,defaultValue:Gx(e.defaultValue),autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(`${r.value}`):e.onChange("")}});default:return io.createElement(Ea,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value),placeholder:"Search value"})}}function Gx(e){if(e){let[o,t,r]=e.split("|");if(o)return{value:parseFloat(o),system:t,unit:r}}}function Yl(e){let[o,t]=La(JSON.parse(jl(e.search))),[r,a]=La(-1),n=Zl(o);n.current=o,Wx(()=>{t(JSON.parse(jl(e.search)))},[e.search]);function f(u){t(Ro(n.current,u.code,u.operator,u.value))}if(!e.visible)return null;let s=e.search.resourceType,l=zx(s)??{},i=o.filters||[];return R.createElement(Qx,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:e.visible,onClose:e.onCancel},R.createElement("div",null,R.createElement("table",null,R.createElement("colgroup",null,R.createElement("col",{style:{width:200}}),R.createElement("col",{style:{width:200}}),R.createElement("col",{style:{width:380}}),R.createElement("col",{style:{width:120}})),R.createElement("thead",null,R.createElement("tr",null,R.createElement("th",null,"Field"),R.createElement("th",null,"Operation"),R.createElement("th",null,"Value"),R.createElement("th",null,"Actions"))),R.createElement("tbody",null,i.map((u,d)=>d===r?R.createElement(_l,{key:`filter-${u.code}-${u.operator}-${u.value}-input`,resourceType:s,searchParams:l,defaultValue:u,okText:"Save",onOk:c=>{let x=[...i];x[d]=c,t(at(n.current,x)),a(-1)},onCancel:()=>a(-1)}):R.createElement(Xx,{key:`filter-${u.code}-${u.operator}-${u.value}-display`,resourceType:s,searchParams:l,filter:u,onEdit:()=>a(d),onDelete:()=>t(Ol(n.current,d))})),R.createElement(_l,{resourceType:s,searchParams:l,okText:"Add",onOk:f})))),R.createElement(Ux,{position:"right",mt:"xl"},R.createElement(st,{onClick:()=>e.onOk(n.current)},"OK")))}function Xx(e){let{filter:o}=e;return R.createElement("tr",null,R.createElement("td",null,he(o.code)),R.createElement("td",null,nt(o.operator)),R.createElement("td",null,R.createElement(Zt,{resourceType:e.resourceType,filter:o})),R.createElement("td",null,R.createElement(st,{compact:!0,variant:"outline",onClick:e.onEdit},"Edit"),R.createElement(st,{compact:!0,variant:"outline",onClick:e.onDelete},"Delete")))}function _l(e){let[o,t]=La(e.defaultValue??{}),r=Zl(o);r.current=o;function a(i){t({...r.current,code:i})}function n(i){t({...r.current,operator:i})}function f(i){t({...r.current,value:i})}let s=e.searchParams[o.code],l=s&&zl(s);return R.createElement("tr",null,R.createElement("td",null,R.createElement($l,{"data-testid":"filter-field",defaultValue:r.current.code,onChange:i=>a(i.currentTarget.value),data:["",...Object.keys(e.searchParams).map(i=>({value:i,label:he(i)}))]})),R.createElement("td",null,l&&R.createElement($l,{"data-testid":"filter-operation",defaultValue:o.operator,onChange:i=>n(i.currentTarget.value),data:["",...l.map(i=>({value:i,label:nt(i)}))]})),R.createElement("td",null,s&&o.operator&&R.createElement(Yt,{resourceType:e.resourceType,searchParam:s,defaultValue:o.value,onChange:f})),R.createElement("td",null,o.code&&o.operator&&R.createElement(st,{compact:!0,variant:"outline",onClick:()=>{e.onOk(r.current),t({})}},e.okText),e.onCancel&&R.createElement(st,{compact:!0,variant:"outline",onClick:e.onCancel},"Cancel")))}import{Button as Jx,Grid as Ra,Modal as Kx}from"@mantine/core";import uo,{useState as $x}from"react";function es(e){let[o,t]=$x(e.defaultValue??"");if(!e.visible||!e.searchParam||!e.filter)return null;function r(){e.onOk({...e.filter,value:o})}return uo.createElement(Kx,{title:e.title,size:"xl",opened:e.visible,onClose:e.onCancel},uo.createElement(K,{onSubmit:r},uo.createElement(Ra,null,uo.createElement(Ra.Col,{span:10},uo.createElement(Yt,{resourceType:e.resourceType,searchParam:e.searchParam,defaultValue:o,autoFocus:!0,onChange:t})),uo.createElement(Ra.Col,{span:2},uo.createElement(Jx,{onClick:r,fullWidth:!0},"OK")))))}import{Menu as F}from"@mantine/core";import{Operator as de}from"@medplum/core";import m from"react";function os(e){if(!e.searchParams)return null;function o(n,f){a(Oa(e.search,n.code,f))}function t(n){a(_t(e.search,n.code))}function r(n,f){e.onPrompt(n,{code:n.code,operator:f,value:""})}function a(n){e.onChange(n)}return e.searchParams.length===1?m.createElement(jx,{search:e.search,searchParam:e.searchParams[0],onSort:o,onPrompt:r,onChange:a,onClear:t}):m.createElement(F.Dropdown,null,e.searchParams.map(n=>m.createElement(F.Item,{key:n.code},he(n.code))))}function jx(e){switch(e.searchParam.type){case"date":return m.createElement(_x,{...e});case"number":case"quantity":return m.createElement(Zx,{...e});case"reference":return m.createElement(Yx,{...e});case"string":case"token":case"uri":return m.createElement(eI,{...e});default:return m.createElement(m.Fragment,null,"Unknown search param type: ",e.searchParam.type)}}function _x(e){let{searchParam:o}=e,t=o.code;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort Oldest to Newest"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Newest to Oldest"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT_EQUALS)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(It,{size:14}),onClick:()=>e.onPrompt(o,de.ENDS_BEFORE)},"Before..."),m.createElement(F.Item,{icon:m.createElement(xt,{size:14}),onClick:()=>e.onPrompt(o,de.STARTS_AFTER)},"After..."),m.createElement(F.Item,{icon:m.createElement(Tr,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Between..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Rl(e.search,t))},"Tomorrow"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Ll(e.search,t))},"Today"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(El(e.search,t))},"Yesterday"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Vl(e.search,t))},"Next Month"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Hl(e.search,t))},"This Month"),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(Nl(e.search,t))},"Last Month"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Ne,{size:14}),onClick:()=>e.onChange(ql(e.search,t))},"Year to date"),m.createElement(er,{...e}))}function Zx(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort Smallest to Largest"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Largest to Smallest"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT_EQUALS)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(xt,{size:14}),onClick:()=>e.onPrompt(o,de.GREATER_THAN)},"Greater than..."),m.createElement(F.Item,{icon:m.createElement(go,{size:14}),onClick:()=>e.onPrompt(o,de.GREATER_THAN_OR_EQUALS)},"Greater than or equal to..."),m.createElement(F.Item,{icon:m.createElement(It,{size:14}),onClick:()=>e.onPrompt(o,de.LESS_THAN)},"Less than..."),m.createElement(F.Item,{icon:m.createElement(go,{size:14}),onClick:()=>e.onPrompt(o,de.LESS_THAN_OR_EQUALS)},"Less than or equal to..."),m.createElement(er,{...e}))}function Yx(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT)},"Does not equal..."),m.createElement(er,{...e}))}function eI(e){let{searchParam:o}=e;return m.createElement(F.Dropdown,null,m.createElement(F.Item,{icon:m.createElement(Xo,{size:14}),onClick:()=>e.onSort(o,!1)},"Sort A to Z"),m.createElement(F.Item,{icon:m.createElement(Jo,{size:14}),onClick:()=>e.onSort(o,!0)},"Sort Z to A"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(Io,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Equals..."),m.createElement(F.Item,{icon:m.createElement(xo,{size:14}),onClick:()=>e.onPrompt(o,de.NOT)},"Does not equal..."),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(kr,{size:14}),onClick:()=>e.onPrompt(o,de.CONTAINS)},"Contains..."),m.createElement(F.Item,{icon:m.createElement(Dr,{size:14}),onClick:()=>e.onPrompt(o,de.EQUALS)},"Does not contain..."),m.createElement(er,{...e}))}function er(e){let{searchParam:o}=e,t=o.code;return m.createElement(m.Fragment,null,m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement(br,{size:14}),onClick:()=>e.onChange(wa(e.search,t))},"Missing"),m.createElement(F.Item,{icon:m.createElement(Sr,{size:14}),onClick:()=>e.onChange(wa(e.search,t,!1))},"Not missing"),m.createElement(F.Divider,null),m.createElement(F.Item,{icon:m.createElement($r,{size:14}),onClick:()=>e.onClear(o)},"Clear filters"))}import{getElementDefinition as oI,getSearchParameter as tI,getSearchParameterDetails as rI,getSearchParameters as aI}from"@medplum/core";function ts(e){let o=e.resourceType,t=[];for(let r of e.fields||["id","_lastUpdated"])t.push(nI(o,r));return t}function nI(e,o){if(o==="_lastUpdated")return{name:"_lastUpdated",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_lastUpdated",name:"_lastUpdated",type:"date",expression:"Resource.meta.lastUpdated"}]};if(o==="meta.versionId")return{name:"meta.versionId",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_versionId",name:"_versionId",type:"token",expression:"Resource.meta.versionId"}]};let t=oI(e,o),r=tI(e,o.toLowerCase());if(t&&r)return{name:o,elementDefinition:t,searchParams:[r]};if(t){let a=aI(e),n;if(a){let f=`${e}.${o.replaceAll("[x]","")}`;n=Object.values(a).filter(s=>s.expression?.includes(f)),n.length===0&&(n=void 0)}return{name:o,elementDefinition:t,searchParams:n}}if(r){let a=rI(e,r);return{name:o,elementDefinition:a.elementDefinitions?.[0],searchParams:[r]}}return{name:o}}var Va=class extends Event{constructor(t){super("change");this.definition=t}},qa=class extends Event{constructor(t){super("load");this.response=t}},co=class extends Event{constructor(t,r){super("click");this.resource=t,this.browserEvent=r}},pI=lI(e=>({root:{maxWidth:"100%",overflow:"auto",textAlign:"left",marginBottom:"20px"},table:{cursor:"pointer"},tr:{"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.colors.gray[0]}},th:{padding:"0 !important"},control:{width:"100%",padding:`${e.spacing.xs} ${e.spacing.md}`,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0]}},icon:{width:21,height:21,borderRadius:21}}));function xI(e){let{classes:o}=pI(),t=v(),[r,a]=Ha(!1),[n,f]=Ha(),{search:s,onLoad:l}=e,[i,u]=Ha({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),d=mI(i);d.current=i;let c=s.total??"accurate",x=as(b=>{f(void 0),t.search(s.resourceType,cI({...s,total:c,fields:void 0}),b).then(W=>{u({...d.current,searchResponse:W}),l&&l(new qa(W))}).catch(W=>{u({...d.current,searchResponse:void 0}),f(W)})},[t,s,c,l]),y=as(()=>{u({...d.current,searchResponse:void 0}),x({cache:"reload"})},[x]);ns(()=>{x()},[x]);function k(b,W){b.stopPropagation();let fe=b.target.checked,te={...d.current.selected};fe?te[W]=!0:delete te[W],u({...d.current,selected:te})}function T(b){b.stopPropagation();let Re=b.target.checked,fe={},te=d.current.searchResponse;Re&&te?.entry&&te.entry.forEach(be=>{be.resource?.id&&(fe[be.resource.id]=!0)}),u({...d.current,selected:fe})}function B(){let b=d.current;if(!b.searchResponse?.entry||b.searchResponse.entry.length===0)return!1;for(let W of b.searchResponse.entry)if(W.resource?.id&&!b.selected[W.resource.id])return!1;return!0}function A(b){e.onChange&&e.onChange(new Va(b))}function I(b,W){if(ht(b.target)||b.button===2)return;H(b);let Re=b.button===1||b.ctrlKey||b.metaKey;!Re&&e.onClick&&e.onClick(new co(W,b)),Re&&e.onAuxClick&&e.onAuxClick(new co(W,b))}function O(){return!!(e.onExport??e.onExportCsv??e.onExportTransactionBundle)}if(ns(()=>{a(!1),t.requestSchema(e.search.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.search.resourceType]),!r)return S.createElement(or,{style:{width:"100%",height:"100%"}},S.createElement(sI,null));let g=e.checkboxesEnabled,M=ts(s),Y=s.resourceType,ne=i.searchResponse,oo=ne?.entry?.map(b=>b.resource),C="subtle",N="gray",ke=16,Se=window.innerWidth<768;return S.createElement("div",{className:o.root,"data-testid":"search-control"},!e.hideToolbar&&S.createElement(tr,{position:"apart",mb:"xl"},S.createElement(tr,{spacing:2},S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Fr,{size:ke}),onClick:()=>u({...d.current,fieldEditorVisible:!0})},"Fields"),S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Nr,{size:ke}),onClick:()=>u({...d.current,filterEditorVisible:!0})},"Filters"),e.onNew&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Rr,{size:ke}),onClick:e.onNew},"New..."),!Se&&O()&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Kr,{size:ke}),onClick:e.onExport?e.onExport:()=>u({...d.current,exportDialogVisible:!0})},"Export..."),!Se&&e.onDelete&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Ko,{size:ke}),onClick:()=>e.onDelete(Object.keys(i.selected))},"Delete..."),!Se&&e.onBulk&&S.createElement(Ho,{compact:!0,variant:C,color:N,leftIcon:S.createElement(Pr,{size:ke}),onClick:()=>e.onBulk(Object.keys(i.selected))},"Bulk...")),S.createElement(tr,{spacing:2},ne&&S.createElement(Na,{size:"xs",color:"dimmed"},CI(s,ne.total),"-",yI(s,ne.total)," of"," ",`${c==="estimate"?"~":""}${ne.total?.toLocaleString()}`),S.createElement(fI,{title:"Refresh",onClick:y},S.createElement(zr,{size:"1.125rem"})))),S.createElement(uI,{className:o.table},S.createElement("thead",null,S.createElement("tr",null,g&&S.createElement("th",null,S.createElement("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:B(),onChange:b=>T(b)})),M.map(b=>S.createElement("th",{key:b.name},S.createElement(rs,{shadow:"md",width:240,position:"bottom-end"},S.createElement(rs.Target,null,S.createElement(dI,{className:o.control},S.createElement(tr,{position:"apart",noWrap:!0},S.createElement(Na,{weight:500,size:"sm"},he(b.name)),S.createElement(or,{className:o.icon},S.createElement(Cr,{size:14,stroke:1.5}))))),S.createElement(os,{search:e.search,searchParams:b.searchParams,onPrompt:(W,Re)=>{u({...d.current,filterDialogVisible:!0,filterDialogSearchParam:W,filterDialogFilter:Re})},onChange:W=>{A(W)}}))))),!e.hideFilters&&S.createElement("tr",null,g&&S.createElement("th",null),M.map(b=>S.createElement("th",{key:b.name},b.searchParams&&S.createElement(II,{resourceType:Y,searchParams:b.searchParams,filters:e.search.filters}))))),S.createElement("tbody",null,oo?.map(b=>b&&S.createElement("tr",{key:b.id,className:o.tr,"data-testid":"search-control-row",onClick:W=>I(W,b),onAuxClick:W=>I(W,b)},g&&S.createElement("td",null,S.createElement("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${b.id}`,checked:!!i.selected[b.id],onChange:W=>k(W,b.id)})),M.map(W=>S.createElement("td",{key:W.name},Wl(b,W))))))),oo?.length===0&&S.createElement($e,null,S.createElement(or,{style:{height:150}},S.createElement(Na,{size:"xl",color:"dimmed"},"No results"))),ne?.total!==void 0&&ne.total>0&&S.createElement(or,{m:"md",p:"md"},S.createElement(iI,{value:gI(s),total:hI(s,ne.total),onChange:b=>A(Gl(s,b)),getControlProps:b=>{switch(b){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})),n&&S.createElement("div",{"data-testid":"search-error"},S.createElement("pre",{style:{textAlign:"left"}},JSON.stringify(n,void 0,2))),S.createElement(Jl,{search:e.search,visible:d.current.fieldEditorVisible,onOk:b=>{A(b),u({...d.current,fieldEditorVisible:!1})},onCancel:()=>{u({...d.current,fieldEditorVisible:!1})}}),S.createElement(Yl,{search:e.search,visible:d.current.filterEditorVisible,onOk:b=>{A(b),u({...d.current,filterEditorVisible:!1})},onCancel:()=>{u({...d.current,filterEditorVisible:!1})}}),S.createElement(Ml,{visible:d.current.exportDialogVisible,exportCsv:e.onExportCsv,exportTransactionBundle:e.onExportTransactionBundle,onCancel:()=>{u({...d.current,exportDialogVisible:!1})}}),S.createElement(es,{key:i.filterDialogSearchParam?.code,visible:d.current.filterDialogVisible,title:i.filterDialogSearchParam?.code?he(i.filterDialogSearchParam.code):"",resourceType:Y,searchParam:i.filterDialogSearchParam,filter:i.filterDialogFilter,defaultValue:"",onOk:b=>{A(Ro(e.search,b.code,b.operator,b.value)),u({...d.current,filterDialogVisible:!1})},onCancel:()=>{u({...d.current,filterDialogVisible:!1})}}))}var _w=S.memo(xI);function II(e){let o=(e.filters??[]).filter(t=>e.searchParams.find(r=>r.code===t.code));return o.length===0?S.createElement("span",null,"no filters"):S.createElement(S.Fragment,null,o.map(t=>S.createElement("div",{key:`filter-${t.code}-${t.operator}-${t.value}`},nt(t.operator),"\xA0",S.createElement(Zt,{resourceType:e.resourceType,filter:t}))))}function gI(e){return Math.floor((e.offset??0)/(e.count??Ga))+1}function hI(e,o){let t=e.count??Ga;return Math.ceil(o/t)}function CI(e,o){return Math.min(o,(e.offset??0)+1)}function yI(e,o){return Math.min(o,((e.offset??0)+1)*(e.count??Ga))}function TI(e){let o=v(),[t,r]=rr(!1),[a,n]=rr(),{query:f,fields:s}=e,[l,i]=rr(),[u,d]=rr({}),c=ls();c.current=l;let x=ls({});x.current=u,fs(()=>{n(void 0),o.graphql(f).then(i).catch(I=>n(PI(I)))},[o,f]);function y(I,O){I.stopPropagation();let M=I.target.checked,Y={...x.current};M?Y[O]=!0:delete Y[O],d(Y)}function k(I){I.stopPropagation();let g=I.target.checked,M={},Y=c.current?.data.ResourceList;g&&Y&&Y.forEach(ne=>{ne.id&&(M[ne.id]=!0)}),d(M)}function T(){let I=c.current?.data.ResourceList;if(!I||I.length===0)return!1;for(let O of I)if(O.id&&!x.current[O.id])return!1;return!0}function B(I,O){ht(I.target)||(H(I),I.button!==1&&e.onClick&&e.onClick(new co(O,I)),I.button===1&&e.onAuxClick&&e.onAuxClick(new co(O,I)))}if(fs(()=>{o.requestSchema(e.resourceType).then(()=>r(!0)).catch(console.log)},[o,e.resourceType]),!t)return ae.createElement(SI,null);let A=e.checkboxesEnabled;return ae.createElement("div",{onContextMenu:I=>H(I),"data-testid":"search-control"},ae.createElement(bI,null,ae.createElement("thead",null,ae.createElement("tr",null,A&&ae.createElement("th",null,ae.createElement("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:T(),onChange:I=>k(I)})),s.map(I=>ae.createElement("th",{key:I.name},I.name)))),ae.createElement("tbody",null,l?.data.ResourceList.map(I=>I&&ae.createElement("tr",{key:I.id,"data-testid":"search-control-row",onClick:O=>B(O,I),onAuxClick:O=>B(O,I)},A&&ae.createElement("td",null,ae.createElement("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${I.id}`,checked:!!u[I.id],onChange:O=>y(O,I.id)})),s.map(O=>ae.createElement("td",{key:O.name},ae.createElement(Al,{propertyType:O.propertyType,path:O.fhirPath,resource:I}))))))),l?.data.ResourceList.length===0&&ae.createElement("div",{"data-testid":"empty-search"},"No results"),a&&ae.createElement("div",{"data-testid":"search-error"},ae.createElement("pre",{style:{textAlign:"left"}},JSON.stringify(a,void 0,2))),e.onBulk&&ae.createElement(vI,{onClick:()=>e.onBulk(Object.keys(x.current))},"Bulk..."))}var fO=ae.memo(TI);import{showNotification as DI}from"@mantine/notifications";import kI,{useEffect as ss,useMemo as BI,useState as AI}from"react";function cO(e){let o=e.medplum,t=e.navigate??FI,[r,a]=AI({profile:o.getProfile(),loading:!1});ss(()=>{function f(){a({...r,profile:o.getProfile()})}return o.addEventListener("change",f),()=>o.removeEventListener("change",f)},[o,r]),ss(()=>{function f(){DI({color:"red",message:"No connection to server",autoClose:!1})}return o.addEventListener("offline",f),()=>o.removeEventListener("offline",f)},[o]);let n=BI(()=>({...r,medplum:o,navigate:t}),[r,o,t]);return kI.createElement(hr.Provider,{value:n},e.children)}function FI(e){window.location.assign(e)}import{createReference as ar}from"@medplum/core";import MI,{useCallback as wI}from"react";function CO(e){let o=wI((t,r,a)=>{let n=`${r}/${a}`,f=100;return Promise.allSettled([t.readHistory("Patient",a),t.search("Communication",{subject:n,_count:f}),t.search("Device",{patient:n,_count:f}),t.search("DeviceRequest",{patient:n,_count:f}),t.search("DiagnosticReport",{subject:n,_count:f}),t.search("Media",{subject:n,_count:f}),t.search("ServiceRequest",{subject:n,_count:f}),t.search("Task",{subject:n,_count:f})])},[]);return MI.createElement(Ye,{value:e.patient,loadTimelineResources:o,createCommunication:(t,r,a)=>({resourceType:"Communication",status:"completed",subject:ar(t),sender:ar(r),sent:new Date().toISOString(),payload:[{contentString:a}]}),createMedia:(t,r,a)=>({resourceType:"Media",status:"completed",subject:ar(t),operator:ar(r),issued:new Date().toISOString(),content:a})})}import{Anchor as us,Button as OI,createStyles as EI,NativeSelect as LI,Stack as RI,TextInput as Qa}from"@mantine/core";import{getReferenceString as NI}from"@medplum/core";import q,{useEffect as is,useRef as ds,useState as it}from"react";var cs=EI(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}}}));function RO(e){let o=v(),t=X(e.value),[r,a]=it(!1),[n,f]=it(),[s,l]=it(),[i,u]=it();function d(){l(void 0)}function c(){f(void 0)}let x=ds();if(x.current=i,is(()=>{o.requestSchema("PlanDefinition").then(()=>a(!0)).catch(console.log)},[o]),is(()=>(u(QI(t??{resourceType:"PlanDefinition"})),document.addEventListener("mouseover",d),document.addEventListener("click",c),()=>{document.removeEventListener("mouseover",d),document.removeEventListener("click",c)}),[t]),!r||!i)return null;function y(k,T){u({...x.current,[k]:T})}return q.createElement("div",null,q.createElement(K,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(i)},q.createElement(Qa,{label:"Plan Title",defaultValue:i.title,onChange:k=>y("title",k.currentTarget.value)}),q.createElement(ms,{actions:i.action||[],selectedKey:n,setSelectedKey:f,hoverKey:s,setHoverKey:l,onChange:k=>y("action",k)}),q.createElement(OI,{type:"submit"},"Save")))}function ms(e){let{classes:o}=cs(),t=ds();t.current=e.actions;function r(f){e.onChange(t.current.map(s=>s.id===f.id?f:s))}function a(f){e.onChange([...t.current,f]),e.setSelectedKey(f.id)}function n(f){e.onChange(t.current.filter(s=>s!==f))}return q.createElement("div",{className:o.section},e.actions.map(f=>q.createElement("div",{key:f.id},q.createElement(HI,{action:f,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:r,onRemove:()=>n(f)}))),q.createElement("div",{className:o.bottomActions},q.createElement(us,{href:"#",onClick:f=>{H(f),a({id:xs()})}},"Add action")))}function HI(e){let{classes:o,cx:t}=cs(),{action:r}=e,a=UI(r),n=e.selectedKey===e.action.id,f=e.hoverKey===e.action.id;function s(u){u.stopPropagation(),e.setSelectedKey(e.action.id)}function l(u){H(u),e.setHoverKey(e.action.id)}let i=t(o.section,{[o.editing]:n,[o.hovering]:f&&!n});return q.createElement("div",{"data-testid":r.id,className:i,onClick:s,onMouseOver:l},n?q.createElement(qI,{action:r,actionType:a,onChange:e.onChange,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onRemove:e.onRemove}):q.createElement(VI,{action:r,actionType:a}),q.createElement("div",{className:o.bottomActions},q.createElement(us,{href:"#",onClick:u=>{u.preventDefault(),e.onRemove()}},"Remove")))}var za={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(e=>({code:e}))};function VI(e){let{action:o,actionType:t}=e,[r,a]=ps(o);return q.createElement("div",null,q.createElement("div",null,o.title||"Untitled"," ",t&&`(${t})`),o.definitionCanonical&&q.createElement("div",null,q.createElement(lo,{value:{reference:o.definitionCanonical}})),r&&q.createElement("div",null,q.createElement(pe,{property:za,propertyType:a,value:r})))}function qI(e){let{action:o}=e,[t,r]=it(e.actionType);function a(n,f){e.onChange({...o,[n]:f})}return q.createElement(RI,{spacing:"xl"},q.createElement(Qa,{name:`actionTitle-${o.id}`,label:"Title",defaultValue:o.title,onChange:n=>a("title",n.currentTarget.value)}),q.createElement(Qa,{name:`actionDescription-${o.id}`,label:"Description",defaultValue:o.description,onChange:n=>a("description",n.currentTarget.value)}),q.createElement(LI,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${o.id}`,defaultValue:t,onChange:n=>r(n.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),o.action&&o.action.length>0&&q.createElement(ms,{actions:o.action,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:n=>a("action",n)}),(()=>{switch(t){case"appointment":return q.createElement(nr,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action:o,onChange:e.onChange});case"lab":return q.createElement(nr,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});case"questionnaire":return q.createElement(nr,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action:o,onChange:e.onChange});case"task":return q.createElement(nr,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});default:return null}})(),q.createElement(ve,{title:"Timing",description:"When the action should take place."},q.createElement(GI,{name:"timing-"+o.id,action:o,onChange:e.onChange})))}function nr(e){let{id:o,definitionCanonical:t}=e.action,r=t?.startsWith(e.resourceType+"/")?{reference:t}:void 0;return q.createElement(Ut,{name:o,resourceType:e.resourceType,defaultValue:r,loadOnFocus:!0,onChange:a=>{a?e.onChange({...e.action,definitionCanonical:NI(a)}):e.onChange({...e.action,definitionCanonical:void 0})}})}function GI(e){let o=e.action,t="timing",[r,a]=ps(o);return q.createElement(qe,{property:za,name:"timing[x]",defaultValue:r,defaultPropertyType:a,onChange:(n,f)=>{e.onChange(et(o,t,f??t,za,n))}})}function UI(e){if(e.definitionCanonical?.startsWith("Schedule"))return"appointment";if(e.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(e.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function ps(e){return ye({type:"PlanDefinitionAction",value:e},"timing")}var Ua=1;function xs(e){if(e){if(e.startsWith("id-")){let o=parseInt(e.substring(3),10);isNaN(o)||(Ua=Math.max(Ua,o+1))}return e}return"id-"+Ua++}function QI(e){return{...e,action:Is(e.action)}}function Is(e){if(e)return e.map(o=>({...o,id:xs(o.id),action:Is(o.action)}))}import{Anchor as De,Box as _a,Button as ug,createStyles as dg,Group as cg,NativeSelect as mg,Space as pg,Textarea as xg,TextInput as Za,Title as Ig}from"@mantine/core";import{getElementDefinition as gg,isResource as hg}from"@medplum/core";import P,{useEffect as Ds,useRef as Cg,useState as ur}from"react";import{Checkbox as $I,Group as jI,MultiSelect as _I,NativeSelect as ZI,Radio as Ss,Textarea as YI,TextInput as ut}from"@mantine/core";import{capitalize as Ja,deepEquals as eg,formatCoding as Ka,getElementDefinition as og,getTypedPropertyValue as Ue,stringify as bs}from"@medplum/core";import Z from"react";import{deepClone as zI,evalFhirPathTyped as WI,formatCoding as XI,getExtension as gs,getTypedPropertyValue as Wa}from"@medplum/core";var fr=(B=>(B.group="group",B.display="display",B.question="question",B.boolean="boolean",B.decimal="decimal",B.integer="integer",B.date="date",B.dateTime="dateTime",B.time="time",B.string="string",B.text="text",B.url="url",B.choice="choice",B.openChoice="open-choice",B.attachment="attachment",B.reference="reference",B.quantity="quantity",B))(fr||{});function hs(e){return e.type==="choice"||e.type==="open-choice"}function Cs(e,o){if(!e.enableWhen)return!0;let t=e.enableBehavior??"any";for(let r of e.enableWhen){let a=vs(o,r.question);if(r.operator==="exists"&&!r.answerBoolean&&!a?.length){if(t==="any")return!0;continue}let{anyMatch:n,allMatch:f}=KI(r,a,t);if(t==="any"&&n)return!0;if(t==="all"&&!f)return!1}return t!=="any"}function ys(e,o,t){return e.map(r=>{let a=t.answerOption?.find(f=>XI(f.valueCoding)===r||f[o]===r),n=Wa({type:"QuestionnaireItemAnswerOption",value:a},"value");return{[o]:n?.value}})}function vs(e,o){if(e)for(let t of e){if(t.linkId===o)return t.answer;if(t.item){let r=vs(t.item,o);if(r)return r}}}function JI(e,o,t){if(t==="exists")return!!e===o.value;if(e){let r=t==="="||t==="!="?t?.replace("=","~"):t,[{value:a}]=WI(`%actualAnswer ${r} %expectedAnswer`,[e],{actualAnswer:e,expectedAnswer:o});return a}else return!1}function KI(e,o,t){let r=o||[],a=Wa({type:"QuestionnaireItemEnableWhen",value:e},"answer[x]"),n=!1,f=!0;for(let s of r){let l=Wa({type:"QuestionnaireResponseItemAnswer",value:s},"value[x]"),{operator:i}=e;if(JI(l,a,i)?n=!0:f=!1,t==="any"&&n)break}return{anyMatch:n,allMatch:f}}function lr(e){let o=gs(e,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(o){if(o.valueCode!==void 0)return[o.valueCode];if(o.valueCodeableConcept)return o.valueCodeableConcept?.coding?.map(t=>t.code)}}function sr(e,o){let t=zI(e),r=gs(t,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!o||o.length===0?(r&&(t.extension=t.extension?.filter(a=>a!==r)),t):(r||(t.extension||(t.extension=[]),r={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},t.extension.push(r)),o.length===1?(r.valueCode=o[0],delete r.valueCodeableConcept):(r.valueCodeableConcept={coding:o.map(a=>({code:a}))},delete r.valueCode),t)}function ir(e){let o=e.item,t=e.index;function r(l,i){let u=i??0,d=e.currentResponseItems?.filter(x=>x.linkId===o.linkId)??[],c;Array.isArray(l)?c=l:c=ng(d[0]?.answer??[],u,l),e.onChange({id:d[0].id,linkId:o.linkId,text:o.text,answer:c})}let a=o.type;if(!a)return null;let n=o.linkId;if(!n)return null;let f=o.initial&&o.initial.length>0?o.initial[0]:void 0,s=ja(e.allResponses,o,e.index,e.groupSequence)??Ue({type:"QuestionnaireItemInitial",value:f},"value");switch(a){case"boolean":return Z.createElement(Rt,{key:e.item.linkId,title:e.item.text,htmlFor:e.item.linkId},Z.createElement($I,{id:e.item.linkId,name:e.item.linkId,defaultChecked:s?.value,onChange:l=>r({valueBoolean:l.currentTarget.checked},t)}));case"decimal":return Z.createElement(ut,{type:"number",step:"any",id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueDecimal:l.currentTarget.valueAsNumber},t)});case"integer":return Z.createElement(ut,{type:"number",step:1,id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueInteger:l.currentTarget.valueAsNumber},t)});case"date":return Z.createElement(ut,{type:"date",id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueDate:l.currentTarget.value},t)});case"dateTime":return Z.createElement(Me,{name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueDateTime:l},t)});case"time":return Z.createElement(ut,{type:"time",id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueTime:l.currentTarget.value},t)});case"string":case"url":return Z.createElement(ut,{id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueString:l.currentTarget.value},t)});case"text":return Z.createElement(YI,{id:n,name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueString:l.currentTarget.value},t)});case"attachment":return Z.createElement(jI,{py:4},Z.createElement(vt,{name:n,defaultValue:s?.value,onChange:l=>r({valueAttachment:l},t)}));case"reference":return Z.createElement(wo,{name:n,required:o.required,targetTypes:lr(o),defaultValue:s?.value,onChange:l=>r({valueReference:l},t)});case"quantity":return Z.createElement(Pe,{name:n,required:o.required,defaultValue:s?.value,onChange:l=>r({valueQuantity:l},t),disableWheel:!0});case"choice":case"open-choice":return fg(o)?Z.createElement(tg,{name:n,item:o,initial:f,allResponses:e.allResponses,index:t,groupSequence:e.groupSequence,onChangeAnswer:l=>r(l,t)}):Z.createElement(rg,{name:n,item:o,initial:f,allResponses:e.allResponses,onChangeAnswer:l=>r(l,t)});default:return null}}function tg(e){let{name:o,item:t,initial:r}=e,a=Ue({type:"QuestionnaireItemInitial",value:r},"value"),n=[""];if(t.answerOption)for(let s of t.answerOption){let l=Ue({type:"QuestionnaireItemAnswerOption",value:s},"value");n.push(Xa(l))}let f=ja(e.allResponses,t,e.index,e.groupSequence)??Ue({type:"QuestionnaireItemInitial",value:r},"value");if(t.repeats){let{propertyName:s,data:l}=lg(e.item),i=sg(e.allResponses,t,e.groupSequence);return Z.createElement(_I,{data:l,placeholder:"Select items",searchable:!0,defaultValue:i||[Xa(a)],onChange:u=>{let d=ys(u,s,t);e.onChangeAnswer(d)}})}return Z.createElement(ZI,{id:o,name:o,onChange:s=>{let l=s.currentTarget.selectedIndex;if(l===0){e.onChangeAnswer({});return}let i=t.answerOption[l-1],u=Ue({type:"QuestionnaireItemAnswerOption",value:i},"value"),d="value"+Ja(u.type);e.onChangeAnswer({[d]:u.value})},defaultValue:(Ka(f?.value)||f?.value)??Xa(a),data:n})}function rg(e){let{name:o,item:t,initial:r,onChangeAnswer:a,allResponses:n}=e;return t.answerValueSet?Z.createElement(Nt,{name:o,binding:t.answerValueSet,onChange:f=>a({valueCoding:f})}):Z.createElement(ag,{name:o,item:t,initial:r,allResponses:n,onChangeAnswer:a})}function ag(e){let{name:o,item:t,initial:r,onChangeAnswer:a}=e,n=og("QuestionnaireItemAnswerOption","value[x]"),f=Ue({type:"QuestionnaireItemInitial",value:r},"value"),s=[],l;if(t.answerOption)for(let d=0;d<t.answerOption.length;d++){let c=t.answerOption[d],x=`${o}-option-${d}`,y=Ue({type:"QuestionnaireItemAnswerOption",value:c},"value");f&&bs(y)===bs(f)&&(l=x),s.push([x,y])}let i=ja(e.allResponses,t,e.index,e.groupSequence),u=ig(s,i);return Z.createElement(Ss.Group,{name:o,value:u??l,onChange:d=>{let c=s.find(x=>x[0]===d);if(c){let x=c[1],y="value"+Ja(x.type);a({[y]:x.value})}}},s.map(([d,c])=>Z.createElement(Ss,{key:d,id:d,value:d,py:4,label:Z.createElement(pe,{property:n,propertyType:c.type,value:c.value})})))}function ng(e,o,t){if(o<e.length)return e[o]=t,e;for(let r=e.length;r<o;r++)e.push({});return e.push(t),e}function fg(e){return!!e.extension?.some(o=>o.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&o.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function lg(e){if(e.answerOption?.length===0)return{propertyName:"",data:[]};let o=e.answerOption[0],t=Ue({type:"QuestionnaireItemAnswerOption",value:o},"value"),r="value"+Ja(t.type),a=(e.answerOption??[]).map(n=>({value:Ps(n,r),label:Ps(n,r)}));return{propertyName:r,data:a}}function Ps(e,o){return Ka(e.valueCoding)||e[o]?.toString()}function Xa(e){if(e)return e.type==="CodeableConcept"?e.value.coding[0].display:e.type==="Coding"?e.value.display:e.value.toString()}function $a(e,o){let t=[];for(let r of e)r.linkId===o&&t.push(r),r.item&&(t=t.concat($a(r.item,o)));return t}function Ts(e){return Ue({type:"QuestionnaireItemAnswer",value:e},"value")}function ja(e,o,t=0,r=0){let n=$a(e,o.linkId??"")[r]?.answer;return Ts(n?.[t]??{})}function sg(e,o,t=0){let a=$a(e,o.linkId??"")[t]?.answer;return a?a.map(f=>Ts(f)).map(f=>Ka(f?.value)||f?.value):[]}function ig(e,o){return e.find(t=>eg(t[1].value,o?.value))?.[0]}var yg=dg(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},questionBody:{maxWidth:600},topActions:{position:"absolute",right:32,top:1,padding:4,color:e.colors.gray[5],fontSize:e.fontSizes.xs},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementActions:{position:"absolute",right:8,top:0,paddingTop:8,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementIcons:{color:e.colors.gray[5]},columnAlignment:{display:"flex",flexDirection:"column"},linkIdInput:{width:100,marginBottom:4},typeSelect:{width:100}}));function p0(e){let o=v(),t=X(e.questionnaire),[r,a]=ur(!1),[n,f]=ur(),[s,l]=ur(),[i,u]=ur();function d(){u(void 0)}function c(){l(void 0)}return Ds(()=>{o.requestSchema("Questionnaire").then(()=>a(!0)).catch(console.log)},[o]),Ds(()=>(f(Pg(t??{resourceType:"Questionnaire"})),document.addEventListener("mouseover",d),document.addEventListener("click",c),()=>{document.removeEventListener("mouseover",d),document.removeEventListener("click",c)}),[t]),!r||!n?null:P.createElement("div",null,P.createElement(K,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(n)},P.createElement(ks,{item:n,selectedKey:s,setSelectedKey:l,hoverKey:i,setHoverKey:u,onChange:f}),P.createElement(ug,{type:"submit"},"Save")))}function ks(e){let{classes:o,cx:t}=yg(),r=e.item,a=e.item,n=hg(e.item),f=n||a.type==="group",s=a.linkId??"[untitled]",l=e.selectedKey===e.item.id,i=e.hoverKey===e.item.id,u=Cg();u.current=e.item;function d(g){H(g),e.setSelectedKey(e.item.id)}function c(g){H(g),e.setHoverKey(e.item.id)}function x(g){let M=u.current;e.onChange({...M,item:M.item?.map(Y=>Y.id===g.id?g:Y)})}function y(g){e.onChange({...e.item,item:[...e.item.item??[],g]})}function k(g){e.onChange({...e.item,item:e.item.item?.filter(M=>M!==g)})}function T(g,M){e.onChange({...u.current,[g]:M})}function B(g){e.onChange({...e.item,...g})}function A(g){e.onChange({...e.item,item:e.item.item?.map(M=>M===g?{...M,repeats:!M.repeats}:M)})}function I(g,M){let Y=kg(e.item.item,g,M);e.onChange({...e.item,item:Y})}let O=t(o.section,{[o.editing]:l,[o.hovering]:i&&!l});return P.createElement("div",{"data-testid":a.linkId,className:O,onClick:d,onMouseOver:c},P.createElement("div",{className:o.questionBody},l?P.createElement(P.Fragment,null,n&&P.createElement(Za,{size:"xl",defaultValue:r.title,onChange:g=>T("title",g.currentTarget.value)}),!n&&P.createElement(xg,{autosize:!0,minRows:2,defaultValue:a.text,onChange:g=>T("text",g.currentTarget.value)}),a.type==="reference"&&P.createElement(bg,{item:a,onChange:B}),hs(a)&&P.createElement(vg,{item:a,onChange:g=>B(g)})):P.createElement(P.Fragment,null,r.title&&P.createElement(Ig,null,r.title),a.text&&P.createElement("div",null,a.text),!f&&P.createElement(ir,{item:a,index:0,allResponses:[],onChange:()=>{}}))),a.item?.map((g,M)=>P.createElement("div",{key:g.id},P.createElement(ks,{item:g,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,isFirst:M===0,isLast:M===(e.item.item??[]).length-1,setHoverKey:e.setHoverKey,onChange:x,onRemove:()=>k(g),onRepeatable:A,onMoveUp:()=>I(M,-1),onMoveDown:()=>I(M,1)}))),!f&&P.createElement("div",{className:o.topActions},l?P.createElement(P.Fragment,null,P.createElement(Za,{size:"xs",className:o.linkIdInput,defaultValue:a.linkId,onChange:g=>T("linkId",g.currentTarget.value)}),!f&&P.createElement(mg,{size:"xs",className:o.typeSelect,defaultValue:a.type,onChange:g=>T("type",g.currentTarget.value),data:[{value:"display",label:"Display"},{value:"boolean",label:"Boolean"},{value:"decimal",label:"Decimal"},{value:"integer",label:"Integer"},{value:"date",label:"Date"},{value:"dateTime",label:"Date/Time"},{value:"time",label:"Time"},{value:"string",label:"String"},{value:"text",label:"Text"},{value:"url",label:"URL"},{value:"choice",label:"Choice"},{value:"open-choice",label:"Open Choice"},{value:"attachment",label:"Attachment"},{value:"reference",label:"Reference"},{value:"quantity",label:"Quantity"}]})):P.createElement("div",null,s)),!n&&P.createElement(_a,{className:o.movementActions},P.createElement(_a,{className:o.columnAlignment},!e.isFirst&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onMoveUp&&e.onMoveUp()}},P.createElement(vr,{"data-testid":"up-button",size:15,className:o.movementIcons})),!e.isLast&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onMoveDown&&e.onMoveDown()}},P.createElement(yr,{"data-testid":"down-button",size:15,className:o.movementIcons})))),P.createElement("div",{className:o.bottomActions},f&&P.createElement(P.Fragment,null,P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y({id:mo(),linkId:on("q"),type:"string",text:"Question"})}},"Add item"),P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y({id:mo(),linkId:on("g"),type:"group",text:"Group"})}},"Add group")),n&&P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),y(Dg())}},"Add Page"),l&&!n&&P.createElement(P.Fragment,null,P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onRepeatable&&e.onRepeatable(a)}},a.repeats?"Remove Repeatable":"Make Repeatable"),P.createElement(De,{href:"#",onClick:g=>{g.preventDefault(),e.onRemove&&e.onRemove()}},"Remove"))))}function vg(e){let o=gg("QuestionnaireItemAnswerOption","value[x]"),t=e.item.answerOption??[];return P.createElement("div",null,e.item.answerValueSet!==void 0?P.createElement(Za,{placeholder:"Enter Value Set",defaultValue:e.item.answerValueSet,onChange:r=>e.onChange({...e.item,answerValueSet:r.target.value})}):P.createElement(Sg,{options:t,property:o,item:e.item,onChange:e.onChange}),P.createElement(_a,{display:"flex"},P.createElement(De,{href:"#",onClick:r=>{H(r),e.onChange({...e.item,answerValueSet:void 0,answerOption:[...t,{id:mo()}]})}},"Add choice"),P.createElement(pg,{w:"lg"}),P.createElement(De,{href:"#",onClick:r=>{H(r),e.onChange({...e.item,answerOption:[],answerValueSet:""})}},"Add value set")))}function Sg(e){return P.createElement("div",null,e.options.map(o=>{let[t,r]=ye({type:"QuestionnaireItemAnswerOption",value:o},"value");return P.createElement("div",{key:o.id,style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"}},P.createElement("div",null,P.createElement(qe,{key:o.id,name:"value[x]",property:e.property,defaultPropertyType:r,defaultValue:t,onChange:(a,n)=>{let f=[...e.options],s=f.findIndex(l=>l.id===o.id);f[s]={id:o.id,[n]:a},e.onChange({...e.item,answerOption:f})}})),P.createElement("div",null,P.createElement(De,{href:"#",onClick:a=>{H(a),e.onChange({...e.item,answerOption:e.options.filter(n=>n.id!==o.id)})}},"Remove")))}))}function bg(e){let o=lr(e.item)??[];return P.createElement(P.Fragment,null,o.map((t,r)=>P.createElement(cg,{key:`${t}-${r}`},P.createElement(Po,{name:"resourceType",placeholder:"Resource Type",defaultValue:t,onChange:a=>{e.onChange(sr(e.item,o.map(n=>n===t?a:n)))}}),P.createElement(De,{href:"#",onClick:a=>{H(a),e.onChange(sr(e.item,o.filter(n=>n!==t)))}},"Remove"))),P.createElement(De,{href:"#",onClick:t=>{H(t),e.onChange(sr(e.item,[...o,""]))}},"Add Resource Type"))}var Ya=1,en=1;function on(e){return e+Ya++}function mo(){return"id-"+en++}function Pg(e){return{...e,id:e.id||mo(),item:Bs(e.item)}}function Bs(e){if(e)return e.forEach(o=>{o.id?.match(/^id-\d+$/)&&(en=Math.max(en,parseInt(o.id.substring(3),10)+1)),o.linkId?.match(/^q\d+$/)&&(Ya=Math.max(Ya,parseInt(o.linkId.substring(1),10)+1))}),e.map(o=>({...o,id:o.id||mo(),item:Bs(o.item),answerOption:Tg(o.answerOption)}))}function Tg(e){if(e)return e.map(o=>({...o,id:o.id||mo()}))}function Dg(){return{id:mo(),linkId:on("s"),type:"group",text:"New Page",extension:[{url:"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",valueCodeableConcept:{coding:[{system:"http://hl7.org/fhir/questionnaire-item-control",code:"page"}]}}]}}function kg(e,o,t){let r=e??[],a=o+t;if(a<0||a>=r.length)return r;let n=[...r];return[n[o],n[a]]=[n[a],n[o]],n}import{Anchor as ws,Button as tn,Group as Bg,Stack as Ag,Stepper as As,Title as Os}from"@mantine/core";import{createReference as Fg,getExtension as Mg,getReferenceString as Es}from"@medplum/core";import Q,{useEffect as Fs,useState as Vo}from"react";function Ls(e){let o=v(),t=o.getProfile(),[r,a]=Vo(!1),n=X(e.questionnaire),[f,s]=Vo(),[l,i]=Vo(0);Fs(()=>{o.requestSchema("Questionnaire").then(()=>o.requestSchema("QuestionnaireResponse")).then(()=>a(!0)).catch(console.log)},[o]),Fs(()=>{s(n?Og(n):void 0)},[n]);function u(y){let k=f?.item??[],B={resourceType:"QuestionnaireResponse",item:Hs(k,y)};s(B)}if(!r||!n)return null;let d=Ng(n),c=()=>i(y=>y+1),x=()=>i(y=>y-1);return Q.createElement(K,{testid:"questionnaire-form",onSubmit:()=>{e.onSubmit&&f&&e.onSubmit({...f,questionnaire:Es(n),subject:e.subject,source:Fg(t),authored:new Date().toISOString(),status:"completed"})}},n.title&&Q.createElement(Os,null,n.title),n.item&&Q.createElement(Rs,{items:n.item??[],allResponses:f?.item??[],onChange:u,renderPages:d>1,activePage:l}),Q.createElement(wg,{activePage:l,numberOfPages:d,nextStep:c,prevStep:x,submitButtonText:e.submitButtonText}))}function Rs(e){let[o,t]=Vo(an(e.items));function r(n,f){let s=o.some(i=>i.id===n),l;s?l=o.map(i=>i.id===n?f:i):l=[...o,f],t(l),e.onChange(l)}let a=e.items.map((n,f)=>e.renderPages?Q.createElement(As.Step,{label:n.text,key:n.linkId},Q.createElement(Ms,{key:`${n.linkId}-${f}`,item:n,index:f,allResponses:e.allResponses,currentResponseItems:o,groupSequence:e.groupSequence,setResponseItem:r})):Q.createElement(Ms,{key:`${n.linkId}-${f}`,item:n,index:f,groupSequence:e.groupSequence,allResponses:e.allResponses,currentResponseItems:o,setResponseItem:r}));return e.renderPages?Q.createElement(As,{active:e.activePage??0,allowNextStepsSelect:!1,p:6},a):Q.createElement(Ag,null,a)}function Ms(e){return Cs(e.item,e.allResponses)?e.item.type==="display"?Q.createElement("p",{key:e.item.linkId},e.item.text):e.item.type==="group"?Q.createElement(rn,{key:e.item.linkId,item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)}):e.item.type==="boolean"?Q.createElement(rn,{item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)}):Q.createElement(ve,{key:e.item.linkId,htmlFor:e.item.linkId,title:e.item.text,withAsterisk:e.item.required},Q.createElement(rn,{item:e.item,allResponses:e.allResponses,currentResponseItems:e.currentResponseItems,groupSequence:e.groupSequence,onChange:o=>e.setResponseItem(o.id,o)})):null}function rn(e){let o=e.item;function t(r,a){let n=a??0,f=e.currentResponseItems.filter(s=>s.linkId===o.linkId);e.onChange({id:qg(f,n),linkId:o.linkId,text:o.text,item:r})}return o.type==="group"?Q.createElement(Hg,{key:e.item.linkId,text:o.text??"",item:o??[],allResponses:e.allResponses,onChange:t}):Q.createElement(Vg,{item:e.item,key:e.item.linkId},({index:r})=>Q.createElement(ir,{...e,index:r}))}function wg(e){let o=e.activePage>0,t=e.activePage<e.numberOfPages-1,r=e.activePage===e.numberOfPages-1;return Q.createElement(Bg,{position:"right",mt:"xl",spacing:"xs"},o&&Q.createElement(tn,{onClick:e.prevStep},"Back"),t&&Q.createElement(tn,{onClick:a=>{a.currentTarget.closest("form").reportValidity()&&e.nextStep()}},"Next"),r&&Q.createElement(tn,{type:"submit"},e.submitButtonText??"Submit"))}function Og(e){return{resourceType:"QuestionnaireResponse",questionnaire:Es(e),item:an(e.item)}}function an(e){return e?.map(Eg)??[]}function Eg(e){return{id:Ns(),linkId:e.linkId,text:e.text,item:an(e.item),answer:e.initial?.map(Rg)??[]}}var Lg=1;function Ns(){return"id-"+Lg++}function Rg(e){return{...e}}function Ng(e){let o=e?.item?.[0];return o&&Mg(o,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?e.item.length:1}function Hg(e){let[o,t]=Vo(Gg(e.item,e.allResponses)),r=e.item;return Q.createElement(Q.Fragment,null,[...Array(o)].map((a,n)=>Q.createElement("div",{key:n},e.text&&Q.createElement(Os,{order:3,mb:"md"},e.text),Q.createElement(Rs,{items:r.item??[],allResponses:e.allResponses,groupSequence:n,onChange:f=>e.onChange(f,n)}))),e.item.repeats&&Q.createElement(ws,{onClick:()=>t(a=>a+1)},"Add Group"))}function Vg(e){let[o,t]=Vo(1),r=e.item?.repeats&&e.item.type!=="choice"&&e.item.type!=="open-choice";return Q.createElement(Q.Fragment,null,[...Array(o)].map((a,n)=>Q.createElement(Q.Fragment,{key:`${e.item.linkId}-${n}`},e.children({index:n}))),r&&Q.createElement(ws,{onClick:()=>t(a=>a+1)},"Add Item"))}function qg(e,o){return e.length===0||e.length<o+1?Ns():e[o].id}function Gg(e,o){let t=o.filter(r=>r.linkId===e.linkId).length;return t>0?t:1}function Ug(e,o){let t=Hs(e.item??[],o.item??[]);return{...o,item:t,answer:o.answer&&o.answer.length>0?o.answer:e.answer}}function Qg(e,o){let t=[],r=Math.max(e.length,o.length);for(let a=0;a<r;a++)e[a]&&o[a]?t.push(Ug(e[a],o[a])):o[a]&&t.push(o[a]);return t}function Hs(e,o){let t=[];for(let r of new Set(o.map(a=>a.linkId))){let a=e.filter(f=>f.linkId===r),n=o.filter(f=>f.linkId===r);t=t.concat(Qg(a,n))}return t}import{ActionIcon as dr,Button as zg,createStyles as Wg,Divider as Xg,Group as dt,NativeSelect as nn,Stack as cr,Text as Jg,TextInput as Kg}from"@mantine/core";import{formatRange as Vs,getCodeBySystem as $g}from"@medplum/core";import z,{useEffect as jg,useState as fn}from"react";var _g=Wg(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[3]}`,borderRadius:e.radius.sm,transition:"all 0.1s"}})),Zg=["gender","age","gestationalAge","context","appliesTo","category"],Yg={definition:{resourceType:"ObservationDefinition"},onSubmit:()=>{}};function L0(e){e=Object.assign(Yg,e);let o=e.definition,[t,r]=fn([]),[a,n]=fn(1),[f,s]=fn(1);return jg(()=>{let y=th(o,s);r(rh(y.qualifiedInterval||[],n))},[o]),z.createElement(K,{testid:"reference-range-editor",onSubmit:l},z.createElement(cr,null,t.map(y=>z.createElement(eh,{unit:nh(o.quantitativeDetails?.unit),onChange:d,onAdd:c,onRemove:x,onRemoveGroup:u,key:`group-${y.id}`,intervalGroup:y}))),z.createElement(dr,{title:"Add Group",size:"sm",onClick:y=>{H(y),i({id:`group-id-${a}`,filters:{},intervals:[]}),n(k=>k+1)}},z.createElement(po,null)),z.createElement(dt,{position:"right"},z.createElement(zg,{type:"submit"},"Save")));function l(){let y=t.flatMap(k=>k.intervals).filter(k=>!fh(k));e.onSubmit({...o,qualifiedInterval:y})}function i(y){r(k=>[...k,y])}function u(y){r(k=>k.filter(T=>T.id!==y.id))}function d(y,k){r(T=>{T=[...T];let B=T.find(I=>I.id===y),A=B?.intervals.findIndex(I=>I.id===k.id);return A!==void 0&&B?.intervals[A]&&(B.intervals[A]=k),T})}function c(y,k){k.id===void 0&&(k.id=`id-${f}`,s(T=>T+1)),r(T=>{T=[...T];let B=T.findIndex(A=>A.id===y);if(B!==-1){let A={...T[B]};k={...k,...A.filters},A.intervals=[...A.intervals,k],T[B]=A}return T})}function x(y,k){r(T=>{T=[...T];let B=T.find(A=>A.id===y);return B&&(B.intervals=B.intervals.filter(A=>A.id!==k.id)),T})}}function eh(e){let{intervalGroup:o,unit:t}=e,{classes:r}=_g();return z.createElement($e,{"data-testid":o.id,className:r.section},z.createElement(cr,{spacing:"lg"},z.createElement(dt,{position:"right"},z.createElement(dr,{title:"Remove Group","data-testid":`remove-group-button-${o.id}`,key:`remove-group-button-${o.id}`,size:"sm",onClick:a=>{H(a),e.onRemoveGroup(o)}},z.createElement(We,null))),z.createElement(oh,{intervalGroup:o,onChange:e.onChange}),z.createElement(Xg,null),o.intervals.map(a=>z.createElement(cr,{key:`interval-${a.id}`,spacing:"xs"},z.createElement(dt,null,z.createElement(Kg,{key:`condition-${a.id}`,"data-testid":`condition-${a.id}`,defaultValue:a.condition,label:"Condition: ",size:"sm",onChange:n=>{H(n),e.onChange(o.id,{...a,condition:n.currentTarget.value.trim()})}}),z.createElement(dr,{title:"Remove Interval",size:"sm",key:`remove-interval-${a.id}`,"data-testid":`remove-interval-${a.id}`,onClick:n=>{H(n),e.onRemove(o.id,a)}},z.createElement(We,null))),z.createElement(ot,{onChange:n=>{e.onChange(o.id,{...a,range:n})},key:`range-${a.id}`,name:`range-${a.id}`,defaultValue:a.range}))),z.createElement(dr,{title:"Add Interval",size:"sm",onClick:a=>{H(a),e.onAdd(o.id,{range:{low:{unit:t},high:{unit:t}}})}},z.createElement(po,null))))}function oh(e){let{intervalGroup:o,onChange:t}=e;o.filters.age||(o.filters.age={});for(let r of["low","high"])o.filters.age[r]?.unit||(o.filters.age[r]={...o.filters.age[r],unit:"years",system:"http://unitsofmeasure.org"});return z.createElement(cr,{style:{maxWidth:"50%"}},z.createElement(dt,null,z.createElement(nn,{data:["","male","female"],label:"Gender:",defaultValue:o.filters.gender||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""&&(n=void 0),t(o.id,{...a,gender:n})}}})),z.createElement(dt,{spacing:"xs"},z.createElement(Jg,{component:"label",htmlFor:`div-age-${o.id}`},"Age:"),z.createElement("div",{id:`div-age-${o.id}`},z.createElement(ot,{key:`age-${o.id}`,name:`age-${o.id}`,defaultValue:o.filters.age,onChange:r=>{for(let a of o.intervals)t(o.id,{...a,age:r})}}))),z.createElement(nn,{data:["","pre-puberty","follicular","midcycle","luteal","postmenopausal"],label:"Endocrine:",defaultValue:o.filters.context?.text||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?(n=void 0,t(o.id,{...a,context:void 0})):t(o.id,{...a,context:{text:n,coding:[{code:n,system:"http://terminology.hl7.org/CodeSystem/referencerange-meaning"}]}})}}}),z.createElement(nn,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:o.filters.category,onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?t(o.id,{...a,category:void 0}):t(o.id,{...a,category:n})}}}))}function th(e,o){let t=e.qualifiedInterval||[],r=Math.max(...t.map(a=>{let n=parseInt(a.id?.substring(3)||"",10);return isNaN(n)?Number.NEGATIVE_INFINITY:n}))+1;return Number.isFinite(r)||(r=1),e={...e,qualifiedInterval:t.map(a=>({...a,id:a.id||`id-${r++}`}))},o(r),e}function rh(e,o){let t=1,r={};for(let a of e){let n=ah(a);n in r||(r[n]={id:`group-id-${t++}`,filters:Object.fromEntries(Zg.map(f=>[f,a[f]])),intervals:[]}),r[n].intervals.push(a)}return o(t),Object.values(r)}function ah(e){return[`gender=${e.gender}`,`age=${Vs(e.age)}`,`gestationalAge=${Vs(e.gestationalAge)}`,`context=${e.context?.text}`,`appliesTo=${e.appliesTo?.map(t=>t.text).join("+")}`,`category=${e.category}`].join(":")}function nh(e){return e&&($g(e,"http://unitsofmeasure.org")||e.text)}function fh(e){return e.range?.low?.value===void 0&&e.range?.high?.value===void 0}import{Button as qs,Grid as mr,Text as lh}from"@mantine/core";import{formatDateTime as sh,getReferenceString as ih}from"@medplum/core";import Ie,{useEffect as uh,useState as Gs}from"react";function W0(e){let o=v(),t=X(e.value),[r,a]=Gs(!1),[n,f]=Gs();if(uh(()=>{t&&!r&&(o.executeBatch(s(t)).then(f).catch(console.log),a(!0))},[o,t,r]),!t||!n)return null;return Ie.createElement(mr,null,t.action?.map((i,u)=>{let d=i.resource&&l(i.resource),c=d?.input?.[0]?.valueReference,x=d?.output?.[0]?.valueReference;return Ie.createElement(Ie.Fragment,{key:`action-${u}`},Ie.createElement(mr.Col,{span:1,p:"md"},d?.status==="completed"?Ie.createElement(Br,null):Ie.createElement(Xr,{color:"gray"})),Ie.createElement(mr.Col,{span:9,p:"xs"},Ie.createElement(lh,{weight:500},i.title),i.description&&Ie.createElement("div",null,i.description),Ie.createElement("div",null,"Last edited by\xA0",Ie.createElement(Ee,{value:d?.meta?.author}),"\xA0on\xA0",sh(d?.meta?.lastUpdated)),Ie.createElement("div",null,"Status: ",Ie.createElement(Xt,{status:d?.status||"unknown"}))),Ie.createElement(mr.Col,{span:2,p:"md"},c&&!x&&Ie.createElement(qs,{onClick:()=>e.onStart(d,c)},"Start"),c&&x&&Ie.createElement(qs,{onClick:()=>e.onEdit(d,c,x)},"Edit")))}));function s(i){let u=[];if(i.action)for(let d of i.action)d.resource?.reference&&u.push({request:{method:"GET",url:d.resource.reference}});return{resourceType:"Bundle",type:"batch",entry:u}}function l(i){for(let u of n?.entry)if(u.resource&&i.reference===ih(u.resource))return u.resource}}import{createStyles as gh}from"@mantine/core";import Ce,{useEffect as hh,useState as Ch}from"react";import{stringify as ph}from"@medplum/core";function pr(e,o){let t=dh(e,o);return ch(t,e,o)}function dh(e,o){let t=e.length,r=o.length,a=t+r+1,n=1+2*a,f=n/2|0,s=new Array(n);s[f+1]={i:0,j:-1,prev:void 0,snake:!0};for(let l=0;l<a;l++){for(let i=-l;i<=l;i+=2){let u=f+i,d=u+1,c=u-1,x=s[d],y=s[c],k,T=0;i===-l||i!==l&&y.i<x.i?(T=x.i,k=x):(T=y.i+1,k=y),s[c]=void 0;let B=T-i,A={i:T,j:B,prev:mh(k),snake:!1};for(;T<t&&B<r&&e[T]===o[B];)T++,B++;if(T>A.i&&(A={i:T,j:B,prev:A,snake:!0}),s[u]=A,T>=t&&B>=r)return s[u]}s[f+l-1]=void 0}}function ch(e,o,t){let r=[],a=e;for(a.snake&&(a=a.prev);a?.prev&&a.prev.j>=0;){let n=a.i,f=a.j;a=a.prev;let s=a.i,l=a.j,i={position:s,lines:o.slice(s,n)},u={position:l,lines:t.slice(l,f)},d;i.lines.length===0&&u.lines.length>0?d="insert":i.lines.length>0&&u.lines.length===0?d="delete":d="change",r.push({original:i,revised:u,type:d}),a.snake&&(a=a.prev)}return r}function mh(e){return e&&!e.snake&&e.prev?e.prev:e}function Us(e){let o=e.entry.filter(r=>!!r.resource).map(r=>({meta:r.resource?.meta,lines:ph(r.resource,!0).match(/[^\r\n]+/g)})).sort((r,a)=>r.meta.lastUpdated.localeCompare(a.meta.lastUpdated)),t=o[0].lines.map(r=>({id:o[0].meta.versionId,meta:o[0].meta,value:r,span:1}));return xh(t,o),Ih(t),t}function xh(e,o){for(let t=1;t<o.length;t++){let r=pr(o[t-1].lines,o[t].lines);for(let a of r){let n=a.original.position,f=a.original.lines,s=a.revised.lines;if((a.type==="delete"||a.type==="change")&&e.splice(n,f.length),a.type==="insert"||a.type==="change")for(let l=0;l<a.revised.lines.length;l++)e.splice(n+l,0,{id:o[t].meta.versionId,meta:o[t].meta,value:s[l],span:1})}}}function Ih(e){let o=0;for(;o<e.length;){let t=o;for(;t<e.length&&e[t].id===e[o].id;)e[t].span=-1,t++;e[o].span=t-o,o=t}}function Qs(e,o){return`/${e.resourceType}/${e.id}/_history/${o}`}function zs(e){let o=Math.floor((Date.now()-Date.parse(e))/1e3),t=Math.floor(o/31536e3);if(t>0)return qo(t,"year");let r=Math.floor(o/2592e3);if(r>0)return qo(r,"month");let a=Math.floor(o/86400);if(a>0)return qo(a,"day");let n=Math.floor(o/3600);if(n>0)return qo(n,"hour");let f=Math.floor(o/60);return f>0?qo(f,"minute"):qo(o,"second")}function qo(e,o){return`${e} ${e===1?o:o+"s"} ago`}var yh=gh(e=>({container:{overflowX:"auto"},root:{border:`0.1px solid ${e.colors.gray[3]}`,borderCollapse:"collapse",borderRadius:e.radius.sm,borderSpacing:0,fontSize:e.fontSizes.xs,width:"100%","& td":{padding:"2px 4px 0 4px",verticalAlign:"top",whiteSpace:"nowrap"}},startRow:{borderTop:`0.1px solid ${e.colors.gray[3]}`},normalRow:{borderTop:0},author:{lineHeight:"10px"},dateTime:{borderRight:`0.1px solid ${e.colors.gray[3]}`,lineHeight:"20px"},lineNumber:{backgroundColor:e.colors.gray[1],border:0,color:e.colors.gray[5],fontFamily:e.fontFamilyMonospace,padding:`${e.spacing.xs} ${e.spacing.sm}`,textAlign:"right"},line:{fontFamily:e.fontFamilyMonospace,fontSize:e.fontSizes.sm,padding:`${e.spacing.xs} ${e.spacing.sm}`},pre:{margin:0}}));function n1(e){let{classes:o}=yh(),t=v(),[r,a]=Ch(e.history);if(hh(()=>{!e.history&&e.resourceType&&e.id&&t.readHistory(e.resourceType,e.id).then(a).catch(console.log)},[t,e.history,e.resourceType,e.id]),!r)return Ce.createElement("div",null,"Loading...");let n=r.entry?.[0]?.resource;if(!n)return null;let f=Us(r);return Ce.createElement("div",{className:o.container},Ce.createElement("table",{className:o.root},Ce.createElement("tbody",null,f.map((s,l)=>Ce.createElement("tr",{key:"row-"+l,className:s.span>0?o.startRow:o.normalRow},s.span>0&&Ce.createElement(Ce.Fragment,null,Ce.createElement("td",{className:o.author,rowSpan:s.span},Ce.createElement(_e,{value:s.meta.author,link:!0})),Ce.createElement("td",{className:o.dateTime,rowSpan:s.span},Ce.createElement(se,{to:Qs(n,s.meta.versionId)},zs(s.meta.lastUpdated)))),Ce.createElement("td",{className:o.lineNumber},l+1),Ce.createElement("td",{className:o.line},Ce.createElement("pre",{className:o.pre},s.value)))))))}import{createStyles as vh}from"@mantine/core";import{stringify as Ws}from"@medplum/core";import eo from"react";var Sh=vh(e=>({removed:{color:e.colors.red[7],textDecoration:"line-through"},added:{color:e.colors.green[7]}}));function c1(e){let o=e.original,t=e.revised;e.ignoreMeta&&(o={...o,meta:void 0},t={...t,meta:void 0});let r=Ws(o,!0).match(/[^\r\n]+/g),a=Ws(t,!0).match(/[^\r\n]+/g),n=pr(r,a);return eo.createElement("pre",{style:{color:"gray"}},n.map((f,s)=>eo.createElement(bh,{key:"delta"+s,delta:f})))}function bh(e){let{classes:o}=Sh();return eo.createElement(eo.Fragment,null,"...",eo.createElement("br",null),e.delta.original.lines.length>0&&eo.createElement("div",{className:o.removed},e.delta.original.lines.join(`
66
66
  `)),e.delta.revised.lines.length>0&&eo.createElement("div",{className:o.added},e.delta.revised.lines.join(`
67
- `)),"...",eo.createElement("br",null))}import{Button as Xs,Group as bh,Stack as Ph,TextInput as Js}from"@mantine/core";import{deepClone as Th}from"@medplum/core";import we,{useEffect as Dh,useState as Ks}from"react";function y1(e){let o=v(),t=X(e.defaultValue),[r,a]=Ks(!1),[n,f]=Ks();return Dh(()=>{t&&(f(Th(t)),o.requestSchema(t.resourceType).then(()=>a(!0)).catch(console.log))},[o,t]),!r||!n?we.createElement("div",null,"Loading..."):we.createElement("form",{noValidate:!0,autoComplete:"off",onSubmit:s=>{s.preventDefault(),e.onSubmit&&e.onSubmit(n)}},we.createElement(Ph,{mb:"xl"},we.createElement(ve,{title:"Resource Type",htmlFor:"resourceType",outcome:e.outcome},we.createElement(Js,{name:"resourceType",defaultValue:n.resourceType,disabled:!0})),we.createElement(ve,{title:"ID",htmlFor:"id",outcome:e.outcome},we.createElement(Js,{name:"id",defaultValue:n.id,disabled:!0}))),we.createElement(tt,{typeName:n.resourceType,defaultValue:n,outcome:e.outcome,onChange:f}),we.createElement(bh,{position:"right",mt:"xl"},we.createElement(Xs,{type:"submit"},"OK"),e.onDelete&&we.createElement(Xs,{variant:"outline",color:"red",type:"button",onClick:()=>{e.onDelete(n)}},"Delete")))}import{Table as kh}from"@mantine/core";import{formatDateTime as Bh,normalizeErrorString as Ah}from"@medplum/core";import ce,{useEffect as Fh,useState as Mh}from"react";function B1(e){let o=v(),[t,r]=Mh(e.history);return Fh(()=>{!e.history&&e.resourceType&&e.id&&o.readHistory(e.resourceType,e.id).then(r).catch(console.log)},[o,e.history,e.resourceType,e.id]),t?ce.createElement(kh,{withBorder:!0,withColumnBorders:!0},ce.createElement("thead",null,ce.createElement("tr",null,ce.createElement("th",null,"Author"),ce.createElement("th",null,"Date"),ce.createElement("th",null,"Version"))),ce.createElement("tbody",null,t.entry?.map((a,n)=>ce.createElement(wh,{key:"entry-"+n,entry:a})))):ce.createElement("div",null,"Loading...")}function wh(e){let{response:o,resource:t}=e.entry;return t?ce.createElement("tr",null,ce.createElement("td",null,ce.createElement(_e,{value:t.meta?.author,link:!0})),ce.createElement("td",null,Bh(t.meta?.lastUpdated)),ce.createElement("td",null,ce.createElement(se,{to:Oh(t)},t.meta?.versionId))):ce.createElement("tr",null,ce.createElement("td",{colSpan:3},Ah(o?.outcome)))}function Oh(e){return`/${e.resourceType}/${e.id}/_history/${e.meta?.versionId}`}import{Button as Nh,createStyles as Hh,Stack as Vh,Text as qh}from"@mantine/core";import{getReferenceString as Gh,isReference as Uh}from"@medplum/core";import ee,{useState as Ir}from"react";import{allOk as Eh,normalizeOperationOutcome as Lh}from"@medplum/core";import{useEffect as Rh,useState as xr}from"react";function L1(e,o){return ln("search",e,o)}function R1(e,o){return ln("searchOne",e,o)}function $s(e,o){return ln("searchResources",e,o)}function ln(e,o,t){let r=v(),[a,n]=xr(),[f,s]=xr(!1),[l,i]=xr(),[u,d]=xr();return Rh(()=>{let c=r.fhirSearchUrl(o,t).toString();c!==a&&(n(c),r[e](o,t).then(x=>{s(!1),i(x),d(Eh)}).catch(x=>{s(!1),i(void 0),d(Lh(x))}))},[r,e,o,t,a,i]),[l,f,u]}var Qh=Hh(e=>({container:{display:"flex",minHeight:400},info:{minWidth:300,padding:20,borderRight:`1px solid ${e.colors.gray[3]}`},selection:{minWidth:300,padding:20}}));function K1(e){let{classes:o}=Qh(),t=X(e.schedule),r=X(e.questionnaire),[a,n]=Ir(Wt()),[f,s]=Ir(),[l,i]=Ir(),[u,d]=Ir(),[c]=$s("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",Uh(e.schedule)?e.schedule.reference:Gh(e.schedule)],["start","gt"+zh(a)],["start","lt"+Wh(a)]]));if(!t||!c||!r)return null;let x=t.actor?.[0];return ee.createElement("div",{className:o.container,"data-testid":"scheduler"},ee.createElement("div",{className:o.info},x&&ee.createElement(ge,{value:x,size:"xl"}),x&&ee.createElement(qh,{size:"xl",weight:500},ee.createElement(Ee,{value:x})),ee.createElement("p",null,"1 hour"),f&&ee.createElement("p",null,f.toLocaleDateString()),l&&ee.createElement("p",null,js(new Date(l.start)))),ee.createElement("div",{className:o.selection},!f&&ee.createElement("div",null,ee.createElement("h3",null,"Select date"),ee.createElement(sl,{slots:c,onChangeMonth:n,onClick:s})),f&&!l&&ee.createElement("div",null,ee.createElement("h3",null,"Select time"),ee.createElement(Vh,null,c.map(y=>{let k=new Date(y.start);return k.getTime()>f.getTime()&&k.getTime()<f.getTime()+24*3600*1e3&&ee.createElement("div",{key:y.id},ee.createElement(Nh,{variant:"outline",style:{width:150},onClick:()=>i(y)},js(k)))}))),f&&l&&!u&&ee.createElement(Ls,{questionnaire:r,submitButtonText:"Next",onSubmit:d}),f&&l&&u&&ee.createElement("div",null,ee.createElement("h3",null,"You're all set!"),ee.createElement("p",null,"Check your email for a calendar invite."))))}function zh(e){return _s(e.getTime())}function Wh(e){return _s(e.getTime()+31*24*60*60*1e3)}function _s(e){let o=new Date(Math.max(Date.now(),e));return o.setHours(0,0,0,0),o.toISOString()}function js(e){return e.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}import{createReference as gr}from"@medplum/core";import Xh from"react";function oE(e){return Xh.createElement(Ye,{value:e.serviceRequest,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`,n=100;return Promise.allSettled([o.readHistory("ServiceRequest",r),o.search("Communication",{"based-on":a,_count:n}),o.search("DiagnosticReport",{"based-on":a,_count:n}),o.search("Media",{"based-on":a,_count:n}),o.search("DocumentReference",{related:a,_count:n}),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:n})])},createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",basedOn:[gr(o)],subject:o.subject,sender:gr(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",basedOn:[gr(o)],subject:o.subject,operator:gr(t),issued:new Date().toISOString(),content:r})})}export{dn as AddressDisplay,xn as AddressInput,In as AnnotationInput,wb as AppShell,So as AsyncAutocomplete,Wn as AttachmentArrayDisplay,Jn as AttachmentArrayInput,To as AttachmentButton,Oe as AttachmentDisplay,vt as AttachmentInput,Zo as BackboneElementDisplay,tt as BackboneElementInput,sl as CalendarInput,Rt as CheckboxFormSection,yt as CodeInput,Ao as CodeableConceptDisplay,Of as CodeableConceptInput,bf as CodingDisplay,Nt as CodingInput,Tf as ContactDetailDisplay,Lf as ContactDetailInput,wt as ContactPointDisplay,Vt as ContactPointInput,$e as Container,Me as DateTimeInput,pM as DefaultResourceTimeline,Cf as DescriptionList,yf as DescriptionListEntry,Pa as DiagnosticReportDisplay,St as Document,jm as ElementDefinitionInputSelector,al as ElementDefinitionTypeInput,vM as EncounterTimeline,ho as ErrorBoundary,PI as FhirPathTable,K as Form,ve as FormSection,Vn as Header,gt as HumanNameDisplay,qf as HumanNameInput,Df as IdentifierDisplay,Uf as IdentifierInput,_r as Loading,je as Logo,se as MedplumLink,dO as MedplumProvider,nO as MemoizedFhirPathTable,jw as MemoizedSearchControl,Bf as MoneyDisplay,Qf as MoneyInput,zn as Navbar,Ap as ObservationTable,Bo as OperationOutcomeAlert,ko as Panel,hO as PatientTimeline,LO as PlanDefinitionBuilder,_o as QuantityDisplay,Pe as QuantityInput,m0 as QuestionnaireBuilder,Ls as QuestionnaireForm,fr as QuestionnaireItemType,rn as QuestionnaireRepeatWrapper,Ot as RangeDisplay,ot as RangeInput,lo as ReferenceDisplay,wo as ReferenceInput,E0 as ReferenceRangeEditor,Yg as ReferenceRangeGroupEditor,lT as RegisterForm,z0 as RequestGroupDisplay,wf as ResourceArrayDisplay,Zf as ResourceArrayInput,ge as ResourceAvatar,_e as ResourceBadge,a1 as ResourceBlame,d1 as ResourceDiff,y1 as ResourceForm,B1 as ResourceHistoryTable,Ut as ResourceInput,Ee as ResourceName,pe as ResourcePropertyDisplay,qe as ResourcePropertyInput,Ta as ResourceTable,Ye as ResourceTimeline,K1 as Scheduler,Va as SearchChangeEvent,co as SearchClickEvent,pI as SearchControl,Jl as SearchFieldEditor,Yl as SearchFilterEditor,qa as SearchLoadEvent,oE as ServiceRequestTimeline,aD as SignInForm,Xt as StatusBadge,vl as Timeline,Ze as TimelineItem,rl as TimingInput,Ma as addDateFilterBetween,HM as addField,Ro as addFilter,Nl as addLastMonthFilter,wa as addMissingFilter,Vl as addNextMonthFilter,Hl as addThisMonthFilter,Ll as addTodayFilter,Rl as addTomorrowFilter,ql as addYearToDateFilter,El as addYesterdayFilter,he as buildFieldNameString,NM as clearFilters,_t as clearFiltersOnField,Nf as convertIsoToLocal,Hf as convertLocalToIso,Tt as createScriptTag,Ol as deleteFilter,me as getErrorsForInput,bt as getIssuesForExpression,ys as getNewMultiSelectValues,nt as getOpString,lr as getQuestionnaireItemReferenceTargetTypes,Yn as getRecaptcha,zl as getSearchOperators,Ul as getSortField,Zn as initRecaptcha,hs as isChoiceQuestion,Cs as isQuestionEnabled,Ql as isSortDescending,qn as parseForm,hr as reactContext,Wl as renderValue,at as setFilters,Px as setOffset,Gl as setPage,sr as setQuestionnaireItemReferenceTargetTypes,Oa as setSort,Pl as sortByDateAndPriority,VM as toggleSort,v as useMedplum,Qo as useMedplumContext,ze as useMedplumNavigate,mt as useMedplumProfile,X as useResource,L1 as useSearch,R1 as useSearchOne,$s as useSearchResources};
67
+ `)),"...",eo.createElement("br",null))}import{Button as Xs,Group as Ph,Stack as Th,TextInput as Js}from"@mantine/core";import{deepClone as Dh}from"@medplum/core";import we,{useEffect as kh,useState as Ks}from"react";function v1(e){let o=v(),t=X(e.defaultValue),[r,a]=Ks(!1),[n,f]=Ks();return kh(()=>{t&&(f(Dh(t)),o.requestSchema(t.resourceType).then(()=>a(!0)).catch(console.log))},[o,t]),!r||!n?we.createElement("div",null,"Loading..."):we.createElement("form",{noValidate:!0,autoComplete:"off",onSubmit:s=>{s.preventDefault(),e.onSubmit&&e.onSubmit(n)}},we.createElement(Th,{mb:"xl"},we.createElement(ve,{title:"Resource Type",htmlFor:"resourceType",outcome:e.outcome},we.createElement(Js,{name:"resourceType",defaultValue:n.resourceType,disabled:!0})),we.createElement(ve,{title:"ID",htmlFor:"id",outcome:e.outcome},we.createElement(Js,{name:"id",defaultValue:n.id,disabled:!0}))),we.createElement(tt,{typeName:n.resourceType,defaultValue:n,outcome:e.outcome,onChange:f}),we.createElement(Ph,{position:"right",mt:"xl"},we.createElement(Xs,{type:"submit"},"OK"),e.onDelete&&we.createElement(Xs,{variant:"outline",color:"red",type:"button",onClick:()=>{e.onDelete(n)}},"Delete")))}import{Table as Bh}from"@mantine/core";import{formatDateTime as Ah,normalizeErrorString as Fh}from"@medplum/core";import ce,{useEffect as Mh,useState as wh}from"react";function A1(e){let o=v(),[t,r]=wh(e.history);return Mh(()=>{!e.history&&e.resourceType&&e.id&&o.readHistory(e.resourceType,e.id).then(r).catch(console.log)},[o,e.history,e.resourceType,e.id]),t?ce.createElement(Bh,{withBorder:!0,withColumnBorders:!0},ce.createElement("thead",null,ce.createElement("tr",null,ce.createElement("th",null,"Author"),ce.createElement("th",null,"Date"),ce.createElement("th",null,"Version"))),ce.createElement("tbody",null,t.entry?.map((a,n)=>ce.createElement(Oh,{key:"entry-"+n,entry:a})))):ce.createElement("div",null,"Loading...")}function Oh(e){let{response:o,resource:t}=e.entry;return t?ce.createElement("tr",null,ce.createElement("td",null,ce.createElement(_e,{value:t.meta?.author,link:!0})),ce.createElement("td",null,Ah(t.meta?.lastUpdated)),ce.createElement("td",null,ce.createElement(se,{to:Eh(t)},t.meta?.versionId))):ce.createElement("tr",null,ce.createElement("td",{colSpan:3},Fh(o?.outcome)))}function Eh(e){return`/${e.resourceType}/${e.id}/_history/${e.meta?.versionId}`}import{Button as Hh,createStyles as Vh,Stack as qh,Text as Gh}from"@mantine/core";import{getReferenceString as Uh,isReference as Qh}from"@medplum/core";import ee,{useState as Ir}from"react";import{allOk as Lh,normalizeOperationOutcome as Rh}from"@medplum/core";import{useEffect as Nh,useState as xr}from"react";function R1(e,o){return ln("search",e,o)}function N1(e,o){return ln("searchOne",e,o)}function $s(e,o){return ln("searchResources",e,o)}function ln(e,o,t){let r=v(),[a,n]=xr(),[f,s]=xr(!1),[l,i]=xr(),[u,d]=xr();return Nh(()=>{let c=r.fhirSearchUrl(o,t).toString();c!==a&&(n(c),r[e](o,t).then(x=>{s(!1),i(x),d(Lh)}).catch(x=>{s(!1),i(void 0),d(Rh(x))}))},[r,e,o,t,a,i]),[l,f,u]}var zh=Vh(e=>({container:{display:"flex",minHeight:400},info:{minWidth:300,padding:20,borderRight:`1px solid ${e.colors.gray[3]}`},selection:{minWidth:300,padding:20}}));function $1(e){let{classes:o}=zh(),t=X(e.schedule),r=X(e.questionnaire),[a,n]=Ir(Wt()),[f,s]=Ir(),[l,i]=Ir(),[u,d]=Ir(),[c]=$s("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",Qh(e.schedule)?e.schedule.reference:Uh(e.schedule)],["start","gt"+Wh(a)],["start","lt"+Xh(a)]]));if(!t||!c||!r)return null;let x=t.actor?.[0];return ee.createElement("div",{className:o.container,"data-testid":"scheduler"},ee.createElement("div",{className:o.info},x&&ee.createElement(ge,{value:x,size:"xl"}),x&&ee.createElement(Gh,{size:"xl",weight:500},ee.createElement(Ee,{value:x})),ee.createElement("p",null,"1 hour"),f&&ee.createElement("p",null,f.toLocaleDateString()),l&&ee.createElement("p",null,js(new Date(l.start)))),ee.createElement("div",{className:o.selection},!f&&ee.createElement("div",null,ee.createElement("h3",null,"Select date"),ee.createElement(sl,{slots:c,onChangeMonth:n,onClick:s})),f&&!l&&ee.createElement("div",null,ee.createElement("h3",null,"Select time"),ee.createElement(qh,null,c.map(y=>{let k=new Date(y.start);return k.getTime()>f.getTime()&&k.getTime()<f.getTime()+24*3600*1e3&&ee.createElement("div",{key:y.id},ee.createElement(Hh,{variant:"outline",style:{width:150},onClick:()=>i(y)},js(k)))}))),f&&l&&!u&&ee.createElement(Ls,{questionnaire:r,submitButtonText:"Next",onSubmit:d}),f&&l&&u&&ee.createElement("div",null,ee.createElement("h3",null,"You're all set!"),ee.createElement("p",null,"Check your email for a calendar invite."))))}function Wh(e){return _s(e.getTime())}function Xh(e){return _s(e.getTime()+31*24*60*60*1e3)}function _s(e){let o=new Date(Math.max(Date.now(),e));return o.setHours(0,0,0,0),o.toISOString()}function js(e){return e.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}import{createReference as gr}from"@medplum/core";import Jh from"react";function tE(e){return Jh.createElement(Ye,{value:e.serviceRequest,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`,n=100;return Promise.allSettled([o.readHistory("ServiceRequest",r),o.search("Communication",{"based-on":a,_count:n}),o.search("DiagnosticReport",{"based-on":a,_count:n}),o.search("Media",{"based-on":a,_count:n}),o.search("DocumentReference",{related:a,_count:n}),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:n})])},createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",basedOn:[gr(o)],subject:o.subject,sender:gr(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",basedOn:[gr(o)],subject:o.subject,operator:gr(t),issued:new Date().toISOString(),content:r})})}export{dn as AddressDisplay,xn as AddressInput,In as AnnotationInput,Ob as AppShell,So as AsyncAutocomplete,Wn as AttachmentArrayDisplay,Jn as AttachmentArrayInput,To as AttachmentButton,Oe as AttachmentDisplay,vt as AttachmentInput,Zo as BackboneElementDisplay,tt as BackboneElementInput,sl as CalendarInput,Rt as CheckboxFormSection,yt as CodeInput,Ao as CodeableConceptDisplay,Of as CodeableConceptInput,bf as CodingDisplay,Nt as CodingInput,Tf as ContactDetailDisplay,Lf as ContactDetailInput,wt as ContactPointDisplay,Vt as ContactPointInput,$e as Container,Me as DateTimeInput,xM as DefaultResourceTimeline,Cf as DescriptionList,yf as DescriptionListEntry,Pa as DiagnosticReportDisplay,St as Document,_m as ElementDefinitionInputSelector,al as ElementDefinitionTypeInput,SM as EncounterTimeline,ho as ErrorBoundary,TI as FhirPathTable,K as Form,ve as FormSection,Vn as Header,gt as HumanNameDisplay,qf as HumanNameInput,Df as IdentifierDisplay,Uf as IdentifierInput,_r as Loading,je as Logo,se as MedplumLink,cO as MedplumProvider,fO as MemoizedFhirPathTable,_w as MemoizedSearchControl,Bf as MoneyDisplay,Qf as MoneyInput,zn as Navbar,Fp as ObservationTable,Bo as OperationOutcomeAlert,ko as Panel,CO as PatientTimeline,RO as PlanDefinitionBuilder,_o as QuantityDisplay,Pe as QuantityInput,p0 as QuestionnaireBuilder,Ls as QuestionnaireForm,fr as QuestionnaireItemType,rn as QuestionnaireRepeatWrapper,Ot as RangeDisplay,ot as RangeInput,lo as ReferenceDisplay,wo as ReferenceInput,L0 as ReferenceRangeEditor,eh as ReferenceRangeGroupEditor,sT as RegisterForm,W0 as RequestGroupDisplay,wf as ResourceArrayDisplay,Zf as ResourceArrayInput,ge as ResourceAvatar,_e as ResourceBadge,n1 as ResourceBlame,c1 as ResourceDiff,v1 as ResourceForm,A1 as ResourceHistoryTable,Ut as ResourceInput,Ee as ResourceName,pe as ResourcePropertyDisplay,qe as ResourcePropertyInput,Ta as ResourceTable,Ye as ResourceTimeline,$1 as Scheduler,Va as SearchChangeEvent,co as SearchClickEvent,xI as SearchControl,Jl as SearchFieldEditor,Yl as SearchFilterEditor,qa as SearchLoadEvent,tE as ServiceRequestTimeline,nD as SignInForm,Xt as StatusBadge,vl as Timeline,Ze as TimelineItem,rl as TimingInput,Ma as addDateFilterBetween,VM as addField,Ro as addFilter,Nl as addLastMonthFilter,wa as addMissingFilter,Vl as addNextMonthFilter,Hl as addThisMonthFilter,Ll as addTodayFilter,Rl as addTomorrowFilter,ql as addYearToDateFilter,El as addYesterdayFilter,he as buildFieldNameString,HM as clearFilters,_t as clearFiltersOnField,Nf as convertIsoToLocal,Hf as convertLocalToIso,Tt as createScriptTag,Ol as deleteFilter,me as getErrorsForInput,bt as getIssuesForExpression,ys as getNewMultiSelectValues,nt as getOpString,lr as getQuestionnaireItemReferenceTargetTypes,Yn as getRecaptcha,zl as getSearchOperators,Ul as getSortField,Zn as initRecaptcha,hs as isChoiceQuestion,Cs as isQuestionEnabled,Ql as isSortDescending,qn as parseForm,hr as reactContext,Wl as renderValue,at as setFilters,Tx as setOffset,Gl as setPage,sr as setQuestionnaireItemReferenceTargetTypes,Oa as setSort,Pl as sortByDateAndPriority,qM as toggleSort,v as useMedplum,Qo as useMedplumContext,ze as useMedplumNavigate,mt as useMedplumProfile,X as useResource,R1 as useSearch,N1 as useSearchOne,$s as useSearchResources};
68
68
  //# sourceMappingURL=index.mjs.map