@medplum/react 4.1.11 → 4.1.12

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.
@@ -62,15 +62,15 @@
62
62
  }
63
63
  }
64
64
  }`.replace(/\s+/g," ")}function getResourcesFromResponse(response,query){let resources=[];return response.data.Patients1&&resources.push(...response.data.Patients1),response.data.Patients2&&resources.push(...response.data.Patients2),response.data.ServiceRequestList&&resources.push(...response.data.ServiceRequestList),sortByRelevance(dedupeResources(resources),query).slice(0,5)}function dedupeResources(resources){let ids=new Set,result=[];for(let resource of resources)ids.has(resource.id)||(ids.add(resource.id),result.push(resource));return result}function sortByRelevance(resources,query){return resources.sort((a,b)=>getResourceScore(b,query)-getResourceScore(a,query))}function getResourceScore(resource,query){let bestScore=0;if(resource.identifier)for(let identifier of resource.identifier)bestScore=Math.max(bestScore,getStringScore(identifier.value,query));if(resource.resourceType==="Patient"&&resource.name)for(let name of resource.name)bestScore=Math.max(bestScore,getStringScore((0,import_core20.formatHumanName)(name),query));return bestScore}function getStringScore(str,query){if(!str)return 0;let index=str.toLowerCase().indexOf(query.toLowerCase());return index<0?0:100-index}var import_jsx_runtime12=require("react/jsx-runtime");function Header(props){let profile=(0,import_react_hooks6.useMedplumProfile)(),[userMenuOpened,setUserMenuOpened]=(0,import_react8.useState)(!1);return(0,import_jsx_runtime12.jsx)(import_core21.AppShell.Header,{p:8,style:{zIndex:101},children:(0,import_jsx_runtime12.jsxs)(import_core21.Group,{justify:"space-between",children:[(0,import_jsx_runtime12.jsxs)(import_core21.Group,{gap:"xs",children:[(0,import_jsx_runtime12.jsx)(import_core21.UnstyledButton,{className:Header_default.logoButton,onClick:props.navbarToggle,children:props.logo}),!props.headerSearchDisabled&&(0,import_jsx_runtime12.jsx)(HeaderSearchInput,{pathname:props.pathname,searchParams:props.searchParams})]}),(0,import_jsx_runtime12.jsxs)(import_core21.Group,{gap:"lg",pr:"sm",children:[props.notifications,(0,import_jsx_runtime12.jsxs)(import_core21.Menu,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime12.jsx)(import_core21.Menu.Target,{children:(0,import_jsx_runtime12.jsx)(import_core21.UnstyledButton,{className:clsx_default(Header_default.user,{[Header_default.userActive]:userMenuOpened}),onClick:()=>setUserMenuOpened(o=>!o),children:(0,import_jsx_runtime12.jsxs)(import_core21.Group,{gap:7,children:[(0,import_jsx_runtime12.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime12.jsx)(import_core21.Text,{size:"sm",className:Header_default.userName,children:(0,import_core22.formatHumanName)(profile?.name?.[0])}),(0,import_jsx_runtime12.jsx)(IconChevronDown,{size:12,stroke:1.5})]})})}),(0,import_jsx_runtime12.jsx)(import_core21.Menu.Dropdown,{children:(0,import_jsx_runtime12.jsx)(HeaderDropdown,{version:props.version})})]})]})]})})}var import_core27=require("@mantine/core"),import_react_hooks9=require("@medplum/react-hooks");var import_react15=require("react");var import_core24=require("@mantine/core"),import_notifications2=require("@mantine/notifications"),import_core25=require("@medplum/core"),import_react_hooks7=require("@medplum/react-hooks");var import_react10=require("react");var import_react9=require("react"),FormContext=(0,import_react9.createContext)({submitting:!1});FormContext.displayName="FormContext";function parseForm(form){let result={};for(let element of Array.from(form.elements))element instanceof HTMLInputElement?parseInputElement(result,element):element instanceof HTMLTextAreaElement?result[element.name]=element.value:element instanceof HTMLSelectElement&&parseSelectElement(result,element);return result}function parseInputElement(result,el){el.disabled||(el.type==="checkbox"||el.type==="radio")&&!el.checked||(result[el.name]=el.value)}function parseSelectElement(result,el){result[el.name]=el.value}var import_jsx_runtime13=require("react/jsx-runtime");function Form(props){let[submitting,setSubmitting]=(0,import_react10.useState)(!1);return(0,import_jsx_runtime13.jsx)(FormContext.Provider,{value:{submitting},children:(0,import_jsx_runtime13.jsx)("form",{style:props.style,"data-testid":props.testid,onSubmit:e=>{e.preventDefault();let formData=parseForm(e.target);if(props.onSubmit){setSubmitting(!0);let result=props.onSubmit(formData);result?.then?result.catch(console.error).finally(()=>{setSubmitting(!1)}):setSubmitting(!1)}},children:props.children})})}var import_core23=require("@mantine/core"),import_react11=require("react");var import_jsx_runtime14=require("react/jsx-runtime");function SubmitButton(props){let{children,...buttonProps}=props,{submitting}=(0,import_react11.useContext)(FormContext);return(0,import_jsx_runtime14.jsx)(import_core23.Button,{type:"submit",loading:submitting,...buttonProps,children})}var import_jsx_runtime15=require("react/jsx-runtime");function BookmarkDialog(props){let medplum=(0,import_react_hooks7.useMedplum)(),config=medplum.getUserConfiguration();function submitHandler(formData){let{menuname,bookmarkname:name}=formData,target=`${props.pathname}?${props.searchParams.toString()}`,newConfig=(0,import_core25.deepClone)(config);newConfig.menu?.find(({title})=>title===menuname)?.link?.push({name,target}),medplum.updateResource(newConfig).then(res=>{config.menu=res.menu,medplum.dispatchEvent({type:"change"}),(0,import_notifications2.showNotification)({color:"green",message:"Success"}),props.onOk()}).catch(err=>{(0,import_notifications2.showNotification)({color:"red",message:(0,import_core25.normalizeErrorString)(err)})})}return(0,import_jsx_runtime15.jsx)(import_core24.Modal,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime15.jsx)(Form,{onSubmit:submitHandler,children:(0,import_jsx_runtime15.jsxs)(import_core24.Stack,{children:[(0,import_jsx_runtime15.jsx)(SelectMenu,{config}),(0,import_jsx_runtime15.jsx)(import_core24.TextInput,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),(0,import_jsx_runtime15.jsx)(import_core24.Group,{justify:"flex-end",children:(0,import_jsx_runtime15.jsx)(SubmitButton,{mt:"sm",children:"OK"})})]})})})}function SelectMenu(props){function userConfigToMenu(config){return config?.menu?.map(menu=>menu.title)}let menus=userConfigToMenu(props.config);return(0,import_jsx_runtime15.jsx)(import_core24.NativeSelect,{name:"menuname",defaultValue:menus[0],label:"Select Menu Option",data:menus,withAsterisk:!0})}var import_react14=require("react");var import_react13=require("react");var import_core26=require("@mantine/core"),import_react_hooks8=require("@medplum/react-hooks");var import_react12=require("react");var import_jsx_runtime16=require("react/jsx-runtime");function toKey(element){return typeof element.code=="string"?element.code:JSON.stringify(element)}function getDisplay(item){return typeof item.display=="string"?item.display:toKey(item)}function toOption2(element){return{value:toKey(element),label:getDisplay(element),resource:element}}function createValue(input){return{code:input,display:input}}function ValueSetAutocomplete(props){let medplum=(0,import_react_hooks8.useMedplum)(),{binding,creatable,clearable,expandParams,withHelpText,...rest}=props,loadValues=(0,import_react12.useCallback)(async(input,signal)=>{if(!binding)return[];let valueSetElements=(await medplum.valueSetExpand({...expandParams,url:binding,filter:input,count:10},{signal})).expansion?.contains??[],newData=[];for(let valueSetElement of valueSetElements)valueSetElement.code&&!newData.some(item=>item.code===valueSetElement.code)&&newData.push(valueSetElement);return newData},[medplum,expandParams,binding]);return(0,import_jsx_runtime16.jsx)(AsyncAutocomplete,{...rest,creatable:creatable??!0,clearable:clearable??!0,toOption:toOption2,loadOptions:loadValues,onCreate:createValue,itemComponent:withHelpText?ItemComponent2:void 0})}var ItemComponent2=(0,import_react12.forwardRef)(({label,resource,active,...others},ref)=>(0,import_jsx_runtime16.jsx)("div",{ref,...others,children:(0,import_jsx_runtime16.jsxs)(import_core26.Group,{wrap:"nowrap",gap:"xs",children:[active&&(0,import_jsx_runtime16.jsx)(IconCheck,{size:12}),(0,import_jsx_runtime16.jsxs)("div",{children:[(0,import_jsx_runtime16.jsx)(import_core26.Text,{children:label}),(0,import_jsx_runtime16.jsx)(import_core26.Text,{size:"xs",c:"dimmed",children:`${resource.system}#${resource.code}`})]})]})}));var import_jsx_runtime17=require("react/jsx-runtime");function CodeInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react13.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newCode=valueSetElementToCode(newValue);setValue(newCode),onChange&&onChange(newCode)}return(0,import_jsx_runtime17.jsx)(ValueSetAutocomplete,{defaultValue:codeToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeToValueSetElement(code){return code?{code}:void 0}function valueSetElementToCode(element){return element?.code}var import_jsx_runtime18=require("react/jsx-runtime");function ResourceTypeInput(props){let[resourceType,setResourceType]=(0,import_react14.useState)(props.defaultValue),onChange=props.onChange,setResourceTypeWrapper=(0,import_react14.useCallback)(newResourceType=>{setResourceType(newResourceType),onChange&&onChange(newResourceType)},[onChange]);return(0,import_jsx_runtime18.jsx)(CodeInput,{disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":props.testId,defaultValue:resourceType,onChange:setResourceTypeWrapper,name:props.name,placeholder:props.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxValues:props.maxValues??1,clearable:!1,withHelpText:!1})}var Navbar_default={menuTitle:"Navbar_menuTitle",link:"Navbar_link",linkActive:"Navbar_linkActive"};var import_jsx_runtime19=require("react/jsx-runtime");function Navbar(props){let navigate=(0,import_react_hooks9.useMedplumNavigate)(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react15.useState)(!1);function onLinkClick(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}return(0,import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core27.AppShell.Navbar,{children:(0,import_jsx_runtime19.jsxs)(import_core27.ScrollArea,{p:"xs",children:[!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime19.jsx)(import_core27.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime19.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),(0,import_jsx_runtime19.jsxs)(import_core27.AppShell.Section,{grow:!0,children:[props.menus?.map(menu=>(0,import_jsx_runtime19.jsxs)(import_react15.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core27.Text,{className:Navbar_default.menuTitle,children:menu.title}),menu.links?.map(link=>(0,import_jsx_runtime19.jsxs)(NavbarLink,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick(e,link.href),children:[(0,import_jsx_runtime19.jsx)(NavLinkIcon,{icon:link.icon}),(0,import_jsx_runtime19.jsx)("span",{children:link.label})]},link.href))]},`menu-${menu.title}`)),props.displayAddBookmark&&(0,import_jsx_runtime19.jsx)(import_core27.Button,{variant:"subtle",size:"xs",mt:"xl",leftSection:(0,import_jsx_runtime19.jsx)(IconPlus,{size:"0.75rem"}),onClick:()=>setBookmarkDialogVisible(!0),children:"Add Bookmark"})]})]})}),props.pathname&&props.searchParams&&(0,import_jsx_runtime19.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLink(props){return(0,import_jsx_runtime19.jsx)(MedplumLink,{onClick:props.onClick,to:props.to,className:clsx_default(Navbar_default.link,{[Navbar_default.linkActive]:props.active}),children:props.children})}function NavLinkIcon(props){return props.icon?props.icon:(0,import_jsx_runtime19.jsx)(import_core27.Space,{w:30})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&&currentSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime20=require("react/jsx-runtime");function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react16.useState)(localStorage.navbarOpen==="true"),medplum=(0,import_react_hooks10.useMedplum)(),profile=(0,import_react_hooks10.useMedplumProfile)();(0,import_react16.useEffect)(()=>{function eventListener(){(0,import_notifications3.showNotification)({id:"offline",color:"red",message:"No connection to server",autoClose:!1})}return medplum.addEventListener("offline",eventListener),()=>medplum.removeEventListener("offline",eventListener)},[medplum]);function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}return medplum.isLoading()?(0,import_jsx_runtime20.jsx)(Loading,{}):(0,import_jsx_runtime20.jsxs)(import_core28.AppShell,{header:{height:60},navbar:{width:250,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},padding:0,children:[profile&&(0,import_jsx_runtime20.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarToggle:toggleNavbar,notifications:props.notifications}),profile&&navbarOpen?(0,import_jsx_runtime20.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled}):void 0,(0,import_jsx_runtime20.jsx)(import_core28.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime20.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime20.jsx)(import_react16.Suspense,{fallback:(0,import_jsx_runtime20.jsx)(Loading,{}),children:props.children})})})]})}var import_core32=require("@medplum/core");var import_core30=require("@mantine/core"),import_core31=require("@medplum/core"),import_react_hooks11=require("@medplum/react-hooks");var import_core29=require("@mantine/core"),import_react17=require("react");var import_jsx_runtime21=require("react/jsx-runtime"),CCDA_VIEWER_URL="https://ccda.medplum.com",BASE_VALIDATION_URL="https://ccda-validator.medplum.com/";function CcdaDisplay(props){let{url}=props,[shouldSend,setShouldSend]=(0,import_react17.useState)(!1),iframeRef=(0,import_react17.useRef)(null),[validationResult,setValidationResult]=(0,import_react17.useState)(),[validating,setValidating]=(0,import_react17.useState)(!1);(0,import_react17.useEffect)(()=>{url&&shouldSend&&iframeRef.current&&(sendCommand(iframeRef.current,{command:"loadCcdaXml",value:url}).catch(console.error),setShouldSend(!1))},[url,shouldSend]);let validateCcda=async()=>{if(url)try{setValidating(!0);let ccdaContent=await(await fetch(url)).text(),formData=new FormData;formData.append("ccdaFile",new Blob([ccdaContent],{type:"text/xml"}),"ccda.xml");let validationUrl=`${BASE_VALIDATION_URL}referenceccdaservice/?validationObjective=C-CDA_IG_Plus_Vocab&referenceFileName=No%20scenario%20File&curesUpdate=true&severityLevel=WARNING`,validationResponse=await fetch(validationUrl,{method:"POST",body:formData,credentials:"omit",redirect:"manual"});if(!validationResponse.ok)throw new Error(`Validation failed: ${validationResponse.status} ${validationResponse.statusText}`);let validationResult2=await validationResponse.json();setValidationResult(validationResult2)}catch(error){setValidationResult(void 0),console.error("CCDA validation error:",error)}finally{setValidating(!1)}},downloadResults=()=>{if(!validationResult)return;let resultsJson=JSON.stringify(validationResult,null,2);exportJsonFile(resultsJson,"ccda-validation-results")},getErrorCount=()=>validationResult?validationResult.resultsMetaData.resultMetaData.filter(item=>item?.type.includes("Error")).reduce((sum,item)=>sum+(item.count||0),0):0;return url?(0,import_jsx_runtime21.jsxs)("div",{"data-testid":"ccda-iframe",style:{maxWidth:props.maxWidth},children:[(0,import_jsx_runtime21.jsx)("div",{style:{minHeight:400},children:(0,import_jsx_runtime21.jsx)("iframe",{title:"C-CDA Viewer",width:"100%",height:"400",ref:iframeRef,src:CCDA_VIEWER_URL,allowFullScreen:!0,frameBorder:0,seamless:!0,onLoad:()=>setShouldSend(!0)})}),(0,import_jsx_runtime21.jsxs)("div",{style:{marginTop:"10px",marginBottom:"10px",display:"flex",alignItems:"center"},children:[(0,import_jsx_runtime21.jsx)(import_core29.Button,{type:"button",onClick:validateCcda,disabled:validating,children:validating?"Validating...":"Validate"}),validationResult&&(0,import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment,{children:[(0,import_jsx_runtime21.jsxs)("div",{style:{marginLeft:"15px"},children:[(0,import_jsx_runtime21.jsx)("strong",{children:"Validation Results:"})," ",getErrorCount()," errors found"]}),(0,import_jsx_runtime21.jsx)(import_core29.Button,{type:"button",onClick:downloadResults,color:"green",style:{marginLeft:"auto"},children:"Download Full Results"})]})]})]}):null}var import_jsx_runtime22=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=(0,import_react_hooks11.useCachedBinaryUrl)(uncachedUrl);return url?(0,import_jsx_runtime22.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime22.jsx)("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime22.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime22.jsx)("source",{type:contentType,src:url})}),(contentType?.startsWith("text/")||contentType==="application/json"||contentType==="application/pdf")&&(0,import_jsx_runtime22.jsx)("div",{"data-testid":"attachment-iframe",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime22.jsx)("iframe",{title:"Attachment",width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),contentType===import_core31.ContentType.CDA_XML&&(0,import_jsx_runtime22.jsx)(CcdaDisplay,{url}),(0,import_jsx_runtime22.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime22.jsx)(import_core30.Anchor,{href:uncachedUrl,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:getDownloadName(title),children:title||"Download"})})]}):null}function getDownloadName(title){return title?.includes(".")?title:void 0}var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime23=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime23.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment,{children:[(0,import_jsx_runtime23.jsx)("dt",{children:props.term}),(0,import_jsx_runtime23.jsx)("dd",{children:props.children})]})}var import_jsx_runtime24=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v,index)=>(0,import_jsx_runtime24.jsx)("div",{children:(0,import_jsx_runtime24.jsx)(AttachmentDisplay,{value:v,maxWidth:props.maxWidth})},"attatchment-"+index)),content;if(props.includeDescriptionListEntry){if(props.property===void 0)throw new Error("props.property is required when includeDescriptionListEntry is true");if(!(0,import_core32.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime24.jsx)(DescriptionListEntry,{term:(0,import_core32.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime24.jsx)(import_jsx_runtime24.Fragment,{children:attachmentElements});return content}var import_core34=require("@mantine/core");var import_react19=require("react");var import_core33=require("@medplum/core"),import_react_hooks12=require("@medplum/react-hooks"),import_react18=require("react");var import_jsx_runtime25=require("react/jsx-runtime");function AttachmentButton(props){let medplum=(0,import_react_hooks12.useMedplum)(),fileInputRef=(0,import_react18.useRef)(null);function onClick(e){killEvent(e),fileInputRef.current?.click()}function onFileChange(e){killEvent(e);let files=e.target.files;files&&Array.from(files).forEach(processFile)}function processFile(file){!file||!file.name||(props.onUploadStart&&props.onUploadStart(),medplum.createAttachment({data:file,contentType:file.type||"application/octet-stream",filename:file.name,securityContext:props.securityContext,onProgress:props.onUploadProgress}).then(attachment=>props.onUpload(attachment)).catch(err=>{props.onUploadError&&props.onUploadError((0,import_core33.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment,{children:[(0,import_jsx_runtime25.jsx)("input",{disabled:props.disabled,type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:fileInputRef,onChange:e=>onFileChange(e)}),props.children({onClick,disabled:props.disabled})]})}var import_jsx_runtime26=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react19.useState)(props.defaultValue??[]),valuesRef=(0,import_react19.useRef)(values);valuesRef.current=values;function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime26.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime26.jsxs)("colgroup",{children:[(0,import_jsx_runtime26.jsx)("col",{width:"97%"}),(0,import_jsx_runtime26.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime26.jsxs)("tbody",{children:[values.map((v,index)=>(0,import_jsx_runtime26.jsxs)("tr",{children:[(0,import_jsx_runtime26.jsx)("td",{children:(0,import_jsx_runtime26.jsx)(AttachmentDisplay,{value:v,maxWidth:200})}),(0,import_jsx_runtime26.jsx)("td",{children:(0,import_jsx_runtime26.jsx)(import_core34.ActionIcon,{disabled:props.disabled,title:"Remove",variant:"subtle",size:"sm",color:"gray",onClick:e=>{killEvent(e);let copy=values.slice();copy.splice(index,1),setValuesWrapper(copy)},children:(0,import_jsx_runtime26.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime26.jsxs)("tr",{children:[(0,import_jsx_runtime26.jsx)("td",{}),(0,import_jsx_runtime26.jsx)("td",{children:(0,import_jsx_runtime26.jsx)(AttachmentButton,{disabled:props.disabled,onUpload:attachment=>{setValuesWrapper([...valuesRef.current,attachment])},children:props2=>(0,import_jsx_runtime26.jsx)(import_core34.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:props2.disabled?"gray":"green",children:(0,import_jsx_runtime26.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core35=require("@mantine/core"),import_react20=require("react");var import_jsx_runtime27=require("react/jsx-runtime");function AttachmentInput(props){let[value,setValue]=(0,import_react20.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return value?(0,import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment,{children:[(0,import_jsx_runtime27.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime27.jsx)(import_core35.Button,{disabled:props.disabled,onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime27.jsx)(AttachmentButton,{disabled:props.disabled,securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime27.jsx)(import_core35.Button,{...props2,children:"Upload..."})})}var import_core44=require("@medplum/core"),import_react_hooks16=require("@medplum/react-hooks"),import_react24=require("react");var import_core36=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime28=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime28.jsx)(import_core36.Container,{className:Container_default.root,...others,children})}var import_core37=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime29=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime29.jsx)(import_core37.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_jsx_runtime30=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime30.jsx)(Container,{children:(0,import_jsx_runtime30.jsx)(Panel,{...others,children})})}var import_core38=require("@mantine/core"),import_core39=require("@medplum/core"),import_react_hooks13=require("@medplum/react-hooks"),import_react21=require("react");var import_jsx_runtime31=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime31.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:props.size,height:props.size},children:[(0,import_jsx_runtime31.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime31.jsx)("path",{fill:props.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),(0,import_jsx_runtime31.jsx)("path",{fill:props.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"}),(0,import_jsx_runtime31.jsx)("path",{fill:props.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"}),(0,import_jsx_runtime31.jsx)("path",{fill:props.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),(0,import_jsx_runtime31.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
65
- `)}function getIssuesForExpression(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))}var ARRAY_INDEX_REGEX=/\[\d+\]/;function isExpressionMatch(expr1,expr2){let isExpr1Indexed=typeof expr1=="string"&&ARRAY_INDEX_REGEX.test(expr1),isExpr2Indexed=typeof expr2=="string"&&ARRAY_INDEX_REGEX.test(expr2);if(isExpr1Indexed!==isExpr2Indexed&&(expr1=expr1?.replace(ARRAY_INDEX_REGEX,""),expr2=expr2?.replace(ARRAY_INDEX_REGEX,"")),expr1===expr2)return!0;if(!expr1||!expr2)return!1;let dot1=expr1.indexOf(".");if(dot1>=0&&expr1.substring(dot1+1)===expr2)return!0;let dot2=expr2.indexOf(".");return dot2>=0&&expr2.substring(dot2+1)===expr1}var import_jsx_runtime32=require("react/jsx-runtime");function NewProjectForm(props){let medplum=(0,import_react_hooks13.useMedplum)(),[outcome,setOutcome]=(0,import_react21.useState)();return(0,import_jsx_runtime32.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core39.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime32.jsxs)(import_core38.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime32.jsx)(Logo,{size:32}),(0,import_jsx_runtime32.jsx)(import_core38.Title,{children:"Create project"})]}),(0,import_jsx_runtime32.jsxs)(import_core38.Stack,{gap:"xl",children:[(0,import_jsx_runtime32.jsx)(import_core38.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"projectName")}),(0,import_jsx_runtime32.jsxs)(import_core38.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime32.jsx)(import_core38.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime32.jsx)(import_core38.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime32.jsx)(import_core38.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime32.jsx)(SubmitButton,{children:"Create project"})})]})}var import_core42=require("@mantine/core"),import_core43=require("@medplum/core"),import_react_hooks15=require("@medplum/react-hooks"),import_react23=require("react");var import_react_hooks14=require("@medplum/react-hooks"),import_react22=require("react");function createScriptTag(src,onload){let head=document.getElementsByTagName("head")[0],script=document.createElement("script");script.async=!0,script.src=src,script.onload=onload??null,head.appendChild(script)}var import_jsx_runtime33=require("react/jsx-runtime");function GoogleButton(props){let medplum=(0,import_react_hooks14.useMedplum)(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react22.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react22.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react22.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react22.useState)(!1);return(0,import_react22.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initialized||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),setInitialized(!0)),parentRef.current&&!buttonRendered&&(google.accounts.id.renderButton(parentRef.current,{}),setButtonRendered(!0))},[medplum,googleClientId,initialized,scriptLoaded,parentRef,buttonRendered,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime33.jsx)("div",{ref:parentRef}):null}function getGoogleClientId(clientId){if(clientId)return clientId;if(typeof window<"u"){let origin=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}}var import_core40=require("@mantine/core"),import_core41=require("@medplum/core");var import_jsx_runtime34=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime34.jsx)(import_core40.Alert,{icon:(0,import_jsx_runtime34.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime34.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core41.operationOutcomeIssueToString)(issue)},issue.details?.text))})}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime35=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=(0,import_react_hooks15.useMedplum)(),[outcome,setOutcome]=(0,import_react23.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react23.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime35.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core43.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime35.jsx)(import_core42.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime35.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment,{children:[(0,import_jsx_runtime35.jsx)(import_core42.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime35.jsx)(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,projectId:props.projectId,createUser:!0}))}catch(err){setOutcome((0,import_core43.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime35.jsx)(import_core42.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime35.jsxs)(import_core42.Stack,{gap:"xl",children:[(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime35.jsx)(import_core42.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime35.jsxs)(import_core42.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime35.jsxs)(import_core42.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime35.jsxs)(import_core42.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime35.jsx)(import_core42.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime35.jsx)(SubmitButton,{children:"Create account"})]})]})}var import_jsx_runtime36=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=(0,import_react_hooks16.useMedplum)(),[login,setLogin]=(0,import_react24.useState)(),[outcome,setOutcome]=(0,import_react24.useState)();(0,import_react24.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core44.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code?medplum.processCode(response.code).then(()=>onSuccess()).catch(console.log):response.login&&setLogin(response.login)}return(0,import_jsx_runtime36.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime36.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime36.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime36.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications4=require("@mantine/notifications"),import_core52=require("@medplum/core"),import_react_hooks20=require("@medplum/react-hooks"),import_react28=require("react");var import_core45=require("@mantine/core"),import_core46=require("@medplum/core"),import_react_hooks17=require("@medplum/react-hooks"),import_react25=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react25.useState)();return email?(0,import_jsx_runtime37.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime37.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react25.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react25.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),window.location.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react25.useCallback)(async formData=>{let authMethod=await medplum.post("auth/method",{email:formData.email});await isExternalAuth(authMethod)||setEmail(formData.email)},[medplum,isExternalAuth,setEmail]),handleGoogleCredential=(0,import_react25.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core46.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime37.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime37.jsx)(import_core45.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment,{children:[(0,import_jsx_runtime37.jsx)(import_core45.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime37.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(import_core45.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(import_core45.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime37.jsxs)(import_core45.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime37.jsx)("div",{children:onRegister&&(0,import_jsx_runtime37.jsx)(import_core45.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onRegister,size:"xs","data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(SubmitButton,{children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),[outcome,setOutcome]=(0,import_react25.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react25.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core46.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime37.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime37.jsx)(import_core45.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime37.jsx)(import_core45.Stack,{gap:"xl",children:(0,import_jsx_runtime37.jsx)(import_core45.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime37.jsxs)(import_core45.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime37.jsx)(import_core45.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime37.jsx)(import_core45.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime37.jsx)(SubmitButton,{children:"Sign in"})]})]})}var import_core47=require("@mantine/core"),import_core48=require("@medplum/core"),import_react_hooks18=require("@medplum/react-hooks"),import_react26=require("react");var import_jsx_runtime38=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=(0,import_react_hooks18.useMedplum)(),combobox=(0,import_core47.useCombobox)(),[search,setSearch]=(0,import_react26.useState)(""),[outcome,setOutcome]=(0,import_react26.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core48.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime38.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime38.jsxs)(import_core47.Stack,{children:[(0,import_jsx_runtime38.jsxs)(import_core47.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime38.jsx)(Logo,{size:32}),(0,import_jsx_runtime38.jsx)(import_core47.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime38.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime38.jsxs)(import_core47.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime38.jsx)(import_core47.Combobox.EventsTarget,{children:(0,import_jsx_runtime38.jsx)(import_core47.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime38.jsx)("div",{children:(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime38.jsxs)(import_core47.Group,{children:[(0,import_jsx_runtime38.jsx)(import_core47.Avatar,{radius:"xl"}),(0,import_jsx_runtime38.jsxs)("div",{children:[(0,import_jsx_runtime38.jsx)(import_core47.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime38.jsx)(import_core47.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core49=require("@mantine/core"),import_react_hooks19=require("@medplum/react-hooks"),import_jsx_runtime39=require("react/jsx-runtime");var import_jsx_runtime40=require("react/jsx-runtime"),openConditionScope=/^patient\/Condition\.(?:\*|c?r?u?d?s?)$/,encounterDiagnosis="?category=http://terminology.hl7.org/CodeSystem/condition-category|encounter-diagnosis",problemListItem="?category=http://terminology.hl7.org/CodeSystem/condition-category|problem-list-item",healthConcern="?category=http://hl7.org/fhir/us/core/CodeSystem/condition-category|health-concern",openObservationScope=/^patient\/Observation\.(?:\*|c?r?u?d?s?)$/,clinicalTest="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-observation-category|clinical-test",laboratory="?category=http://terminology.hl7.org/CodeSystem/observation-category|laboratory",socialHistory="?category=http://terminology.hl7.org/CodeSystem/observation-category|social-history",sdoh="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-category|sdoh",survey="?category=http://terminology.hl7.org/CodeSystem/observation-category|survey",vitalSigns="?category=http://terminology.hl7.org/CodeSystem/observation-category|vital-signs";function ChooseScopeForm(props){let medplum=(0,import_react_hooks19.useMedplum)();return(0,import_jsx_runtime40.jsx)(Form,{onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:(0,import_jsx_runtime40.jsxs)(import_core49.Stack,{children:[(0,import_jsx_runtime40.jsxs)(import_core49.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime40.jsx)(Logo,{size:32}),(0,import_jsx_runtime40.jsx)(import_core49.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime40.jsx)(import_core49.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>{let additionalScopes;return openConditionScope.test(scopeName)?additionalScopes=[scopeName+encounterDiagnosis,scopeName+problemListItem,scopeName+healthConcern]:openObservationScope.test(scopeName)&&(additionalScopes=[scopeName+clinicalTest,scopeName+laboratory,scopeName+socialHistory,scopeName+sdoh,scopeName+survey,scopeName+vitalSigns]),(0,import_jsx_runtime40.jsxs)(import_jsx_runtime39.Fragment,{children:[(0,import_jsx_runtime40.jsx)(import_core49.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName),additionalScopes?.map(scope=>(0,import_jsx_runtime40.jsx)(import_core49.Checkbox,{id:scope,name:scope,label:scope},scope))]},scopeName+"_group")})}),(0,import_jsx_runtime40.jsx)(import_core49.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime40.jsx)(SubmitButton,{children:"Set scope"})})]})})}var import_core50=require("@mantine/core"),import_core51=require("@medplum/core");var import_react27=require("react");var import_jsx_runtime41=require("react/jsx-runtime");function MfaForm(props){let[errorMessage,setErrorMessage]=(0,import_react27.useState)();return(0,import_jsx_runtime41.jsx)(Form,{onSubmit:formData=>{setErrorMessage(void 0),props.onSubmit(formData).catch(err=>setErrorMessage((0,import_core51.normalizeErrorString)(err)))},children:(0,import_jsx_runtime41.jsxs)(import_core50.Stack,{children:[(0,import_jsx_runtime41.jsxs)(import_core50.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime41.jsx)(Logo,{size:32}),(0,import_jsx_runtime41.jsx)(import_core50.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime41.jsx)(import_core50.Alert,{icon:(0,import_jsx_runtime41.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime41.jsx)(import_core50.Stack,{children:(0,import_jsx_runtime41.jsx)(import_core50.TextInput,{name:"token",label:"MFA code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime41.jsx)(import_core50.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime41.jsx)(SubmitButton,{children:"Submit code"})})]})})}var import_jsx_runtime42=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),[login,setLogin]=(0,import_react28.useState)(),loginRequested=(0,import_react28.useRef)(!1),[mfaRequired,setAuthenticatorRequired]=(0,import_react28.useState)(!1),[memberships,setMemberships]=(0,import_react28.useState)(),handleCode=(0,import_react28.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core52.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react28.useCallback)(response=>{setAuthenticatorRequired(!!response.mfaRequired),response.login&&setLogin(response.login),response.memberships&&setMemberships(response.memberships),response.code&&(chooseScopes?setMemberships(void 0):handleCode(response.code))},[chooseScopes,handleCode]),handleScopeResponse=(0,import_react28.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react28.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core52.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime42.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime42.jsx)(MfaForm,{onSubmit:async fields=>{let res=await medplum.post("auth/mfa/verify",{login,token:fields.token});handleAuthResponse(res)}}):memberships?(0,import_jsx_runtime42.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime42.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime42.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime42.jsx)("div",{children:"Success"}):(0,import_jsx_runtime42.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core66=require("@medplum/core"),import_react32=require("react");var import_core64=require("@mantine/core"),import_core65=require("@medplum/core");var import_core53=require("@medplum/core"),import_jsx_runtime43=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment,{children:(0,import_core53.formatCodeableConcept)(props.value)})}var import_core54=require("@medplum/core"),import_jsx_runtime44=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment,{children:(0,import_core54.formatCoding)(props.value)})}var import_jsx_runtime45=require("react/jsx-runtime");function ContactPointDisplay(props){let contactPoint=props.value;if(!contactPoint)return null;let builder=[];return contactPoint.value&&builder.push(contactPoint.value),(contactPoint.use||contactPoint.system)&&(builder.push(" ["),contactPoint.use&&builder.push(contactPoint.use),contactPoint.use&&contactPoint.system&&builder.push(" "),contactPoint.system&&builder.push(contactPoint.system),builder.push("]")),(0,import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime46=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime46.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_core56=require("@medplum/core"),import_react_hooks21=require("@medplum/react-hooks"),import_react29=require("react");var import_core55=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core55.getTypedPropertyValue)(context,path,{profileUrl});return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}function getValueAndTypeFromElement(typedValue,path,element){let typedResult=(0,import_core55.getTypedPropertyValueWithSchema)(typedValue,path,element);return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}var import_jsx_runtime47=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=(0,import_react_hooks21.useMedplum)(),ctx=(0,import_react29.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react29.useState)((0,import_core56.getDataType)("Extension")),profileUrl=(0,import_react29.useMemo)(()=>{if((0,import_core56.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react29.useState)(profileUrl!==void 0);if((0,import_react29.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core56.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core56.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime47.jsx)("div",{children:"Loading..."});if(typeSchema.elements["value[x]"]?.max!==0){let[propertyValue,propertyType]=getValueAndType({type:"Extension",value:props.value},"value[x]",profileUrl??ctx.profileUrl);return(0,import_jsx_runtime47.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime47.jsx)(BackboneElementDisplay,{path:props.path,value:{type:typeSchema.type,value:props.value},compact:props.compact,ignoreMissingValues:props.ignoreMissingValues,link:props.link,profileUrl})}var import_jsx_runtime48=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime48.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core57=require("@medplum/core"),import_jsx_runtime49=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime49.jsx)(import_jsx_runtime49.Fragment,{children:(0,import_core57.formatMoney)(props.value)})}var import_core58=require("@medplum/core"),import_jsx_runtime50=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime50.jsx)(import_jsx_runtime50.Fragment,{children:(0,import_core58.formatQuantity)(props.value)})}var import_core59=require("@medplum/core"),import_jsx_runtime51=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime51.jsx)(import_jsx_runtime51.Fragment,{children:(0,import_core59.formatRange)(props.value)})}var import_jsx_runtime52=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment,{children:[(0,import_jsx_runtime52.jsx)(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",(0,import_jsx_runtime52.jsx)(QuantityDisplay,{value:value.denominator})]}):null}var import_core60=require("@medplum/core");var import_jsx_runtime53=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core60.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime53.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment,{children:displayString})}var import_core63=require("@medplum/core"),import_react_hooks22=require("@medplum/react-hooks"),import_react31=require("react");var import_core61=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core61.isPopulated)(slicing?.slices))return[values];let slicedValues=new Array(slices.length+1);for(let i=0;i<slicedValues.length;i++)slicedValues[i]=[];for(let value of values){let sliceName=(0,import_core61.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}return slicedValues}async function prepareSlices({medplum,property}){return new Promise((resolve,reject)=>{if(!property.slicing){resolve([]);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!(0,import_core61.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core61.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl&&promises.push(medplum.requestProfileSchema(profileUrl))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core61.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core62=require("@medplum/core"),import_react30=require("react");var import_jsx_runtime54=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime54.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime55=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react30.useContext)(ElementsContext),contextValue=(0,import_react30.useMemo)(()=>{if((0,import_core62.isPopulated)(sliceElements))return(0,import_core62.buildElementsContext)({parentContext,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentContext,props.path,slice.typeSchema?.url,sliceElements]);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime55.jsx)("div",{children:(0,import_jsx_runtime55.jsx)(ResourcePropertyDisplay,{property,path:props.path,arrayElement:!0,elementDefinitionType:slice.type[0],propertyType:slice.type[0].code,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${props.value.length}`))}))}var import_jsx_runtime56=require("react/jsx-runtime");function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=(0,import_react_hooks22.useMedplum)(),values=(0,import_react31.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react31.useState)(!0),[slices,setSlices]=(0,import_react31.useState)([]),[slicedValues,setSlicedValues]=(0,import_react31.useState)(()=>[values]),ctx=(0,import_react31.useContext)(ElementsContext);if((0,import_react31.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(values,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime56.jsx)("div",{children:"Loading..."});let nonSliceContent;if(property.type[0]?.code!=="Extension"){let nonSliceValues=slicedValues[slices.length],nonSliceElements=nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime56.jsx)("div",{children:(0,import_jsx_runtime56.jsx)(ResourcePropertyDisplay,{path:props.path,arrayElement:!0,property,propertyType,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${nonSliceValues.length}`));if(props.includeDescriptionListEntry){if(!(0,import_core63.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime56.jsx)(DescriptionListEntry,{term:(0,import_core63.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime56.jsx)(import_jsx_runtime56.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime56.jsx)(SliceDisplay,{path:props.path,slice,property,value:slicedValues[sliceIndex],ignoreMissingValues:props.ignoreMissingValues,link:props.link},slice.name);return props.includeDescriptionListEntry&&(sliceDisplay=(0,import_jsx_runtime56.jsx)(DescriptionListEntry,{term:(0,import_core63.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent]})}var import_jsx_runtime57=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime57.jsxs)(import_core64.Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!(0,import_core65.isEmpty)(value)&&(0,import_jsx_runtime57.jsx)(import_core64.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime57.jsx)(import_core64.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime57.jsx)(import_core64.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime57.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime57.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core65.PropertyType.Attachment?(0,import_jsx_runtime57.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime57.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core65.PropertyType.boolean:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core65.PropertyType.SystemString:case import_core65.PropertyType.string:return(0,import_jsx_runtime57.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core65.PropertyType.code:case import_core65.PropertyType.date:case import_core65.PropertyType.decimal:case import_core65.PropertyType.id:case import_core65.PropertyType.integer:case import_core65.PropertyType.positiveInt:case import_core65.PropertyType.unsignedInt:case import_core65.PropertyType.uri:case import_core65.PropertyType.url:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value});case import_core65.PropertyType.canonical:return(0,import_jsx_runtime57.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core65.PropertyType.dateTime:case import_core65.PropertyType.instant:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core65.formatDateTime)(value)});case import_core65.PropertyType.markdown:return(0,import_jsx_runtime57.jsx)("pre",{children:value});case import_core65.PropertyType.Address:return(0,import_jsx_runtime57.jsx)(AddressDisplay,{value});case import_core65.PropertyType.Annotation:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value?.text});case import_core65.PropertyType.Attachment:return(0,import_jsx_runtime57.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core65.PropertyType.CodeableConcept:return(0,import_jsx_runtime57.jsx)(CodeableConceptDisplay,{value});case import_core65.PropertyType.Coding:return(0,import_jsx_runtime57.jsx)(CodingDisplay,{value});case import_core65.PropertyType.ContactDetail:return(0,import_jsx_runtime57.jsx)(ContactDetailDisplay,{value});case import_core65.PropertyType.ContactPoint:return(0,import_jsx_runtime57.jsx)(ContactPointDisplay,{value});case import_core65.PropertyType.HumanName:return(0,import_jsx_runtime57.jsx)(HumanNameDisplay,{value});case import_core65.PropertyType.Identifier:return(0,import_jsx_runtime57.jsx)(IdentifierDisplay,{value});case import_core65.PropertyType.Money:return(0,import_jsx_runtime57.jsx)(MoneyDisplay,{value});case import_core65.PropertyType.Period:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core65.formatPeriod)(value)});case import_core65.PropertyType.Quantity:case import_core65.PropertyType.Duration:return(0,import_jsx_runtime57.jsx)(QuantityDisplay,{value});case import_core65.PropertyType.Range:return(0,import_jsx_runtime57.jsx)(RangeDisplay,{value});case import_core65.PropertyType.Ratio:return(0,import_jsx_runtime57.jsx)(RatioDisplay,{value});case import_core65.PropertyType.Reference:return(0,import_jsx_runtime57.jsx)(ReferenceDisplay,{value,link:props.link});case import_core65.PropertyType.Timing:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core65.formatTiming)(value)});case import_core65.PropertyType.Dosage:case import_core65.PropertyType.UsageContext:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core65.PropertyType.Extension:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}var import_jsx_runtime58=require("react/jsx-runtime"),EXTENSION_KEYS2=["extension","modifierExtension"],IGNORED_PROPERTIES2=DEFAULT_IGNORED_PROPERTIES.filter(prop=>!EXTENSION_KEYS2.includes(prop));function BackboneElementDisplay(props){let typedValue=props.value,{value,type:typeName}=typedValue,parentElementsContext=(0,import_react32.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react32.useMemo)(()=>(0,import_core66.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react32.useMemo)(()=>{if(typeSchema)return(0,import_core66.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if((0,import_core66.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime58.jsxs)("div",{children:[typeName,"\xA0not implemented"]});if(typeof value=="object"&&"name"in value&&Object.keys(value).length===1&&typeof value.name=="string")return(0,import_jsx_runtime58.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime58.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core66.isEmpty)(property.slicing?.slices))return null;if(IGNORED_PROPERTIES2.includes(key))return null;if(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&property.path.split(".").length===2||key.includes("."))return null;let[propertyValue,propertyType]=getValueAndType(typedValue,key,elementsContext.profileUrl);if((props.ignoreMissingValues||property.max===0)&&(0,import_core66.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime58.jsx)(ResourcePropertyDisplay,{property,propertyType,path:props.path+"."+key,value:propertyValue,ignoreMissingValues:props.ignoreMissingValues,includeArrayDescriptionListEntry:isArrayProperty,link:props.link},key);return isArrayProperty?resourcePropertyDisplay:(0,import_jsx_runtime58.jsx)(DescriptionListEntry,{term:(0,import_core66.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core100=require("@medplum/core"),import_react55=require("react");var import_core98=require("@mantine/core"),import_core99=require("@medplum/core"),import_react54=require("react");var import_core68=require("@mantine/core"),import_react33=require("react");var FormSection_default={dimmed:"FormSection_dimmed",preserveBreaks:"FormSection_preserveBreaks"};var import_core67=require("@mantine/core"),import_jsx_runtime59=require("react/jsx-runtime"),READ_ONLY_TOOLTIP_TEXT="Read Only";function maybeWrapWithTooltip(tooltipText,children){return tooltipText?(0,import_jsx_runtime59.jsx)(import_core67.Tooltip.Floating,{label:tooltipText,children}):children}var import_jsx_runtime60=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react33.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime60.jsxs)(import_core68.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime60.jsx)("div",{children:props.children}),(0,import_jsx_runtime60.jsx)("div",{children:(0,import_jsx_runtime60.jsx)(import_core68.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:props?.readonly?FormSection_default.dimmed:void 0},description:props.description,withAsterisk:props.withAsterisk,children:null})})]}))}var import_core69=require("@mantine/core");var import_react34=require("react");var import_jsx_runtime61=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react34.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime61.jsx)(import_core69.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:clsx_default({[FormSection_default.dimmed]:props?.readonly},FormSection_default.preserveBreaks)},description:props.description,withAsterisk:props.withAsterisk,error:getErrorsForInput(props.outcome,props.errorExpression??props.htmlFor),"data-testid":props.testId,children:props.children}))}var import_core70=require("@medplum/core");function setPropertyValue(obj,key,propName,elementDefinition,value){let types=elementDefinition.type;if(types.length>1)for(let type of types){let compoundKey=key.replace("[x]",(0,import_core70.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return(0,import_core70.isEmpty)(value)?obj[propName]=void 0:obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core70.isEmpty)(profile.url)&&!(0,import_core70.isEmpty)(profile.name)}var import_core96=require("@mantine/core"),import_core97=require("@medplum/core"),import_react53=require("react");var import_react35=require("react");var import_jsx_runtime62=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react35.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime62.jsx)(ValueSetAutocomplete,{defaultValue:value&&codeableConceptToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeableConceptToValueSetElement(concept){return concept.coding?.map(c=>({system:c.system,code:c.code,display:c.display}))}function valueSetElementToCodeableConcept(elements){if(elements.length!==0)return{coding:elements.map(e=>({system:e.system,code:e.code,display:e.display}))}}var import_react36=require("react");var import_jsx_runtime63=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,response,...rest}=props,[value,setValue]=(0,import_react36.useState)(response?.answer?.[0]?.valueCoding??defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime63.jsx)(ValueSetAutocomplete,{defaultValue:value?codingToValueSetElement(value):void 0,maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core72=require("@mantine/core"),import_react38=require("react");var import_core71=require("@mantine/core"),import_react37=require("react");var import_jsx_runtime64=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath,getExtendedProps}=(0,import_react37.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react37.useState)(props.defaultValue),ref=(0,import_react37.useRef)(contactPoint);ref.current=contactPoint;let[systemElement,useElement,valueElement]=(0,import_react37.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]),[systemProps,useProps,valueProps]=(0,import_react37.useMemo)(()=>["system","use","value"].map(field=>getExtendedProps(path+"."+field)),[getExtendedProps,path]);function setContactPointWrapper(newValue){newValue&&Object.keys(newValue).length===0&&(newValue=void 0),setContactPoint(newValue),props.onChange&&props.onChange(newValue)}function setSystem(system){let newValue={...ref.current,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...ref.current,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...ref.current,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime64.jsxs)(import_core71.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime64.jsx)(import_core71.NativeSelect,{disabled:props.disabled||systemProps?.readonly,"data-testid":"system",defaultValue:contactPoint?.system,required:(systemElement?.min??0)>0,onChange:e=>setSystem(e.currentTarget.value),data:["","email","phone","fax","pager","sms","other"],error:getErrorsForInput(outcome,errorPath+".system")}),(0,import_jsx_runtime64.jsx)(import_core71.NativeSelect,{disabled:props.disabled||useProps?.readonly,"data-testid":"use",defaultValue:contactPoint?.use,required:(useElement?.min??0)>0,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","mobile"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",defaultValue:contactPoint?.value,required:(valueElement?.min??0)>0,onChange:e=>setValue(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".value")})]})}var import_jsx_runtime65=require("react/jsx-runtime");function ContactDetailInput(props){let[contactDetail,setContactDetail]=(0,import_react38.useState)(props.defaultValue),ref=(0,import_react38.useRef)(contactDetail);ref.current=contactDetail;let{getExtendedProps}=(0,import_react38.useContext)(ElementsContext),[nameProps,telecomProps]=(0,import_react38.useMemo)(()=>["name","telecom"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setContactDetailWrapper(newValue){setContactDetail(newValue),props.onChange&&props.onChange(newValue)}function setName(name){let newValue={...ref.current,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...ref.current,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime65.jsxs)(import_core72.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)(import_core72.TextInput,{disabled:props.disabled||nameProps?.readonly,"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactDetail?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime65.jsx)(ContactPointInput,{disabled:props.disabled||telecomProps?.readonly,name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactDetail?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core74=require("@mantine/core");var import_core73=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core73.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core73.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime66=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime66.jsx)(import_core74.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props["data-testid"]??props.name,placeholder:props.placeholder,required:props.required,disabled:props.disabled,type:getInputType(),step:1,defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core75=require("@medplum/core"),import_react_hooks23=require("@medplum/react-hooks"),import_react39=require("react");var import_jsx_runtime67=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=(0,import_react_hooks23.useMedplum)(),profileUrl=(0,import_react39.useMemo)(()=>{if((0,import_core75.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react39.useState)(profileUrl!==void 0);return(0,import_react39.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>setLoadingProfile(!1)).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core75.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime67.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime67.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core76=require("@mantine/core"),import_react40=require("react");var import_jsx_runtime68=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react40.useState)(props.defaultValue),{getExtendedProps}=(0,import_react40.useContext)(ElementsContext),[useProps,prefixProps,givenProps,familyProps,suffixProps]=(0,import_react40.useMemo)(()=>["use","prefix","given","family","suffix"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...value,use:use||void 0})}function setPrefix(prefix){setValueWrapper({...value,prefix:prefix?prefix.split(" "):void 0})}function setGiven(given){setValueWrapper({...value,given:given?given.split(" "):void 0})}function setFamily(family){setValueWrapper({...value,family:family||void 0})}function setSuffix(suffix){setValueWrapper({...value,suffix:suffix?suffix.split(" "):void 0})}let errorPath=props.valuePath??path;return(0,import_jsx_runtime68.jsxs)(import_core76.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime68.jsx)(import_core76.NativeSelect,{disabled:props.disabled||useProps?.readonly,defaultValue:value?.use,name:props.name+"-use","data-testid":"use",onChange:e=>setUse(e.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime68.jsx)(import_core76.TextInput,{disabled:props.disabled||prefixProps?.readonly,placeholder:"Prefix",name:props.name+"-prefix",defaultValue:value?.prefix?.join(" "),onChange:e=>setPrefix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".prefix")}),(0,import_jsx_runtime68.jsx)(import_core76.TextInput,{disabled:props.disabled||givenProps?.readonly,placeholder:"Given",name:props.name+"-given",defaultValue:value?.given?.join(" "),onChange:e=>setGiven(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".given")}),(0,import_jsx_runtime68.jsx)(import_core76.TextInput,{disabled:props.disabled||familyProps?.readonly,name:props.name+"-family",placeholder:"Family",defaultValue:value?.family,onChange:e=>setFamily(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".family")}),(0,import_jsx_runtime68.jsx)(import_core76.TextInput,{disabled:props.disabled||suffixProps?.readonly,placeholder:"Suffix",name:props.name+"-suffix",defaultValue:value?.suffix?.join(" "),onChange:e=>setSuffix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".suffix")})]})}var import_core77=require("@mantine/core"),import_react41=require("react");var import_jsx_runtime69=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react41.useState)(props.defaultValue),{elementsByPath,getExtendedProps}=(0,import_react41.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react41.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]),[systemProps,valueProps]=(0,import_react41.useMemo)(()=>["system","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let errorPath=props.valuePath??props.path;return(0,import_jsx_runtime69.jsxs)(import_core77.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime69.jsx)(import_core77.TextInput,{disabled:props.disabled||systemProps?.readonly,placeholder:"System",required:(systemElement?.min??0)>0,defaultValue:value?.system,onChange:e=>setValueWrapper({...value,system:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".system")}),(0,import_jsx_runtime69.jsx)(import_core77.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",required:(valueElement?.min??0)>0,defaultValue:value?.value,onChange:e=>setValueWrapper({...value,value:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".value")})]})}var import_core78=require("@mantine/core");var import_react42=require("react");var import_jsx_runtime70=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react42.useState)(props.defaultValue),{getExtendedProps}=(0,import_react42.useContext)(ElementsContext),[currencyProps,valueProps]=(0,import_react42.useMemo)(()=>["currency","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),setValueWrapper=(0,import_react42.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react42.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react42.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime70.jsx)(import_core78.NativeSelect,{disabled:props.disabled||currencyProps?.readonly,defaultValue:value?.currency,data,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:handleCurrencyChange});return(0,import_jsx_runtime70.jsx)(import_core78.TextInput,{disabled:props.disabled||valueProps?.readonly,type:"number",name:props.name,label:props.label,placeholder:props.placeholder??"Value",defaultValue:value?.value?.toString()??"USD",leftSection:(0,import_jsx_runtime70.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core79=require("@mantine/core"),import_react43=require("react");var import_jsx_runtime71=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react43.useState)(props.defaultValue),{getExtendedProps}=(0,import_react43.useContext)(ElementsContext),[startProps,endProps]=(0,import_react43.useMemo)(()=>["start","end"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime71.jsxs)(import_core79.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime71.jsx)(DateTimeInput,{disabled:props.disabled||startProps?.readonly,name:props.name+".start",placeholder:"Start",defaultValue:value?.start,onChange:newValue=>setValueWrapper({...value,start:newValue})}),(0,import_jsx_runtime71.jsx)(DateTimeInput,{disabled:props.disabled||endProps?.readonly,name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core80=require("@mantine/core"),import_react44=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react44.useState)(props.defaultValue),{getExtendedProps}=(0,import_react44.useContext)(ElementsContext),[comparatorProps,valueProps,unitProps]=(0,import_react44.useMemo)(()=>["comparator","value","unit"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime72.jsxs)(import_core80.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime72.jsx)(import_core80.NativeSelect,{disabled:props.disabled||comparatorProps?.readonly,style:{width:80},"data-testid":props.name+"-comparator",defaultValue:value?.comparator,data:["","<","<=",">=",">"],onChange:e=>setValueWrapper({...value,comparator:e.currentTarget.value})}),(0,import_jsx_runtime72.jsx)(import_core80.TextInput,{disabled:props.disabled||valueProps?.readonly,id:props.name,name:props.name,required:props.required,"data-autofocus":props.autoFocus,"data-testid":props.name+"-value",type:"number",placeholder:"Value",defaultValue:value?.value,autoFocus:props.autoFocus,step:"any",onWheel:e=>{props.disableWheel&&e.currentTarget.blur()},onChange:e=>{setValueWrapper({...value,value:tryParseNumber(e.currentTarget.value)})}}),(0,import_jsx_runtime72.jsx)(import_core80.TextInput,{disabled:props.disabled||unitProps?.readonly,placeholder:"Unit","data-testid":props.name+"-unit",defaultValue:value?.unit,onChange:e=>setValueWrapper({...value,unit:e.currentTarget.value})})]})}function tryParseNumber(str){if(str)return parseFloat(str)}var import_core81=require("@mantine/core"),import_react45=require("react");var import_jsx_runtime73=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react45.useState)(props.defaultValue),{getExtendedProps}=(0,import_react45.useContext)(ElementsContext),[lowProps,highProps]=(0,import_react45.useMemo)(()=>["low","high"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime73.jsxs)(import_core81.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime73.jsx)(QuantityInput,{path:props.path+".low",disabled:props.disabled||lowProps?.readonly,name:props.name+"-low",defaultValue:value?.low,onChange:v=>setValueWrapper({...value,low:v})}),(0,import_jsx_runtime73.jsx)(QuantityInput,{path:props.path+".high",disabled:props.disabled||highProps?.readonly,name:props.name+"-high",defaultValue:value?.high,onChange:v=>setValueWrapper({...value,high:v})})]})}var import_core82=require("@mantine/core"),import_react46=require("react");var import_jsx_runtime74=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react46.useState)(props.defaultValue),{getExtendedProps}=(0,import_react46.useContext)(ElementsContext),[numeratorProps,denominatorProps]=(0,import_react46.useMemo)(()=>["numerator","denominator"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime74.jsxs)(import_core82.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime74.jsx)(QuantityInput,{path:props.path+".numerator",disabled:props.disabled||numeratorProps?.readonly,name:props.name+"-numerator",defaultValue:value?.numerator,onChange:v=>setValueWrapper({...value,numerator:v})}),(0,import_jsx_runtime74.jsx)(QuantityInput,{path:props.path+".denominator",disabled:props.disabled||denominatorProps?.readonly,name:props.name+"-denominator",defaultValue:value?.denominator,onChange:v=>setValueWrapper({...value,denominator:v})})]})}var import_core85=require("@mantine/core"),import_core86=require("@medplum/core"),import_react_hooks25=require("@medplum/react-hooks"),import_react48=require("react");var import_core83=require("@mantine/core"),import_core84=require("@medplum/core"),import_react_hooks24=require("@medplum/react-hooks"),import_react47=require("react");var import_jsx_runtime75=require("react/jsx-runtime"),SEARCH_CODES={Device:"device-name",Observation:"code",Subscription:"criteria",User:"email:contains"},NAME_RESOURCE_TYPES=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","CareTeam","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","Group","HealthcareService","ImplementationGuide","InsurancePlan","Library","Location","Measure","MedicinalProduct","MessageDefinition","NamingSystem","OperationDefinition","Organization","Patient","Person","PlanDefinition","Practitioner","Project","Questionnaire","RelatedPerson","ResearchDefinition","ResearchElementDefinition","ResearchStudy","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function toOption3(resource){return{value:(0,import_core84.getReferenceString)(resource)??"",label:(0,import_core84.getDisplayString)(resource),resource}}function ResourceInput(props){let medplum=(0,import_react_hooks24.useMedplum)(),{resourceType,searchCriteria}=props,[outcome,setOutcome]=(0,import_react47.useState)(),defaultValue2=(0,import_react_hooks24.useResource)(props.defaultValue,setOutcome),ItemComponent3=props.itemComponent??DefaultItemComponent2,onChange=props.onChange,loadValues=(0,import_react47.useCallback)(async(input,signal)=>{let searchCode=getSearchParamForResourceType(resourceType),searchParams=new URLSearchParams({[searchCode]:input??"",_count:"10",...searchCriteria});return await medplum.searchResources(resourceType,searchParams,{signal})},[medplum,resourceType,searchCriteria]),handleChange=(0,import_react47.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_core84.isPopulated)(props.defaultValue)&&!outcome&&!defaultValue2?null:(0,import_jsx_runtime75.jsx)(AsyncAutocomplete,{disabled:props.disabled,name:props.name,label:props.label,error:props.error,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultValue2,placeholder:props.placeholder,maxValues:1,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var DefaultItemComponent2=(0,import_react47.forwardRef)(({label,resource,active:_active,...others},ref)=>(0,import_jsx_runtime75.jsx)("div",{ref,...others,children:(0,import_jsx_runtime75.jsxs)(import_core83.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime75.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core83.Text,{children:label}),(0,import_jsx_runtime75.jsx)(import_core83.Text,{size:"xs",c:"dimmed",children:resource.birthDate||resource.id})]})]})}));function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var import_jsx_runtime76=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=(0,import_react_hooks25.useMedplum)(),[value,setValue]=(0,import_react48.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react48.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react48.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react48.useRef)(new import_core86.LRUCache),searchCriteria=(0,import_react48.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react48.useEffect)(()=>{let anyToFetch=!1,newTargetTypePromises=targetTypes?.map(tt=>{if(!shouldFetchResourceType(tt))return Promise.resolve(tt);anyToFetch=!0;let cacheKey=tt.value,cached=promiseCache.current.get(cacheKey);if(cached)return cached;let promise=fetchResourceTypeOfProfile(medplum,tt.value).then(profile=>{let newTargetType={...tt};return profile?(0,import_core86.isPopulated)(profile.type)?(newTargetType.resourceType=profile.type,newTargetType.name=profile.name,newTargetType.title=profile.title):(console.error(`StructureDefinition.type missing for ${tt.value}`),newTargetType.error="StructureDefinition.type missing"):(console.error(`StructureDefinition not found for ${tt.value}`),newTargetType.error="StructureDefinition not found"),newTargetType}).catch(reason=>(console.error(reason),{...tt,error:reason})),readablePromise=new import_core86.ReadablePromise(promise);return promiseCache.current.set(cacheKey,readablePromise),readablePromise});!newTargetTypePromises||!anyToFetch||Promise.all(newTargetTypePromises).then(newTargetTypes=>{if(setTargetTypes(newTargetTypes),!targetType)return;let index=newTargetTypes.findIndex(tt=>tt.value===targetType.value||tt.resourceType===targetType.resourceType);if(index===-1){console.debug(`defaultValue had unexpected resourceType: ${targetType.resourceType}`);return}setTargetType(newTargetTypes[index])}).catch(console.error)},[medplum,targetType,targetTypes]);let setValueHelper=(0,import_react48.useCallback)(item=>{let newValue=item?(0,import_core86.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react48.useMemo)(()=>targetTypes?targetTypes.map(tt=>({value:tt.value,label:tt.type==="profile"?tt.title??tt.name??tt.resourceType??tt.value:tt.value})):[],[targetTypes]);return(0,import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment,{children:[props.name&&(0,import_jsx_runtime76.jsx)("input",{type:"hidden",name:props.name,value:value?.reference??""}),(0,import_jsx_runtime76.jsxs)(import_core85.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime76.jsx)(import_core85.NativeSelect,{name:props.name+"-resourceType",disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:targetType?.resourceType,autoFocus:props.autoFocus,onChange:e=>{let newValue=e.currentTarget.value,newTargetType=targetTypes.find(tt=>tt.value===newValue);setTargetType(newTargetType)},data:typeSelectOptions}),!targetTypes&&(0,import_jsx_runtime76.jsx)(ResourceTypeInput,{disabled:props.disabled,autoFocus:props.autoFocus,testId:"reference-input-resource-type-input",defaultValue:targetType?.resourceType,onChange:newResourceType=>{setTargetType(newResourceType?{type:"resourceType",value:newResourceType,resourceType:newResourceType}:void 0)},name:props.name+"-resourceType",placeholder:"Resource Type"}),(0,import_jsx_runtime76.jsx)(ResourceInput,{resourceType:targetType?.resourceType,name:props.name+"-id",required:props.required,placeholder:props.placeholder,defaultValue:value,searchCriteria,onChange:setValueHelper,disabled:props.disabled})]})]})}function createTargetTypes(resourceTypesAndProfileUrls){if(!resourceTypesAndProfileUrls||resourceTypesAndProfileUrls.length===0||resourceTypesAndProfileUrls.length===1&&resourceTypesAndProfileUrls[0]==="Resource")return;let results=[];for(let value of resourceTypesAndProfileUrls)value.includes("/")?results.push({type:"profile",value}):results.push({type:"resourceType",value,resourceType:value});return results}function getInitialTargetType(defaultValue2,targetTypes){let defaultValueResourceType=defaultValue2?.reference?.split("/")[0];if(defaultValueResourceType){let targetType=targetTypes?.find(tt=>tt.resourceType===defaultValueResourceType);return targetType||{type:"resourceType",value:defaultValueResourceType,resourceType:defaultValueResourceType}}if(targetTypes&&targetTypes.length>0)return targetTypes[0]}async function fetchResourceTypeOfProfile(medplum,profileUrl){let profile=(0,import_core86.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
65
+ `)}function getIssuesForExpression(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))}var ARRAY_INDEX_REGEX=/\[\d+\]/;function isExpressionMatch(expr1,expr2){let isExpr1Indexed=typeof expr1=="string"&&ARRAY_INDEX_REGEX.test(expr1),isExpr2Indexed=typeof expr2=="string"&&ARRAY_INDEX_REGEX.test(expr2);if(isExpr1Indexed!==isExpr2Indexed&&(expr1=expr1?.replace(ARRAY_INDEX_REGEX,""),expr2=expr2?.replace(ARRAY_INDEX_REGEX,"")),expr1===expr2)return!0;if(!expr1||!expr2)return!1;let dot1=expr1.indexOf(".");if(dot1>=0&&expr1.substring(dot1+1)===expr2)return!0;let dot2=expr2.indexOf(".");return dot2>=0&&expr2.substring(dot2+1)===expr1}var import_jsx_runtime32=require("react/jsx-runtime");function NewProjectForm(props){let medplum=(0,import_react_hooks13.useMedplum)(),[outcome,setOutcome]=(0,import_react21.useState)();return(0,import_jsx_runtime32.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core39.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime32.jsxs)(import_core38.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime32.jsx)(Logo,{size:32}),(0,import_jsx_runtime32.jsx)(import_core38.Title,{children:"Create project"})]}),(0,import_jsx_runtime32.jsxs)(import_core38.Stack,{gap:"xl",children:[(0,import_jsx_runtime32.jsx)(import_core38.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"projectName")}),(0,import_jsx_runtime32.jsxs)(import_core38.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime32.jsx)(import_core38.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime32.jsx)(import_core38.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime32.jsx)(import_core38.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime32.jsx)(SubmitButton,{children:"Create project"})})]})}var import_core42=require("@mantine/core"),import_core43=require("@medplum/core"),import_react_hooks15=require("@medplum/react-hooks"),import_react23=require("react");var import_react_hooks14=require("@medplum/react-hooks"),import_react22=require("react");function createScriptTag(src,onload){let head=document.getElementsByTagName("head")[0],script=document.createElement("script");script.async=!0,script.src=src,script.onload=onload??null,head.appendChild(script)}var import_jsx_runtime33=require("react/jsx-runtime");function GoogleButton(props){let medplum=(0,import_react_hooks14.useMedplum)(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react22.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react22.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react22.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react22.useState)(!1);return(0,import_react22.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initialized||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),setInitialized(!0)),parentRef.current&&!buttonRendered&&(google.accounts.id.renderButton(parentRef.current,{}),setButtonRendered(!0))},[medplum,googleClientId,initialized,scriptLoaded,parentRef,buttonRendered,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime33.jsx)("div",{ref:parentRef}):null}function getGoogleClientId(clientId){if(clientId)return clientId;if(typeof window<"u"){let origin=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}}var import_core40=require("@mantine/core"),import_core41=require("@medplum/core");var import_jsx_runtime34=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime34.jsx)(import_core40.Alert,{icon:(0,import_jsx_runtime34.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime34.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core41.operationOutcomeIssueToString)(issue)},issue.details?.text))})}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime35=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=(0,import_react_hooks15.useMedplum)(),[outcome,setOutcome]=(0,import_react23.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react23.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime35.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core43.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime35.jsx)(import_core42.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime35.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment,{children:[(0,import_jsx_runtime35.jsx)(import_core42.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime35.jsx)(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,projectId:props.projectId,createUser:!0}))}catch(err){setOutcome((0,import_core43.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime35.jsx)(import_core42.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime35.jsxs)(import_core42.Stack,{gap:"xl",children:[(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime35.jsx)(import_core42.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime35.jsx)(import_core42.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime35.jsxs)(import_core42.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime35.jsxs)(import_core42.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime35.jsx)(import_core42.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime35.jsxs)(import_core42.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime35.jsx)(import_core42.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime35.jsx)(SubmitButton,{children:"Create account"})]})]})}var import_jsx_runtime36=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=(0,import_react_hooks16.useMedplum)(),[login,setLogin]=(0,import_react24.useState)(),[outcome,setOutcome]=(0,import_react24.useState)();(0,import_react24.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core44.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code?medplum.processCode(response.code).then(()=>onSuccess()).catch(console.log):response.login&&setLogin(response.login)}return(0,import_jsx_runtime36.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime36.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime36.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime36.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications4=require("@mantine/notifications"),import_core52=require("@medplum/core"),import_react_hooks20=require("@medplum/react-hooks"),import_react28=require("react");var import_core45=require("@mantine/core"),import_core46=require("@medplum/core"),import_react_hooks17=require("@medplum/react-hooks"),import_react25=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react25.useState)();return email?(0,import_jsx_runtime37.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime37.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react25.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react25.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),window.location.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react25.useCallback)(async formData=>{let authMethod=await medplum.post("auth/method",{email:formData.email});await isExternalAuth(authMethod)||setEmail(formData.email)},[medplum,isExternalAuth,setEmail]),handleGoogleCredential=(0,import_react25.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core46.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime37.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime37.jsx)(import_core45.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment,{children:[(0,import_jsx_runtime37.jsx)(import_core45.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime37.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(import_core45.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(import_core45.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime37.jsxs)(import_core45.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime37.jsx)("div",{children:onRegister&&(0,import_jsx_runtime37.jsx)(import_core45.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onRegister,size:"xs","data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime37.jsx)(SubmitButton,{children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),[outcome,setOutcome]=(0,import_react25.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react25.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core46.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime37.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime37.jsx)(import_core45.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime37.jsx)(import_core45.Stack,{gap:"xl",children:(0,import_jsx_runtime37.jsx)(import_core45.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime37.jsxs)(import_core45.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime37.jsx)(import_core45.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime37.jsx)(import_core45.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime37.jsx)(SubmitButton,{children:"Sign in"})]})]})}var import_core47=require("@mantine/core"),import_core48=require("@medplum/core"),import_react_hooks18=require("@medplum/react-hooks"),import_react26=require("react");var import_jsx_runtime38=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=(0,import_react_hooks18.useMedplum)(),combobox=(0,import_core47.useCombobox)(),[search,setSearch]=(0,import_react26.useState)(""),[outcome,setOutcome]=(0,import_react26.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core48.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime38.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime38.jsxs)(import_core47.Stack,{children:[(0,import_jsx_runtime38.jsxs)(import_core47.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime38.jsx)(Logo,{size:32}),(0,import_jsx_runtime38.jsx)(import_core47.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime38.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime38.jsxs)(import_core47.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime38.jsx)(import_core47.Combobox.EventsTarget,{children:(0,import_jsx_runtime38.jsx)(import_core47.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime38.jsx)("div",{children:(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime38.jsx)(import_core47.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime38.jsxs)(import_core47.Group,{children:[(0,import_jsx_runtime38.jsx)(import_core47.Avatar,{radius:"xl"}),(0,import_jsx_runtime38.jsxs)("div",{children:[(0,import_jsx_runtime38.jsx)(import_core47.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime38.jsx)(import_core47.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core49=require("@mantine/core"),import_react_hooks19=require("@medplum/react-hooks"),import_jsx_runtime39=require("react/jsx-runtime");var import_jsx_runtime40=require("react/jsx-runtime"),openConditionScope=/^patient\/Condition\.(?:\*|c?r?u?d?s?)$/,encounterDiagnosis="?category=http://terminology.hl7.org/CodeSystem/condition-category|encounter-diagnosis",problemListItem="?category=http://terminology.hl7.org/CodeSystem/condition-category|problem-list-item",healthConcern="?category=http://hl7.org/fhir/us/core/CodeSystem/condition-category|health-concern",openObservationScope=/^patient\/Observation\.(?:\*|c?r?u?d?s?)$/,clinicalTest="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-observation-category|clinical-test",laboratory="?category=http://terminology.hl7.org/CodeSystem/observation-category|laboratory",socialHistory="?category=http://terminology.hl7.org/CodeSystem/observation-category|social-history",sdoh="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-category|sdoh",survey="?category=http://terminology.hl7.org/CodeSystem/observation-category|survey",vitalSigns="?category=http://terminology.hl7.org/CodeSystem/observation-category|vital-signs";function ChooseScopeForm(props){let medplum=(0,import_react_hooks19.useMedplum)();return(0,import_jsx_runtime40.jsx)(Form,{onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:(0,import_jsx_runtime40.jsxs)(import_core49.Stack,{children:[(0,import_jsx_runtime40.jsxs)(import_core49.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime40.jsx)(Logo,{size:32}),(0,import_jsx_runtime40.jsx)(import_core49.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime40.jsx)(import_core49.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>{let additionalScopes;return openConditionScope.test(scopeName)?additionalScopes=[scopeName+encounterDiagnosis,scopeName+problemListItem,scopeName+healthConcern]:openObservationScope.test(scopeName)&&(additionalScopes=[scopeName+clinicalTest,scopeName+laboratory,scopeName+socialHistory,scopeName+sdoh,scopeName+survey,scopeName+vitalSigns]),(0,import_jsx_runtime40.jsxs)(import_jsx_runtime39.Fragment,{children:[(0,import_jsx_runtime40.jsx)(import_core49.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName),additionalScopes?.map(scope=>(0,import_jsx_runtime40.jsx)(import_core49.Checkbox,{id:scope,name:scope,label:scope},scope))]},scopeName+"_group")})}),(0,import_jsx_runtime40.jsx)(import_core49.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime40.jsx)(SubmitButton,{children:"Set scope"})})]})})}var import_core50=require("@mantine/core"),import_core51=require("@medplum/core");var import_react27=require("react");var import_jsx_runtime41=require("react/jsx-runtime");function MfaForm(props){let[errorMessage,setErrorMessage]=(0,import_react27.useState)();return(0,import_jsx_runtime41.jsx)(Form,{onSubmit:formData=>{setErrorMessage(void 0),props.onSubmit(formData).catch(err=>setErrorMessage((0,import_core51.normalizeErrorString)(err)))},children:(0,import_jsx_runtime41.jsxs)(import_core50.Stack,{children:[(0,import_jsx_runtime41.jsxs)(import_core50.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime41.jsx)(Logo,{size:32}),(0,import_jsx_runtime41.jsx)(import_core50.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime41.jsx)(import_core50.Alert,{icon:(0,import_jsx_runtime41.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime41.jsx)(import_core50.Stack,{children:(0,import_jsx_runtime41.jsx)(import_core50.TextInput,{name:"token",label:"MFA code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime41.jsx)(import_core50.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime41.jsx)(SubmitButton,{children:"Submit code"})})]})})}var import_jsx_runtime42=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),[login,setLogin]=(0,import_react28.useState)(),loginRequested=(0,import_react28.useRef)(!1),[mfaRequired,setAuthenticatorRequired]=(0,import_react28.useState)(!1),[memberships,setMemberships]=(0,import_react28.useState)(),handleCode=(0,import_react28.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core52.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react28.useCallback)(response=>{setAuthenticatorRequired(!!response.mfaRequired),response.login&&setLogin(response.login),response.memberships&&setMemberships(response.memberships),response.code&&(chooseScopes?setMemberships(void 0):handleCode(response.code))},[chooseScopes,handleCode]),handleScopeResponse=(0,import_react28.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react28.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core52.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime42.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime42.jsx)(MfaForm,{onSubmit:async fields=>{let res=await medplum.post("auth/mfa/verify",{login,token:fields.token});handleAuthResponse(res)}}):memberships?(0,import_jsx_runtime42.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime42.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime42.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime42.jsx)("div",{children:"Success"}):(0,import_jsx_runtime42.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core67=require("@medplum/core"),import_react32=require("react");var import_core65=require("@mantine/core"),import_core66=require("@medplum/core");var import_core53=require("@medplum/core"),import_jsx_runtime43=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment,{children:(0,import_core53.formatCodeableConcept)(props.value)})}var import_core54=require("@medplum/core"),import_jsx_runtime44=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment,{children:(0,import_core54.formatCoding)(props.value)})}var import_jsx_runtime45=require("react/jsx-runtime");function ContactPointDisplay(props){let contactPoint=props.value;if(!contactPoint)return null;let builder=[];return contactPoint.value&&builder.push(contactPoint.value),(contactPoint.use||contactPoint.system)&&(builder.push(" ["),contactPoint.use&&builder.push(contactPoint.use),contactPoint.use&&contactPoint.system&&builder.push(" "),contactPoint.system&&builder.push(contactPoint.system),builder.push("]")),(0,import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime46=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime46.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_core56=require("@medplum/core"),import_react_hooks21=require("@medplum/react-hooks"),import_react29=require("react");var import_core55=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core55.getTypedPropertyValue)(context,path,{profileUrl});return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}function getValueAndTypeFromElement(typedValue,path,element){let typedResult=(0,import_core55.getTypedPropertyValueWithSchema)(typedValue,path,element);return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}var import_jsx_runtime47=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=(0,import_react_hooks21.useMedplum)(),ctx=(0,import_react29.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react29.useState)((0,import_core56.getDataType)("Extension")),profileUrl=(0,import_react29.useMemo)(()=>{if((0,import_core56.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react29.useState)(profileUrl!==void 0);if((0,import_react29.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core56.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core56.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime47.jsx)("div",{children:"Loading..."});if(typeSchema.elements["value[x]"]?.max!==0){let[propertyValue,propertyType]=getValueAndType({type:"Extension",value:props.value},"value[x]",profileUrl??ctx.profileUrl);return(0,import_jsx_runtime47.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime47.jsx)(BackboneElementDisplay,{path:props.path,value:{type:typeSchema.type,value:props.value},compact:props.compact,ignoreMissingValues:props.ignoreMissingValues,link:props.link,profileUrl})}var import_jsx_runtime48=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime48.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core57=require("@medplum/core"),import_jsx_runtime49=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime49.jsx)(import_jsx_runtime49.Fragment,{children:(0,import_core57.formatMoney)(props.value)})}var import_core58=require("@medplum/core"),import_jsx_runtime50=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime50.jsx)(import_jsx_runtime50.Fragment,{children:(0,import_core58.formatQuantity)(props.value)})}var import_core59=require("@medplum/core"),import_jsx_runtime51=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime51.jsx)(import_jsx_runtime51.Fragment,{children:(0,import_core59.formatRange)(props.value)})}var import_jsx_runtime52=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment,{children:[(0,import_jsx_runtime52.jsx)(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",(0,import_jsx_runtime52.jsx)(QuantityDisplay,{value:value.denominator})]}):null}var import_core60=require("@medplum/core");var import_jsx_runtime53=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core60.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime53.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment,{children:displayString})}var import_core63=require("@mantine/core"),import_core64=require("@medplum/core"),import_react_hooks22=require("@medplum/react-hooks"),import_react31=require("react");var import_core61=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core61.isPopulated)(slicing?.slices))return[values];let slicedValues=new Array(slices.length+1);for(let i=0;i<slicedValues.length;i++)slicedValues[i]=[];for(let value of values){let sliceName=(0,import_core61.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}return slicedValues}async function prepareSlices({medplum,property}){return new Promise((resolve,reject)=>{if(!property.slicing){resolve([]);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!(0,import_core61.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core61.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl&&promises.push(medplum.requestProfileSchema(profileUrl))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core61.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core62=require("@medplum/core"),import_react30=require("react");var import_jsx_runtime54=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime54.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime55=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react30.useContext)(ElementsContext),contextValue=(0,import_react30.useMemo)(()=>{if((0,import_core62.isPopulated)(sliceElements))return(0,import_core62.buildElementsContext)({parentContext,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentContext,props.path,slice.typeSchema?.url,sliceElements]);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime55.jsx)("div",{children:(0,import_jsx_runtime55.jsx)(ResourcePropertyDisplay,{property,path:props.path,arrayElement:!0,elementDefinitionType:slice.type[0],propertyType:slice.type[0].code,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${props.value.length}`))}))}var import_jsx_runtime56=require("react/jsx-runtime"),MAX_ARRAY_SIZE=50;function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=(0,import_react_hooks22.useMedplum)(),values=(0,import_react31.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react31.useState)(!0),[slices,setSlices]=(0,import_react31.useState)([]),[slicedValues,setSlicedValues]=(0,import_react31.useState)(()=>[values]),[valuesLength,setValuesLength]=(0,import_react31.useState)(0),ctx=(0,import_react31.useContext)(ElementsContext);if((0,import_react31.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setValuesLength(values.length),setSlices(slices2);let limitedValues=values.slice(0,MAX_ARRAY_SIZE),slicedValues2=assignValuesIntoSlices(limitedValues,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime56.jsx)("div",{children:"Loading..."});let nonSliceContent;if(property.type[0]?.code!=="Extension"){let nonSliceValues=slicedValues[slices.length],nonSliceElements=nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime56.jsx)("div",{children:(0,import_jsx_runtime56.jsx)(ResourcePropertyDisplay,{path:props.path,arrayElement:!0,property,propertyType,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${nonSliceValues.length}`));if(props.includeDescriptionListEntry){if(!(0,import_core64.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime56.jsx)(DescriptionListEntry,{term:(0,import_core64.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime56.jsx)(import_jsx_runtime56.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime56.jsx)(SliceDisplay,{path:props.path,slice,property,value:slicedValues[sliceIndex],ignoreMissingValues:props.ignoreMissingValues,link:props.link},slice.name);return props.includeDescriptionListEntry&&(sliceDisplay=(0,import_jsx_runtime56.jsx)(DescriptionListEntry,{term:(0,import_core64.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent,valuesLength>MAX_ARRAY_SIZE&&(0,import_jsx_runtime56.jsx)(import_core63.Group,{justify:"right",children:(0,import_jsx_runtime56.jsxs)(import_core63.Text,{children:["... ",valuesLength," total values"]})})]})}var import_jsx_runtime57=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime57.jsxs)(import_core65.Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!(0,import_core66.isEmpty)(value)&&(0,import_jsx_runtime57.jsx)(import_core65.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime57.jsx)(import_core65.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime57.jsx)(import_core65.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime57.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime57.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core66.PropertyType.Attachment?(0,import_jsx_runtime57.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime57.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core66.PropertyType.boolean:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core66.PropertyType.SystemString:case import_core66.PropertyType.string:return(0,import_jsx_runtime57.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core66.PropertyType.code:case import_core66.PropertyType.date:case import_core66.PropertyType.decimal:case import_core66.PropertyType.id:case import_core66.PropertyType.integer:case import_core66.PropertyType.positiveInt:case import_core66.PropertyType.unsignedInt:case import_core66.PropertyType.uri:case import_core66.PropertyType.url:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value});case import_core66.PropertyType.canonical:return(0,import_jsx_runtime57.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core66.PropertyType.dateTime:case import_core66.PropertyType.instant:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core66.formatDateTime)(value)});case import_core66.PropertyType.markdown:return(0,import_jsx_runtime57.jsx)("pre",{children:value});case import_core66.PropertyType.Address:return(0,import_jsx_runtime57.jsx)(AddressDisplay,{value});case import_core66.PropertyType.Annotation:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:value?.text});case import_core66.PropertyType.Attachment:return(0,import_jsx_runtime57.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core66.PropertyType.CodeableConcept:return(0,import_jsx_runtime57.jsx)(CodeableConceptDisplay,{value});case import_core66.PropertyType.Coding:return(0,import_jsx_runtime57.jsx)(CodingDisplay,{value});case import_core66.PropertyType.ContactDetail:return(0,import_jsx_runtime57.jsx)(ContactDetailDisplay,{value});case import_core66.PropertyType.ContactPoint:return(0,import_jsx_runtime57.jsx)(ContactPointDisplay,{value});case import_core66.PropertyType.HumanName:return(0,import_jsx_runtime57.jsx)(HumanNameDisplay,{value});case import_core66.PropertyType.Identifier:return(0,import_jsx_runtime57.jsx)(IdentifierDisplay,{value});case import_core66.PropertyType.Money:return(0,import_jsx_runtime57.jsx)(MoneyDisplay,{value});case import_core66.PropertyType.Period:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core66.formatPeriod)(value)});case import_core66.PropertyType.Quantity:case import_core66.PropertyType.Duration:return(0,import_jsx_runtime57.jsx)(QuantityDisplay,{value});case import_core66.PropertyType.Range:return(0,import_jsx_runtime57.jsx)(RangeDisplay,{value});case import_core66.PropertyType.Ratio:return(0,import_jsx_runtime57.jsx)(RatioDisplay,{value});case import_core66.PropertyType.Reference:return(0,import_jsx_runtime57.jsx)(ReferenceDisplay,{value,link:props.link});case import_core66.PropertyType.Timing:return(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:(0,import_core66.formatTiming)(value)});case import_core66.PropertyType.Dosage:case import_core66.PropertyType.UsageContext:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core66.PropertyType.Extension:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime57.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}var import_jsx_runtime58=require("react/jsx-runtime"),EXTENSION_KEYS2=["extension","modifierExtension"],IGNORED_PROPERTIES2=DEFAULT_IGNORED_PROPERTIES.filter(prop=>!EXTENSION_KEYS2.includes(prop));function BackboneElementDisplay(props){let typedValue=props.value,{value,type:typeName}=typedValue,parentElementsContext=(0,import_react32.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react32.useMemo)(()=>(0,import_core67.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react32.useMemo)(()=>{if(typeSchema)return(0,import_core67.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if((0,import_core67.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime58.jsxs)("div",{children:[typeName,"\xA0not implemented"]});if(typeof value=="object"&&"name"in value&&Object.keys(value).length===1&&typeof value.name=="string")return(0,import_jsx_runtime58.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime58.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core67.isEmpty)(property.slicing?.slices))return null;if(IGNORED_PROPERTIES2.includes(key))return null;if(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&property.path.split(".").length===2||key.includes("."))return null;let[propertyValue,propertyType]=getValueAndType(typedValue,key,elementsContext.profileUrl);if((props.ignoreMissingValues||property.max===0)&&(0,import_core67.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime58.jsx)(ResourcePropertyDisplay,{property,propertyType,path:props.path+"."+key,value:propertyValue,ignoreMissingValues:props.ignoreMissingValues,includeArrayDescriptionListEntry:isArrayProperty,link:props.link},key);return isArrayProperty?resourcePropertyDisplay:(0,import_jsx_runtime58.jsx)(DescriptionListEntry,{term:(0,import_core67.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core101=require("@medplum/core"),import_react55=require("react");var import_core99=require("@mantine/core"),import_core100=require("@medplum/core"),import_react54=require("react");var import_core69=require("@mantine/core"),import_react33=require("react");var FormSection_default={dimmed:"FormSection_dimmed",preserveBreaks:"FormSection_preserveBreaks"};var import_core68=require("@mantine/core"),import_jsx_runtime59=require("react/jsx-runtime"),READ_ONLY_TOOLTIP_TEXT="Read Only";function maybeWrapWithTooltip(tooltipText,children){return tooltipText?(0,import_jsx_runtime59.jsx)(import_core68.Tooltip.Floating,{label:tooltipText,children}):children}var import_jsx_runtime60=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react33.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime60.jsxs)(import_core69.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime60.jsx)("div",{children:props.children}),(0,import_jsx_runtime60.jsx)("div",{children:(0,import_jsx_runtime60.jsx)(import_core69.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:props?.readonly?FormSection_default.dimmed:void 0},description:props.description,withAsterisk:props.withAsterisk,children:null})})]}))}var import_core70=require("@mantine/core");var import_react34=require("react");var import_jsx_runtime61=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react34.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime61.jsx)(import_core70.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:clsx_default({[FormSection_default.dimmed]:props?.readonly},FormSection_default.preserveBreaks)},description:props.description,withAsterisk:props.withAsterisk,error:getErrorsForInput(props.outcome,props.errorExpression??props.htmlFor),"data-testid":props.testId,children:props.children}))}var import_core71=require("@medplum/core");function setPropertyValue(obj,key,propName,elementDefinition,value){let types=elementDefinition.type;if(types.length>1)for(let type of types){let compoundKey=key.replace("[x]",(0,import_core71.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return(0,import_core71.isEmpty)(value)?obj[propName]=void 0:obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core71.isEmpty)(profile.url)&&!(0,import_core71.isEmpty)(profile.name)}var import_core97=require("@mantine/core"),import_core98=require("@medplum/core"),import_react53=require("react");var import_react35=require("react");var import_jsx_runtime62=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react35.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime62.jsx)(ValueSetAutocomplete,{defaultValue:value&&codeableConceptToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeableConceptToValueSetElement(concept){return concept.coding?.map(c=>({system:c.system,code:c.code,display:c.display}))}function valueSetElementToCodeableConcept(elements){if(elements.length!==0)return{coding:elements.map(e=>({system:e.system,code:e.code,display:e.display}))}}var import_react36=require("react");var import_jsx_runtime63=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,response,...rest}=props,[value,setValue]=(0,import_react36.useState)(response?.answer?.[0]?.valueCoding??defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime63.jsx)(ValueSetAutocomplete,{defaultValue:value?codingToValueSetElement(value):void 0,maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core73=require("@mantine/core"),import_react38=require("react");var import_core72=require("@mantine/core"),import_react37=require("react");var import_jsx_runtime64=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath,getExtendedProps}=(0,import_react37.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react37.useState)(props.defaultValue),ref=(0,import_react37.useRef)(contactPoint);ref.current=contactPoint;let[systemElement,useElement,valueElement]=(0,import_react37.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]),[systemProps,useProps,valueProps]=(0,import_react37.useMemo)(()=>["system","use","value"].map(field=>getExtendedProps(path+"."+field)),[getExtendedProps,path]);function setContactPointWrapper(newValue){newValue&&Object.keys(newValue).length===0&&(newValue=void 0),setContactPoint(newValue),props.onChange&&props.onChange(newValue)}function setSystem(system){let newValue={...ref.current,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...ref.current,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...ref.current,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime64.jsxs)(import_core72.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime64.jsx)(import_core72.NativeSelect,{disabled:props.disabled||systemProps?.readonly,"data-testid":"system",defaultValue:contactPoint?.system,required:(systemElement?.min??0)>0,onChange:e=>setSystem(e.currentTarget.value),data:["","email","phone","fax","pager","sms","other"],error:getErrorsForInput(outcome,errorPath+".system")}),(0,import_jsx_runtime64.jsx)(import_core72.NativeSelect,{disabled:props.disabled||useProps?.readonly,"data-testid":"use",defaultValue:contactPoint?.use,required:(useElement?.min??0)>0,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","mobile"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime64.jsx)(import_core72.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",defaultValue:contactPoint?.value,required:(valueElement?.min??0)>0,onChange:e=>setValue(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".value")})]})}var import_jsx_runtime65=require("react/jsx-runtime");function ContactDetailInput(props){let[contactDetail,setContactDetail]=(0,import_react38.useState)(props.defaultValue),ref=(0,import_react38.useRef)(contactDetail);ref.current=contactDetail;let{getExtendedProps}=(0,import_react38.useContext)(ElementsContext),[nameProps,telecomProps]=(0,import_react38.useMemo)(()=>["name","telecom"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setContactDetailWrapper(newValue){setContactDetail(newValue),props.onChange&&props.onChange(newValue)}function setName(name){let newValue={...ref.current,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...ref.current,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime65.jsxs)(import_core73.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)(import_core73.TextInput,{disabled:props.disabled||nameProps?.readonly,"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactDetail?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime65.jsx)(ContactPointInput,{disabled:props.disabled||telecomProps?.readonly,name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactDetail?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core75=require("@mantine/core");var import_core74=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core74.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core74.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime66=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime66.jsx)(import_core75.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props["data-testid"]??props.name,placeholder:props.placeholder,required:props.required,disabled:props.disabled,type:getInputType(),step:1,defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core76=require("@medplum/core"),import_react_hooks23=require("@medplum/react-hooks"),import_react39=require("react");var import_jsx_runtime67=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=(0,import_react_hooks23.useMedplum)(),profileUrl=(0,import_react39.useMemo)(()=>{if((0,import_core76.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react39.useState)(profileUrl!==void 0);return(0,import_react39.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>setLoadingProfile(!1)).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core76.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime67.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime67.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core77=require("@mantine/core"),import_react40=require("react");var import_jsx_runtime68=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react40.useState)(props.defaultValue),{getExtendedProps}=(0,import_react40.useContext)(ElementsContext),[useProps,prefixProps,givenProps,familyProps,suffixProps]=(0,import_react40.useMemo)(()=>["use","prefix","given","family","suffix"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...value,use:use||void 0})}function setPrefix(prefix){setValueWrapper({...value,prefix:prefix?prefix.split(" "):void 0})}function setGiven(given){setValueWrapper({...value,given:given?given.split(" "):void 0})}function setFamily(family){setValueWrapper({...value,family:family||void 0})}function setSuffix(suffix){setValueWrapper({...value,suffix:suffix?suffix.split(" "):void 0})}let errorPath=props.valuePath??path;return(0,import_jsx_runtime68.jsxs)(import_core77.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime68.jsx)(import_core77.NativeSelect,{disabled:props.disabled||useProps?.readonly,defaultValue:value?.use,name:props.name+"-use","data-testid":"use",onChange:e=>setUse(e.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime68.jsx)(import_core77.TextInput,{disabled:props.disabled||prefixProps?.readonly,placeholder:"Prefix",name:props.name+"-prefix",defaultValue:value?.prefix?.join(" "),onChange:e=>setPrefix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".prefix")}),(0,import_jsx_runtime68.jsx)(import_core77.TextInput,{disabled:props.disabled||givenProps?.readonly,placeholder:"Given",name:props.name+"-given",defaultValue:value?.given?.join(" "),onChange:e=>setGiven(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".given")}),(0,import_jsx_runtime68.jsx)(import_core77.TextInput,{disabled:props.disabled||familyProps?.readonly,name:props.name+"-family",placeholder:"Family",defaultValue:value?.family,onChange:e=>setFamily(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".family")}),(0,import_jsx_runtime68.jsx)(import_core77.TextInput,{disabled:props.disabled||suffixProps?.readonly,placeholder:"Suffix",name:props.name+"-suffix",defaultValue:value?.suffix?.join(" "),onChange:e=>setSuffix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".suffix")})]})}var import_core78=require("@mantine/core"),import_react41=require("react");var import_jsx_runtime69=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react41.useState)(props.defaultValue),{elementsByPath,getExtendedProps}=(0,import_react41.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react41.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]),[systemProps,valueProps]=(0,import_react41.useMemo)(()=>["system","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let errorPath=props.valuePath??props.path;return(0,import_jsx_runtime69.jsxs)(import_core78.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime69.jsx)(import_core78.TextInput,{disabled:props.disabled||systemProps?.readonly,placeholder:"System",required:(systemElement?.min??0)>0,defaultValue:value?.system,onChange:e=>setValueWrapper({...value,system:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".system")}),(0,import_jsx_runtime69.jsx)(import_core78.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",required:(valueElement?.min??0)>0,defaultValue:value?.value,onChange:e=>setValueWrapper({...value,value:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".value")})]})}var import_core79=require("@mantine/core");var import_react42=require("react");var import_jsx_runtime70=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react42.useState)(props.defaultValue),{getExtendedProps}=(0,import_react42.useContext)(ElementsContext),[currencyProps,valueProps]=(0,import_react42.useMemo)(()=>["currency","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),setValueWrapper=(0,import_react42.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react42.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react42.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime70.jsx)(import_core79.NativeSelect,{disabled:props.disabled||currencyProps?.readonly,defaultValue:value?.currency,data,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:handleCurrencyChange});return(0,import_jsx_runtime70.jsx)(import_core79.TextInput,{disabled:props.disabled||valueProps?.readonly,type:"number",name:props.name,label:props.label,placeholder:props.placeholder??"Value",defaultValue:value?.value?.toString()??"USD",leftSection:(0,import_jsx_runtime70.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core80=require("@mantine/core"),import_react43=require("react");var import_jsx_runtime71=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react43.useState)(props.defaultValue),{getExtendedProps}=(0,import_react43.useContext)(ElementsContext),[startProps,endProps]=(0,import_react43.useMemo)(()=>["start","end"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime71.jsxs)(import_core80.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime71.jsx)(DateTimeInput,{disabled:props.disabled||startProps?.readonly,name:props.name+".start",placeholder:"Start",defaultValue:value?.start,onChange:newValue=>setValueWrapper({...value,start:newValue})}),(0,import_jsx_runtime71.jsx)(DateTimeInput,{disabled:props.disabled||endProps?.readonly,name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core81=require("@mantine/core"),import_react44=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react44.useState)(props.defaultValue),{getExtendedProps}=(0,import_react44.useContext)(ElementsContext),[comparatorProps,valueProps,unitProps]=(0,import_react44.useMemo)(()=>["comparator","value","unit"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime72.jsxs)(import_core81.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime72.jsx)(import_core81.NativeSelect,{disabled:props.disabled||comparatorProps?.readonly,style:{width:80},"data-testid":props.name+"-comparator",defaultValue:value?.comparator,data:["","<","<=",">=",">"],onChange:e=>setValueWrapper({...value,comparator:e.currentTarget.value})}),(0,import_jsx_runtime72.jsx)(import_core81.TextInput,{disabled:props.disabled||valueProps?.readonly,id:props.name,name:props.name,required:props.required,"data-autofocus":props.autoFocus,"data-testid":props.name+"-value",type:"number",placeholder:"Value",defaultValue:value?.value,autoFocus:props.autoFocus,step:"any",onWheel:e=>{props.disableWheel&&e.currentTarget.blur()},onChange:e=>{setValueWrapper({...value,value:tryParseNumber(e.currentTarget.value)})}}),(0,import_jsx_runtime72.jsx)(import_core81.TextInput,{disabled:props.disabled||unitProps?.readonly,placeholder:"Unit","data-testid":props.name+"-unit",defaultValue:value?.unit,onChange:e=>setValueWrapper({...value,unit:e.currentTarget.value})})]})}function tryParseNumber(str){if(str)return parseFloat(str)}var import_core82=require("@mantine/core"),import_react45=require("react");var import_jsx_runtime73=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react45.useState)(props.defaultValue),{getExtendedProps}=(0,import_react45.useContext)(ElementsContext),[lowProps,highProps]=(0,import_react45.useMemo)(()=>["low","high"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime73.jsxs)(import_core82.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime73.jsx)(QuantityInput,{path:props.path+".low",disabled:props.disabled||lowProps?.readonly,name:props.name+"-low",defaultValue:value?.low,onChange:v=>setValueWrapper({...value,low:v})}),(0,import_jsx_runtime73.jsx)(QuantityInput,{path:props.path+".high",disabled:props.disabled||highProps?.readonly,name:props.name+"-high",defaultValue:value?.high,onChange:v=>setValueWrapper({...value,high:v})})]})}var import_core83=require("@mantine/core"),import_react46=require("react");var import_jsx_runtime74=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react46.useState)(props.defaultValue),{getExtendedProps}=(0,import_react46.useContext)(ElementsContext),[numeratorProps,denominatorProps]=(0,import_react46.useMemo)(()=>["numerator","denominator"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime74.jsxs)(import_core83.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime74.jsx)(QuantityInput,{path:props.path+".numerator",disabled:props.disabled||numeratorProps?.readonly,name:props.name+"-numerator",defaultValue:value?.numerator,onChange:v=>setValueWrapper({...value,numerator:v})}),(0,import_jsx_runtime74.jsx)(QuantityInput,{path:props.path+".denominator",disabled:props.disabled||denominatorProps?.readonly,name:props.name+"-denominator",defaultValue:value?.denominator,onChange:v=>setValueWrapper({...value,denominator:v})})]})}var import_core86=require("@mantine/core"),import_core87=require("@medplum/core"),import_react_hooks25=require("@medplum/react-hooks"),import_react48=require("react");var import_core84=require("@mantine/core"),import_core85=require("@medplum/core"),import_react_hooks24=require("@medplum/react-hooks"),import_react47=require("react");var import_jsx_runtime75=require("react/jsx-runtime"),SEARCH_CODES={Device:"device-name",Observation:"code",Subscription:"criteria",User:"email:contains"},NAME_RESOURCE_TYPES=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","CareTeam","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","Group","HealthcareService","ImplementationGuide","InsurancePlan","Library","Location","Measure","MedicinalProduct","MessageDefinition","NamingSystem","OperationDefinition","Organization","Patient","Person","PlanDefinition","Practitioner","Project","Questionnaire","RelatedPerson","ResearchDefinition","ResearchElementDefinition","ResearchStudy","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function toOption3(resource){return{value:(0,import_core85.getReferenceString)(resource)??"",label:(0,import_core85.getDisplayString)(resource),resource}}function ResourceInput(props){let medplum=(0,import_react_hooks24.useMedplum)(),{resourceType,searchCriteria}=props,[outcome,setOutcome]=(0,import_react47.useState)(),defaultValue2=(0,import_react_hooks24.useResource)(props.defaultValue,setOutcome),ItemComponent3=props.itemComponent??DefaultItemComponent2,onChange=props.onChange,loadValues=(0,import_react47.useCallback)(async(input,signal)=>{let searchCode=getSearchParamForResourceType(resourceType),searchParams=new URLSearchParams({[searchCode]:input??"",_count:"10",...searchCriteria});return await medplum.searchResources(resourceType,searchParams,{signal})},[medplum,resourceType,searchCriteria]),handleChange=(0,import_react47.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_core85.isPopulated)(props.defaultValue)&&!outcome&&!defaultValue2?null:(0,import_jsx_runtime75.jsx)(AsyncAutocomplete,{disabled:props.disabled,name:props.name,label:props.label,error:props.error,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultValue2,placeholder:props.placeholder,maxValues:1,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var DefaultItemComponent2=(0,import_react47.forwardRef)(({label,resource,active:_active,...others},ref)=>(0,import_jsx_runtime75.jsx)("div",{ref,...others,children:(0,import_jsx_runtime75.jsxs)(import_core84.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime75.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core84.Text,{children:label}),(0,import_jsx_runtime75.jsx)(import_core84.Text,{size:"xs",c:"dimmed",children:resource.birthDate||resource.id})]})]})}));function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var import_jsx_runtime76=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=(0,import_react_hooks25.useMedplum)(),[value,setValue]=(0,import_react48.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react48.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react48.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react48.useRef)(new import_core87.LRUCache),searchCriteria=(0,import_react48.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react48.useEffect)(()=>{let anyToFetch=!1,newTargetTypePromises=targetTypes?.map(tt=>{if(!shouldFetchResourceType(tt))return Promise.resolve(tt);anyToFetch=!0;let cacheKey=tt.value,cached=promiseCache.current.get(cacheKey);if(cached)return cached;let promise=fetchResourceTypeOfProfile(medplum,tt.value).then(profile=>{let newTargetType={...tt};return profile?(0,import_core87.isPopulated)(profile.type)?(newTargetType.resourceType=profile.type,newTargetType.name=profile.name,newTargetType.title=profile.title):(console.error(`StructureDefinition.type missing for ${tt.value}`),newTargetType.error="StructureDefinition.type missing"):(console.error(`StructureDefinition not found for ${tt.value}`),newTargetType.error="StructureDefinition not found"),newTargetType}).catch(reason=>(console.error(reason),{...tt,error:reason})),readablePromise=new import_core87.ReadablePromise(promise);return promiseCache.current.set(cacheKey,readablePromise),readablePromise});!newTargetTypePromises||!anyToFetch||Promise.all(newTargetTypePromises).then(newTargetTypes=>{if(setTargetTypes(newTargetTypes),!targetType)return;let index=newTargetTypes.findIndex(tt=>tt.value===targetType.value||tt.resourceType===targetType.resourceType);if(index===-1){console.debug(`defaultValue had unexpected resourceType: ${targetType.resourceType}`);return}setTargetType(newTargetTypes[index])}).catch(console.error)},[medplum,targetType,targetTypes]);let setValueHelper=(0,import_react48.useCallback)(item=>{let newValue=item?(0,import_core87.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react48.useMemo)(()=>targetTypes?targetTypes.map(tt=>({value:tt.value,label:tt.type==="profile"?tt.title??tt.name??tt.resourceType??tt.value:tt.value})):[],[targetTypes]);return(0,import_jsx_runtime76.jsxs)(import_jsx_runtime76.Fragment,{children:[props.name&&(0,import_jsx_runtime76.jsx)("input",{type:"hidden",name:props.name,value:value?.reference??""}),(0,import_jsx_runtime76.jsxs)(import_core86.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime76.jsx)(import_core86.NativeSelect,{name:props.name+"-resourceType",disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:targetType?.resourceType,autoFocus:props.autoFocus,onChange:e=>{let newValue=e.currentTarget.value,newTargetType=targetTypes.find(tt=>tt.value===newValue);setTargetType(newTargetType)},data:typeSelectOptions}),!targetTypes&&(0,import_jsx_runtime76.jsx)(ResourceTypeInput,{disabled:props.disabled,autoFocus:props.autoFocus,testId:"reference-input-resource-type-input",defaultValue:targetType?.resourceType,onChange:newResourceType=>{setTargetType(newResourceType?{type:"resourceType",value:newResourceType,resourceType:newResourceType}:void 0)},name:props.name+"-resourceType",placeholder:"Resource Type"}),(0,import_jsx_runtime76.jsx)(ResourceInput,{resourceType:targetType?.resourceType,name:props.name+"-id",required:props.required,placeholder:props.placeholder,defaultValue:value,searchCriteria,onChange:setValueHelper,disabled:props.disabled})]})]})}function createTargetTypes(resourceTypesAndProfileUrls){if(!resourceTypesAndProfileUrls||resourceTypesAndProfileUrls.length===0||resourceTypesAndProfileUrls.length===1&&resourceTypesAndProfileUrls[0]==="Resource")return;let results=[];for(let value of resourceTypesAndProfileUrls)value.includes("/")?results.push({type:"profile",value}):results.push({type:"resourceType",value,resourceType:value});return results}function getInitialTargetType(defaultValue2,targetTypes){let defaultValueResourceType=defaultValue2?.reference?.split("/")[0];if(defaultValueResourceType){let targetType=targetTypes?.find(tt=>tt.resourceType===defaultValueResourceType);return targetType||{type:"resourceType",value:defaultValueResourceType,resourceType:defaultValueResourceType}}if(targetTypes&&targetTypes.length>0)return targetTypes[0]}async function fetchResourceTypeOfProfile(medplum,profileUrl){let profile=(0,import_core87.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
66
66
  StructureDefinitionList(url: "${profileUrl}", _sort: "_lastUpdated", _count: 1) {
67
67
  type,
68
68
  name,
69
69
  title,
70
70
  }
71
- }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core86.isEmpty)(targetType.resourceType)}var import_core91=require("@mantine/core"),import_core92=require("@medplum/core"),import_react_hooks26=require("@medplum/react-hooks"),import_react50=require("react");function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_core89=require("@mantine/core"),import_core90=require("@medplum/core"),import_react49=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core87=require("@mantine/core");var import_jsx_runtime77=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime77.jsx)(import_core87.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime77.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime77.jsx)(import_core87.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime77.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core88=require("@mantine/core");var import_jsx_runtime78=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime78.jsx)(import_core88.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime78.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime79=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react49.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react49.useContext)(ElementsContext),contextValue=(0,import_react49.useMemo)(()=>{if((0,import_core90.isPopulated)(sliceElements))return(0,import_core90.buildElementsContext)({parentContext:parentElementsContextValue,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentElementsContextValue,props.path,slice.typeSchema?.url,sliceElements]);function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}let required=slice.min>0,indentedStack=(0,import_core90.isEmpty)(slice.elements),propertyDisplayName=(0,import_core90.getPropertyDisplayName)(slice.name),showEmptyMessage=props.property.readonly&&values.length===0;return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime79.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,readonly:props.property.readonly,children:showEmptyMessage?(0,import_jsx_runtime79.jsx)(import_core89.Text,{c:"dimmed",children:"(empty)"}):(0,import_jsx_runtime79.jsxs)(import_core89.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime79.jsxs)(import_core89.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime79.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime79.jsx)(ElementDefinitionTypeInput,{elementDefinitionType:slice.type[0],name:slice.name,defaultValue:value,onChange:newValue=>{let newValues=[...values];newValues[valueIndex]=newValue,setValuesWrapper(newValues)},outcome:props.outcome,min:slice.min,max:slice.max,binding:slice.binding,path:props.path,valuePath:void 0,readOnly:props.property.readonly})}),!props.property.readonly&&values.length>slice.min&&(0,import_jsx_runtime79.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),!props.property.readonly&&values.length<slice.max&&(0,import_jsx_runtime79.jsx)(import_core89.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime79.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_jsx_runtime80=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=(0,import_react_hooks26.useMedplum)(),[loading,setLoading]=(0,import_react50.useState)(!0),[slices,setSlices]=(0,import_react50.useState)([]),[defaultValue2]=(0,import_react50.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react50.useState)(()=>[defaultValue2]),ctx=(0,import_react50.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react50.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(defaultValue2,slices2,property.slicing,ctx.profileUrl);addPlaceholderValues(slicedValues2,slices2),setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,defaultValue2,ctx.profileUrl,setSlicedValues]);function setValuesWrapper(newValues,sliceIndex){let newSlicedValues=[...slicedValues];if(newSlicedValues[sliceIndex]=newValues,setSlicedValues(newSlicedValues),props.onChange){let cleaned=newSlicedValues.flat().filter(val=>val!==void 0);props.onChange(cleaned)}}if(loading)return(0,import_jsx_runtime80.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core92.getPathDisplayName)(property.path),showEmptyMessage=props.property.readonly&&slices.length===0&&defaultValue2.length===0;return(0,import_jsx_runtime80.jsxs)(import_core91.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[showEmptyMessage&&(0,import_jsx_runtime80.jsx)(import_core91.Text,{c:"dimmed",children:"(empty)"}),slices.map((slice,sliceIndex)=>(0,import_jsx_runtime80.jsx)(SliceInput,{slice,path:props.path,valuePath:props.valuePath,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime80.jsxs)(import_core91.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime80.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime80.jsx)(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,path:props.path,valuePath:getValuePath(props.path,props.valuePath,valueIndex),defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),!props.property.readonly&&(0,import_jsx_runtime80.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),!props.property.readonly&&showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime80.jsx)(import_core91.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime80.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function addPlaceholderValues(slicedValues,slices){for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}}var import_core93=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications5=require("@mantine/notifications");var import_react51=require("react"),import_jsx_runtime81=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react51.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react51.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime81.jsxs)(import_core93.Flex,{gap:"xs",children:[(0,import_jsx_runtime81.jsx)(import_core93.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime81.jsx)(import_core93.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications5.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime81.jsx)(IconCopy,{})})]})}var import_core94=require("@mantine/core"),import_core95=require("@medplum/core"),import_react52=require("react");var import_jsx_runtime82=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue),[open,setOpen]=(0,import_react52.useState)(!props.disabled&&(props.defaultModalOpen??!1)),valueRef=(0,import_react52.useRef)(value);return valueRef.current=value,(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:[(0,import_jsx_runtime82.jsxs)(import_core94.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime82.jsx)("span",{children:(0,import_core95.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime82.jsx)(import_core94.Button,{disabled:props.disabled,onClick:()=>setOpen(!0),children:"Edit"})]}),!props.disabled&&(0,import_jsx_runtime82.jsx)(TimingEditorDialog,{path:props.path,visible:open,defaultValue:valueRef.current,onOk:newValue=>{props.onChange&&props.onChange(newValue),setValue(newValue),setOpen(!1)},onCancel:()=>setOpen(!1)})]})}var defaultValue={repeat:{period:1,periodUnit:"d"}};function TimingEditorDialog(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue||defaultValue),{getExtendedProps}=(0,import_react52.useContext)(ElementsContext),[eventProps,repeatProps,repeatPeriodProps,repeatPeriodUnitProps,repeatDayOfWeekProps]=(0,import_react52.useMemo)(()=>["event","repeat","repeat.period","repeat.periodUnit","repeat.dayOfWeek"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),valueRef=(0,import_react52.useRef)(value);valueRef.current=value;function setStart(newStart){setValue({...valueRef.current,event:[newStart]})}function setRepeat(repeat){setValue({...valueRef.current,repeat})}function setPeriod(newPeriod){setRepeat({...valueRef.current?.repeat,period:newPeriod})}function setPeriodUnit(newPeriodUnit){setRepeat({...valueRef.current?.repeat,periodUnit:newPeriodUnit})}function setDaysOfWeek(newDaysOfWeek){setRepeat({...valueRef.current?.repeat,dayOfWeek:newDaysOfWeek})}return(0,import_jsx_runtime82.jsx)(import_core94.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime82.jsxs)(import_core94.Stack,{children:[(0,import_jsx_runtime82.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime82.jsx)(DateTimeInput,{disabled:eventProps?.readonly,name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime82.jsx)(import_core94.Switch,{disabled:repeatProps?.readonly,label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:[(0,import_jsx_runtime82.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime82.jsxs)(import_core94.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime82.jsx)(import_core94.TextInput,{disabled:repeatPeriodProps?.readonly,type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime82.jsx)(import_core94.NativeSelect,{disabled:repeatPeriodUnitProps?.readonly,id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.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"}]})]})}),value.repeat.periodUnit==="wk"&&(0,import_jsx_runtime82.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime82.jsx)(import_core94.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime82.jsx)(import_core94.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime82.jsx)(import_core94.Chip,{value:day,size:"xs",radius:"xl",disabled:repeatDayOfWeekProps?.readonly,children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime82.jsx)(import_core94.Group,{justify:"flex-end",children:(0,import_jsx_runtime82.jsx)(import_core94.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime83=require("react/jsx-runtime");function ResourcePropertyInput(props){let{property,name,onChange,defaultValue:defaultValue2}=props,defaultPropertyType=props.defaultPropertyType&&props.defaultPropertyType!=="undefined"?props.defaultPropertyType:property.type[0].code,propertyTypes=property.type;if((property.isArray||property.max>1)&&!props.arrayElement){if(defaultPropertyType===import_core97.PropertyType.Attachment)return(0,import_jsx_runtime83.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange,disabled:property.readonly});let indent=propertyTypes[0]?.code!==import_core97.PropertyType.Extension;return(0,import_jsx_runtime83.jsx)(ResourceArrayInput,{property,name,path:props.path,valuePath:props.valuePath,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}else return propertyTypes.length>1?(0,import_jsx_runtime83.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime83.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core97.capitalize)(propertyTypes[0].code));props.onChange(newValue,newPropName)}},outcome:props.outcome,elementDefinitionType:propertyTypes[0],min:property.min,max:property.min,binding:property.binding,path:props.path,valuePath:props.valuePath,readOnly:property.readonly})}function ElementDefinitionInputSelector(props){let propertyTypes=props.elementDefinitionTypes,initialPropertyType;props.defaultPropertyType&&(initialPropertyType=propertyTypes.find(t=>t.code===props.defaultPropertyType)),initialPropertyType||(initialPropertyType=propertyTypes[0]);let[selectedType,setSelectedType]=(0,import_react53.useState)(initialPropertyType);return(0,import_jsx_runtime83.jsxs)(import_core96.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime83.jsx)(import_core96.NativeSelect,{disabled:props.property.readonly,style:{width:"200px"},defaultValue:selectedType.code,"data-testid":props.name&&props.name+"-selector",onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),(0,import_jsx_runtime83.jsx)(ElementDefinitionTypeInput,{name:props.name,defaultValue:props.defaultValue,outcome:props.outcome,elementDefinitionType:selectedType,onChange:newValue=>{props.onChange&&props.onChange(newValue,props.name.replace("[x]",(0,import_core97.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path,valuePath:props.valuePath,readOnly:props.property.readonly})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path,valuePath,readOnly}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react53.useContext)(ElementsContext),defaultValue2=(0,import_react53.useMemo)(()=>{if(!(0,import_core97.isComplexTypeCode)(propertyType)||!(0,import_core97.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core97.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core97.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core97.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core97.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime83.jsx)("div",{children:"Property type not specified "});function getComplexInputProps(){return{name,defaultValue:defaultValue2,onChange,outcome,path,valuePath,disabled:readOnly}}function getPrimitiveInputProps(){let error=getErrorsForInput(props.outcome,valuePath??path);return{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,error,disabled:readOnly}}switch(propertyType){case import_core97.PropertyType.SystemString:case import_core97.PropertyType.canonical:case import_core97.PropertyType.string:case import_core97.PropertyType.time:case import_core97.PropertyType.uri:case import_core97.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime83.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime83.jsx)(import_core96.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core97.PropertyType.date:return(0,import_jsx_runtime83.jsx)(import_core96.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core97.PropertyType.dateTime:case import_core97.PropertyType.instant:return(0,import_jsx_runtime83.jsx)(DateTimeInput,{...getPrimitiveInputProps(),onChange,outcome});case import_core97.PropertyType.decimal:case import_core97.PropertyType.integer:case import_core97.PropertyType.positiveInt:case import_core97.PropertyType.unsignedInt:return(0,import_jsx_runtime83.jsx)(import_core96.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core97.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core97.PropertyType.code:return(0,import_jsx_runtime83.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet,creatable:!0,maxValues:1});case import_core97.PropertyType.boolean:return(0,import_jsx_runtime83.jsx)(import_core96.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core97.PropertyType.base64Binary:case import_core97.PropertyType.markdown:return(0,import_jsx_runtime83.jsx)(import_core96.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core97.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core97.PropertyType.Address:return(0,import_jsx_runtime83.jsx)(AddressInput,{...getComplexInputProps()});case import_core97.PropertyType.Annotation:return(0,import_jsx_runtime83.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core97.PropertyType.Attachment:return(0,import_jsx_runtime83.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core97.PropertyType.CodeableConcept:return(0,import_jsx_runtime83.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core97.PropertyType.Coding:return(0,import_jsx_runtime83.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core97.PropertyType.ContactDetail:return(0,import_jsx_runtime83.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core97.PropertyType.ContactPoint:return(0,import_jsx_runtime83.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core97.PropertyType.Extension:return(0,import_jsx_runtime83.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core97.PropertyType.HumanName:return(0,import_jsx_runtime83.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core97.PropertyType.Identifier:return(0,import_jsx_runtime83.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core97.PropertyType.Money:return(0,import_jsx_runtime83.jsx)(MoneyInput,{...getComplexInputProps()});case import_core97.PropertyType.Period:return(0,import_jsx_runtime83.jsx)(PeriodInput,{...getComplexInputProps()});case import_core97.PropertyType.Duration:case import_core97.PropertyType.Quantity:return(0,import_jsx_runtime83.jsx)(QuantityInput,{...getComplexInputProps()});case import_core97.PropertyType.Range:return(0,import_jsx_runtime83.jsx)(RangeInput,{...getComplexInputProps()});case import_core97.PropertyType.Ratio:return(0,import_jsx_runtime83.jsx)(RatioInput,{...getComplexInputProps()});case import_core97.PropertyType.Reference:return(0,import_jsx_runtime83.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core97.PropertyType.Timing:return(0,import_jsx_runtime83.jsx)(TimingInput,{...getComplexInputProps()});case import_core97.PropertyType.Dosage:case import_core97.PropertyType.UsageContext:default:return(0,import_jsx_runtime83.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core97.HTTP_HL7_ORG}/fhir/StructureDefinition/`,"https://medplum.com/fhir/StructureDefinition/"];function getTargetTypes(elementDefinitionType){return elementDefinitionType?.targetProfile?.map(p=>{let resourceTypePrefix=RESOURCE_TYPE_URL_PREFIXES.find(prefix=>p.startsWith(prefix));return resourceTypePrefix?p.slice(resourceTypePrefix.length):p})}var import_jsx_runtime84=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react54.useState)(props.defaultValue??{}),elementsContext=(0,import_react54.useContext)(ElementsContext),elementsToRender=(0,import_react54.useMemo)(()=>getElementsToRender(elementsContext.elements),[elementsContext.elements]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let typedValue={type:props.type,value};return(0,import_jsx_runtime84.jsx)(import_core98.Stack,{style:{flexGrow:1},"data-testid":props.testId,children:elementsToRender.map(([key,element])=>{let[propertyValue,propertyType]=getValueAndTypeFromElement(typedValue,key,element),required=element.min!==void 0&&element.min>0,valuePath=props.valuePath?props.valuePath+"."+key:void 0,resourcePropertyInput=(0,import_jsx_runtime84.jsx)(ResourcePropertyInput,{property:element,name:key,path:props.path+"."+key,valuePath,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.includes(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?(0,import_jsx_runtime84.jsx)(CheckboxFormSection,{title:(0,import_core99.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,readonly:element.readonly,children:resourcePropertyInput},key):(0,import_jsx_runtime84.jsx)(FormSection,{title:(0,import_core99.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,readonly:element.readonly,children:resourcePropertyInput},key)})})}var import_jsx_runtime85=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react55.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react55.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react55.useMemo)(()=>(0,import_core100.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react55.useMemo)(()=>{if(typeSchema)return(0,import_core100.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime85.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime85.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core101=require("@mantine/core"),import_react56=require("react");var CalendarInput_default={table:"CalendarInput_table"};function getMonthString(date){return date.toLocaleString("default",{month:"long"})+" "+date.getFullYear()}function getStartMonth(){let result=new Date;return result.setDate(1),result.setHours(0,0,0,0),result}var import_jsx_runtime86=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react56.useState)(getStartMonth);function moveMonth(delta){setMonth(currMonth=>{let newMonth=new Date(currMonth.getTime());return newMonth.setMonth(currMonth.getMonth()+delta),onChangeMonth(newMonth),newMonth})}let grid=(0,import_react56.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime86.jsxs)("div",{children:[(0,import_jsx_runtime86.jsxs)(import_core101.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime86.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime86.jsxs)(import_core101.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime86.jsx)(import_core101.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime86.jsx)(import_core101.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime86.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime86.jsx)("thead",{children:(0,import_jsx_runtime86.jsxs)("tr",{children:[(0,import_jsx_runtime86.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime86.jsx)("th",{children:"MON"}),(0,import_jsx_runtime86.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime86.jsx)("th",{children:"WED"}),(0,import_jsx_runtime86.jsx)("th",{children:"THU"}),(0,import_jsx_runtime86.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime86.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime86.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime86.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime86.jsx)("td",{children:day&&(0,import_jsx_runtime86.jsx)(import_core101.Button,{variant:"light",disabled:!day.available,onClick:()=>onClick(day.date),children:day.date.getDate()})},"day-"+dayIndex))},"week-"+weekIndex))})]})]})}function buildGrid(startDate,slots){let d=new Date(startDate.getFullYear(),startDate.getMonth()),grid=[],row=[];for(let i=0;i<d.getDay();i++)row.push(void 0);for(;d.getMonth()===startDate.getMonth();)row.push({date:new Date(d.getTime()),available:isDayAvailable(d,slots)}),d.getDay()===6&&(grid.push(row),row=[]),d.setDate(d.getDate()+1);if(d.getDay()!==0){for(let i=d.getDay();i<7;i++)row.push(void 0);grid.push(row)}return grid}function isDayAvailable(day,slots){for(let slot of slots){let slotStart=new Date(slot.start);if(slotStart.getFullYear()===day.getFullYear()&&slotStart.getMonth()===day.getMonth()&&slotStart.getDate()===day.getDate())return!0}return!1}var import_core102=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_notifications6=require("@mantine/notifications"),import_core103=require("@medplum/core"),import_react_hooks27=require("@medplum/react-hooks");var import_react57=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleName:"BaseChat_chatBubbleName",chatBubbleNameRight:"BaseChat_chatBubbleNameRight"};var import_jsx_runtime87=require("react/jsx-runtime");function showError(message){(0,import_notifications6.showNotification)({color:"red",title:"Error",message,autoClose:!1})}function parseSentTime(communication){let sentTime=new Date(communication.sent??0),sentTimeMins=sentTime.getMinutes().toString();return`${sentTime.getHours()}:${sentTimeMins.length===1?"0":""}${sentTimeMins}`}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a,b)=>a.sent.localeCompare(b.sent)),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,onMessageUpdated,inputDisabled,onError,...paperProps}=props,medplum=(0,import_react_hooks27.useMedplum)(),inputRef=(0,import_react57.useRef)(null),scrollAreaRef=(0,import_react57.useRef)(null),firstScrollRef=(0,import_react57.useRef)(!0),initialLoadRef=(0,import_react57.useRef)(!0),[profile,setProfile]=(0,import_react57.useState)(medplum.getProfile()),[reconnecting,setReconnecting]=(0,import_react57.useState)(!1),[loading,setLoading]=(0,import_react57.useState)(!0);loading||(initialLoadRef.current=!1);let profileRefStr=(0,import_react57.useMemo)(()=>profile?(0,import_core103.getReferenceString)(medplum.getProfile()):"",[profile,medplum]),searchMessages=(0,import_react57.useCallback)(async()=>{setLoading(!0);let searchParams=new URLSearchParams(query);searchParams.append("_sort","-sent"),searchParams.append("sent:missing","false");let searchResult=await medplum.searchResources("Communication",searchParams,{cache:"no-cache"});upsertCommunications(communicationsRef.current,searchResult,setCommunications),setLoading(!1)},[medplum,setCommunications,query]);(0,import_react57.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core103.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react_hooks27.useSubscription)(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),(0,import_core103.getReferenceString)(communication.sender)!==profileRefStr&&(communicationsRef.current.find(c=>c.id===communication.id)?onMessageUpdated?.(communication):onMessageReceived?.(communication))},{onWebSocketClose:(0,import_react57.useCallback)(()=>{reconnecting||setReconnecting(!0),(0,import_notifications6.showNotification)({color:"red",message:"Live chat disconnected. Attempting to reconnect..."})},[reconnecting]),onWebSocketOpen:(0,import_react57.useCallback)(()=>{reconnecting&&(0,import_notifications6.showNotification)({color:"green",message:"Live chat reconnected."})},[reconnecting]),onSubscriptionConnect:(0,import_react57.useCallback)(()=>{reconnecting&&(searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core103.normalizeErrorString)(err)})),setReconnecting(!1))},[reconnecting,searchMessages]),onError:(0,import_react57.useCallback)(err=>{onError?onError(err):showError((0,import_core103.normalizeErrorString)(err))},[onError])});let sendMessageInternal=(0,import_react57.useCallback)(formData=>{inputDisabled||(inputRef.current&&(inputRef.current.value=""),sendMessage(formData.message),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage]);(0,import_react57.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks2.useResizeObserver)(),communicationsRef=(0,import_react57.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react57.useRef)(communications),scrollToBottomRef=(0,import_react57.useRef)(!0);(0,import_react57.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react57.useEffect)(()=>{scrollToBottomRef.current&&scrollAreaRef.current?.scrollTo&&(scrollAreaRef.current.scrollTo({top:scrollAreaRef.current.scrollHeight,...firstScrollRef.current?{duration:0}:{behavior:"smooth"}}),firstScrollRef.current=!1,scrollToBottomRef.current=!1)});let myLastDeliveredId=(0,import_react57.useMemo)(()=>{let i=communications.length;for(;i--;){let comm=communications[i];if(comm.sender?.reference===profileRefStr&&comm.received)return comm.id}return""},[communications,profileRefStr]);return profile?(0,import_jsx_runtime87.jsxs)(import_core102.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[(0,import_jsx_runtime87.jsx)(import_core102.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:initialLoadRef.current?(0,import_jsx_runtime87.jsxs)(import_core102.Stack,{align:"stretch",mt:"lg",children:[(0,import_jsx_runtime87.jsxs)(import_core102.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(import_core102.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]}),(0,import_jsx_runtime87.jsxs)(import_core102.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"right",parentWidth:parentRect.width}),(0,import_jsx_runtime87.jsx)(import_core102.Skeleton,{height:38,circle:!0,mr:"md"})]}),(0,import_jsx_runtime87.jsxs)(import_core102.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(import_core102.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]})]},"skeleton-chat-messages"):(0,import_jsx_runtime87.jsxs)(import_core102.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:[(0,import_jsx_runtime87.jsx)(import_core102.LoadingOverlay,{visible:loading||reconnecting,style:{width:parentRect.width,height:parentRect.height,position:"absolute",zIndex:1}}),communications.map((c,i)=>{let prevCommunication=i>0?communications[i-1]:void 0,prevCommTime=prevCommunication?parseSentTime(prevCommunication):void 0,currCommTime=parseSentTime(c);return(0,import_jsx_runtime87.jsxs)(import_core102.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime87.jsx)("div",{style:{textAlign:"center"},children:currCommTime}),c.sender?.reference===profileRefStr?(0,import_jsx_runtime87.jsxs)(import_core102.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered:!!c.received&&c.id===myLastDeliveredId}),(0,import_jsx_runtime87.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender})]}):(0,import_jsx_runtime87.jsxs)(import_core102.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ResourceAvatar,{radius:"xl",value:c.sender}),(0,import_jsx_runtime87.jsx)(ChatBubble,{alignment:"left",communication:c})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})]})}),(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatInputContainer,children:(0,import_jsx_runtime87.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime87.jsx)(import_core102.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",rightSectionWidth:42,disabled:inputDisabled,rightSection:inputDisabled?void 0:(0,import_jsx_runtime87.jsx)(import_core102.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime87.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,content=communication.payload?.[0]?.contentString||"",seenTime=new Date(communication.received??-1),senderResource=(0,import_react_hooks27.useResource)(communication.sender);return(0,import_jsx_runtime87.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime87.jsx)("div",{className:clsx_default(BaseChat_default.chatBubbleName,alignment==="right"&&BaseChat_default.chatBubbleNameRight),"aria-label":"Sender name",children:senderResource?(0,import_core103.getDisplayString)(senderResource):"[Unknown sender]"}),(0,import_jsx_runtime87.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubble,children:content})}),showDelivered&&(0,import_jsx_runtime87.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}function ChatBubbleSkeleton(props){let{alignment,parentWidth}=props;return(0,import_jsx_runtime87.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubbleName,"aria-label":"Placeholder sender name",children:(0,import_jsx_runtime87.jsx)("div",{style:{position:"relative"},children:(0,import_jsx_runtime87.jsx)(import_core102.Skeleton,{height:14,width:"100px",radius:"l",ml:alignment==="left"?"sm":void 0,style:alignment==="right"?{position:"absolute",right:5,top:-15}:void 0})})}),(0,import_jsx_runtime87.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubble,children:(0,import_jsx_runtime87.jsx)(import_core102.Skeleton,{height:14,width:parentWidth*.5,radius:"l"})})})]})}var import_core104=require("@mantine/core"),import_react_hooks28=require("@medplum/react-hooks");var import_react58=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime88=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=(0,import_react_hooks28.useMedplumProfile)(),[opened,setOpened]=(0,import_react58.useState)(open??!1);return(0,import_react58.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment,{children:[opened&&(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime88.jsx)(import_core104.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime88.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime88.jsx)(import_core104.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime88.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core105=require("@medplum/core"),import_react_hooks29=require("@medplum/react-hooks"),import_react59=require("react");var import_jsx_runtime89=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled,onError}=props,medplum=(0,import_react_hooks29.useMedplum)(),profile=(0,import_react_hooks29.useMedplumProfile)(),prevThreadId=(0,import_react_hooks29.usePrevious)(thread?.id),[communications,setCommunications]=(0,import_react59.useState)([]),profileRef=(0,import_react59.useMemo)(()=>profile?(0,import_core105.createReference)(profile):void 0,[profile]),threadRef=(0,import_react59.useMemo)(()=>(0,import_core105.createReference)(thread),[thread]);(0,import_react59.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react59.useCallback)(message=>{let profileRefStr=profileRef?(0,import_core105.getReferenceString)(profileRef):void 0;profileRefStr&&medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core105.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload:[{contentString:message}],partOf:[threadRef]}).then(communication=>{setCommunications([...communications,communication]),onMessageSent?.(communication)}).catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react59.useMemo)(()=>thread.recipient?.length===2?message=>{message.received&&message.status==="completed"||medplum.updateResource({...message,received:message.received??new Date().toISOString(),status:"completed"}).catch(console.error)}:void 0,[medplum,thread.recipient?.length]);return profile?(0,import_jsx_runtime89.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core105.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled,onError}):null}var import_core119=require("@mantine/core"),import_notifications7=require("@mantine/notifications"),import_core120=require("@medplum/core"),import_react_hooks34=require("@medplum/react-hooks");var import_react65=require("react");var import_core111=require("@mantine/core"),import_core112=require("@medplum/core"),import_react_hooks31=require("@medplum/react-hooks");var import_react61=require("react");var import_core106=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime90=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime90.jsx)(import_core106.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime90.jsx)(import_core106.Blockquote,{classNames:{cite:NoteDisplay_default.noteCite,root:NoteDisplay_default.noteRoot},cite:note.authorReference?.display||note.authorString,icon:null,children:note.text},`note-${note.text}`))}):null}var import_core109=require("@mantine/core");var import_core107=require("@mantine/core"),import_core108=require("@medplum/core"),import_react_hooks30=require("@medplum/react-hooks"),import_react60=require("react");var import_jsx_runtime91=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react60.useState)(),resource=(0,import_react_hooks30.useResource)(value,setOutcome),text;if(outcome&&!(0,import_core108.isOk)(outcome))text=`[${(0,import_core108.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core108.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime91.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime91.jsx)(import_core107.Text,{component:"span",...rest,children:text})}var import_jsx_runtime92=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime92.jsxs)(import_core109.Group,{gap:"xs",children:[(0,import_jsx_runtime92.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime92.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core110=require("@mantine/core"),import_jsx_runtime93=require("react/jsx-runtime"),statusToColor={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","not-done":"red",connected:"green",disconnected:"red",finished:"green",planned:"gray"};function StatusBadge(props){let{status,...badgeProps}=props;return(0,import_jsx_runtime93.jsx)(import_core110.Badge,{color:props.color||statusToColor[status],...badgeProps,children:status.replace(/-/g," ")})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime94=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1,hideSubject:!1};function DiagnosticReportDisplay(props){let medplum=(0,import_react_hooks31.useMedplum)(),diagnosticReport=(0,import_react_hooks31.useResource)(props.value),[specimens,setSpecimens]=(0,import_react61.useState)();if((0,import_react61.useEffect)(()=>{diagnosticReport?.specimen&&Promise.allSettled(diagnosticReport.specimen.map(ref=>medplum.readReference(ref))).then(outcomes=>outcomes.filter(outcome=>outcome.status==="fulfilled").map(outcome=>outcome.value)).then(setSpecimens).catch(console.error)},[medplum,diagnosticReport]),!diagnosticReport)return null;let specimenNotes=specimens?.flatMap(spec=>spec.note||[])||[];if(diagnosticReport.presentedForm&&diagnosticReport.presentedForm.length>0){let pf=diagnosticReport.presentedForm[0];pf.contentType?.startsWith("text/plain")&&pf.data&&specimenNotes.push({text:window.atob(pf.data)})}return(0,import_jsx_runtime94.jsxs)(import_core111.Stack,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime94.jsx)(DiagnosticReportHeader,{value:diagnosticReport,hideSubject:props.hideSubject}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime94.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime94.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value,hideSubject=!1}){return(0,import_jsx_runtime94.jsxs)(import_core111.Group,{mt:"md",gap:30,children:[value.subject&&!hideSubject&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:(0,import_core112.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime94.jsx)(StatusBadge,{status:value.status})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime94.jsxs)(import_core111.Stack,{gap:"xs",children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime94.jsx)(import_core111.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime94.jsx)(import_core111.List.Item,{ml:"sm",children:(0,import_jsx_runtime94.jsxs)(import_core111.Group,{gap:20,children:[(0,import_jsx_runtime94.jsxs)(import_core111.Group,{gap:5,children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{fw:500,children:"Collected:"})," ",(0,import_core112.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime94.jsxs)(import_core111.Group,{gap:5,children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{fw:500,children:"Received:"})," ",(0,import_core112.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime94.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime94.jsx)("thead",{children:(0,import_jsx_runtime94.jsxs)("tr",{children:[(0,import_jsx_runtime94.jsx)("th",{children:"Test"}),(0,import_jsx_runtime94.jsx)("th",{children:"Value"}),(0,import_jsx_runtime94.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime94.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime94.jsx)("th",{children:"Category"}),(0,import_jsx_runtime94.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime94.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime94.jsx)("tbody",{children:(0,import_jsx_runtime94.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime94.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core112.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=(0,import_react_hooks31.useResource)(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment,{children:[(0,import_jsx_runtime94.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime94.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime94.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime94.jsx)("td",{children:(0,import_jsx_runtime94.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime94.jsx)("td",{children:(0,import_jsx_runtime94.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime94.jsx)("div",{children:(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core112.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime94.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime94.jsx)("td",{children:observation.status&&(0,import_jsx_runtime94.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime94.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime94.jsx)("tr",{children:(0,import_jsx_runtime94.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime94.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:(0,import_core112.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:range.text}):(0,import_jsx_runtime94.jsx)(RangeDisplay,{value:range}):null}function isCritical(observation){let code=observation.interpretation?.[0]?.coding?.[0]?.code;return code==="AA"||code==="LL"||code==="HH"||code==="A"}var import_core114=require("@mantine/core"),import_core115=require("@medplum/core"),import_react_hooks32=require("@medplum/react-hooks"),import_react63=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var import_core113=require("@mantine/core"),import_react62=require("react");var ResourceDiffRow_default={removed:"ResourceDiffRow_removed",added:"ResourceDiffRow_added"};var import_jsx_runtime95=require("react/jsx-runtime");function ResourceDiffRow(props){let{name,path,property,originalValue,revisedValue}=props,isAttachmentType=!!property?.type?.find(t=>t.code==="Attachment"),[isCollapsed,setIsCollapsed]=(0,import_react62.useState)(isAttachmentType),toggleCollapse=()=>setIsCollapsed(prev=>!prev);return(0,import_jsx_runtime95.jsx)(import_jsx_runtime95.Fragment,{children:isAttachmentType&&!isCollapsed||!isAttachmentType?(0,import_jsx_runtime95.jsx)(import_jsx_runtime95.Fragment,{children:(0,import_jsx_runtime95.jsxs)(import_core113.Table.Tr,{children:[(0,import_jsx_runtime95.jsx)(import_core113.Table.Td,{children:name}),(0,import_jsx_runtime95.jsx)(import_core113.Table.Td,{className:ResourceDiffRow_default.removed,children:originalValue&&(0,import_jsx_runtime95.jsx)(ResourcePropertyDisplay,{path,property,propertyType:originalValue.type,value:originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime95.jsx)(import_core113.Table.Td,{className:ResourceDiffRow_default.added,children:revisedValue&&(0,import_jsx_runtime95.jsx)(ResourcePropertyDisplay,{path,property,propertyType:revisedValue.type,value:revisedValue.value,ignoreMissingValues:!0})})]})}):(0,import_jsx_runtime95.jsxs)(import_core113.Table.Tr,{children:[(0,import_jsx_runtime95.jsx)(import_core113.Table.Td,{children:name}),(0,import_jsx_runtime95.jsx)(import_core113.Table.Td,{colSpan:2,style:{textAlign:"right"},children:(0,import_jsx_runtime95.jsx)(import_core113.Button,{onClick:toggleCollapse,variant:"light",children:"Expand"})})]})})}var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime96=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=(0,import_react_hooks32.useMedplum)(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react63.useState)(!1);(0,import_react63.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react63.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core115.toTypedValue)(original)],typedRevised=[(0,import_core115.toTypedValue)(revised)],result=[],patch=mergePatchOperations((0,import_rfc6902.createPatch)(original,revised));for(let op of patch){let path=op.path,fhirPath=jsonPathToFhirPath(path),property=tryGetElementDefinition(original.resourceType,fhirPath),originalValue=op.op==="add"?void 0:(0,import_core115.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core115.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core115.capitalize)(op.op)} ${fhirPath}`,path:property?.path??original.resourceType+"."+fhirPath,property,originalValue:touchUpValue(property,originalValue),revisedValue:touchUpValue(property,revisedValue)})}return result},[schemaLoaded,original,revised]);return diffTable?(0,import_jsx_runtime96.jsxs)(import_core114.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime96.jsx)(import_core114.Table.Thead,{children:(0,import_jsx_runtime96.jsxs)(import_core114.Table.Tr,{children:[(0,import_jsx_runtime96.jsx)(import_core114.Table.Th,{}),(0,import_jsx_runtime96.jsx)(import_core114.Table.Th,{children:"Before"}),(0,import_jsx_runtime96.jsx)(import_core114.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime96.jsx)(import_core114.Table.Tbody,{children:diffTable.map(row=>{let{key,...rest}=row;return(0,import_jsx_runtime96.jsx)(ResourceDiffRow,{...rest},key)})})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){return(0,import_core115.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}function touchUpValue(property,input){return input&&{type:Array.isArray(input)?input[0].type:input.type,value:fixArray(input,!!property?.isArray)}}function fixArray(input,isArray){let inputValue=(0,import_core115.arrayify)(input).flatMap(v=>v.value);return isArray?inputValue:inputValue[0]}var import_core116=require("@medplum/core"),import_react_hooks33=require("@medplum/react-hooks"),import_react64=require("react");var import_jsx_runtime97=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=(0,import_react_hooks33.useMedplum)(),accessPolicy=medplum.getAccessPolicy(),value=(0,import_react_hooks33.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react64.useState)(!1);(0,import_react64.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{(0,import_core116.tryGetProfile)(profileUrl)?setSchemaLoaded(!0):console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)});else{let schemaName=value.resourceType;medplum.requestSchema(schemaName).then(()=>{setSchemaLoaded(!0)}).catch(console.error)}},[medplum,profileUrl,value]);let accessPolicyResource=(0,import_react64.useMemo)(()=>value&&(0,import_core116.satisfiedAccessPolicy)(value,import_core116.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,value]);return!schemaLoaded||!value?null:(0,import_jsx_runtime97.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:value.resourceType,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues,accessPolicyResource})}var import_core117=require("@mantine/core"),import_core118=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime98=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime98.jsx)(Container,{children:props.children})}function TimelineItem(props){let{resource,profile,padding,popupMenuItems,...others}=props,author=profile??resource.meta?.author,dateTime=props.dateTime??resource.meta?.lastUpdated;return(0,import_jsx_runtime98.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime98.jsxs)(import_core117.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime98.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime98.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime98.jsx)(import_core117.Text,{size:"sm",children:(0,import_jsx_runtime98.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime98.jsxs)(import_core117.Text,{size:"xs",children:[(0,import_jsx_runtime98.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core118.formatDateTime)(dateTime)}),(0,import_jsx_runtime98.jsx)(import_core117.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime98.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime98.jsxs)(import_core117.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime98.jsx)(import_core117.Menu.Target,{children:(0,import_jsx_runtime98.jsx)(import_core117.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core118.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime98.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime98.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime98.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a,timelineResource)-getTime(b,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a,b){return!!b&&a.resourceType===b.resourceType&&a.id===b.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime99=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=(0,import_react_hooks34.useMedplum)(),sender=medplum.getProfile(),inputRef=(0,import_react65.useRef)(null),resource=(0,import_react_hooks34.useResource)(props.value),[history,setHistory]=(0,import_react65.useState)(),[items,setItems]=(0,import_react65.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react65.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react65.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react65.useCallback)(batchResponse=>{let newItems=[];for(let settledResult of batchResponse){if(settledResult.status!=="fulfilled")continue;let bundle=settledResult.value;if(bundle.type==="history"&&setHistory(bundle),bundle.entry)for(let entry of bundle.entry)newItems.push(entry.resource)}sortAndSetItems(newItems)},[sortAndSetItems]),addResource=(0,import_react65.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react65.useCallback)(()=>{let resourceType,id;"resourceType"in props.value?(resourceType=props.value.resourceType,id=props.value.id):[resourceType,id]=props.value.reference?.split("/"),loadTimelineResources(medplum,resourceType,id).then(handleBatchResponse).catch(console.error)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);(0,import_react65.useEffect)(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.error)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime99.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core120.normalizeErrorString)(reason),icon:(0,import_jsx_runtime99.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function onUploadStart(){(0,import_notifications7.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications7.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core120.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime99.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime99.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime99.jsx)(Panel,{children:(0,import_jsx_runtime99.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime99.jsxs)(import_core119.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime99.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime99.jsx)(import_core119.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime99.jsx)(import_core119.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime99.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime99.jsx)(AttachmentButton,{securityContext:(0,import_core120.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime99.jsx)(import_core119.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime99.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`,menu=props.getMenu?props.getMenu({primaryResource:resource,currentResource:item,reloadTimeline:loadTimeline}):void 0;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime99.jsx)(HistoryTimelineItem,{history,resource:item,popupMenuItems:menu},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime99.jsx)(AuditEventTimelineItem,{resource:item,popupMenuItems:menu},key);case"Communication":return(0,import_jsx_runtime99.jsx)(CommunicationTimelineItem,{resource:item,popupMenuItems:menu},key);case"DiagnosticReport":return(0,import_jsx_runtime99.jsx)(DiagnosticReportTimelineItem,{resource:item,popupMenuItems:menu},key);case"Media":return(0,import_jsx_runtime99.jsx)(MediaTimelineItem,{resource:item,popupMenuItems:menu},key);default:return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime99.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime99.jsx)(import_core119.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime99.jsx)(import_core119.Loader,{})})}function HistoryTimelineItem(props){let{history,resource,...rest}=props,previous=getPrevious(history,resource);return previous?(0,import_jsx_runtime99.jsx)(TimelineItem,{resource,padding:!0,...rest,children:(0,import_jsx_runtime99.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime99.jsxs)(TimelineItem,{resource,padding:!0,...rest,children:[(0,import_jsx_runtime99.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime99.jsx)(ResourceTable,{value:resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function getPrevious(history,version){let entries=history.entry??[],index=entries.findIndex(entry=>entry.resource?.meta?.versionId===version.meta?.versionId);if(!(index>=entries.length-1))return entries[index+1].resource}function CommunicationTimelineItem(props){let className=!props.resource.priority||props.resource.priority==="routine"?void 0:ResourceTimeline_default.pinnedComment;return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)("p",{children:props.resource.payload?.[0]?.contentString})})}function MediaTimelineItem(props){let contentType=props.resource.content?.contentType,padding=contentType&&!contentType.startsWith("image/")&&!contentType.startsWith("video/")&&contentType!=="application/pdf";return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(import_core119.ScrollArea,{children:(0,import_jsx_runtime99.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(DiagnosticReportDisplay,{value:props.resource})})}function getProgressMessage(e){if(e.lengthComputable){let percent=100*e.loaded/e.total;return`Uploaded: ${formatFileSize(e.loaded)} / ${formatFileSize(e.total)} ${percent.toFixed(2)}%`}return`Uploaded: ${formatFileSize(e.loaded)}`}function formatFileSize(bytes){if(bytes===0)return"0.00 B";let e=Math.floor(Math.log(bytes)/Math.log(1024));return(bytes/Math.pow(1024,e)).toFixed(2)+" "+" KMGTP".charAt(e)+"B"}var import_jsx_runtime100=require("react/jsx-runtime");function DefaultResourceTimeline(props){let{resource,...rest}=props;return(0,import_jsx_runtime100.jsx)(ResourceTimeline,{value:resource,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`;return Promise.allSettled([medplum.readHistory(resourceType,id),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count:100})])},...rest})}var import_core121=require("@medplum/core");var import_jsx_runtime101=require("react/jsx-runtime");function EncounterTimeline(props){let{encounter,...rest}=props;return(0,import_jsx_runtime101.jsx)(ResourceTimeline,{value:encounter,loadTimelineResources:async(medplum,_resourceType,id)=>Promise.allSettled([medplum.readHistory("Encounter",id),medplum.search("Communication","encounter=Encounter/"+id),medplum.search("Media","encounter=Encounter/"+id)]),createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",encounter:(0,import_core121.createReference)(resource),subject:resource.subject,sender:(0,import_core121.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core121.createReference)(resource),subject:resource.subject,operator:(0,import_core121.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core138=require("@mantine/core"),import_core139=require("@medplum/core"),import_react_hooks36=require("@medplum/react-hooks"),import_react70=require("react");var import_core122=require("@medplum/core");var import_jsx_runtime102=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core122.evalFhirPath)(props.path,props.resource)}catch(err){return console.warn("FhirPathDisplay:",err),null}if(value.length>1)throw new Error(`Component "path" for "FhirPathDisplay" must resolve to a single element. Received ${value.length} elements [${JSON.stringify(value,null,2)}]`);return(0,import_jsx_runtime102.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core136=require("@mantine/core"),import_core137=require("@medplum/core"),import_react_hooks35=require("@medplum/react-hooks");var import_react69=require("react");var import_core123=require("@mantine/core"),import_jsx_runtime103=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime103.jsxs)(import_core123.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime103.jsxs)(import_core123.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime103.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime103.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime103.jsx)(import_core123.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime103.jsx)(import_core123.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core125=require("@mantine/core"),import_core126=require("@medplum/core"),import_react66=require("react");var import_core124=require("@medplum/core");var import_jsx_runtime104=require("react/jsx-runtime"),searchParamToOperators={string:[import_core124.Operator.EQUALS,import_core124.Operator.NOT,import_core124.Operator.CONTAINS,import_core124.Operator.EXACT],fulltext:[import_core124.Operator.EQUALS,import_core124.Operator.NOT,import_core124.Operator.CONTAINS,import_core124.Operator.EXACT],token:[import_core124.Operator.EQUALS,import_core124.Operator.NOT],reference:[import_core124.Operator.EQUALS,import_core124.Operator.NOT],numeric:[import_core124.Operator.EQUALS,import_core124.Operator.NOT_EQUALS,import_core124.Operator.GREATER_THAN,import_core124.Operator.LESS_THAN,import_core124.Operator.GREATER_THAN_OR_EQUALS,import_core124.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core124.Operator.EQUALS,import_core124.Operator.NOT_EQUALS,import_core124.Operator.GREATER_THAN,import_core124.Operator.LESS_THAN,import_core124.Operator.GREATER_THAN_OR_EQUALS,import_core124.Operator.LESS_THAN_OR_EQUALS],date:[import_core124.Operator.EQUALS,import_core124.Operator.NOT_EQUALS,import_core124.Operator.GREATER_THAN,import_core124.Operator.LESS_THAN,import_core124.Operator.GREATER_THAN_OR_EQUALS,import_core124.Operator.LESS_THAN_OR_EQUALS,import_core124.Operator.STARTS_AFTER,import_core124.Operator.ENDS_BEFORE,import_core124.Operator.APPROXIMATELY],datetime:[import_core124.Operator.EQUALS,import_core124.Operator.NOT_EQUALS,import_core124.Operator.GREATER_THAN,import_core124.Operator.LESS_THAN,import_core124.Operator.GREATER_THAN_OR_EQUALS,import_core124.Operator.LESS_THAN_OR_EQUALS,import_core124.Operator.STARTS_AFTER,import_core124.Operator.ENDS_BEFORE,import_core124.Operator.APPROXIMATELY],uri:[import_core124.Operator.EQUALS,import_core124.Operator.NOT,import_core124.Operator.ABOVE,import_core124.Operator.BELOW]},operatorNames={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",sw:"starts with",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",present:"present",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addNext24HoursFilter(definition,field){let now=new Date,endTime=new Date(now.getTime()+24*60*60*1e3);return addDateFilterBetween(definition,field,now,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core124.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core124.Operator.LESS_THAN_OR_EQUALS,d2),definition}function addDateFilterImpl(definition,field,op,value){return addFilter(definition,field,op,value.toISOString())}function addMissingFilter(definition,field,value=!0){return addFilter(definition,field,import_core124.Operator.MISSING,value.toString())}function setOffset(definition,offset){return definition.offset===offset?definition:{...definition,offset,name:void 0}}function setPage(definition,page){let count=definition.count??import_core124.DEFAULT_SEARCH_COUNT,newOffset=(page-1)*count;return setOffset(definition,newOffset)}function setSort(definition,sort,desc){return sort===getSortField(definition)&&desc!==void 0&&desc===isSortDescending(definition)?definition:{...definition,sortRules:[{code:sort,descending:!!desc}],name:void 0}}function toggleSort(definition,key){let desc=!1;return getSortField(definition)===key&&(desc=!isSortDescending(definition)),setSort(definition,key,desc)}function getSortField(definition){let sortRules=definition.sortRules;if(!sortRules||sortRules.length===0)return;let field=sortRules[0].code;return field.startsWith("-")?field.substr(1):field}function isSortDescending(definition){let sortRules=definition.sortRules;return!sortRules||sortRules.length===0?!1:!!sortRules[0].descending}function getSearchOperators(searchParam){return searchParamToOperators[searchParam.type]}function getOpString(op){return operatorNames[op]??""}function buildFieldNameString(key){let tmp=key;return tmp.includes(".")&&(tmp=tmp.split(".").pop()),tmp==="versionId"?"Version ID":(tmp=tmp.replace("[x]",""),tmp=tmp.replace(/([A-Z])/g," $1"),tmp=tmp.replace(/[-_]/g," "),tmp=tmp.replace(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core124.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?(0,import_jsx_runtime104.jsx)(MedplumLink,{to:`/${resource.resourceType}/${resource.id}`,children:resource.id}):key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core124.formatDateTime)(resource.meta?.lastUpdated):field.elementDefinition&&`${resource.resourceType}.${field.name}`===field.elementDefinition.path?renderPropertyValue(resource,field.elementDefinition):field.searchParams&&field.searchParams.length===1&&field.name===field.searchParams[0].code?renderSearchParameterValue(resource,field.searchParams[0]):null}function renderPropertyValue(resource,elementDefinition){let path=elementDefinition.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[value,propertyType]=getValueAndType({type:resource.resourceType,value:resource},path);return value?(0,import_jsx_runtime104.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core124.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime104.jsx)(import_jsx_runtime104.Fragment,{children:value.map((v,index)=>(0,import_jsx_runtime104.jsx)(ResourcePropertyDisplay,{propertyType:v.type,value:v.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime105=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react66.useRef)(!1),[state,setState]=(0,import_react66.useState)({search:JSON.parse((0,import_core126.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react66.useState)(!1);(0,import_react66.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react66.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core126.getDataType)(resourceType),searchParams=(0,import_core126.getSearchParameters)(resourceType);return(0,import_core126.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime105.jsx)(import_core125.Modal,{title:"Fields",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>{props.onCancel()},size:"auto",withOverlay:!0,closeOnClickOutside:!1,overlayProps:{onMouseDownCapture:()=>{wasDropdownOpen.current=isDropdownOpen},onClick:()=>{wasDropdownOpen.current||props.onCancel(),wasDropdownOpen.current=!1},children:(0,import_jsx_runtime105.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime105.jsxs)(import_core125.Stack,{children:[(0,import_jsx_runtime105.jsx)(import_core125.MultiSelect,{style:{width:550},placeholder:"Select fields to display",data:allFields,value:state.search.fields??[],onChange:handleChange,onDropdownOpen:()=>setIsDropdownOpen(!0),onDropdownClose:()=>setIsDropdownOpen(!1),maxDropdownHeight:"250px",clearButtonProps:{"aria-label":"Clear selection"},clearable:!0,searchable:!0}),(0,import_jsx_runtime105.jsx)(import_core125.Group,{justify:"flex-end",children:(0,import_jsx_runtime105.jsx)(import_core125.Button,{onClick:()=>props.onOk(state.search),children:"OK"})})]})})}function getFieldsList(typeSchema,searchParams){let result=[],keys=new Set,names=new Set;for(let key of Object.keys(typeSchema.elements))result.push(key),keys.add(key.toLowerCase()),names.add(buildFieldNameString(key));if(searchParams)for(let code of Object.keys(searchParams)){let name=buildFieldNameString(code);!keys.has(code)&&!names.has(name)&&(result.push(code),keys.add(code),names.add(name))}return result}var import_core129=require("@mantine/core"),import_core130=require("@medplum/core");var import_react67=require("react");var import_core127=require("@mantine/core"),import_core128=require("@medplum/core");var import_jsx_runtime106=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core128.getSearchParameterDetails)(props.resourceType,props.searchParam),name=props.name??"filter-value";switch(details.type){case import_core128.SearchParameterType.REFERENCE:return(0,import_jsx_runtime106.jsx)(ReferenceInput,{name,defaultValue:props.defaultValue?{reference:props.defaultValue}:void 0,targetTypes:props.searchParam.target,autoFocus:props.autoFocus,onChange:newReference=>{newReference?props.onChange(newReference.reference):props.onChange("")}});case import_core128.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime106.jsx)(import_core127.Checkbox,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultChecked:props.defaultValue==="true",autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.checked.toString())});case import_core128.SearchParameterType.DATE:return(0,import_jsx_runtime106.jsx)(import_core127.TextInput,{type:"date",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case import_core128.SearchParameterType.DATETIME:return(0,import_jsx_runtime106.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core128.SearchParameterType.NUMBER:return(0,import_jsx_runtime106.jsx)(import_core127.TextInput,{type:"number",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case import_core128.SearchParameterType.QUANTITY:return(0,import_jsx_runtime106.jsx)(QuantityInput,{name,path:"",defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime106.jsx)(import_core127.TextInput,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value),placeholder:"Search value"})}}function tryParseQuantity(value){if(value){let[valueString,systemString,unitString]=value.split("|");if(valueString)return{value:parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime107=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react67.useState)((0,import_core130.deepClone)(props.search)),searchRef=(0,import_react67.useRef)(search);searchRef.current=search,(0,import_react67.useEffect)(()=>{setSearch((0,import_core130.deepClone)(props.search))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}let resourceType=props.search.resourceType,searchParams=(0,import_core130.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime107.jsx)(import_core129.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime107.jsxs)(Form,{onSubmit:()=>props.onOk(searchRef.current),children:[(0,import_jsx_runtime107.jsxs)("div",{children:[(0,import_jsx_runtime107.jsxs)("table",{children:[(0,import_jsx_runtime107.jsxs)("colgroup",{children:[(0,import_jsx_runtime107.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:40}})]}),(0,import_jsx_runtime107.jsx)("thead",{children:(0,import_jsx_runtime107.jsxs)("tr",{children:[(0,import_jsx_runtime107.jsx)("th",{children:"Field"}),(0,import_jsx_runtime107.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime107.jsx)("th",{children:"Value"}),(0,import_jsx_runtime107.jsx)("th",{})]})}),(0,import_jsx_runtime107.jsx)("tbody",{children:filters.map((filter,index)=>(0,import_jsx_runtime107.jsx)(FilterRowInput,{id:`filter-${index}-row`,resourceType,searchParams,value:filter,onChange:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters))},onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${index}-row`))})]}),(0,import_jsx_runtime107.jsx)(ArrayAddButton,{propertyDisplayName:"Filter",onClick:()=>onAddFilter({})})]}),(0,import_jsx_runtime107.jsx)(import_core129.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime107.jsx)(SubmitButton,{children:"OK"})})]})})}function FilterRowInput(props){let value=props.value,valueRef=(0,import_react67.useRef)(value);valueRef.current=value;function setFilterCode(newCode){valueRef.current.code=newCode,valueRef.current.operator=import_core130.Operator.EQUALS,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterOperator(newOperator){valueRef.current.operator=newOperator,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterValue(newFilterValue){valueRef.current.value=newFilterValue,props.onChange(valueRef.current)}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime107.jsxs)("tr",{children:[(0,import_jsx_runtime107.jsx)("td",{children:(0,import_jsx_runtime107.jsx)(import_core129.NativeSelect,{"data-testid":`${props.id}-filter-field`,defaultValue:props.value.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime107.jsx)("td",{children:operators&&(0,import_jsx_runtime107.jsx)(import_core129.NativeSelect,{"data-testid":`${props.id}-filter-operation`,defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]},`${props.id}-filter-value-${props.value.code}`)}),(0,import_jsx_runtime107.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime107.jsx)(SearchFilterValueInput,{name:`${props.id}-filter-value`,resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue},`${props.id}-filter-value-${props.value.code}-${props.value.operator}`)}),(0,import_jsx_runtime107.jsx)("td",{children:props.onDelete&&(0,import_jsx_runtime107.jsx)(import_core129.ActionIcon,{variant:"outline",color:"red",radius:"xl","aria-label":"Delete filter",onClick:props.onDelete,children:(0,import_jsx_runtime107.jsx)(IconX,{style:{width:"70%",height:"70%"},stroke:1.5})})})]})}var import_core131=require("@mantine/core"),import_react68=require("react");var import_jsx_runtime108=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react68.useState)(props.defaultValue??"");if(!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime108.jsx)(import_core131.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime108.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime108.jsxs)(import_core131.Grid,{children:[(0,import_jsx_runtime108.jsx)(import_core131.Grid.Col,{span:10,children:(0,import_jsx_runtime108.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime108.jsx)(import_core131.Grid.Col,{span:2,children:(0,import_jsx_runtime108.jsx)(import_core131.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core132=require("@medplum/core");var import_jsx_runtime109=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core132.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core132.Operator.EQUALS||filter.operator===import_core132.Operator.NOT_EQUALS))return(0,import_jsx_runtime109.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core132.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core132.SearchParameterType.DATETIME)return(0,import_jsx_runtime109.jsx)(import_jsx_runtime109.Fragment,{children:(0,import_core132.formatDateTime)(filter.value)})}return(0,import_jsx_runtime109.jsx)(import_jsx_runtime109.Fragment,{children:filter.value})}var import_core133=require("@mantine/core"),import_core134=require("@medplum/core");var import_jsx_runtime110=require("react/jsx-runtime");function SearchPopupMenu(props){if(!props.searchParams)return null;function onSort(searchParam,desc){onChange(setSort(props.search,searchParam.code,desc))}function onClear(searchParam){onChange(clearFiltersOnField(props.search,searchParam.code))}function onPrompt(searchParam,operator){props.onPrompt(searchParam,{code:searchParam.code,operator,value:""})}function onChange(definition){props.onChange(definition)}return props.searchParams.length===1?(0,import_jsx_runtime110.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime110.jsx)(import_core133.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime110.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime110.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime110.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime110.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime110.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime110.jsxs)(import_core133.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNext24HoursFilter(props.search,code)),children:"Next 24 Hours"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core133.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core133.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core133.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core133.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core134.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core133.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core135=require("@medplum/core");function getFieldDefinitions(search){let resourceType=search.resourceType,fields=[];for(let name of search.fields||["id","_lastUpdated"])fields.push(getFieldDefinition(resourceType,name));return fields}function getFieldDefinition(resourceType,name){if(name==="_lastUpdated")return{name:"_lastUpdated",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_lastUpdated",name:"_lastUpdated",type:"date",expression:"Resource.meta.lastUpdated"}]};if(name==="meta.versionId")return{name:"meta.versionId",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_versionId",name:"_versionId",type:"token",expression:"Resource.meta.versionId"}]};let exactElementDefinition=(0,import_core135.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core135.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core135.getSearchParameters)(resourceType),searchParams;if(allSearchParams){let pathRegex=new RegExp(`${resourceType}\\.${name.replaceAll("[x]","")}([^\\w-]|$)`);searchParams=Object.values(allSearchParams).filter(p=>!!p.expression&&pathRegex.test(p?.expression)),searchParams.length===0&&(searchParams=void 0)}return{name,elementDefinition:exactElementDefinition,searchParams}}if(exactSearchParam){let details=(0,import_core135.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime111=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change"),this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load"),this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click"),this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=(0,import_react_hooks35.useMedplum)(),[outcome,setOutcome]=(0,import_react69.useState)(),{search,onLoad}=props,[memoizedSearch,setMemoizedSearch]=(0,import_react69.useState)(search);(0,import_core137.deepEquals)(search,memoizedSearch)||setMemoizedSearch(search);let[state,setState]=(0,import_react69.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react69.useRef)(state);stateRef.current=state;let total=memoizedSearch.total??"accurate",loadResults=(0,import_react69.useCallback)(options=>{setOutcome(void 0),medplum.requestSchema(memoizedSearch.resourceType).then(()=>medplum.search(memoizedSearch.resourceType,(0,import_core137.formatSearchQuery)({...memoizedSearch,total,fields:void 0}),options)).then(response=>{setState({...stateRef.current,searchResponse:response}),onLoad&&onLoad(new SearchLoadEvent(response))}).catch(reason=>{setState({...stateRef.current,searchResponse:void 0}),setOutcome((0,import_core137.normalizeOperationOutcome)(reason))})},[medplum,memoizedSearch,total,onLoad]),refreshResults=(0,import_react69.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react69.useEffect)(()=>{loadResults()},[loadResults]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...stateRef.current.selected};checked?newSelected[id]=!0:delete newSelected[id],setState({...stateRef.current,selected:newSelected})}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},searchResponse=stateRef.current.searchResponse;checked&&searchResponse?.entry&&searchResponse.entry.forEach(entry=>{entry.resource?.id&&(newSelected[entry.resource.id]=!0)}),setState({...stateRef.current,selected:newSelected})}function isAllSelected(){let state2=stateRef.current;if(!state2.searchResponse?.entry||state2.searchResponse.entry.length===0)return!1;for(let e of state2.searchResponse.entry)if(e.resource?.id&&!state2.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=isAuxClick(e);!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if(outcome)return(0,import_jsx_runtime111.jsx)(OperationOutcomeAlert,{outcome});if(!(0,import_core137.isDataTypeLoaded)(memoizedSearch.resourceType))return(0,import_jsx_runtime111.jsx)(import_core136.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime111.jsx)(import_core136.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(memoizedSearch),resourceType=memoizedSearch.resourceType,lastResult=state.searchResponse,resources=lastResult?.entry?.map(e=>e.resource),buttonVariant="subtle",buttonColor="gray",iconSize=16,isMobile=window.innerWidth<768;return(0,import_jsx_runtime111.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime111.jsxs)(import_core136.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime111.jsxs)(import_core136.Group,{gap:2,children:[(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Fields"}),(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0,dialogOpenTime:Date.now()}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime111.jsx)(import_core136.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime111.jsxs)(import_core136.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime111.jsxs)(import_core136.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(memoizedSearch,lastResult).toLocaleString(),"-",getEnd(memoizedSearch,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${memoizedSearch.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime111.jsx)(import_core136.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime111.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime111.jsxs)(import_core136.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime111.jsxs)(import_core136.Table.Thead,{children:[(0,import_jsx_runtime111.jsxs)(import_core136.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core136.Table.Th,{children:(0,import_jsx_runtime111.jsx)("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core136.Table.Th,{children:(0,import_jsx_runtime111.jsxs)(import_core136.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime111.jsx)(import_core136.Menu.Target,{children:(0,import_jsx_runtime111.jsx)(import_core136.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime111.jsxs)(import_core136.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime111.jsx)(import_core136.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime111.jsx)(import_core136.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime111.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime111.jsx)(SearchPopupMenu,{search:memoizedSearch,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter,dialogOpenTime:Date.now()})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime111.jsxs)(import_core136.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core136.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core136.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime111.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:memoizedSearch.filters})},field.name))]})]}),(0,import_jsx_runtime111.jsx)(import_core136.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime111.jsxs)(import_core136.Table.Tr,{className:SearchControl_default.tr,"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core136.Table.Td,{children:(0,import_jsx_runtime111.jsx)("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${resource.id}`,checked:!!state.selected[resource.id],onChange:e=>handleSingleCheckboxClick(e,resource.id)})}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core136.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),!resources?.length&&(0,import_jsx_runtime111.jsx)(Container,{children:(0,import_jsx_runtime111.jsx)(import_core136.Center,{style:{height:150},children:(0,import_jsx_runtime111.jsx)(import_core136.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime111.jsx)(import_core136.Center,{m:"md",p:"md",children:(0,import_jsx_runtime111.jsx)(import_core136.Pagination,{value:getPage(memoizedSearch),total:getTotalPages(memoizedSearch,lastResult),onChange:newPage=>emitSearchChange(setPage(memoizedSearch,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),(0,import_jsx_runtime111.jsx)(SearchFieldEditor,{search:memoizedSearch,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}},`search-field-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchFilterEditor,{search:memoizedSearch,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}},`search-filter-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}},`search-export-dialog-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchFilterValueDialog,{visible:stateRef.current.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(memoizedSearch,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},`search-filter-dialog-${state.dialogOpenTime}`)]})}var MemoizedSearchControl=SearchControl;function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p=>p.code===f.code));return filters.length===0?(0,import_jsx_runtime111.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime111.jsx)(import_jsx_runtime111.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime111.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime111.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})]},`filter-${filter.code}-${filter.operator}-${filter.value}`))})}function getPage(search){return Math.floor((search.offset??0)/(search.count??import_core137.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core137.DEFAULT_SEARCH_COUNT,total=getTotal(search,lastResult);return Math.ceil(total/pageSize)}function getStart(search,lastResult){return Math.min(getTotal(search,lastResult),(search.offset??0)+1)}function getEnd(search,lastResult){return Math.max(getStart(search,lastResult)+(lastResult.entry?.length??0)-1,0)}function getTotal(search,lastResult){let total=lastResult.total;return total===void 0&&(total=(search.offset??0)+(lastResult.entry?.length??0)+(lastResult.link?.some(l=>l.relation==="next")?1:0)),total}var import_jsx_runtime112=require("react/jsx-runtime");function FhirPathTable(props){let medplum=(0,import_react_hooks36.useMedplum)(),[schemaLoaded,setSchemaLoaded]=(0,import_react70.useState)(!1),[outcome,setOutcome]=(0,import_react70.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react70.useState)(),[selected,setSelected]=(0,import_react70.useState)({}),responseRef=(0,import_react70.useRef)(response);responseRef.current=response;let selectedRef=(0,import_react70.useRef)({});selectedRef.current=selected,(0,import_react70.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core139.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selectedRef.current};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=responseRef.current?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=responseRef.current?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selectedRef.current[resource.id])return!1;return!0}function handleRowClick(e,resource){isCheckboxCell(e.target)||(killEvent(e),e.button!==1&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),e.button===1&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e)))}if((0,import_react70.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime112.jsx)(import_core138.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime112.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime112.jsxs)(import_core138.Table,{children:[(0,import_jsx_runtime112.jsx)(import_core138.Table.Thead,{children:(0,import_jsx_runtime112.jsxs)(import_core138.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime112.jsx)(import_core138.Table.Th,{children:(0,import_jsx_runtime112.jsx)("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>(0,import_jsx_runtime112.jsx)(import_core138.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime112.jsx)(import_core138.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime112.jsxs)(import_core138.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime112.jsx)(import_core138.Table.Td,{children:(0,import_jsx_runtime112.jsx)("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${resource.id}`,checked:!!selected[resource.id],onChange:e=>handleSingleCheckboxClick(e,resource.id)})}),fields.map(field=>(0,import_jsx_runtime112.jsx)(import_core138.Table.Td,{children:(0,import_jsx_runtime112.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime112.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime112.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime112.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime112.jsx)(import_core138.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react70.memo)(FhirPathTable);var import_core140=require("@mantine/core");var InfoBar_default={root:"InfoBar_root",entry:"InfoBar_entry",key:"InfoBar_key",value:"InfoBar_value"};var import_jsx_runtime113=require("react/jsx-runtime");function InfoBar(props){return(0,import_jsx_runtime113.jsx)(import_core140.ScrollArea,{children:(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.root,children:props.children})})}InfoBar.Entry=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.entry,children:props.children})};InfoBar.Key=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.key,children:props.children})};InfoBar.Value=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.value,children:props.children})};var import_core143=require("@mantine/core"),import_react_hooks37=require("@medplum/react-hooks");var import_core141=require("@mantine/core"),import_core142=require("@medplum/core");var import_jsx_runtime114=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime114.jsx)(import_core141.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime114.jsxs)(import_core141.Group,{children:[group.measureScore&&(0,import_jsx_runtime114.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime114.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(import_core141.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime114.jsx)(import_core141.Text,{fz:"xs",c:"dimmed",mb:8,children:measure.subtitle})]})}function MeasureReportPopulation(props){let{group}=props,populations=group.population,numerator=populations?.find(p=>(0,import_core142.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core142.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime114.jsxs)(import_core141.Box,{children:[(0,import_jsx_runtime114.jsx)(import_core141.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime114.jsx)(import_core141.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime114.jsxs)(import_core141.Box,{children:[(0,import_jsx_runtime114.jsx)(import_core141.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime114.jsx)(import_core141.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime114.jsx)(import_core141.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime114.jsx)(import_core141.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime114.jsx)(import_core141.Flex,{justify:"center",children:(0,import_jsx_runtime114.jsxs)(import_core141.Text,{fw:700,fz:18,children:[numeratorCount," / ",denominatorCount]})})})}function MeasureScore(props){let{group}=props,unit=group.measureScore?.unit??group.measureScore?.code;return(0,import_jsx_runtime114.jsx)(import_jsx_runtime114.Fragment,{children:unit==="%"?(0,import_jsx_runtime114.jsx)(import_core141.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime114.jsx)(import_core141.Flex,{justify:"center",children:(0,import_jsx_runtime114.jsx)(import_core141.Text,{fw:700,fz:18,children:(0,import_jsx_runtime114.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime114.jsx)(import_core141.Flex,{h:120,align:"center",children:(0,import_jsx_runtime114.jsx)(import_core141.Title,{order:3,children:(0,import_jsx_runtime114.jsx)(QuantityDisplay,{value:group.measureScore})})})})}function groupValue(group){let score=group.measureScore?.value,unit=group.measureScore?.unit;return score?score<=1&&unit==="%"?score*100:score:0}function groupColor(score){return score<=33?"red":score<=67?"yellow":"green"}var import_jsx_runtime115=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=(0,import_react_hooks37.useResource)(props.measureReport),[measure]=(0,import_react_hooks37.useSearchOne)("Measure",{url:report?.measure});return report?(0,import_jsx_runtime115.jsxs)(import_core143.Box,{children:[measure&&(0,import_jsx_runtime115.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime115.jsx)(import_core143.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime115.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core144=require("@mantine/core"),import_react_hooks38=require("@medplum/react-hooks"),import_react71=require("react"),import_jsx_runtime116=require("react/jsx-runtime");function NotificationIcon(props){let medplum=(0,import_react_hooks38.useMedplum)(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react71.useState)(0),updateCount=(0,import_react71.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react71.useEffect)(()=>{updateCount("default")},[updateCount]),(0,import_react_hooks38.useSubscription)(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime116.jsx)(import_core144.Tooltip,{label,children:(0,import_jsx_runtime116.jsx)(import_core144.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime116.jsx)(import_core144.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core145=require("@mantine/core"),import_notifications8=require("@mantine/notifications"),import_core146=require("@medplum/core"),import_react_hooks39=require("@medplum/react-hooks");var import_react72=require("react");var import_jsx_runtime117=require("react/jsx-runtime"),NOTIFICATION_ID="patient-export",NOTIFICATION_TITLE="Patient Export",formats={everything:{operation:"$everything",extension:"json",contentType:import_core146.ContentType.FHIR_JSON},summary:{operation:"$summary",extension:"json",contentType:import_core146.ContentType.FHIR_JSON},ccda:{operation:"$ccda-export",extension:"xml",contentType:import_core146.ContentType.CDA_XML},ccdaReferral:{operation:"$ccda-export",type:"referral",extension:"xml",contentType:import_core146.ContentType.CDA_XML}};function PatientExportForm(props){let medplum=(0,import_react_hooks39.useMedplum)(),{patient}=props,handleSubmit=(0,import_react72.useCallback)(async data2=>{let patientId=(0,import_core146.resolveId)(patient),format=data2.format,{operation,type,contentType,extension}=formats[format],url=medplum.fhirUrl("Patient",patientId,operation),params={};type&&(params.type=type),data2.author&&(params.author={reference:data2.author}),data2.authoredOn&&(params.authoredOn=convertLocalToIso(data2.authoredOn)),data2.startDate&&(params.start=data2.startDate),data2.endDate&&(params.end=data2.endDate),import_notifications8.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,loading:!0,message:"Exporting...",autoClose:!1,withCloseButton:!1});try{let response=await medplum.post(url,params,void 0,{cache:"no-cache",headers:{Accept:contentType}}),fileName=`Patient-export-${patientId}-${new Date().toISOString().replaceAll(":","-")}.${extension}`;saveData(response,fileName,contentType),import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"green",message:"Done",icon:(0,import_jsx_runtime117.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0})}catch(err){import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:(0,import_core146.normalizeErrorString)(err),icon:(0,import_jsx_runtime117.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}},[medplum,patient]);return(0,import_jsx_runtime117.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime117.jsxs)(import_core145.Stack,{children:[(0,import_jsx_runtime117.jsx)(FormSection,{title:"Export Format",description:"Required",withAsterisk:!0,children:(0,import_jsx_runtime117.jsx)(import_core145.SegmentedControl,{name:"format",data:[{label:"FHIR Everything",value:"everything"},{label:"Patient Summary",value:"summary"},{label:"C-CDA",value:"ccda"},{label:"C-CDA Referral",value:"ccdaReferral"}],fullWidth:!0})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Author",description:"Optional author for composition. Default value is current user.",children:(0,import_jsx_runtime117.jsx)(ReferenceInput,{name:"author",placeholder:"Author",targetTypes:["Organization","Practitioner","PractitionerRole"]})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Authored On",description:"Optional date for composition authored on. Default value is current date.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"authoredOn",placeholder:"Authored on"})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Start Date",description:"The start date of care. If no start date is provided, all records prior to the end date are in scope.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"startDate",placeholder:"Start date"})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"End Date",description:"The end date of care. If no end date is provided, all records subsequent to the start date are in scope.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"endDate",placeholder:"End date"})}),(0,import_jsx_runtime117.jsx)(import_core145.Group,{justify:"right",children:(0,import_jsx_runtime117.jsx)(SubmitButton,{children:"Request Export"})})]})})}function saveData(data2,fileName,contentType){let content=typeof data2=="string"?data2:JSON.stringify(data2,null,2),blob=new Blob([content],{type:contentType}),url=window.URL.createObjectURL(blob),a=document.createElement("a");document.body.appendChild(a),a.style.display="none",a.href=url,a.download=fileName,a.click(),window.URL.revokeObjectURL(url)}var import_core147=require("@medplum/core"),import_react_hooks40=require("@medplum/react-hooks");function getDefaultColor(patient){if(patient.gender==="male")return"blue";if(patient.gender==="female")return"pink"}var import_jsx_runtime118=require("react/jsx-runtime");function PatientHeader(props){let patient=(0,import_react_hooks40.useResource)(props.patient);return patient?(0,import_jsx_runtime118.jsxs)(InfoBar,{children:[(0,import_jsx_runtime118.jsx)(ResourceAvatar,{value:patient,size:"lg",color:getDefaultColor(patient)}),(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Name"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:(0,import_jsx_runtime118.jsx)(MedplumLink,{to:patient,fw:500,children:patient.name?(0,import_jsx_runtime118.jsx)(HumanNameDisplay,{value:patient.name[0],options:{use:!1}}):"[blank]"})})]}),patient.birthDate&&(0,import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment,{children:[(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"DoB"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.birthDate})]}),(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Age"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:(0,import_core147.calculateAgeString)(patient.birthDate)})]})]}),patient.gender&&(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Gender"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.gender})]}),patient.address&&(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"State"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.address[0]?.state})]}),patient.identifier?.map(identifier=>(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:identifier?.system}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:identifier?.value})]},`${identifier?.system}-${identifier?.value}`))]}):null}var import_core175=require("@mantine/core"),import_core176=require("@medplum/core"),import_react_hooks49=require("@medplum/react-hooks");var import_react84=require("react");var import_core152=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core153=require("@medplum/core"),import_react_hooks41=require("@medplum/react-hooks"),import_react75=require("react");var import_core148=require("@mantine/core"),import_core149=require("@medplum/core"),import_react73=require("react");var import_jsx_runtime119=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core149.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react73.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react73.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react73.useCallback)(formData=>{onSubmit((0,import_core149.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core149.createReference)(patient),encounter:encounter?(0,import_core149.createReference)(encounter):void 0,code,clinicalStatus,onsetDateTime:formData.onsetDateTime?formData.onsetDateTime:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0},PATIENT_ALLERGY_PROFILE))},[patient,encounter,allergy,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime119.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime119.jsxs)(import_core148.Stack,{children:[(0,import_jsx_runtime119.jsx)(CodeableConceptInput,{name:"allergy",label:"Code",path:"AllergyIntolerance.code","data-autofocus":!0,binding:HTTP+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1186.8",maxValues:1,defaultValue:allergy?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime119.jsx)(import_core148.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime119.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core149.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",maxValues:1,defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime119.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime119.jsx)(import_core148.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime119.jsx)(SubmitButton,{children:"Save"})})]})},allergy?.id)}var import_core150=require("@mantine/core");var import_react74=require("react");var CollapsibleSection_default={root:"CollapsibleSection_root",header:"CollapsibleSection_header",addButton:"CollapsibleSection_addButton",chevron:"CollapsibleSection_chevron",title:"CollapsibleSection_title"};var import_jsx_runtime120=require("react/jsx-runtime");function CollapsibleSection(props){let{title,children,onAdd}=props,[collapsed,setCollapsed]=(0,import_react74.useState)(!1);return(0,import_jsx_runtime120.jsxs)(import_core150.Box,{className:CollapsibleSection_default.root,children:[(0,import_jsx_runtime120.jsxs)(import_core150.Group,{justify:"space-between",className:CollapsibleSection_default.header,children:[(0,import_jsx_runtime120.jsxs)(import_core150.Group,{gap:8,children:[(0,import_jsx_runtime120.jsx)(import_core150.ActionIcon,{variant:"subtle",onClick:()=>setCollapsed(c=>!c),"aria-label":collapsed?`Show ${title.toLowerCase()}`:`Hide ${title.toLowerCase()}`,className:CollapsibleSection_default.chevron,"data-collapsed":collapsed||void 0,size:"md",children:(0,import_jsx_runtime120.jsx)(IconChevronDown,{size:20})}),(0,import_jsx_runtime120.jsx)(import_core150.Text,{fz:"md",fw:800,onClick:()=>setCollapsed(c=>!c),className:CollapsibleSection_default.title,children:title})]}),onAdd&&(0,import_jsx_runtime120.jsx)(import_core150.ActionIcon,{role:"button","aria-label":"Add item",className:CollapsibleSection_default.addButton,variant:"subtle",onClick:e=>{killEvent(e),onAdd()},size:"md",children:(0,import_jsx_runtime120.jsx)(IconPlus,{size:18})})]}),(0,import_jsx_runtime120.jsx)(import_core150.Collapse,{in:!collapsed,children:(0,import_jsx_runtime120.jsx)(import_core150.Box,{ml:"var(--mantine-spacing-xl)",mt:"xs",mb:"md",children})})]})}var import_core151=require("@mantine/core");var SummaryItem_default={gradient:"SummaryItem_gradient",container:"SummaryItem_container",chevron:"SummaryItem_chevron",item:"SummaryItem_item",itemText:"SummaryItem_itemText"};var import_jsx_runtime121=require("react/jsx-runtime");function SummaryItem(props){let{children,onClick}=props;return(0,import_jsx_runtime121.jsxs)(import_core151.Box,{className:SummaryItem_default.item,onClick,children:[children,(0,import_jsx_runtime121.jsx)("div",{className:SummaryItem_default.gradient}),(0,import_jsx_runtime121.jsx)("div",{className:SummaryItem_default.container,children:(0,import_jsx_runtime121.jsx)(import_core151.ActionIcon,{className:SummaryItem_default.chevron,size:"md",variant:"transparent",tabIndex:-1,children:(0,import_jsx_runtime121.jsx)(IconChevronRight,{size:16,stroke:2.5})})})]})}var import_jsx_runtime122=require("react/jsx-runtime");function Allergies(props){let medplum=(0,import_react_hooks41.useMedplum)(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react75.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react75.useState)(),sortedAllergies=(0,import_react75.useMemo)(()=>[...allergies].sort((a,b)=>{let aStatus=a.clinicalStatus?.coding?.[0]?.code,bStatus=b.clinicalStatus?.coding?.[0]?.code;return aStatus==="active"&&bStatus!=="active"?-1:aStatus!=="active"&&bStatus==="active"?1:(0,import_core153.getDisplayString)(a).localeCompare((0,import_core153.getDisplayString)(b))}),[allergies]),handleSubmit=(0,import_react75.useCallback)(async allergy=>{if(allergy.id){let updatedAllergy=await medplum.updateResource(allergy);setAllergies(allergies.map(a=>a.id===updatedAllergy.id?updatedAllergy:a))}else{let newAllergy=await medplum.createResource(allergy);setAllergies([...allergies,newAllergy])}setEditAllergy(void 0),close()},[medplum,allergies,close]);return(0,import_jsx_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:[(0,import_jsx_runtime122.jsx)(CollapsibleSection,{title:"Allergies",onAdd:()=>{setEditAllergy(void 0),open()},children:sortedAllergies.length>0?(0,import_jsx_runtime122.jsx)(import_core152.Box,{children:(0,import_jsx_runtime122.jsx)(import_core152.Flex,{direction:"column",gap:8,children:sortedAllergies.map(allergy=>{let status=allergy.clinicalStatus?.coding?.[0]?.code||"unknown";return(0,import_jsx_runtime122.jsx)(SummaryItem,{onClick:()=>{setEditAllergy(allergy),open()},children:(0,import_jsx_runtime122.jsxs)(import_core152.Box,{children:[(0,import_jsx_runtime122.jsx)(import_core152.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core153.getDisplayString)(allergy)}),(0,import_jsx_runtime122.jsx)(import_core152.Group,{mt:2,gap:4,children:status&&(0,import_jsx_runtime122.jsx)(StatusBadge,{color:getClinicalStatusColor(status),variant:"light",status})})]})},allergy.id)})})}):(0,import_jsx_runtime122.jsx)(import_core152.Text,{children:"(none)"})}),(0,import_jsx_runtime122.jsx)(import_core152.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime122.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}function getClinicalStatusColor(status){if(!status)return"gray";switch(status){case"active":return"red";case"inactive":return"orange";case"resolved":return"blue";default:return"gray"}}var import_core154=require("@mantine/core"),import_core155=require("@medplum/core"),import_react_hooks42=require("@medplum/react-hooks");var PatientSummary_default={panel:"PatientSummary_panel",patientSummaryBadge:"PatientSummary_patientSummaryBadge",patientSummaryAddButton:"PatientSummary_patientSummaryAddButton",patientSummaryHeader:"PatientSummary_patientSummaryHeader",patientSummaryCollapseIcon:"PatientSummary_patientSummaryCollapseIcon",collapsed:"PatientSummary_collapsed"};var import_jsx_runtime123=require("react/jsx-runtime");function CoverageItem(props){let{coverage,organization,onClickResource}=props,coverageResource=(0,import_react_hooks42.useResource)(coverage),organizationResource=(0,import_react_hooks42.useResource)(organization),payorName="Unknown Payor";organizationResource&&"name"in organizationResource&&typeof organizationResource.name=="string"&&(payorName=organizationResource.name);let detailsText=`ID: ${coverageResource?.subscriberId??"N/A"}${formatClassInfo(coverageResource)?` \xB7 ${formatClassInfo(coverageResource)}`:""}`;return(0,import_jsx_runtime123.jsx)(SummaryItem,{onClick:()=>{coverageResource&&onClickResource?.(coverageResource)},children:(0,import_jsx_runtime123.jsxs)(import_core154.Box,{children:[(0,import_jsx_runtime123.jsx)(import_core154.Text,{fw:500,className:PatientSummary_default.itemText,children:payorName}),(0,import_jsx_runtime123.jsx)(import_core154.Text,{fw:500,className:PatientSummary_default.itemText,children:detailsText}),(0,import_jsx_runtime123.jsxs)(import_core154.Group,{mt:2,gap:4,children:[(0,import_jsx_runtime123.jsx)(StatusBadge,{color:"green",variant:"light",status:"Active"}),(0,import_jsx_runtime123.jsxs)(import_core154.Text,{size:"xs",fw:500,color:"gray.6",children:["Ends ",(0,import_core155.formatDate)(coverageResource?.period?.end)]})]})]})})}function Insurance(props){let{coverages,onClickResource}=props,activeCoverages=coverages.filter(coverage=>coverage.status==="active");return(0,import_jsx_runtime123.jsx)(CollapsibleSection,{title:"Insurance",children:activeCoverages.length>0?(0,import_jsx_runtime123.jsx)(import_core154.Flex,{direction:"column",gap:8,children:activeCoverages.map(coverage=>(0,import_jsx_runtime123.jsx)(CoverageItem,{coverage,organization:coverage.payor?.[0],onClickResource},coverage.id))}):(0,import_jsx_runtime123.jsx)(import_core154.Text,{children:"(none)"})})}function capitalizeWords(str){return str.split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1).toLowerCase()).join(" ")}function formatClassInfo(coverage){return coverage?coverage.class?.filter(cls=>cls.type?.coding?.[0]?.code!=="plan").map(cls=>{let type=cls.type?.coding?.[0]?.code??"";return`${capitalizeWords(type)}: ${cls.value}`}).join(" \xB7 ")??"":""}var import_core156=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_core157=require("@medplum/core"),import_react76=require("react");var import_jsx_runtime124=require("react/jsx-runtime");function Labs(props){let{serviceRequests,diagnosticReports,onClickResource,onRequestLabs}=props,[selectedReport,setSelectedReport]=(0,import_react76.useState)(),[reportDialogOpened,{open:openReportDialog,close:closeReportDialog}]=(0,import_hooks4.useDisclosure)(!1),diagnosticReportsRequests=new Set,filteredDiagnosticReports=diagnosticReports.filter(report=>{let flag=isLaboratoryReport(report);return flag&&report.basedOn&&report.basedOn.forEach(basedOn=>{if(basedOn.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn.reference.split("/");diagnosticReportsRequests.add(id)}}),flag}),completedRequisitionNumbers=new Set,filteredServiceRequests=serviceRequests.filter(request=>{if(request.id&&diagnosticReportsRequests.has(request.id)||request.basedOn&&request.basedOn.find(basedOn2=>{if(basedOn2.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn2.reference.split("/");return diagnosticReportsRequests.has(id)}return!1}))return!1;let shouldFilter=shouldFilterRequest(request,completedRequisitionNumbers);return!shouldFilter&&request.requisition?.value&&completedRequisitionNumbers.add(request.requisition?.value),!shouldFilter}),handleDiagnosticReportClick=report=>{setSelectedReport(report),openReportDialog()};return(0,import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment,{children:[(0,import_jsx_runtime124.jsx)(CollapsibleSection,{title:"Labs",onAdd:()=>onRequestLabs?.(),children:(0,import_jsx_runtime124.jsxs)(import_core156.Flex,{direction:"column",gap:8,children:[filteredServiceRequests.map(serviceRequest=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>onClickResource?.(serviceRequest),children:(0,import_jsx_runtime124.jsxs)(import_core156.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core156.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core157.getDisplayString)(serviceRequest)}),(0,import_jsx_runtime124.jsxs)(import_core156.Group,{mt:2,gap:4,children:[serviceRequest.status&&(0,import_jsx_runtime124.jsx)(StatusBadge,{color:getStatusColor(serviceRequest.status),variant:"light",status:serviceRequest.status}),(0,import_jsx_runtime124.jsx)(import_core156.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core157.formatDate)(serviceRequest.authoredOn)})]})]})},serviceRequest.id)),filteredDiagnosticReports.map(report=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>handleDiagnosticReportClick(report),children:(0,import_jsx_runtime124.jsxs)(import_core156.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core156.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core157.getDisplayString)(report)}),(0,import_jsx_runtime124.jsxs)(import_core156.Group,{mt:2,gap:4,children:[report.status&&(0,import_jsx_runtime124.jsx)(StatusBadge,{color:getStatusColor(report.status),variant:"light",status:report.status}),(0,import_jsx_runtime124.jsx)(import_core156.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core157.formatDate)(report.issued)})]})]})},report.id)),filteredServiceRequests.length===0&&filteredDiagnosticReports.length===0&&(0,import_jsx_runtime124.jsx)(import_core156.Text,{children:"(none)"})]})}),(0,import_jsx_runtime124.jsx)(import_core156.Modal,{opened:reportDialogOpened,onClose:closeReportDialog,size:"80%",children:selectedReport&&(0,import_jsx_runtime124.jsx)(DiagnosticReportDisplay,{value:selectedReport,hideSubject:!0})})]})}var getStatusColor=status=>{switch(status){case"active":return"indigo";case"final":return"teal";case"cancelled":return"red";default:return"gray"}};function hasLaboratoryCategory(category){if(!category.coding||!Array.isArray(category.coding))return!1;for(let coding of category.coding)if(coding.code==="LAB")return!0;return!1}function isLaboratoryReport(report){if(!report.category||!Array.isArray(report.category))return!1;for(let category of report.category)if(hasLaboratoryCategory(category))return!0;return!1}function shouldFilterRequest(request,completedRequisitionNumbers){if(["completed","draft","entered-in-error"].includes(request.status))return!0;let requisitionNumber=request.requisition?.value;return!!(requisitionNumber&&completedRequisitionNumbers.has(requisitionNumber))}var import_core160=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core161=require("@medplum/core"),import_react_hooks44=require("@medplum/react-hooks"),import_react78=require("react");var import_core158=require("@mantine/core"),import_core159=require("@medplum/core"),import_react_hooks43=require("@medplum/react-hooks"),import_react77=require("react");var import_jsx_runtime125=require("react/jsx-runtime"),HTTP2="http://",statusValues=["active","stopped","on-hold","cancelled","completed","entered-in-error","draft","unknown"];function MedicationDialog(props){let me=(0,import_react_hooks43.useMedplumProfile)(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react77.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react77.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core159.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core159.createReference)(encounter)),requester:medication?.requester??(0,import_core159.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core159.createReference)(patient)},import_core159.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime125.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime125.jsxs)(import_core158.Stack,{children:[(0,import_jsx_runtime125.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:HTTP2+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1010.4",maxValues:1,defaultValue:medication?.medicationCodeableConcept,onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime125.jsx)(import_core158.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime125.jsx)(import_core158.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime125.jsx)(import_core158.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime125.jsx)(SubmitButton,{children:"Save"})})]})}):(0,import_jsx_runtime125.jsx)(import_core158.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime126=require("react/jsx-runtime");function Medications(props){let medplum=(0,import_react_hooks44.useMedplum)(),[medicationRequests,setMedicationRequests]=(0,import_react78.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react78.useState)(),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react78.useCallback)(async medication=>{if(medication.id){let updatedMedication=await medplum.updateResource(medication);setMedicationRequests(medicationRequests.map(m=>m.id===updatedMedication.id?updatedMedication:m))}else{let newMedication=await medplum.createResource(medication);setMedicationRequests([newMedication,...medicationRequests])}setEditMedication(void 0),close()},[medplum,medicationRequests,close]);return(0,import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment,{children:[(0,import_jsx_runtime126.jsx)(CollapsibleSection,{title:"Medications",onAdd:()=>{setEditMedication(void 0),open()},children:medicationRequests.length>0?(0,import_jsx_runtime126.jsx)(import_core160.Flex,{direction:"column",gap:8,children:medicationRequests.map(medication=>(0,import_jsx_runtime126.jsx)(SummaryItem,{onClick:()=>{setEditMedication(medication),open()},children:(0,import_jsx_runtime126.jsxs)(import_core160.Box,{children:[(0,import_jsx_runtime126.jsx)(import_core160.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core161.getDisplayString)(medication)}),(0,import_jsx_runtime126.jsx)(import_core160.Group,{mt:2,gap:4,children:medication.status&&(0,import_jsx_runtime126.jsx)(StatusBadge,{color:getStatusColor2(medication.status),variant:"light",status:medication.status})})]})},medication.id))}):(0,import_jsx_runtime126.jsx)(import_core160.Text,{children:"(none)"})}),(0,import_jsx_runtime126.jsx)(import_core160.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime126.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}function getStatusColor2(status){if(!status)return"gray";switch(status){case"active":return"green";case"stopped":return"red";case"on-hold":return"yellow";case"cancelled":return"red";case"completed":return"blue";case"entered-in-error":return"red";case"draft":return"gray";default:return"gray"}}var import_core162=require("@mantine/core");var import_jsx_runtime127=require("react/jsx-runtime"),PatientInfoItem=props=>{let{patient,value,icon,placeholder,label,onClickResource}=props,displayText=value||placeholder;return(0,import_jsx_runtime127.jsx)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:(0,import_jsx_runtime127.jsx)(import_core162.Box,{className:PatientSummary_default.patientSummaryListItem,children:(0,import_jsx_runtime127.jsx)(import_core162.Tooltip,{label,position:"top-start",openDelay:650,children:(0,import_jsx_runtime127.jsxs)(import_core162.Group,{gap:"sm",align:"center",ml:6,mr:2,style:{cursor:"pointer",flexWrap:"nowrap",minWidth:0},children:[icon,(0,import_jsx_runtime127.jsx)(import_core162.Text,{fz:"sm",fw:400,truncate:!0,c:value?"inherit":"var(--mantine-color-gray-6)",children:displayText})]})})})})};var import_core163=require("@medplum/core");function getGenderIdentity(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-genderIdentity`)?.valueCodeableConcept?.coding?.[0]?.display}function getBirthSex(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-birthsex`)?.valueCode}function getRace(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-race`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getEthnicity(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-ethnicity`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getGeneralPractitioner(patient){return patient.generalPractitioner?.[0]?.display}function formatPatientGenderDisplay(patient){let capitalizedGender=patient.gender?(0,import_core163.capitalize)(patient.gender):"",genderIdentity=getGenderIdentity(patient),birthSex=getBirthSex(patient),parts=[];return capitalizedGender&&parts.push(capitalizedGender),genderIdentity&&parts.push(genderIdentity),birthSex&&parts.push(`Born as ${birthSex}`),parts.join(" \xB7 ")}function formatPatientRaceEthnicityDisplay(patient){let race=getRace(patient),ethnicity=getEthnicity(patient),parts=[];return race&&parts.push(race),ethnicity&&parts.push(ethnicity),parts.join(" \xB7 ")}var getPreferredLanguage=patient=>{if(!patient.communication?.length)return;let preferred=patient.communication?.find(comm=>comm.preferred===!0);return preferred?.language?.coding?.[0]?.display?preferred.language.coding[0].display:patient.communication[0]?.language?.coding?.[0]?.display};var import_core166=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core167=require("@medplum/core"),import_react_hooks45=require("@medplum/react-hooks"),import_react80=require("react");var import_core164=require("@mantine/core"),import_core165=require("@medplum/core"),import_react79=require("react");var import_jsx_runtime128=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react79.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react79.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react79.useCallback)(formData=>{let updatedCondition=(0,import_core165.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core165.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core165.createReference)(patient),encounter:encounter&&(0,import_core165.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core165.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-condition-problems-health-concerns");onSubmit(updatedCondition)},[patient,encounter,condition,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime128.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime128.jsxs)(import_core164.Stack,{children:[(0,import_jsx_runtime128.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core165.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime128.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core165.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime128.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime128.jsx)(import_core164.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime128.jsx)(SubmitButton,{children:"Save"})})]})},condition?.id)}var import_jsx_runtime129=require("react/jsx-runtime");function ProblemList(props){let medplum=(0,import_react_hooks45.useMedplum)(),{patient,encounter}=props,[problems,setProblems]=(0,import_react80.useState)(props.problems.filter(c=>c.verificationStatus?.coding?.[0]?.code!=="entered-in-error")),[editCondition,setEditCondition]=(0,import_react80.useState)(),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react80.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([newCondition,...problems])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(CollapsibleSection,{title:"Problems",onAdd:()=>{setEditCondition(void 0),open()},children:problems.length>0?(0,import_jsx_runtime129.jsx)(import_core166.Flex,{direction:"column",gap:8,children:problems.map(problem=>(0,import_jsx_runtime129.jsx)(SummaryItem,{onClick:()=>{setEditCondition(problem),open()},children:(0,import_jsx_runtime129.jsxs)(import_core166.Box,{children:[(0,import_jsx_runtime129.jsx)(import_core166.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core167.getDisplayString)(problem)}),(0,import_jsx_runtime129.jsxs)(import_core166.Group,{mt:2,gap:4,children:[problem.clinicalStatus?.coding?.[0]?.code&&(0,import_jsx_runtime129.jsx)(StatusBadge,{"data-testid":"status-badge",color:getStatusColor3(problem.clinicalStatus?.coding?.[0]?.code),variant:"light",status:problem.clinicalStatus?.coding?.[0]?.code}),(0,import_jsx_runtime129.jsx)(import_core166.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core167.formatDate)(problem.onsetDateTime)})]})]})},problem.id))}):(0,import_jsx_runtime129.jsx)(import_core166.Text,{children:"(none)"})}),(0,import_jsx_runtime129.jsx)(import_core166.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime129.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var getStatusColor3=status=>{if(!status)return"gray";switch(status){case"active":case"recurrence":case"relapse":return"green";case"inactive":return"orange";case"remission":return"blue";case"resolved":return"teal";default:return"gray"}};var import_core168=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_core169=require("@medplum/core"),import_react_hooks46=require("@medplum/react-hooks"),import_react81=require("react");var import_jsx_runtime130=require("react/jsx-runtime"),NULLFLAVOR=import_core169.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/v3-NullFlavor",CodesToText={38628009:"Homosexual",20430005:"Heterosexual",42035005:"Bisexual",OTH:"Other",UNK:"Unknown",ASKU:"Asked but no answer"},CodesToSystem={38628009:import_core169.SNOMED,20430005:import_core169.SNOMED,42035005:import_core169.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let{patient,encounter}=props,medplum=(0,import_react_hooks46.useMedplum)(),[sexualOrientation,setSexualOrientation]=(0,import_react81.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks7.useDisclosure)(!1),[hoverIndex,setHoverIndex]=(0,import_react81.useState)(null),handleSubmit=(0,import_react81.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core169.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core169.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core169.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core169.createReference)(patient),encounter:encounter?(0,import_core169.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:CodesToSystem[code],code:formData.sexualOrientation}],text:CodesToText[code]}}).then(newSexualOrientation=>{setSexualOrientation(newSexualOrientation),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment,{children:[(0,import_jsx_runtime130.jsx)(CollapsibleSection,{title:"Sexual Orientation",onAdd:()=>{open()},children:sexualOrientation?(0,import_jsx_runtime130.jsx)(import_core168.Flex,{direction:"column",gap:8,children:(0,import_jsx_runtime130.jsx)(import_core168.Box,{onMouseEnter:()=>setHoverIndex(0),onMouseLeave:()=>setHoverIndex(null),children:(0,import_jsx_runtime130.jsx)(import_core168.UnstyledButton,{"data-testid":"sexual-orientation-button",onClick:e=>{killEvent(e),props.onClickResource&&props.onClickResource(sexualOrientation)},children:(0,import_jsx_runtime130.jsx)(import_core168.Box,{pr:hoverIndex===0?24:0,children:(0,import_jsx_runtime130.jsx)(import_core168.Text,{size:"sm",fw:500,children:sexualOrientation.valueCodeableConcept?.text??"Unknown"})})})})}):(0,import_jsx_runtime130.jsx)(import_core168.Text,{children:"(none)"})}),(0,import_jsx_runtime130.jsx)(import_core168.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime130.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime130.jsxs)(import_core168.Stack,{children:[(0,import_jsx_runtime130.jsx)(import_core168.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime130.jsx)(import_core168.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime130.jsx)(import_core168.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime130.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core170=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_core171=require("@medplum/core"),import_react_hooks47=require("@medplum/react-hooks"),import_react82=require("react");var import_jsx_runtime131=require("react/jsx-runtime"),smokingStatusOptions={266919005:"Never smoked tobacco",266927001:"Tobacco smoking consumption unknown","428041000124106":"Occasional tobacco smoker","428061000124105":"Light tobacco smoker","428071000124103":"Heavy tobacco smoker",449868002:"Smokes tobacco daily",77176002:"Smoker",8517006:"Ex-smoker"};function SmokingStatus(props){let medplum=(0,import_react_hooks47.useMedplum)(),[smokingStatus,setSmokingStatus]=(0,import_react82.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks8.useDisclosure)(!1),handleSubmit=(0,import_react82.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core171.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-smokingstatus"]},status:"final",category:[{coding:[{system:"http://terminology.hl7.org/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core171.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core171.createReference)(props.patient),encounter:props.encounter?(0,import_core171.createReference)(props.encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core171.SNOMED,version:import_core171.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,props.patient,props.encounter,close]);return(0,import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment,{children:[(0,import_jsx_runtime131.jsx)(CollapsibleSection,{title:"Smoking Status",onAdd:()=>{open()},children:smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime131.jsx)(import_core170.UnstyledButton,{"data-testid":"smoking-status-button",onClick:()=>props.onClickResource?.(smokingStatus),children:(0,import_jsx_runtime131.jsx)(import_core170.Text,{children:(0,import_core171.formatCodeableConcept)(smokingStatus.valueCodeableConcept)})}):(0,import_jsx_runtime131.jsx)(import_core170.Text,{children:"(none)"})}),(0,import_jsx_runtime131.jsx)(import_core170.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime131.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime131.jsxs)(import_core170.Stack,{children:[(0,import_jsx_runtime131.jsx)(import_core170.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime131.jsx)(import_core170.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime131.jsx)(import_core170.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime131.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core173=require("@mantine/core"),import_hooks9=require("@mantine/hooks"),import_core174=require("@medplum/core"),import_react_hooks48=require("@medplum/react-hooks"),import_react83=require("react");var import_core172=require("@medplum/core");function getObservationValue(obs,component){return component?obs.component?.find(c=>c.code?.coding?.[0].code===component)?.valueQuantity:obs.valueQuantity}function createObservation(patient,encounter,code,title,valueQuantity){if(isValidNumber(valueQuantity.value))return{...createBaseObservation(patient,encounter,code,title),valueQuantity}}function createCompoundObservation(patient,encounter,code,title,components){let component=components.filter(c=>isValidNumber(c.valueQuantity?.value));if(component.length!==0)return{...createBaseObservation(patient,encounter,code,title),component}}function createBaseObservation(patient,encounter,code,title){return{resourceType:"Observation",status:"preliminary",subject:(0,import_core172.createReference)(patient),encounter:encounter?(0,import_core172.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),category:[{coding:[{system:"http://terminology.hl7.org/CodeSystem/observation-category",code:"vital-signs",display:"Vital Signs"}]}],code:createLoincCode(code,title)}}function createLoincCode(code,display){return{coding:[{code,display,system:import_core172.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core172.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime132=require("react/jsx-runtime"),BP="85354-9",SYSTOLIC="8480-6",DIASTOLIC="8462-4",LOINC_CODES=[{name:"systolic",short:"BP Sys",code:BP,component:SYSTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"diastolic",short:"BP Dias",code:BP,component:DIASTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"heartRate",short:"HR",code:"8867-4",title:"Heart Rate",unit:"/min"},{name:"bodyTemperature",short:"Temp",code:"8310-5",title:"Body Temperature",unit:"Cel"},{name:"respiratoryRate",short:"RR",code:"9279-1",title:"Respiratory Rate",unit:"/min"},{name:"height",short:"Ht",code:"8302-2",title:"Height",unit:"cm"},{name:"weight",short:"Wt",code:"29463-7",title:"Weight",unit:"kg"},{name:"bmi",short:"BMI",code:"39156-5",title:"BMI",unit:"kg/m2"},{name:"oxygen",short:"O2",code:"2708-6",title:"Oxygen",unit:"%"},{name:"headCircumference",short:"HC",code:"9843-4",title:"Head Circumference",unit:"cm"}];function Vitals(props){let medplum=(0,import_react_hooks48.useMedplum)(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react83.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks9.useDisclosure)(!1),handleSubmit=(0,import_react83.useCallback)(formData=>{let newObservations=[];newObservations.push(createCompoundObservation(patient,encounter,BP,"Blood pressure",[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.diastolic),"mm[Hg]")}]));for(let meta of LOINC_CODES)meta.component||newObservations.push(createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[meta.name]),meta.unit)));Promise.all(newObservations.filter(Boolean).map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[(0,import_jsx_runtime132.jsx)(CollapsibleSection,{title:"Vitals",onAdd:()=>{open()},children:(0,import_jsx_runtime132.jsx)(import_core173.Stack,{children:LOINC_CODES.map(meta=>{let obs=vitals.find(o=>o.code?.coding?.[0].code===meta.code);return(0,import_jsx_runtime132.jsxs)(import_core173.Group,{align:"center",children:[(0,import_jsx_runtime132.jsx)(import_core173.Text,{c:"dimmed",children:meta.short}),obs&&(0,import_jsx_runtime132.jsx)(import_core173.Text,{children:(0,import_core174.formatQuantity)(getObservationValue(obs,meta.component))})]},meta.name)})})}),(0,import_jsx_runtime132.jsx)(import_core173.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime132.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime132.jsx)(import_core173.SimpleGrid,{cols:2,children:LOINC_CODES.map((meta,index)=>(0,import_jsx_runtime132.jsx)(import_core173.TextInput,{name:meta.name,label:meta.short,description:`${meta.title} (${meta.unit})`,"data-autofocus":index===0,autoFocus:index===0},meta.name))}),(0,import_jsx_runtime132.jsx)(import_core173.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime132.jsx)(import_core173.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime132.jsx)(SubmitButton,{children:"Save"})})]})})]})}var import_jsx_runtime133=require("react/jsx-runtime");function PatientSummary(props){let medplum=(0,import_react_hooks49.useMedplum)(),{patient:propsPatient,onClickResource,onRequestLabs}=props,patient=(0,import_react_hooks49.useResource)(propsPatient),[medicalData,setMedicalData]=(0,import_react84.useState)(),[createdDate,setCreatedDate]=(0,import_react84.useState)();(0,import_react84.useEffect)(()=>{let ref=`Patient/${(0,import_core176.resolveId)(propsPatient)}`,searchMeta={_count:100,_sort:"-_lastUpdated"};Promise.all([medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta}),medplum.searchResources("Appointment",{patient:ref,...searchMeta}),medplum.searchResources("Encounter",{subject:ref,...searchMeta}),medplum.searchResources("Coverage",{beneficiary:ref,...searchMeta}),medplum.searchResources("Immunization",{patient:ref,...searchMeta}),medplum.searchResources("Procedure",{subject:ref,...searchMeta}),medplum.searchResources("Device",{patient:ref,...searchMeta}),medplum.searchResources("Goal",{subject:ref,...searchMeta}),medplum.searchResources("ServiceRequest",{subject:ref,...searchMeta}),medplum.searchResources("DiagnosticReport",{subject:ref,...searchMeta})]).then(results=>{let observations=results[3];setMedicalData({allergies:results[0],problems:results[1],medicationRequests:results[2],sexualOrientation:observations.find(obs=>obs.code?.coding?.[0].code==="76690-7"),smokingStatus:observations.find(obs=>obs.code?.coding?.[0].code==="72166-2"),vitals:observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"),appointments:results[4],encounters:results[5],coverages:results[6],immunizations:results[7],procedures:results[8],devices:results[9],goals:results[10],serviceRequests:results[11],diagnosticReports:results[12]})}).catch(console.error)},[medplum,propsPatient]),(0,import_react84.useEffect)(()=>{patient?.id&&medplum.readHistory("Patient",patient.id).then(history=>{let lastUpdated=history.entry?.[history.entry.length-1]?.resource?.meta?.lastUpdated;setCreatedDate(typeof lastUpdated=="string"?lastUpdated:"")}).catch(()=>{})},[patient?.id,medplum]);let languageDisplay=patient?getPreferredLanguage(patient):void 0;return patient?(0,import_jsx_runtime133.jsxs)(import_core175.Flex,{direction:"column",gap:"xs",w:"100%",h:"100%",className:PatientSummary_default.panel,children:[(0,import_jsx_runtime133.jsxs)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:[(0,import_jsx_runtime133.jsxs)(import_core175.Group,{align:"center",gap:"sm",p:16,children:[(0,import_jsx_runtime133.jsx)(ResourceAvatar,{value:patient,size:48,radius:48,style:{border:"2px solid white"}}),(0,import_jsx_runtime133.jsxs)(import_core175.Stack,{gap:0,style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime133.jsx)(import_core175.Tooltip,{label:(0,import_core176.formatHumanName)(patient.name?.[0]),position:"top-start",openDelay:650,children:(0,import_jsx_runtime133.jsx)(import_core175.Text,{fz:"h4",fw:800,truncate:!0,style:{minWidth:0},children:(0,import_core176.formatHumanName)(patient.name?.[0])})}),(()=>{let dateString=typeof createdDate=="string"&&createdDate.length>0?createdDate:void 0;if(!dateString)return null;let d=new Date(dateString);return(0,import_jsx_runtime133.jsxs)(import_core175.Text,{fz:"xs",mt:-2,fw:500,c:"gray.6",truncate:!0,style:{minWidth:0},children:["Patient since ",d.getMonth()+1,"/",d.getDate(),"/",d.getFullYear()]})})()]})]}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{})]}),(0,import_jsx_runtime133.jsx)(import_core175.Stack,{gap:"xs",px:16,pt:12,pb:16,style:{flex:2,overflowY:"auto",minHeight:0},children:medicalData&&(0,import_jsx_runtime133.jsxs)(import_jsx_runtime133.Fragment,{children:[(0,import_jsx_runtime133.jsxs)(import_core175.Stack,{gap:"xs",py:8,children:[(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.birthDate?`${patient.birthDate} (${(0,import_core176.calculateAgeString)(patient.birthDate)})`:void 0,icon:(0,import_jsx_runtime133.jsx)(IconCake,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Birthdate",label:"Birthdate & Age",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.gender?formatPatientGenderDisplay(patient):void 0,icon:(0,import_jsx_runtime133.jsx)(IconEmpathize,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Gender & Identity",label:"Gender & Identity",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:getRace(patient)||getEthnicity(patient)?formatPatientRaceEthnicityDisplay(patient):void 0,icon:(0,import_jsx_runtime133.jsx)(IconBinaryTree,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Race & Ethnicity",label:"Race & Ethnicity",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.address?.[0]?(0,import_core176.formatAddress)(patient.address[0]):void 0,icon:(0,import_jsx_runtime133.jsx)(IconMapPin,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Location",label:"Location",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:languageDisplay,icon:(0,import_jsx_runtime133.jsx)(IconLanguage,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Language",label:"Language",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:getGeneralPractitioner(patient),icon:(0,import_jsx_runtime133.jsx)(IconStethoscope,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add General Practitioner",label:"General Practitioner",onClickResource})]}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(Insurance,{coverages:medicalData.coverages||[],onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(Allergies,{patient,allergies:medicalData.allergies,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(ProblemList,{patient,problems:medicalData.problems,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(Medications,{patient,medicationRequests:medicalData.medicationRequests,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(Labs,{patient,serviceRequests:medicalData.serviceRequests,diagnosticReports:medicalData.diagnosticReports,onClickResource,onRequestLabs}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(SexualOrientation,{patient,sexualOrientation:medicalData.sexualOrientation,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(SmokingStatus,{patient,smokingStatus:medicalData.smokingStatus,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{}),(0,import_jsx_runtime133.jsx)(Vitals,{patient,vitals:medicalData.vitals,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core175.Divider,{})]})})]}):null}var import_core177=require("@medplum/core"),import_react85=require("react");var import_jsx_runtime134=require("react/jsx-runtime");function PatientTimeline(props){let{patient,...rest}=props,loadTimelineResources=(0,import_react85.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("Communication",{subject:ref,_count}),medplum.search("Device",{patient:ref,_count}),medplum.search("DeviceRequest",{patient:ref,_count}),medplum.search("DiagnosticReport",{subject:ref,_count}),medplum.search("Media",{subject:ref,_count}),medplum.search("ServiceRequest",{subject:ref,_count}),medplum.search("Task",{subject:ref,_count})])},[]);return(0,import_jsx_runtime134.jsx)(ResourceTimeline,{value:patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core177.createReference)(resource),sender:(0,import_core177.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core177.createReference)(resource),operator:(0,import_core177.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core178=require("@mantine/core"),import_core179=require("@medplum/core"),import_react_hooks50=require("@medplum/react-hooks");var import_react86=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing"};var import_jsx_runtime135=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=(0,import_react_hooks50.useMedplum)(),defaultValue2=(0,import_react_hooks50.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react86.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react86.useState)(),[hoverKey,setHoverKey]=(0,import_react86.useState)(),[value,setValue]=(0,import_react86.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react86.useRef)(value);if(valueRef.current=value,(0,import_react86.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react86.useEffect)(()=>(setValue(ensurePlanDefinitionKeys(defaultValue2??{resourceType:"PlanDefinition",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]),!schemaLoaded||!value)return null;function changeProperty(property,newValue){setValue({...valueRef.current,[property]:newValue})}return(0,import_jsx_runtime135.jsx)("div",{children:(0,import_jsx_runtime135.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime135.jsx)(import_core178.TextInput,{label:"Plan Title",py:"md",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime135.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),(0,import_jsx_runtime135.jsx)(SubmitButton,{children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react86.useRef)(props.actions);actionsRef.current=props.actions;function changeAction(changedAction){props.onChange(actionsRef.current.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...actionsRef.current,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(actionsRef.current.filter(i=>i!==removedAction))}return(0,import_jsx_runtime135.jsxs)(import_core178.Stack,{gap:"md",className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime135.jsx)(ActionBuilder,{action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:changeAction,onRemove:()=>removeAction(action)},action.id)),(0,import_jsx_runtime135.jsx)("div",{children:(0,import_jsx_runtime135.jsx)(import_core178.Button,{variant:"outline",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action);function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}return(0,import_jsx_runtime135.jsx)("div",{onClick,onMouseOver:onHover,onFocus:onHover,children:(0,import_jsx_runtime135.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,hoverKey:props.hoverKey,onRemove:props.onRemove})})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react86.useState)(props.actionType),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function changeProperty(property,value){props.onChange({...action,[property]:value})}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime135.jsxs)(import_core178.Paper,{"data-testid":action.id,className,p:0,radius:"sm",withBorder:!0,children:[(0,import_jsx_runtime135.jsxs)(import_core178.Flex,{w:"100%",p:"xs",bg:"gray.0",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime135.jsx)(import_core178.TextInput,{w:"100%",name:`actionTitle-${action.id}`,defaultValue:action.title,placeholder:"Title",onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime135.jsx)(import_core178.CloseButton,{"data-testid":"close-button",onClick:props.onRemove})]}),editing&&(0,import_jsx_runtime135.jsxs)(import_core178.Stack,{gap:"xl",p:"md",children:[(0,import_jsx_runtime135.jsx)(import_core178.Box,{children:(0,import_jsx_runtime135.jsx)(import_core178.TextInput,{label:"Task Description",placeholder:"Enter task description",name:`actionDescription-${action.id}`,defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)})}),(0,import_jsx_runtime135.jsx)(import_core178.Box,{children:(0,import_jsx_runtime135.jsx)(import_core178.NativeSelect,{label:"Type of Action",value:actionType,onChange:e=>{let value=e.currentTarget.value==="standard"?void 0:e.currentTarget.value;setActionType(value),props.onChange({...props.action,definitionCanonical:value==="standard"?void 0:props.action.definitionCanonical})},data:[{value:"standard",label:"Standard task"},{value:"questionnaire",label:"Task with Questionnaire"},{value:"activitydefinition",label:"Task with Activity Definition"}]})}),actionType==="questionnaire"&&(0,import_jsx_runtime135.jsxs)(import_core178.Stack,{gap:0,children:[(0,import_jsx_runtime135.jsxs)(import_core178.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime135.jsx)(import_core178.Text,{fw:600,children:"Select questionnaire"}),(0,import_jsx_runtime135.jsx)(import_core178.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime135.jsxs)(import_core178.Text,{size:"sm",c:"dimmed",mb:"sm",children:["Questionnaire to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime135.jsx)(import_core178.Anchor,{href:"/Questionnaire",target:"_blank",c:"blue",children:"questionnaires list"})]}),(0,import_jsx_runtime135.jsx)(ActionResourceTypeBuilder,{resourceType:"Questionnaire",action,onChange:props.onChange})]}),actionType==="activitydefinition"&&(0,import_jsx_runtime135.jsxs)(import_core178.Stack,{gap:0,children:[(0,import_jsx_runtime135.jsxs)(import_core178.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime135.jsx)(import_core178.Text,{fw:600,children:"Select activity definition"}),(0,import_jsx_runtime135.jsx)(import_core178.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime135.jsxs)(import_core178.Text,{size:"sm",c:"dimmed",mb:"sm",children:["ActivityDefinition.kind resource to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime135.jsx)(import_core178.Anchor,{href:"/ActivityDefinition",target:"_blank",c:"blue",children:"activity definitions list"})]}),(0,import_jsx_runtime135.jsx)(ActionResourceTypeBuilder,{resourceType:"ActivityDefinition",action,onChange:props.onChange})]})]})]})}function ActionResourceTypeBuilder(props){let{id,definitionCanonical}=props.action,reference=definitionCanonical?.startsWith(props.resourceType+"/")?{reference:definitionCanonical}:void 0;return(0,import_jsx_runtime135.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core179.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function getInitialActionType(action){return action.definitionCanonical?.startsWith("Questionnaire")?"questionnaire":action.definitionCanonical?.startsWith("ActivityDefinition")?"activitydefinition":"standard"}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=parseInt(existing.substring(3),10);isNaN(existingNum)||(nextId=Math.max(nextId,existingNum+1))}return existing}return"id-"+nextId++}function ensurePlanDefinitionKeys(planDefinition){return{...planDefinition,action:ensurePlanDefinitionActionKeys(planDefinition.action)}}function ensurePlanDefinitionActionKeys(actions){if(actions)return actions.map(action=>({...action,id:generateId(action.id),action:ensurePlanDefinitionActionKeys(action.action)}))}var import_core183=require("@mantine/core"),import_core184=require("@medplum/core"),import_react_hooks52=require("@medplum/react-hooks");var import_react89=require("react");var import_core181=require("@mantine/core"),import_core182=require("@medplum/core"),import_react_hooks51=require("@medplum/react-hooks"),import_react88=require("react");var import_core180=require("@medplum/core"),QuestionnaireItemType={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"};function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,questionnaireResponse){let extension=(0,import_core180.getExtension)(item,import_core180.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression");if(questionnaireResponse&&extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core180.toTypedValue)(questionnaireResponse),result=(0,import_core180.evalFhirPathTyped)(expression,[value],{"%resource":value});return(0,import_core180.toJsBoolean)(result)}}if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(questionnaireResponse?.item,enableWhen.question);if(enableWhen.operator==="exists"&&!enableWhen.answerBoolean&&!actualAnswers?.length){if(enableBehavior==="any")return!0;continue}let{anyMatch,allMatch}=checkAnswers(enableWhen,actualAnswers,enableBehavior);if(enableBehavior==="any"&&anyMatch)return!0;if(enableBehavior==="all"&&!allMatch)return!1}return enableBehavior!=="any"}function evaluateCalculatedExpressionsInQuestionnaire(items,response){return items.map(item=>{if(item.item)return{...item,item:evaluateCalculatedExpressionsInQuestionnaire(item.item,response)};try{let calculatedValue=evaluateCalculatedExpression(item,response);if(!calculatedValue)return null;let answer=typedValueToResponseItem(item,calculatedValue);return answer?{id:item?.id,linkId:item?.linkId,text:item.text,answer:[answer]}:null}catch(error){return{id:item?.id,linkId:item?.linkId,text:item.text,answer:[],extension:[{url:`${import_core180.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,valueString:`Expression evaluation failed: ${(0,import_core180.normalizeErrorString)(error)}`}]}}}).filter(item=>item!==null)}function typedValueToResponseItem(item,value){if(item.type)switch(item.type){case QuestionnaireItemType.boolean:return value.type===import_core180.PropertyType.boolean?{valueBoolean:value.value}:void 0;case QuestionnaireItemType.date:return value.type===import_core180.PropertyType.date?{valueDate:value.value}:void 0;case QuestionnaireItemType.dateTime:return value.type===import_core180.PropertyType.dateTime?{valueDateTime:value.value}:void 0;case QuestionnaireItemType.time:return value.type===import_core180.PropertyType.time?{valueTime:value.value}:void 0;case QuestionnaireItemType.url:return value.type===import_core180.PropertyType.url?{valueString:value.value}:void 0;case QuestionnaireItemType.text:return value.type===import_core180.PropertyType.string?{valueString:value.value}:void 0;case QuestionnaireItemType.attachment:return value.type===import_core180.PropertyType.Attachment?{valueAttachment:value.value}:void 0;case QuestionnaireItemType.reference:return value.type===import_core180.PropertyType.Reference?{valueReference:value.value}:void 0;case QuestionnaireItemType.quantity:return{valueQuantity:value.value};case QuestionnaireItemType.decimal:return{valueDecimal:value.value};case QuestionnaireItemType.integer:return{valueInteger:value.value};case QuestionnaireItemType.string:return{valueString:value.value};default:return}}function evaluateCalculatedExpression(item,response){if(!response)return;let extension=(0,import_core180.getExtension)(item,import_core180.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression");if(extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core180.toTypedValue)(response),result=(0,import_core180.evalFhirPathTyped)(expression,[value],{"%resource":value});return result.length!==0?result[0]:void 0}}}function mergeUpdatedItems(mergedItems,updatedItems){return mergedItems.map(mergedItem=>{let updatedItem=updatedItems.find(updated=>updated.linkId===mergedItem.linkId);return updatedItem?{...mergedItem,item:updatedItem.item?mergeUpdatedItems(mergedItem.item||[],updatedItem.item):mergedItem.item,answer:updatedItem.answer||mergedItem.answer,extension:updatedItem.extension||mergedItem.extension}:mergedItem})}function getNewMultiSelectValues(selected,propertyName,item){let result=[];for(let selectedStr of selected){let option=item.answerOption?.find(candidate=>(0,import_core180.typedValueToString)(getItemAnswerOptionValue(candidate))===selectedStr);if(option){let optionValue=getItemAnswerOptionValue(option);optionValue&&result.push({[propertyName]:optionValue.value})}}return result}function getByLinkId(responseItems,linkId){if(responseItems)for(let response of responseItems){if(response.linkId===linkId)return response.answer;if(response.item){let nestedAnswer=getByLinkId(response.item,linkId);if(nestedAnswer)return nestedAnswer}}}function evaluateMatch(actualAnswer,expectedAnswer,operator){if(operator==="exists")return!!actualAnswer===expectedAnswer.value;if(actualAnswer){let fhirPathOperator=operator==="="||operator==="!="?operator?.replace("=","~"):operator,[{value}]=(0,import_core180.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=getItemEnableWhenValueAnswer(enableWhen),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=getResponseItemAnswerValue(actualAnswerValue),{operator}=enableWhen;if(evaluateMatch(actualAnswer,expectedAnswer,operator)?anyMatch=!0:allMatch=!1,enableBehavior==="any"&&anyMatch)break}return{anyMatch,allMatch}}function getQuestionnaireItemReferenceTargetTypes(item){let extension=(0,import_core180.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(extension){if(extension.valueCode!==void 0)return[extension.valueCode];if(extension.valueCodeableConcept)return extension.valueCodeableConcept?.coding?.map(c=>c.code)}}function setQuestionnaireItemReferenceTargetTypes(item,targetTypes){let result=(0,import_core180.deepClone)(item),extension=(0,import_core180.getExtension)(result,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!targetTypes||targetTypes.length===0?(extension&&(result.extension=result.extension?.filter(e=>e!==extension)),result):(extension||(result.extension||(result.extension=[]),extension={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},result.extension.push(extension)),targetTypes.length===1?(extension.valueCode=targetTypes[0],delete extension.valueCodeableConcept):(extension.valueCodeableConcept={coding:targetTypes.map(t=>({code:t}))},delete extension.valueCode),result)}function getQuestionnaireItemReferenceFilter(item,subject,encounter){let extension=(0,import_core180.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter");if(!extension?.valueString)return;let filter=extension.valueString;subject?.reference&&(filter=filter.replaceAll("$subj",subject.reference)),encounter?.reference&&(filter=filter.replaceAll("$encounter",encounter.reference));let result={},parts=filter.split("&");for(let part of parts){let[key,value]=(0,import_core180.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire,questionnaireResponse){return{resourceType:"QuestionnaireResponse",questionnaire:questionnaire.url??(0,import_core180.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item,questionnaireResponse?.item),status:"in-progress"}}function buildInitialResponseItems(items,questionnaireResponseItems){return items?.map(item=>buildInitialResponseItem(item,questionnaireResponseItems))??[]}function buildInitialResponseItem(item,questionnaireResponseItem){let existingResponseItem=questionnaireResponseItem?.find(responseItem=>responseItem.linkId===item.linkId);return{id:existingResponseItem?existingResponseItem.id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item,existingResponseItem?.item),answer:existingResponseItem?existingResponseItem.answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core180.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}function getItemInitialValue(initial){return(0,import_core180.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:initial},"value")}function getItemAnswerOptionValue(option){return(0,import_core180.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:option},"value")}function getItemEnableWhenValueAnswer(enableWhen){return(0,import_core180.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer")}function getResponseItemAnswerValue(answer){return(0,import_core180.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:answer},"value")}var import_react87=require("react"),QuestionnaireFormContext=(0,import_react87.createContext)({});var import_jsx_runtime136=require("react/jsx-runtime"),MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS=30,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS=50;function QuestionnaireFormItem(props){let context=(0,import_react88.useContext)(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a,idx)=>idx===props.index?newResponseAnswer:a)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??getItemInitialValue(initial),validationError=(0,import_core182.getExtension)(response,`${import_core182.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`),formComponent=null;switch(type){case QuestionnaireItemType.display:formComponent=(0,import_jsx_runtime136.jsx)("p",{children:props.item.text},props.item.linkId);break;case QuestionnaireItemType.boolean:formComponent=(0,import_jsx_runtime136.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime136.jsx)(import_core181.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);break;case QuestionnaireItemType.decimal:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{type:"number",step:"any",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.value===""?void 0:e.currentTarget.valueAsNumber})});break;case QuestionnaireItemType.integer:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{type:"number",step:1,id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.value===""?void 0:e.currentTarget.valueAsNumber})});break;case QuestionnaireItemType.date:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{type:"date",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});break;case QuestionnaireItemType.dateTime:formComponent=(0,import_jsx_runtime136.jsx)(DateTimeInput,{name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});break;case QuestionnaireItemType.time:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{type:"time",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});break;case QuestionnaireItemType.string:case QuestionnaireItemType.url:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer({valueString:value===""?void 0:value})}});break;case QuestionnaireItemType.text:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.Textarea,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer({valueString:value===""?void 0:value})}});break;case QuestionnaireItemType.attachment:formComponent=(0,import_jsx_runtime136.jsx)(import_core181.Group,{py:4,children:(0,import_jsx_runtime136.jsx)(AttachmentInput,{path:"",name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});break;case QuestionnaireItemType.reference:formComponent=(0,import_jsx_runtime136.jsx)(ReferenceInput,{name,required:props.required??item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});break;case QuestionnaireItemType.quantity:formComponent=(0,import_jsx_runtime136.jsx)(QuantityInput,{path:"",name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});break;case QuestionnaireItemType.choice:case QuestionnaireItemType.openChoice:isCheckboxChoice(item)?formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireCheckboxInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):isDropdownChoice(item)||item.answerValueSet&&!isRadiobuttonChoice(item)?formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireDropdownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireRadiobuttonInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});break;default:return null}return(0,import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment,{children:[formComponent,validationError?.valueString&&(0,import_jsx_runtime136.jsx)(import_core181.Text,{c:"red",size:"lg",mt:4,children:validationError.valueString})]})}function QuestionnaireDropdownInput(props){let{name,item,initial,onChangeAnswer,response}=props;if(!item.answerOption?.length&&!item.answerValueSet)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let initialValue=getItemInitialValue(initial),defaultValue2=getCurrentAnswer(response)??initialValue,currentAnswer=getCurrentMultiSelectAnswer(response),isMultiSelect=item.repeats||isMultiSelectChoice(item);if(item.answerValueSet)return(0,import_jsx_runtime136.jsx)(ValueSetAutocomplete,{name,placeholder:"Select items",binding:item.answerValueSet,maxValues:isMultiSelect?void 0:1,onChange:values=>{isMultiSelect?values.length===0?onChangeAnswer({}):onChangeAnswer(values.map(coding=>({valueCoding:coding}))):onChangeAnswer({valueCoding:values[0]})},defaultValue:defaultValue2?.value});if(isMultiSelect){let{propertyName,data:data2}=formatSelectData(item);return(0,import_jsx_runtime136.jsx)(import_core181.MultiSelect,{data:data2,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core182.typedValueToString)(initialValue)],onChange:selected=>{if(selected.length===0)onChangeAnswer({});else{let values=getNewMultiSelectValues(selected,propertyName,item);onChangeAnswer(values)}}})}else{let data2=[""];if(item.answerOption)for(let option of item.answerOption){let optionValue=getItemAnswerOptionValue(option);data2.push((0,import_core182.typedValueToString)(optionValue))}return(0,import_jsx_runtime136.jsx)(import_core181.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core182.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core182.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}}function getValueSetOptions(valueSetUrl,medplum){return valueSetUrl?medplum.valueSetExpand({url:valueSetUrl,count:MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS+1}).then(valueSet=>valueSet.expansion?.contains??[]):Promise.resolve([])}function useValueSetOptions(valueSetUrl){let medplum=(0,import_react_hooks51.useMedplum)(),[valueSetOptions,setValueSetOptions]=(0,import_react88.useState)([]),[isLoading,setIsLoading]=(0,import_react88.useState)(!1);return(0,import_react88.useEffect)(()=>{async function loadValueSet(){if(valueSetUrl){setIsLoading(!0);try{let options=await getValueSetOptions(valueSetUrl,medplum);setValueSetOptions(options)}catch(err){console.error("Error loading value set:",err)}finally{setIsLoading(!1)}}}loadValueSet().catch(console.error)},[valueSetUrl,medplum]),[valueSetOptions,isLoading]}function getOptionsFromValueSet(valueSetOptions,name){return valueSetOptions.map((option,i)=>{let optionName=`${name}-valueset-${i}`,optionValue={type:"Coding",value:{system:option.system,code:option.code,display:option.display}};return[optionName,optionValue]})}function QuestionnaireRadiobuttonInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core182.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=getItemInitialValue(initial),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),options=[],defaultValue2;if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=getItemAnswerOptionValue(option);return optionValue?.value?(initialValue&&(0,import_core182.stringify)(optionValue)===(0,import_core182.stringify)(initialValue)&&(defaultValue2=optionName),[optionName,optionValue]):null}).filter(option=>option!==null);options.push(...mappedOptions)}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);if(isLoading)return(0,import_jsx_runtime136.jsx)(import_core181.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS);return(0,import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment,{children:[(0,import_jsx_runtime136.jsx)(import_core181.Radio.Group,{name,value:answerLinkId??defaultValue2,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core182.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:limitedOptions.map(([optionName,optionValue])=>(0,import_jsx_runtime136.jsx)(import_core181.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime136.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime136.jsxs)(import_core181.Text,{size:"sm",c:"dimmed",mt:"xs",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function QuestionnaireCheckboxInput(props){let{name,item,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core182.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),initialSelectedValues=item.answerValueSet?(response.answer?.map(a=>a.valueCoding)||[]).filter(c=>c!==void 0):getCurrentMultiSelectAnswer(response),[selectedValues,setSelectedValues]=(0,import_react88.useState)(initialSelectedValues),options=[];if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=getItemAnswerOptionValue(option);return optionValue?.value?[optionName,optionValue]:null}).filter(option=>option!==null);options.push(...mappedOptions)}if(isLoading)return(0,import_jsx_runtime136.jsx)(import_core181.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS),handleCheckboxChange=(optionValue,selected)=>{if(item.answerValueSet){let currentCodings=selectedValues,newCodings;selected?newCodings=[...currentCodings,optionValue.value]:newCodings=currentCodings.filter(c=>!(0,import_core182.deepEquals)(c,optionValue.value)),setSelectedValues(newCodings),newCodings.length===0?onChangeAnswer({}):onChangeAnswer(newCodings.map(coding=>({valueCoding:coding})))}else{let currentValues=selectedValues,optionValueStr=(0,import_core182.typedValueToString)(optionValue),newValues;if(selected?newValues=[...currentValues,optionValueStr]:newValues=currentValues.filter(v=>v!==optionValueStr),setSelectedValues(newValues),newValues.length===0)onChangeAnswer({});else{let values=getNewMultiSelectValues(newValues,"value"+(0,import_core182.capitalize)(optionValue.type),item);onChangeAnswer(values)}}};return(0,import_jsx_runtime136.jsxs)(import_core181.Group,{style:{flexDirection:"column",alignItems:"flex-start"},children:[limitedOptions.map(([optionName,optionValue])=>{let optionValueStr=(0,import_core182.typedValueToString)(optionValue),isChecked=item.answerValueSet?selectedValues.some(coding=>(0,import_core182.deepEquals)(coding,optionValue.value)):selectedValues.includes(optionValueStr);return(0,import_jsx_runtime136.jsx)(import_core181.Checkbox,{id:optionName,label:(0,import_jsx_runtime136.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value}),checked:isChecked,onChange:event=>handleCheckboxChange(optionValue,event.currentTarget.checked)},optionName)}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime136.jsxs)(import_core181.Text,{size:"sm",c:"dimmed",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function NoAnswerDisplay(){return(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemAnswerOptionValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a=>getItemAnswerOptionValue(a)).map(type=>(0,import_core182.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core182.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function hasChoiceType(item,type){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code===type)}function isDropdownChoice(item){return hasChoiceType(item,"drop-down")}function isCheckboxChoice(item){return hasChoiceType(item,"check-box")}function isRadiobuttonChoice(item){return hasChoiceType(item,"radio-button")}function isMultiSelectChoice(item){return hasChoiceType(item,"multi-select")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core182.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(answerOption=>{let answerOptionValue=getItemAnswerOptionValue(answerOption),answerOptionValueStr=(0,import_core182.typedValueToString)(answerOptionValue);return{value:answerOptionValueStr,label:answerOptionValueStr}});return{propertyName,data:data2}}var QuestionnaireBuilder_default={section:"QuestionnaireBuilder_section",hovering:"QuestionnaireBuilder_hovering",editing:"QuestionnaireBuilder_editing",questionBody:"QuestionnaireBuilder_questionBody",topActions:"QuestionnaireBuilder_topActions",bottomActions:"QuestionnaireBuilder_bottomActions",movementActions:"QuestionnaireBuilder_movementActions",movementIcons:"QuestionnaireBuilder_movementIcons",columnAlignment:"QuestionnaireBuilder_columnAlignment",linkIdInput:"QuestionnaireBuilder_linkIdInput",typeSelect:"QuestionnaireBuilder_typeSelect",preserveBreaks:"QuestionnaireBuilder_preserveBreaks"};var import_jsx_runtime137=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=(0,import_react_hooks52.useMedplum)(),defaultValue2=(0,import_react_hooks52.useResource)(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react89.useState)(!1),[value,setValue]=(0,import_react89.useState)(),[selectedKey,setSelectedKey]=(0,import_react89.useState)(),[hoverKey,setHoverKey]=(0,import_react89.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react89.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react89.useEffect)(()=>(setValue(ensureQuestionnaireKeys(defaultValue2??{resourceType:"Questionnaire",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]);let handleChange=(questionnaire,disableSubmit)=>{setValue(questionnaire),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire)};return!schemaLoaded||!value?null:(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime137.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime137.jsx)(SubmitButton,{children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core184.isResource)(props.item),isContainer=isResource2||item.type===QuestionnaireItemType.group,linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react89.useRef)(props.item);itemRef.current=props.item;function onClick(e){killEvent(e),props.setSelectedKey(props.item.id)}function onHover(e){killEvent(e),props.setHoverKey(props.item.id)}function changeItem(changedItem){let curr=itemRef.current;props.onChange({...curr,item:curr.item?.map(i=>i.id===changedItem.id?changedItem:i)})}function addItem(addedItem,disableSubmit){props.onChange({...props.item,item:[...props.item.item??[],addedItem]},disableSubmit)}function removeItem(removedItem){props.onChange({...props.item,item:props.item.item?.filter(i=>i!==removedItem)})}function changeProperty(property,value){props.onChange({...itemRef.current,[property]:value})}function updateItem(updatedItem){props.onChange({...props.item,...updatedItem})}function toggleRepeatable(item2){props.onChange({...props.item,item:props.item.item?.map(i=>i===item2?{...i,repeats:!i.repeats}:i)})}function moveItem(itemIndex,delta){let updatedItems=reorderItems(props.item.item,itemIndex,delta);props.onChange({...props.item,item:updatedItems})}let className=clsx_default(QuestionnaireBuilder_default.section,{[QuestionnaireBuilder_default.editing]:editing,[QuestionnaireBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime137.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[isResource2&&(0,import_jsx_runtime137.jsx)(import_core183.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime137.jsx)(import_core183.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime137.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime137.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[resource.title&&(0,import_jsx_runtime137.jsx)(import_core183.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.preserveBreaks,children:item.text}),!isContainer&&(0,import_jsx_runtime137.jsx)(QuestionnaireFormItem,{item,index:0,required:!1,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(ItemBuilder,{item:item2,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,isFirst:i===0,isLast:i===(props.item.item??[]).length-1,setHoverKey:props.setHoverKey,onChange:changeItem,onRemove:()=>removeItem(item2),onRepeatable:toggleRepeatable,onMoveUp:()=>moveItem(i,-1),onMoveDown:()=>moveItem(i,1)})},item2.id)),!isContainer&&(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core183.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime137.jsx)(import_core183.NativeSelect,{size:"xs",className:QuestionnaireBuilder_default.typeSelect,defaultValue:item.type,onChange:e=>changeProperty("type",e.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"}]})]}):(0,import_jsx_runtime137.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime137.jsx)(import_core183.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime137.jsxs)(import_core183.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime137.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime137.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime137.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core184.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime137.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime137.jsx)(import_core183.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime137.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime137.jsxs)(import_core183.Box,{display:"flex",children:[(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime137.jsx)(import_core183.Space,{w:"lg"}),(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime137.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime137.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(ResourcePropertyInput,{name:"value[x]",path:"Questionnaire.answerOption.value[x]",property:props.property,defaultPropertyType:propertyType,defaultValue:propertyValue,onChange:(newValue,propName)=>{let newOptions=[...props.options],index=newOptions.findIndex(o=>o.id===option.id);newOptions[index]={id:option.id,[propName]:newValue},props.onChange({...props.item,answerOption:newOptions})},outcome:void 0},option.id)}),(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:props.options.filter(o=>o.id!==option.id)})},children:"Remove"})})]},option.id)})})}function ReferenceProfiles(props){let targetTypes=getQuestionnaireItemReferenceTargetTypes(props.item)??[];return(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime137.jsxs)(import_core183.Group,{children:[(0,import_jsx_runtime137.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime137.jsx)(import_core183.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId3=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId3(){return"id-"+nextId3++}function ensureQuestionnaireKeys(questionnaire){return{...questionnaire,id:questionnaire.id||generateId3(),item:ensureQuestionnaireItemKeys(questionnaire.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId3=Math.max(nextId3,parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId3(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId3()}))}function createPage(){return{id:generateId3(),linkId:generateLinkId("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 reorderItems(items,itemIndex,delta){let currentItems=items??[],newIndex=itemIndex+delta;if(newIndex<0||newIndex>=currentItems.length)return currentItems;let updatedItems=[...currentItems];return[updatedItems[itemIndex],updatedItems[newIndex]]=[updatedItems[newIndex],updatedItems[itemIndex]],updatedItems}var import_core188=require("@mantine/core"),import_core189=require("@medplum/core"),import_react_hooks53=require("@medplum/react-hooks"),import_react92=require("react");var import_core187=require("@mantine/core");var import_core185=require("@mantine/core"),import_react90=require("react");var import_jsx_runtime138=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react90.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type===QuestionnaireItemType.display)return(0,import_jsx_runtime138.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!==QuestionnaireItemType.choice&&item.type!==QuestionnaireItemType.openChoice;return item.type===QuestionnaireItemType.boolean?(0,import_jsx_runtime138.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime138.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_,index)=>(0,import_jsx_runtime138.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime138.jsx)(import_core185.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type===QuestionnaireItemType.choice||item.type===QuestionnaireItemType.openChoice)return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core186=require("@mantine/core"),import_react91=require("react");var import_jsx_runtime139=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react91.useState)(props.response);if((0,import_react91.useEffect)(()=>{setResponses(props.response)},[props.response]),responses.length===0)return null;function handleRepeatableGroup(newResponseItems,index){let newResponses=responses.map((responses2,idx)=>idx===index?newResponseItems[0]:responses2);setResponses(newResponses),props.onChange(newResponses)}function insertNewGroup(){let newResponse=buildInitialResponseItem(props.item,void 0);setResponses([...responses,newResponse])}return(0,import_jsx_runtime139.jsxs)(import_jsx_runtime139.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime139.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime139.jsx)(import_core186.Anchor,{onClick:insertNewGroup,children:`Add Group: ${props.item.text}`})]})}function QuestionnaireGroup(props){let{response,checkForQuestionEnabled,onChange}=props;function onSetGroup(newResponseItem){let mergedResponse=response.item?.map(current=>newResponseItem.find(newResponse2=>newResponse2.id===current.id)??current)?.concat(newResponseItem.slice(1)),groupResponse={...response,item:mergedResponse};onChange([groupResponse])}return props.checkForQuestionEnabled(props.item)?(0,import_jsx_runtime139.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime139.jsx)(import_core186.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime139.jsx)(import_core186.Stack,{children:props.item.item?.map(item=>item.type===QuestionnaireItemType.group?item.repeats?(0,import_jsx_runtime139.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime139.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime139.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime140=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,excludeButtons,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type===QuestionnaireItemType.group?(0,import_jsx_runtime140.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime140.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime140.jsx)(import_core187.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime140.jsxs)(import_jsx_runtime140.Fragment,{children:[renderPages&&(0,import_jsx_runtime140.jsx)(import_core187.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime140.jsx)(import_core187.Stack,{children:form}),!excludeButtons&&(0,import_jsx_runtime140.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep:renderPages?nextStep:void 0,prevStep:renderPages?prevStep:void 0,renderPages,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.renderPages&&props.activePage>0,showNextButton=props.renderPages&&props.activePage<props.numberOfPages-1,showSubmitButton=!props.renderPages||props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime140.jsxs)(import_core187.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime140.jsx)(import_core187.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime140.jsx)(import_core187.Button,{onClick:e=>{let form=e.currentTarget.closest("form");props.nextStep&&form.reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime140.jsx)(SubmitButton,{children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime141=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=(0,import_react_hooks53.useMedplum)(),{subject,source:sourceFromProps}=props,questionnaire=(0,import_react_hooks53.useResource)(props.questionnaire),prevQuestionnaire=(0,import_react_hooks53.usePrevious)(questionnaire),questionnaireResponse=(0,import_react_hooks53.useResource)(props.questionnaireResponse),[response,setResponse]=(0,import_react92.useState)(questionnaireResponse),[activePage,setActivePage]=(0,import_react92.useState)(0),onChangeRef=(0,import_react92.useRef)(props.onChange);onChangeRef.current=props.onChange;let onSubmitRef=(0,import_react92.useRef)(props.onSubmit);onSubmitRef.current=props.onSubmit,(0,import_react92.useEffect)(()=>{if(questionnaireResponse?.item&&questionnaire){let response2=buildInitialResponse(questionnaire,questionnaireResponse),evaluatedResponse=evaluateAndMergeResponseItems(response2,questionnaire);setResponse(evaluatedResponse)}else{if(questionnaire&&getQuestionnaireIdentity(prevQuestionnaire)===getQuestionnaireIdentity(questionnaire))return;setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)}},[questionnaireResponse,questionnaire,prevQuestionnaire]),(0,import_react92.useEffect)(()=>{if(response&&onChangeRef.current)try{onChangeRef.current(response)}catch(e){console.error("Error invoking QuestionnaireForm.onChange callback",e)}},[response]);let setItems=(0,import_react92.useCallback)(newResponseItems=>{setResponse(prevResponse=>updateResponseItems(prevResponse,newResponseItems,questionnaire))},[questionnaire]),handleSubmit=(0,import_react92.useCallback)(()=>{let onSubmit=onSubmitRef.current;if(onSubmit&&questionnaire&&response){let source=sourceFromProps;if(!source){let profile=medplum.getProfile();profile&&(source=(0,import_core189.createReference)(profile))}onSubmit({...response,questionnaire:questionnaire.url??(0,import_core189.getReferenceString)(questionnaire),subject,source,authored:new Date().toISOString(),status:"completed"})}},[medplum,questionnaire,response,subject,sourceFromProps]);function checkForQuestionEnabled(item){return isQuestionEnabled(item,response)}if(!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime141.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime141.jsxs)(Form,{testid:"questionnaire-form",onSubmit:handleSubmit,children:[questionnaire.title&&(0,import_jsx_runtime141.jsx)(import_core188.Title,{children:questionnaire.title}),(0,import_jsx_runtime141.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:!props.disablePagination&&numberOfPages>1,activePage,numberOfPages,excludeButtons:props.excludeButtons,submitButtonText:props.submitButtonText,checkForQuestionEnabled,nextStep,prevStep})]})})}function mergeIndividualItems(prevItem,newItem){let mergedNestedItems=mergeItems(prevItem.item??[],newItem.item??[]);return{...newItem,item:mergedNestedItems.length>0?mergedNestedItems:void 0,answer:newItem.answer&&newItem.answer.length>0?newItem.answer:prevItem.answer}}function mergeItems(prevItems,newItems){let result=[],usedIds=new Set;for(let prevItem of prevItems){let itemId=prevItem.id,newItem=newItems.find(item=>item.id===itemId);newItem?(result.push(mergeIndividualItems(prevItem,newItem)),usedIds.add(newItem.id)):result.push(prevItem)}for(let newItem of newItems)usedIds.has(newItem.id)||result.push(newItem);return result}function getQuestionnaireIdentity(questionnaire){return questionnaire?.id||questionnaire}function updateResponseItems(prevResponse,newResponseItems,questionnaire){if(!newResponseItems)return{resourceType:"QuestionnaireResponse",status:"in-progress"};let currentItems=prevResponse?.item??[],mergedItems=mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems]),tempResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergedItems},updatedItems=evaluateCalculatedExpressionsInQuestionnaire(questionnaire?.item??[],tempResponse);return tempResponse.item=mergeUpdatedItems(mergedItems,updatedItems),evaluateAndMergeResponseItems(tempResponse,questionnaire)}function evaluateAndMergeResponseItems(tempResponse,questionnaire){let updatedItems=evaluateCalculatedExpressionsInQuestionnaire(questionnaire?.item??[],tempResponse);return{resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeUpdatedItems(tempResponse.item??[],updatedItems)}}var import_core190=require("@mantine/core"),import_core191=require("@medplum/core");var import_react93=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime142=require("react/jsx-runtime"),intervalFilters=["gender","age","gestationalAge","context","appliesTo","category"],defaultProps={definition:{resourceType:"ObservationDefinition",code:{text:""}},onSubmit:()=>{}};function ReferenceRangeEditor(props){props=Object.assign(defaultProps,props);let defaultDefinition=props.definition,[intervalGroups,setIntervalGroups]=(0,import_react93.useState)([]),[groupId,setGroupId]=(0,import_react93.useState)(1),[intervalId,setIntervalId]=(0,import_react93.useState)(1);return(0,import_react93.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime142.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime142.jsx)(import_core190.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime142.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime142.jsx)(import_core190.ActionIcon,{title:"Add Group",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),addGroup({id:`group-id-${groupId}`,filters:{},intervals:[]}),setGroupId(id=>id+1)},children:(0,import_jsx_runtime142.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime142.jsx)(import_core190.Group,{justify:"flex-end",children:(0,import_jsx_runtime142.jsx)(SubmitButton,{children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g=>g.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime142.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime142.jsxs)(import_core190.Stack,{gap:"lg",children:[(0,import_jsx_runtime142.jsx)(import_core190.Group,{justify:"flex-end",children:(0,import_jsx_runtime142.jsx)(import_core190.ActionIcon,{title:"Remove Group",variant:"subtle","data-testid":`remove-group-button-${intervalGroup.id}`,size:"sm",onClick:e=>{killEvent(e),props.onRemoveGroup(intervalGroup)},children:(0,import_jsx_runtime142.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime142.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime142.jsx)(import_core190.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime142.jsxs)(import_core190.Stack,{gap:"xs",children:[(0,import_jsx_runtime142.jsxs)(import_core190.Group,{children:[(0,import_jsx_runtime142.jsx)(import_core190.TextInput,{"data-testid":`condition-${interval.id}`,defaultValue:interval.condition,label:"Condition: ",size:"sm",onChange:e=>{killEvent(e),props.onChange(intervalGroup.id,{...interval,condition:e.currentTarget.value.trim()})}},`condition-${interval.id}`),(0,import_jsx_runtime142.jsx)(import_core190.ActionIcon,{title:"Remove Interval",variant:"subtle",size:"sm","data-testid":`remove-interval-${interval.id}`,onClick:e=>{killEvent(e),props.onRemove(intervalGroup.id,interval)},children:(0,import_jsx_runtime142.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime142.jsx)(RangeInput,{path:"",onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime142.jsx)(import_core190.ActionIcon,{title:"Add Interval",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),props.onAdd(intervalGroup.id,{range:{low:{unit},high:{unit}}})},children:(0,import_jsx_runtime142.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props;intervalGroup.filters.age||(intervalGroup.filters.age={});for(let key of["low","high"])intervalGroup.filters.age[key]?.unit||(intervalGroup.filters.age[key]={...intervalGroup.filters.age[key],unit:"years",system:"http://unitsofmeasure.org"});return(0,import_jsx_runtime142.jsxs)(import_core190.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime142.jsx)(import_core190.Group,{children:(0,import_jsx_runtime142.jsx)(import_core190.NativeSelect,{data:["","male","female"],label:"Gender:",defaultValue:intervalGroup.filters.gender||"",onChange:e=>{for(let interval of intervalGroup.intervals){let newGender=e.currentTarget.value;newGender===""&&(newGender=void 0),onChange(intervalGroup.id,{...interval,gender:newGender})}}})}),(0,import_jsx_runtime142.jsxs)(import_core190.Group,{gap:"xs",children:[(0,import_jsx_runtime142.jsx)(import_core190.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime142.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime142.jsx)(RangeInput,{path:"",name:`age-${intervalGroup.id}`,defaultValue:intervalGroup.filters.age,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime142.jsx)(import_core190.NativeSelect,{data:["","pre-puberty","follicular","midcycle","luteal","postmenopausal"],label:"Endocrine:",defaultValue:intervalGroup.filters.context?.text||"",onChange:e=>{for(let interval of intervalGroup.intervals){let newEndocrine=e.currentTarget.value;newEndocrine===""?(newEndocrine=void 0,onChange(intervalGroup.id,{...interval,context:void 0})):onChange(intervalGroup.id,{...interval,context:{text:newEndocrine,coding:[{code:newEndocrine,system:"http://terminology.hl7.org/CodeSystem/referencerange-meaning"}]}})}}}),(0,import_jsx_runtime142.jsx)(import_core190.NativeSelect,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f=>[f,interval[f]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core191.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core191.formatRange)(interval.gestationalAge)}`,`context=${interval.context?.text}`,`appliesTo=${interval.appliesTo?.map(c=>c.text).join("+")}`,`category=${interval.category}`].join(":")}function getUnitString(unit){return unit&&((0,import_core191.getCodeBySystem)(unit,"http://unitsofmeasure.org")||unit.text)}function isEmptyInterval(interval){return interval.range?.low?.value===void 0&&interval.range?.high?.value===void 0}var import_core192=require("@mantine/core"),import_core193=require("@medplum/core"),import_react_hooks54=require("@medplum/react-hooks");var import_react94=require("react");var import_jsx_runtime143=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=(0,import_react_hooks54.useMedplum)(),requestGroup=(0,import_react_hooks54.useResource)(props.value),[startedLoading,setStartedLoading]=(0,import_react94.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react94.useState)();if((0,import_react94.useEffect)(()=>{requestGroup&&!startedLoading&&(medplum.executeBatch(buildBatchRequest(requestGroup)).then(setResponseBundle).catch(console.log),setStartedLoading(!0))},[medplum,requestGroup,startedLoading]),!requestGroup||!responseBundle)return null;return(0,import_jsx_runtime143.jsx)(import_core192.Grid,{children:requestGroup.action?.map((action,index)=>{let task=action.resource&&findBundleEntry(action.resource),taskInput=task?.input?.[0]?.valueReference,taskOutput=task?.output?.[0]?.valueReference;return(0,import_jsx_runtime143.jsxs)(import_react94.Fragment,{children:[(0,import_jsx_runtime143.jsx)(import_core192.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime143.jsx)(IconCheckbox,{}):(0,import_jsx_runtime143.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime143.jsxs)(import_core192.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime143.jsx)(import_core192.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime143.jsx)("div",{children:action.description}),(0,import_jsx_runtime143.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime143.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core193.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime143.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime143.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime143.jsxs)(import_core192.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime143.jsx)(import_core192.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime143.jsx)(import_core192.Button,{onClick:()=>props.onEdit(task,taskInput,taskOutput),children:"Edit"})]})]},`action-${index}`)})});function buildBatchRequest(request){let batchEntries=[];if(request.action)for(let action of request.action)action.resource?.reference&&batchEntries.push({request:{method:"GET",url:action.resource.reference}});return{resourceType:"Bundle",type:"batch",entry:batchEntries}}function findBundleEntry(reference){for(let entry of responseBundle?.entry??[])if(entry.resource&&reference.reference===(0,import_core193.getReferenceString)(entry.resource))return entry.resource}}var import_react_hooks55=require("@medplum/react-hooks"),import_react95=require("react");var import_core194=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N=orig.length,M=rev.length,MAX=N+M+1,size=1+2*MAX,middle=size/2|0,diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k=-d;k<=d;k+=2){let kmiddle=middle+k,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k===-d||k!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N&&j<M&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N&&j>=M)return diagonal[kmiddle]}diagonal[middle+d-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=(history.entry??[]).filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:(0,import_core194.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b)=>a.meta.lastUpdated.localeCompare(b.meta.lastUpdated));if(!versions.length)return[];let table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k=0;k<revision.revised.lines.length;k++)table.splice(position+k,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime144=require("react/jsx-runtime");function ResourceBlame(props){let medplum=(0,import_react_hooks55.useMedplum)(),[value,setValue]=(0,import_react95.useState)(props.history);if((0,import_react95.useEffect)(()=>{!props.history&&props.resourceType&&props.id&&medplum.readHistory(props.resourceType,props.id).then(setValue).catch(console.log)},[medplum,props.history,props.resourceType,props.id]),!value)return(0,import_jsx_runtime144.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime144.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime144.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime144.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime144.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime144.jsxs)(import_jsx_runtime144.Fragment,{children:[(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime144.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime144.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime144.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core195=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime145=require("react/jsx-runtime");function ResourceDiff(props){let originalResource=props.original,revisedResource=props.revised;props.ignoreMeta&&(originalResource={...originalResource,meta:void 0},revisedResource={...revisedResource,meta:void 0});let original=(0,import_core195.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core195.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime145.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime145.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime145.jsxs)(import_jsx_runtime145.Fragment,{children:["...",(0,import_jsx_runtime145.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime145.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
71
+ }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core87.isEmpty)(targetType.resourceType)}var import_core92=require("@mantine/core"),import_core93=require("@medplum/core"),import_react_hooks26=require("@medplum/react-hooks"),import_react50=require("react");function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_core90=require("@mantine/core"),import_core91=require("@medplum/core"),import_react49=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core88=require("@mantine/core");var import_jsx_runtime77=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime77.jsx)(import_core88.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime77.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime77.jsx)(import_core88.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime77.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core89=require("@mantine/core");var import_jsx_runtime78=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime78.jsx)(import_core89.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime78.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime79=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react49.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react49.useContext)(ElementsContext),contextValue=(0,import_react49.useMemo)(()=>{if((0,import_core91.isPopulated)(sliceElements))return(0,import_core91.buildElementsContext)({parentContext:parentElementsContextValue,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentElementsContextValue,props.path,slice.typeSchema?.url,sliceElements]);function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}let required=slice.min>0,indentedStack=(0,import_core91.isEmpty)(slice.elements),propertyDisplayName=(0,import_core91.getPropertyDisplayName)(slice.name),showEmptyMessage=props.property.readonly&&values.length===0;return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime79.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,readonly:props.property.readonly,children:showEmptyMessage?(0,import_jsx_runtime79.jsx)(import_core90.Text,{c:"dimmed",children:"(empty)"}):(0,import_jsx_runtime79.jsxs)(import_core90.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime79.jsxs)(import_core90.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime79.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime79.jsx)(ElementDefinitionTypeInput,{elementDefinitionType:slice.type[0],name:slice.name,defaultValue:value,onChange:newValue=>{let newValues=[...values];newValues[valueIndex]=newValue,setValuesWrapper(newValues)},outcome:props.outcome,min:slice.min,max:slice.max,binding:slice.binding,path:props.path,valuePath:void 0,readOnly:props.property.readonly})}),!props.property.readonly&&values.length>slice.min&&(0,import_jsx_runtime79.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),!props.property.readonly&&values.length<slice.max&&(0,import_jsx_runtime79.jsx)(import_core90.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime79.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_jsx_runtime80=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=(0,import_react_hooks26.useMedplum)(),[loading,setLoading]=(0,import_react50.useState)(!0),[slices,setSlices]=(0,import_react50.useState)([]),[defaultValue2]=(0,import_react50.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react50.useState)(()=>[defaultValue2]),ctx=(0,import_react50.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react50.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(defaultValue2,slices2,property.slicing,ctx.profileUrl);addPlaceholderValues(slicedValues2,slices2),setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,defaultValue2,ctx.profileUrl,setSlicedValues]);function setValuesWrapper(newValues,sliceIndex){let newSlicedValues=[...slicedValues];if(newSlicedValues[sliceIndex]=newValues,setSlicedValues(newSlicedValues),props.onChange){let cleaned=newSlicedValues.flat().filter(val=>val!==void 0);props.onChange(cleaned)}}if(loading)return(0,import_jsx_runtime80.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core93.getPathDisplayName)(property.path),showEmptyMessage=props.property.readonly&&slices.length===0&&defaultValue2.length===0;return(0,import_jsx_runtime80.jsxs)(import_core92.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[showEmptyMessage&&(0,import_jsx_runtime80.jsx)(import_core92.Text,{c:"dimmed",children:"(empty)"}),slices.map((slice,sliceIndex)=>(0,import_jsx_runtime80.jsx)(SliceInput,{slice,path:props.path,valuePath:props.valuePath,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime80.jsxs)(import_core92.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime80.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime80.jsx)(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,path:props.path,valuePath:getValuePath(props.path,props.valuePath,valueIndex),defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),!props.property.readonly&&(0,import_jsx_runtime80.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),!props.property.readonly&&showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime80.jsx)(import_core92.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime80.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function addPlaceholderValues(slicedValues,slices){for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}}var import_core94=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications5=require("@mantine/notifications");var import_react51=require("react"),import_jsx_runtime81=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react51.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react51.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime81.jsxs)(import_core94.Flex,{gap:"xs",children:[(0,import_jsx_runtime81.jsx)(import_core94.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime81.jsx)(import_core94.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications5.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime81.jsx)(IconCopy,{})})]})}var import_core95=require("@mantine/core"),import_core96=require("@medplum/core"),import_react52=require("react");var import_jsx_runtime82=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue),[open,setOpen]=(0,import_react52.useState)(!props.disabled&&(props.defaultModalOpen??!1)),valueRef=(0,import_react52.useRef)(value);return valueRef.current=value,(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:[(0,import_jsx_runtime82.jsxs)(import_core95.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime82.jsx)("span",{children:(0,import_core96.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime82.jsx)(import_core95.Button,{disabled:props.disabled,onClick:()=>setOpen(!0),children:"Edit"})]}),!props.disabled&&(0,import_jsx_runtime82.jsx)(TimingEditorDialog,{path:props.path,visible:open,defaultValue:valueRef.current,onOk:newValue=>{props.onChange&&props.onChange(newValue),setValue(newValue),setOpen(!1)},onCancel:()=>setOpen(!1)})]})}var defaultValue={repeat:{period:1,periodUnit:"d"}};function TimingEditorDialog(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue||defaultValue),{getExtendedProps}=(0,import_react52.useContext)(ElementsContext),[eventProps,repeatProps,repeatPeriodProps,repeatPeriodUnitProps,repeatDayOfWeekProps]=(0,import_react52.useMemo)(()=>["event","repeat","repeat.period","repeat.periodUnit","repeat.dayOfWeek"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),valueRef=(0,import_react52.useRef)(value);valueRef.current=value;function setStart(newStart){setValue({...valueRef.current,event:[newStart]})}function setRepeat(repeat){setValue({...valueRef.current,repeat})}function setPeriod(newPeriod){setRepeat({...valueRef.current?.repeat,period:newPeriod})}function setPeriodUnit(newPeriodUnit){setRepeat({...valueRef.current?.repeat,periodUnit:newPeriodUnit})}function setDaysOfWeek(newDaysOfWeek){setRepeat({...valueRef.current?.repeat,dayOfWeek:newDaysOfWeek})}return(0,import_jsx_runtime82.jsx)(import_core95.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime82.jsxs)(import_core95.Stack,{children:[(0,import_jsx_runtime82.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime82.jsx)(DateTimeInput,{disabled:eventProps?.readonly,name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime82.jsx)(import_core95.Switch,{disabled:repeatProps?.readonly,label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:[(0,import_jsx_runtime82.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime82.jsxs)(import_core95.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime82.jsx)(import_core95.TextInput,{disabled:repeatPeriodProps?.readonly,type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime82.jsx)(import_core95.NativeSelect,{disabled:repeatPeriodUnitProps?.readonly,id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.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"}]})]})}),value.repeat.periodUnit==="wk"&&(0,import_jsx_runtime82.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime82.jsx)(import_core95.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime82.jsx)(import_core95.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime82.jsx)(import_core95.Chip,{value:day,size:"xs",radius:"xl",disabled:repeatDayOfWeekProps?.readonly,children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime82.jsx)(import_core95.Group,{justify:"flex-end",children:(0,import_jsx_runtime82.jsx)(import_core95.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime83=require("react/jsx-runtime");function ResourcePropertyInput(props){let{property,name,onChange,defaultValue:defaultValue2}=props,defaultPropertyType=props.defaultPropertyType&&props.defaultPropertyType!=="undefined"?props.defaultPropertyType:property.type[0].code,propertyTypes=property.type;if((property.isArray||property.max>1)&&!props.arrayElement){if(defaultPropertyType===import_core98.PropertyType.Attachment)return(0,import_jsx_runtime83.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange,disabled:property.readonly});let indent=propertyTypes[0]?.code!==import_core98.PropertyType.Extension;return(0,import_jsx_runtime83.jsx)(ResourceArrayInput,{property,name,path:props.path,valuePath:props.valuePath,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}else return propertyTypes.length>1?(0,import_jsx_runtime83.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime83.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core98.capitalize)(propertyTypes[0].code));props.onChange(newValue,newPropName)}},outcome:props.outcome,elementDefinitionType:propertyTypes[0],min:property.min,max:property.min,binding:property.binding,path:props.path,valuePath:props.valuePath,readOnly:property.readonly})}function ElementDefinitionInputSelector(props){let propertyTypes=props.elementDefinitionTypes,initialPropertyType;props.defaultPropertyType&&(initialPropertyType=propertyTypes.find(t=>t.code===props.defaultPropertyType)),initialPropertyType||(initialPropertyType=propertyTypes[0]);let[selectedType,setSelectedType]=(0,import_react53.useState)(initialPropertyType);return(0,import_jsx_runtime83.jsxs)(import_core97.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime83.jsx)(import_core97.NativeSelect,{disabled:props.property.readonly,style:{width:"200px"},defaultValue:selectedType.code,"data-testid":props.name&&props.name+"-selector",onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),(0,import_jsx_runtime83.jsx)(ElementDefinitionTypeInput,{name:props.name,defaultValue:props.defaultValue,outcome:props.outcome,elementDefinitionType:selectedType,onChange:newValue=>{props.onChange&&props.onChange(newValue,props.name.replace("[x]",(0,import_core98.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path,valuePath:props.valuePath,readOnly:props.property.readonly})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path,valuePath,readOnly}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react53.useContext)(ElementsContext),defaultValue2=(0,import_react53.useMemo)(()=>{if(!(0,import_core98.isComplexTypeCode)(propertyType)||!(0,import_core98.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core98.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core98.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core98.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core98.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime83.jsx)("div",{children:"Property type not specified "});function getComplexInputProps(){return{name,defaultValue:defaultValue2,onChange,outcome,path,valuePath,disabled:readOnly}}function getPrimitiveInputProps(){let error=getErrorsForInput(props.outcome,valuePath??path);return{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,error,disabled:readOnly}}switch(propertyType){case import_core98.PropertyType.SystemString:case import_core98.PropertyType.canonical:case import_core98.PropertyType.string:case import_core98.PropertyType.time:case import_core98.PropertyType.uri:case import_core98.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime83.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime83.jsx)(import_core97.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core98.PropertyType.date:return(0,import_jsx_runtime83.jsx)(import_core97.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core98.PropertyType.dateTime:case import_core98.PropertyType.instant:return(0,import_jsx_runtime83.jsx)(DateTimeInput,{...getPrimitiveInputProps(),onChange,outcome});case import_core98.PropertyType.decimal:case import_core98.PropertyType.integer:case import_core98.PropertyType.positiveInt:case import_core98.PropertyType.unsignedInt:return(0,import_jsx_runtime83.jsx)(import_core97.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core98.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core98.PropertyType.code:return(0,import_jsx_runtime83.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet,creatable:!0,maxValues:1});case import_core98.PropertyType.boolean:return(0,import_jsx_runtime83.jsx)(import_core97.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core98.PropertyType.base64Binary:case import_core98.PropertyType.markdown:return(0,import_jsx_runtime83.jsx)(import_core97.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core98.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core98.PropertyType.Address:return(0,import_jsx_runtime83.jsx)(AddressInput,{...getComplexInputProps()});case import_core98.PropertyType.Annotation:return(0,import_jsx_runtime83.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core98.PropertyType.Attachment:return(0,import_jsx_runtime83.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core98.PropertyType.CodeableConcept:return(0,import_jsx_runtime83.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core98.PropertyType.Coding:return(0,import_jsx_runtime83.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core98.PropertyType.ContactDetail:return(0,import_jsx_runtime83.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core98.PropertyType.ContactPoint:return(0,import_jsx_runtime83.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core98.PropertyType.Extension:return(0,import_jsx_runtime83.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core98.PropertyType.HumanName:return(0,import_jsx_runtime83.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core98.PropertyType.Identifier:return(0,import_jsx_runtime83.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core98.PropertyType.Money:return(0,import_jsx_runtime83.jsx)(MoneyInput,{...getComplexInputProps()});case import_core98.PropertyType.Period:return(0,import_jsx_runtime83.jsx)(PeriodInput,{...getComplexInputProps()});case import_core98.PropertyType.Duration:case import_core98.PropertyType.Quantity:return(0,import_jsx_runtime83.jsx)(QuantityInput,{...getComplexInputProps()});case import_core98.PropertyType.Range:return(0,import_jsx_runtime83.jsx)(RangeInput,{...getComplexInputProps()});case import_core98.PropertyType.Ratio:return(0,import_jsx_runtime83.jsx)(RatioInput,{...getComplexInputProps()});case import_core98.PropertyType.Reference:return(0,import_jsx_runtime83.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core98.PropertyType.Timing:return(0,import_jsx_runtime83.jsx)(TimingInput,{...getComplexInputProps()});case import_core98.PropertyType.Dosage:case import_core98.PropertyType.UsageContext:default:return(0,import_jsx_runtime83.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core98.HTTP_HL7_ORG}/fhir/StructureDefinition/`,"https://medplum.com/fhir/StructureDefinition/"];function getTargetTypes(elementDefinitionType){return elementDefinitionType?.targetProfile?.map(p=>{let resourceTypePrefix=RESOURCE_TYPE_URL_PREFIXES.find(prefix=>p.startsWith(prefix));return resourceTypePrefix?p.slice(resourceTypePrefix.length):p})}var import_jsx_runtime84=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react54.useState)(props.defaultValue??{}),elementsContext=(0,import_react54.useContext)(ElementsContext),elementsToRender=(0,import_react54.useMemo)(()=>getElementsToRender(elementsContext.elements),[elementsContext.elements]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let typedValue={type:props.type,value};return(0,import_jsx_runtime84.jsx)(import_core99.Stack,{style:{flexGrow:1},"data-testid":props.testId,children:elementsToRender.map(([key,element])=>{let[propertyValue,propertyType]=getValueAndTypeFromElement(typedValue,key,element),required=element.min!==void 0&&element.min>0,valuePath=props.valuePath?props.valuePath+"."+key:void 0,resourcePropertyInput=(0,import_jsx_runtime84.jsx)(ResourcePropertyInput,{property:element,name:key,path:props.path+"."+key,valuePath,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.includes(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?(0,import_jsx_runtime84.jsx)(CheckboxFormSection,{title:(0,import_core100.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,readonly:element.readonly,children:resourcePropertyInput},key):(0,import_jsx_runtime84.jsx)(FormSection,{title:(0,import_core100.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,readonly:element.readonly,children:resourcePropertyInput},key)})})}var import_jsx_runtime85=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react55.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react55.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react55.useMemo)(()=>(0,import_core101.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react55.useMemo)(()=>{if(typeSchema)return(0,import_core101.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime85.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime85.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core102=require("@mantine/core"),import_react56=require("react");var CalendarInput_default={table:"CalendarInput_table"};function getMonthString(date){return date.toLocaleString("default",{month:"long"})+" "+date.getFullYear()}function getStartMonth(){let result=new Date;return result.setDate(1),result.setHours(0,0,0,0),result}var import_jsx_runtime86=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react56.useState)(getStartMonth);function moveMonth(delta){setMonth(currMonth=>{let newMonth=new Date(currMonth.getTime());return newMonth.setMonth(currMonth.getMonth()+delta),onChangeMonth(newMonth),newMonth})}let grid=(0,import_react56.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime86.jsxs)("div",{children:[(0,import_jsx_runtime86.jsxs)(import_core102.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime86.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime86.jsxs)(import_core102.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime86.jsx)(import_core102.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime86.jsx)(import_core102.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime86.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime86.jsx)("thead",{children:(0,import_jsx_runtime86.jsxs)("tr",{children:[(0,import_jsx_runtime86.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime86.jsx)("th",{children:"MON"}),(0,import_jsx_runtime86.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime86.jsx)("th",{children:"WED"}),(0,import_jsx_runtime86.jsx)("th",{children:"THU"}),(0,import_jsx_runtime86.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime86.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime86.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime86.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime86.jsx)("td",{children:day&&(0,import_jsx_runtime86.jsx)(import_core102.Button,{variant:"light",disabled:!day.available,onClick:()=>onClick(day.date),children:day.date.getDate()})},"day-"+dayIndex))},"week-"+weekIndex))})]})]})}function buildGrid(startDate,slots){let d=new Date(startDate.getFullYear(),startDate.getMonth()),grid=[],row=[];for(let i=0;i<d.getDay();i++)row.push(void 0);for(;d.getMonth()===startDate.getMonth();)row.push({date:new Date(d.getTime()),available:isDayAvailable(d,slots)}),d.getDay()===6&&(grid.push(row),row=[]),d.setDate(d.getDate()+1);if(d.getDay()!==0){for(let i=d.getDay();i<7;i++)row.push(void 0);grid.push(row)}return grid}function isDayAvailable(day,slots){for(let slot of slots){let slotStart=new Date(slot.start);if(slotStart.getFullYear()===day.getFullYear()&&slotStart.getMonth()===day.getMonth()&&slotStart.getDate()===day.getDate())return!0}return!1}var import_core103=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_notifications6=require("@mantine/notifications"),import_core104=require("@medplum/core"),import_react_hooks27=require("@medplum/react-hooks");var import_react57=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleName:"BaseChat_chatBubbleName",chatBubbleNameRight:"BaseChat_chatBubbleNameRight"};var import_jsx_runtime87=require("react/jsx-runtime");function showError(message){(0,import_notifications6.showNotification)({color:"red",title:"Error",message,autoClose:!1})}function parseSentTime(communication){let sentTime=new Date(communication.sent??0),sentTimeMins=sentTime.getMinutes().toString();return`${sentTime.getHours()}:${sentTimeMins.length===1?"0":""}${sentTimeMins}`}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a,b)=>a.sent.localeCompare(b.sent)),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,onMessageUpdated,inputDisabled,onError,...paperProps}=props,medplum=(0,import_react_hooks27.useMedplum)(),inputRef=(0,import_react57.useRef)(null),scrollAreaRef=(0,import_react57.useRef)(null),firstScrollRef=(0,import_react57.useRef)(!0),initialLoadRef=(0,import_react57.useRef)(!0),[profile,setProfile]=(0,import_react57.useState)(medplum.getProfile()),[reconnecting,setReconnecting]=(0,import_react57.useState)(!1),[loading,setLoading]=(0,import_react57.useState)(!0);loading||(initialLoadRef.current=!1);let profileRefStr=(0,import_react57.useMemo)(()=>profile?(0,import_core104.getReferenceString)(medplum.getProfile()):"",[profile,medplum]),searchMessages=(0,import_react57.useCallback)(async()=>{setLoading(!0);let searchParams=new URLSearchParams(query);searchParams.append("_sort","-sent"),searchParams.append("sent:missing","false");let searchResult=await medplum.searchResources("Communication",searchParams,{cache:"no-cache"});upsertCommunications(communicationsRef.current,searchResult,setCommunications),setLoading(!1)},[medplum,setCommunications,query]);(0,import_react57.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core104.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react_hooks27.useSubscription)(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),(0,import_core104.getReferenceString)(communication.sender)!==profileRefStr&&(communicationsRef.current.find(c=>c.id===communication.id)?onMessageUpdated?.(communication):onMessageReceived?.(communication))},{onWebSocketClose:(0,import_react57.useCallback)(()=>{reconnecting||setReconnecting(!0),(0,import_notifications6.showNotification)({color:"red",message:"Live chat disconnected. Attempting to reconnect..."})},[reconnecting]),onWebSocketOpen:(0,import_react57.useCallback)(()=>{reconnecting&&(0,import_notifications6.showNotification)({color:"green",message:"Live chat reconnected."})},[reconnecting]),onSubscriptionConnect:(0,import_react57.useCallback)(()=>{reconnecting&&(searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core104.normalizeErrorString)(err)})),setReconnecting(!1))},[reconnecting,searchMessages]),onError:(0,import_react57.useCallback)(err=>{onError?onError(err):showError((0,import_core104.normalizeErrorString)(err))},[onError])});let sendMessageInternal=(0,import_react57.useCallback)(formData=>{inputDisabled||(inputRef.current&&(inputRef.current.value=""),sendMessage(formData.message),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage]);(0,import_react57.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks2.useResizeObserver)(),communicationsRef=(0,import_react57.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react57.useRef)(communications),scrollToBottomRef=(0,import_react57.useRef)(!0);(0,import_react57.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react57.useEffect)(()=>{scrollToBottomRef.current&&scrollAreaRef.current?.scrollTo&&(scrollAreaRef.current.scrollTo({top:scrollAreaRef.current.scrollHeight,...firstScrollRef.current?{duration:0}:{behavior:"smooth"}}),firstScrollRef.current=!1,scrollToBottomRef.current=!1)});let myLastDeliveredId=(0,import_react57.useMemo)(()=>{let i=communications.length;for(;i--;){let comm=communications[i];if(comm.sender?.reference===profileRefStr&&comm.received)return comm.id}return""},[communications,profileRefStr]);return profile?(0,import_jsx_runtime87.jsxs)(import_core103.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[(0,import_jsx_runtime87.jsx)(import_core103.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:initialLoadRef.current?(0,import_jsx_runtime87.jsxs)(import_core103.Stack,{align:"stretch",mt:"lg",children:[(0,import_jsx_runtime87.jsxs)(import_core103.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(import_core103.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]}),(0,import_jsx_runtime87.jsxs)(import_core103.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"right",parentWidth:parentRect.width}),(0,import_jsx_runtime87.jsx)(import_core103.Skeleton,{height:38,circle:!0,mr:"md"})]}),(0,import_jsx_runtime87.jsxs)(import_core103.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(import_core103.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime87.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]})]},"skeleton-chat-messages"):(0,import_jsx_runtime87.jsxs)(import_core103.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:[(0,import_jsx_runtime87.jsx)(import_core103.LoadingOverlay,{visible:loading||reconnecting,style:{width:parentRect.width,height:parentRect.height,position:"absolute",zIndex:1}}),communications.map((c,i)=>{let prevCommunication=i>0?communications[i-1]:void 0,prevCommTime=prevCommunication?parseSentTime(prevCommunication):void 0,currCommTime=parseSentTime(c);return(0,import_jsx_runtime87.jsxs)(import_core103.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime87.jsx)("div",{style:{textAlign:"center"},children:currCommTime}),c.sender?.reference===profileRefStr?(0,import_jsx_runtime87.jsxs)(import_core103.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered:!!c.received&&c.id===myLastDeliveredId}),(0,import_jsx_runtime87.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender})]}):(0,import_jsx_runtime87.jsxs)(import_core103.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime87.jsx)(ResourceAvatar,{radius:"xl",value:c.sender}),(0,import_jsx_runtime87.jsx)(ChatBubble,{alignment:"left",communication:c})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})]})}),(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatInputContainer,children:(0,import_jsx_runtime87.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime87.jsx)(import_core103.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",rightSectionWidth:42,disabled:inputDisabled,rightSection:inputDisabled?void 0:(0,import_jsx_runtime87.jsx)(import_core103.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime87.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,content=communication.payload?.[0]?.contentString||"",seenTime=new Date(communication.received??-1),senderResource=(0,import_react_hooks27.useResource)(communication.sender);return(0,import_jsx_runtime87.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime87.jsx)("div",{className:clsx_default(BaseChat_default.chatBubbleName,alignment==="right"&&BaseChat_default.chatBubbleNameRight),"aria-label":"Sender name",children:senderResource?(0,import_core104.getDisplayString)(senderResource):"[Unknown sender]"}),(0,import_jsx_runtime87.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubble,children:content})}),showDelivered&&(0,import_jsx_runtime87.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}function ChatBubbleSkeleton(props){let{alignment,parentWidth}=props;return(0,import_jsx_runtime87.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubbleName,"aria-label":"Placeholder sender name",children:(0,import_jsx_runtime87.jsx)("div",{style:{position:"relative"},children:(0,import_jsx_runtime87.jsx)(import_core103.Skeleton,{height:14,width:"100px",radius:"l",ml:alignment==="left"?"sm":void 0,style:alignment==="right"?{position:"absolute",right:5,top:-15}:void 0})})}),(0,import_jsx_runtime87.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime87.jsx)("div",{className:BaseChat_default.chatBubble,children:(0,import_jsx_runtime87.jsx)(import_core103.Skeleton,{height:14,width:parentWidth*.5,radius:"l"})})})]})}var import_core105=require("@mantine/core"),import_react_hooks28=require("@medplum/react-hooks");var import_react58=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime88=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=(0,import_react_hooks28.useMedplumProfile)(),[opened,setOpened]=(0,import_react58.useState)(open??!1);return(0,import_react58.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment,{children:[opened&&(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime88.jsx)(import_core105.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime88.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime88.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime88.jsx)(import_core105.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime88.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core106=require("@medplum/core"),import_react_hooks29=require("@medplum/react-hooks"),import_react59=require("react");var import_jsx_runtime89=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled,onError}=props,medplum=(0,import_react_hooks29.useMedplum)(),profile=(0,import_react_hooks29.useMedplumProfile)(),prevThreadId=(0,import_react_hooks29.usePrevious)(thread?.id),[communications,setCommunications]=(0,import_react59.useState)([]),profileRef=(0,import_react59.useMemo)(()=>profile?(0,import_core106.createReference)(profile):void 0,[profile]),threadRef=(0,import_react59.useMemo)(()=>(0,import_core106.createReference)(thread),[thread]);(0,import_react59.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react59.useCallback)(message=>{let profileRefStr=profileRef?(0,import_core106.getReferenceString)(profileRef):void 0;profileRefStr&&medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core106.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload:[{contentString:message}],partOf:[threadRef]}).then(communication=>{setCommunications([...communications,communication]),onMessageSent?.(communication)}).catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react59.useMemo)(()=>thread.recipient?.length===2?message=>{message.received&&message.status==="completed"||medplum.updateResource({...message,received:message.received??new Date().toISOString(),status:"completed"}).catch(console.error)}:void 0,[medplum,thread.recipient?.length]);return profile?(0,import_jsx_runtime89.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core106.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled,onError}):null}var import_core120=require("@mantine/core"),import_notifications7=require("@mantine/notifications"),import_core121=require("@medplum/core"),import_react_hooks34=require("@medplum/react-hooks");var import_react65=require("react");var import_core112=require("@mantine/core"),import_core113=require("@medplum/core"),import_react_hooks31=require("@medplum/react-hooks");var import_react61=require("react");var import_core107=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime90=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime90.jsx)(import_core107.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime90.jsx)(import_core107.Blockquote,{classNames:{cite:NoteDisplay_default.noteCite,root:NoteDisplay_default.noteRoot},cite:note.authorReference?.display||note.authorString,icon:null,children:note.text},`note-${note.text}`))}):null}var import_core110=require("@mantine/core");var import_core108=require("@mantine/core"),import_core109=require("@medplum/core"),import_react_hooks30=require("@medplum/react-hooks"),import_react60=require("react");var import_jsx_runtime91=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react60.useState)(),resource=(0,import_react_hooks30.useResource)(value,setOutcome),text;if(outcome&&!(0,import_core109.isOk)(outcome))text=`[${(0,import_core109.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core109.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime91.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime91.jsx)(import_core108.Text,{component:"span",...rest,children:text})}var import_jsx_runtime92=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime92.jsxs)(import_core110.Group,{gap:"xs",children:[(0,import_jsx_runtime92.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime92.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core111=require("@mantine/core"),import_jsx_runtime93=require("react/jsx-runtime"),statusToColor={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","not-done":"red",connected:"green",disconnected:"red",finished:"green",planned:"gray"};function StatusBadge(props){let{status,...badgeProps}=props;return(0,import_jsx_runtime93.jsx)(import_core111.Badge,{color:props.color||statusToColor[status],...badgeProps,children:status.replace(/-/g," ")})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime94=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1,hideSubject:!1};function DiagnosticReportDisplay(props){let medplum=(0,import_react_hooks31.useMedplum)(),diagnosticReport=(0,import_react_hooks31.useResource)(props.value),[specimens,setSpecimens]=(0,import_react61.useState)();if((0,import_react61.useEffect)(()=>{diagnosticReport?.specimen&&Promise.allSettled(diagnosticReport.specimen.map(ref=>medplum.readReference(ref))).then(outcomes=>outcomes.filter(outcome=>outcome.status==="fulfilled").map(outcome=>outcome.value)).then(setSpecimens).catch(console.error)},[medplum,diagnosticReport]),!diagnosticReport)return null;let specimenNotes=specimens?.flatMap(spec=>spec.note||[])||[];if(diagnosticReport.presentedForm&&diagnosticReport.presentedForm.length>0){let pf=diagnosticReport.presentedForm[0];pf.contentType?.startsWith("text/plain")&&pf.data&&specimenNotes.push({text:window.atob(pf.data)})}return(0,import_jsx_runtime94.jsxs)(import_core112.Stack,{children:[(0,import_jsx_runtime94.jsx)(import_core112.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime94.jsx)(DiagnosticReportHeader,{value:diagnosticReport,hideSubject:props.hideSubject}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime94.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime94.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value,hideSubject=!1}){return(0,import_jsx_runtime94.jsxs)(import_core112.Group,{mt:"md",gap:30,children:[value.subject&&!hideSubject&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime94.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime94.jsx)(import_core112.Text,{children:(0,import_core113.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime94.jsxs)("div",{children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime94.jsx)(StatusBadge,{status:value.status})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime94.jsxs)(import_core112.Stack,{gap:"xs",children:[(0,import_jsx_runtime94.jsx)(import_core112.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime94.jsx)(import_core112.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime94.jsx)(import_core112.List.Item,{ml:"sm",children:(0,import_jsx_runtime94.jsxs)(import_core112.Group,{gap:20,children:[(0,import_jsx_runtime94.jsxs)(import_core112.Group,{gap:5,children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{fw:500,children:"Collected:"})," ",(0,import_core113.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime94.jsxs)(import_core112.Group,{gap:5,children:[(0,import_jsx_runtime94.jsx)(import_core112.Text,{fw:500,children:"Received:"})," ",(0,import_core113.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime94.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime94.jsx)("thead",{children:(0,import_jsx_runtime94.jsxs)("tr",{children:[(0,import_jsx_runtime94.jsx)("th",{children:"Test"}),(0,import_jsx_runtime94.jsx)("th",{children:"Value"}),(0,import_jsx_runtime94.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime94.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime94.jsx)("th",{children:"Category"}),(0,import_jsx_runtime94.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime94.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime94.jsx)("tbody",{children:(0,import_jsx_runtime94.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime94.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core113.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=(0,import_react_hooks31.useResource)(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment,{children:[(0,import_jsx_runtime94.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime94.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime94.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime94.jsx)("td",{children:(0,import_jsx_runtime94.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime94.jsx)("td",{children:(0,import_jsx_runtime94.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime94.jsx)("div",{children:(0,import_jsx_runtime94.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core113.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime94.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime94.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime94.jsx)("td",{children:observation.status&&(0,import_jsx_runtime94.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime94.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime94.jsx)("tr",{children:(0,import_jsx_runtime94.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime94.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:(0,import_core113.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:range.text}):(0,import_jsx_runtime94.jsx)(RangeDisplay,{value:range}):null}function isCritical(observation){let code=observation.interpretation?.[0]?.coding?.[0]?.code;return code==="AA"||code==="LL"||code==="HH"||code==="A"}var import_core115=require("@mantine/core"),import_core116=require("@medplum/core"),import_react_hooks32=require("@medplum/react-hooks"),import_react63=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var import_core114=require("@mantine/core"),import_react62=require("react");var ResourceDiffRow_default={removed:"ResourceDiffRow_removed",added:"ResourceDiffRow_added"};var import_jsx_runtime95=require("react/jsx-runtime");function ResourceDiffRow(props){let{name,path,property,originalValue,revisedValue}=props,isAttachmentType=!!property?.type?.find(t=>t.code==="Attachment"),[isCollapsed,setIsCollapsed]=(0,import_react62.useState)(isAttachmentType),toggleCollapse=()=>setIsCollapsed(prev=>!prev);return(0,import_jsx_runtime95.jsx)(import_jsx_runtime95.Fragment,{children:isAttachmentType&&!isCollapsed||!isAttachmentType?(0,import_jsx_runtime95.jsx)(import_jsx_runtime95.Fragment,{children:(0,import_jsx_runtime95.jsxs)(import_core114.Table.Tr,{children:[(0,import_jsx_runtime95.jsx)(import_core114.Table.Td,{children:name}),(0,import_jsx_runtime95.jsx)(import_core114.Table.Td,{className:ResourceDiffRow_default.removed,children:originalValue&&(0,import_jsx_runtime95.jsx)(ResourcePropertyDisplay,{path,property,propertyType:originalValue.type,value:originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime95.jsx)(import_core114.Table.Td,{className:ResourceDiffRow_default.added,children:revisedValue&&(0,import_jsx_runtime95.jsx)(ResourcePropertyDisplay,{path,property,propertyType:revisedValue.type,value:revisedValue.value,ignoreMissingValues:!0})})]})}):(0,import_jsx_runtime95.jsxs)(import_core114.Table.Tr,{children:[(0,import_jsx_runtime95.jsx)(import_core114.Table.Td,{children:name}),(0,import_jsx_runtime95.jsx)(import_core114.Table.Td,{colSpan:2,style:{textAlign:"right"},children:(0,import_jsx_runtime95.jsx)(import_core114.Button,{onClick:toggleCollapse,variant:"light",children:"Expand"})})]})})}var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime96=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=(0,import_react_hooks32.useMedplum)(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react63.useState)(!1);(0,import_react63.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react63.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core116.toTypedValue)(original)],typedRevised=[(0,import_core116.toTypedValue)(revised)],result=[],patch=mergePatchOperations((0,import_rfc6902.createPatch)(original,revised));for(let op of patch){let path=op.path,fhirPath=jsonPathToFhirPath(path),property=tryGetElementDefinition(original.resourceType,fhirPath),originalValue=op.op==="add"?void 0:(0,import_core116.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core116.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core116.capitalize)(op.op)} ${fhirPath}`,path:property?.path??original.resourceType+"."+fhirPath,property,originalValue:touchUpValue(property,originalValue),revisedValue:touchUpValue(property,revisedValue)})}return result},[schemaLoaded,original,revised]);return diffTable?(0,import_jsx_runtime96.jsxs)(import_core115.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime96.jsx)(import_core115.Table.Thead,{children:(0,import_jsx_runtime96.jsxs)(import_core115.Table.Tr,{children:[(0,import_jsx_runtime96.jsx)(import_core115.Table.Th,{}),(0,import_jsx_runtime96.jsx)(import_core115.Table.Th,{children:"Before"}),(0,import_jsx_runtime96.jsx)(import_core115.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime96.jsx)(import_core115.Table.Tbody,{children:diffTable.map(row=>{let{key,...rest}=row;return(0,import_jsx_runtime96.jsx)(ResourceDiffRow,{...rest},key)})})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){return(0,import_core116.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}function touchUpValue(property,input){return input&&{type:Array.isArray(input)?input[0].type:input.type,value:fixArray(input,!!property?.isArray)}}function fixArray(input,isArray){let inputValue=(0,import_core116.arrayify)(input).flatMap(v=>v.value);return isArray?inputValue:inputValue[0]}var import_core117=require("@medplum/core"),import_react_hooks33=require("@medplum/react-hooks"),import_react64=require("react");var import_jsx_runtime97=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=(0,import_react_hooks33.useMedplum)(),accessPolicy=medplum.getAccessPolicy(),value=(0,import_react_hooks33.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react64.useState)(!1);(0,import_react64.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{(0,import_core117.tryGetProfile)(profileUrl)?setSchemaLoaded(!0):console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)});else{let schemaName=value.resourceType;medplum.requestSchema(schemaName).then(()=>{setSchemaLoaded(!0)}).catch(console.error)}},[medplum,profileUrl,value]);let accessPolicyResource=(0,import_react64.useMemo)(()=>value&&(0,import_core117.satisfiedAccessPolicy)(value,import_core117.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,value]);return!schemaLoaded||!value?null:(0,import_jsx_runtime97.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:value.resourceType,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues,accessPolicyResource})}var import_core118=require("@mantine/core"),import_core119=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime98=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime98.jsx)(Container,{children:props.children})}function TimelineItem(props){let{resource,profile,padding,popupMenuItems,...others}=props,author=profile??resource.meta?.author,dateTime=props.dateTime??resource.meta?.lastUpdated;return(0,import_jsx_runtime98.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime98.jsxs)(import_core118.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime98.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime98.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime98.jsx)(import_core118.Text,{size:"sm",children:(0,import_jsx_runtime98.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime98.jsxs)(import_core118.Text,{size:"xs",children:[(0,import_jsx_runtime98.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core119.formatDateTime)(dateTime)}),(0,import_jsx_runtime98.jsx)(import_core118.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime98.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime98.jsxs)(import_core118.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime98.jsx)(import_core118.Menu.Target,{children:(0,import_jsx_runtime98.jsx)(import_core118.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core119.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime98.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime98.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime98.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a,timelineResource)-getTime(b,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a,b){return!!b&&a.resourceType===b.resourceType&&a.id===b.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime99=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=(0,import_react_hooks34.useMedplum)(),sender=medplum.getProfile(),inputRef=(0,import_react65.useRef)(null),resource=(0,import_react_hooks34.useResource)(props.value),[history,setHistory]=(0,import_react65.useState)(),[items,setItems]=(0,import_react65.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react65.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react65.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react65.useCallback)(batchResponse=>{let newItems=[];for(let settledResult of batchResponse){if(settledResult.status!=="fulfilled")continue;let bundle=settledResult.value;if(bundle.type==="history"&&setHistory(bundle),bundle.entry)for(let entry of bundle.entry)newItems.push(entry.resource)}sortAndSetItems(newItems)},[sortAndSetItems]),addResource=(0,import_react65.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react65.useCallback)(()=>{let resourceType,id;"resourceType"in props.value?(resourceType=props.value.resourceType,id=props.value.id):[resourceType,id]=props.value.reference?.split("/"),loadTimelineResources(medplum,resourceType,id).then(handleBatchResponse).catch(console.error)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);(0,import_react65.useEffect)(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.error)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime99.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core121.normalizeErrorString)(reason),icon:(0,import_jsx_runtime99.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function onUploadStart(){(0,import_notifications7.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications7.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core121.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime99.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime99.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime99.jsx)(Panel,{children:(0,import_jsx_runtime99.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime99.jsxs)(import_core120.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime99.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime99.jsx)(import_core120.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime99.jsx)(import_core120.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime99.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime99.jsx)(AttachmentButton,{securityContext:(0,import_core121.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime99.jsx)(import_core120.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime99.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`,menu=props.getMenu?props.getMenu({primaryResource:resource,currentResource:item,reloadTimeline:loadTimeline}):void 0;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime99.jsx)(HistoryTimelineItem,{history,resource:item,popupMenuItems:menu},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime99.jsx)(AuditEventTimelineItem,{resource:item,popupMenuItems:menu},key);case"Communication":return(0,import_jsx_runtime99.jsx)(CommunicationTimelineItem,{resource:item,popupMenuItems:menu},key);case"DiagnosticReport":return(0,import_jsx_runtime99.jsx)(DiagnosticReportTimelineItem,{resource:item,popupMenuItems:menu},key);case"Media":return(0,import_jsx_runtime99.jsx)(MediaTimelineItem,{resource:item,popupMenuItems:menu},key);default:return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime99.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime99.jsx)(import_core120.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime99.jsx)(import_core120.Loader,{})})}function HistoryTimelineItem(props){let{history,resource,...rest}=props,previous=getPrevious(history,resource);return previous?(0,import_jsx_runtime99.jsx)(TimelineItem,{resource,padding:!0,...rest,children:(0,import_jsx_runtime99.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime99.jsxs)(TimelineItem,{resource,padding:!0,...rest,children:[(0,import_jsx_runtime99.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime99.jsx)(ResourceTable,{value:resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function getPrevious(history,version){let entries=history.entry??[],index=entries.findIndex(entry=>entry.resource?.meta?.versionId===version.meta?.versionId);if(!(index>=entries.length-1))return entries[index+1].resource}function CommunicationTimelineItem(props){let className=!props.resource.priority||props.resource.priority==="routine"?void 0:ResourceTimeline_default.pinnedComment;return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)("p",{children:props.resource.payload?.[0]?.contentString})})}function MediaTimelineItem(props){let contentType=props.resource.content?.contentType,padding=contentType&&!contentType.startsWith("image/")&&!contentType.startsWith("video/")&&contentType!=="application/pdf";return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(import_core120.ScrollArea,{children:(0,import_jsx_runtime99.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime99.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime99.jsx)(DiagnosticReportDisplay,{value:props.resource})})}function getProgressMessage(e){if(e.lengthComputable){let percent=100*e.loaded/e.total;return`Uploaded: ${formatFileSize(e.loaded)} / ${formatFileSize(e.total)} ${percent.toFixed(2)}%`}return`Uploaded: ${formatFileSize(e.loaded)}`}function formatFileSize(bytes){if(bytes===0)return"0.00 B";let e=Math.floor(Math.log(bytes)/Math.log(1024));return(bytes/Math.pow(1024,e)).toFixed(2)+" "+" KMGTP".charAt(e)+"B"}var import_jsx_runtime100=require("react/jsx-runtime");function DefaultResourceTimeline(props){let{resource,...rest}=props;return(0,import_jsx_runtime100.jsx)(ResourceTimeline,{value:resource,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`;return Promise.allSettled([medplum.readHistory(resourceType,id),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count:100})])},...rest})}var import_core122=require("@medplum/core");var import_jsx_runtime101=require("react/jsx-runtime");function EncounterTimeline(props){let{encounter,...rest}=props;return(0,import_jsx_runtime101.jsx)(ResourceTimeline,{value:encounter,loadTimelineResources:async(medplum,_resourceType,id)=>Promise.allSettled([medplum.readHistory("Encounter",id),medplum.search("Communication","encounter=Encounter/"+id),medplum.search("Media","encounter=Encounter/"+id)]),createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",encounter:(0,import_core122.createReference)(resource),subject:resource.subject,sender:(0,import_core122.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core122.createReference)(resource),subject:resource.subject,operator:(0,import_core122.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core139=require("@mantine/core"),import_core140=require("@medplum/core"),import_react_hooks36=require("@medplum/react-hooks"),import_react70=require("react");var import_core123=require("@medplum/core");var import_jsx_runtime102=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core123.evalFhirPath)(props.path,props.resource)}catch(err){return console.warn("FhirPathDisplay:",err),null}if(value.length>1)throw new Error(`Component "path" for "FhirPathDisplay" must resolve to a single element. Received ${value.length} elements [${JSON.stringify(value,null,2)}]`);return(0,import_jsx_runtime102.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core137=require("@mantine/core"),import_core138=require("@medplum/core"),import_react_hooks35=require("@medplum/react-hooks");var import_react69=require("react");var import_core124=require("@mantine/core"),import_jsx_runtime103=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime103.jsxs)(import_core124.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime103.jsxs)(import_core124.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime103.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime103.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime103.jsx)(import_core124.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime103.jsx)(import_core124.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core126=require("@mantine/core"),import_core127=require("@medplum/core"),import_react66=require("react");var import_core125=require("@medplum/core");var import_jsx_runtime104=require("react/jsx-runtime"),searchParamToOperators={string:[import_core125.Operator.EQUALS,import_core125.Operator.NOT,import_core125.Operator.CONTAINS,import_core125.Operator.EXACT],fulltext:[import_core125.Operator.EQUALS,import_core125.Operator.NOT,import_core125.Operator.CONTAINS,import_core125.Operator.EXACT],token:[import_core125.Operator.EQUALS,import_core125.Operator.NOT],reference:[import_core125.Operator.EQUALS,import_core125.Operator.NOT],numeric:[import_core125.Operator.EQUALS,import_core125.Operator.NOT_EQUALS,import_core125.Operator.GREATER_THAN,import_core125.Operator.LESS_THAN,import_core125.Operator.GREATER_THAN_OR_EQUALS,import_core125.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core125.Operator.EQUALS,import_core125.Operator.NOT_EQUALS,import_core125.Operator.GREATER_THAN,import_core125.Operator.LESS_THAN,import_core125.Operator.GREATER_THAN_OR_EQUALS,import_core125.Operator.LESS_THAN_OR_EQUALS],date:[import_core125.Operator.EQUALS,import_core125.Operator.NOT_EQUALS,import_core125.Operator.GREATER_THAN,import_core125.Operator.LESS_THAN,import_core125.Operator.GREATER_THAN_OR_EQUALS,import_core125.Operator.LESS_THAN_OR_EQUALS,import_core125.Operator.STARTS_AFTER,import_core125.Operator.ENDS_BEFORE,import_core125.Operator.APPROXIMATELY],datetime:[import_core125.Operator.EQUALS,import_core125.Operator.NOT_EQUALS,import_core125.Operator.GREATER_THAN,import_core125.Operator.LESS_THAN,import_core125.Operator.GREATER_THAN_OR_EQUALS,import_core125.Operator.LESS_THAN_OR_EQUALS,import_core125.Operator.STARTS_AFTER,import_core125.Operator.ENDS_BEFORE,import_core125.Operator.APPROXIMATELY],uri:[import_core125.Operator.EQUALS,import_core125.Operator.NOT,import_core125.Operator.ABOVE,import_core125.Operator.BELOW]},operatorNames={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",sw:"starts with",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",present:"present",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addNext24HoursFilter(definition,field){let now=new Date,endTime=new Date(now.getTime()+24*60*60*1e3);return addDateFilterBetween(definition,field,now,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core125.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core125.Operator.LESS_THAN_OR_EQUALS,d2),definition}function addDateFilterImpl(definition,field,op,value){return addFilter(definition,field,op,value.toISOString())}function addMissingFilter(definition,field,value=!0){return addFilter(definition,field,import_core125.Operator.MISSING,value.toString())}function setOffset(definition,offset){return definition.offset===offset?definition:{...definition,offset,name:void 0}}function setPage(definition,page){let count=definition.count??import_core125.DEFAULT_SEARCH_COUNT,newOffset=(page-1)*count;return setOffset(definition,newOffset)}function setSort(definition,sort,desc){return sort===getSortField(definition)&&desc!==void 0&&desc===isSortDescending(definition)?definition:{...definition,sortRules:[{code:sort,descending:!!desc}],name:void 0}}function toggleSort(definition,key){let desc=!1;return getSortField(definition)===key&&(desc=!isSortDescending(definition)),setSort(definition,key,desc)}function getSortField(definition){let sortRules=definition.sortRules;if(!sortRules||sortRules.length===0)return;let field=sortRules[0].code;return field.startsWith("-")?field.substr(1):field}function isSortDescending(definition){let sortRules=definition.sortRules;return!sortRules||sortRules.length===0?!1:!!sortRules[0].descending}function getSearchOperators(searchParam){return searchParamToOperators[searchParam.type]}function getOpString(op){return operatorNames[op]??""}function buildFieldNameString(key){let tmp=key;return tmp.includes(".")&&(tmp=tmp.split(".").pop()),tmp==="versionId"?"Version ID":(tmp=tmp.replace("[x]",""),tmp=tmp.replace(/([A-Z])/g," $1"),tmp=tmp.replace(/[-_]/g," "),tmp=tmp.replace(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core125.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?(0,import_jsx_runtime104.jsx)(MedplumLink,{to:`/${resource.resourceType}/${resource.id}`,children:resource.id}):key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core125.formatDateTime)(resource.meta?.lastUpdated):field.elementDefinition&&`${resource.resourceType}.${field.name}`===field.elementDefinition.path?renderPropertyValue(resource,field.elementDefinition):field.searchParams&&field.searchParams.length===1&&field.name===field.searchParams[0].code?renderSearchParameterValue(resource,field.searchParams[0]):null}function renderPropertyValue(resource,elementDefinition){let path=elementDefinition.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[value,propertyType]=getValueAndType({type:resource.resourceType,value:resource},path);return value?(0,import_jsx_runtime104.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core125.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime104.jsx)(import_jsx_runtime104.Fragment,{children:value.map((v,index)=>(0,import_jsx_runtime104.jsx)(ResourcePropertyDisplay,{propertyType:v.type,value:v.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime105=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react66.useRef)(!1),[state,setState]=(0,import_react66.useState)({search:JSON.parse((0,import_core127.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react66.useState)(!1);(0,import_react66.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react66.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core127.getDataType)(resourceType),searchParams=(0,import_core127.getSearchParameters)(resourceType);return(0,import_core127.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime105.jsx)(import_core126.Modal,{title:"Fields",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>{props.onCancel()},size:"auto",withOverlay:!0,closeOnClickOutside:!1,overlayProps:{onMouseDownCapture:()=>{wasDropdownOpen.current=isDropdownOpen},onClick:()=>{wasDropdownOpen.current||props.onCancel(),wasDropdownOpen.current=!1},children:(0,import_jsx_runtime105.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime105.jsxs)(import_core126.Stack,{children:[(0,import_jsx_runtime105.jsx)(import_core126.MultiSelect,{style:{width:550},placeholder:"Select fields to display",data:allFields,value:state.search.fields??[],onChange:handleChange,onDropdownOpen:()=>setIsDropdownOpen(!0),onDropdownClose:()=>setIsDropdownOpen(!1),maxDropdownHeight:"250px",clearButtonProps:{"aria-label":"Clear selection"},clearable:!0,searchable:!0}),(0,import_jsx_runtime105.jsx)(import_core126.Group,{justify:"flex-end",children:(0,import_jsx_runtime105.jsx)(import_core126.Button,{onClick:()=>props.onOk(state.search),children:"OK"})})]})})}function getFieldsList(typeSchema,searchParams){let result=[],keys=new Set,names=new Set;for(let key of Object.keys(typeSchema.elements))result.push(key),keys.add(key.toLowerCase()),names.add(buildFieldNameString(key));if(searchParams)for(let code of Object.keys(searchParams)){let name=buildFieldNameString(code);!keys.has(code)&&!names.has(name)&&(result.push(code),keys.add(code),names.add(name))}return result}var import_core130=require("@mantine/core"),import_core131=require("@medplum/core");var import_react67=require("react");var import_core128=require("@mantine/core"),import_core129=require("@medplum/core");var import_jsx_runtime106=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core129.getSearchParameterDetails)(props.resourceType,props.searchParam),name=props.name??"filter-value";switch(details.type){case import_core129.SearchParameterType.REFERENCE:return(0,import_jsx_runtime106.jsx)(ReferenceInput,{name,defaultValue:props.defaultValue?{reference:props.defaultValue}:void 0,targetTypes:props.searchParam.target,autoFocus:props.autoFocus,onChange:newReference=>{newReference?props.onChange(newReference.reference):props.onChange("")}});case import_core129.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime106.jsx)(import_core128.Checkbox,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultChecked:props.defaultValue==="true",autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.checked.toString())});case import_core129.SearchParameterType.DATE:return(0,import_jsx_runtime106.jsx)(import_core128.TextInput,{type:"date",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case import_core129.SearchParameterType.DATETIME:return(0,import_jsx_runtime106.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core129.SearchParameterType.NUMBER:return(0,import_jsx_runtime106.jsx)(import_core128.TextInput,{type:"number",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case import_core129.SearchParameterType.QUANTITY:return(0,import_jsx_runtime106.jsx)(QuantityInput,{name,path:"",defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime106.jsx)(import_core128.TextInput,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value),placeholder:"Search value"})}}function tryParseQuantity(value){if(value){let[valueString,systemString,unitString]=value.split("|");if(valueString)return{value:parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime107=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react67.useState)((0,import_core131.deepClone)(props.search)),searchRef=(0,import_react67.useRef)(search);searchRef.current=search,(0,import_react67.useEffect)(()=>{setSearch((0,import_core131.deepClone)(props.search))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}let resourceType=props.search.resourceType,searchParams=(0,import_core131.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime107.jsx)(import_core130.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime107.jsxs)(Form,{onSubmit:()=>props.onOk(searchRef.current),children:[(0,import_jsx_runtime107.jsxs)("div",{children:[(0,import_jsx_runtime107.jsxs)("table",{children:[(0,import_jsx_runtime107.jsxs)("colgroup",{children:[(0,import_jsx_runtime107.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime107.jsx)("col",{style:{width:40}})]}),(0,import_jsx_runtime107.jsx)("thead",{children:(0,import_jsx_runtime107.jsxs)("tr",{children:[(0,import_jsx_runtime107.jsx)("th",{children:"Field"}),(0,import_jsx_runtime107.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime107.jsx)("th",{children:"Value"}),(0,import_jsx_runtime107.jsx)("th",{})]})}),(0,import_jsx_runtime107.jsx)("tbody",{children:filters.map((filter,index)=>(0,import_jsx_runtime107.jsx)(FilterRowInput,{id:`filter-${index}-row`,resourceType,searchParams,value:filter,onChange:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters))},onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${index}-row`))})]}),(0,import_jsx_runtime107.jsx)(ArrayAddButton,{propertyDisplayName:"Filter",onClick:()=>onAddFilter({})})]}),(0,import_jsx_runtime107.jsx)(import_core130.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime107.jsx)(SubmitButton,{children:"OK"})})]})})}function FilterRowInput(props){let value=props.value,valueRef=(0,import_react67.useRef)(value);valueRef.current=value;function setFilterCode(newCode){valueRef.current.code=newCode,valueRef.current.operator=import_core131.Operator.EQUALS,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterOperator(newOperator){valueRef.current.operator=newOperator,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterValue(newFilterValue){valueRef.current.value=newFilterValue,props.onChange(valueRef.current)}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime107.jsxs)("tr",{children:[(0,import_jsx_runtime107.jsx)("td",{children:(0,import_jsx_runtime107.jsx)(import_core130.NativeSelect,{"data-testid":`${props.id}-filter-field`,defaultValue:props.value.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime107.jsx)("td",{children:operators&&(0,import_jsx_runtime107.jsx)(import_core130.NativeSelect,{"data-testid":`${props.id}-filter-operation`,defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]},`${props.id}-filter-value-${props.value.code}`)}),(0,import_jsx_runtime107.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime107.jsx)(SearchFilterValueInput,{name:`${props.id}-filter-value`,resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue},`${props.id}-filter-value-${props.value.code}-${props.value.operator}`)}),(0,import_jsx_runtime107.jsx)("td",{children:props.onDelete&&(0,import_jsx_runtime107.jsx)(import_core130.ActionIcon,{variant:"outline",color:"red",radius:"xl","aria-label":"Delete filter",onClick:props.onDelete,children:(0,import_jsx_runtime107.jsx)(IconX,{style:{width:"70%",height:"70%"},stroke:1.5})})})]})}var import_core132=require("@mantine/core"),import_react68=require("react");var import_jsx_runtime108=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react68.useState)(props.defaultValue??"");if(!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime108.jsx)(import_core132.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime108.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime108.jsxs)(import_core132.Grid,{children:[(0,import_jsx_runtime108.jsx)(import_core132.Grid.Col,{span:10,children:(0,import_jsx_runtime108.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime108.jsx)(import_core132.Grid.Col,{span:2,children:(0,import_jsx_runtime108.jsx)(import_core132.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core133=require("@medplum/core");var import_jsx_runtime109=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core133.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core133.Operator.EQUALS||filter.operator===import_core133.Operator.NOT_EQUALS))return(0,import_jsx_runtime109.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core133.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core133.SearchParameterType.DATETIME)return(0,import_jsx_runtime109.jsx)(import_jsx_runtime109.Fragment,{children:(0,import_core133.formatDateTime)(filter.value)})}return(0,import_jsx_runtime109.jsx)(import_jsx_runtime109.Fragment,{children:filter.value})}var import_core134=require("@mantine/core"),import_core135=require("@medplum/core");var import_jsx_runtime110=require("react/jsx-runtime");function SearchPopupMenu(props){if(!props.searchParams)return null;function onSort(searchParam,desc){onChange(setSort(props.search,searchParam.code,desc))}function onClear(searchParam){onChange(clearFiltersOnField(props.search,searchParam.code))}function onPrompt(searchParam,operator){props.onPrompt(searchParam,{code:searchParam.code,operator,value:""})}function onChange(definition){props.onChange(definition)}return props.searchParams.length===1?(0,import_jsx_runtime110.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime110.jsx)(import_core134.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime110.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime110.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime110.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime110.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime110.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime110.jsxs)(import_core134.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNext24HoursFilter(props.search,code)),children:"Next 24 Hours"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core134.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core134.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core134.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime110.jsxs)(import_core134.Menu.Dropdown,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core135.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime110.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Divider,{}),(0,import_jsx_runtime110.jsx)(import_core134.Menu.Item,{leftSection:(0,import_jsx_runtime110.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core136=require("@medplum/core");function getFieldDefinitions(search){let resourceType=search.resourceType,fields=[];for(let name of search.fields||["id","_lastUpdated"])fields.push(getFieldDefinition(resourceType,name));return fields}function getFieldDefinition(resourceType,name){if(name==="_lastUpdated")return{name:"_lastUpdated",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_lastUpdated",name:"_lastUpdated",type:"date",expression:"Resource.meta.lastUpdated"}]};if(name==="meta.versionId")return{name:"meta.versionId",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_versionId",name:"_versionId",type:"token",expression:"Resource.meta.versionId"}]};let exactElementDefinition=(0,import_core136.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core136.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core136.getSearchParameters)(resourceType),searchParams;if(allSearchParams){let pathRegex=new RegExp(`${resourceType}\\.${name.replaceAll("[x]","")}([^\\w-]|$)`);searchParams=Object.values(allSearchParams).filter(p=>!!p.expression&&pathRegex.test(p?.expression)),searchParams.length===0&&(searchParams=void 0)}return{name,elementDefinition:exactElementDefinition,searchParams}}if(exactSearchParam){let details=(0,import_core136.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime111=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change"),this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load"),this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click"),this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=(0,import_react_hooks35.useMedplum)(),[outcome,setOutcome]=(0,import_react69.useState)(),{search,onLoad}=props,[memoizedSearch,setMemoizedSearch]=(0,import_react69.useState)(search);(0,import_core138.deepEquals)(search,memoizedSearch)||setMemoizedSearch(search);let[state,setState]=(0,import_react69.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react69.useRef)(state);stateRef.current=state;let total=memoizedSearch.total??"accurate",loadResults=(0,import_react69.useCallback)(options=>{setOutcome(void 0),medplum.requestSchema(memoizedSearch.resourceType).then(()=>medplum.search(memoizedSearch.resourceType,(0,import_core138.formatSearchQuery)({...memoizedSearch,total,fields:void 0}),options)).then(response=>{setState({...stateRef.current,searchResponse:response}),onLoad&&onLoad(new SearchLoadEvent(response))}).catch(reason=>{setState({...stateRef.current,searchResponse:void 0}),setOutcome((0,import_core138.normalizeOperationOutcome)(reason))})},[medplum,memoizedSearch,total,onLoad]),refreshResults=(0,import_react69.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react69.useEffect)(()=>{loadResults()},[loadResults]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...stateRef.current.selected};checked?newSelected[id]=!0:delete newSelected[id],setState({...stateRef.current,selected:newSelected})}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},searchResponse=stateRef.current.searchResponse;checked&&searchResponse?.entry&&searchResponse.entry.forEach(entry=>{entry.resource?.id&&(newSelected[entry.resource.id]=!0)}),setState({...stateRef.current,selected:newSelected})}function isAllSelected(){let state2=stateRef.current;if(!state2.searchResponse?.entry||state2.searchResponse.entry.length===0)return!1;for(let e of state2.searchResponse.entry)if(e.resource?.id&&!state2.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=isAuxClick(e);!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if(outcome)return(0,import_jsx_runtime111.jsx)(OperationOutcomeAlert,{outcome});if(!(0,import_core138.isDataTypeLoaded)(memoizedSearch.resourceType))return(0,import_jsx_runtime111.jsx)(import_core137.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime111.jsx)(import_core137.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(memoizedSearch),resourceType=memoizedSearch.resourceType,lastResult=state.searchResponse,resources=lastResult?.entry?.map(e=>e.resource),buttonVariant="subtle",buttonColor="gray",iconSize=16,isMobile=window.innerWidth<768;return(0,import_jsx_runtime111.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime111.jsxs)(import_core137.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime111.jsxs)(import_core137.Group,{gap:2,children:[(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Fields"}),(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0,dialogOpenTime:Date.now()}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime111.jsx)(import_core137.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime111.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime111.jsxs)(import_core137.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime111.jsxs)(import_core137.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(memoizedSearch,lastResult).toLocaleString(),"-",getEnd(memoizedSearch,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${memoizedSearch.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime111.jsx)(import_core137.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime111.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime111.jsxs)(import_core137.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime111.jsxs)(import_core137.Table.Thead,{children:[(0,import_jsx_runtime111.jsxs)(import_core137.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core137.Table.Th,{children:(0,import_jsx_runtime111.jsx)("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core137.Table.Th,{children:(0,import_jsx_runtime111.jsxs)(import_core137.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime111.jsx)(import_core137.Menu.Target,{children:(0,import_jsx_runtime111.jsx)(import_core137.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime111.jsxs)(import_core137.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime111.jsx)(import_core137.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime111.jsx)(import_core137.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime111.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime111.jsx)(SearchPopupMenu,{search:memoizedSearch,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter,dialogOpenTime:Date.now()})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime111.jsxs)(import_core137.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core137.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core137.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime111.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:memoizedSearch.filters})},field.name))]})]}),(0,import_jsx_runtime111.jsx)(import_core137.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime111.jsxs)(import_core137.Table.Tr,{className:SearchControl_default.tr,"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime111.jsx)(import_core137.Table.Td,{children:(0,import_jsx_runtime111.jsx)("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${resource.id}`,checked:!!state.selected[resource.id],onChange:e=>handleSingleCheckboxClick(e,resource.id)})}),fields.map(field=>(0,import_jsx_runtime111.jsx)(import_core137.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),!resources?.length&&(0,import_jsx_runtime111.jsx)(Container,{children:(0,import_jsx_runtime111.jsx)(import_core137.Center,{style:{height:150},children:(0,import_jsx_runtime111.jsx)(import_core137.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime111.jsx)(import_core137.Center,{m:"md",p:"md",children:(0,import_jsx_runtime111.jsx)(import_core137.Pagination,{value:getPage(memoizedSearch),total:getTotalPages(memoizedSearch,lastResult),onChange:newPage=>emitSearchChange(setPage(memoizedSearch,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),(0,import_jsx_runtime111.jsx)(SearchFieldEditor,{search:memoizedSearch,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}},`search-field-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchFilterEditor,{search:memoizedSearch,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}},`search-filter-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}},`search-export-dialog-${state.dialogOpenTime}`),(0,import_jsx_runtime111.jsx)(SearchFilterValueDialog,{visible:stateRef.current.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(memoizedSearch,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},`search-filter-dialog-${state.dialogOpenTime}`)]})}var MemoizedSearchControl=SearchControl;function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p=>p.code===f.code));return filters.length===0?(0,import_jsx_runtime111.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime111.jsx)(import_jsx_runtime111.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime111.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime111.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})]},`filter-${filter.code}-${filter.operator}-${filter.value}`))})}function getPage(search){return Math.floor((search.offset??0)/(search.count??import_core138.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core138.DEFAULT_SEARCH_COUNT,total=getTotal(search,lastResult);return Math.ceil(total/pageSize)}function getStart(search,lastResult){return Math.min(getTotal(search,lastResult),(search.offset??0)+1)}function getEnd(search,lastResult){return Math.max(getStart(search,lastResult)+(lastResult.entry?.length??0)-1,0)}function getTotal(search,lastResult){let total=lastResult.total;return total===void 0&&(total=(search.offset??0)+(lastResult.entry?.length??0)+(lastResult.link?.some(l=>l.relation==="next")?1:0)),total}var import_jsx_runtime112=require("react/jsx-runtime");function FhirPathTable(props){let medplum=(0,import_react_hooks36.useMedplum)(),[schemaLoaded,setSchemaLoaded]=(0,import_react70.useState)(!1),[outcome,setOutcome]=(0,import_react70.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react70.useState)(),[selected,setSelected]=(0,import_react70.useState)({}),responseRef=(0,import_react70.useRef)(response);responseRef.current=response;let selectedRef=(0,import_react70.useRef)({});selectedRef.current=selected,(0,import_react70.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core140.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selectedRef.current};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=responseRef.current?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=responseRef.current?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selectedRef.current[resource.id])return!1;return!0}function handleRowClick(e,resource){isCheckboxCell(e.target)||(killEvent(e),e.button!==1&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),e.button===1&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e)))}if((0,import_react70.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime112.jsx)(import_core139.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime112.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime112.jsxs)(import_core139.Table,{children:[(0,import_jsx_runtime112.jsx)(import_core139.Table.Thead,{children:(0,import_jsx_runtime112.jsxs)(import_core139.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime112.jsx)(import_core139.Table.Th,{children:(0,import_jsx_runtime112.jsx)("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>(0,import_jsx_runtime112.jsx)(import_core139.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime112.jsx)(import_core139.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime112.jsxs)(import_core139.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime112.jsx)(import_core139.Table.Td,{children:(0,import_jsx_runtime112.jsx)("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${resource.id}`,checked:!!selected[resource.id],onChange:e=>handleSingleCheckboxClick(e,resource.id)})}),fields.map(field=>(0,import_jsx_runtime112.jsx)(import_core139.Table.Td,{children:(0,import_jsx_runtime112.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime112.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime112.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime112.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime112.jsx)(import_core139.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react70.memo)(FhirPathTable);var import_core141=require("@mantine/core");var InfoBar_default={root:"InfoBar_root",entry:"InfoBar_entry",key:"InfoBar_key",value:"InfoBar_value"};var import_jsx_runtime113=require("react/jsx-runtime");function InfoBar(props){return(0,import_jsx_runtime113.jsx)(import_core141.ScrollArea,{children:(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.root,children:props.children})})}InfoBar.Entry=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.entry,children:props.children})};InfoBar.Key=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.key,children:props.children})};InfoBar.Value=function(props){return(0,import_jsx_runtime113.jsx)("div",{className:InfoBar_default.value,children:props.children})};var import_core144=require("@mantine/core"),import_react_hooks37=require("@medplum/react-hooks");var import_core142=require("@mantine/core"),import_core143=require("@medplum/core");var import_jsx_runtime114=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime114.jsx)(import_core142.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime114.jsxs)(import_core142.Group,{children:[group.measureScore&&(0,import_jsx_runtime114.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime114.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(import_core142.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime114.jsx)(import_core142.Text,{fz:"xs",c:"dimmed",mb:8,children:measure.subtitle})]})}function MeasureReportPopulation(props){let{group}=props,populations=group.population,numerator=populations?.find(p=>(0,import_core143.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core143.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime114.jsxs)(import_core142.Box,{children:[(0,import_jsx_runtime114.jsx)(import_core142.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime114.jsx)(import_core142.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime114.jsxs)(import_core142.Box,{children:[(0,import_jsx_runtime114.jsx)(import_core142.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime114.jsx)(import_core142.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime114.jsx)(import_core142.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime114.jsx)(import_core142.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime114.jsx)(import_core142.Flex,{justify:"center",children:(0,import_jsx_runtime114.jsxs)(import_core142.Text,{fw:700,fz:18,children:[numeratorCount," / ",denominatorCount]})})})}function MeasureScore(props){let{group}=props,unit=group.measureScore?.unit??group.measureScore?.code;return(0,import_jsx_runtime114.jsx)(import_jsx_runtime114.Fragment,{children:unit==="%"?(0,import_jsx_runtime114.jsx)(import_core142.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime114.jsx)(import_core142.Flex,{justify:"center",children:(0,import_jsx_runtime114.jsx)(import_core142.Text,{fw:700,fz:18,children:(0,import_jsx_runtime114.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime114.jsx)(import_core142.Flex,{h:120,align:"center",children:(0,import_jsx_runtime114.jsx)(import_core142.Title,{order:3,children:(0,import_jsx_runtime114.jsx)(QuantityDisplay,{value:group.measureScore})})})})}function groupValue(group){let score=group.measureScore?.value,unit=group.measureScore?.unit;return score?score<=1&&unit==="%"?score*100:score:0}function groupColor(score){return score<=33?"red":score<=67?"yellow":"green"}var import_jsx_runtime115=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=(0,import_react_hooks37.useResource)(props.measureReport),[measure]=(0,import_react_hooks37.useSearchOne)("Measure",{url:report?.measure});return report?(0,import_jsx_runtime115.jsxs)(import_core144.Box,{children:[measure&&(0,import_jsx_runtime115.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime115.jsx)(import_core144.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime115.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core145=require("@mantine/core"),import_react_hooks38=require("@medplum/react-hooks"),import_react71=require("react"),import_jsx_runtime116=require("react/jsx-runtime");function NotificationIcon(props){let medplum=(0,import_react_hooks38.useMedplum)(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react71.useState)(0),updateCount=(0,import_react71.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react71.useEffect)(()=>{updateCount("default")},[updateCount]),(0,import_react_hooks38.useSubscription)(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime116.jsx)(import_core145.Tooltip,{label,children:(0,import_jsx_runtime116.jsx)(import_core145.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime116.jsx)(import_core145.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core146=require("@mantine/core"),import_notifications8=require("@mantine/notifications"),import_core147=require("@medplum/core"),import_react_hooks39=require("@medplum/react-hooks");var import_react72=require("react");var import_jsx_runtime117=require("react/jsx-runtime"),NOTIFICATION_ID="patient-export",NOTIFICATION_TITLE="Patient Export",formats={everything:{operation:"$everything",extension:"json",contentType:import_core147.ContentType.FHIR_JSON},summary:{operation:"$summary",extension:"json",contentType:import_core147.ContentType.FHIR_JSON},ccda:{operation:"$ccda-export",extension:"xml",contentType:import_core147.ContentType.CDA_XML},ccdaReferral:{operation:"$ccda-export",type:"referral",extension:"xml",contentType:import_core147.ContentType.CDA_XML}};function PatientExportForm(props){let medplum=(0,import_react_hooks39.useMedplum)(),{patient}=props,handleSubmit=(0,import_react72.useCallback)(async data2=>{let patientId=(0,import_core147.resolveId)(patient),format=data2.format,{operation,type,contentType,extension}=formats[format],url=medplum.fhirUrl("Patient",patientId,operation),params={};type&&(params.type=type),data2.author&&(params.author={reference:data2.author}),data2.authoredOn&&(params.authoredOn=convertLocalToIso(data2.authoredOn)),data2.startDate&&(params.start=data2.startDate),data2.endDate&&(params.end=data2.endDate),import_notifications8.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,loading:!0,message:"Exporting...",autoClose:!1,withCloseButton:!1});try{let response=await medplum.post(url,params,void 0,{cache:"no-cache",headers:{Accept:contentType}}),fileName=`Patient-export-${patientId}-${new Date().toISOString().replaceAll(":","-")}.${extension}`;saveData(response,fileName,contentType),import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"green",message:"Done",icon:(0,import_jsx_runtime117.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0})}catch(err){import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:(0,import_core147.normalizeErrorString)(err),icon:(0,import_jsx_runtime117.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}},[medplum,patient]);return(0,import_jsx_runtime117.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime117.jsxs)(import_core146.Stack,{children:[(0,import_jsx_runtime117.jsx)(FormSection,{title:"Export Format",description:"Required",withAsterisk:!0,children:(0,import_jsx_runtime117.jsx)(import_core146.SegmentedControl,{name:"format",data:[{label:"FHIR Everything",value:"everything"},{label:"Patient Summary",value:"summary"},{label:"C-CDA",value:"ccda"},{label:"C-CDA Referral",value:"ccdaReferral"}],fullWidth:!0})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Author",description:"Optional author for composition. Default value is current user.",children:(0,import_jsx_runtime117.jsx)(ReferenceInput,{name:"author",placeholder:"Author",targetTypes:["Organization","Practitioner","PractitionerRole"]})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Authored On",description:"Optional date for composition authored on. Default value is current date.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"authoredOn",placeholder:"Authored on"})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"Start Date",description:"The start date of care. If no start date is provided, all records prior to the end date are in scope.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"startDate",placeholder:"Start date"})}),(0,import_jsx_runtime117.jsx)(FormSection,{title:"End Date",description:"The end date of care. If no end date is provided, all records subsequent to the start date are in scope.",children:(0,import_jsx_runtime117.jsx)(DateTimeInput,{name:"endDate",placeholder:"End date"})}),(0,import_jsx_runtime117.jsx)(import_core146.Group,{justify:"right",children:(0,import_jsx_runtime117.jsx)(SubmitButton,{children:"Request Export"})})]})})}function saveData(data2,fileName,contentType){let content=typeof data2=="string"?data2:JSON.stringify(data2,null,2),blob=new Blob([content],{type:contentType}),url=window.URL.createObjectURL(blob),a=document.createElement("a");document.body.appendChild(a),a.style.display="none",a.href=url,a.download=fileName,a.click(),window.URL.revokeObjectURL(url)}var import_core148=require("@medplum/core"),import_react_hooks40=require("@medplum/react-hooks");function getDefaultColor(patient){if(patient.gender==="male")return"blue";if(patient.gender==="female")return"pink"}var import_jsx_runtime118=require("react/jsx-runtime");function PatientHeader(props){let patient=(0,import_react_hooks40.useResource)(props.patient);return patient?(0,import_jsx_runtime118.jsxs)(InfoBar,{children:[(0,import_jsx_runtime118.jsx)(ResourceAvatar,{value:patient,size:"lg",color:getDefaultColor(patient)}),(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Name"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:(0,import_jsx_runtime118.jsx)(MedplumLink,{to:patient,fw:500,children:patient.name?(0,import_jsx_runtime118.jsx)(HumanNameDisplay,{value:patient.name[0],options:{use:!1}}):"[blank]"})})]}),patient.birthDate&&(0,import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment,{children:[(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"DoB"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.birthDate})]}),(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Age"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:(0,import_core148.calculateAgeString)(patient.birthDate)})]})]}),patient.gender&&(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"Gender"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.gender})]}),patient.address&&(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:"State"}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:patient.address[0]?.state})]}),patient.identifier?.map(identifier=>(0,import_jsx_runtime118.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime118.jsx)(InfoBar.Key,{children:identifier?.system}),(0,import_jsx_runtime118.jsx)(InfoBar.Value,{children:identifier?.value})]},`${identifier?.system}-${identifier?.value}`))]}):null}var import_core176=require("@mantine/core"),import_core177=require("@medplum/core"),import_react_hooks49=require("@medplum/react-hooks");var import_react84=require("react");var import_core153=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core154=require("@medplum/core"),import_react_hooks41=require("@medplum/react-hooks"),import_react75=require("react");var import_core149=require("@mantine/core"),import_core150=require("@medplum/core"),import_react73=require("react");var import_jsx_runtime119=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core150.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react73.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react73.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react73.useCallback)(formData=>{onSubmit((0,import_core150.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core150.createReference)(patient),encounter:encounter?(0,import_core150.createReference)(encounter):void 0,code,clinicalStatus,onsetDateTime:formData.onsetDateTime?formData.onsetDateTime:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0},PATIENT_ALLERGY_PROFILE))},[patient,encounter,allergy,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime119.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime119.jsxs)(import_core149.Stack,{children:[(0,import_jsx_runtime119.jsx)(CodeableConceptInput,{name:"allergy",label:"Code",path:"AllergyIntolerance.code","data-autofocus":!0,binding:HTTP+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1186.8",maxValues:1,defaultValue:allergy?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime119.jsx)(import_core149.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime119.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core150.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",maxValues:1,defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime119.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime119.jsx)(import_core149.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime119.jsx)(SubmitButton,{children:"Save"})})]})},allergy?.id)}var import_core151=require("@mantine/core");var import_react74=require("react");var CollapsibleSection_default={root:"CollapsibleSection_root",header:"CollapsibleSection_header",addButton:"CollapsibleSection_addButton",chevron:"CollapsibleSection_chevron",title:"CollapsibleSection_title"};var import_jsx_runtime120=require("react/jsx-runtime");function CollapsibleSection(props){let{title,children,onAdd}=props,[collapsed,setCollapsed]=(0,import_react74.useState)(!1);return(0,import_jsx_runtime120.jsxs)(import_core151.Box,{className:CollapsibleSection_default.root,children:[(0,import_jsx_runtime120.jsxs)(import_core151.Group,{justify:"space-between",className:CollapsibleSection_default.header,children:[(0,import_jsx_runtime120.jsxs)(import_core151.Group,{gap:8,children:[(0,import_jsx_runtime120.jsx)(import_core151.ActionIcon,{variant:"subtle",onClick:()=>setCollapsed(c=>!c),"aria-label":collapsed?`Show ${title.toLowerCase()}`:`Hide ${title.toLowerCase()}`,className:CollapsibleSection_default.chevron,"data-collapsed":collapsed||void 0,size:"md",children:(0,import_jsx_runtime120.jsx)(IconChevronDown,{size:20})}),(0,import_jsx_runtime120.jsx)(import_core151.Text,{fz:"md",fw:800,onClick:()=>setCollapsed(c=>!c),className:CollapsibleSection_default.title,children:title})]}),onAdd&&(0,import_jsx_runtime120.jsx)(import_core151.ActionIcon,{role:"button","aria-label":"Add item",className:CollapsibleSection_default.addButton,variant:"subtle",onClick:e=>{killEvent(e),onAdd()},size:"md",children:(0,import_jsx_runtime120.jsx)(IconPlus,{size:18})})]}),(0,import_jsx_runtime120.jsx)(import_core151.Collapse,{in:!collapsed,children:(0,import_jsx_runtime120.jsx)(import_core151.Box,{ml:"var(--mantine-spacing-xl)",mt:"xs",mb:"md",children})})]})}var import_core152=require("@mantine/core");var SummaryItem_default={gradient:"SummaryItem_gradient",container:"SummaryItem_container",chevron:"SummaryItem_chevron",item:"SummaryItem_item",itemText:"SummaryItem_itemText"};var import_jsx_runtime121=require("react/jsx-runtime");function SummaryItem(props){let{children,onClick}=props;return(0,import_jsx_runtime121.jsxs)(import_core152.Box,{className:SummaryItem_default.item,onClick,children:[children,(0,import_jsx_runtime121.jsx)("div",{className:SummaryItem_default.gradient}),(0,import_jsx_runtime121.jsx)("div",{className:SummaryItem_default.container,children:(0,import_jsx_runtime121.jsx)(import_core152.ActionIcon,{className:SummaryItem_default.chevron,size:"md",variant:"transparent",tabIndex:-1,children:(0,import_jsx_runtime121.jsx)(IconChevronRight,{size:16,stroke:2.5})})})]})}var import_jsx_runtime122=require("react/jsx-runtime");function Allergies(props){let medplum=(0,import_react_hooks41.useMedplum)(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react75.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react75.useState)(),sortedAllergies=(0,import_react75.useMemo)(()=>[...allergies].sort((a,b)=>{let aStatus=a.clinicalStatus?.coding?.[0]?.code,bStatus=b.clinicalStatus?.coding?.[0]?.code;return aStatus==="active"&&bStatus!=="active"?-1:aStatus!=="active"&&bStatus==="active"?1:(0,import_core154.getDisplayString)(a).localeCompare((0,import_core154.getDisplayString)(b))}),[allergies]),handleSubmit=(0,import_react75.useCallback)(async allergy=>{if(allergy.id){let updatedAllergy=await medplum.updateResource(allergy);setAllergies(allergies.map(a=>a.id===updatedAllergy.id?updatedAllergy:a))}else{let newAllergy=await medplum.createResource(allergy);setAllergies([...allergies,newAllergy])}setEditAllergy(void 0),close()},[medplum,allergies,close]);return(0,import_jsx_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:[(0,import_jsx_runtime122.jsx)(CollapsibleSection,{title:"Allergies",onAdd:()=>{setEditAllergy(void 0),open()},children:sortedAllergies.length>0?(0,import_jsx_runtime122.jsx)(import_core153.Box,{children:(0,import_jsx_runtime122.jsx)(import_core153.Flex,{direction:"column",gap:8,children:sortedAllergies.map(allergy=>{let status=allergy.clinicalStatus?.coding?.[0]?.code||"unknown";return(0,import_jsx_runtime122.jsx)(SummaryItem,{onClick:()=>{setEditAllergy(allergy),open()},children:(0,import_jsx_runtime122.jsxs)(import_core153.Box,{children:[(0,import_jsx_runtime122.jsx)(import_core153.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core154.getDisplayString)(allergy)}),(0,import_jsx_runtime122.jsx)(import_core153.Group,{mt:2,gap:4,children:status&&(0,import_jsx_runtime122.jsx)(StatusBadge,{color:getClinicalStatusColor(status),variant:"light",status})})]})},allergy.id)})})}):(0,import_jsx_runtime122.jsx)(import_core153.Text,{children:"(none)"})}),(0,import_jsx_runtime122.jsx)(import_core153.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime122.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}function getClinicalStatusColor(status){if(!status)return"gray";switch(status){case"active":return"red";case"inactive":return"orange";case"resolved":return"blue";default:return"gray"}}var import_core155=require("@mantine/core"),import_core156=require("@medplum/core"),import_react_hooks42=require("@medplum/react-hooks");var PatientSummary_default={panel:"PatientSummary_panel",patientSummaryBadge:"PatientSummary_patientSummaryBadge",patientSummaryAddButton:"PatientSummary_patientSummaryAddButton",patientSummaryHeader:"PatientSummary_patientSummaryHeader",patientSummaryCollapseIcon:"PatientSummary_patientSummaryCollapseIcon",collapsed:"PatientSummary_collapsed"};var import_jsx_runtime123=require("react/jsx-runtime");function CoverageItem(props){let{coverage,organization,onClickResource}=props,coverageResource=(0,import_react_hooks42.useResource)(coverage),organizationResource=(0,import_react_hooks42.useResource)(organization),payorName="Unknown Payor";organizationResource&&"name"in organizationResource&&typeof organizationResource.name=="string"&&(payorName=organizationResource.name);let detailsText=`ID: ${coverageResource?.subscriberId??"N/A"}${formatClassInfo(coverageResource)?` \xB7 ${formatClassInfo(coverageResource)}`:""}`;return(0,import_jsx_runtime123.jsx)(SummaryItem,{onClick:()=>{coverageResource&&onClickResource?.(coverageResource)},children:(0,import_jsx_runtime123.jsxs)(import_core155.Box,{children:[(0,import_jsx_runtime123.jsx)(import_core155.Text,{fw:500,className:PatientSummary_default.itemText,children:payorName}),(0,import_jsx_runtime123.jsx)(import_core155.Text,{fw:500,className:PatientSummary_default.itemText,children:detailsText}),(0,import_jsx_runtime123.jsxs)(import_core155.Group,{mt:2,gap:4,children:[(0,import_jsx_runtime123.jsx)(StatusBadge,{color:"green",variant:"light",status:"Active"}),(0,import_jsx_runtime123.jsxs)(import_core155.Text,{size:"xs",fw:500,color:"gray.6",children:["Ends ",(0,import_core156.formatDate)(coverageResource?.period?.end)]})]})]})})}function Insurance(props){let{coverages,onClickResource}=props,activeCoverages=coverages.filter(coverage=>coverage.status==="active");return(0,import_jsx_runtime123.jsx)(CollapsibleSection,{title:"Insurance",children:activeCoverages.length>0?(0,import_jsx_runtime123.jsx)(import_core155.Flex,{direction:"column",gap:8,children:activeCoverages.map(coverage=>(0,import_jsx_runtime123.jsx)(CoverageItem,{coverage,organization:coverage.payor?.[0],onClickResource},coverage.id))}):(0,import_jsx_runtime123.jsx)(import_core155.Text,{children:"(none)"})})}function capitalizeWords(str){return str.split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1).toLowerCase()).join(" ")}function formatClassInfo(coverage){return coverage?coverage.class?.filter(cls=>cls.type?.coding?.[0]?.code!=="plan").map(cls=>{let type=cls.type?.coding?.[0]?.code??"";return`${capitalizeWords(type)}: ${cls.value}`}).join(" \xB7 ")??"":""}var import_core157=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_core158=require("@medplum/core"),import_react76=require("react");var import_jsx_runtime124=require("react/jsx-runtime");function Labs(props){let{serviceRequests,diagnosticReports,onClickResource,onRequestLabs}=props,[selectedReport,setSelectedReport]=(0,import_react76.useState)(),[reportDialogOpened,{open:openReportDialog,close:closeReportDialog}]=(0,import_hooks4.useDisclosure)(!1),diagnosticReportsRequests=new Set,filteredDiagnosticReports=diagnosticReports.filter(report=>{let flag=isLaboratoryReport(report);return flag&&report.basedOn&&report.basedOn.forEach(basedOn=>{if(basedOn.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn.reference.split("/");diagnosticReportsRequests.add(id)}}),flag}),completedRequisitionNumbers=new Set,filteredServiceRequests=serviceRequests.filter(request=>{if(request.id&&diagnosticReportsRequests.has(request.id)||request.basedOn&&request.basedOn.find(basedOn2=>{if(basedOn2.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn2.reference.split("/");return diagnosticReportsRequests.has(id)}return!1}))return!1;let shouldFilter=shouldFilterRequest(request,completedRequisitionNumbers);return!shouldFilter&&request.requisition?.value&&completedRequisitionNumbers.add(request.requisition?.value),!shouldFilter}),handleDiagnosticReportClick=report=>{setSelectedReport(report),openReportDialog()};return(0,import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment,{children:[(0,import_jsx_runtime124.jsx)(CollapsibleSection,{title:"Labs",onAdd:()=>onRequestLabs?.(),children:(0,import_jsx_runtime124.jsxs)(import_core157.Flex,{direction:"column",gap:8,children:[filteredServiceRequests.map(serviceRequest=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>onClickResource?.(serviceRequest),children:(0,import_jsx_runtime124.jsxs)(import_core157.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core157.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core158.getDisplayString)(serviceRequest)}),(0,import_jsx_runtime124.jsxs)(import_core157.Group,{mt:2,gap:4,children:[serviceRequest.status&&(0,import_jsx_runtime124.jsx)(StatusBadge,{color:getStatusColor(serviceRequest.status),variant:"light",status:serviceRequest.status}),(0,import_jsx_runtime124.jsx)(import_core157.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core158.formatDate)(serviceRequest.authoredOn)})]})]})},serviceRequest.id)),filteredDiagnosticReports.map(report=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>handleDiagnosticReportClick(report),children:(0,import_jsx_runtime124.jsxs)(import_core157.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core157.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core158.getDisplayString)(report)}),(0,import_jsx_runtime124.jsxs)(import_core157.Group,{mt:2,gap:4,children:[report.status&&(0,import_jsx_runtime124.jsx)(StatusBadge,{color:getStatusColor(report.status),variant:"light",status:report.status}),(0,import_jsx_runtime124.jsx)(import_core157.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core158.formatDate)(report.issued)})]})]})},report.id)),filteredServiceRequests.length===0&&filteredDiagnosticReports.length===0&&(0,import_jsx_runtime124.jsx)(import_core157.Text,{children:"(none)"})]})}),(0,import_jsx_runtime124.jsx)(import_core157.Modal,{opened:reportDialogOpened,onClose:closeReportDialog,size:"80%",children:selectedReport&&(0,import_jsx_runtime124.jsx)(DiagnosticReportDisplay,{value:selectedReport,hideSubject:!0})})]})}var getStatusColor=status=>{switch(status){case"active":return"indigo";case"final":return"teal";case"cancelled":return"red";default:return"gray"}};function hasLaboratoryCategory(category){if(!category.coding||!Array.isArray(category.coding))return!1;for(let coding of category.coding)if(coding.code==="LAB")return!0;return!1}function isLaboratoryReport(report){if(!report.category||!Array.isArray(report.category))return!1;for(let category of report.category)if(hasLaboratoryCategory(category))return!0;return!1}function shouldFilterRequest(request,completedRequisitionNumbers){if(["completed","draft","entered-in-error"].includes(request.status))return!0;let requisitionNumber=request.requisition?.value;return!!(requisitionNumber&&completedRequisitionNumbers.has(requisitionNumber))}var import_core161=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core162=require("@medplum/core"),import_react_hooks44=require("@medplum/react-hooks"),import_react78=require("react");var import_core159=require("@mantine/core"),import_core160=require("@medplum/core"),import_react_hooks43=require("@medplum/react-hooks"),import_react77=require("react");var import_jsx_runtime125=require("react/jsx-runtime"),HTTP2="http://",statusValues=["active","stopped","on-hold","cancelled","completed","entered-in-error","draft","unknown"];function MedicationDialog(props){let me=(0,import_react_hooks43.useMedplumProfile)(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react77.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react77.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core160.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core160.createReference)(encounter)),requester:medication?.requester??(0,import_core160.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core160.createReference)(patient)},import_core160.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime125.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime125.jsxs)(import_core159.Stack,{children:[(0,import_jsx_runtime125.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:HTTP2+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1010.4",maxValues:1,defaultValue:medication?.medicationCodeableConcept,onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime125.jsx)(import_core159.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime125.jsx)(import_core159.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime125.jsx)(import_core159.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime125.jsx)(SubmitButton,{children:"Save"})})]})}):(0,import_jsx_runtime125.jsx)(import_core159.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime126=require("react/jsx-runtime");function Medications(props){let medplum=(0,import_react_hooks44.useMedplum)(),[medicationRequests,setMedicationRequests]=(0,import_react78.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react78.useState)(),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react78.useCallback)(async medication=>{if(medication.id){let updatedMedication=await medplum.updateResource(medication);setMedicationRequests(medicationRequests.map(m=>m.id===updatedMedication.id?updatedMedication:m))}else{let newMedication=await medplum.createResource(medication);setMedicationRequests([newMedication,...medicationRequests])}setEditMedication(void 0),close()},[medplum,medicationRequests,close]);return(0,import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment,{children:[(0,import_jsx_runtime126.jsx)(CollapsibleSection,{title:"Medications",onAdd:()=>{setEditMedication(void 0),open()},children:medicationRequests.length>0?(0,import_jsx_runtime126.jsx)(import_core161.Flex,{direction:"column",gap:8,children:medicationRequests.map(medication=>(0,import_jsx_runtime126.jsx)(SummaryItem,{onClick:()=>{setEditMedication(medication),open()},children:(0,import_jsx_runtime126.jsxs)(import_core161.Box,{children:[(0,import_jsx_runtime126.jsx)(import_core161.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core162.getDisplayString)(medication)}),(0,import_jsx_runtime126.jsx)(import_core161.Group,{mt:2,gap:4,children:medication.status&&(0,import_jsx_runtime126.jsx)(StatusBadge,{color:getStatusColor2(medication.status),variant:"light",status:medication.status})})]})},medication.id))}):(0,import_jsx_runtime126.jsx)(import_core161.Text,{children:"(none)"})}),(0,import_jsx_runtime126.jsx)(import_core161.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime126.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}function getStatusColor2(status){if(!status)return"gray";switch(status){case"active":return"green";case"stopped":return"red";case"on-hold":return"yellow";case"cancelled":return"red";case"completed":return"blue";case"entered-in-error":return"red";case"draft":return"gray";default:return"gray"}}var import_core163=require("@mantine/core");var import_jsx_runtime127=require("react/jsx-runtime"),PatientInfoItem=props=>{let{patient,value,icon,placeholder,label,onClickResource}=props,displayText=value||placeholder;return(0,import_jsx_runtime127.jsx)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:(0,import_jsx_runtime127.jsx)(import_core163.Box,{className:PatientSummary_default.patientSummaryListItem,children:(0,import_jsx_runtime127.jsx)(import_core163.Tooltip,{label,position:"top-start",openDelay:650,children:(0,import_jsx_runtime127.jsxs)(import_core163.Group,{gap:"sm",align:"center",ml:6,mr:2,style:{cursor:"pointer",flexWrap:"nowrap",minWidth:0},children:[icon,(0,import_jsx_runtime127.jsx)(import_core163.Text,{fz:"sm",fw:400,truncate:!0,c:value?"inherit":"var(--mantine-color-gray-6)",children:displayText})]})})})})};var import_core164=require("@medplum/core");function getGenderIdentity(patient){return(0,import_core164.getExtension)(patient,`${import_core164.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-genderIdentity`)?.valueCodeableConcept?.coding?.[0]?.display}function getBirthSex(patient){return(0,import_core164.getExtension)(patient,`${import_core164.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-birthsex`)?.valueCode}function getRace(patient){return(0,import_core164.getExtension)(patient,`${import_core164.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-race`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getEthnicity(patient){return(0,import_core164.getExtension)(patient,`${import_core164.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-ethnicity`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getGeneralPractitioner(patient){return patient.generalPractitioner?.[0]?.display}function formatPatientGenderDisplay(patient){let capitalizedGender=patient.gender?(0,import_core164.capitalize)(patient.gender):"",genderIdentity=getGenderIdentity(patient),birthSex=getBirthSex(patient),parts=[];return capitalizedGender&&parts.push(capitalizedGender),genderIdentity&&parts.push(genderIdentity),birthSex&&parts.push(`Born as ${birthSex}`),parts.join(" \xB7 ")}function formatPatientRaceEthnicityDisplay(patient){let race=getRace(patient),ethnicity=getEthnicity(patient),parts=[];return race&&parts.push(race),ethnicity&&parts.push(ethnicity),parts.join(" \xB7 ")}var getPreferredLanguage=patient=>{if(!patient.communication?.length)return;let preferred=patient.communication?.find(comm=>comm.preferred===!0);return preferred?.language?.coding?.[0]?.display?preferred.language.coding[0].display:patient.communication[0]?.language?.coding?.[0]?.display};var import_core167=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core168=require("@medplum/core"),import_react_hooks45=require("@medplum/react-hooks"),import_react80=require("react");var import_core165=require("@mantine/core"),import_core166=require("@medplum/core"),import_react79=require("react");var import_jsx_runtime128=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react79.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react79.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react79.useCallback)(formData=>{let updatedCondition=(0,import_core166.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core166.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core166.createReference)(patient),encounter:encounter&&(0,import_core166.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core166.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-condition-problems-health-concerns");onSubmit(updatedCondition)},[patient,encounter,condition,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime128.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime128.jsxs)(import_core165.Stack,{children:[(0,import_jsx_runtime128.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core166.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime128.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core166.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime128.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime128.jsx)(import_core165.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime128.jsx)(SubmitButton,{children:"Save"})})]})},condition?.id)}var import_jsx_runtime129=require("react/jsx-runtime");function ProblemList(props){let medplum=(0,import_react_hooks45.useMedplum)(),{patient,encounter}=props,[problems,setProblems]=(0,import_react80.useState)(props.problems.filter(c=>c.verificationStatus?.coding?.[0]?.code!=="entered-in-error")),[editCondition,setEditCondition]=(0,import_react80.useState)(),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react80.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([newCondition,...problems])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(CollapsibleSection,{title:"Problems",onAdd:()=>{setEditCondition(void 0),open()},children:problems.length>0?(0,import_jsx_runtime129.jsx)(import_core167.Flex,{direction:"column",gap:8,children:problems.map(problem=>(0,import_jsx_runtime129.jsx)(SummaryItem,{onClick:()=>{setEditCondition(problem),open()},children:(0,import_jsx_runtime129.jsxs)(import_core167.Box,{children:[(0,import_jsx_runtime129.jsx)(import_core167.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core168.getDisplayString)(problem)}),(0,import_jsx_runtime129.jsxs)(import_core167.Group,{mt:2,gap:4,children:[problem.clinicalStatus?.coding?.[0]?.code&&(0,import_jsx_runtime129.jsx)(StatusBadge,{"data-testid":"status-badge",color:getStatusColor3(problem.clinicalStatus?.coding?.[0]?.code),variant:"light",status:problem.clinicalStatus?.coding?.[0]?.code}),(0,import_jsx_runtime129.jsx)(import_core167.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core168.formatDate)(problem.onsetDateTime)})]})]})},problem.id))}):(0,import_jsx_runtime129.jsx)(import_core167.Text,{children:"(none)"})}),(0,import_jsx_runtime129.jsx)(import_core167.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime129.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var getStatusColor3=status=>{if(!status)return"gray";switch(status){case"active":case"recurrence":case"relapse":return"green";case"inactive":return"orange";case"remission":return"blue";case"resolved":return"teal";default:return"gray"}};var import_core169=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_core170=require("@medplum/core"),import_react_hooks46=require("@medplum/react-hooks"),import_react81=require("react");var import_jsx_runtime130=require("react/jsx-runtime"),NULLFLAVOR=import_core170.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/v3-NullFlavor",CodesToText={38628009:"Homosexual",20430005:"Heterosexual",42035005:"Bisexual",OTH:"Other",UNK:"Unknown",ASKU:"Asked but no answer"},CodesToSystem={38628009:import_core170.SNOMED,20430005:import_core170.SNOMED,42035005:import_core170.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let{patient,encounter}=props,medplum=(0,import_react_hooks46.useMedplum)(),[sexualOrientation,setSexualOrientation]=(0,import_react81.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks7.useDisclosure)(!1),[hoverIndex,setHoverIndex]=(0,import_react81.useState)(null),handleSubmit=(0,import_react81.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core170.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core170.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core170.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core170.createReference)(patient),encounter:encounter?(0,import_core170.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:CodesToSystem[code],code:formData.sexualOrientation}],text:CodesToText[code]}}).then(newSexualOrientation=>{setSexualOrientation(newSexualOrientation),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment,{children:[(0,import_jsx_runtime130.jsx)(CollapsibleSection,{title:"Sexual Orientation",onAdd:()=>{open()},children:sexualOrientation?(0,import_jsx_runtime130.jsx)(import_core169.Flex,{direction:"column",gap:8,children:(0,import_jsx_runtime130.jsx)(import_core169.Box,{onMouseEnter:()=>setHoverIndex(0),onMouseLeave:()=>setHoverIndex(null),children:(0,import_jsx_runtime130.jsx)(import_core169.UnstyledButton,{"data-testid":"sexual-orientation-button",onClick:e=>{killEvent(e),props.onClickResource&&props.onClickResource(sexualOrientation)},children:(0,import_jsx_runtime130.jsx)(import_core169.Box,{pr:hoverIndex===0?24:0,children:(0,import_jsx_runtime130.jsx)(import_core169.Text,{size:"sm",fw:500,children:sexualOrientation.valueCodeableConcept?.text??"Unknown"})})})})}):(0,import_jsx_runtime130.jsx)(import_core169.Text,{children:"(none)"})}),(0,import_jsx_runtime130.jsx)(import_core169.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime130.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime130.jsxs)(import_core169.Stack,{children:[(0,import_jsx_runtime130.jsx)(import_core169.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime130.jsx)(import_core169.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime130.jsx)(import_core169.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime130.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core171=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_core172=require("@medplum/core"),import_react_hooks47=require("@medplum/react-hooks"),import_react82=require("react");var import_jsx_runtime131=require("react/jsx-runtime"),smokingStatusOptions={266919005:"Never smoked tobacco",266927001:"Tobacco smoking consumption unknown","428041000124106":"Occasional tobacco smoker","428061000124105":"Light tobacco smoker","428071000124103":"Heavy tobacco smoker",449868002:"Smokes tobacco daily",77176002:"Smoker",8517006:"Ex-smoker"};function SmokingStatus(props){let medplum=(0,import_react_hooks47.useMedplum)(),[smokingStatus,setSmokingStatus]=(0,import_react82.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks8.useDisclosure)(!1),handleSubmit=(0,import_react82.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core172.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-smokingstatus"]},status:"final",category:[{coding:[{system:"http://terminology.hl7.org/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core172.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core172.createReference)(props.patient),encounter:props.encounter?(0,import_core172.createReference)(props.encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core172.SNOMED,version:import_core172.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,props.patient,props.encounter,close]);return(0,import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment,{children:[(0,import_jsx_runtime131.jsx)(CollapsibleSection,{title:"Smoking Status",onAdd:()=>{open()},children:smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime131.jsx)(import_core171.UnstyledButton,{"data-testid":"smoking-status-button",onClick:()=>props.onClickResource?.(smokingStatus),children:(0,import_jsx_runtime131.jsx)(import_core171.Text,{children:(0,import_core172.formatCodeableConcept)(smokingStatus.valueCodeableConcept)})}):(0,import_jsx_runtime131.jsx)(import_core171.Text,{children:"(none)"})}),(0,import_jsx_runtime131.jsx)(import_core171.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime131.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime131.jsxs)(import_core171.Stack,{children:[(0,import_jsx_runtime131.jsx)(import_core171.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime131.jsx)(import_core171.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime131.jsx)(import_core171.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime131.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core174=require("@mantine/core"),import_hooks9=require("@mantine/hooks"),import_core175=require("@medplum/core"),import_react_hooks48=require("@medplum/react-hooks"),import_react83=require("react");var import_core173=require("@medplum/core");function getObservationValue(obs,component){return component?obs.component?.find(c=>c.code?.coding?.[0].code===component)?.valueQuantity:obs.valueQuantity}function createObservation(patient,encounter,code,title,valueQuantity){if(isValidNumber(valueQuantity.value))return{...createBaseObservation(patient,encounter,code,title),valueQuantity}}function createCompoundObservation(patient,encounter,code,title,components){let component=components.filter(c=>isValidNumber(c.valueQuantity?.value));if(component.length!==0)return{...createBaseObservation(patient,encounter,code,title),component}}function createBaseObservation(patient,encounter,code,title){return{resourceType:"Observation",status:"preliminary",subject:(0,import_core173.createReference)(patient),encounter:encounter?(0,import_core173.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),category:[{coding:[{system:"http://terminology.hl7.org/CodeSystem/observation-category",code:"vital-signs",display:"Vital Signs"}]}],code:createLoincCode(code,title)}}function createLoincCode(code,display){return{coding:[{code,display,system:import_core173.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core173.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime132=require("react/jsx-runtime"),BP="85354-9",SYSTOLIC="8480-6",DIASTOLIC="8462-4",LOINC_CODES=[{name:"systolic",short:"BP Sys",code:BP,component:SYSTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"diastolic",short:"BP Dias",code:BP,component:DIASTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"heartRate",short:"HR",code:"8867-4",title:"Heart Rate",unit:"/min"},{name:"bodyTemperature",short:"Temp",code:"8310-5",title:"Body Temperature",unit:"Cel"},{name:"respiratoryRate",short:"RR",code:"9279-1",title:"Respiratory Rate",unit:"/min"},{name:"height",short:"Ht",code:"8302-2",title:"Height",unit:"cm"},{name:"weight",short:"Wt",code:"29463-7",title:"Weight",unit:"kg"},{name:"bmi",short:"BMI",code:"39156-5",title:"BMI",unit:"kg/m2"},{name:"oxygen",short:"O2",code:"2708-6",title:"Oxygen",unit:"%"},{name:"headCircumference",short:"HC",code:"9843-4",title:"Head Circumference",unit:"cm"}];function Vitals(props){let medplum=(0,import_react_hooks48.useMedplum)(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react83.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks9.useDisclosure)(!1),handleSubmit=(0,import_react83.useCallback)(formData=>{let newObservations=[];newObservations.push(createCompoundObservation(patient,encounter,BP,"Blood pressure",[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.diastolic),"mm[Hg]")}]));for(let meta of LOINC_CODES)meta.component||newObservations.push(createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[meta.name]),meta.unit)));Promise.all(newObservations.filter(Boolean).map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[(0,import_jsx_runtime132.jsx)(CollapsibleSection,{title:"Vitals",onAdd:()=>{open()},children:(0,import_jsx_runtime132.jsx)(import_core174.Stack,{children:LOINC_CODES.map(meta=>{let obs=vitals.find(o=>o.code?.coding?.[0].code===meta.code);return(0,import_jsx_runtime132.jsxs)(import_core174.Group,{align:"center",children:[(0,import_jsx_runtime132.jsx)(import_core174.Text,{c:"dimmed",children:meta.short}),obs&&(0,import_jsx_runtime132.jsx)(import_core174.Text,{children:(0,import_core175.formatQuantity)(getObservationValue(obs,meta.component))})]},meta.name)})})}),(0,import_jsx_runtime132.jsx)(import_core174.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime132.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime132.jsx)(import_core174.SimpleGrid,{cols:2,children:LOINC_CODES.map((meta,index)=>(0,import_jsx_runtime132.jsx)(import_core174.TextInput,{name:meta.name,label:meta.short,description:`${meta.title} (${meta.unit})`,"data-autofocus":index===0,autoFocus:index===0},meta.name))}),(0,import_jsx_runtime132.jsx)(import_core174.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime132.jsx)(import_core174.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime132.jsx)(SubmitButton,{children:"Save"})})]})})]})}var import_jsx_runtime133=require("react/jsx-runtime");function PatientSummary(props){let medplum=(0,import_react_hooks49.useMedplum)(),{patient:propsPatient,onClickResource,onRequestLabs}=props,patient=(0,import_react_hooks49.useResource)(propsPatient),[medicalData,setMedicalData]=(0,import_react84.useState)(),[createdDate,setCreatedDate]=(0,import_react84.useState)();(0,import_react84.useEffect)(()=>{let ref=`Patient/${(0,import_core177.resolveId)(propsPatient)}`,searchMeta={_count:100,_sort:"-_lastUpdated"};Promise.all([medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta}),medplum.searchResources("Appointment",{patient:ref,...searchMeta}),medplum.searchResources("Encounter",{subject:ref,...searchMeta}),medplum.searchResources("Coverage",{beneficiary:ref,...searchMeta}),medplum.searchResources("Immunization",{patient:ref,...searchMeta}),medplum.searchResources("Procedure",{subject:ref,...searchMeta}),medplum.searchResources("Device",{patient:ref,...searchMeta}),medplum.searchResources("Goal",{subject:ref,...searchMeta}),medplum.searchResources("ServiceRequest",{subject:ref,...searchMeta}),medplum.searchResources("DiagnosticReport",{subject:ref,...searchMeta})]).then(results=>{let observations=results[3];setMedicalData({allergies:results[0],problems:results[1],medicationRequests:results[2],sexualOrientation:observations.find(obs=>obs.code?.coding?.[0].code==="76690-7"),smokingStatus:observations.find(obs=>obs.code?.coding?.[0].code==="72166-2"),vitals:observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"),appointments:results[4],encounters:results[5],coverages:results[6],immunizations:results[7],procedures:results[8],devices:results[9],goals:results[10],serviceRequests:results[11],diagnosticReports:results[12]})}).catch(console.error)},[medplum,propsPatient]),(0,import_react84.useEffect)(()=>{patient?.id&&medplum.readHistory("Patient",patient.id).then(history=>{let lastUpdated=history.entry?.[history.entry.length-1]?.resource?.meta?.lastUpdated;setCreatedDate(typeof lastUpdated=="string"?lastUpdated:"")}).catch(()=>{})},[patient?.id,medplum]);let languageDisplay=patient?getPreferredLanguage(patient):void 0;return patient?(0,import_jsx_runtime133.jsxs)(import_core176.Flex,{direction:"column",gap:"xs",w:"100%",h:"100%",className:PatientSummary_default.panel,children:[(0,import_jsx_runtime133.jsxs)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:[(0,import_jsx_runtime133.jsxs)(import_core176.Group,{align:"center",gap:"sm",p:16,children:[(0,import_jsx_runtime133.jsx)(ResourceAvatar,{value:patient,size:48,radius:48,style:{border:"2px solid white"}}),(0,import_jsx_runtime133.jsxs)(import_core176.Stack,{gap:0,style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime133.jsx)(import_core176.Tooltip,{label:(0,import_core177.formatHumanName)(patient.name?.[0]),position:"top-start",openDelay:650,children:(0,import_jsx_runtime133.jsx)(import_core176.Text,{fz:"h4",fw:800,truncate:!0,style:{minWidth:0},children:(0,import_core177.formatHumanName)(patient.name?.[0])})}),(()=>{let dateString=typeof createdDate=="string"&&createdDate.length>0?createdDate:void 0;if(!dateString)return null;let d=new Date(dateString);return(0,import_jsx_runtime133.jsxs)(import_core176.Text,{fz:"xs",mt:-2,fw:500,c:"gray.6",truncate:!0,style:{minWidth:0},children:["Patient since ",d.getMonth()+1,"/",d.getDate(),"/",d.getFullYear()]})})()]})]}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{})]}),(0,import_jsx_runtime133.jsx)(import_core176.Stack,{gap:"xs",px:16,pt:12,pb:16,style:{flex:2,overflowY:"auto",minHeight:0},children:medicalData&&(0,import_jsx_runtime133.jsxs)(import_jsx_runtime133.Fragment,{children:[(0,import_jsx_runtime133.jsxs)(import_core176.Stack,{gap:"xs",py:8,children:[(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.birthDate?`${patient.birthDate} (${(0,import_core177.calculateAgeString)(patient.birthDate)})`:void 0,icon:(0,import_jsx_runtime133.jsx)(IconCake,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Birthdate",label:"Birthdate & Age",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.gender?formatPatientGenderDisplay(patient):void 0,icon:(0,import_jsx_runtime133.jsx)(IconEmpathize,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Gender & Identity",label:"Gender & Identity",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:getRace(patient)||getEthnicity(patient)?formatPatientRaceEthnicityDisplay(patient):void 0,icon:(0,import_jsx_runtime133.jsx)(IconBinaryTree,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Race & Ethnicity",label:"Race & Ethnicity",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:patient.address?.[0]?(0,import_core177.formatAddress)(patient.address[0]):void 0,icon:(0,import_jsx_runtime133.jsx)(IconMapPin,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Location",label:"Location",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:languageDisplay,icon:(0,import_jsx_runtime133.jsx)(IconLanguage,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Language",label:"Language",onClickResource}),(0,import_jsx_runtime133.jsx)(PatientInfoItem,{patient,value:getGeneralPractitioner(patient),icon:(0,import_jsx_runtime133.jsx)(IconStethoscope,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add General Practitioner",label:"General Practitioner",onClickResource})]}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(Insurance,{coverages:medicalData.coverages||[],onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(Allergies,{patient,allergies:medicalData.allergies,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(ProblemList,{patient,problems:medicalData.problems,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(Medications,{patient,medicationRequests:medicalData.medicationRequests,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(Labs,{patient,serviceRequests:medicalData.serviceRequests,diagnosticReports:medicalData.diagnosticReports,onClickResource,onRequestLabs}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(SexualOrientation,{patient,sexualOrientation:medicalData.sexualOrientation,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(SmokingStatus,{patient,smokingStatus:medicalData.smokingStatus,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{}),(0,import_jsx_runtime133.jsx)(Vitals,{patient,vitals:medicalData.vitals,onClickResource}),(0,import_jsx_runtime133.jsx)(import_core176.Divider,{})]})})]}):null}var import_core178=require("@medplum/core"),import_react85=require("react");var import_jsx_runtime134=require("react/jsx-runtime");function PatientTimeline(props){let{patient,...rest}=props,loadTimelineResources=(0,import_react85.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("Communication",{subject:ref,_count}),medplum.search("Device",{patient:ref,_count}),medplum.search("DeviceRequest",{patient:ref,_count}),medplum.search("DiagnosticReport",{subject:ref,_count}),medplum.search("Media",{subject:ref,_count}),medplum.search("ServiceRequest",{subject:ref,_count}),medplum.search("Task",{subject:ref,_count})])},[]);return(0,import_jsx_runtime134.jsx)(ResourceTimeline,{value:patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core178.createReference)(resource),sender:(0,import_core178.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core178.createReference)(resource),operator:(0,import_core178.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core179=require("@mantine/core"),import_core180=require("@medplum/core"),import_react_hooks50=require("@medplum/react-hooks");var import_react86=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing"};var import_jsx_runtime135=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=(0,import_react_hooks50.useMedplum)(),defaultValue2=(0,import_react_hooks50.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react86.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react86.useState)(),[hoverKey,setHoverKey]=(0,import_react86.useState)(),[value,setValue]=(0,import_react86.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react86.useRef)(value);if(valueRef.current=value,(0,import_react86.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react86.useEffect)(()=>(setValue(ensurePlanDefinitionKeys(defaultValue2??{resourceType:"PlanDefinition",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]),!schemaLoaded||!value)return null;function changeProperty(property,newValue){setValue({...valueRef.current,[property]:newValue})}return(0,import_jsx_runtime135.jsx)("div",{children:(0,import_jsx_runtime135.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime135.jsx)(import_core179.TextInput,{label:"Plan Title",py:"md",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime135.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),(0,import_jsx_runtime135.jsx)(SubmitButton,{children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react86.useRef)(props.actions);actionsRef.current=props.actions;function changeAction(changedAction){props.onChange(actionsRef.current.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...actionsRef.current,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(actionsRef.current.filter(i=>i!==removedAction))}return(0,import_jsx_runtime135.jsxs)(import_core179.Stack,{gap:"md",className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime135.jsx)(ActionBuilder,{action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:changeAction,onRemove:()=>removeAction(action)},action.id)),(0,import_jsx_runtime135.jsx)("div",{children:(0,import_jsx_runtime135.jsx)(import_core179.Button,{variant:"outline",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action);function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}return(0,import_jsx_runtime135.jsx)("div",{onClick,onMouseOver:onHover,onFocus:onHover,children:(0,import_jsx_runtime135.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,hoverKey:props.hoverKey,onRemove:props.onRemove})})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react86.useState)(props.actionType),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function changeProperty(property,value){props.onChange({...action,[property]:value})}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime135.jsxs)(import_core179.Paper,{"data-testid":action.id,className,p:0,radius:"sm",withBorder:!0,children:[(0,import_jsx_runtime135.jsxs)(import_core179.Flex,{w:"100%",p:"xs",bg:"gray.0",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime135.jsx)(import_core179.TextInput,{w:"100%",name:`actionTitle-${action.id}`,defaultValue:action.title,placeholder:"Title",onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime135.jsx)(import_core179.CloseButton,{"data-testid":"close-button",onClick:props.onRemove})]}),editing&&(0,import_jsx_runtime135.jsxs)(import_core179.Stack,{gap:"xl",p:"md",children:[(0,import_jsx_runtime135.jsx)(import_core179.Box,{children:(0,import_jsx_runtime135.jsx)(import_core179.TextInput,{label:"Task Description",placeholder:"Enter task description",name:`actionDescription-${action.id}`,defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)})}),(0,import_jsx_runtime135.jsx)(import_core179.Box,{children:(0,import_jsx_runtime135.jsx)(import_core179.NativeSelect,{label:"Type of Action",value:actionType,onChange:e=>{let value=e.currentTarget.value==="standard"?void 0:e.currentTarget.value;setActionType(value),props.onChange({...props.action,definitionCanonical:value==="standard"?void 0:props.action.definitionCanonical})},data:[{value:"standard",label:"Standard task"},{value:"questionnaire",label:"Task with Questionnaire"},{value:"activitydefinition",label:"Task with Activity Definition"}]})}),actionType==="questionnaire"&&(0,import_jsx_runtime135.jsxs)(import_core179.Stack,{gap:0,children:[(0,import_jsx_runtime135.jsxs)(import_core179.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime135.jsx)(import_core179.Text,{fw:600,children:"Select questionnaire"}),(0,import_jsx_runtime135.jsx)(import_core179.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime135.jsxs)(import_core179.Text,{size:"sm",c:"dimmed",mb:"sm",children:["Questionnaire to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime135.jsx)(import_core179.Anchor,{href:"/Questionnaire",target:"_blank",c:"blue",children:"questionnaires list"})]}),(0,import_jsx_runtime135.jsx)(ActionResourceTypeBuilder,{resourceType:"Questionnaire",action,onChange:props.onChange})]}),actionType==="activitydefinition"&&(0,import_jsx_runtime135.jsxs)(import_core179.Stack,{gap:0,children:[(0,import_jsx_runtime135.jsxs)(import_core179.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime135.jsx)(import_core179.Text,{fw:600,children:"Select activity definition"}),(0,import_jsx_runtime135.jsx)(import_core179.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime135.jsxs)(import_core179.Text,{size:"sm",c:"dimmed",mb:"sm",children:["ActivityDefinition.kind resource to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime135.jsx)(import_core179.Anchor,{href:"/ActivityDefinition",target:"_blank",c:"blue",children:"activity definitions list"})]}),(0,import_jsx_runtime135.jsx)(ActionResourceTypeBuilder,{resourceType:"ActivityDefinition",action,onChange:props.onChange})]})]})]})}function ActionResourceTypeBuilder(props){let{id,definitionCanonical}=props.action,reference=definitionCanonical?.startsWith(props.resourceType+"/")?{reference:definitionCanonical}:void 0;return(0,import_jsx_runtime135.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core180.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function getInitialActionType(action){return action.definitionCanonical?.startsWith("Questionnaire")?"questionnaire":action.definitionCanonical?.startsWith("ActivityDefinition")?"activitydefinition":"standard"}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=parseInt(existing.substring(3),10);isNaN(existingNum)||(nextId=Math.max(nextId,existingNum+1))}return existing}return"id-"+nextId++}function ensurePlanDefinitionKeys(planDefinition){return{...planDefinition,action:ensurePlanDefinitionActionKeys(planDefinition.action)}}function ensurePlanDefinitionActionKeys(actions){if(actions)return actions.map(action=>({...action,id:generateId(action.id),action:ensurePlanDefinitionActionKeys(action.action)}))}var import_core184=require("@mantine/core"),import_core185=require("@medplum/core"),import_react_hooks52=require("@medplum/react-hooks");var import_react89=require("react");var import_core182=require("@mantine/core"),import_core183=require("@medplum/core"),import_react_hooks51=require("@medplum/react-hooks"),import_react88=require("react");var import_core181=require("@medplum/core"),QuestionnaireItemType={group:"group",display:"display",question:"question",boolean:"boolean",decimal:"decimal",integer:"integer",date:"date",dateTime:"dateTime",time:"time",string:"string",text:"text",url:"url",choice:"choice",openChoice:"open-choice",attachment:"attachment",reference:"reference",quantity:"quantity"};function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,questionnaireResponse){let extension=(0,import_core181.getExtension)(item,import_core181.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression");if(questionnaireResponse&&extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core181.toTypedValue)(questionnaireResponse),result=(0,import_core181.evalFhirPathTyped)(expression,[value],{"%resource":value});return(0,import_core181.toJsBoolean)(result)}}if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(questionnaireResponse?.item,enableWhen.question);if(enableWhen.operator==="exists"&&!enableWhen.answerBoolean&&!actualAnswers?.length){if(enableBehavior==="any")return!0;continue}let{anyMatch,allMatch}=checkAnswers(enableWhen,actualAnswers,enableBehavior);if(enableBehavior==="any"&&anyMatch)return!0;if(enableBehavior==="all"&&!allMatch)return!1}return enableBehavior!=="any"}function evaluateCalculatedExpressionsInQuestionnaire(items,response){return items.map(item=>{if(item.item)return{...item,item:evaluateCalculatedExpressionsInQuestionnaire(item.item,response)};try{let calculatedValue=evaluateCalculatedExpression(item,response);if(!calculatedValue)return null;let answer=typedValueToResponseItem(item,calculatedValue);return answer?{id:item?.id,linkId:item?.linkId,text:item.text,answer:[answer]}:null}catch(error){return{id:item?.id,linkId:item?.linkId,text:item.text,answer:[],extension:[{url:`${import_core181.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`,valueString:`Expression evaluation failed: ${(0,import_core181.normalizeErrorString)(error)}`}]}}}).filter(item=>item!==null)}function typedValueToResponseItem(item,value){if(item.type)switch(item.type){case QuestionnaireItemType.boolean:return value.type===import_core181.PropertyType.boolean?{valueBoolean:value.value}:void 0;case QuestionnaireItemType.date:return value.type===import_core181.PropertyType.date?{valueDate:value.value}:void 0;case QuestionnaireItemType.dateTime:return value.type===import_core181.PropertyType.dateTime?{valueDateTime:value.value}:void 0;case QuestionnaireItemType.time:return value.type===import_core181.PropertyType.time?{valueTime:value.value}:void 0;case QuestionnaireItemType.url:return value.type===import_core181.PropertyType.url?{valueString:value.value}:void 0;case QuestionnaireItemType.text:return value.type===import_core181.PropertyType.string?{valueString:value.value}:void 0;case QuestionnaireItemType.attachment:return value.type===import_core181.PropertyType.Attachment?{valueAttachment:value.value}:void 0;case QuestionnaireItemType.reference:return value.type===import_core181.PropertyType.Reference?{valueReference:value.value}:void 0;case QuestionnaireItemType.quantity:return{valueQuantity:value.value};case QuestionnaireItemType.decimal:return{valueDecimal:value.value};case QuestionnaireItemType.integer:return{valueInteger:value.value};case QuestionnaireItemType.string:return{valueString:value.value};default:return}}function evaluateCalculatedExpression(item,response){if(!response)return;let extension=(0,import_core181.getExtension)(item,import_core181.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression");if(extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core181.toTypedValue)(response),result=(0,import_core181.evalFhirPathTyped)(expression,[value],{"%resource":value});return result.length!==0?result[0]:void 0}}}function mergeUpdatedItems(mergedItems,updatedItems){return mergedItems.map(mergedItem=>{let updatedItem=updatedItems.find(updated=>updated.linkId===mergedItem.linkId);return updatedItem?{...mergedItem,item:updatedItem.item?mergeUpdatedItems(mergedItem.item||[],updatedItem.item):mergedItem.item,answer:updatedItem.answer||mergedItem.answer,extension:updatedItem.extension||mergedItem.extension}:mergedItem})}function getNewMultiSelectValues(selected,propertyName,item){let result=[];for(let selectedStr of selected){let option=item.answerOption?.find(candidate=>(0,import_core181.typedValueToString)(getItemAnswerOptionValue(candidate))===selectedStr);if(option){let optionValue=getItemAnswerOptionValue(option);optionValue&&result.push({[propertyName]:optionValue.value})}}return result}function getByLinkId(responseItems,linkId){if(responseItems)for(let response of responseItems){if(response.linkId===linkId)return response.answer;if(response.item){let nestedAnswer=getByLinkId(response.item,linkId);if(nestedAnswer)return nestedAnswer}}}function evaluateMatch(actualAnswer,expectedAnswer,operator){if(operator==="exists")return!!actualAnswer===expectedAnswer.value;if(actualAnswer){let fhirPathOperator=operator==="="||operator==="!="?operator?.replace("=","~"):operator,[{value}]=(0,import_core181.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=getItemEnableWhenValueAnswer(enableWhen),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=getResponseItemAnswerValue(actualAnswerValue),{operator}=enableWhen;if(evaluateMatch(actualAnswer,expectedAnswer,operator)?anyMatch=!0:allMatch=!1,enableBehavior==="any"&&anyMatch)break}return{anyMatch,allMatch}}function getQuestionnaireItemReferenceTargetTypes(item){let extension=(0,import_core181.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(extension){if(extension.valueCode!==void 0)return[extension.valueCode];if(extension.valueCodeableConcept)return extension.valueCodeableConcept?.coding?.map(c=>c.code)}}function setQuestionnaireItemReferenceTargetTypes(item,targetTypes){let result=(0,import_core181.deepClone)(item),extension=(0,import_core181.getExtension)(result,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!targetTypes||targetTypes.length===0?(extension&&(result.extension=result.extension?.filter(e=>e!==extension)),result):(extension||(result.extension||(result.extension=[]),extension={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},result.extension.push(extension)),targetTypes.length===1?(extension.valueCode=targetTypes[0],delete extension.valueCodeableConcept):(extension.valueCodeableConcept={coding:targetTypes.map(t=>({code:t}))},delete extension.valueCode),result)}function getQuestionnaireItemReferenceFilter(item,subject,encounter){let extension=(0,import_core181.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter");if(!extension?.valueString)return;let filter=extension.valueString;subject?.reference&&(filter=filter.replaceAll("$subj",subject.reference)),encounter?.reference&&(filter=filter.replaceAll("$encounter",encounter.reference));let result={},parts=filter.split("&");for(let part of parts){let[key,value]=(0,import_core181.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire,questionnaireResponse){return{resourceType:"QuestionnaireResponse",questionnaire:questionnaire.url??(0,import_core181.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item,questionnaireResponse?.item),status:"in-progress"}}function buildInitialResponseItems(items,questionnaireResponseItems){return items?.map(item=>buildInitialResponseItem(item,questionnaireResponseItems))??[]}function buildInitialResponseItem(item,questionnaireResponseItem){let existingResponseItem=questionnaireResponseItem?.find(responseItem=>responseItem.linkId===item.linkId);return{id:existingResponseItem?existingResponseItem.id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item,existingResponseItem?.item),answer:existingResponseItem?existingResponseItem.answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core181.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}function getItemInitialValue(initial){return(0,import_core181.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:initial},"value")}function getItemAnswerOptionValue(option){return(0,import_core181.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:option},"value")}function getItemEnableWhenValueAnswer(enableWhen){return(0,import_core181.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer")}function getResponseItemAnswerValue(answer){return(0,import_core181.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:answer},"value")}var import_react87=require("react"),QuestionnaireFormContext=(0,import_react87.createContext)({});var import_jsx_runtime136=require("react/jsx-runtime"),MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS=30,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS=50;function QuestionnaireFormItem(props){let context=(0,import_react88.useContext)(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a,idx)=>idx===props.index?newResponseAnswer:a)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??getItemInitialValue(initial),validationError=(0,import_core183.getExtension)(response,`${import_core183.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`),formComponent=null;switch(type){case QuestionnaireItemType.display:formComponent=(0,import_jsx_runtime136.jsx)("p",{children:props.item.text},props.item.linkId);break;case QuestionnaireItemType.boolean:formComponent=(0,import_jsx_runtime136.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime136.jsx)(import_core182.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);break;case QuestionnaireItemType.decimal:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{type:"number",step:"any",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.value===""?void 0:e.currentTarget.valueAsNumber})});break;case QuestionnaireItemType.integer:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{type:"number",step:1,id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.value===""?void 0:e.currentTarget.valueAsNumber})});break;case QuestionnaireItemType.date:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{type:"date",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});break;case QuestionnaireItemType.dateTime:formComponent=(0,import_jsx_runtime136.jsx)(DateTimeInput,{name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});break;case QuestionnaireItemType.time:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{type:"time",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});break;case QuestionnaireItemType.string:case QuestionnaireItemType.url:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer({valueString:value===""?void 0:value})}});break;case QuestionnaireItemType.text:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.Textarea,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer({valueString:value===""?void 0:value})}});break;case QuestionnaireItemType.attachment:formComponent=(0,import_jsx_runtime136.jsx)(import_core182.Group,{py:4,children:(0,import_jsx_runtime136.jsx)(AttachmentInput,{path:"",name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});break;case QuestionnaireItemType.reference:formComponent=(0,import_jsx_runtime136.jsx)(ReferenceInput,{name,required:props.required??item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});break;case QuestionnaireItemType.quantity:formComponent=(0,import_jsx_runtime136.jsx)(QuantityInput,{path:"",name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});break;case QuestionnaireItemType.choice:case QuestionnaireItemType.openChoice:isCheckboxChoice(item)?formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireCheckboxInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):isDropdownChoice(item)||item.answerValueSet&&!isRadiobuttonChoice(item)?formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireDropdownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):formComponent=(0,import_jsx_runtime136.jsx)(QuestionnaireRadiobuttonInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});break;default:return null}return(0,import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment,{children:[formComponent,validationError?.valueString&&(0,import_jsx_runtime136.jsx)(import_core182.Text,{c:"red",size:"lg",mt:4,children:validationError.valueString})]})}function QuestionnaireDropdownInput(props){let{name,item,initial,onChangeAnswer,response}=props;if(!item.answerOption?.length&&!item.answerValueSet)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let initialValue=getItemInitialValue(initial),defaultValue2=getCurrentAnswer(response)??initialValue,currentAnswer=getCurrentMultiSelectAnswer(response),isMultiSelect=item.repeats||isMultiSelectChoice(item);if(item.answerValueSet)return(0,import_jsx_runtime136.jsx)(ValueSetAutocomplete,{name,placeholder:"Select items",binding:item.answerValueSet,maxValues:isMultiSelect?void 0:1,onChange:values=>{isMultiSelect?values.length===0?onChangeAnswer({}):onChangeAnswer(values.map(coding=>({valueCoding:coding}))):onChangeAnswer({valueCoding:values[0]})},defaultValue:defaultValue2?.value});if(isMultiSelect){let{propertyName,data:data2}=formatSelectData(item);return(0,import_jsx_runtime136.jsx)(import_core182.MultiSelect,{data:data2,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core183.typedValueToString)(initialValue)],onChange:selected=>{if(selected.length===0)onChangeAnswer({});else{let values=getNewMultiSelectValues(selected,propertyName,item);onChangeAnswer(values)}}})}else{let data2=[""];if(item.answerOption)for(let option of item.answerOption){let optionValue=getItemAnswerOptionValue(option);data2.push((0,import_core183.typedValueToString)(optionValue))}return(0,import_jsx_runtime136.jsx)(import_core182.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core183.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core183.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}}function getValueSetOptions(valueSetUrl,medplum){return valueSetUrl?medplum.valueSetExpand({url:valueSetUrl,count:MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS+1}).then(valueSet=>valueSet.expansion?.contains??[]):Promise.resolve([])}function useValueSetOptions(valueSetUrl){let medplum=(0,import_react_hooks51.useMedplum)(),[valueSetOptions,setValueSetOptions]=(0,import_react88.useState)([]),[isLoading,setIsLoading]=(0,import_react88.useState)(!1);return(0,import_react88.useEffect)(()=>{async function loadValueSet(){if(valueSetUrl){setIsLoading(!0);try{let options=await getValueSetOptions(valueSetUrl,medplum);setValueSetOptions(options)}catch(err){console.error("Error loading value set:",err)}finally{setIsLoading(!1)}}}loadValueSet().catch(console.error)},[valueSetUrl,medplum]),[valueSetOptions,isLoading]}function getOptionsFromValueSet(valueSetOptions,name){return valueSetOptions.map((option,i)=>{let optionName=`${name}-valueset-${i}`,optionValue={type:"Coding",value:{system:option.system,code:option.code,display:option.display}};return[optionName,optionValue]})}function QuestionnaireRadiobuttonInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core183.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=getItemInitialValue(initial),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),options=[],defaultValue2;if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=getItemAnswerOptionValue(option);return optionValue?.value?(initialValue&&(0,import_core183.stringify)(optionValue)===(0,import_core183.stringify)(initialValue)&&(defaultValue2=optionName),[optionName,optionValue]):null}).filter(option=>option!==null);options.push(...mappedOptions)}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);if(isLoading)return(0,import_jsx_runtime136.jsx)(import_core182.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS);return(0,import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment,{children:[(0,import_jsx_runtime136.jsx)(import_core182.Radio.Group,{name,value:answerLinkId??defaultValue2,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core183.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:limitedOptions.map(([optionName,optionValue])=>(0,import_jsx_runtime136.jsx)(import_core182.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime136.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime136.jsxs)(import_core182.Text,{size:"sm",c:"dimmed",mt:"xs",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function QuestionnaireCheckboxInput(props){let{name,item,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core183.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),initialSelectedValues=item.answerValueSet?(response.answer?.map(a=>a.valueCoding)||[]).filter(c=>c!==void 0):getCurrentMultiSelectAnswer(response),[selectedValues,setSelectedValues]=(0,import_react88.useState)(initialSelectedValues),options=[];if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=getItemAnswerOptionValue(option);return optionValue?.value?[optionName,optionValue]:null}).filter(option=>option!==null);options.push(...mappedOptions)}if(isLoading)return(0,import_jsx_runtime136.jsx)(import_core182.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime136.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS),handleCheckboxChange=(optionValue,selected)=>{if(item.answerValueSet){let currentCodings=selectedValues,newCodings;selected?newCodings=[...currentCodings,optionValue.value]:newCodings=currentCodings.filter(c=>!(0,import_core183.deepEquals)(c,optionValue.value)),setSelectedValues(newCodings),newCodings.length===0?onChangeAnswer({}):onChangeAnswer(newCodings.map(coding=>({valueCoding:coding})))}else{let currentValues=selectedValues,optionValueStr=(0,import_core183.typedValueToString)(optionValue),newValues;if(selected?newValues=[...currentValues,optionValueStr]:newValues=currentValues.filter(v=>v!==optionValueStr),setSelectedValues(newValues),newValues.length===0)onChangeAnswer({});else{let values=getNewMultiSelectValues(newValues,"value"+(0,import_core183.capitalize)(optionValue.type),item);onChangeAnswer(values)}}};return(0,import_jsx_runtime136.jsxs)(import_core182.Group,{style:{flexDirection:"column",alignItems:"flex-start"},children:[limitedOptions.map(([optionName,optionValue])=>{let optionValueStr=(0,import_core183.typedValueToString)(optionValue),isChecked=item.answerValueSet?selectedValues.some(coding=>(0,import_core183.deepEquals)(coding,optionValue.value)):selectedValues.includes(optionValueStr);return(0,import_jsx_runtime136.jsx)(import_core182.Checkbox,{id:optionName,label:(0,import_jsx_runtime136.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value}),checked:isChecked,onChange:event=>handleCheckboxChange(optionValue,event.currentTarget.checked)},optionName)}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime136.jsxs)(import_core182.Text,{size:"sm",c:"dimmed",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function NoAnswerDisplay(){return(0,import_jsx_runtime136.jsx)(import_core182.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemAnswerOptionValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a=>getItemAnswerOptionValue(a)).map(type=>(0,import_core183.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core183.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function hasChoiceType(item,type){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code===type)}function isDropdownChoice(item){return hasChoiceType(item,"drop-down")}function isCheckboxChoice(item){return hasChoiceType(item,"check-box")}function isRadiobuttonChoice(item){return hasChoiceType(item,"radio-button")}function isMultiSelectChoice(item){return hasChoiceType(item,"multi-select")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core183.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(answerOption=>{let answerOptionValue=getItemAnswerOptionValue(answerOption),answerOptionValueStr=(0,import_core183.typedValueToString)(answerOptionValue);return{value:answerOptionValueStr,label:answerOptionValueStr}});return{propertyName,data:data2}}var QuestionnaireBuilder_default={section:"QuestionnaireBuilder_section",hovering:"QuestionnaireBuilder_hovering",editing:"QuestionnaireBuilder_editing",questionBody:"QuestionnaireBuilder_questionBody",topActions:"QuestionnaireBuilder_topActions",bottomActions:"QuestionnaireBuilder_bottomActions",movementActions:"QuestionnaireBuilder_movementActions",movementIcons:"QuestionnaireBuilder_movementIcons",columnAlignment:"QuestionnaireBuilder_columnAlignment",linkIdInput:"QuestionnaireBuilder_linkIdInput",typeSelect:"QuestionnaireBuilder_typeSelect",preserveBreaks:"QuestionnaireBuilder_preserveBreaks"};var import_jsx_runtime137=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=(0,import_react_hooks52.useMedplum)(),defaultValue2=(0,import_react_hooks52.useResource)(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react89.useState)(!1),[value,setValue]=(0,import_react89.useState)(),[selectedKey,setSelectedKey]=(0,import_react89.useState)(),[hoverKey,setHoverKey]=(0,import_react89.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react89.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react89.useEffect)(()=>(setValue(ensureQuestionnaireKeys(defaultValue2??{resourceType:"Questionnaire",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]);let handleChange=(questionnaire,disableSubmit)=>{setValue(questionnaire),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire)};return!schemaLoaded||!value?null:(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime137.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime137.jsx)(SubmitButton,{children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core185.isResource)(props.item),isContainer=isResource2||item.type===QuestionnaireItemType.group,linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react89.useRef)(props.item);itemRef.current=props.item;function onClick(e){killEvent(e),props.setSelectedKey(props.item.id)}function onHover(e){killEvent(e),props.setHoverKey(props.item.id)}function changeItem(changedItem){let curr=itemRef.current;props.onChange({...curr,item:curr.item?.map(i=>i.id===changedItem.id?changedItem:i)})}function addItem(addedItem,disableSubmit){props.onChange({...props.item,item:[...props.item.item??[],addedItem]},disableSubmit)}function removeItem(removedItem){props.onChange({...props.item,item:props.item.item?.filter(i=>i!==removedItem)})}function changeProperty(property,value){props.onChange({...itemRef.current,[property]:value})}function updateItem(updatedItem){props.onChange({...props.item,...updatedItem})}function toggleRepeatable(item2){props.onChange({...props.item,item:props.item.item?.map(i=>i===item2?{...i,repeats:!i.repeats}:i)})}function moveItem(itemIndex,delta){let updatedItems=reorderItems(props.item.item,itemIndex,delta);props.onChange({...props.item,item:updatedItems})}let className=clsx_default(QuestionnaireBuilder_default.section,{[QuestionnaireBuilder_default.editing]:editing,[QuestionnaireBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime137.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[isResource2&&(0,import_jsx_runtime137.jsx)(import_core184.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime137.jsx)(import_core184.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime137.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime137.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[resource.title&&(0,import_jsx_runtime137.jsx)(import_core184.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.preserveBreaks,children:item.text}),!isContainer&&(0,import_jsx_runtime137.jsx)(QuestionnaireFormItem,{item,index:0,required:!1,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(ItemBuilder,{item:item2,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,isFirst:i===0,isLast:i===(props.item.item??[]).length-1,setHoverKey:props.setHoverKey,onChange:changeItem,onRemove:()=>removeItem(item2),onRepeatable:toggleRepeatable,onMoveUp:()=>moveItem(i,-1),onMoveDown:()=>moveItem(i,1)})},item2.id)),!isContainer&&(0,import_jsx_runtime137.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core184.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime137.jsx)(import_core184.NativeSelect,{size:"xs",className:QuestionnaireBuilder_default.typeSelect,defaultValue:item.type,onChange:e=>changeProperty("type",e.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"}]})]}):(0,import_jsx_runtime137.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime137.jsx)(import_core184.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime137.jsxs)(import_core184.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime137.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime137.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime137.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core185.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime137.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime137.jsx)(import_core184.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime137.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime137.jsxs)(import_core184.Box,{display:"flex",children:[(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime137.jsx)(import_core184.Space,{w:"lg"}),(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime137.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime137.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(ResourcePropertyInput,{name:"value[x]",path:"Questionnaire.answerOption.value[x]",property:props.property,defaultPropertyType:propertyType,defaultValue:propertyValue,onChange:(newValue,propName)=>{let newOptions=[...props.options],index=newOptions.findIndex(o=>o.id===option.id);newOptions[index]={id:option.id,[propName]:newValue},props.onChange({...props.item,answerOption:newOptions})},outcome:void 0},option.id)}),(0,import_jsx_runtime137.jsx)("div",{children:(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:props.options.filter(o=>o.id!==option.id)})},children:"Remove"})})]},option.id)})})}function ReferenceProfiles(props){let targetTypes=getQuestionnaireItemReferenceTargetTypes(props.item)??[];return(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime137.jsxs)(import_core184.Group,{children:[(0,import_jsx_runtime137.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime137.jsx)(import_core184.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId3=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId3(){return"id-"+nextId3++}function ensureQuestionnaireKeys(questionnaire){return{...questionnaire,id:questionnaire.id||generateId3(),item:ensureQuestionnaireItemKeys(questionnaire.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId3=Math.max(nextId3,parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId3(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId3()}))}function createPage(){return{id:generateId3(),linkId:generateLinkId("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 reorderItems(items,itemIndex,delta){let currentItems=items??[],newIndex=itemIndex+delta;if(newIndex<0||newIndex>=currentItems.length)return currentItems;let updatedItems=[...currentItems];return[updatedItems[itemIndex],updatedItems[newIndex]]=[updatedItems[newIndex],updatedItems[itemIndex]],updatedItems}var import_core189=require("@mantine/core"),import_core190=require("@medplum/core"),import_react_hooks53=require("@medplum/react-hooks"),import_react92=require("react");var import_core188=require("@mantine/core");var import_core186=require("@mantine/core"),import_react90=require("react");var import_jsx_runtime138=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react90.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type===QuestionnaireItemType.display)return(0,import_jsx_runtime138.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!==QuestionnaireItemType.choice&&item.type!==QuestionnaireItemType.openChoice;return item.type===QuestionnaireItemType.boolean?(0,import_jsx_runtime138.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime138.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_,index)=>(0,import_jsx_runtime138.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime138.jsx)(import_core186.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type===QuestionnaireItemType.choice||item.type===QuestionnaireItemType.openChoice)return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core187=require("@mantine/core"),import_react91=require("react");var import_jsx_runtime139=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react91.useState)(props.response);if((0,import_react91.useEffect)(()=>{setResponses(props.response)},[props.response]),responses.length===0)return null;function handleRepeatableGroup(newResponseItems,index){let newResponses=responses.map((responses2,idx)=>idx===index?newResponseItems[0]:responses2);setResponses(newResponses),props.onChange(newResponses)}function insertNewGroup(){let newResponse=buildInitialResponseItem(props.item,void 0);setResponses([...responses,newResponse])}return(0,import_jsx_runtime139.jsxs)(import_jsx_runtime139.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime139.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime139.jsx)(import_core187.Anchor,{onClick:insertNewGroup,children:`Add Group: ${props.item.text}`})]})}function QuestionnaireGroup(props){let{response,checkForQuestionEnabled,onChange}=props;function onSetGroup(newResponseItem){let mergedResponse=response.item?.map(current=>newResponseItem.find(newResponse2=>newResponse2.id===current.id)??current)?.concat(newResponseItem.slice(1)),groupResponse={...response,item:mergedResponse};onChange([groupResponse])}return props.checkForQuestionEnabled(props.item)?(0,import_jsx_runtime139.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime139.jsx)(import_core187.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime139.jsx)(import_core187.Stack,{children:props.item.item?.map(item=>item.type===QuestionnaireItemType.group?item.repeats?(0,import_jsx_runtime139.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime139.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime139.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime140=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,excludeButtons,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type===QuestionnaireItemType.group?(0,import_jsx_runtime140.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime140.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime140.jsx)(import_core188.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime140.jsxs)(import_jsx_runtime140.Fragment,{children:[renderPages&&(0,import_jsx_runtime140.jsx)(import_core188.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime140.jsx)(import_core188.Stack,{children:form}),!excludeButtons&&(0,import_jsx_runtime140.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep:renderPages?nextStep:void 0,prevStep:renderPages?prevStep:void 0,renderPages,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.renderPages&&props.activePage>0,showNextButton=props.renderPages&&props.activePage<props.numberOfPages-1,showSubmitButton=!props.renderPages||props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime140.jsxs)(import_core188.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime140.jsx)(import_core188.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime140.jsx)(import_core188.Button,{onClick:e=>{let form=e.currentTarget.closest("form");props.nextStep&&form.reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime140.jsx)(SubmitButton,{children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime141=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=(0,import_react_hooks53.useMedplum)(),{subject,source:sourceFromProps}=props,questionnaire=(0,import_react_hooks53.useResource)(props.questionnaire),prevQuestionnaire=(0,import_react_hooks53.usePrevious)(questionnaire),questionnaireResponse=(0,import_react_hooks53.useResource)(props.questionnaireResponse),[response,setResponse]=(0,import_react92.useState)(questionnaireResponse),[activePage,setActivePage]=(0,import_react92.useState)(0),onChangeRef=(0,import_react92.useRef)(props.onChange);onChangeRef.current=props.onChange;let onSubmitRef=(0,import_react92.useRef)(props.onSubmit);onSubmitRef.current=props.onSubmit,(0,import_react92.useEffect)(()=>{if(questionnaireResponse?.item&&questionnaire){let response2=buildInitialResponse(questionnaire,questionnaireResponse),evaluatedResponse=evaluateAndMergeResponseItems(response2,questionnaire);setResponse(evaluatedResponse)}else{if(questionnaire&&getQuestionnaireIdentity(prevQuestionnaire)===getQuestionnaireIdentity(questionnaire))return;setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)}},[questionnaireResponse,questionnaire,prevQuestionnaire]),(0,import_react92.useEffect)(()=>{if(response&&onChangeRef.current)try{onChangeRef.current(response)}catch(e){console.error("Error invoking QuestionnaireForm.onChange callback",e)}},[response]);let setItems=(0,import_react92.useCallback)(newResponseItems=>{setResponse(prevResponse=>updateResponseItems(prevResponse,newResponseItems,questionnaire))},[questionnaire]),handleSubmit=(0,import_react92.useCallback)(()=>{let onSubmit=onSubmitRef.current;if(onSubmit&&questionnaire&&response){let source=sourceFromProps;if(!source){let profile=medplum.getProfile();profile&&(source=(0,import_core190.createReference)(profile))}onSubmit({...response,questionnaire:questionnaire.url??(0,import_core190.getReferenceString)(questionnaire),subject,source,authored:new Date().toISOString(),status:"completed"})}},[medplum,questionnaire,response,subject,sourceFromProps]);function checkForQuestionEnabled(item){return isQuestionEnabled(item,response)}if(!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime141.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime141.jsxs)(Form,{testid:"questionnaire-form",onSubmit:handleSubmit,children:[questionnaire.title&&(0,import_jsx_runtime141.jsx)(import_core189.Title,{children:questionnaire.title}),(0,import_jsx_runtime141.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:!props.disablePagination&&numberOfPages>1,activePage,numberOfPages,excludeButtons:props.excludeButtons,submitButtonText:props.submitButtonText,checkForQuestionEnabled,nextStep,prevStep})]})})}function mergeIndividualItems(prevItem,newItem){let mergedNestedItems=mergeItems(prevItem.item??[],newItem.item??[]);return{...newItem,item:mergedNestedItems.length>0?mergedNestedItems:void 0,answer:newItem.answer&&newItem.answer.length>0?newItem.answer:prevItem.answer}}function mergeItems(prevItems,newItems){let result=[],usedIds=new Set;for(let prevItem of prevItems){let itemId=prevItem.id,newItem=newItems.find(item=>item.id===itemId);newItem?(result.push(mergeIndividualItems(prevItem,newItem)),usedIds.add(newItem.id)):result.push(prevItem)}for(let newItem of newItems)usedIds.has(newItem.id)||result.push(newItem);return result}function getQuestionnaireIdentity(questionnaire){return questionnaire?.id||questionnaire}function updateResponseItems(prevResponse,newResponseItems,questionnaire){if(!newResponseItems)return{resourceType:"QuestionnaireResponse",status:"in-progress"};let currentItems=prevResponse?.item??[],mergedItems=mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems]),tempResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergedItems},updatedItems=evaluateCalculatedExpressionsInQuestionnaire(questionnaire?.item??[],tempResponse);return tempResponse.item=mergeUpdatedItems(mergedItems,updatedItems),evaluateAndMergeResponseItems(tempResponse,questionnaire)}function evaluateAndMergeResponseItems(tempResponse,questionnaire){let updatedItems=evaluateCalculatedExpressionsInQuestionnaire(questionnaire?.item??[],tempResponse);return{resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeUpdatedItems(tempResponse.item??[],updatedItems)}}var import_core191=require("@mantine/core"),import_core192=require("@medplum/core");var import_react93=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime142=require("react/jsx-runtime"),intervalFilters=["gender","age","gestationalAge","context","appliesTo","category"],defaultProps={definition:{resourceType:"ObservationDefinition",code:{text:""}},onSubmit:()=>{}};function ReferenceRangeEditor(props){props=Object.assign(defaultProps,props);let defaultDefinition=props.definition,[intervalGroups,setIntervalGroups]=(0,import_react93.useState)([]),[groupId,setGroupId]=(0,import_react93.useState)(1),[intervalId,setIntervalId]=(0,import_react93.useState)(1);return(0,import_react93.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime142.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime142.jsx)(import_core191.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime142.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime142.jsx)(import_core191.ActionIcon,{title:"Add Group",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),addGroup({id:`group-id-${groupId}`,filters:{},intervals:[]}),setGroupId(id=>id+1)},children:(0,import_jsx_runtime142.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime142.jsx)(import_core191.Group,{justify:"flex-end",children:(0,import_jsx_runtime142.jsx)(SubmitButton,{children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g=>g.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime142.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime142.jsxs)(import_core191.Stack,{gap:"lg",children:[(0,import_jsx_runtime142.jsx)(import_core191.Group,{justify:"flex-end",children:(0,import_jsx_runtime142.jsx)(import_core191.ActionIcon,{title:"Remove Group",variant:"subtle","data-testid":`remove-group-button-${intervalGroup.id}`,size:"sm",onClick:e=>{killEvent(e),props.onRemoveGroup(intervalGroup)},children:(0,import_jsx_runtime142.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime142.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime142.jsx)(import_core191.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime142.jsxs)(import_core191.Stack,{gap:"xs",children:[(0,import_jsx_runtime142.jsxs)(import_core191.Group,{children:[(0,import_jsx_runtime142.jsx)(import_core191.TextInput,{"data-testid":`condition-${interval.id}`,defaultValue:interval.condition,label:"Condition: ",size:"sm",onChange:e=>{killEvent(e),props.onChange(intervalGroup.id,{...interval,condition:e.currentTarget.value.trim()})}},`condition-${interval.id}`),(0,import_jsx_runtime142.jsx)(import_core191.ActionIcon,{title:"Remove Interval",variant:"subtle",size:"sm","data-testid":`remove-interval-${interval.id}`,onClick:e=>{killEvent(e),props.onRemove(intervalGroup.id,interval)},children:(0,import_jsx_runtime142.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime142.jsx)(RangeInput,{path:"",onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime142.jsx)(import_core191.ActionIcon,{title:"Add Interval",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),props.onAdd(intervalGroup.id,{range:{low:{unit},high:{unit}}})},children:(0,import_jsx_runtime142.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props;intervalGroup.filters.age||(intervalGroup.filters.age={});for(let key of["low","high"])intervalGroup.filters.age[key]?.unit||(intervalGroup.filters.age[key]={...intervalGroup.filters.age[key],unit:"years",system:"http://unitsofmeasure.org"});return(0,import_jsx_runtime142.jsxs)(import_core191.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime142.jsx)(import_core191.Group,{children:(0,import_jsx_runtime142.jsx)(import_core191.NativeSelect,{data:["","male","female"],label:"Gender:",defaultValue:intervalGroup.filters.gender||"",onChange:e=>{for(let interval of intervalGroup.intervals){let newGender=e.currentTarget.value;newGender===""&&(newGender=void 0),onChange(intervalGroup.id,{...interval,gender:newGender})}}})}),(0,import_jsx_runtime142.jsxs)(import_core191.Group,{gap:"xs",children:[(0,import_jsx_runtime142.jsx)(import_core191.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime142.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime142.jsx)(RangeInput,{path:"",name:`age-${intervalGroup.id}`,defaultValue:intervalGroup.filters.age,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime142.jsx)(import_core191.NativeSelect,{data:["","pre-puberty","follicular","midcycle","luteal","postmenopausal"],label:"Endocrine:",defaultValue:intervalGroup.filters.context?.text||"",onChange:e=>{for(let interval of intervalGroup.intervals){let newEndocrine=e.currentTarget.value;newEndocrine===""?(newEndocrine=void 0,onChange(intervalGroup.id,{...interval,context:void 0})):onChange(intervalGroup.id,{...interval,context:{text:newEndocrine,coding:[{code:newEndocrine,system:"http://terminology.hl7.org/CodeSystem/referencerange-meaning"}]}})}}}),(0,import_jsx_runtime142.jsx)(import_core191.NativeSelect,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f=>[f,interval[f]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core192.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core192.formatRange)(interval.gestationalAge)}`,`context=${interval.context?.text}`,`appliesTo=${interval.appliesTo?.map(c=>c.text).join("+")}`,`category=${interval.category}`].join(":")}function getUnitString(unit){return unit&&((0,import_core192.getCodeBySystem)(unit,"http://unitsofmeasure.org")||unit.text)}function isEmptyInterval(interval){return interval.range?.low?.value===void 0&&interval.range?.high?.value===void 0}var import_core193=require("@mantine/core"),import_core194=require("@medplum/core"),import_react_hooks54=require("@medplum/react-hooks");var import_react94=require("react");var import_jsx_runtime143=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=(0,import_react_hooks54.useMedplum)(),requestGroup=(0,import_react_hooks54.useResource)(props.value),[startedLoading,setStartedLoading]=(0,import_react94.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react94.useState)();if((0,import_react94.useEffect)(()=>{requestGroup&&!startedLoading&&(medplum.executeBatch(buildBatchRequest(requestGroup)).then(setResponseBundle).catch(console.log),setStartedLoading(!0))},[medplum,requestGroup,startedLoading]),!requestGroup||!responseBundle)return null;return(0,import_jsx_runtime143.jsx)(import_core193.Grid,{children:requestGroup.action?.map((action,index)=>{let task=action.resource&&findBundleEntry(action.resource),taskInput=task?.input?.[0]?.valueReference,taskOutput=task?.output?.[0]?.valueReference;return(0,import_jsx_runtime143.jsxs)(import_react94.Fragment,{children:[(0,import_jsx_runtime143.jsx)(import_core193.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime143.jsx)(IconCheckbox,{}):(0,import_jsx_runtime143.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime143.jsxs)(import_core193.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime143.jsx)(import_core193.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime143.jsx)("div",{children:action.description}),(0,import_jsx_runtime143.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime143.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core194.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime143.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime143.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime143.jsxs)(import_core193.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime143.jsx)(import_core193.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime143.jsx)(import_core193.Button,{onClick:()=>props.onEdit(task,taskInput,taskOutput),children:"Edit"})]})]},`action-${index}`)})});function buildBatchRequest(request){let batchEntries=[];if(request.action)for(let action of request.action)action.resource?.reference&&batchEntries.push({request:{method:"GET",url:action.resource.reference}});return{resourceType:"Bundle",type:"batch",entry:batchEntries}}function findBundleEntry(reference){for(let entry of responseBundle?.entry??[])if(entry.resource&&reference.reference===(0,import_core194.getReferenceString)(entry.resource))return entry.resource}}var import_react_hooks55=require("@medplum/react-hooks"),import_react95=require("react");var import_core195=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N=orig.length,M=rev.length,MAX=N+M+1,size=1+2*MAX,middle=size/2|0,diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k=-d;k<=d;k+=2){let kmiddle=middle+k,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k===-d||k!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N&&j<M&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N&&j>=M)return diagonal[kmiddle]}diagonal[middle+d-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=(history.entry??[]).filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:(0,import_core195.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b)=>a.meta.lastUpdated.localeCompare(b.meta.lastUpdated));if(!versions.length)return[];let table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k=0;k<revision.revised.lines.length;k++)table.splice(position+k,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime144=require("react/jsx-runtime");function ResourceBlame(props){let medplum=(0,import_react_hooks55.useMedplum)(),[value,setValue]=(0,import_react95.useState)(props.history);if((0,import_react95.useEffect)(()=>{!props.history&&props.resourceType&&props.id&&medplum.readHistory(props.resourceType,props.id).then(setValue).catch(console.log)},[medplum,props.history,props.resourceType,props.id]),!value)return(0,import_jsx_runtime144.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime144.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime144.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime144.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime144.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime144.jsxs)(import_jsx_runtime144.Fragment,{children:[(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime144.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime144.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime144.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime144.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core196=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime145=require("react/jsx-runtime");function ResourceDiff(props){let originalResource=props.original,revisedResource=props.revised;props.ignoreMeta&&(originalResource={...originalResource,meta:void 0},revisedResource={...revisedResource,meta:void 0});let original=(0,import_core196.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core196.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime145.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime145.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime145.jsxs)(import_jsx_runtime145.Fragment,{children:["...",(0,import_jsx_runtime145.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime145.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
72
72
  `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime145.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
73
- `)}),"...",(0,import_jsx_runtime145.jsx)("br",{})]})}var import_core196=require("@mantine/core"),import_core197=require("@medplum/core"),import_react_hooks56=require("@medplum/react-hooks");var import_react96=require("react");var ResourceForm_default={splitButton:"ResourceForm_splitButton",menuControl:"ResourceForm_menuControl"};var import_jsx_runtime146=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=(0,import_react_hooks56.useMedplum)(),defaultValue2=(0,import_react_hooks56.useResource)(props.defaultValue),resourceType=defaultValue2?.resourceType,[schemaLoaded,setSchemaLoaded]=(0,import_react96.useState)(!1),[value,setValue]=(0,import_react96.useState)(),accessPolicy=medplum.getAccessPolicy(),theme=(0,import_core196.useMantineTheme)();(0,import_react96.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core197.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(!0);let modifiedDefaultValue=(0,import_core197.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else medplum.requestSchema(resourceType).then(()=>{setValue(defaultValue2),setSchemaLoaded(!0)}).catch(console.log)},[medplum,defaultValue2,resourceType,props.profileUrl]);let accessPolicyResource=(0,import_react96.useMemo)(()=>defaultValue2&&(0,import_core197.satisfiedAccessPolicy)(defaultValue2,import_core197.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,defaultValue2]),canWrite=(0,import_react96.useMemo)(()=>medplum.isSuperAdmin()||!accessPolicy||!(0,import_core197.isPopulated)(value?.resourceType)?!0:(0,import_core197.canWriteResourceType)(accessPolicy,value?.resourceType),[medplum,accessPolicy,value?.resourceType]);return!schemaLoaded||!value?(0,import_jsx_runtime146.jsx)("div",{children:"Loading..."}):canWrite?(0,import_jsx_runtime146.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime146.jsxs)(import_core196.Stack,{mb:"xl",children:[(0,import_jsx_runtime146.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime146.jsx)(import_core196.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime146.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime146.jsx)(import_core196.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime146.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:resourceType,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl,accessPolicyResource}),(0,import_jsx_runtime146.jsxs)(import_core196.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",gap:0,children:[(0,import_jsx_runtime146.jsx)(import_core196.Button,{type:"submit",className:clsx_default((props.onPatch||props.onDelete)&&ResourceForm_default.splitButton),children:defaultValue2?.id?"Update":"Create"}),(props.onPatch||props.onDelete)&&(0,import_jsx_runtime146.jsxs)(import_core196.Menu,{transitionProps:{transition:"pop"},position:"bottom-end",withinPortal:!0,children:[(0,import_jsx_runtime146.jsx)(import_core196.Menu.Target,{children:(0,import_jsx_runtime146.jsx)(import_core196.ActionIcon,{variant:"filled",color:theme.primaryColor,size:36,className:ResourceForm_default.menuControl,"aria-label":"More actions",children:(0,import_jsx_runtime146.jsx)(IconChevronDown,{size:14,stroke:1.5})})}),(0,import_jsx_runtime146.jsxs)(import_core196.Menu.Dropdown,{children:[props.onPatch&&(0,import_jsx_runtime146.jsx)(import_core196.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEdit,{size:14,stroke:1.5}),onClick:()=>{props.onPatch(value)},children:"Patch"}),props.onDelete&&(0,import_jsx_runtime146.jsx)(import_core196.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime146.jsx)(IconTrash,{size:14,stroke:1.5,color:"red"}),onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})]})]}):(0,import_jsx_runtime146.jsxs)(import_core196.Alert,{color:"red",title:"Permission denied",icon:(0,import_jsx_runtime146.jsx)(IconAlertCircle,{}),children:["Your access level prevents you from editing and creating ",value.resourceType," resources."]})}var import_core198=require("@mantine/core"),import_core199=require("@medplum/core"),import_react_hooks57=require("@medplum/react-hooks"),import_react97=require("react");var import_jsx_runtime147=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=(0,import_react_hooks57.useMedplum)(),[value,setValue]=(0,import_react97.useState)(props.history);return(0,import_react97.useEffect)(()=>{!props.history&&props.resourceType&&props.id&&medplum.readHistory(props.resourceType,props.id).then(setValue).catch(console.log)},[medplum,props.history,props.resourceType,props.id]),value?(0,import_jsx_runtime147.jsxs)(import_core198.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime147.jsx)(import_core198.Table.Thead,{children:(0,import_jsx_runtime147.jsxs)(import_core198.Table.Tr,{children:[(0,import_jsx_runtime147.jsx)(import_core198.Table.Th,{children:"Author"}),(0,import_jsx_runtime147.jsx)(import_core198.Table.Th,{children:"Date"}),(0,import_jsx_runtime147.jsx)(import_core198.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime147.jsx)(import_core198.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime147.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime147.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime147.jsxs)(import_core198.Table.Tr,{children:[(0,import_jsx_runtime147.jsx)(import_core198.Table.Td,{children:(0,import_jsx_runtime147.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime147.jsx)(import_core198.Table.Td,{children:(0,import_core199.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime147.jsx)(import_core198.Table.Td,{children:(0,import_jsx_runtime147.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime147.jsx)(import_core198.Table.Tr,{children:(0,import_jsx_runtime147.jsx)(import_core198.Table.Td,{colSpan:3,children:(0,import_core199.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core200=require("@mantine/core"),import_core201=require("@medplum/core"),import_react_hooks58=require("@medplum/react-hooks"),import_react98=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime148=require("react/jsx-runtime");function Scheduler(props){let schedule=(0,import_react_hooks58.useResource)(props.schedule),questionnaire=(0,import_react_hooks58.useResource)(props.questionnaire),[month,setMonth]=(0,import_react98.useState)(getStartMonth()),[date,setDate]=(0,import_react98.useState)(),[slot,setSlot]=(0,import_react98.useState)(),[response,setResponse]=(0,import_react98.useState)(),[slots]=(0,import_react_hooks58.useSearchResources)("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core201.isReference)(props.schedule)?props.schedule.reference:(0,import_core201.getReferenceString)(props.schedule)],["start","gt"+getStart2(month)],["start","lt"+getEnd2(month)]]));if(!schedule||!slots||!questionnaire)return null;let actor=schedule.actor?.[0];return(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime148.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime148.jsx)(import_core200.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime148.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime148.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime148.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime148.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime148.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime148.jsx)(import_core200.Stack,{children:slots.map(s=>{let slotStart=new Date(s.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()<date.getTime()+24*3600*1e3&&(0,import_jsx_runtime148.jsx)("div",{children:(0,import_jsx_runtime148.jsx)(import_core200.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime148.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime148.jsx)("p",{children:"Check your email for a calendar invite."})]})]})]})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+31*24*60*60*1e3)}function formatSlotInstant(time){let date=new Date(Math.max(Date.now(),time));return date.setHours(0,0,0,0),date.toISOString()}function formatTime(date){return date.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var import_core202=require("@medplum/core");var import_jsx_runtime149=require("react/jsx-runtime");function ServiceRequestTimeline(props){let{serviceRequest,...rest}=props;return(0,import_jsx_runtime149.jsx)(ResourceTimeline,{value:serviceRequest,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("ServiceRequest",id),medplum.search("Communication",{"based-on":ref,_count}),medplum.search("DiagnosticReport",{"based-on":ref,_count}),medplum.search("Media",{"based-on":ref,_count}),medplum.search("DocumentReference",{related:ref,_count}),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count})])},createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",basedOn:[(0,import_core202.createReference)(resource)],subject:resource.subject,sender:(0,import_core202.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core202.createReference)(resource)],subject:resource.subject,operator:(0,import_core202.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core203=require("@mantine/core"),import_notifications9=require("@mantine/notifications"),import_core204=require("@medplum/core"),import_react_hooks59=require("@medplum/react-hooks"),import_jsx_runtime150=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=(0,import_react_hooks59.useMedplum)(),{client,patient,encounter,children,...rest}=props;function launchApp(){medplum.createResource({resourceType:"SmartAppLaunch",patient,encounter}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",(0,import_core204.ensureTrailingSlash)(medplum.fhirUrl().toString())),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications9.showNotification)({color:"red",message:(0,import_core204.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime150.jsx)(import_core203.Anchor,{onClick:()=>launchApp(),...rest,children})}
73
+ `)}),"...",(0,import_jsx_runtime145.jsx)("br",{})]})}var import_core197=require("@mantine/core"),import_core198=require("@medplum/core"),import_react_hooks56=require("@medplum/react-hooks");var import_react96=require("react");var ResourceForm_default={splitButton:"ResourceForm_splitButton",menuControl:"ResourceForm_menuControl"};var import_jsx_runtime146=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=(0,import_react_hooks56.useMedplum)(),defaultValue2=(0,import_react_hooks56.useResource)(props.defaultValue),resourceType=defaultValue2?.resourceType,[schemaLoaded,setSchemaLoaded]=(0,import_react96.useState)(!1),[value,setValue]=(0,import_react96.useState)(),accessPolicy=medplum.getAccessPolicy(),theme=(0,import_core197.useMantineTheme)();(0,import_react96.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core198.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(!0);let modifiedDefaultValue=(0,import_core198.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else medplum.requestSchema(resourceType).then(()=>{setValue(defaultValue2),setSchemaLoaded(!0)}).catch(console.log)},[medplum,defaultValue2,resourceType,props.profileUrl]);let accessPolicyResource=(0,import_react96.useMemo)(()=>defaultValue2&&(0,import_core198.satisfiedAccessPolicy)(defaultValue2,import_core198.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,defaultValue2]),canWrite=(0,import_react96.useMemo)(()=>medplum.isSuperAdmin()||!accessPolicy||!(0,import_core198.isPopulated)(value?.resourceType)?!0:(0,import_core198.canWriteResourceType)(accessPolicy,value?.resourceType),[medplum,accessPolicy,value?.resourceType]);return!schemaLoaded||!value?(0,import_jsx_runtime146.jsx)("div",{children:"Loading..."}):canWrite?(0,import_jsx_runtime146.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime146.jsxs)(import_core197.Stack,{mb:"xl",children:[(0,import_jsx_runtime146.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime146.jsx)(import_core197.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime146.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime146.jsx)(import_core197.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime146.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:resourceType,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl,accessPolicyResource}),(0,import_jsx_runtime146.jsxs)(import_core197.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",gap:0,children:[(0,import_jsx_runtime146.jsx)(import_core197.Button,{type:"submit",className:clsx_default((props.onPatch||props.onDelete)&&ResourceForm_default.splitButton),children:defaultValue2?.id?"Update":"Create"}),(props.onPatch||props.onDelete)&&(0,import_jsx_runtime146.jsxs)(import_core197.Menu,{transitionProps:{transition:"pop"},position:"bottom-end",withinPortal:!0,children:[(0,import_jsx_runtime146.jsx)(import_core197.Menu.Target,{children:(0,import_jsx_runtime146.jsx)(import_core197.ActionIcon,{variant:"filled",color:theme.primaryColor,size:36,className:ResourceForm_default.menuControl,"aria-label":"More actions",children:(0,import_jsx_runtime146.jsx)(IconChevronDown,{size:14,stroke:1.5})})}),(0,import_jsx_runtime146.jsxs)(import_core197.Menu.Dropdown,{children:[props.onPatch&&(0,import_jsx_runtime146.jsx)(import_core197.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEdit,{size:14,stroke:1.5}),onClick:()=>{props.onPatch(value)},children:"Patch"}),props.onDelete&&(0,import_jsx_runtime146.jsx)(import_core197.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime146.jsx)(IconTrash,{size:14,stroke:1.5,color:"red"}),onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})]})]}):(0,import_jsx_runtime146.jsxs)(import_core197.Alert,{color:"red",title:"Permission denied",icon:(0,import_jsx_runtime146.jsx)(IconAlertCircle,{}),children:["Your access level prevents you from editing and creating ",value.resourceType," resources."]})}var import_core199=require("@mantine/core"),import_core200=require("@medplum/core"),import_react_hooks57=require("@medplum/react-hooks"),import_react97=require("react");var import_jsx_runtime147=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=(0,import_react_hooks57.useMedplum)(),[value,setValue]=(0,import_react97.useState)(props.history);return(0,import_react97.useEffect)(()=>{!props.history&&props.resourceType&&props.id&&medplum.readHistory(props.resourceType,props.id).then(setValue).catch(console.log)},[medplum,props.history,props.resourceType,props.id]),value?(0,import_jsx_runtime147.jsxs)(import_core199.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime147.jsx)(import_core199.Table.Thead,{children:(0,import_jsx_runtime147.jsxs)(import_core199.Table.Tr,{children:[(0,import_jsx_runtime147.jsx)(import_core199.Table.Th,{children:"Author"}),(0,import_jsx_runtime147.jsx)(import_core199.Table.Th,{children:"Date"}),(0,import_jsx_runtime147.jsx)(import_core199.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime147.jsx)(import_core199.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime147.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime147.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime147.jsxs)(import_core199.Table.Tr,{children:[(0,import_jsx_runtime147.jsx)(import_core199.Table.Td,{children:(0,import_jsx_runtime147.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime147.jsx)(import_core199.Table.Td,{children:(0,import_core200.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime147.jsx)(import_core199.Table.Td,{children:(0,import_jsx_runtime147.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime147.jsx)(import_core199.Table.Tr,{children:(0,import_jsx_runtime147.jsx)(import_core199.Table.Td,{colSpan:3,children:(0,import_core200.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core201=require("@mantine/core"),import_core202=require("@medplum/core"),import_react_hooks58=require("@medplum/react-hooks"),import_react98=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime148=require("react/jsx-runtime");function Scheduler(props){let schedule=(0,import_react_hooks58.useResource)(props.schedule),questionnaire=(0,import_react_hooks58.useResource)(props.questionnaire),[month,setMonth]=(0,import_react98.useState)(getStartMonth()),[date,setDate]=(0,import_react98.useState)(),[slot,setSlot]=(0,import_react98.useState)(),[response,setResponse]=(0,import_react98.useState)(),[slots]=(0,import_react_hooks58.useSearchResources)("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core202.isReference)(props.schedule)?props.schedule.reference:(0,import_core202.getReferenceString)(props.schedule)],["start","gt"+getStart2(month)],["start","lt"+getEnd2(month)]]));if(!schedule||!slots||!questionnaire)return null;let actor=schedule.actor?.[0];return(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime148.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime148.jsx)(import_core201.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime148.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime148.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime148.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime148.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime148.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime148.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime148.jsx)(import_core201.Stack,{children:slots.map(s=>{let slotStart=new Date(s.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()<date.getTime()+24*3600*1e3&&(0,import_jsx_runtime148.jsx)("div",{children:(0,import_jsx_runtime148.jsx)(import_core201.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime148.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime148.jsxs)("div",{children:[(0,import_jsx_runtime148.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime148.jsx)("p",{children:"Check your email for a calendar invite."})]})]})]})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+31*24*60*60*1e3)}function formatSlotInstant(time){let date=new Date(Math.max(Date.now(),time));return date.setHours(0,0,0,0),date.toISOString()}function formatTime(date){return date.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var import_core203=require("@medplum/core");var import_jsx_runtime149=require("react/jsx-runtime");function ServiceRequestTimeline(props){let{serviceRequest,...rest}=props;return(0,import_jsx_runtime149.jsx)(ResourceTimeline,{value:serviceRequest,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("ServiceRequest",id),medplum.search("Communication",{"based-on":ref,_count}),medplum.search("DiagnosticReport",{"based-on":ref,_count}),medplum.search("Media",{"based-on":ref,_count}),medplum.search("DocumentReference",{related:ref,_count}),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count})])},createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",basedOn:[(0,import_core203.createReference)(resource)],subject:resource.subject,sender:(0,import_core203.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core203.createReference)(resource)],subject:resource.subject,operator:(0,import_core203.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core204=require("@mantine/core"),import_notifications9=require("@mantine/notifications"),import_core205=require("@medplum/core"),import_react_hooks59=require("@medplum/react-hooks"),import_jsx_runtime150=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=(0,import_react_hooks59.useMedplum)(),{client,patient,encounter,children,...rest}=props;function launchApp(){medplum.createResource({resourceType:"SmartAppLaunch",patient,encounter}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",(0,import_core205.ensureTrailingSlash)(medplum.fhirUrl().toString())),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications9.showNotification)({color:"red",message:(0,import_core205.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime150.jsx)(import_core204.Anchor,{onClick:()=>launchApp(),...rest,children})}
74
74
  /*! Bundled license information:
75
75
 
76
76
  @tabler/icons-react/dist/esm/defaultAttributes.mjs: