@medplum/react 3.0.5 → 3.0.6

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.
@@ -68,7 +68,7 @@
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_core60.isEmpty)(targetType.resourceType)}var import_core66=require("@mantine/core"),import_core67=require("@medplum/core");var import_react40=require("react");var import_core63=require("@mantine/core"),import_core64=require("@medplum/core"),import_react39=require("react");var import_core61=require("@mantine/core");var import_jsx_runtime57=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime57.jsx)(import_core61.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime57.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime57.jsx)(import_core61.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime57.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core62=require("@mantine/core");var import_jsx_runtime58=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime58.jsx)(import_core62.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime58.jsx)(IconCircleMinus,{size:"1.25rem"})})}var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_jsx_runtime59=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime59.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime60=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react39.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react39.useContext)(ElementsContext),contextValue=(0,import_react39.useMemo)(()=>{if((0,import_core64.isPopulated)(sliceElements))return(0,import_core64.buildElementsContext)({parentContext:parentElementsContextValue,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url});console.assert(!1,"Expected sliceElements to always be populated",props.path)},[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_core64.isEmpty)(slice.elements),propertyDisplayName=(0,import_core64.getPropertyDisplayName)(slice.name);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime60.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,children:(0,import_jsx_runtime60.jsxs)(import_core63.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime60.jsxs)(import_core63.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime60.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime60.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})}),values.length>slice.min&&(0,import_jsx_runtime60.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}`)),values.length<slice.max&&(0,import_jsx_runtime60.jsx)(import_core63.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime60.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_core65=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core65.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_core65.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}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_core65.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core65.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl?promises.push(medplum.requestProfileSchema(profileUrl)):promises.push(Promise.resolve([]))}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_core65.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_jsx_runtime61=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=a(),[loading,setLoading]=(0,import_react40.useState)(!0),[slices,setSlices]=(0,import_react40.useState)([]),[defaultValue2]=(0,import_react40.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react40.useState)(()=>[defaultValue2]),ctx=(0,import_react40.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react40.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(defaultValue2,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,defaultValue2,ctx.profileUrl,setSlicedValues,props.path]);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_runtime61.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core67.getPathDisplayName)(property.path);return(0,import_jsx_runtime61.jsxs)(import_core66.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[slices.map((slice,sliceIndex)=>(0,import_jsx_runtime61.jsx)(SliceInput,{slice,path:props.path,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime61.jsxs)(import_core66.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime61.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime61.jsx)(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,path:props.path,defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),(0,import_jsx_runtime61.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime61.jsx)(import_core66.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime61.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}var import_core68=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react41=require("react"),import_jsx_runtime62=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react41.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react41.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime62.jsxs)(import_core68.Flex,{gap:"xs",children:[(0,import_jsx_runtime62.jsx)(import_core68.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime62.jsx)(import_core68.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime62.jsx)(IconCopy,{})})]})}var import_core69=require("@mantine/core"),import_core70=require("@medplum/core"),import_react42=require("react");var import_jsx_runtime63=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react42.useState)(props.defaultValue),[open,setOpen]=(0,import_react42.useState)(!1),valueRef=(0,import_react42.useRef)();return valueRef.current=value,(0,import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment,{children:[(0,import_jsx_runtime63.jsxs)(import_core69.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime63.jsx)("span",{children:(0,import_core70.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime63.jsx)(import_core69.Button,{onClick:()=>setOpen(!0),children:"Edit"})]}),(0,import_jsx_runtime63.jsx)(TimingEditorDialog,{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_react42.useState)(props.defaultValue||defaultValue),valueRef=(0,import_react42.useRef)();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_runtime63.jsx)(import_core69.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime63.jsxs)(import_core69.Stack,{children:[(0,import_jsx_runtime63.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime63.jsx)(DateTimeInput,{name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime63.jsx)(import_core69.Switch,{label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment,{children:[(0,import_jsx_runtime63.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime63.jsxs)(import_core69.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime63.jsx)(import_core69.TextInput,{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_runtime63.jsx)(import_core69.NativeSelect,{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_runtime63.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime63.jsx)(import_core69.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime63.jsx)(import_core69.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime63.jsx)(import_core69.Chip,{value:day,size:"xs",radius:"xl",children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime63.jsx)(import_core69.Group,{justify:"flex-end",children:(0,import_jsx_runtime63.jsx)(import_core69.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime64=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_core72.PropertyType.Attachment)return(0,import_jsx_runtime64.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange});let indent=propertyTypes[0]?.code!==import_core72.PropertyType.Extension;return(0,import_jsx_runtime64.jsx)(ResourceArrayInput,{property,name,path:props.path,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}else return propertyTypes.length>1?(0,import_jsx_runtime64.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime64.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core72.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})}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_react43.useState)(initialPropertyType);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,{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_runtime64.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_core72.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react43.useContext)(ElementsContext),defaultValue2=(0,import_react43.useMemo)(()=>{if(!(0,import_core72.isComplexTypeCode)(propertyType)||!(0,import_core72.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core72.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core72.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core72.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core72.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime64.jsx)("div",{children:"Property type not specified "});let properties={name,defaultValue:defaultValue2,onChange,outcome,path};switch(propertyType){case import_core72.PropertyType.SystemString:case import_core72.PropertyType.canonical:case import_core72.PropertyType.string:case import_core72.PropertyType.time:case import_core72.PropertyType.uri:case import_core72.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime64.jsx)(SensitiveTextarea,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)},error:getErrorsForInput(props.outcome,name)}):(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case import_core72.PropertyType.date:return(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{type:"date",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case import_core72.PropertyType.dateTime:case import_core72.PropertyType.instant:return(0,import_jsx_runtime64.jsx)(DateTimeInput,{name,defaultValue:defaultValue2,onChange,outcome});case import_core72.PropertyType.decimal:case import_core72.PropertyType.integer:case import_core72.PropertyType.positiveInt:case import_core72.PropertyType.unsignedInt:return(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{type:"number",step:propertyType===import_core72.PropertyType.decimal?"any":"1",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.valueAsNumber)}});case import_core72.PropertyType.code:return(0,import_jsx_runtime64.jsx)(CodeInput,{...properties,binding:binding?.valueSet});case import_core72.PropertyType.boolean:return(0,import_jsx_runtime64.jsx)(import_core71.Checkbox,{id:name,name,"data-testid":name,defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core72.PropertyType.base64Binary:case import_core72.PropertyType.markdown:return(0,import_jsx_runtime64.jsx)(import_core71.Textarea,{id:name,spellCheck:propertyType!==import_core72.PropertyType.base64Binary,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core72.PropertyType.Address:return(0,import_jsx_runtime64.jsx)(AddressInput,{...properties});case import_core72.PropertyType.Annotation:return(0,import_jsx_runtime64.jsx)(AnnotationInput,{...properties});case import_core72.PropertyType.Attachment:return(0,import_jsx_runtime64.jsx)(AttachmentInput,{...properties});case import_core72.PropertyType.CodeableConcept:return(0,import_jsx_runtime64.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...properties});case import_core72.PropertyType.Coding:return(0,import_jsx_runtime64.jsx)(CodingInput,{binding:binding?.valueSet,...properties});case import_core72.PropertyType.ContactDetail:return(0,import_jsx_runtime64.jsx)(ContactDetailInput,{...properties});case import_core72.PropertyType.ContactPoint:return(0,import_jsx_runtime64.jsx)(ContactPointInput,{...properties});case import_core72.PropertyType.Extension:return(0,import_jsx_runtime64.jsx)(ExtensionInput,{...properties,propertyType:props.elementDefinitionType});case import_core72.PropertyType.HumanName:return(0,import_jsx_runtime64.jsx)(HumanNameInput,{...properties});case import_core72.PropertyType.Identifier:return(0,import_jsx_runtime64.jsx)(IdentifierInput,{...properties});case import_core72.PropertyType.Money:return(0,import_jsx_runtime64.jsx)(MoneyInput,{...properties});case import_core72.PropertyType.Period:return(0,import_jsx_runtime64.jsx)(PeriodInput,{...properties});case import_core72.PropertyType.Duration:case import_core72.PropertyType.Quantity:return(0,import_jsx_runtime64.jsx)(QuantityInput,{...properties});case import_core72.PropertyType.Range:return(0,import_jsx_runtime64.jsx)(RangeInput,{...properties});case import_core72.PropertyType.Ratio:return(0,import_jsx_runtime64.jsx)(RatioInput,{...properties});case import_core72.PropertyType.Reference:return(0,import_jsx_runtime64.jsx)(ReferenceInput,{...properties,targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core72.PropertyType.Timing:return(0,import_jsx_runtime64.jsx)(TimingInput,{...properties});case import_core72.PropertyType.Dosage:case import_core72.PropertyType.UsageContext:default:return(0,import_jsx_runtime64.jsx)(BackboneElementInput,{typeName:propertyType,path:properties.path,defaultValue:defaultValue2,onChange,outcome})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core72.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_runtime65=require("react/jsx-runtime"),EXTENSION_KEYS=new Set(["extension","modifierExtension"]),IGNORED_PROPERTIES=new Set(["id",...DEFAULT_IGNORED_PROPERTIES].filter(prop=>!EXTENSION_KEYS.has(prop)));function ElementsInput(props){let[value,setValue]=(0,import_react44.useState)(props.defaultValue??{}),elementsContext=(0,import_react44.useContext)(ElementsContext),elementsToRender=(0,import_react44.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_runtime65.jsx)(import_core73.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,resourcePropertyInput=(0,import_jsx_runtime65.jsx)(ResourcePropertyInput,{property:element,name:key,path:props.path+"."+key,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},arrayElement:void 0,outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.has(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?(0,import_jsx_runtime65.jsx)(CheckboxFormSection,{title:(0,import_core74.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,children:resourcePropertyInput},key):(0,import_jsx_runtime65.jsx)(FormSection,{title:(0,import_core74.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,children:resourcePropertyInput},key)})})}function getElementsToRender(inputElements){return Object.entries(inputElements).filter(([key,element])=>!(0,import_core74.isPopulated)(element.type)||element.max===0||element.path.toLowerCase().endsWith("extension.url")&&element.fixed||EXTENSION_KEYS.has(key)&&!(0,import_core74.isPopulated)(element.slicing?.slices)||IGNORED_PROPERTIES.has(key)?!1:!(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&element.path.split(".").length===2||key.includes(".")))}var import_jsx_runtime66=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react45.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react45.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react45.useMemo)(()=>(0,import_core75.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react45.useMemo)(()=>{if(typeSchema)return(0,import_core75.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime66.jsx)(ElementsInput,{path:props.path,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime66.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core76=require("@mantine/core"),import_react46=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_runtime67=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react46.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_react46.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime67.jsxs)("div",{children:[(0,import_jsx_runtime67.jsxs)(import_core76.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime67.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime67.jsxs)(import_core76.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime67.jsx)(import_core76.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime67.jsx)(import_core76.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime67.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime67.jsx)("thead",{children:(0,import_jsx_runtime67.jsxs)("tr",{children:[(0,import_jsx_runtime67.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime67.jsx)("th",{children:"MON"}),(0,import_jsx_runtime67.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime67.jsx)("th",{children:"WED"}),(0,import_jsx_runtime67.jsx)("th",{children:"THU"}),(0,import_jsx_runtime67.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime67.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime67.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime67.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime67.jsx)("td",{children:day&&(0,import_jsx_runtime67.jsx)(import_core76.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_core77=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime68=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime68.jsx)(import_core77.Container,{className:Container_default.root,...others,children})}var import_core90=require("@mantine/core"),import_notifications5=require("@mantine/notifications"),import_core91=require("@medplum/core");var import_react51=require("react");var import_core83=require("@mantine/core"),import_core84=require("@medplum/core");var import_react48=require("react");var import_core78=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime69=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime69.jsx)(import_core78.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime69.jsx)(import_core78.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_core81=require("@mantine/core");var import_core79=require("@mantine/core"),import_core80=require("@medplum/core");var import_react47=require("react");var import_jsx_runtime70=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react47.useState)(),resource=ce(value,setOutcome),text;if(outcome&&!(0,import_core80.isOk)(outcome))text=`[${(0,import_core80.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core80.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime70.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime70.jsx)(import_core79.Text,{component:"span",...rest,children:text})}var import_jsx_runtime71=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime71.jsxs)(import_core81.Group,{gap:"xs",children:[(0,import_jsx_runtime71.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime71.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core82=require("@mantine/core"),import_jsx_runtime72=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"};function StatusBadge(props){return(0,import_jsx_runtime72.jsx)(import_core82.Badge,{color:statusToColor[props.status],children:props.status})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime73=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=a(),diagnosticReport=ce(props.value),[specimens,setSpecimens]=(0,import_react48.useState)();if((0,import_react48.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_runtime73.jsxs)(import_core83.Stack,{children:[(0,import_jsx_runtime73.jsx)(import_core83.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime73.jsx)(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime73.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime73.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return(0,import_jsx_runtime73.jsxs)(import_core83.Group,{mt:"md",gap:30,children:[value.subject&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime73.jsx)(import_core83.Text,{children:(0,import_core84.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime73.jsx)(import_core83.Text,{children:(0,import_core84.capitalize)(value.status)})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime73.jsxs)(import_core83.Stack,{gap:"xs",children:[(0,import_jsx_runtime73.jsx)(import_core83.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime73.jsx)(import_core83.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime73.jsx)(import_core83.List.Item,{ml:"sm",children:(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:20,children:[(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:5,children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{fw:500,children:"Collected:"})," ",(0,import_core84.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:5,children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{fw:500,children:"Received:"})," ",(0,import_core84.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime73.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime73.jsx)("thead",{children:(0,import_jsx_runtime73.jsxs)("tr",{children:[(0,import_jsx_runtime73.jsx)("th",{children:"Test"}),(0,import_jsx_runtime73.jsx)("th",{children:"Value"}),(0,import_jsx_runtime73.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime73.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime73.jsx)("th",{children:"Category"}),(0,import_jsx_runtime73.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime73.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime73.jsx)("tbody",{children:(0,import_jsx_runtime73.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime73.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core84.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=ce(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment,{children:[(0,import_jsx_runtime73.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime73.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime73.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime73.jsx)("td",{children:(0,import_jsx_runtime73.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime73.jsx)("td",{children:(0,import_jsx_runtime73.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime73.jsx)("div",{children:(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core84.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime73.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime73.jsx)("td",{children:observation.status&&(0,import_jsx_runtime73.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime73.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime73.jsx)("tr",{children:(0,import_jsx_runtime73.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime73.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:(0,import_core84.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:range.text}):(0,import_jsx_runtime73.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_core85=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime74=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{width}:void 0;return(0,import_jsx_runtime74.jsx)(import_core85.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_core86=require("@mantine/core"),import_core87=require("@medplum/core");var import_react49=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime75=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=a(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react49.useState)(!1);(0,import_react49.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react49.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core87.toTypedValue)(original)],typedRevised=[(0,import_core87.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_core87.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core87.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core87.capitalize)(op.op)} ${fhirPath}`,property,originalValue:touchUpValue(property,originalValue),revisedValue:touchUpValue(property,revisedValue)})}return result},[schemaLoaded,original,revised]);return diffTable?(0,import_jsx_runtime75.jsxs)(import_core86.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Thead,{children:(0,import_jsx_runtime75.jsxs)(import_core86.Table.Tr,{children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{children:"Before"}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Tbody,{children:diffTable.map(row=>(0,import_jsx_runtime75.jsxs)(import_core86.Table.Tr,{children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{children:row.name}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{className:ResourceDiffTable_default.removed,children:row.originalValue&&(0,import_jsx_runtime75.jsx)(ResourcePropertyDisplay,{property:row.property,propertyType:row.originalValue.type,value:row.originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{className:ResourceDiffTable_default.added,children:row.revisedValue&&(0,import_jsx_runtime75.jsx)(ResourcePropertyDisplay,{property:row.property,propertyType:row.revisedValue.type,value:row.revisedValue.value,ignoreMissingValues:!0})})]},row.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_core87.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_core87.arrayify)(input).flatMap(v2=>v2.value);return isArray?inputValue:inputValue[0]}var import_react50=require("react");var import_jsx_runtime76=require("react/jsx-runtime");function ResourceTable(props){let medplum=a(),value=ce(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react50.useState)(!1);return(0,import_react50.useEffect)(()=>{value&&medplum.requestSchema(value.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,value]),!schemaLoaded||!value?null:(0,import_jsx_runtime76.jsx)(BackboneElementDisplay,{value:{type:value.resourceType,value:props.forceUseInput?props.value:value},ignoreMissingValues:props.ignoreMissingValues})}var import_core88=require("@mantine/core"),import_core89=require("@medplum/core");var import_jsx_runtime77=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime77.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_runtime77.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime77.jsxs)(import_core88.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime77.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime77.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime77.jsx)(import_core88.Text,{size:"sm",children:(0,import_jsx_runtime77.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime77.jsxs)(import_core88.Text,{size:"xs",children:[(0,import_jsx_runtime77.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core89.formatDateTime)(dateTime)}),(0,import_jsx_runtime77.jsx)(import_core88.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime77.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime77.jsxs)(import_core88.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime77.jsx)(import_core88.Menu.Target,{children:(0,import_jsx_runtime77.jsx)(import_core88.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core89.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime77.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime77.jsxs)(ErrorBoundary,{children:[padding&&(0,import_jsx_runtime77.jsx)("div",{style:{padding:"0 16px 16px 16px"},children:props.children}),!padding&&(0,import_jsx_runtime77.jsx)(import_jsx_runtime77.Fragment,{children:props.children})]})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a2,b2)=>{let priority1=getPriorityScore(a2,timelineResource),priority2=getPriorityScore(b2,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a2,timelineResource)-getTime(b2,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(a2,b2){return!!b2&&a2.resourceType===b2.resourceType&&a2.id===b2.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime78=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=a(),navigate=G(),sender=medplum.getProfile(),inputRef=(0,import_react51.useRef)(null),resource=ce(props.value),[history,setHistory]=(0,import_react51.useState)(),[items,setItems]=(0,import_react51.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react51.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react51.useCallback)(newItmes=>{sortByDateAndPriority(newItmes,resource),newItmes.reverse(),setItems(newItmes)},[resource]),handleBatchResponse=(0,import_react51.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_react51.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react51.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.log)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);(0,import_react51.useEffect)(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.log)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime78.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core91.normalizeErrorString)(reason),icon:(0,import_jsx_runtime78.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function setPriority(communication,priority){return medplum.updateResource({...communication,priority})}function onPin(communication){setPriority(communication,"stat").then(loadTimeline).catch(console.log)}function onUnpin(communication){setPriority(communication,"routine").then(loadTimeline).catch(console.log)}function onDetails(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}`)}function onEdit(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`)}function onDelete(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`)}function onVersionDetails(version){navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`)}function onUploadStart(){(0,import_notifications5.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications5.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core91.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime78.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime78.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime78.jsx)(Panel,{children:(0,import_jsx_runtime78.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime78.jsxs)(import_core90.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime78.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime78.jsx)(import_core90.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime78.jsx)(import_core90.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime78.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime78.jsx)(AttachmentButton,{onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime78.jsx)(import_core90.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime78.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime78.jsx)(HistoryTimelineItem,{history,resource:item,onDetails:onVersionDetails},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime78.jsx)(AuditEventTimelineItem,{resource:item,onDetails},key);case"Communication":return(0,import_jsx_runtime78.jsx)(CommunicationTimelineItem,{resource:item,onPin:item.priority!=="stat"?onPin:void 0,onUnpin:item.priority==="stat"?onUnpin:void 0,onDetails,onEdit,onDelete},key);case"DiagnosticReport":return(0,import_jsx_runtime78.jsx)(DiagnosticReportTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);case"Media":return(0,import_jsx_runtime78.jsx)(MediaTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);default:return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime78.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime78.jsx)(import_core90.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime78.jsx)(import_core90.Loader,{})})}function TimelineItemPopupMenu(props){return(0,import_jsx_runtime78.jsxs)(import_core90.Menu.Dropdown,{children:[(0,import_jsx_runtime78.jsx)(import_core90.Menu.Label,{children:"Resource"}),props.onPin&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconPin,{size:14}),onClick:()=>props.onPin(props.resource),"aria-label":`Pin ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Pin"}),props.onUnpin&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconPinnedOff,{size:14}),onClick:()=>props.onUnpin(props.resource),"aria-label":`Unpin ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Unpin"}),props.onDetails&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconListDetails,{size:14}),onClick:()=>props.onDetails(props.resource),"aria-label":`Details ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Details"}),props.onEdit&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconEdit,{size:14}),onClick:()=>props.onEdit(props.resource),"aria-label":`Edit ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Edit"}),props.onDelete&&(0,import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment,{children:[(0,import_jsx_runtime78.jsx)(import_core90.Menu.Divider,{}),(0,import_jsx_runtime78.jsx)(import_core90.Menu.Label,{children:"Danger zone"}),(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime78.jsx)(IconTrash,{size:14}),onClick:()=>props.onDelete(props.resource),"aria-label":`Delete ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Delete"})]})]})}function HistoryTimelineItem(props){let previous=getPrevious(props.history,props.resource);return previous?(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime78.jsxs)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:[(0,import_jsx_runtime78.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime78.jsx)(ResourceTable,{value:props.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_runtime78.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.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_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(import_core90.ScrollArea,{children:(0,import_jsx_runtime78.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.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_runtime79=require("react/jsx-runtime");function DefaultResourceTimeline(props){return(0,import_jsx_runtime79.jsx)(ResourceTimeline,{value:props.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})])}})}var import_jsx_runtime80=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime80.jsx)(Container,{children:(0,import_jsx_runtime80.jsx)(Panel,{...others,children})})}var import_core92=require("@medplum/core");var import_jsx_runtime81=require("react/jsx-runtime");function EncounterTimeline(props){return(0,import_jsx_runtime81.jsx)(ResourceTimeline,{value:props.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_core92.createReference)(resource),subject:resource.subject,sender:(0,import_core92.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core92.createReference)(resource),subject:resource.subject,operator:(0,import_core92.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core109=require("@mantine/core"),import_core110=require("@medplum/core");var import_react56=require("react");var import_core93=require("@medplum/core");var import_jsx_runtime82=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core93.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_runtime82.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core107=require("@mantine/core"),import_core108=require("@medplum/core");var import_react55=require("react");var import_core94=require("@mantine/core"),import_jsx_runtime83=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime83.jsxs)(import_core94.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime83.jsxs)(import_core94.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime83.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime83.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime83.jsx)(import_core94.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime83.jsx)(import_core94.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core96=require("@mantine/core"),import_core97=require("@medplum/core"),import_react52=require("react");var import_core95=require("@medplum/core");var import_jsx_runtime84=require("react/jsx-runtime"),searchParamToOperators={string:[import_core95.Operator.EQUALS,import_core95.Operator.NOT,import_core95.Operator.CONTAINS,import_core95.Operator.EXACT],fulltext:[import_core95.Operator.EQUALS,import_core95.Operator.NOT,import_core95.Operator.CONTAINS,import_core95.Operator.EXACT],token:[import_core95.Operator.EQUALS,import_core95.Operator.NOT],reference:[import_core95.Operator.EQUALS,import_core95.Operator.NOT],numeric:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS],date:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS,import_core95.Operator.STARTS_AFTER,import_core95.Operator.ENDS_BEFORE,import_core95.Operator.APPROXIMATELY],datetime:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS,import_core95.Operator.STARTS_AFTER,import_core95.Operator.ENDS_BEFORE,import_core95.Operator.APPROXIMATELY]},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",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",identifier:"identifier",iterate:"iterate"};function 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(f2=>f2.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 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_core95.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core95.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_core95.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_core95.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_core95.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?resource.id:key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core95.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_runtime84.jsx)(ResourcePropertyDisplay,{property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core95.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime84.jsx)(import_jsx_runtime84.Fragment,{children:value.map((v2,index)=>(0,import_jsx_runtime84.jsx)(ResourcePropertyDisplay,{propertyType:v2.type,value:v2.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime85=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react52.useRef)(!1),[state,setState]=(0,import_react52.useState)({search:JSON.parse((0,import_core97.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react52.useState)(!1);(0,import_react52.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react52.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core97.getDataType)(resourceType),searchParams=(0,import_core97.getSearchParameters)(resourceType);return getFieldsList(typeSchema,searchParams).sort((a2,b2)=>a2.localeCompare(b2)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);if(!props.visible)return null;function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime85.jsx)(import_core96.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_runtime85.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime85.jsxs)(import_core96.Stack,{children:[(0,import_jsx_runtime85.jsx)(import_core96.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_runtime85.jsx)(import_core96.Group,{justify:"flex-end",children:(0,import_jsx_runtime85.jsx)(import_core96.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_core101=require("@mantine/core"),import_core102=require("@medplum/core"),import_react53=require("react");var import_core98=require("@medplum/core");var import_jsx_runtime86=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core98.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core98.Operator.EQUALS||filter.operator===import_core98.Operator.NOT_EQUALS))return(0,import_jsx_runtime86.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core98.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core98.SearchParameterType.DATETIME)return(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:(0,import_core98.formatDateTime)(filter.value)})}return(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:filter.value})}var import_core99=require("@mantine/core"),import_core100=require("@medplum/core");var import_jsx_runtime87=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core100.getSearchParameterDetails)(props.resourceType,props.searchParam),name="filter-value";switch(details.type){case import_core100.SearchParameterType.REFERENCE:return(0,import_jsx_runtime87.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_core100.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.DATE:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.DATETIME:return(0,import_jsx_runtime87.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core100.SearchParameterType.NUMBER:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.QUANTITY:return(0,import_jsx_runtime87.jsx)(QuantityInput,{name,defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime87.jsx)(import_core99.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_runtime88=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react53.useState)(JSON.parse((0,import_core102.stringify)(props.search))),[editingIndex,setEditingIndex]=(0,import_react53.useState)(-1),searchRef=(0,import_react53.useRef)(search);searchRef.current=search,(0,import_react53.useEffect)(()=>{setSearch(JSON.parse((0,import_core102.stringify)(props.search)))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}if(!props.visible)return null;let resourceType=props.search.resourceType,searchParams=(0,import_core102.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime88.jsxs)(import_core101.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime88.jsx)("div",{children:(0,import_jsx_runtime88.jsxs)("table",{children:[(0,import_jsx_runtime88.jsxs)("colgroup",{children:[(0,import_jsx_runtime88.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:120}})]}),(0,import_jsx_runtime88.jsx)("thead",{children:(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("th",{children:"Field"}),(0,import_jsx_runtime88.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime88.jsx)("th",{children:"Value"}),(0,import_jsx_runtime88.jsx)("th",{children:"Actions"})]})}),(0,import_jsx_runtime88.jsxs)("tbody",{children:[filters.map((filter,index)=>index===editingIndex?(0,import_jsx_runtime88.jsx)(FilterRowInput,{resourceType,searchParams,defaultValue:filter,okText:"Save",onOk:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters)),setEditingIndex(-1)},onCancel:()=>setEditingIndex(-1)},`filter-${filter.code}-${filter.operator}-${filter.value}-input`):(0,import_jsx_runtime88.jsx)(FilterRowDisplay,{resourceType,filter,onEdit:()=>setEditingIndex(index),onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${filter.code}-${filter.operator}-${filter.value}-display`)),(0,import_jsx_runtime88.jsx)(FilterRowInput,{resourceType,searchParams,okText:"Add",onOk:onAddFilter})]})]})}),(0,import_jsx_runtime88.jsx)(import_core101.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime88.jsx)(import_core101.Button,{onClick:()=>props.onOk(searchRef.current),children:"OK"})})]})}function FilterRowDisplay(props){let{filter}=props;return(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("td",{children:buildFieldNameString(filter.code)}),(0,import_jsx_runtime88.jsx)("td",{children:getOpString(filter.operator)}),(0,import_jsx_runtime88.jsx)("td",{children:(0,import_jsx_runtime88.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})}),(0,import_jsx_runtime88.jsxs)("td",{children:[(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onEdit,children:"Edit"}),(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onDelete,children:"Delete"})]})]})}function FilterRowInput(props){let[value,setValue]=(0,import_react53.useState)(props.defaultValue??{}),valueRef=(0,import_react53.useRef)(value);valueRef.current=value;function setFilterCode(newCode){setValue({...valueRef.current,code:newCode})}function setFilterOperator(newOperator){setValue({...valueRef.current,operator:newOperator})}function setFilterValue(newFilterValue){setValue({...valueRef.current,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("td",{children:(0,import_jsx_runtime88.jsx)(import_core101.NativeSelect,{"data-testid":"filter-field",defaultValue:valueRef.current.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime88.jsx)("td",{children:operators&&(0,import_jsx_runtime88.jsx)(import_core101.NativeSelect,{"data-testid":"filter-operation",defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),(0,import_jsx_runtime88.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime88.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),(0,import_jsx_runtime88.jsxs)("td",{children:[value.code&&value.operator&&(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:()=>{props.onOk(valueRef.current),setValue({})},children:props.okText}),props.onCancel&&(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onCancel,children:"Cancel"})]})]})}var import_core103=require("@mantine/core"),import_react54=require("react");var import_jsx_runtime89=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react54.useState)(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime89.jsx)(import_core103.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime89.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime89.jsxs)(import_core103.Grid,{children:[(0,import_jsx_runtime89.jsx)(import_core103.Grid.Col,{span:10,children:(0,import_jsx_runtime89.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime89.jsx)(import_core103.Grid.Col,{span:2,children:(0,import_jsx_runtime89.jsx)(import_core103.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core104=require("@mantine/core"),import_core105=require("@medplum/core");var import_jsx_runtime90=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_runtime90.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime90.jsx)(import_core104.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime90.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime90.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime90.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime90.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime90.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime90.jsxs)(import_jsx_runtime90.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime90.jsxs)(import_jsx_runtime90.Fragment,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.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_core106=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_core106.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core106.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core106.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_core106.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime91=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=a(),[loadingSchema,setLoadingSchema]=(0,import_react55.useState)(),[outcome,setOutcome]=(0,import_react55.useState)(),{search,onLoad}=props,[state,setState]=(0,import_react55.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react55.useRef)(state);stateRef.current=state;let loadResults=(0,import_react55.useCallback)(options=>{setOutcome(void 0),medplum.search(search.resourceType,(0,import_core108.formatSearchQuery)({...search,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(reason)})},[medplum,search,onLoad]),refreshResults=(0,import_react55.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react55.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=e.button===1||e.ctrlKey||e.metaKey;!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((0,import_react55.useEffect)(()=>{setLoadingSchema(props.search.resourceType),medplum.requestSchema(props.search.resourceType).catch(console.error).finally(()=>setLoadingSchema(void 0))},[medplum,props.search.resourceType]),!(0,import_core108.isDataTypeLoaded)(props.search.resourceType)||loadingSchema===props.search.resourceType)return(0,import_jsx_runtime91.jsx)(import_core107.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime91.jsx)(import_core107.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(search),resourceType=search.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_runtime91.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime91.jsxs)(import_core107.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime91.jsxs)(import_core107.Group,{gap:2,children:[(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime91.jsxs)(import_core107.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime91.jsxs)(import_core107.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(search,lastResult).toLocaleString(),"-",getEnd(search,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${search.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime91.jsx)(import_core107.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime91.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime91.jsxs)(import_core107.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime91.jsxs)(import_core107.Table.Thead,{children:[(0,import_jsx_runtime91.jsxs)(import_core107.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{children:(0,import_jsx_runtime91.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_runtime91.jsx)(import_core107.Table.Th,{children:(0,import_jsx_runtime91.jsxs)(import_core107.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime91.jsx)(import_core107.Menu.Target,{children:(0,import_jsx_runtime91.jsx)(import_core107.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime91.jsxs)(import_core107.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime91.jsx)(import_core107.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime91.jsx)(import_core107.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime91.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime91.jsx)(SearchPopupMenu,{search:props.search,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime91.jsxs)(import_core107.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime91.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:props.search.filters})},field.name))]})]}),(0,import_jsx_runtime91.jsx)(import_core107.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime91.jsxs)(import_core107.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_runtime91.jsx)(import_core107.Table.Td,{children:(0,import_jsx_runtime91.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_runtime91.jsx)(import_core107.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),resources?.length===0&&(0,import_jsx_runtime91.jsx)(Container,{children:(0,import_jsx_runtime91.jsx)(import_core107.Center,{style:{height:150},children:(0,import_jsx_runtime91.jsx)(import_core107.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime91.jsx)(import_core107.Center,{m:"md",p:"md",children:(0,import_jsx_runtime91.jsx)(import_core107.Pagination,{value:getPage(search),total:getTotalPages(search,lastResult),onChange:newPage=>emitSearchChange(setPage(search,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),outcome&&(0,import_jsx_runtime91.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime91.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),(0,import_jsx_runtime91.jsx)(SearchFieldEditor,{search:props.search,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),(0,import_jsx_runtime91.jsx)(SearchFilterEditor,{search:props.search,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),(0,import_jsx_runtime91.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),(0,import_jsx_runtime91.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(props.search,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},state.filterDialogSearchParam?.code)]})}var MemoizedSearchControl=(0,import_react55.memo)(SearchControl);function FilterDescription(props){let filters=(props.filters??[]).filter(f2=>props.searchParams.find(p=>p.code===f2.code));return filters.length===0?(0,import_jsx_runtime91.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime91.jsx)(import_jsx_runtime91.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime91.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime91.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_core108.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core108.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 getStart(search,lastResult)+(lastResult.entry?.length??0)-1}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_runtime92=require("react/jsx-runtime");function FhirPathTable(props){let medplum=a(),[schemaLoaded,setSchemaLoaded]=(0,import_react56.useState)(!1),[outcome,setOutcome]=(0,import_react56.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react56.useState)(),[selected,setSelected]=(0,import_react56.useState)({}),responseRef=(0,import_react56.useRef)();responseRef.current=response;let selectedRef=(0,import_react56.useRef)({});selectedRef.current=selected,(0,import_react56.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core110.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_react56.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime92.jsx)(import_core109.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime92.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime92.jsxs)(import_core109.Table,{children:[(0,import_jsx_runtime92.jsx)(import_core109.Table.Thead,{children:(0,import_jsx_runtime92.jsxs)(import_core109.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime92.jsx)(import_core109.Table.Th,{children:(0,import_jsx_runtime92.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_runtime92.jsx)(import_core109.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime92.jsx)(import_core109.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime92.jsxs)(import_core109.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime92.jsx)(import_core109.Table.Td,{children:(0,import_jsx_runtime92.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_runtime92.jsx)(import_core109.Table.Td,{children:(0,import_jsx_runtime92.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime92.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime92.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime92.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime92.jsx)(import_core109.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react56.memo)(FhirPathTable);var import_jsx_runtime93=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime93.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_runtime93.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime93.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_runtime93.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_runtime93.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_runtime93.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_runtime93.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}var import_core113=require("@mantine/core");var import_core111=require("@mantine/core"),import_core112=require("@medplum/core");var import_jsx_runtime94=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime94.jsx)(import_core111.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime94.jsxs)(import_core111.Group,{children:[group.measureScore&&(0,import_jsx_runtime94.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime94.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime94.jsx)(import_core111.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_core112.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core112.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime94.jsxs)(import_core111.Box,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime94.jsxs)(import_core111.Box,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime94.jsx)(import_core111.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime94.jsx)(import_core111.Flex,{justify:"center",children:(0,import_jsx_runtime94.jsxs)(import_core111.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_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:unit==="%"?(0,import_jsx_runtime94.jsx)(import_core111.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime94.jsx)(import_core111.Flex,{justify:"center",children:(0,import_jsx_runtime94.jsx)(import_core111.Text,{fw:700,fz:18,children:(0,import_jsx_runtime94.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime94.jsx)(import_core111.Flex,{h:120,align:"center",children:(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:(0,import_jsx_runtime94.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_runtime95=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=ce(props.measureReport),[measure]=xe("Measure",{url:report?.measure});return report?(0,import_jsx_runtime95.jsxs)(import_core113.Box,{children:[measure&&(0,import_jsx_runtime95.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime95.jsx)(import_core113.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime95.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core114=require("@mantine/core");var import_react57=require("react"),import_jsx_runtime96=require("react/jsx-runtime");function NotificationIcon(props){let medplum=a(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react57.useState)(0),updateCount=(0,import_react57.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react57.useEffect)(()=>{updateCount("default")},[updateCount]),Ce(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime96.jsx)(import_core114.Tooltip,{label,children:(0,import_jsx_runtime96.jsx)(import_core114.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime96.jsx)(import_core114.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core115=require("@mantine/core"),import_core116=require("@medplum/core");var import_jsx_runtime97=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime97.jsx)(import_core115.Alert,{icon:(0,import_jsx_runtime97.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime97.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core116.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core127=require("@mantine/core"),import_core128=require("@medplum/core");var import_react63=require("react");var import_core117=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_core118=require("@medplum/core");var import_react58=require("react");var import_jsx_runtime98=require("react/jsx-runtime");function Allergies(props){let medplum=a(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react58.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks2.useDisclosure)(!1),[code,setCode]=(0,import_react58.useState)(),handleSubmit=(0,import_react58.useCallback)(formData=>{medplum.createResource({resourceType:"AllergyIntolerance",patient:(0,import_core118.createReference)(patient),encounter:encounter?(0,import_core118.createReference)(encounter):void 0,code,onsetDateTime:formData.onset?formData.onset:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0}).then(newAllergy=>{setAllergies([...allergies,newAllergy]),close()}).catch(console.error)},[medplum,patient,encounter,allergies,close,code]);return(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsxs)(import_core117.Group,{justify:"space-between",children:[(0,import_jsx_runtime98.jsx)(import_core117.Text,{fz:"md",fw:700,children:"Allergies"}),(0,import_jsx_runtime98.jsx)(import_core117.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),allergies.length>0?(0,import_jsx_runtime98.jsx)(import_core117.Box,{children:allergies.map(allergy=>(0,import_jsx_runtime98.jsx)(import_core117.Badge,{variant:"light",maw:"100%",children:(0,import_jsx_runtime98.jsx)(CodeableConceptDisplay,{value:allergy.code})},allergy.id))}):(0,import_jsx_runtime98.jsx)(import_core117.Text,{children:"(none)"}),(0,import_jsx_runtime98.jsx)(import_core117.Modal,{opened,onClose:close,title:"Add Allergy",children:(0,import_jsx_runtime98.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime98.jsxs)(import_core117.Stack,{children:[(0,import_jsx_runtime98.jsx)(CodeableConceptInput,{name:"allergy",path:"AllergyIntolerance.code","data-autofocus":!0,binding:"http://hl7.org/fhir/us/core/ValueSet/us-core-allergy-substance",onChange:allergy=>setCode(allergy),outcome:void 0}),(0,import_jsx_runtime98.jsx)(import_core117.TextInput,{name:"reaction",label:"Reaction"}),(0,import_jsx_runtime98.jsx)(import_core117.NativeSelect,{name:"status",label:"Status",data:["active"]}),(0,import_jsx_runtime98.jsx)(import_core117.TextInput,{name:"onset",label:"Onset",type:"date"}),(0,import_jsx_runtime98.jsx)(import_core117.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime98.jsx)(import_core117.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core119=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core120=require("@medplum/core");var import_react59=require("react");var import_jsx_runtime99=require("react/jsx-runtime");function Medications(props){let medplum=a(),[medicationRequests,setMedicationRequests]=(0,import_react59.useState)(props.medicationRequests),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),[code,setCode]=(0,import_react59.useState)(),handleSubmit=(0,import_react59.useCallback)(formData=>{let status=formData.status;medplum.createResource({resourceType:"MedicationRequest",status,intent:"order",encounter:props.encounter?(0,import_core120.createReference)(props.encounter):void 0,medicationCodeableConcept:code,subject:(0,import_core120.createReference)(props.patient)}).then(newRequest=>{setMedicationRequests([newRequest,...medicationRequests]),close()}).catch(console.error)},[medplum,props.patient,props.encounter,medicationRequests,close,code]);return(0,import_jsx_runtime99.jsxs)(import_jsx_runtime99.Fragment,{children:[(0,import_jsx_runtime99.jsxs)(import_core119.Group,{justify:"space-between",children:[(0,import_jsx_runtime99.jsx)(import_core119.Text,{fz:"md",fw:700,children:"Medications"}),(0,import_jsx_runtime99.jsx)(import_core119.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),medicationRequests.length>0?(0,import_jsx_runtime99.jsx)(import_core119.Box,{children:medicationRequests.map(request=>(0,import_jsx_runtime99.jsx)(import_core119.Badge,{mt:4,variant:"light",maw:"50%",color:request.status==="active"?"blue":"gray",children:(0,import_jsx_runtime99.jsx)(CodeableConceptDisplay,{value:request.medicationCodeableConcept})},request.id))}):(0,import_jsx_runtime99.jsx)(import_core119.Text,{children:"(none)"}),(0,import_jsx_runtime99.jsx)(import_core119.Modal,{opened,onClose:close,title:"Add Medication Request",children:(0,import_jsx_runtime99.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime99.jsxs)(import_core119.Stack,{h:275,children:[(0,import_jsx_runtime99.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:"https://app.medplum.com/ValueSet/16d6f7b7-7eeb-4d0e-a83b-83be082aa10b",onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime99.jsxs)(import_core119.Radio.Group,{mt:32,name:"status",label:"Request Status",required:!0,children:[(0,import_jsx_runtime99.jsx)(import_core119.Radio,{value:"active",label:"active",my:"xs"},"active"),(0,import_jsx_runtime99.jsx)(import_core119.Radio,{value:"stopped",label:"stopped",my:"xs"},"stopped")]}),(0,import_jsx_runtime99.jsx)(import_core119.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime99.jsx)(import_core119.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core121=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_core122=require("@medplum/core");var import_react60=require("react");var import_jsx_runtime100=require("react/jsx-runtime");function ProblemList(props){let medplum=a(),{patient,encounter}=props,[problems,setProblems]=(0,import_react60.useState)(props.problems),[opened,{open,close}]=(0,import_hooks4.useDisclosure)(!1),handleSubmit=(0,import_react60.useCallback)(formData=>{medplum.createResource({resourceType:"Condition",subject:(0,import_core122.createReference)(patient),encounter:encounter?(0,import_core122.createReference)(encounter):void 0,code:{coding:[{code:formData.problem,display:formData.problem}]},onsetDateTime:formData.onset?formData.onset:void 0}).then(newProblem=>{setProblems([...problems,newProblem]),close()}).catch(console.error)},[medplum,patient,encounter,problems,close]);return(0,import_jsx_runtime100.jsxs)(import_jsx_runtime100.Fragment,{children:[(0,import_jsx_runtime100.jsxs)(import_core121.Group,{justify:"space-between",children:[(0,import_jsx_runtime100.jsx)(import_core121.Text,{fz:"md",fw:700,children:"Problem List"}),(0,import_jsx_runtime100.jsx)(import_core121.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),problems.length>0?(0,import_jsx_runtime100.jsx)(import_core121.Grid,{gutter:"xs",children:problems.map(problem=>(0,import_jsx_runtime100.jsxs)(import_react60.Fragment,{children:[(0,import_jsx_runtime100.jsx)(import_core121.Grid.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),(0,import_jsx_runtime100.jsx)(import_core121.Grid.Col,{span:10,children:(0,import_jsx_runtime100.jsx)(import_core121.Badge,{variant:"light",maw:"100%",children:(0,import_jsx_runtime100.jsx)(CodeableConceptDisplay,{value:problem.code})},problem.id)})]},problem.id))}):(0,import_jsx_runtime100.jsx)(import_core121.Text,{children:"(none)"}),(0,import_jsx_runtime100.jsx)(import_core121.Modal,{opened,onClose:close,title:"Add Problem",children:(0,import_jsx_runtime100.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime100.jsxs)(import_core121.Stack,{children:[(0,import_jsx_runtime100.jsx)(import_core121.TextInput,{name:"problem",label:"Problem","data-autofocus":!0,autoFocus:!0,required:!0}),(0,import_jsx_runtime100.jsx)(import_core121.TextInput,{name:"onset",label:"Dx Date",type:"date",required:!0}),(0,import_jsx_runtime100.jsx)(import_core121.NativeSelect,{name:"status",label:"Status",data:["active"]}),(0,import_jsx_runtime100.jsx)(import_core121.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime100.jsx)(import_core121.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime100.jsx)(import_core121.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core123=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core124=require("@medplum/core");var import_react61=require("react");var import_jsx_runtime101=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=a(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=(0,import_react61.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react61.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core124.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_core124.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core124.createReference)(patient),encounter:encounter?(0,import_core124.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core124.SNOMED,version:import_core124.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment,{children:[(0,import_jsx_runtime101.jsxs)(import_core123.Group,{justify:"space-between",children:[(0,import_jsx_runtime101.jsx)(import_core123.Text,{fz:"md",fw:700,children:"Smoking Status"}),(0,import_jsx_runtime101.jsx)(import_core123.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime101.jsx)(import_core123.Box,{children:(0,import_jsx_runtime101.jsx)(import_core123.Badge,{variant:"light",children:(0,import_jsx_runtime101.jsx)(CodeableConceptDisplay,{value:smokingStatus.valueCodeableConcept})})}):(0,import_jsx_runtime101.jsx)(import_core123.Text,{children:"(none)"}),(0,import_jsx_runtime101.jsx)(import_core123.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime101.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime101.jsxs)(import_core123.Stack,{children:[(0,import_jsx_runtime101.jsx)(import_core123.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime101.jsx)(import_core123.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime101.jsx)(import_core123.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime101.jsx)(import_core123.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core126=require("@mantine/core"),import_hooks6=require("@mantine/hooks");var import_react62=require("react");var import_core125=require("@medplum/core");function getObservationValue(observations,code){return observations.find(o=>o.code?.coding?.[0].code===code)?.valueQuantity}function getCompoundObservationValue(observations,code,innerCode){return observations.find(o=>o.code?.coding?.[0].code===code)?.component?.find(c=>c.code?.coding?.[0].code===innerCode)?.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_core125.createReference)(patient),encounter:encounter?(0,import_core125.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_core125.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core125.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime102=require("react/jsx-runtime"),LOINC_CODES={bloodPressure:{code:"85354-9",title:"Blood Pressure",unit:"mm[Hg]"},heartRate:{code:"8867-4",title:"Heart Rate",unit:"/min"},bodyTemperature:{code:"8310-5",title:"Body Temperature",unit:"Cel"},respiratoryRate:{code:"9279-1",title:"Respiratory Rate",unit:"/min"},height:{code:"8302-2",title:"height",unit:"cm"},weight:{code:"29463-7",title:"weight",unit:"kg"},bmi:{code:"39156-5",title:"BMI",unit:"kg/m2"},oxygen:{code:"2708-6",title:"Oxygen",unit:"%"},headCircumference:{code:"9843-4",title:"Head Circumference",unit:"cm"}},SYSTOLIC="8480-6",DIASTOLIC="8462-4";function Vitals(props){let medplum=a(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react62.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react62.useCallback)(formData=>{let newObservations=Object.entries(LOINC_CODES).map(([name,meta])=>name==="bloodPressure"?createCompoundObservation(patient,encounter,meta.code,meta.title,[{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]")}]):createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[name]),meta.unit))).filter(Boolean);Promise.all(newObservations.map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[(0,import_jsx_runtime102.jsxs)(import_core126.Group,{justify:"space-between",children:[(0,import_jsx_runtime102.jsx)(import_core126.Text,{fz:"md",fw:700,children:"Vitals"}),(0,import_jsx_runtime102.jsx)(import_core126.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Grid,{children:[(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,SYSTOLIC)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,DIASTOLIC)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.heartRate.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bodyTemperature.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.respiratoryRate.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.height.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.weight.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bmi.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.oxygen.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.headCircumference.code)})})]}),(0,import_jsx_runtime102.jsx)(import_core126.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime102.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime102.jsxs)(import_core126.Stack,{children:[(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"diastolic",label:"BP Dias"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"heartRate",label:"HR"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"bodyTemperature",label:"Temp"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"respiratoryRate",label:"RR"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"height",label:"height"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"weight",label:"Wt"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"bmi",label:"BMI"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"oxygen",label:"O2"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"headCircumference",label:"HC"})]}),(0,import_jsx_runtime102.jsx)(import_core126.Textarea,{name:"notes",label:"Notes"})]}),(0,import_jsx_runtime102.jsx)(import_core126.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime102.jsx)(import_core126.Button,{type:"submit",children:"Save"})})]})})]})}var import_jsx_runtime103=require("react/jsx-runtime");function PatientSummary(props){let medplum=a(),{patient:propsPatient,background,...rest}=props,[patient,setPatient]=(0,import_react63.useState)(),[allergies,setAllergies]=(0,import_react63.useState)(),[problems,setProblems]=(0,import_react63.useState)(),[smokingStatus,setSmokingStatus]=(0,import_react63.useState)(),[vitals,setVitals]=(0,import_react63.useState)(),[medicationRequest,setMedicationRequest]=(0,import_react63.useState)();return(0,import_react63.useEffect)(()=>{let id=(0,import_core128.resolveId)(propsPatient),ref=`Patient/${id}`,searchMeta={_count:100,_sort:"-_lastUpdated"};Promise.all([medplum.readResource("Patient",id),medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta})]).then(results=>{setPatient(results[0]),setAllergies(results[1]),setProblems(results[2]),setMedicationRequest(results[3]);let observations=results[4];setSmokingStatus(observations.find(obs=>obs.code?.coding?.[0].code==="72166-2")),setVitals(observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"))}).catch(console.error)},[medplum,propsPatient]),patient?(0,import_jsx_runtime103.jsxs)(import_core127.Card,{...rest,children:[(0,import_jsx_runtime103.jsx)(import_core127.Card.Section,{h:100,style:{background}}),(0,import_jsx_runtime103.jsx)(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{ta:"center",fz:"lg",fw:500,children:(0,import_core128.formatHumanName)(patient.name?.[0])}),(0,import_jsx_runtime103.jsxs)(import_core127.Text,{ta:"center",fz:"xs",color:"dimmed",children:[patient.birthDate," (",(0,import_core128.calculateAgeString)(patient.birthDate),")"]}),(0,import_jsx_runtime103.jsx)(import_core127.Paper,{withBorder:!0,p:"md",my:"md",children:(0,import_jsx_runtime103.jsxs)(import_core127.Group,{grow:!0,children:[(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,maw:"33%",children:[(0,import_jsx_runtime103.jsx)(IconUserSquare,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime103.jsx)(IconStethoscope,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime103.jsx)(IconGenderFemale,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),(0,import_jsx_runtime103.jsxs)(import_core127.Stack,{gap:"xs",children:[(0,import_jsx_runtime103.jsx)(import_core127.Anchor,{href:"#",children:"No upcoming appointments"}),(0,import_jsx_runtime103.jsx)(import_core127.Anchor,{href:"#",children:"No documented visits"}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Allergies,{patient,allergies}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(ProblemList,{patient,problems}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Medications,{patient,medicationRequests:medicationRequest}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(SmokingStatus,{patient,smokingStatus}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Vitals,{patient,vitals})]})]}):null}var import_core129=require("@medplum/core"),import_react64=require("react");var import_jsx_runtime104=require("react/jsx-runtime");function PatientTimeline(props){let loadTimelineResources=(0,import_react64.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_runtime104.jsx)(ResourceTimeline,{value:props.patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core129.createReference)(resource),sender:(0,import_core129.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core129.createReference)(resource),operator:(0,import_core129.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core130=require("@mantine/core"),import_core131=require("@medplum/core");var import_react65=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing",bottomActions:"PlanDefinitionBuilder_bottomActions"};var import_jsx_runtime105=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=a(),defaultValue2=ce(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react65.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react65.useState)(),[hoverKey,setHoverKey]=(0,import_react65.useState)(),[value,setValue]=(0,import_react65.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react65.useRef)();if(valueRef.current=value,(0,import_react65.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react65.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_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{label:"Plan Title",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x2=>changeProperty("action",x2)}),(0,import_jsx_runtime105.jsx)(import_core130.Button,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react65.useRef)();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_runtime105.jsxs)("div",{className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.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_runtime105.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime105.jsx)(import_core130.Anchor,{href:"#",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.editing]:editing,[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime105.jsxs)("div",{"data-testid":action.id,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[editing?(0,import_jsx_runtime105.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove}):(0,import_jsx_runtime105.jsx)(ActionDisplay,{action,actionType}),(0,import_jsx_runtime105.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime105.jsx)(import_core130.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove()},children:"Remove"})})]})}var timingProperty={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(t=>({code:t}))};function ActionDisplay(props){let{action,actionType}=props,[propertyValue,propertyType]=getActionTiming(action);return(0,import_jsx_runtime105.jsxs)("div",{children:[(0,import_jsx_runtime105.jsxs)("div",{children:[action.title||"Untitled"," ",actionType&&`(${actionType})`]}),action.definitionCanonical&&(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsx)(ReferenceDisplay,{value:{reference:action.definitionCanonical}})}),propertyValue&&(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsx)(ResourcePropertyDisplay,{property:timingProperty,propertyType,value:propertyValue})})]})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react65.useState)(props.actionType);function changeProperty(property,value){props.onChange({...action,[property]:value})}return(0,import_jsx_runtime105.jsxs)(import_core130.Stack,{gap:"xl",children:[(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{name:`actionTitle-${action.id}`,label:"Title",defaultValue:action.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{name:`actionDescription-${action.id}`,label:"Description",defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(import_core130.NativeSelect,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${action.id}`,defaultValue:actionType,onChange:e=>setActionType(e.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),action.action&&action.action.length>0&&(0,import_jsx_runtime105.jsx)(ActionArrayBuilder,{actions:action.action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:x2=>changeProperty("action",x2)}),(()=>{switch(actionType){case"appointment":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action,onChange:props.onChange});case"lab":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action,onChange:props.onChange});case"questionnaire":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action,onChange:props.onChange});case"task":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action,onChange:props.onChange});default:return null}})(),(0,import_jsx_runtime105.jsx)(FormSection,{title:"Timing",description:"When the action should take place.",children:(0,import_jsx_runtime105.jsx)(ActionTimingInput,{name:"timing-"+action.id,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_runtime105.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core131.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function ActionTimingInput(props){let value=props.action,key="timing",[propertyValue,propertyType]=getActionTiming(value);return(0,import_jsx_runtime105.jsx)(ResourcePropertyInput,{property:timingProperty,name:"timing[x]",path:"PlanDefinition.timing[x]",defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{props.onChange(setPropertyValue(value,key,propName??key,timingProperty,newValue))},outcome:void 0})}function getInitialActionType(action){if(action.definitionCanonical?.startsWith("Schedule"))return"appointment";if(action.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(action.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function getActionTiming(action){return getValueAndType({type:"PlanDefinitionAction",value:action},"timing")}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_core135=require("@mantine/core"),import_core136=require("@medplum/core");var import_react68=require("react");var import_core133=require("@mantine/core"),import_core134=require("@medplum/core"),import_react67=require("react");var import_core132=require("@medplum/core"),QuestionnaireItemType=(QuestionnaireItemType2=>(QuestionnaireItemType2.group="group",QuestionnaireItemType2.display="display",QuestionnaireItemType2.question="question",QuestionnaireItemType2.boolean="boolean",QuestionnaireItemType2.decimal="decimal",QuestionnaireItemType2.integer="integer",QuestionnaireItemType2.date="date",QuestionnaireItemType2.dateTime="dateTime",QuestionnaireItemType2.time="time",QuestionnaireItemType2.string="string",QuestionnaireItemType2.text="text",QuestionnaireItemType2.url="url",QuestionnaireItemType2.choice="choice",QuestionnaireItemType2.openChoice="open-choice",QuestionnaireItemType2.attachment="attachment",QuestionnaireItemType2.reference="reference",QuestionnaireItemType2.quantity="quantity",QuestionnaireItemType2))(QuestionnaireItemType||{});function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,responseItems){if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(responseItems,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 getNewMultiSelectValues(selected,propertyName,item){return selected.map(o=>{let option=item.answerOption?.find(option2=>(0,import_core132.formatCoding)(option2.valueCoding)===o||option2[propertyName]===o),optionValue=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");return{[propertyName]:optionValue?.value}})}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_core132.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer[x]"),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireResponseItemAnswer",value:actualAnswerValue},"value[x]"),{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_core132.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_core132.deepClone)(item),extension=(0,import_core132.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_core132.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_core132.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:(0,import_core132.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item),status:"in-progress"}}function buildInitialResponseItems(items){return items?.map(buildInitialResponseItem)??[]}function buildInitialResponseItem(item){return{id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item),answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function formatReferenceString(typedValue){return typedValue.value.display||typedValue.value.reference||(0,import_core132.stringify)(typedValue.value)}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core132.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}var import_react66=require("react"),QuestionnaireFormContext=(0,import_react66.createContext)({});var import_jsx_runtime106=require("react/jsx-runtime");function QuestionnaireFormItem(props){let context=(0,import_react67.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((a2,idx)=>idx===props.index?newResponseAnswer:a2)??[],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)??(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value");switch(type){case"display":return(0,import_jsx_runtime106.jsx)("p",{children:props.item.text},props.item.linkId);case"boolean":return(0,import_jsx_runtime106.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime106.jsx)(import_core133.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);case"decimal":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"number",step:"any",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"number",step:1,id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"date",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return(0,import_jsx_runtime106.jsx)(DateTimeInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"time",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return(0,import_jsx_runtime106.jsx)(import_core133.Textarea,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return(0,import_jsx_runtime106.jsx)(import_core133.Group,{py:4,children:(0,import_jsx_runtime106.jsx)(AttachmentInput,{name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return(0,import_jsx_runtime106.jsx)(ReferenceInput,{name,required:item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});case"quantity":return(0,import_jsx_runtime106.jsx)(QuantityInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});case"choice":case"open-choice":return isDropDownChoice(item)&&!item.answerValueSet?(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceSetInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});default:return null}}function QuestionnaireChoiceDropDownInput(props){let{name,item,initial,response}=props;if(!item.answerOption?.length)return(0,import_jsx_runtime106.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),data2=[""];for(let option of item.answerOption){let optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");data2.push(typedValueToString(optionValue))}let defaultValue2=getCurrentAnswer(response)??initialValue;if(item.repeats){let{propertyName,data:data3}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime106.jsx)(import_core133.MultiSelect,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[typedValueToString(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return(0,import_jsx_runtime106.jsx)(import_core133.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core134.capitalize)(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core134.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?(0,import_jsx_runtime106.jsx)(NoAnswerDisplay,{}):item.answerValueSet?(0,import_jsx_runtime106.jsx)(CodingInput,{name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code})}):(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core134.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),options=[],defaultValue2;if(item.answerOption)for(let i=0;i<item.answerOption.length;i++){let option=item.answerOption[i],optionName=`${name}-option-${i}`,optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");optionValue?.value&&(initialValue&&(0,import_core134.stringify)(optionValue)===(0,import_core134.stringify)(initialValue)&&(defaultValue2=optionName),options.push([optionName,optionValue]))}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);return(0,import_jsx_runtime106.jsx)(import_core133.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_core134.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>(0,import_jsx_runtime106.jsx)(import_core133.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime106.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getItemValue(answer){return(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswer",value:answer},"value")}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a2=>getItemValue(a2)).map(type=>(0,import_core134.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core134.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function typedValueToString(typedValue){if(typedValue)return typedValue.type==="CodeableConcept"?(0,import_core134.formatCodeableConcept)(typedValue.value):typedValue.type==="Coding"?(0,import_core134.formatCoding)(typedValue.value):typedValue.type==="Reference"?formatReferenceString(typedValue):typedValue.value.toString()}function isDropDownChoice(item){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core134.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(a2=>({value:getValueAndLabel(a2,propertyName),label:getValueAndLabel(a2,propertyName)}));return{propertyName,data:data2}}function getValueAndLabel(option,propertyName){return(0,import_core134.formatCoding)(option.valueCoding)||option[propertyName]?.toString()}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"};var import_jsx_runtime107=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=a(),defaultValue2=ce(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react68.useState)(!1),[value,setValue]=(0,import_react68.useState)(),[selectedKey,setSelectedKey]=(0,import_react68.useState)(),[hoverKey,setHoverKey]=(0,import_react68.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react68.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react68.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_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime107.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime107.jsx)(import_core135.Button,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core136.isResource)(props.item),isContainer=isResource2||item.type==="group",linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react68.useRef)();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_runtime107.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime107.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime107.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime107.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[resource.title&&(0,import_jsx_runtime107.jsx)(import_core135.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime107.jsx)("div",{children:item.text}),!isContainer&&(0,import_jsx_runtime107.jsx)(QuestionnaireFormItem,{item,index:0,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.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_runtime107.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime107.jsx)(import_core135.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_runtime107.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime107.jsxs)(import_core135.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime107.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime107.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime107.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core136.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime107.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime107.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime107.jsxs)(import_core135.Box,{display:"flex",children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime107.jsx)(import_core135.Space,{w:"lg"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime107.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime107.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.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_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.jsx)(import_core135.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_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime107.jsxs)(import_core135.Group,{children:[(0,import_jsx_runtime107.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_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime107.jsx)(import_core135.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_core140=require("@mantine/core"),import_core141=require("@medplum/core");var import_react71=require("react");var import_core139=require("@mantine/core");var import_core137=require("@mantine/core"),import_react69=require("react");var import_jsx_runtime108=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react69.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return(0,import_jsx_runtime108.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!=="choice"&&item.type!=="open-choice";return item.type==="boolean"?(0,import_jsx_runtime108.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime108.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_2,index)=>(0,import_jsx_runtime108.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime108.jsx)(import_core137.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type==="choice"||item.type==="open-choice")return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core138=require("@mantine/core"),import_react70=require("react");var import_jsx_runtime109=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react70.useState)(props.response);if(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);setResponses([...responses,newResponse])}return(0,import_jsx_runtime109.jsxs)(import_jsx_runtime109.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime109.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime109.jsx)(import_core138.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_runtime109.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime109.jsx)(import_core138.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime109.jsx)(import_core138.Stack,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?(0,import_jsx_runtime109.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime109.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime109.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime110=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type==="group"?(0,import_jsx_runtime110.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime110.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime110.jsx)(import_core139.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[renderPages&&(0,import_jsx_runtime110.jsx)(import_core139.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime110.jsx)(import_core139.Stack,{children:form}),(0,import_jsx_runtime110.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep,prevStep,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.activePage>0,showNextButton=props.activePage<props.numberOfPages-1,showSubmitButton=props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime110.jsxs)(import_core139.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{type:"submit",children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime111=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=a(),source=medplum.getProfile(),[schemaLoaded,setSchemaLoaded]=(0,import_react71.useState)(!1),questionnaire=ce(props.questionnaire),[response,setResponse]=(0,import_react71.useState)(),[activePage,setActivePage]=(0,import_react71.useState)(0);(0,import_react71.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>medplum.requestSchema("QuestionnaireResponse")).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react71.useEffect)(()=>{setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)},[questionnaire]);function setItems(newResponseItems){let currentItems=response?.item??[],newResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems])};setResponse(newResponse)}function checkForQuestionEnabled(item){return isQuestionEnabled(item,response?.item??[])}if(!schemaLoaded||!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime111.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime111.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>{props.onSubmit&&response&&props.onSubmit({...response,questionnaire:(0,import_core141.getReferenceString)(questionnaire),subject:props.subject,source:(0,import_core141.createReference)(source),authored:new Date().toISOString(),status:"completed"})},children:[questionnaire.title&&(0,import_jsx_runtime111.jsx)(import_core140.Title,{children:questionnaire.title}),(0,import_jsx_runtime111.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:numberOfPages>1,activePage,numberOfPages,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}var import_core142=require("@mantine/core"),import_core143=require("@medplum/core");var import_react72=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime112=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_react72.useState)([]),[groupId,setGroupId]=(0,import_react72.useState)(1),[intervalId,setIntervalId]=(0,import_react72.useState)(1);return(0,import_react72.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime112.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime112.jsx)(import_core142.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime112.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime112.jsx)(import_core142.Group,{justify:"flex-end",children:(0,import_jsx_runtime112.jsx)(import_core142.Button,{type:"submit",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(g2=>g2.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(g2=>g2.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(g2=>g2.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_runtime112.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime112.jsxs)(import_core142.Stack,{gap:"lg",children:[(0,import_jsx_runtime112.jsx)(import_core142.Group,{justify:"flex-end",children:(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime112.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime112.jsx)(import_core142.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime112.jsxs)(import_core142.Stack,{gap:"xs",children:[(0,import_jsx_runtime112.jsxs)(import_core142.Group,{children:[(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime112.jsx)(RangeInput,{onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.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_runtime112.jsxs)(import_core142.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime112.jsx)(import_core142.Group,{children:(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsxs)(import_core142.Group,{gap:"xs",children:[(0,import_jsx_runtime112.jsx)(import_core142.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime112.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime112.jsx)(RangeInput,{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_runtime112.jsx)(import_core142.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_runtime112.jsx)(import_core142.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(f2=>[f2,interval[f2]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core143.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core143.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_core143.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_core144=require("@mantine/core"),import_core145=require("@medplum/core");var import_react73=require("react");var import_jsx_runtime113=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=a(),requestGroup=ce(props.value),[startedLoading,setStartedLoading]=(0,import_react73.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react73.useState)();if((0,import_react73.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_runtime113.jsx)(import_core144.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_runtime113.jsxs)(import_react73.Fragment,{children:[(0,import_jsx_runtime113.jsx)(import_core144.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime113.jsx)(IconCheckbox,{}):(0,import_jsx_runtime113.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime113.jsxs)(import_core144.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime113.jsx)(import_core144.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime113.jsx)("div",{children:action.description}),(0,import_jsx_runtime113.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime113.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core145.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime113.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime113.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime113.jsxs)(import_core144.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime113.jsx)(import_core144.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime113.jsx)(import_core144.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_core145.getReferenceString)(entry.resource))return entry.resource}}var import_react74=require("react");var import_core146=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N2=orig.length,M=rev.length,MAX=N2+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 k2=-d;k2<=d;k2+=2){let kmiddle=middle+k2,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k2===-d||k2!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j2=i-k2,node={i,j:j2,prev:previousSnake(prev),snake:!1};for(;i<N2&&j2<M&&orig[i]===rev[j2];)i++,j2++;if(i>node.i&&(node={i,j:j2,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N2&&j2>=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,j2=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,j2)},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_core146.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a2,b2)=>a2.meta.lastUpdated.localeCompare(b2.meta.lastUpdated)),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 k2=0;k2<revision.revised.lines.length;k2++)table.splice(position+k2,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k2],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_runtime114=require("react/jsx-runtime");function ResourceBlame(props){let medplum=a(),[value,setValue]=(0,import_react74.useState)(props.history);if((0,import_react74.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_runtime114.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime114.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime114.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime114.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime114.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime114.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime114.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime114.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core147=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime115=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_core147.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core147.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime115.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime115.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime115.jsxs)(import_jsx_runtime115.Fragment,{children:["...",(0,import_jsx_runtime115.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime115.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_core60.isEmpty)(targetType.resourceType)}var import_core66=require("@mantine/core"),import_core67=require("@medplum/core");var import_react40=require("react");var import_core63=require("@mantine/core"),import_core64=require("@medplum/core"),import_react39=require("react");var import_core61=require("@mantine/core");var import_jsx_runtime57=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime57.jsx)(import_core61.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime57.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime57.jsx)(import_core61.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime57.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core62=require("@mantine/core");var import_jsx_runtime58=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime58.jsx)(import_core62.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime58.jsx)(IconCircleMinus,{size:"1.25rem"})})}var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_jsx_runtime59=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime59.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime60=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react39.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react39.useContext)(ElementsContext),contextValue=(0,import_react39.useMemo)(()=>{if((0,import_core64.isPopulated)(sliceElements))return(0,import_core64.buildElementsContext)({parentContext:parentElementsContextValue,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url});console.assert(!1,"Expected sliceElements to always be populated",props.path)},[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_core64.isEmpty)(slice.elements),propertyDisplayName=(0,import_core64.getPropertyDisplayName)(slice.name);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime60.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,children:(0,import_jsx_runtime60.jsxs)(import_core63.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime60.jsxs)(import_core63.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime60.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime60.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})}),values.length>slice.min&&(0,import_jsx_runtime60.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}`)),values.length<slice.max&&(0,import_jsx_runtime60.jsx)(import_core63.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime60.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_core65=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core65.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_core65.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}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_core65.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core65.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl?promises.push(medplum.requestProfileSchema(profileUrl)):promises.push(Promise.resolve([]))}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_core65.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_jsx_runtime61=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=a(),[loading,setLoading]=(0,import_react40.useState)(!0),[slices,setSlices]=(0,import_react40.useState)([]),[defaultValue2]=(0,import_react40.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react40.useState)(()=>[defaultValue2]),ctx=(0,import_react40.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react40.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(defaultValue2,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,defaultValue2,ctx.profileUrl,setSlicedValues,props.path]);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_runtime61.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core67.getPathDisplayName)(property.path);return(0,import_jsx_runtime61.jsxs)(import_core66.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[slices.map((slice,sliceIndex)=>(0,import_jsx_runtime61.jsx)(SliceInput,{slice,path:props.path,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime61.jsxs)(import_core66.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime61.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime61.jsx)(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,path:props.path,defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),(0,import_jsx_runtime61.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime61.jsx)(import_core66.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime61.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}var import_core68=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react41=require("react"),import_jsx_runtime62=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react41.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react41.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime62.jsxs)(import_core68.Flex,{gap:"xs",children:[(0,import_jsx_runtime62.jsx)(import_core68.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime62.jsx)(import_core68.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime62.jsx)(IconCopy,{})})]})}var import_core69=require("@mantine/core"),import_core70=require("@medplum/core"),import_react42=require("react");var import_jsx_runtime63=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react42.useState)(props.defaultValue),[open,setOpen]=(0,import_react42.useState)(!1),valueRef=(0,import_react42.useRef)();return valueRef.current=value,(0,import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment,{children:[(0,import_jsx_runtime63.jsxs)(import_core69.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime63.jsx)("span",{children:(0,import_core70.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime63.jsx)(import_core69.Button,{onClick:()=>setOpen(!0),children:"Edit"})]}),(0,import_jsx_runtime63.jsx)(TimingEditorDialog,{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_react42.useState)(props.defaultValue||defaultValue),valueRef=(0,import_react42.useRef)();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_runtime63.jsx)(import_core69.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime63.jsxs)(import_core69.Stack,{children:[(0,import_jsx_runtime63.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime63.jsx)(DateTimeInput,{name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime63.jsx)(import_core69.Switch,{label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime63.jsxs)(import_jsx_runtime63.Fragment,{children:[(0,import_jsx_runtime63.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime63.jsxs)(import_core69.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime63.jsx)(import_core69.TextInput,{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_runtime63.jsx)(import_core69.NativeSelect,{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_runtime63.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime63.jsx)(import_core69.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime63.jsx)(import_core69.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime63.jsx)(import_core69.Chip,{value:day,size:"xs",radius:"xl",children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime63.jsx)(import_core69.Group,{justify:"flex-end",children:(0,import_jsx_runtime63.jsx)(import_core69.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime64=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_core72.PropertyType.Attachment)return(0,import_jsx_runtime64.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange});let indent=propertyTypes[0]?.code!==import_core72.PropertyType.Extension;return(0,import_jsx_runtime64.jsx)(ResourceArrayInput,{property,name,path:props.path,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}else return propertyTypes.length>1?(0,import_jsx_runtime64.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime64.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core72.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})}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_react43.useState)(initialPropertyType);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,{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_runtime64.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_core72.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react43.useContext)(ElementsContext),defaultValue2=(0,import_react43.useMemo)(()=>{if(!(0,import_core72.isComplexTypeCode)(propertyType)||!(0,import_core72.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core72.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core72.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core72.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core72.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime64.jsx)("div",{children:"Property type not specified "});let properties={name,defaultValue:defaultValue2,onChange,outcome,path};switch(propertyType){case import_core72.PropertyType.SystemString:case import_core72.PropertyType.canonical:case import_core72.PropertyType.string:case import_core72.PropertyType.time:case import_core72.PropertyType.uri:case import_core72.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime64.jsx)(SensitiveTextarea,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)},error:getErrorsForInput(props.outcome,name)}):(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case import_core72.PropertyType.date:return(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{type:"date",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case import_core72.PropertyType.dateTime:case import_core72.PropertyType.instant:return(0,import_jsx_runtime64.jsx)(DateTimeInput,{name,defaultValue:defaultValue2,onChange,outcome});case import_core72.PropertyType.decimal:case import_core72.PropertyType.integer:case import_core72.PropertyType.positiveInt:case import_core72.PropertyType.unsignedInt:return(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{type:"number",step:propertyType===import_core72.PropertyType.decimal?"any":"1",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.valueAsNumber)}});case import_core72.PropertyType.code:return(0,import_jsx_runtime64.jsx)(CodeInput,{...properties,binding:binding?.valueSet});case import_core72.PropertyType.boolean:return(0,import_jsx_runtime64.jsx)(import_core71.Checkbox,{id:name,name,"data-testid":name,defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core72.PropertyType.base64Binary:case import_core72.PropertyType.markdown:return(0,import_jsx_runtime64.jsx)(import_core71.Textarea,{id:name,spellCheck:propertyType!==import_core72.PropertyType.base64Binary,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core72.PropertyType.Address:return(0,import_jsx_runtime64.jsx)(AddressInput,{...properties});case import_core72.PropertyType.Annotation:return(0,import_jsx_runtime64.jsx)(AnnotationInput,{...properties});case import_core72.PropertyType.Attachment:return(0,import_jsx_runtime64.jsx)(AttachmentInput,{...properties});case import_core72.PropertyType.CodeableConcept:return(0,import_jsx_runtime64.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...properties});case import_core72.PropertyType.Coding:return(0,import_jsx_runtime64.jsx)(CodingInput,{binding:binding?.valueSet,...properties});case import_core72.PropertyType.ContactDetail:return(0,import_jsx_runtime64.jsx)(ContactDetailInput,{...properties});case import_core72.PropertyType.ContactPoint:return(0,import_jsx_runtime64.jsx)(ContactPointInput,{...properties});case import_core72.PropertyType.Extension:return(0,import_jsx_runtime64.jsx)(ExtensionInput,{...properties,propertyType:props.elementDefinitionType});case import_core72.PropertyType.HumanName:return(0,import_jsx_runtime64.jsx)(HumanNameInput,{...properties});case import_core72.PropertyType.Identifier:return(0,import_jsx_runtime64.jsx)(IdentifierInput,{...properties});case import_core72.PropertyType.Money:return(0,import_jsx_runtime64.jsx)(MoneyInput,{...properties});case import_core72.PropertyType.Period:return(0,import_jsx_runtime64.jsx)(PeriodInput,{...properties});case import_core72.PropertyType.Duration:case import_core72.PropertyType.Quantity:return(0,import_jsx_runtime64.jsx)(QuantityInput,{...properties});case import_core72.PropertyType.Range:return(0,import_jsx_runtime64.jsx)(RangeInput,{...properties});case import_core72.PropertyType.Ratio:return(0,import_jsx_runtime64.jsx)(RatioInput,{...properties});case import_core72.PropertyType.Reference:return(0,import_jsx_runtime64.jsx)(ReferenceInput,{...properties,targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core72.PropertyType.Timing:return(0,import_jsx_runtime64.jsx)(TimingInput,{...properties});case import_core72.PropertyType.Dosage:case import_core72.PropertyType.UsageContext:default:return(0,import_jsx_runtime64.jsx)(BackboneElementInput,{typeName:propertyType,path:properties.path,defaultValue:defaultValue2,onChange,outcome})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core72.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_runtime65=require("react/jsx-runtime"),EXTENSION_KEYS=new Set(["extension","modifierExtension"]),IGNORED_PROPERTIES=new Set(["id",...DEFAULT_IGNORED_PROPERTIES].filter(prop=>!EXTENSION_KEYS.has(prop)));function ElementsInput(props){let[value,setValue]=(0,import_react44.useState)(props.defaultValue??{}),elementsContext=(0,import_react44.useContext)(ElementsContext),elementsToRender=(0,import_react44.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_runtime65.jsx)(import_core73.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,resourcePropertyInput=(0,import_jsx_runtime65.jsx)(ResourcePropertyInput,{property:element,name:key,path:props.path+"."+key,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},arrayElement:void 0,outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.has(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?(0,import_jsx_runtime65.jsx)(CheckboxFormSection,{title:(0,import_core74.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,children:resourcePropertyInput},key):(0,import_jsx_runtime65.jsx)(FormSection,{title:(0,import_core74.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,children:resourcePropertyInput},key)})})}function getElementsToRender(inputElements){return Object.entries(inputElements).filter(([key,element])=>!(0,import_core74.isPopulated)(element.type)||element.max===0||element.path.toLowerCase().endsWith("extension.url")&&element.fixed||EXTENSION_KEYS.has(key)&&!(0,import_core74.isPopulated)(element.slicing?.slices)||IGNORED_PROPERTIES.has(key)?!1:!(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&element.path.split(".").length===2||key.includes(".")))}var import_jsx_runtime66=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react45.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react45.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react45.useMemo)(()=>(0,import_core75.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react45.useMemo)(()=>{if(typeSchema)return(0,import_core75.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime66.jsx)(ElementsInput,{path:props.path,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime66.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core76=require("@mantine/core"),import_react46=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_runtime67=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react46.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_react46.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime67.jsxs)("div",{children:[(0,import_jsx_runtime67.jsxs)(import_core76.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime67.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime67.jsxs)(import_core76.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime67.jsx)(import_core76.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime67.jsx)(import_core76.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime67.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime67.jsx)("thead",{children:(0,import_jsx_runtime67.jsxs)("tr",{children:[(0,import_jsx_runtime67.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime67.jsx)("th",{children:"MON"}),(0,import_jsx_runtime67.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime67.jsx)("th",{children:"WED"}),(0,import_jsx_runtime67.jsx)("th",{children:"THU"}),(0,import_jsx_runtime67.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime67.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime67.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime67.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime67.jsx)("td",{children:day&&(0,import_jsx_runtime67.jsx)(import_core76.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_core77=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime68=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime68.jsx)(import_core77.Container,{className:Container_default.root,...others,children})}var import_core90=require("@mantine/core"),import_notifications5=require("@mantine/notifications"),import_core91=require("@medplum/core");var import_react51=require("react");var import_core83=require("@mantine/core"),import_core84=require("@medplum/core");var import_react48=require("react");var import_core78=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime69=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime69.jsx)(import_core78.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime69.jsx)(import_core78.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_core81=require("@mantine/core");var import_core79=require("@mantine/core"),import_core80=require("@medplum/core");var import_react47=require("react");var import_jsx_runtime70=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react47.useState)(),resource=ce(value,setOutcome),text;if(outcome&&!(0,import_core80.isOk)(outcome))text=`[${(0,import_core80.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core80.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime70.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime70.jsx)(import_core79.Text,{component:"span",...rest,children:text})}var import_jsx_runtime71=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime71.jsxs)(import_core81.Group,{gap:"xs",children:[(0,import_jsx_runtime71.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime71.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core82=require("@mantine/core"),import_jsx_runtime72=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"};function StatusBadge(props){return(0,import_jsx_runtime72.jsx)(import_core82.Badge,{color:statusToColor[props.status],children:props.status})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime73=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=a(),diagnosticReport=ce(props.value),[specimens,setSpecimens]=(0,import_react48.useState)();if((0,import_react48.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_runtime73.jsxs)(import_core83.Stack,{children:[(0,import_jsx_runtime73.jsx)(import_core83.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime73.jsx)(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime73.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime73.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return(0,import_jsx_runtime73.jsxs)(import_core83.Group,{mt:"md",gap:30,children:[value.subject&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime73.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime73.jsx)(import_core83.Text,{children:(0,import_core84.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime73.jsx)(import_core83.Text,{children:(0,import_core84.capitalize)(value.status)})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime73.jsxs)(import_core83.Stack,{gap:"xs",children:[(0,import_jsx_runtime73.jsx)(import_core83.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime73.jsx)(import_core83.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime73.jsx)(import_core83.List.Item,{ml:"sm",children:(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:20,children:[(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:5,children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{fw:500,children:"Collected:"})," ",(0,import_core84.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime73.jsxs)(import_core83.Group,{gap:5,children:[(0,import_jsx_runtime73.jsx)(import_core83.Text,{fw:500,children:"Received:"})," ",(0,import_core84.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime73.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime73.jsx)("thead",{children:(0,import_jsx_runtime73.jsxs)("tr",{children:[(0,import_jsx_runtime73.jsx)("th",{children:"Test"}),(0,import_jsx_runtime73.jsx)("th",{children:"Value"}),(0,import_jsx_runtime73.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime73.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime73.jsx)("th",{children:"Category"}),(0,import_jsx_runtime73.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime73.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime73.jsx)("tbody",{children:(0,import_jsx_runtime73.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime73.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core84.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=ce(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime73.jsxs)(import_jsx_runtime73.Fragment,{children:[(0,import_jsx_runtime73.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime73.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime73.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime73.jsx)("td",{children:(0,import_jsx_runtime73.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime73.jsx)("td",{children:(0,import_jsx_runtime73.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime73.jsx)("div",{children:(0,import_jsx_runtime73.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core84.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime73.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime73.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime73.jsx)("td",{children:observation.status&&(0,import_jsx_runtime73.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime73.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime73.jsx)("tr",{children:(0,import_jsx_runtime73.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime73.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:(0,import_core84.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime73.jsx)(import_jsx_runtime73.Fragment,{children:range.text}):(0,import_jsx_runtime73.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_core85=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime74=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime74.jsx)(import_core85.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_core86=require("@mantine/core"),import_core87=require("@medplum/core");var import_react49=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime75=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=a(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react49.useState)(!1);(0,import_react49.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react49.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core87.toTypedValue)(original)],typedRevised=[(0,import_core87.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_core87.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core87.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core87.capitalize)(op.op)} ${fhirPath}`,property,originalValue:touchUpValue(property,originalValue),revisedValue:touchUpValue(property,revisedValue)})}return result},[schemaLoaded,original,revised]);return diffTable?(0,import_jsx_runtime75.jsxs)(import_core86.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Thead,{children:(0,import_jsx_runtime75.jsxs)(import_core86.Table.Tr,{children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{children:"Before"}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Tbody,{children:diffTable.map(row=>(0,import_jsx_runtime75.jsxs)(import_core86.Table.Tr,{children:[(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{children:row.name}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{className:ResourceDiffTable_default.removed,children:row.originalValue&&(0,import_jsx_runtime75.jsx)(ResourcePropertyDisplay,{property:row.property,propertyType:row.originalValue.type,value:row.originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime75.jsx)(import_core86.Table.Td,{className:ResourceDiffTable_default.added,children:row.revisedValue&&(0,import_jsx_runtime75.jsx)(ResourcePropertyDisplay,{property:row.property,propertyType:row.revisedValue.type,value:row.revisedValue.value,ignoreMissingValues:!0})})]},row.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_core87.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_core87.arrayify)(input).flatMap(v2=>v2.value);return isArray?inputValue:inputValue[0]}var import_react50=require("react");var import_jsx_runtime76=require("react/jsx-runtime");function ResourceTable(props){let medplum=a(),value=ce(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react50.useState)(!1);return(0,import_react50.useEffect)(()=>{value&&medplum.requestSchema(value.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,value]),!schemaLoaded||!value?null:(0,import_jsx_runtime76.jsx)(BackboneElementDisplay,{value:{type:value.resourceType,value:props.forceUseInput?props.value:value},ignoreMissingValues:props.ignoreMissingValues})}var import_core88=require("@mantine/core"),import_core89=require("@medplum/core");var import_jsx_runtime77=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime77.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_runtime77.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime77.jsxs)(import_core88.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime77.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime77.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime77.jsx)(import_core88.Text,{size:"sm",children:(0,import_jsx_runtime77.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime77.jsxs)(import_core88.Text,{size:"xs",children:[(0,import_jsx_runtime77.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core89.formatDateTime)(dateTime)}),(0,import_jsx_runtime77.jsx)(import_core88.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime77.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime77.jsxs)(import_core88.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime77.jsx)(import_core88.Menu.Target,{children:(0,import_jsx_runtime77.jsx)(import_core88.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core89.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime77.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime77.jsxs)(ErrorBoundary,{children:[padding&&(0,import_jsx_runtime77.jsx)("div",{style:{padding:"0 16px 16px 16px"},children:props.children}),!padding&&(0,import_jsx_runtime77.jsx)(import_jsx_runtime77.Fragment,{children:props.children})]})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a2,b2)=>{let priority1=getPriorityScore(a2,timelineResource),priority2=getPriorityScore(b2,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a2,timelineResource)-getTime(b2,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(a2,b2){return!!b2&&a2.resourceType===b2.resourceType&&a2.id===b2.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime78=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=a(),navigate=G(),sender=medplum.getProfile(),inputRef=(0,import_react51.useRef)(null),resource=ce(props.value),[history,setHistory]=(0,import_react51.useState)(),[items,setItems]=(0,import_react51.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react51.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react51.useCallback)(newItmes=>{sortByDateAndPriority(newItmes,resource),newItmes.reverse(),setItems(newItmes)},[resource]),handleBatchResponse=(0,import_react51.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_react51.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react51.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.log)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);(0,import_react51.useEffect)(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.log)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime78.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core91.normalizeErrorString)(reason),icon:(0,import_jsx_runtime78.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function setPriority(communication,priority){return medplum.updateResource({...communication,priority})}function onPin(communication){setPriority(communication,"stat").then(loadTimeline).catch(console.log)}function onUnpin(communication){setPriority(communication,"routine").then(loadTimeline).catch(console.log)}function onDetails(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}`)}function onEdit(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`)}function onDelete(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`)}function onVersionDetails(version){navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`)}function onUploadStart(){(0,import_notifications5.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications5.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core91.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime78.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime78.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime78.jsx)(Panel,{children:(0,import_jsx_runtime78.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime78.jsxs)(import_core90.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime78.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime78.jsx)(import_core90.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime78.jsx)(import_core90.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime78.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime78.jsx)(AttachmentButton,{onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime78.jsx)(import_core90.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime78.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime78.jsx)(HistoryTimelineItem,{history,resource:item,onDetails:onVersionDetails},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime78.jsx)(AuditEventTimelineItem,{resource:item,onDetails},key);case"Communication":return(0,import_jsx_runtime78.jsx)(CommunicationTimelineItem,{resource:item,onPin:item.priority!=="stat"?onPin:void 0,onUnpin:item.priority==="stat"?onUnpin:void 0,onDetails,onEdit,onDelete},key);case"DiagnosticReport":return(0,import_jsx_runtime78.jsx)(DiagnosticReportTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);case"Media":return(0,import_jsx_runtime78.jsx)(MediaTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);default:return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime78.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime78.jsx)(import_core90.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime78.jsx)(import_core90.Loader,{})})}function TimelineItemPopupMenu(props){return(0,import_jsx_runtime78.jsxs)(import_core90.Menu.Dropdown,{children:[(0,import_jsx_runtime78.jsx)(import_core90.Menu.Label,{children:"Resource"}),props.onPin&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconPin,{size:14}),onClick:()=>props.onPin(props.resource),"aria-label":`Pin ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Pin"}),props.onUnpin&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconPinnedOff,{size:14}),onClick:()=>props.onUnpin(props.resource),"aria-label":`Unpin ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Unpin"}),props.onDetails&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconListDetails,{size:14}),onClick:()=>props.onDetails(props.resource),"aria-label":`Details ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Details"}),props.onEdit&&(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{leftSection:(0,import_jsx_runtime78.jsx)(IconEdit,{size:14}),onClick:()=>props.onEdit(props.resource),"aria-label":`Edit ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Edit"}),props.onDelete&&(0,import_jsx_runtime78.jsxs)(import_jsx_runtime78.Fragment,{children:[(0,import_jsx_runtime78.jsx)(import_core90.Menu.Divider,{}),(0,import_jsx_runtime78.jsx)(import_core90.Menu.Label,{children:"Danger zone"}),(0,import_jsx_runtime78.jsx)(import_core90.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime78.jsx)(IconTrash,{size:14}),onClick:()=>props.onDelete(props.resource),"aria-label":`Delete ${(0,import_core91.getReferenceString)(props.resource)}`,children:"Delete"})]})]})}function HistoryTimelineItem(props){let previous=getPrevious(props.history,props.resource);return previous?(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime78.jsxs)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:[(0,import_jsx_runtime78.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime78.jsx)(ResourceTable,{value:props.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_runtime78.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.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_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.jsx)(import_core90.ScrollArea,{children:(0,import_jsx_runtime78.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime78.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime78.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime78.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_runtime79=require("react/jsx-runtime");function DefaultResourceTimeline(props){return(0,import_jsx_runtime79.jsx)(ResourceTimeline,{value:props.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})])}})}var import_jsx_runtime80=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime80.jsx)(Container,{children:(0,import_jsx_runtime80.jsx)(Panel,{...others,children})})}var import_core92=require("@medplum/core");var import_jsx_runtime81=require("react/jsx-runtime");function EncounterTimeline(props){return(0,import_jsx_runtime81.jsx)(ResourceTimeline,{value:props.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_core92.createReference)(resource),subject:resource.subject,sender:(0,import_core92.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core92.createReference)(resource),subject:resource.subject,operator:(0,import_core92.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core109=require("@mantine/core"),import_core110=require("@medplum/core");var import_react56=require("react");var import_core93=require("@medplum/core");var import_jsx_runtime82=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core93.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_runtime82.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core107=require("@mantine/core"),import_core108=require("@medplum/core");var import_react55=require("react");var import_core94=require("@mantine/core"),import_jsx_runtime83=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime83.jsxs)(import_core94.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime83.jsxs)(import_core94.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime83.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime83.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime83.jsx)(import_core94.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime83.jsx)(import_core94.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core96=require("@mantine/core"),import_core97=require("@medplum/core"),import_react52=require("react");var import_core95=require("@medplum/core");var import_jsx_runtime84=require("react/jsx-runtime"),searchParamToOperators={string:[import_core95.Operator.EQUALS,import_core95.Operator.NOT,import_core95.Operator.CONTAINS,import_core95.Operator.EXACT],fulltext:[import_core95.Operator.EQUALS,import_core95.Operator.NOT,import_core95.Operator.CONTAINS,import_core95.Operator.EXACT],token:[import_core95.Operator.EQUALS,import_core95.Operator.NOT],reference:[import_core95.Operator.EQUALS,import_core95.Operator.NOT],numeric:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS],date:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS,import_core95.Operator.STARTS_AFTER,import_core95.Operator.ENDS_BEFORE,import_core95.Operator.APPROXIMATELY],datetime:[import_core95.Operator.EQUALS,import_core95.Operator.NOT_EQUALS,import_core95.Operator.GREATER_THAN,import_core95.Operator.LESS_THAN,import_core95.Operator.GREATER_THAN_OR_EQUALS,import_core95.Operator.LESS_THAN_OR_EQUALS,import_core95.Operator.STARTS_AFTER,import_core95.Operator.ENDS_BEFORE,import_core95.Operator.APPROXIMATELY]},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",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",identifier:"identifier",iterate:"iterate"};function 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(f2=>f2.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 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_core95.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core95.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_core95.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_core95.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_core95.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?resource.id:key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core95.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_runtime84.jsx)(ResourcePropertyDisplay,{property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core95.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime84.jsx)(import_jsx_runtime84.Fragment,{children:value.map((v2,index)=>(0,import_jsx_runtime84.jsx)(ResourcePropertyDisplay,{propertyType:v2.type,value:v2.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime85=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react52.useRef)(!1),[state,setState]=(0,import_react52.useState)({search:JSON.parse((0,import_core97.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react52.useState)(!1);(0,import_react52.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react52.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core97.getDataType)(resourceType),searchParams=(0,import_core97.getSearchParameters)(resourceType);return getFieldsList(typeSchema,searchParams).sort((a2,b2)=>a2.localeCompare(b2)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);if(!props.visible)return null;function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime85.jsx)(import_core96.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_runtime85.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime85.jsxs)(import_core96.Stack,{children:[(0,import_jsx_runtime85.jsx)(import_core96.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_runtime85.jsx)(import_core96.Group,{justify:"flex-end",children:(0,import_jsx_runtime85.jsx)(import_core96.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_core101=require("@mantine/core"),import_core102=require("@medplum/core"),import_react53=require("react");var import_core98=require("@medplum/core");var import_jsx_runtime86=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core98.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core98.Operator.EQUALS||filter.operator===import_core98.Operator.NOT_EQUALS))return(0,import_jsx_runtime86.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core98.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core98.SearchParameterType.DATETIME)return(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:(0,import_core98.formatDateTime)(filter.value)})}return(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:filter.value})}var import_core99=require("@mantine/core"),import_core100=require("@medplum/core");var import_jsx_runtime87=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core100.getSearchParameterDetails)(props.resourceType,props.searchParam),name="filter-value";switch(details.type){case import_core100.SearchParameterType.REFERENCE:return(0,import_jsx_runtime87.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_core100.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.DATE:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.DATETIME:return(0,import_jsx_runtime87.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core100.SearchParameterType.NUMBER:return(0,import_jsx_runtime87.jsx)(import_core99.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_core100.SearchParameterType.QUANTITY:return(0,import_jsx_runtime87.jsx)(QuantityInput,{name,defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime87.jsx)(import_core99.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_runtime88=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react53.useState)(JSON.parse((0,import_core102.stringify)(props.search))),[editingIndex,setEditingIndex]=(0,import_react53.useState)(-1),searchRef=(0,import_react53.useRef)(search);searchRef.current=search,(0,import_react53.useEffect)(()=>{setSearch(JSON.parse((0,import_core102.stringify)(props.search)))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}if(!props.visible)return null;let resourceType=props.search.resourceType,searchParams=(0,import_core102.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime88.jsxs)(import_core101.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime88.jsx)("div",{children:(0,import_jsx_runtime88.jsxs)("table",{children:[(0,import_jsx_runtime88.jsxs)("colgroup",{children:[(0,import_jsx_runtime88.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime88.jsx)("col",{style:{width:120}})]}),(0,import_jsx_runtime88.jsx)("thead",{children:(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("th",{children:"Field"}),(0,import_jsx_runtime88.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime88.jsx)("th",{children:"Value"}),(0,import_jsx_runtime88.jsx)("th",{children:"Actions"})]})}),(0,import_jsx_runtime88.jsxs)("tbody",{children:[filters.map((filter,index)=>index===editingIndex?(0,import_jsx_runtime88.jsx)(FilterRowInput,{resourceType,searchParams,defaultValue:filter,okText:"Save",onOk:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters)),setEditingIndex(-1)},onCancel:()=>setEditingIndex(-1)},`filter-${filter.code}-${filter.operator}-${filter.value}-input`):(0,import_jsx_runtime88.jsx)(FilterRowDisplay,{resourceType,filter,onEdit:()=>setEditingIndex(index),onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${filter.code}-${filter.operator}-${filter.value}-display`)),(0,import_jsx_runtime88.jsx)(FilterRowInput,{resourceType,searchParams,okText:"Add",onOk:onAddFilter})]})]})}),(0,import_jsx_runtime88.jsx)(import_core101.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime88.jsx)(import_core101.Button,{onClick:()=>props.onOk(searchRef.current),children:"OK"})})]})}function FilterRowDisplay(props){let{filter}=props;return(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("td",{children:buildFieldNameString(filter.code)}),(0,import_jsx_runtime88.jsx)("td",{children:getOpString(filter.operator)}),(0,import_jsx_runtime88.jsx)("td",{children:(0,import_jsx_runtime88.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})}),(0,import_jsx_runtime88.jsxs)("td",{children:[(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onEdit,children:"Edit"}),(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onDelete,children:"Delete"})]})]})}function FilterRowInput(props){let[value,setValue]=(0,import_react53.useState)(props.defaultValue??{}),valueRef=(0,import_react53.useRef)(value);valueRef.current=value;function setFilterCode(newCode){setValue({...valueRef.current,code:newCode})}function setFilterOperator(newOperator){setValue({...valueRef.current,operator:newOperator})}function setFilterValue(newFilterValue){setValue({...valueRef.current,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime88.jsxs)("tr",{children:[(0,import_jsx_runtime88.jsx)("td",{children:(0,import_jsx_runtime88.jsx)(import_core101.NativeSelect,{"data-testid":"filter-field",defaultValue:valueRef.current.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime88.jsx)("td",{children:operators&&(0,import_jsx_runtime88.jsx)(import_core101.NativeSelect,{"data-testid":"filter-operation",defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),(0,import_jsx_runtime88.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime88.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),(0,import_jsx_runtime88.jsxs)("td",{children:[value.code&&value.operator&&(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:()=>{props.onOk(valueRef.current),setValue({})},children:props.okText}),props.onCancel&&(0,import_jsx_runtime88.jsx)(import_core101.Button,{size:"compact-md",variant:"outline",onClick:props.onCancel,children:"Cancel"})]})]})}var import_core103=require("@mantine/core"),import_react54=require("react");var import_jsx_runtime89=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react54.useState)(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime89.jsx)(import_core103.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime89.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime89.jsxs)(import_core103.Grid,{children:[(0,import_jsx_runtime89.jsx)(import_core103.Grid.Col,{span:10,children:(0,import_jsx_runtime89.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime89.jsx)(import_core103.Grid.Col,{span:2,children:(0,import_jsx_runtime89.jsx)(import_core103.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core104=require("@mantine/core"),import_core105=require("@medplum/core");var import_jsx_runtime90=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_runtime90.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime90.jsx)(import_core104.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime90.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime90.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime90.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime90.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime90.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime90.jsxs)(import_jsx_runtime90.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime90.jsxs)(import_core104.Menu.Dropdown,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core105.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime90.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime90.jsxs)(import_jsx_runtime90.Fragment,{children:[(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Divider,{}),(0,import_jsx_runtime90.jsx)(import_core104.Menu.Item,{leftSection:(0,import_jsx_runtime90.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_core106=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_core106.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core106.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core106.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_core106.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime91=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=a(),[loadingSchema,setLoadingSchema]=(0,import_react55.useState)(),[outcome,setOutcome]=(0,import_react55.useState)(),{search,onLoad}=props,[state,setState]=(0,import_react55.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react55.useRef)(state);stateRef.current=state;let loadResults=(0,import_react55.useCallback)(options=>{setOutcome(void 0),medplum.search(search.resourceType,(0,import_core108.formatSearchQuery)({...search,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(reason)})},[medplum,search,onLoad]),refreshResults=(0,import_react55.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react55.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=e.button===1||e.ctrlKey||e.metaKey;!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((0,import_react55.useEffect)(()=>{setLoadingSchema(props.search.resourceType),medplum.requestSchema(props.search.resourceType).catch(console.error).finally(()=>setLoadingSchema(void 0))},[medplum,props.search.resourceType]),!(0,import_core108.isDataTypeLoaded)(props.search.resourceType)||loadingSchema===props.search.resourceType)return(0,import_jsx_runtime91.jsx)(import_core107.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime91.jsx)(import_core107.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(search),resourceType=search.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_runtime91.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime91.jsxs)(import_core107.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime91.jsxs)(import_core107.Group,{gap:2,children:[(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime91.jsx)(import_core107.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime91.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime91.jsxs)(import_core107.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime91.jsxs)(import_core107.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(search,lastResult).toLocaleString(),"-",getEnd(search,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${search.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime91.jsx)(import_core107.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime91.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime91.jsxs)(import_core107.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime91.jsxs)(import_core107.Table.Thead,{children:[(0,import_jsx_runtime91.jsxs)(import_core107.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{children:(0,import_jsx_runtime91.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_runtime91.jsx)(import_core107.Table.Th,{children:(0,import_jsx_runtime91.jsxs)(import_core107.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime91.jsx)(import_core107.Menu.Target,{children:(0,import_jsx_runtime91.jsx)(import_core107.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime91.jsxs)(import_core107.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime91.jsx)(import_core107.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime91.jsx)(import_core107.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime91.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime91.jsx)(SearchPopupMenu,{search:props.search,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime91.jsxs)(import_core107.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime91.jsx)(import_core107.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime91.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:props.search.filters})},field.name))]})]}),(0,import_jsx_runtime91.jsx)(import_core107.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime91.jsxs)(import_core107.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_runtime91.jsx)(import_core107.Table.Td,{children:(0,import_jsx_runtime91.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_runtime91.jsx)(import_core107.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),resources?.length===0&&(0,import_jsx_runtime91.jsx)(Container,{children:(0,import_jsx_runtime91.jsx)(import_core107.Center,{style:{height:150},children:(0,import_jsx_runtime91.jsx)(import_core107.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime91.jsx)(import_core107.Center,{m:"md",p:"md",children:(0,import_jsx_runtime91.jsx)(import_core107.Pagination,{value:getPage(search),total:getTotalPages(search,lastResult),onChange:newPage=>emitSearchChange(setPage(search,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),outcome&&(0,import_jsx_runtime91.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime91.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),(0,import_jsx_runtime91.jsx)(SearchFieldEditor,{search:props.search,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),(0,import_jsx_runtime91.jsx)(SearchFilterEditor,{search:props.search,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),(0,import_jsx_runtime91.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),(0,import_jsx_runtime91.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(props.search,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},state.filterDialogSearchParam?.code)]})}var MemoizedSearchControl=(0,import_react55.memo)(SearchControl);function FilterDescription(props){let filters=(props.filters??[]).filter(f2=>props.searchParams.find(p=>p.code===f2.code));return filters.length===0?(0,import_jsx_runtime91.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime91.jsx)(import_jsx_runtime91.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime91.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime91.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_core108.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core108.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 getStart(search,lastResult)+(lastResult.entry?.length??0)-1}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_runtime92=require("react/jsx-runtime");function FhirPathTable(props){let medplum=a(),[schemaLoaded,setSchemaLoaded]=(0,import_react56.useState)(!1),[outcome,setOutcome]=(0,import_react56.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react56.useState)(),[selected,setSelected]=(0,import_react56.useState)({}),responseRef=(0,import_react56.useRef)();responseRef.current=response;let selectedRef=(0,import_react56.useRef)({});selectedRef.current=selected,(0,import_react56.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core110.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_react56.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime92.jsx)(import_core109.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime92.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime92.jsxs)(import_core109.Table,{children:[(0,import_jsx_runtime92.jsx)(import_core109.Table.Thead,{children:(0,import_jsx_runtime92.jsxs)(import_core109.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime92.jsx)(import_core109.Table.Th,{children:(0,import_jsx_runtime92.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_runtime92.jsx)(import_core109.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime92.jsx)(import_core109.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime92.jsxs)(import_core109.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime92.jsx)(import_core109.Table.Td,{children:(0,import_jsx_runtime92.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_runtime92.jsx)(import_core109.Table.Td,{children:(0,import_jsx_runtime92.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime92.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime92.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime92.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime92.jsx)(import_core109.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react56.memo)(FhirPathTable);var import_jsx_runtime93=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime93.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_runtime93.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime93.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_runtime93.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_runtime93.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_runtime93.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_runtime93.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}var import_core113=require("@mantine/core");var import_core111=require("@mantine/core"),import_core112=require("@medplum/core");var import_jsx_runtime94=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime94.jsx)(import_core111.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime94.jsxs)(import_core111.Group,{children:[group.measureScore&&(0,import_jsx_runtime94.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime94.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime94.jsx)(import_core111.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_core112.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core112.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime94.jsxs)(import_core111.Box,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime94.jsxs)(import_core111.Box,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime94.jsx)(import_core111.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime94.jsx)(import_core111.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime94.jsx)(import_core111.Flex,{justify:"center",children:(0,import_jsx_runtime94.jsxs)(import_core111.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_runtime94.jsx)(import_jsx_runtime94.Fragment,{children:unit==="%"?(0,import_jsx_runtime94.jsx)(import_core111.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime94.jsx)(import_core111.Flex,{justify:"center",children:(0,import_jsx_runtime94.jsx)(import_core111.Text,{fw:700,fz:18,children:(0,import_jsx_runtime94.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime94.jsx)(import_core111.Flex,{h:120,align:"center",children:(0,import_jsx_runtime94.jsx)(import_core111.Title,{order:3,children:(0,import_jsx_runtime94.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_runtime95=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=ce(props.measureReport),[measure]=xe("Measure",{url:report?.measure});return report?(0,import_jsx_runtime95.jsxs)(import_core113.Box,{children:[measure&&(0,import_jsx_runtime95.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime95.jsx)(import_core113.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime95.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core114=require("@mantine/core");var import_react57=require("react"),import_jsx_runtime96=require("react/jsx-runtime");function NotificationIcon(props){let medplum=a(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react57.useState)(0),updateCount=(0,import_react57.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react57.useEffect)(()=>{updateCount("default")},[updateCount]),Ce(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime96.jsx)(import_core114.Tooltip,{label,children:(0,import_jsx_runtime96.jsx)(import_core114.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime96.jsx)(import_core114.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core115=require("@mantine/core"),import_core116=require("@medplum/core");var import_jsx_runtime97=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime97.jsx)(import_core115.Alert,{icon:(0,import_jsx_runtime97.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime97.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core116.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core127=require("@mantine/core"),import_core128=require("@medplum/core");var import_react63=require("react");var import_core117=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_core118=require("@medplum/core");var import_react58=require("react");var import_jsx_runtime98=require("react/jsx-runtime");function Allergies(props){let medplum=a(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react58.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks2.useDisclosure)(!1),[code,setCode]=(0,import_react58.useState)(),handleSubmit=(0,import_react58.useCallback)(formData=>{medplum.createResource({resourceType:"AllergyIntolerance",patient:(0,import_core118.createReference)(patient),encounter:encounter?(0,import_core118.createReference)(encounter):void 0,code,onsetDateTime:formData.onset?formData.onset:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0}).then(newAllergy=>{setAllergies([...allergies,newAllergy]),close()}).catch(console.error)},[medplum,patient,encounter,allergies,close,code]);return(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsxs)(import_core117.Group,{justify:"space-between",children:[(0,import_jsx_runtime98.jsx)(import_core117.Text,{fz:"md",fw:700,children:"Allergies"}),(0,import_jsx_runtime98.jsx)(import_core117.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),allergies.length>0?(0,import_jsx_runtime98.jsx)(import_core117.Box,{children:allergies.map(allergy=>(0,import_jsx_runtime98.jsx)(import_core117.Badge,{variant:"light",maw:"100%",children:(0,import_jsx_runtime98.jsx)(CodeableConceptDisplay,{value:allergy.code})},allergy.id))}):(0,import_jsx_runtime98.jsx)(import_core117.Text,{children:"(none)"}),(0,import_jsx_runtime98.jsx)(import_core117.Modal,{opened,onClose:close,title:"Add Allergy",children:(0,import_jsx_runtime98.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime98.jsxs)(import_core117.Stack,{children:[(0,import_jsx_runtime98.jsx)(CodeableConceptInput,{name:"allergy",path:"AllergyIntolerance.code","data-autofocus":!0,binding:"http://hl7.org/fhir/us/core/ValueSet/us-core-allergy-substance",onChange:allergy=>setCode(allergy),outcome:void 0}),(0,import_jsx_runtime98.jsx)(import_core117.TextInput,{name:"reaction",label:"Reaction"}),(0,import_jsx_runtime98.jsx)(import_core117.NativeSelect,{name:"status",label:"Status",data:["active"]}),(0,import_jsx_runtime98.jsx)(import_core117.TextInput,{name:"onset",label:"Onset",type:"date"}),(0,import_jsx_runtime98.jsx)(import_core117.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime98.jsx)(import_core117.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core119=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core120=require("@medplum/core");var import_react59=require("react");var import_jsx_runtime99=require("react/jsx-runtime");function Medications(props){let medplum=a(),[medicationRequests,setMedicationRequests]=(0,import_react59.useState)(props.medicationRequests),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),[code,setCode]=(0,import_react59.useState)(),handleSubmit=(0,import_react59.useCallback)(formData=>{let status=formData.status;medplum.createResource({resourceType:"MedicationRequest",status,intent:"order",encounter:props.encounter?(0,import_core120.createReference)(props.encounter):void 0,medicationCodeableConcept:code,subject:(0,import_core120.createReference)(props.patient)}).then(newRequest=>{setMedicationRequests([newRequest,...medicationRequests]),close()}).catch(console.error)},[medplum,props.patient,props.encounter,medicationRequests,close,code]);return(0,import_jsx_runtime99.jsxs)(import_jsx_runtime99.Fragment,{children:[(0,import_jsx_runtime99.jsxs)(import_core119.Group,{justify:"space-between",children:[(0,import_jsx_runtime99.jsx)(import_core119.Text,{fz:"md",fw:700,children:"Medications"}),(0,import_jsx_runtime99.jsx)(import_core119.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),medicationRequests.length>0?(0,import_jsx_runtime99.jsx)(import_core119.Box,{children:medicationRequests.map(request=>(0,import_jsx_runtime99.jsx)(import_core119.Badge,{mt:4,variant:"light",maw:"50%",color:request.status==="active"?"blue":"gray",children:(0,import_jsx_runtime99.jsx)(CodeableConceptDisplay,{value:request.medicationCodeableConcept})},request.id))}):(0,import_jsx_runtime99.jsx)(import_core119.Text,{children:"(none)"}),(0,import_jsx_runtime99.jsx)(import_core119.Modal,{opened,onClose:close,title:"Add Medication Request",children:(0,import_jsx_runtime99.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime99.jsxs)(import_core119.Stack,{h:275,children:[(0,import_jsx_runtime99.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:"https://app.medplum.com/ValueSet/16d6f7b7-7eeb-4d0e-a83b-83be082aa10b",onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime99.jsxs)(import_core119.Radio.Group,{mt:32,name:"status",label:"Request Status",required:!0,children:[(0,import_jsx_runtime99.jsx)(import_core119.Radio,{value:"active",label:"active",my:"xs"},"active"),(0,import_jsx_runtime99.jsx)(import_core119.Radio,{value:"stopped",label:"stopped",my:"xs"},"stopped")]}),(0,import_jsx_runtime99.jsx)(import_core119.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime99.jsx)(import_core119.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core121=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_core122=require("@medplum/core");var import_react60=require("react");var import_jsx_runtime100=require("react/jsx-runtime");function ProblemList(props){let medplum=a(),{patient,encounter}=props,[problems,setProblems]=(0,import_react60.useState)(props.problems),[opened,{open,close}]=(0,import_hooks4.useDisclosure)(!1),handleSubmit=(0,import_react60.useCallback)(formData=>{medplum.createResource({resourceType:"Condition",subject:(0,import_core122.createReference)(patient),encounter:encounter?(0,import_core122.createReference)(encounter):void 0,code:{coding:[{code:formData.problem,display:formData.problem}]},onsetDateTime:formData.onset?formData.onset:void 0}).then(newProblem=>{setProblems([...problems,newProblem]),close()}).catch(console.error)},[medplum,patient,encounter,problems,close]);return(0,import_jsx_runtime100.jsxs)(import_jsx_runtime100.Fragment,{children:[(0,import_jsx_runtime100.jsxs)(import_core121.Group,{justify:"space-between",children:[(0,import_jsx_runtime100.jsx)(import_core121.Text,{fz:"md",fw:700,children:"Problem List"}),(0,import_jsx_runtime100.jsx)(import_core121.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),problems.length>0?(0,import_jsx_runtime100.jsx)(import_core121.Grid,{gutter:"xs",children:problems.map(problem=>(0,import_jsx_runtime100.jsxs)(import_react60.Fragment,{children:[(0,import_jsx_runtime100.jsx)(import_core121.Grid.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),(0,import_jsx_runtime100.jsx)(import_core121.Grid.Col,{span:10,children:(0,import_jsx_runtime100.jsx)(import_core121.Badge,{variant:"light",maw:"100%",children:(0,import_jsx_runtime100.jsx)(CodeableConceptDisplay,{value:problem.code})},problem.id)})]},problem.id))}):(0,import_jsx_runtime100.jsx)(import_core121.Text,{children:"(none)"}),(0,import_jsx_runtime100.jsx)(import_core121.Modal,{opened,onClose:close,title:"Add Problem",children:(0,import_jsx_runtime100.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime100.jsxs)(import_core121.Stack,{children:[(0,import_jsx_runtime100.jsx)(import_core121.TextInput,{name:"problem",label:"Problem","data-autofocus":!0,autoFocus:!0,required:!0}),(0,import_jsx_runtime100.jsx)(import_core121.TextInput,{name:"onset",label:"Dx Date",type:"date",required:!0}),(0,import_jsx_runtime100.jsx)(import_core121.NativeSelect,{name:"status",label:"Status",data:["active"]}),(0,import_jsx_runtime100.jsx)(import_core121.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime100.jsx)(import_core121.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime100.jsx)(import_core121.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core123=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core124=require("@medplum/core");var import_react61=require("react");var import_jsx_runtime101=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=a(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=(0,import_react61.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react61.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core124.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_core124.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core124.createReference)(patient),encounter:encounter?(0,import_core124.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core124.SNOMED,version:import_core124.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment,{children:[(0,import_jsx_runtime101.jsxs)(import_core123.Group,{justify:"space-between",children:[(0,import_jsx_runtime101.jsx)(import_core123.Text,{fz:"md",fw:700,children:"Smoking Status"}),(0,import_jsx_runtime101.jsx)(import_core123.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime101.jsx)(import_core123.Box,{children:(0,import_jsx_runtime101.jsx)(import_core123.Badge,{variant:"light",children:(0,import_jsx_runtime101.jsx)(CodeableConceptDisplay,{value:smokingStatus.valueCodeableConcept})})}):(0,import_jsx_runtime101.jsx)(import_core123.Text,{children:"(none)"}),(0,import_jsx_runtime101.jsx)(import_core123.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime101.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime101.jsxs)(import_core123.Stack,{children:[(0,import_jsx_runtime101.jsx)(import_core123.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime101.jsx)(import_core123.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime101.jsx)(import_core123.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime101.jsx)(import_core123.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core126=require("@mantine/core"),import_hooks6=require("@mantine/hooks");var import_react62=require("react");var import_core125=require("@medplum/core");function getObservationValue(observations,code){return observations.find(o=>o.code?.coding?.[0].code===code)?.valueQuantity}function getCompoundObservationValue(observations,code,innerCode){return observations.find(o=>o.code?.coding?.[0].code===code)?.component?.find(c=>c.code?.coding?.[0].code===innerCode)?.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_core125.createReference)(patient),encounter:encounter?(0,import_core125.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_core125.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core125.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime102=require("react/jsx-runtime"),LOINC_CODES={bloodPressure:{code:"85354-9",title:"Blood Pressure",unit:"mm[Hg]"},heartRate:{code:"8867-4",title:"Heart Rate",unit:"/min"},bodyTemperature:{code:"8310-5",title:"Body Temperature",unit:"Cel"},respiratoryRate:{code:"9279-1",title:"Respiratory Rate",unit:"/min"},height:{code:"8302-2",title:"height",unit:"cm"},weight:{code:"29463-7",title:"weight",unit:"kg"},bmi:{code:"39156-5",title:"BMI",unit:"kg/m2"},oxygen:{code:"2708-6",title:"Oxygen",unit:"%"},headCircumference:{code:"9843-4",title:"Head Circumference",unit:"cm"}},SYSTOLIC="8480-6",DIASTOLIC="8462-4";function Vitals(props){let medplum=a(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react62.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react62.useCallback)(formData=>{let newObservations=Object.entries(LOINC_CODES).map(([name,meta])=>name==="bloodPressure"?createCompoundObservation(patient,encounter,meta.code,meta.title,[{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]")}]):createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[name]),meta.unit))).filter(Boolean);Promise.all(newObservations.map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[(0,import_jsx_runtime102.jsxs)(import_core126.Group,{justify:"space-between",children:[(0,import_jsx_runtime102.jsx)(import_core126.Text,{fz:"md",fw:700,children:"Vitals"}),(0,import_jsx_runtime102.jsx)(import_core126.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Grid,{children:[(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,SYSTOLIC)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,DIASTOLIC)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.heartRate.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bodyTemperature.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.respiratoryRate.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.height.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.weight.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bmi.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.oxygen.code)})}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),(0,import_jsx_runtime102.jsx)(import_core126.Grid.Col,{span:3,children:(0,import_jsx_runtime102.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.headCircumference.code)})})]}),(0,import_jsx_runtime102.jsx)(import_core126.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime102.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime102.jsxs)(import_core126.Stack,{children:[(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"diastolic",label:"BP Dias"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"heartRate",label:"HR"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"bodyTemperature",label:"Temp"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"respiratoryRate",label:"RR"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"height",label:"height"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"weight",label:"Wt"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"bmi",label:"BMI"})]}),(0,import_jsx_runtime102.jsxs)(import_core126.Group,{grow:!0,children:[(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"oxygen",label:"O2"}),(0,import_jsx_runtime102.jsx)(import_core126.TextInput,{name:"headCircumference",label:"HC"})]}),(0,import_jsx_runtime102.jsx)(import_core126.Textarea,{name:"notes",label:"Notes"})]}),(0,import_jsx_runtime102.jsx)(import_core126.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime102.jsx)(import_core126.Button,{type:"submit",children:"Save"})})]})})]})}var import_jsx_runtime103=require("react/jsx-runtime");function PatientSummary(props){let medplum=a(),{patient:propsPatient,background,...rest}=props,[patient,setPatient]=(0,import_react63.useState)(),[allergies,setAllergies]=(0,import_react63.useState)(),[problems,setProblems]=(0,import_react63.useState)(),[smokingStatus,setSmokingStatus]=(0,import_react63.useState)(),[vitals,setVitals]=(0,import_react63.useState)(),[medicationRequest,setMedicationRequest]=(0,import_react63.useState)();return(0,import_react63.useEffect)(()=>{let id=(0,import_core128.resolveId)(propsPatient),ref=`Patient/${id}`,searchMeta={_count:100,_sort:"-_lastUpdated"};Promise.all([medplum.readResource("Patient",id),medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta})]).then(results=>{setPatient(results[0]),setAllergies(results[1]),setProblems(results[2]),setMedicationRequest(results[3]);let observations=results[4];setSmokingStatus(observations.find(obs=>obs.code?.coding?.[0].code==="72166-2")),setVitals(observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"))}).catch(console.error)},[medplum,propsPatient]),patient?(0,import_jsx_runtime103.jsxs)(import_core127.Card,{...rest,children:[(0,import_jsx_runtime103.jsx)(import_core127.Card.Section,{h:100,style:{background}}),(0,import_jsx_runtime103.jsx)(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{ta:"center",fz:"lg",fw:500,children:(0,import_core128.formatHumanName)(patient.name?.[0])}),(0,import_jsx_runtime103.jsxs)(import_core127.Text,{ta:"center",fz:"xs",color:"dimmed",children:[patient.birthDate," (",(0,import_core128.calculateAgeString)(patient.birthDate),")"]}),(0,import_jsx_runtime103.jsx)(import_core127.Paper,{withBorder:!0,p:"md",my:"md",children:(0,import_jsx_runtime103.jsxs)(import_core127.Group,{grow:!0,children:[(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,maw:"33%",children:[(0,import_jsx_runtime103.jsx)(IconUserSquare,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime103.jsx)(IconStethoscope,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),(0,import_jsx_runtime103.jsxs)(import_core127.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime103.jsx)(IconGenderFemale,{size:24,color:"gray"}),(0,import_jsx_runtime103.jsx)(import_core127.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),(0,import_jsx_runtime103.jsxs)(import_core127.Stack,{gap:"xs",children:[(0,import_jsx_runtime103.jsx)(import_core127.Anchor,{href:"#",children:"No upcoming appointments"}),(0,import_jsx_runtime103.jsx)(import_core127.Anchor,{href:"#",children:"No documented visits"}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Allergies,{patient,allergies}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(ProblemList,{patient,problems}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Medications,{patient,medicationRequests:medicationRequest}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(SmokingStatus,{patient,smokingStatus}),(0,import_jsx_runtime103.jsx)(import_core127.Divider,{}),(0,import_jsx_runtime103.jsx)(Vitals,{patient,vitals})]})]}):null}var import_core129=require("@medplum/core"),import_react64=require("react");var import_jsx_runtime104=require("react/jsx-runtime");function PatientTimeline(props){let loadTimelineResources=(0,import_react64.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_runtime104.jsx)(ResourceTimeline,{value:props.patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core129.createReference)(resource),sender:(0,import_core129.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core129.createReference)(resource),operator:(0,import_core129.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core130=require("@mantine/core"),import_core131=require("@medplum/core");var import_react65=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing",bottomActions:"PlanDefinitionBuilder_bottomActions"};var import_jsx_runtime105=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=a(),defaultValue2=ce(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react65.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react65.useState)(),[hoverKey,setHoverKey]=(0,import_react65.useState)(),[value,setValue]=(0,import_react65.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react65.useRef)();if(valueRef.current=value,(0,import_react65.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react65.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_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{label:"Plan Title",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x2=>changeProperty("action",x2)}),(0,import_jsx_runtime105.jsx)(import_core130.Button,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react65.useRef)();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_runtime105.jsxs)("div",{className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.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_runtime105.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime105.jsx)(import_core130.Anchor,{href:"#",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.editing]:editing,[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime105.jsxs)("div",{"data-testid":action.id,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[editing?(0,import_jsx_runtime105.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove}):(0,import_jsx_runtime105.jsx)(ActionDisplay,{action,actionType}),(0,import_jsx_runtime105.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime105.jsx)(import_core130.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove()},children:"Remove"})})]})}var timingProperty={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(t=>({code:t}))};function ActionDisplay(props){let{action,actionType}=props,[propertyValue,propertyType]=getActionTiming(action);return(0,import_jsx_runtime105.jsxs)("div",{children:[(0,import_jsx_runtime105.jsxs)("div",{children:[action.title||"Untitled"," ",actionType&&`(${actionType})`]}),action.definitionCanonical&&(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsx)(ReferenceDisplay,{value:{reference:action.definitionCanonical}})}),propertyValue&&(0,import_jsx_runtime105.jsx)("div",{children:(0,import_jsx_runtime105.jsx)(ResourcePropertyDisplay,{property:timingProperty,propertyType,value:propertyValue})})]})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react65.useState)(props.actionType);function changeProperty(property,value){props.onChange({...action,[property]:value})}return(0,import_jsx_runtime105.jsxs)(import_core130.Stack,{gap:"xl",children:[(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{name:`actionTitle-${action.id}`,label:"Title",defaultValue:action.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(import_core130.TextInput,{name:`actionDescription-${action.id}`,label:"Description",defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)}),(0,import_jsx_runtime105.jsx)(import_core130.NativeSelect,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${action.id}`,defaultValue:actionType,onChange:e=>setActionType(e.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),action.action&&action.action.length>0&&(0,import_jsx_runtime105.jsx)(ActionArrayBuilder,{actions:action.action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:x2=>changeProperty("action",x2)}),(()=>{switch(actionType){case"appointment":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action,onChange:props.onChange});case"lab":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action,onChange:props.onChange});case"questionnaire":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action,onChange:props.onChange});case"task":return(0,import_jsx_runtime105.jsx)(ActionResourceTypeBuilder,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action,onChange:props.onChange});default:return null}})(),(0,import_jsx_runtime105.jsx)(FormSection,{title:"Timing",description:"When the action should take place.",children:(0,import_jsx_runtime105.jsx)(ActionTimingInput,{name:"timing-"+action.id,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_runtime105.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core131.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function ActionTimingInput(props){let value=props.action,key="timing",[propertyValue,propertyType]=getActionTiming(value);return(0,import_jsx_runtime105.jsx)(ResourcePropertyInput,{property:timingProperty,name:"timing[x]",path:"PlanDefinition.timing[x]",defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{props.onChange(setPropertyValue(value,key,propName??key,timingProperty,newValue))},outcome:void 0})}function getInitialActionType(action){if(action.definitionCanonical?.startsWith("Schedule"))return"appointment";if(action.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(action.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function getActionTiming(action){return getValueAndType({type:"PlanDefinitionAction",value:action},"timing")}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_core135=require("@mantine/core"),import_core136=require("@medplum/core");var import_react68=require("react");var import_core133=require("@mantine/core"),import_core134=require("@medplum/core"),import_react67=require("react");var import_core132=require("@medplum/core"),QuestionnaireItemType=(QuestionnaireItemType2=>(QuestionnaireItemType2.group="group",QuestionnaireItemType2.display="display",QuestionnaireItemType2.question="question",QuestionnaireItemType2.boolean="boolean",QuestionnaireItemType2.decimal="decimal",QuestionnaireItemType2.integer="integer",QuestionnaireItemType2.date="date",QuestionnaireItemType2.dateTime="dateTime",QuestionnaireItemType2.time="time",QuestionnaireItemType2.string="string",QuestionnaireItemType2.text="text",QuestionnaireItemType2.url="url",QuestionnaireItemType2.choice="choice",QuestionnaireItemType2.openChoice="open-choice",QuestionnaireItemType2.attachment="attachment",QuestionnaireItemType2.reference="reference",QuestionnaireItemType2.quantity="quantity",QuestionnaireItemType2))(QuestionnaireItemType||{});function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,responseItems){if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(responseItems,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 getNewMultiSelectValues(selected,propertyName,item){return selected.map(o=>{let option=item.answerOption?.find(option2=>(0,import_core132.formatCoding)(option2.valueCoding)===o||option2[propertyName]===o),optionValue=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");return{[propertyName]:optionValue?.value}})}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_core132.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer[x]"),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=(0,import_core132.getTypedPropertyValue)({type:"QuestionnaireResponseItemAnswer",value:actualAnswerValue},"value[x]"),{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_core132.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_core132.deepClone)(item),extension=(0,import_core132.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_core132.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_core132.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:(0,import_core132.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item),status:"in-progress"}}function buildInitialResponseItems(items){return items?.map(buildInitialResponseItem)??[]}function buildInitialResponseItem(item){return{id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item),answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function formatReferenceString(typedValue){return typedValue.value.display||typedValue.value.reference||(0,import_core132.stringify)(typedValue.value)}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core132.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}var import_react66=require("react"),QuestionnaireFormContext=(0,import_react66.createContext)({});var import_jsx_runtime106=require("react/jsx-runtime");function QuestionnaireFormItem(props){let context=(0,import_react67.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((a2,idx)=>idx===props.index?newResponseAnswer:a2)??[],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)??(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value");switch(type){case"display":return(0,import_jsx_runtime106.jsx)("p",{children:props.item.text},props.item.linkId);case"boolean":return(0,import_jsx_runtime106.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime106.jsx)(import_core133.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);case"decimal":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"number",step:"any",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"number",step:1,id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"date",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return(0,import_jsx_runtime106.jsx)(DateTimeInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{type:"time",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return(0,import_jsx_runtime106.jsx)(import_core133.Textarea,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return(0,import_jsx_runtime106.jsx)(import_core133.Group,{py:4,children:(0,import_jsx_runtime106.jsx)(AttachmentInput,{name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return(0,import_jsx_runtime106.jsx)(ReferenceInput,{name,required:item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});case"quantity":return(0,import_jsx_runtime106.jsx)(QuantityInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});case"choice":case"open-choice":return isDropDownChoice(item)&&!item.answerValueSet?(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceSetInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});default:return null}}function QuestionnaireChoiceDropDownInput(props){let{name,item,initial,response}=props;if(!item.answerOption?.length)return(0,import_jsx_runtime106.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),data2=[""];for(let option of item.answerOption){let optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");data2.push(typedValueToString(optionValue))}let defaultValue2=getCurrentAnswer(response)??initialValue;if(item.repeats){let{propertyName,data:data3}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime106.jsx)(import_core133.MultiSelect,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[typedValueToString(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return(0,import_jsx_runtime106.jsx)(import_core133.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core134.capitalize)(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core134.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?(0,import_jsx_runtime106.jsx)(NoAnswerDisplay,{}):item.answerValueSet?(0,import_jsx_runtime106.jsx)(CodingInput,{name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code})}):(0,import_jsx_runtime106.jsx)(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core134.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),options=[],defaultValue2;if(item.answerOption)for(let i=0;i<item.answerOption.length;i++){let option=item.answerOption[i],optionName=`${name}-option-${i}`,optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");optionValue?.value&&(initialValue&&(0,import_core134.stringify)(optionValue)===(0,import_core134.stringify)(initialValue)&&(defaultValue2=optionName),options.push([optionName,optionValue]))}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);return(0,import_jsx_runtime106.jsx)(import_core133.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_core134.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>(0,import_jsx_runtime106.jsx)(import_core133.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime106.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return(0,import_jsx_runtime106.jsx)(import_core133.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getItemValue(answer){return(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswer",value:answer},"value")}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a2=>getItemValue(a2)).map(type=>(0,import_core134.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core134.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function typedValueToString(typedValue){if(typedValue)return typedValue.type==="CodeableConcept"?(0,import_core134.formatCodeableConcept)(typedValue.value):typedValue.type==="Coding"?(0,import_core134.formatCoding)(typedValue.value):typedValue.type==="Reference"?formatReferenceString(typedValue):typedValue.value.toString()}function isDropDownChoice(item){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_core134.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core134.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(a2=>({value:getValueAndLabel(a2,propertyName),label:getValueAndLabel(a2,propertyName)}));return{propertyName,data:data2}}function getValueAndLabel(option,propertyName){return(0,import_core134.formatCoding)(option.valueCoding)||option[propertyName]?.toString()}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"};var import_jsx_runtime107=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=a(),defaultValue2=ce(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react68.useState)(!1),[value,setValue]=(0,import_react68.useState)(),[selectedKey,setSelectedKey]=(0,import_react68.useState)(),[hoverKey,setHoverKey]=(0,import_react68.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react68.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react68.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_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime107.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime107.jsx)(import_core135.Button,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core136.isResource)(props.item),isContainer=isResource2||item.type==="group",linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react68.useRef)();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_runtime107.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime107.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime107.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime107.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[resource.title&&(0,import_jsx_runtime107.jsx)(import_core135.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime107.jsx)("div",{children:item.text}),!isContainer&&(0,import_jsx_runtime107.jsx)(QuestionnaireFormItem,{item,index:0,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.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_runtime107.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime107.jsx)(import_core135.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_runtime107.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime107.jsxs)(import_core135.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime107.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime107.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime107.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core136.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime107.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime107.jsx)(import_core135.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime107.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime107.jsxs)(import_core135.Box,{display:"flex",children:[(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime107.jsx)(import_core135.Space,{w:"lg"}),(0,import_jsx_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime107.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime107.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.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_runtime107.jsx)("div",{children:(0,import_jsx_runtime107.jsx)(import_core135.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_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime107.jsxs)(import_core135.Group,{children:[(0,import_jsx_runtime107.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_runtime107.jsx)(import_core135.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime107.jsx)(import_core135.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_core140=require("@mantine/core"),import_core141=require("@medplum/core");var import_react71=require("react");var import_core139=require("@mantine/core");var import_core137=require("@mantine/core"),import_react69=require("react");var import_jsx_runtime108=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react69.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return(0,import_jsx_runtime108.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!=="choice"&&item.type!=="open-choice";return item.type==="boolean"?(0,import_jsx_runtime108.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime108.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_2,index)=>(0,import_jsx_runtime108.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime108.jsx)(import_core137.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type==="choice"||item.type==="open-choice")return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core138=require("@mantine/core"),import_react70=require("react");var import_jsx_runtime109=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react70.useState)(props.response);if(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);setResponses([...responses,newResponse])}return(0,import_jsx_runtime109.jsxs)(import_jsx_runtime109.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime109.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime109.jsx)(import_core138.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_runtime109.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime109.jsx)(import_core138.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime109.jsx)(import_core138.Stack,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?(0,import_jsx_runtime109.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime109.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime109.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime110=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type==="group"?(0,import_jsx_runtime110.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime110.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime110.jsx)(import_core139.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[renderPages&&(0,import_jsx_runtime110.jsx)(import_core139.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime110.jsx)(import_core139.Stack,{children:form}),(0,import_jsx_runtime110.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep,prevStep,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.activePage>0,showNextButton=props.activePage<props.numberOfPages-1,showSubmitButton=props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime110.jsxs)(import_core139.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime110.jsx)(import_core139.Button,{type:"submit",children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime111=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=a(),source=medplum.getProfile(),[schemaLoaded,setSchemaLoaded]=(0,import_react71.useState)(!1),questionnaire=ce(props.questionnaire),[response,setResponse]=(0,import_react71.useState)(),[activePage,setActivePage]=(0,import_react71.useState)(0);(0,import_react71.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>medplum.requestSchema("QuestionnaireResponse")).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react71.useEffect)(()=>{setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)},[questionnaire]);function setItems(newResponseItems){let currentItems=response?.item??[],newResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems])};setResponse(newResponse)}function checkForQuestionEnabled(item){return isQuestionEnabled(item,response?.item??[])}if(!schemaLoaded||!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime111.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime111.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>{props.onSubmit&&response&&props.onSubmit({...response,questionnaire:(0,import_core141.getReferenceString)(questionnaire),subject:props.subject,source:(0,import_core141.createReference)(source),authored:new Date().toISOString(),status:"completed"})},children:[questionnaire.title&&(0,import_jsx_runtime111.jsx)(import_core140.Title,{children:questionnaire.title}),(0,import_jsx_runtime111.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:numberOfPages>1,activePage,numberOfPages,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}var import_core142=require("@mantine/core"),import_core143=require("@medplum/core");var import_react72=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime112=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_react72.useState)([]),[groupId,setGroupId]=(0,import_react72.useState)(1),[intervalId,setIntervalId]=(0,import_react72.useState)(1);return(0,import_react72.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime112.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime112.jsx)(import_core142.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime112.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime112.jsx)(import_core142.Group,{justify:"flex-end",children:(0,import_jsx_runtime112.jsx)(import_core142.Button,{type:"submit",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(g2=>g2.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(g2=>g2.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(g2=>g2.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_runtime112.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime112.jsxs)(import_core142.Stack,{gap:"lg",children:[(0,import_jsx_runtime112.jsx)(import_core142.Group,{justify:"flex-end",children:(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime112.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime112.jsx)(import_core142.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime112.jsxs)(import_core142.Stack,{gap:"xs",children:[(0,import_jsx_runtime112.jsxs)(import_core142.Group,{children:[(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsx)(import_core142.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_runtime112.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime112.jsx)(RangeInput,{onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.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_runtime112.jsxs)(import_core142.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime112.jsx)(import_core142.Group,{children:(0,import_jsx_runtime112.jsx)(import_core142.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_runtime112.jsxs)(import_core142.Group,{gap:"xs",children:[(0,import_jsx_runtime112.jsx)(import_core142.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime112.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime112.jsx)(RangeInput,{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_runtime112.jsx)(import_core142.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_runtime112.jsx)(import_core142.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(f2=>[f2,interval[f2]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core143.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core143.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_core143.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_core144=require("@mantine/core"),import_core145=require("@medplum/core");var import_react73=require("react");var import_jsx_runtime113=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=a(),requestGroup=ce(props.value),[startedLoading,setStartedLoading]=(0,import_react73.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react73.useState)();if((0,import_react73.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_runtime113.jsx)(import_core144.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_runtime113.jsxs)(import_react73.Fragment,{children:[(0,import_jsx_runtime113.jsx)(import_core144.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime113.jsx)(IconCheckbox,{}):(0,import_jsx_runtime113.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime113.jsxs)(import_core144.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime113.jsx)(import_core144.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime113.jsx)("div",{children:action.description}),(0,import_jsx_runtime113.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime113.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core145.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime113.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime113.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime113.jsxs)(import_core144.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime113.jsx)(import_core144.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime113.jsx)(import_core144.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_core145.getReferenceString)(entry.resource))return entry.resource}}var import_react74=require("react");var import_core146=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N2=orig.length,M=rev.length,MAX=N2+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 k2=-d;k2<=d;k2+=2){let kmiddle=middle+k2,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k2===-d||k2!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j2=i-k2,node={i,j:j2,prev:previousSnake(prev),snake:!1};for(;i<N2&&j2<M&&orig[i]===rev[j2];)i++,j2++;if(i>node.i&&(node={i,j:j2,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N2&&j2>=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,j2=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,j2)},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_core146.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a2,b2)=>a2.meta.lastUpdated.localeCompare(b2.meta.lastUpdated)),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 k2=0;k2<revision.revised.lines.length;k2++)table.splice(position+k2,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k2],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_runtime114=require("react/jsx-runtime");function ResourceBlame(props){let medplum=a(),[value,setValue]=(0,import_react74.useState)(props.history);if((0,import_react74.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_runtime114.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime114.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime114.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime114.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime114.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime114.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime114.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime114.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime114.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core147=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime115=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_core147.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core147.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime115.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime115.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime115.jsxs)(import_jsx_runtime115.Fragment,{children:["...",(0,import_jsx_runtime115.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime115.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
72
72
  `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime115.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
73
- `)}),"...",(0,import_jsx_runtime115.jsx)("br",{})]})}var import_core148=require("@mantine/core"),import_core149=require("@medplum/core");var import_react75=require("react");var import_jsx_runtime116=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=a(),defaultValue2=ce(props.defaultValue),[schemaLoaded,setSchemaLoaded]=(0,import_react75.useState)(),[value,setValue]=(0,import_react75.useState)();return(0,import_react75.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core149.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(profile.name);let modifiedDefaultValue=(0,import_core149.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else{let schemaName=props.schemaName??defaultValue2?.resourceType;medplum.requestSchema(schemaName).then(()=>{setValue(defaultValue2),setSchemaLoaded(schemaName)}).catch(console.log)}},[medplum,defaultValue2,props.schemaName,props.profileUrl]),!schemaLoaded||!value?(0,import_jsx_runtime116.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime116.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime116.jsxs)(import_core148.Stack,{mb:"xl",children:[(0,import_jsx_runtime116.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime116.jsx)(import_core148.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime116.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime116.jsx)(import_core148.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime116.jsx)(BackboneElementInput,{path:value.resourceType,typeName:schemaLoaded,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl}),(0,import_jsx_runtime116.jsxs)(import_core148.Group,{justify:"flex-end",mt:"xl",children:[(0,import_jsx_runtime116.jsx)(import_core148.Button,{type:"submit",children:"OK"}),props.onDelete&&(0,import_jsx_runtime116.jsx)(import_core148.Button,{variant:"outline",color:"red",type:"button",onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})}var import_core150=require("@mantine/core"),import_core151=require("@medplum/core");var import_react76=require("react");var import_jsx_runtime117=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=a(),[value,setValue]=(0,import_react76.useState)(props.history);return(0,import_react76.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_runtime117.jsxs)(import_core150.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Thead,{children:(0,import_jsx_runtime117.jsxs)(import_core150.Table.Tr,{children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Author"}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Date"}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime117.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime117.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime117.jsxs)(import_core150.Table.Tr,{children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_jsx_runtime117.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_core151.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_jsx_runtime117.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime117.jsx)(import_core150.Table.Tr,{children:(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{colSpan:3,children:(0,import_core151.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core152=require("@mantine/core"),import_core153=require("@medplum/core");var import_react77=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime118=require("react/jsx-runtime");function Scheduler(props){let schedule=ce(props.schedule),questionnaire=ce(props.questionnaire),[month,setMonth]=(0,import_react77.useState)(getStartMonth()),[date,setDate]=(0,import_react77.useState)(),[slot,setSlot]=(0,import_react77.useState)(),[response,setResponse]=(0,import_react77.useState)(),[slots]=ge("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core153.isReference)(props.schedule)?props.schedule.reference:(0,import_core153.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_runtime118.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime118.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime118.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime118.jsx)(import_core152.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime118.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime118.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime118.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime118.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime118.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime118.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime118.jsx)(import_core152.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_runtime118.jsx)("div",{children:(0,import_jsx_runtime118.jsx)(import_core152.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime118.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime118.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_core154=require("@medplum/core");var import_jsx_runtime119=require("react/jsx-runtime");function ServiceRequestTimeline(props){return(0,import_jsx_runtime119.jsx)(ResourceTimeline,{value:props.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_core154.createReference)(resource)],subject:resource.subject,sender:(0,import_core154.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core154.createReference)(resource)],subject:resource.subject,operator:(0,import_core154.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core155=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core156=require("@medplum/core");var import_jsx_runtime120=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=a(),{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",medplum.getBaseUrl()+"fhir/R4"),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core156.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime120.jsx)(import_core155.Anchor,{onClick:()=>launchApp(),...rest,children})}var import_core161=require("@medplum/core");var import_react81=require("react");var import_core157=require("@mantine/core"),import_core158=require("@medplum/core"),import_react78=require("react");var import_jsx_runtime121=require("react/jsx-runtime");function NewProjectForm(props){let medplum=a(),[outcome,setOutcome]=(0,import_react78.useState)();return(0,import_jsx_runtime121.jsxs)(Form,{style:{maxWidth:400},onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core158.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime121.jsxs)(import_core157.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime121.jsx)(Logo,{size:32}),(0,import_jsx_runtime121.jsx)(import_core157.Title,{children:"Create project"})]}),(0,import_jsx_runtime121.jsxs)(import_core157.Stack,{gap:"xl",children:[(0,import_jsx_runtime121.jsx)(import_core157.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime121.jsxs)(import_core157.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime121.jsx)(import_core157.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime121.jsx)(import_core157.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime121.jsx)(import_core157.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime121.jsx)(import_core157.Button,{type:"submit",children:"Create project"})})]})}var import_core159=require("@mantine/core"),import_core160=require("@medplum/core");var import_react80=require("react");var import_react79=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_runtime122=require("react/jsx-runtime");function GoogleButton(props){let medplum=a(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react79.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react79.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react79.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react79.useState)(!1);return(0,import_react79.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_runtime122.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__"}}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_runtime123=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=a(),[outcome,setOutcome]=(0,import_react80.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react80.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime123.jsxs)(Form,{style:{maxWidth:400},onSubmit:async formData=>{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_core160.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime123.jsx)(import_core159.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime123.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime123.jsxs)(import_jsx_runtime123.Fragment,{children:[(0,import_jsx_runtime123.jsx)(import_core159.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime123.jsx)(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,createUser:!0}))}catch(err){setOutcome((0,import_core160.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime123.jsx)(import_core159.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime123.jsxs)(import_core159.Stack,{gap:"xl",children:[(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime123.jsx)(import_core159.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime123.jsxs)(import_core159.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime123.jsxs)(import_core159.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime123.jsxs)(import_core159.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime123.jsx)(import_core159.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime123.jsx)(import_core159.Button,{type:"submit",children:"Create account"})]})]})}var import_jsx_runtime124=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=a(),[login,setLogin]=(0,import_react81.useState)(),[outcome,setOutcome]=(0,import_react81.useState)();(0,import_react81.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core161.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_runtime124.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime124.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime124.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime124.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications7=require("@mantine/notifications"),import_core169=require("@medplum/core");var import_react85=require("react");var import_core162=require("@mantine/core"),import_core163=require("@medplum/core");var import_react82=require("react");var import_jsx_runtime125=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react82.useState)();return email?(0,import_jsx_runtime125.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime125.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=a(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),isExternalAuth=(0,import_react82.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_react82.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_react82.useCallback)(async response=>{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime125.jsxs)(Form,{style:{maxWidth:400},onSubmit:handleSubmit,children:[(0,import_jsx_runtime125.jsx)(import_core162.Center,{style:{flexDirection:"column"},children}),googleClientId&&(0,import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment,{children:[(0,import_jsx_runtime125.jsx)(import_core162.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime125.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0}),(0,import_jsx_runtime125.jsxs)(import_core162.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime125.jsx)("div",{children:onRegister&&(0,import_jsx_runtime125.jsx)(import_core162.Anchor,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.Button,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=a(),[outcome,setOutcome]=(0,import_react82.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react82.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core163.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime125.jsxs)(Form,{style:{maxWidth:400},onSubmit:handleSubmit,children:[(0,import_jsx_runtime125.jsx)(import_core162.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime125.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime125.jsx)(import_core162.Stack,{gap:"xl",children:(0,import_jsx_runtime125.jsx)(import_core162.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime125.jsxs)(import_core162.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime125.jsx)(import_core162.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime125.jsx)(import_core162.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime125.jsx)(import_core162.Button,{type:"submit",children:"Sign in"})]})]})}var import_core164=require("@mantine/core"),import_core165=require("@medplum/core");var import_react83=require("react");var import_jsx_runtime126=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=a(),combobox=(0,import_core164.useCombobox)(),[search,setSearch]=(0,import_react83.useState)(""),[outcome,setOutcome]=(0,import_react83.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_core165.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime126.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime126.jsxs)(import_core164.Stack,{children:[(0,import_jsx_runtime126.jsxs)(import_core164.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime126.jsx)(Logo,{size:32}),(0,import_jsx_runtime126.jsx)(import_core164.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime126.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime126.jsxs)(import_core164.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime126.jsx)(import_core164.Combobox.EventsTarget,{children:(0,import_jsx_runtime126.jsx)(import_core164.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime126.jsx)("div",{children:(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime126.jsxs)(import_core164.Group,{children:[(0,import_jsx_runtime126.jsx)(import_core164.Avatar,{radius:"xl"}),(0,import_jsx_runtime126.jsxs)("div",{children:[(0,import_jsx_runtime126.jsx)(import_core164.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime126.jsx)(import_core164.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core166=require("@mantine/core");var import_jsx_runtime127=require("react/jsx-runtime");function ChooseScopeForm(props){let medplum=a();return(0,import_jsx_runtime127.jsx)(Form,{style:{maxWidth:400},onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:(0,import_jsx_runtime127.jsxs)(import_core166.Stack,{children:[(0,import_jsx_runtime127.jsxs)(import_core166.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime127.jsx)(Logo,{size:32}),(0,import_jsx_runtime127.jsx)(import_core166.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime127.jsx)(import_core166.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>(0,import_jsx_runtime127.jsx)(import_core166.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName))}),(0,import_jsx_runtime127.jsx)(import_core166.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime127.jsx)(import_core166.Button,{type:"submit",children:"Set scope"})})]})})}var import_core167=require("@mantine/core"),import_core168=require("@medplum/core");var import_react84=require("react");var import_jsx_runtime128=require("react/jsx-runtime");function MfaForm(props){let medplum=a(),[errorMessage,setErrorMessage]=(0,import_react84.useState)();return(0,import_jsx_runtime128.jsx)(Form,{style:{maxWidth:400},onSubmit:formData=>{setErrorMessage(void 0),medplum.post("auth/mfa/verify",{login:props.login,token:formData.token}).then(props.handleAuthResponse).catch(err=>setErrorMessage((0,import_core168.normalizeErrorString)(err)))},children:(0,import_jsx_runtime128.jsxs)(import_core167.Stack,{children:[(0,import_jsx_runtime128.jsxs)(import_core167.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime128.jsx)(Logo,{size:32}),(0,import_jsx_runtime128.jsx)(import_core167.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime128.jsx)(import_core167.Alert,{icon:(0,import_jsx_runtime128.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime128.jsx)(import_core167.Stack,{children:(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{name:"token",label:"MFA code",required:!0})}),(0,import_jsx_runtime128.jsx)(import_core167.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime128.jsx)(import_core167.Button,{type:"submit",children:"Submit code"})})]})})}var import_jsx_runtime129=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=a(),[login,setLogin]=(0,import_react85.useState)(),[mfaRequired,setAuthenticatorRequired]=(0,import_react85.useState)(!1),[memberships,setMemberships]=(0,import_react85.useState)(),handleCode=(0,import_react85.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core169.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react85.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_react85.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react85.useEffect)(()=>{loginCode&&!login&&medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core169.normalizeErrorString)(err)}))},[medplum,loginCode,login,handleAuthResponse]),(0,import_jsx_runtime129.jsx)(Document,{width:450,children:login?mfaRequired?(0,import_jsx_runtime129.jsx)(MfaForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime129.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime129.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime129.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime129.jsx)("div",{children:"Success"}):(0,import_jsx_runtime129.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}
73
+ `)}),"...",(0,import_jsx_runtime115.jsx)("br",{})]})}var import_core148=require("@mantine/core"),import_core149=require("@medplum/core");var import_react75=require("react");var import_jsx_runtime116=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=a(),defaultValue2=ce(props.defaultValue),[schemaLoaded,setSchemaLoaded]=(0,import_react75.useState)(),[value,setValue]=(0,import_react75.useState)();return(0,import_react75.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core149.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(profile.name);let modifiedDefaultValue=(0,import_core149.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else{let schemaName=props.schemaName??defaultValue2?.resourceType;medplum.requestSchema(schemaName).then(()=>{setValue(defaultValue2),setSchemaLoaded(schemaName)}).catch(console.log)}},[medplum,defaultValue2,props.schemaName,props.profileUrl]),!schemaLoaded||!value?(0,import_jsx_runtime116.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime116.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime116.jsxs)(import_core148.Stack,{mb:"xl",children:[(0,import_jsx_runtime116.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime116.jsx)(import_core148.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime116.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime116.jsx)(import_core148.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime116.jsx)(BackboneElementInput,{path:value.resourceType,typeName:schemaLoaded,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl}),(0,import_jsx_runtime116.jsxs)(import_core148.Group,{justify:"flex-end",mt:"xl",children:[(0,import_jsx_runtime116.jsx)(import_core148.Button,{type:"submit",children:"OK"}),props.onDelete&&(0,import_jsx_runtime116.jsx)(import_core148.Button,{variant:"outline",color:"red",type:"button",onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})}var import_core150=require("@mantine/core"),import_core151=require("@medplum/core");var import_react76=require("react");var import_jsx_runtime117=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=a(),[value,setValue]=(0,import_react76.useState)(props.history);return(0,import_react76.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_runtime117.jsxs)(import_core150.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Thead,{children:(0,import_jsx_runtime117.jsxs)(import_core150.Table.Tr,{children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Author"}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Date"}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime117.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime117.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime117.jsxs)(import_core150.Table.Tr,{children:[(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_jsx_runtime117.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_core151.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{children:(0,import_jsx_runtime117.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime117.jsx)(import_core150.Table.Tr,{children:(0,import_jsx_runtime117.jsx)(import_core150.Table.Td,{colSpan:3,children:(0,import_core151.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core152=require("@mantine/core"),import_core153=require("@medplum/core");var import_react77=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime118=require("react/jsx-runtime");function Scheduler(props){let schedule=ce(props.schedule),questionnaire=ce(props.questionnaire),[month,setMonth]=(0,import_react77.useState)(getStartMonth()),[date,setDate]=(0,import_react77.useState)(),[slot,setSlot]=(0,import_react77.useState)(),[response,setResponse]=(0,import_react77.useState)(),[slots]=ge("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core153.isReference)(props.schedule)?props.schedule.reference:(0,import_core153.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_runtime118.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime118.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime118.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime118.jsx)(import_core152.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime118.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime118.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime118.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime118.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime118.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime118.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime118.jsx)(import_core152.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_runtime118.jsx)("div",{children:(0,import_jsx_runtime118.jsx)(import_core152.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime118.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime118.jsxs)("div",{children:[(0,import_jsx_runtime118.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime118.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_core154=require("@medplum/core");var import_jsx_runtime119=require("react/jsx-runtime");function ServiceRequestTimeline(props){return(0,import_jsx_runtime119.jsx)(ResourceTimeline,{value:props.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_core154.createReference)(resource)],subject:resource.subject,sender:(0,import_core154.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core154.createReference)(resource)],subject:resource.subject,operator:(0,import_core154.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core155=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core156=require("@medplum/core");var import_jsx_runtime120=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=a(),{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",medplum.getBaseUrl()+"fhir/R4"),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core156.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime120.jsx)(import_core155.Anchor,{onClick:()=>launchApp(),...rest,children})}var import_core161=require("@medplum/core");var import_react81=require("react");var import_core157=require("@mantine/core"),import_core158=require("@medplum/core"),import_react78=require("react");var import_jsx_runtime121=require("react/jsx-runtime");function NewProjectForm(props){let medplum=a(),[outcome,setOutcome]=(0,import_react78.useState)();return(0,import_jsx_runtime121.jsxs)(Form,{style:{maxWidth:400},onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core158.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime121.jsxs)(import_core157.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime121.jsx)(Logo,{size:32}),(0,import_jsx_runtime121.jsx)(import_core157.Title,{children:"Create project"})]}),(0,import_jsx_runtime121.jsxs)(import_core157.Stack,{gap:"xl",children:[(0,import_jsx_runtime121.jsx)(import_core157.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime121.jsxs)(import_core157.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime121.jsx)(import_core157.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime121.jsx)(import_core157.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime121.jsx)(import_core157.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime121.jsx)(import_core157.Button,{type:"submit",children:"Create project"})})]})}var import_core159=require("@mantine/core"),import_core160=require("@medplum/core");var import_react80=require("react");var import_react79=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_runtime122=require("react/jsx-runtime");function GoogleButton(props){let medplum=a(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react79.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react79.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react79.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react79.useState)(!1);return(0,import_react79.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_runtime122.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__"}}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_runtime123=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=a(),[outcome,setOutcome]=(0,import_react80.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react80.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime123.jsxs)(Form,{style:{maxWidth:400},onSubmit:async formData=>{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_core160.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime123.jsx)(import_core159.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime123.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime123.jsxs)(import_jsx_runtime123.Fragment,{children:[(0,import_jsx_runtime123.jsx)(import_core159.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime123.jsx)(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,createUser:!0}))}catch(err){setOutcome((0,import_core160.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime123.jsx)(import_core159.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime123.jsxs)(import_core159.Stack,{gap:"xl",children:[(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime123.jsx)(import_core159.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime123.jsx)(import_core159.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime123.jsxs)(import_core159.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime123.jsxs)(import_core159.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime123.jsx)(import_core159.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime123.jsxs)(import_core159.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime123.jsx)(import_core159.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime123.jsx)(import_core159.Button,{type:"submit",children:"Create account"})]})]})}var import_jsx_runtime124=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=a(),[login,setLogin]=(0,import_react81.useState)(),[outcome,setOutcome]=(0,import_react81.useState)();(0,import_react81.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core161.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_runtime124.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime124.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime124.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime124.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications7=require("@mantine/notifications"),import_core169=require("@medplum/core");var import_react85=require("react");var import_core162=require("@mantine/core"),import_core163=require("@medplum/core");var import_react82=require("react");var import_jsx_runtime125=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react82.useState)();return email?(0,import_jsx_runtime125.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime125.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=a(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react82.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react82.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_react82.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_react82.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core163.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime125.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime125.jsx)(import_core162.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime125.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment,{children:[(0,import_jsx_runtime125.jsx)(import_core162.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime125.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime125.jsxs)(import_core162.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime125.jsx)("div",{children:onRegister&&(0,import_jsx_runtime125.jsx)(import_core162.Anchor,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime125.jsx)(import_core162.Button,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=a(),[outcome,setOutcome]=(0,import_react82.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react82.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core163.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime125.jsxs)(Form,{style:{maxWidth:400},onSubmit:handleSubmit,children:[(0,import_jsx_runtime125.jsx)(import_core162.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime125.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime125.jsx)(import_core162.Stack,{gap:"xl",children:(0,import_jsx_runtime125.jsx)(import_core162.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime125.jsxs)(import_core162.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime125.jsx)(import_core162.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime125.jsx)(import_core162.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime125.jsx)(import_core162.Button,{type:"submit",children:"Sign in"})]})]})}var import_core164=require("@mantine/core"),import_core165=require("@medplum/core");var import_react83=require("react");var import_jsx_runtime126=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=a(),combobox=(0,import_core164.useCombobox)(),[search,setSearch]=(0,import_react83.useState)(""),[outcome,setOutcome]=(0,import_react83.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_core165.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime126.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime126.jsxs)(import_core164.Stack,{children:[(0,import_jsx_runtime126.jsxs)(import_core164.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime126.jsx)(Logo,{size:32}),(0,import_jsx_runtime126.jsx)(import_core164.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime126.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime126.jsxs)(import_core164.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime126.jsx)(import_core164.Combobox.EventsTarget,{children:(0,import_jsx_runtime126.jsx)(import_core164.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime126.jsx)("div",{children:(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime126.jsx)(import_core164.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime126.jsxs)(import_core164.Group,{children:[(0,import_jsx_runtime126.jsx)(import_core164.Avatar,{radius:"xl"}),(0,import_jsx_runtime126.jsxs)("div",{children:[(0,import_jsx_runtime126.jsx)(import_core164.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime126.jsx)(import_core164.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core166=require("@mantine/core");var import_jsx_runtime127=require("react/jsx-runtime");function ChooseScopeForm(props){let medplum=a();return(0,import_jsx_runtime127.jsx)(Form,{style:{maxWidth:400},onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:(0,import_jsx_runtime127.jsxs)(import_core166.Stack,{children:[(0,import_jsx_runtime127.jsxs)(import_core166.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime127.jsx)(Logo,{size:32}),(0,import_jsx_runtime127.jsx)(import_core166.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime127.jsx)(import_core166.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>(0,import_jsx_runtime127.jsx)(import_core166.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName))}),(0,import_jsx_runtime127.jsx)(import_core166.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime127.jsx)(import_core166.Button,{type:"submit",children:"Set scope"})})]})})}var import_core167=require("@mantine/core"),import_core168=require("@medplum/core");var import_react84=require("react");var import_jsx_runtime128=require("react/jsx-runtime");function MfaForm(props){let medplum=a(),[errorMessage,setErrorMessage]=(0,import_react84.useState)();return(0,import_jsx_runtime128.jsx)(Form,{style:{maxWidth:400},onSubmit:formData=>{setErrorMessage(void 0),medplum.post("auth/mfa/verify",{login:props.login,token:formData.token}).then(props.handleAuthResponse).catch(err=>setErrorMessage((0,import_core168.normalizeErrorString)(err)))},children:(0,import_jsx_runtime128.jsxs)(import_core167.Stack,{children:[(0,import_jsx_runtime128.jsxs)(import_core167.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime128.jsx)(Logo,{size:32}),(0,import_jsx_runtime128.jsx)(import_core167.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime128.jsx)(import_core167.Alert,{icon:(0,import_jsx_runtime128.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime128.jsx)(import_core167.Stack,{children:(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{name:"token",label:"MFA code",required:!0})}),(0,import_jsx_runtime128.jsx)(import_core167.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime128.jsx)(import_core167.Button,{type:"submit",children:"Submit code"})})]})})}var import_jsx_runtime129=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=a(),[login,setLogin]=(0,import_react85.useState)(),[mfaRequired,setAuthenticatorRequired]=(0,import_react85.useState)(!1),[memberships,setMemberships]=(0,import_react85.useState)(),handleCode=(0,import_react85.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core169.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react85.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_react85.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react85.useEffect)(()=>{loginCode&&!login&&medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core169.normalizeErrorString)(err)}))},[medplum,loginCode,login,handleAuthResponse]),(0,import_jsx_runtime129.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime129.jsx)(MfaForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime129.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime129.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime129.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime129.jsx)("div",{children:"Success"}):(0,import_jsx_runtime129.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}
74
74
  //# sourceMappingURL=index.cjs.map