"use strict";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function(){return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__reExport=(target,mod,secondTarget)=>(__copyProps(target,mod,"default"),secondTarget&&__copyProps(secondTarget,mod,"default")),__toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_pointer=__commonJS({"../../node_modules/rfc6902/pointer.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=exports.escapeToken=exports.unescapeToken=void 0;function unescapeToken(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}exports.unescapeToken=unescapeToken;function escapeToken(token){return token.replace(/~/g,"~0").replace(/\//g,"~1")}exports.escapeToken=escapeToken;var Pointer=function(){function Pointer2(tokens){tokens===void 0&&(tokens=[""]),this.tokens=tokens}return Pointer2.fromJSON=function(path){var tokens=path.split("/").map(unescapeToken);if(tokens[0]!=="")throw new Error("Invalid JSON Pointer: ".concat(path));return new Pointer2(tokens)},Pointer2.prototype.toString=function(){return this.tokens.map(escapeToken).join("/")},Pointer2.prototype.evaluate=function(object){for(var parent=null,key="",value=object,i=1,l=this.tokens.length;i0&&j>0&&!diff2(input[i-1],output[j-1],ptr.add(String(i-1))).length)memoized=dist(i-1,j-1);else{var alternatives=[];if(i>0){var remove_base=dist(i-1,j),remove_operation={op:"remove",index:i-1};alternatives.push(appendArrayOperation(remove_base,remove_operation))}if(j>0){var add_base=dist(i,j-1),add_operation={op:"add",index:i-1,value:output[j-1]};alternatives.push(appendArrayOperation(add_base,add_operation))}if(i>0&&j>0){var replace_base=dist(i-1,j-1),replace_operation={op:"replace",index:i-1,original:input[i-1],value:output[j-1]};alternatives.push(appendArrayOperation(replace_base,replace_operation))}var best=alternatives.sort(function(a,b){return a.cost-b.cost})[0];memoized=best}memo2[memo_key]=memoized}return memoized}var input_length=isNaN(input.length)||input.length<=0?0:input.length,output_length=isNaN(output.length)||output.length<=0?0:output.length,array_operations=dist(input_length,output_length).operations,padded_operations=array_operations.reduce(function(_a,array_operation){var operations=_a[0],padding=_a[1];if(isArrayAdd(array_operation)){var padded_index=array_operation.index+1+padding,index_token=padded_index=endpoint.parent.length)return new MissingError(operation.path)}else if(endpoint.value===void 0)return new MissingError(operation.path);return endpoint.parent[endpoint.key]=(0,util_1.clone)(operation.value),null}exports.replace=replace;function move(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_remove(from_endpoint.parent,from_endpoint.key),_add(endpoint.parent,endpoint.key,from_endpoint.value),null)}exports.move=move;function copy(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_add(endpoint.parent,endpoint.key,(0,util_1.clone)(from_endpoint.value)),null)}exports.copy=copy;function test(object,operation){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return(0,diff_1.diffAny)(endpoint.value,operation.value,new pointer_1.Pointer).length?new TestError(endpoint.value,operation.value):null}exports.test=test;var InvalidOperationError=function(_super){__extends(InvalidOperationError2,_super);function InvalidOperationError2(operation){var _this=_super.call(this,"Invalid operation: ".concat(operation.op))||this;return _this.operation=operation,_this.name="InvalidOperationError",_this}return InvalidOperationError2}(Error);exports.InvalidOperationError=InvalidOperationError;function apply(object,operation){switch(operation.op){case"add":return add(object,operation);case"remove":return remove(object,operation);case"replace":return replace(object,operation);case"move":return move(object,operation);case"copy":return copy(object,operation);case"test":return test(object,operation)}return new InvalidOperationError(operation)}exports.apply=apply}});var require_rfc6902=__commonJS({"../../node_modules/rfc6902/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.createTests=exports.createPatch=exports.applyPatch=exports.Pointer=void 0;var pointer_1=require_pointer();Object.defineProperty(exports,"Pointer",{enumerable:!0,get:function(){return pointer_1.Pointer}});var patch_1=require_patch(),diff_1=require_diff();function applyPatch(object,patch){return patch.map(function(operation){return(0,patch_1.apply)(object,operation)})}exports.applyPatch=applyPatch;function wrapVoidableDiff(diff2){function wrappedDiff(input,output,ptr){var custom_patch=diff2(input,output,ptr);return Array.isArray(custom_patch)?custom_patch:(0,diff_1.diffAny)(input,output,ptr,wrappedDiff)}return wrappedDiff}function createPatch2(input,output,diff2){var ptr=new pointer_1.Pointer;return(diff2?wrapVoidableDiff(diff2):diff_1.diffAny)(input,output,ptr)}exports.createPatch=createPatch2;function createTest(input,path){var endpoint=pointer_1.Pointer.fromJSON(path).evaluate(input);if(endpoint!==void 0)return{op:"test",path,value:endpoint.value}}function createTests(input,patch){var tests=new Array;return patch.filter(diff_1.isDestructive).forEach(function(operation){var pathTest=createTest(input,operation.path);if(pathTest&&tests.push(pathTest),"from"in operation){var fromTest=createTest(input,operation.from);fromTest&&tests.push(fromTest)}}),tests}exports.createTests=createTests}});var index_exports={};__export(index_exports,{AddressDisplay:()=>AddressDisplay,AddressInput:()=>AddressInput,AnnotationInput:()=>AnnotationInput,AppShell:()=>AppShell,AsyncAutocomplete:()=>AsyncAutocomplete,AttachmentArrayDisplay:()=>AttachmentArrayDisplay,AttachmentArrayInput:()=>AttachmentArrayInput,AttachmentButton:()=>AttachmentButton,AttachmentDisplay:()=>AttachmentDisplay,AttachmentInput:()=>AttachmentInput,BackboneElementDisplay:()=>BackboneElementDisplay,BackboneElementInput:()=>BackboneElementInput,BaseChat:()=>BaseChat,CalendarInput:()=>CalendarInput,ChatModal:()=>ChatModal,CheckboxFormSection:()=>CheckboxFormSection,CodeInput:()=>CodeInput,CodeableConceptDisplay:()=>CodeableConceptDisplay,CodeableConceptInput:()=>CodeableConceptInput,CodingDisplay:()=>CodingDisplay,CodingInput:()=>CodingInput,ContactDetailDisplay:()=>ContactDetailDisplay,ContactDetailInput:()=>ContactDetailInput,ContactPointDisplay:()=>ContactPointDisplay,ContactPointInput:()=>ContactPointInput,Container:()=>Container,DateTimeInput:()=>DateTimeInput,DefaultResourceTimeline:()=>DefaultResourceTimeline,DescriptionList:()=>DescriptionList,DescriptionListEntry:()=>DescriptionListEntry,DiagnosticReportDisplay:()=>DiagnosticReportDisplay,Document:()=>Document,ElementDefinitionInputSelector:()=>ElementDefinitionInputSelector,ElementDefinitionTypeInput:()=>ElementDefinitionTypeInput,EncounterTimeline:()=>EncounterTimeline,ErrorBoundary:()=>ErrorBoundary,FhirPathTable:()=>FhirPathTable,Form:()=>Form,FormSection:()=>FormSection,Header:()=>Header,HumanNameDisplay:()=>HumanNameDisplay,HumanNameInput:()=>HumanNameInput,IdentifierDisplay:()=>IdentifierDisplay,IdentifierInput:()=>IdentifierInput,Loading:()=>Loading,Logo:()=>Logo,MeasureReportDisplay:()=>MeasureReportDisplay,MedplumLink:()=>MedplumLink,MemoizedFhirPathTable:()=>MemoizedFhirPathTable,MemoizedSearchControl:()=>MemoizedSearchControl,MoneyDisplay:()=>MoneyDisplay,MoneyInput:()=>MoneyInput,Navbar:()=>Navbar,NoteDisplay:()=>NoteDisplay,NotificationIcon:()=>NotificationIcon,ObservationTable:()=>ObservationTable,OperationOutcomeAlert:()=>OperationOutcomeAlert,Panel:()=>Panel,PatientExportForm:()=>PatientExportForm,PatientSummary:()=>PatientSummary,PatientTimeline:()=>PatientTimeline,PlanDefinitionBuilder:()=>PlanDefinitionBuilder,QuantityDisplay:()=>QuantityDisplay,QuantityInput:()=>QuantityInput,QuestionnaireBuilder:()=>QuestionnaireBuilder,QuestionnaireForm:()=>QuestionnaireForm,QuestionnaireFormContext:()=>QuestionnaireFormContext,QuestionnaireItemType:()=>QuestionnaireItemType,RangeDisplay:()=>RangeDisplay,RangeInput:()=>RangeInput,RatioInput:()=>RatioInput,ReferenceDisplay:()=>ReferenceDisplay,ReferenceInput:()=>ReferenceInput,ReferenceRangeEditor:()=>ReferenceRangeEditor,ReferenceRangeGroupEditor:()=>ReferenceRangeGroupEditor,RegisterForm:()=>RegisterForm,RequestGroupDisplay:()=>RequestGroupDisplay,ResourceArrayDisplay:()=>ResourceArrayDisplay,ResourceArrayInput:()=>ResourceArrayInput,ResourceAvatar:()=>ResourceAvatar,ResourceBadge:()=>ResourceBadge,ResourceBlame:()=>ResourceBlame,ResourceDiff:()=>ResourceDiff,ResourceForm:()=>ResourceForm,ResourceHistoryTable:()=>ResourceHistoryTable,ResourceInput:()=>ResourceInput,ResourceName:()=>ResourceName,ResourcePropertyDisplay:()=>ResourcePropertyDisplay,ResourcePropertyInput:()=>ResourcePropertyInput,ResourceTable:()=>ResourceTable,ResourceTimeline:()=>ResourceTimeline,Scheduler:()=>Scheduler,SearchChangeEvent:()=>SearchChangeEvent,SearchClickEvent:()=>SearchClickEvent,SearchControl:()=>SearchControl,SearchFieldEditor:()=>SearchFieldEditor,SearchFilterEditor:()=>SearchFilterEditor,SearchLoadEvent:()=>SearchLoadEvent,ServiceRequestTimeline:()=>ServiceRequestTimeline,SignInForm:()=>SignInForm,SmartAppLaunchLink:()=>SmartAppLaunchLink,StatusBadge:()=>StatusBadge,ThreadChat:()=>ThreadChat,Timeline:()=>Timeline,TimelineItem:()=>TimelineItem,TimingInput:()=>TimingInput,ValueSetAutocomplete:()=>ValueSetAutocomplete,addDateFilterBetween:()=>addDateFilterBetween,addField:()=>addField,addFilter:()=>addFilter,addLastMonthFilter:()=>addLastMonthFilter,addMissingFilter:()=>addMissingFilter,addNextMonthFilter:()=>addNextMonthFilter,addThisMonthFilter:()=>addThisMonthFilter,addTodayFilter:()=>addTodayFilter,addTomorrowFilter:()=>addTomorrowFilter,addYearToDateFilter:()=>addYearToDateFilter,addYesterdayFilter:()=>addYesterdayFilter,buildFieldNameString:()=>buildFieldNameString,buildInitialResponse:()=>buildInitialResponse,buildInitialResponseItem:()=>buildInitialResponseItem,clearFilters:()=>clearFilters,clearFiltersOnField:()=>clearFiltersOnField,convertIsoToLocal:()=>convertIsoToLocal,convertLocalToIso:()=>convertLocalToIso,createScriptTag:()=>createScriptTag,deleteFilter:()=>deleteFilter,evaluateCalculatedExpressionsInQuestionnaire:()=>evaluateCalculatedExpressionsInQuestionnaire,getErrorsForInput:()=>getErrorsForInput,getFieldDefinitions:()=>getFieldDefinitions,getIssuesForExpression:()=>getIssuesForExpression,getItemAnswerOptionValue:()=>getItemAnswerOptionValue,getItemEnableWhenValueAnswer:()=>getItemEnableWhenValueAnswer,getItemInitialValue:()=>getItemInitialValue,getNewMultiSelectValues:()=>getNewMultiSelectValues,getNumberOfPages:()=>getNumberOfPages,getOpString:()=>getOpString,getQuestionnaireItemReferenceFilter:()=>getQuestionnaireItemReferenceFilter,getQuestionnaireItemReferenceTargetTypes:()=>getQuestionnaireItemReferenceTargetTypes,getRecaptcha:()=>getRecaptcha,getResponseItemAnswerValue:()=>getResponseItemAnswerValue,getSearchOperators:()=>getSearchOperators,getSortField:()=>getSortField,getValuePath:()=>getValuePath,initRecaptcha:()=>initRecaptcha,isCheckboxCell:()=>isCheckboxCell,isChoiceQuestion:()=>isChoiceQuestion,isQuestionEnabled:()=>isQuestionEnabled,isSortDescending:()=>isSortDescending,isSupportedProfileStructureDefinition:()=>isSupportedProfileStructureDefinition,killEvent:()=>killEvent,mergeUpdatedItems:()=>mergeUpdatedItems,parseForm:()=>parseForm,renderValue:()=>renderValue,sendCommand:()=>sendCommand,setFilters:()=>setFilters,setOffset:()=>setOffset,setPage:()=>setPage,setPropertyValue:()=>setPropertyValue,setQuestionnaireItemReferenceTargetTypes:()=>setQuestionnaireItemReferenceTargetTypes,setSort:()=>setSort,sortByDateAndPriority:()=>sortByDateAndPriority,toggleSort:()=>toggleSort,typedValueToResponseItem:()=>typedValueToResponseItem});module.exports=__toCommonJS(index_exports);__reExport(index_exports,require("@medplum/react-hooks"),module.exports);var import_core=require("@medplum/core"),import_jsx_runtime=require("react/jsx-runtime");function AddressDisplay(props){let address=props.value;return address?(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{children:(0,import_core.formatAddress)(address)}):null}var import_core3=require("@mantine/core"),import_react2=require("react");var import_core2=require("@medplum/core"),import_react=require("react");var DEFAULT_IGNORED_PROPERTIES=["meta","implicitRules","contained","extension","modifierExtension"],DEFAULT_IGNORED_NON_NESTED_PROPERTIES=["language","text"];var ElementsContext=(0,import_react.createContext)({path:"",profileUrl:void 0,elements:Object.create(null),elementsByPath:Object.create(null),getExtendedProps:()=>({readonly:!1,hidden:!1}),accessPolicyResource:void 0,debugMode:!1,isDefaultContext:!0});ElementsContext.displayName="ElementsContext";var EXTENSION_KEYS=["extension","modifierExtension"],IGNORED_PROPERTIES=["id",...DEFAULT_IGNORED_PROPERTIES].filter(prop=>!EXTENSION_KEYS.includes(prop));function getElementsToRender(inputElements){return Object.entries(inputElements).filter(([key,element])=>!(0,import_core2.isPopulated)(element.type)||element.max===0||element.path.toLowerCase().endsWith("extension.url")&&element.fixed||EXTENSION_KEYS.includes(key)&&!(0,import_core2.isPopulated)(element.slicing?.slices)||IGNORED_PROPERTIES.includes(key)?!1:!(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&element.path.split(".").length===2||key.includes(".")))}var import_jsx_runtime2=require("react/jsx-runtime");function getLine(address,index){return address.line&&address.line.length>index?address.line[index]:""}function setLine(address,index,str){let line=address.line||[];for(;line.length<=index;)line.push("");return line[index]=str,{...address,line}}function AddressInput(props){let[value,setValue]=(0,import_react2.useState)(props.defaultValue||{}),valueRef=(0,import_react2.useRef)();valueRef.current=value;let{getExtendedProps}=(0,import_react2.useContext)(ElementsContext),[useProps,typeProps,line1Props,line2Props,cityProps,stateProps,postalCodeProps]=(0,import_react2.useMemo)(()=>["use","type","line1","line2","city","state","postalCode"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...valueRef.current,use})}function setType(type){setValueWrapper({...valueRef.current,type})}function setLine1(line1){setValueWrapper(setLine(valueRef.current||{},0,line1))}function setLine2(line2){setValueWrapper(setLine(valueRef.current||{},1,line2))}function setCity(city){setValueWrapper({...valueRef.current,city})}function setState(state){setValueWrapper({...valueRef.current,state})}function setPostalCode(postalCode){setValueWrapper({...valueRef.current,postalCode})}return(0,import_jsx_runtime2.jsxs)(import_core3.Group,{gap:"xs",wrap:"nowrap",grow:!0,children:[(0,import_jsx_runtime2.jsx)(import_core3.NativeSelect,{disabled:props.disabled||useProps?.readonly,"data-testid":"address-use",defaultValue:value.use,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","billing"]}),(0,import_jsx_runtime2.jsx)(import_core3.NativeSelect,{disabled:props.disabled||typeProps?.readonly,"data-testid":"address-type",defaultValue:value.type,onChange:e=>setType(e.currentTarget.value),data:["","postal","physical","both"]}),(0,import_jsx_runtime2.jsx)(import_core3.TextInput,{disabled:props.disabled||line1Props?.readonly,placeholder:"Line 1",defaultValue:getLine(value,0),onChange:e=>setLine1(e.currentTarget.value)}),(0,import_jsx_runtime2.jsx)(import_core3.TextInput,{disabled:props.disabled||line2Props?.readonly,placeholder:"Line 2",defaultValue:getLine(value,1),onChange:e=>setLine2(e.currentTarget.value)}),(0,import_jsx_runtime2.jsx)(import_core3.TextInput,{disabled:props.disabled||cityProps?.readonly,placeholder:"City",defaultValue:value.city,onChange:e=>setCity(e.currentTarget.value)}),(0,import_jsx_runtime2.jsx)(import_core3.TextInput,{disabled:props.disabled||stateProps?.readonly,placeholder:"State",defaultValue:value.state,onChange:e=>setState(e.currentTarget.value)}),(0,import_jsx_runtime2.jsx)(import_core3.TextInput,{disabled:props.disabled||postalCodeProps?.readonly,placeholder:"Postal Code",defaultValue:value.postalCode,onChange:e=>setPostalCode(e.currentTarget.value)})]})}var import_core4=require("@mantine/core"),import_core5=require("@medplum/core"),import_react_hooks=require("@medplum/react-hooks"),import_react3=require("react"),import_jsx_runtime3=require("react/jsx-runtime");function AnnotationInput(props){let author=(0,import_react_hooks.useMedplumProfile)(),[value,setValue]=(0,import_react3.useState)(props.defaultValue||{});function setText(text){let newValue=text?{text,authorReference:author&&(0,import_core5.createReference)(author),time:new Date().toISOString()}:{};setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{disabled:props.disabled,name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}var import_core26=require("@mantine/core"),import_notifications3=require("@mantine/notifications"),import_react_hooks10=require("@medplum/react-hooks"),import_react13=require("react");var import_core6=require("@mantine/core"),import_core7=require("@medplum/core");var import_react4=require("react");var defaultAttributes={outline:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"},filled:{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"currentColor",stroke:"none"}};var createReactComponent=(type,iconName,iconNamePascal,iconNode)=>{let Component2=(0,import_react4.forwardRef)(({color="currentColor",size=24,stroke=2,title,className,children,...rest},ref)=>(0,import_react4.createElement)("svg",{ref,...defaultAttributes[type],width:size,height:size,className:["tabler-icon",`tabler-icon-${iconName}`,className].join(" "),...type==="filled"?{fill:color}:{strokeWidth:stroke,stroke:color},...rest},[title&&(0,import_react4.createElement)("title",{key:"svg-title"},title),...iconNode.map(([tag,attrs])=>(0,import_react4.createElement)(tag,attrs)),...Array.isArray(children)?children:[children]]));return Component2.displayName=`${iconNamePascal}`,Component2};var IconAdjustmentsHorizontal=createReactComponent("outline","adjustments-horizontal","IconAdjustmentsHorizontal",[["path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-0"}],["path",{d:"M4 6l8 0",key:"svg-1"}],["path",{d:"M16 6l4 0",key:"svg-2"}],["path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-3"}],["path",{d:"M4 12l2 0",key:"svg-4"}],["path",{d:"M10 12l10 0",key:"svg-5"}],["path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-6"}],["path",{d:"M4 18l11 0",key:"svg-7"}],["path",{d:"M19 18l1 0",key:"svg-8"}]]);var IconAlertCircle=createReactComponent("outline","alert-circle","IconAlertCircle",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 8v4",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]]);var IconArrowDown=createReactComponent("outline","arrow-down","IconArrowDown",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 13l-6 6",key:"svg-1"}],["path",{d:"M6 13l6 6",key:"svg-2"}]]);var IconArrowRight=createReactComponent("outline","arrow-right","IconArrowRight",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]]);var IconArrowUp=createReactComponent("outline","arrow-up","IconArrowUp",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 11l-6 -6",key:"svg-1"}],["path",{d:"M6 11l6 -6",key:"svg-2"}]]);var IconBleachOff=createReactComponent("outline","bleach-off","IconBleachOff",[["path",{d:"M5 19h14m1.986 -1.977a2 2 0 0 0 -.146 -.773l-7.1 -12.25a2 2 0 0 0 -3.5 0l-.815 1.405m-1.488 2.568l-4.797 8.277a2 2 0 0 0 1.75 2.75",key:"svg-0"}],["path",{d:"M3 3l18 18",key:"svg-1"}]]);var IconBleach=createReactComponent("outline","bleach","IconBleach",[["path",{d:"M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75",key:"svg-0"}]]);var IconBoxMultiple=createReactComponent("outline","box-multiple","IconBoxMultiple",[["path",{d:"M7 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M17 17v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2",key:"svg-1"}]]);var IconBracketsContain=createReactComponent("outline","brackets-contain","IconBracketsContain",[["path",{d:"M7 4h-4v16h4",key:"svg-0"}],["path",{d:"M17 4h4v16h-4",key:"svg-1"}],["path",{d:"M8 16h.01",key:"svg-2"}],["path",{d:"M12 16h.01",key:"svg-3"}],["path",{d:"M16 16h.01",key:"svg-4"}]]);var IconBucketOff=createReactComponent("outline","bucket-off","IconBucketOff",[["path",{d:"M5.029 5.036c-.655 .58 -1.029 1.25 -1.029 1.964c0 2.033 3.033 3.712 6.96 3.967m3.788 -.21c3.064 -.559 5.252 -2.029 5.252 -3.757c0 -2.21 -3.582 -4 -8 -4c-1.605 0 -3.1 .236 -4.352 .643",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.1 -.3 .252 -.812 .457 -1.535m.862 -3.146c.262 -.975 .735 -2.76 1.418 -5.354a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]]);var IconBucket=createReactComponent("outline","bucket","IconBucket",[["path",{d:"M12 7m-8 0a8 4 0 1 0 16 0a8 4 0 1 0 -16 0",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.333 -1 1.246 -4.345 2.737 -10.035a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}]]);var IconCalendar=createReactComponent("outline","calendar","IconCalendar",[["path",{d:"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z",key:"svg-0"}],["path",{d:"M16 3v4",key:"svg-1"}],["path",{d:"M8 3v4",key:"svg-2"}],["path",{d:"M4 11h16",key:"svg-3"}],["path",{d:"M11 15h1",key:"svg-4"}],["path",{d:"M12 15v3",key:"svg-5"}]]);var IconCheck=createReactComponent("outline","check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]);var IconCheckbox=createReactComponent("outline","checkbox","IconCheckbox",[["path",{d:"M9 11l3 3l8 -8",key:"svg-0"}],["path",{d:"M20 12v6a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h9",key:"svg-1"}]]);var IconChevronDown=createReactComponent("outline","chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]);var IconChevronUp=createReactComponent("outline","chevron-up","IconChevronUp",[["path",{d:"M6 15l6 -6l6 6",key:"svg-0"}]]);var IconCircleMinus=createReactComponent("outline","circle-minus","IconCircleMinus",[["path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l6 0",key:"svg-1"}]]);var IconCirclePlus=createReactComponent("outline","circle-plus","IconCirclePlus",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M9 12h6",key:"svg-1"}],["path",{d:"M12 9v6",key:"svg-2"}]]);var IconCloudUpload=createReactComponent("outline","cloud-upload","IconCloudUpload",[["path",{d:"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1",key:"svg-0"}],["path",{d:"M9 15l3 -3l3 3",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}]]);var IconColumns=createReactComponent("outline","columns","IconColumns",[["path",{d:"M4 6l5.5 0",key:"svg-0"}],["path",{d:"M4 10l5.5 0",key:"svg-1"}],["path",{d:"M4 14l5.5 0",key:"svg-2"}],["path",{d:"M4 18l5.5 0",key:"svg-3"}],["path",{d:"M14.5 6l5.5 0",key:"svg-4"}],["path",{d:"M14.5 10l5.5 0",key:"svg-5"}],["path",{d:"M14.5 14l5.5 0",key:"svg-6"}],["path",{d:"M14.5 18l5.5 0",key:"svg-7"}]]);var IconCopy=createReactComponent("outline","copy","IconCopy",[["path",{d:"M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z",key:"svg-0"}],["path",{d:"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1",key:"svg-1"}]]);var IconCurrencyDollar=createReactComponent("outline","currency-dollar","IconCurrencyDollar",[["path",{d:"M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2",key:"svg-0"}],["path",{d:"M12 3v3m0 12v3",key:"svg-1"}]]);var IconDots=createReactComponent("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);var IconEdit=createReactComponent("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);var IconEqualNot=createReactComponent("outline","equal-not","IconEqualNot",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}],["path",{d:"M5 19l14 -14",key:"svg-2"}]]);var IconEqual=createReactComponent("outline","equal","IconEqual",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]]);var IconFileAlert=createReactComponent("outline","file-alert","IconFileAlert",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 17l.01 0",key:"svg-2"}],["path",{d:"M12 11l0 3",key:"svg-3"}]]);var IconFilePlus=createReactComponent("outline","file-plus","IconFilePlus",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 11l0 6",key:"svg-2"}],["path",{d:"M9 14l6 0",key:"svg-3"}]]);var IconFilter=createReactComponent("outline","filter","IconFilter",[["path",{d:"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z",key:"svg-0"}]]);var IconGenderFemale=createReactComponent("outline","gender-female","IconGenderFemale",[["path",{d:"M12 9m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-0"}],["path",{d:"M12 14v7",key:"svg-1"}],["path",{d:"M9 18h6",key:"svg-2"}]]);var IconGenderMale=createReactComponent("outline","gender-male","IconGenderMale",[["path",{d:"M10 14m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-0"}],["path",{d:"M19 5l-5.4 5.4",key:"svg-1"}],["path",{d:"M19 5h-5",key:"svg-2"}],["path",{d:"M19 5v5",key:"svg-3"}]]);var IconLogout=createReactComponent("outline","logout","IconLogout",[["path",{d:"M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M9 12h12l-3 -3",key:"svg-1"}],["path",{d:"M18 15l3 -3",key:"svg-2"}]]);var IconMathGreater=createReactComponent("outline","math-greater","IconMathGreater",[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]]);var IconMathLower=createReactComponent("outline","math-lower","IconMathLower",[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]]);var IconMessage=createReactComponent("outline","message","IconMessage",[["path",{d:"M8 9h8",key:"svg-0"}],["path",{d:"M8 13h6",key:"svg-1"}],["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z",key:"svg-2"}]]);var IconPencil=createReactComponent("outline","pencil","IconPencil",[["path",{d:"M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4",key:"svg-0"}],["path",{d:"M13.5 6.5l4 4",key:"svg-1"}]]);var IconPlus=createReactComponent("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);var IconRefresh=createReactComponent("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);var IconSearch=createReactComponent("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);var IconSettings=createReactComponent("outline","settings","IconSettings",[["path",{d:"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z",key:"svg-0"}],["path",{d:"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-1"}]]);var IconSortAscending=createReactComponent("outline","sort-ascending","IconSortAscending",[["path",{d:"M4 6l7 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l9 0",key:"svg-2"}],["path",{d:"M15 9l3 -3l3 3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSortDescending=createReactComponent("outline","sort-descending","IconSortDescending",[["path",{d:"M4 6l9 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l7 0",key:"svg-2"}],["path",{d:"M15 15l3 3l3 -3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSquare=createReactComponent("outline","square","IconSquare",[["path",{d:"M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z",key:"svg-0"}]]);var IconStethoscope=createReactComponent("outline","stethoscope","IconStethoscope",[["path",{d:"M6 4h-1a2 2 0 0 0 -2 2v3.5h0a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1",key:"svg-0"}],["path",{d:"M8 15a6 6 0 1 0 12 0v-3",key:"svg-1"}],["path",{d:"M11 3v2",key:"svg-2"}],["path",{d:"M6 3v2",key:"svg-3"}],["path",{d:"M20 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-4"}]]);var IconSwitchHorizontal=createReactComponent("outline","switch-horizontal","IconSwitchHorizontal",[["path",{d:"M16 3l4 4l-4 4",key:"svg-0"}],["path",{d:"M10 7l10 0",key:"svg-1"}],["path",{d:"M8 13l-4 4l4 4",key:"svg-2"}],["path",{d:"M4 17l9 0",key:"svg-3"}]]);var IconTableExport=createReactComponent("outline","table-export","IconTableExport",[["path",{d:"M12.5 21h-7.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5",key:"svg-0"}],["path",{d:"M3 10h18",key:"svg-1"}],["path",{d:"M10 3v18",key:"svg-2"}],["path",{d:"M16 19h6",key:"svg-3"}],["path",{d:"M19 16l3 3l-3 3",key:"svg-4"}]]);var IconTrash=createReactComponent("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);var IconUserSquare=createReactComponent("outline","user-square","IconUserSquare",[["path",{d:"M9 10a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M6 21v-1a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v1",key:"svg-1"}],["path",{d:"M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z",key:"svg-2"}]]);var IconX=createReactComponent("outline","x","IconX",[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]]);var import_react5=require("react"),import_jsx_runtime4=require("react/jsx-runtime"),ErrorBoundary=class extends import_react5.Component{constructor(props){super(props),this.state={lastLocation:window.location.toString()}}static getDerivedStateFromError(error){return{error,lastLocation:window.location.toString()}}componentDidUpdate(_prevProps,_prevState){window.location.toString()!==this.state.lastLocation&&this.setState({lastLocation:window.location.toString(),error:void 0})}shouldComponentUpdate(nextProps,nextState){return!!(this.props.children!==nextProps.children||nextState.error&&!this.state.error||this.state.lastLocation!==window.location.toString())}componentDidCatch(error,errorInfo){console.error("Uncaught error:",error,errorInfo)}render(){return this.state.error?(0,import_jsx_runtime4.jsx)(import_core6.Alert,{icon:(0,import_jsx_runtime4.jsx)(IconAlertCircle,{size:16}),title:"Something went wrong",color:"red",children:(0,import_core7.normalizeErrorString)(this.state.error)}):this.props.children}};var import_core8=require("@mantine/core"),import_jsx_runtime5=require("react/jsx-runtime");function Loading(){return(0,import_jsx_runtime5.jsx)(import_core8.Center,{style:{width:"100%",height:"100vh"},children:(0,import_jsx_runtime5.jsx)(import_core8.Loader,{})})}var AppShell_default={main:"AppShell_main"};var import_core20=require("@mantine/core"),import_core21=require("@medplum/core"),import_react_hooks6=require("@medplum/react-hooks");function r(e){var t,f,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{let channel=new MessageChannel;channel.port1.onmessage=({data:data2})=>{channel.port1.close(),data2.error?reject(data2.error):resolve(data2.result)},frame.contentWindow?.postMessage(command,new URL(frame.src).origin,[channel.port2])})}var import_jsx_runtime6=require("react/jsx-runtime");function MedplumLink(props){let navigate=(0,import_react_hooks2.useMedplumNavigate)(),{to,suffix,label,onClick,children,...rest}=props,href=getHref(to);return suffix&&(href+="/"+suffix),(0,import_jsx_runtime6.jsx)(import_core9.Anchor,{href,"aria-label":label,onClick:e=>{killEvent(e),onClick?onClick(e):to&&navigate(href)},...rest,children})}function getHref(to){if(to){if(typeof to=="string")return getStringHref(to);if((0,import_core10.isResource)(to))return getResourceHref(to);if((0,import_core10.isReference)(to))return getReferenceHref(to)}return"#"}function getStringHref(to){return to.startsWith("http://")||to.startsWith("https://")||to.startsWith("/")?to:"/"+to}function getResourceHref(to){return`/${to.resourceType}/${to.id}`}function getReferenceHref(to){return`/${to.reference}`}function getInitials(input){let words=input.split(" ").filter(Boolean);return words.length>1?words[0][0]+words[words.length-1][0]:words.length===1?words[0][0]:""}var import_jsx_runtime7=require("react/jsx-runtime");function ResourceAvatar(props){let resource=(0,import_react_hooks3.useResource)(props.value),text=resource?(0,import_core12.getDisplayString)(resource):props.alt??"",initials=getInitials(text),uncachedImageUrl=(resource&&(0,import_core12.getImageSrc)(resource))??props.src,imageUrl=(0,import_react_hooks3.useCachedBinaryUrl)(uncachedImageUrl??void 0),radius=props.radius??"xl",avatarProps={...props,value:void 0,link:void 0};return props.link?(0,import_jsx_runtime7.jsx)(MedplumLink,{to:resource,children:(0,import_jsx_runtime7.jsx)(import_core11.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}):(0,import_jsx_runtime7.jsx)(import_core11.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName",userActive:"Header_userActive"};var import_core14=require("@mantine/core"),import_core15=require("@medplum/core"),import_react_hooks4=require("@medplum/react-hooks");var import_core13=require("@medplum/core"),import_jsx_runtime8=require("react/jsx-runtime");function HumanNameDisplay(props){let name=props.value;return name?(0,import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment,{children:(0,import_core13.formatHumanName)(name,props.options)}):null}var import_jsx_runtime9=require("react/jsx-runtime");function HeaderDropdown(props){let context=(0,import_react_hooks4.useMedplumContext)(),{medplum,profile,navigate}=context,logins=medplum.getLogins(),{colorScheme,setColorScheme}=(0,import_core14.useMantineColorScheme)();return(0,import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment,{children:[(0,import_jsx_runtime9.jsxs)(import_core14.Stack,{align:"center",p:"xl",children:[(0,import_jsx_runtime9.jsx)(ResourceAvatar,{size:"xl",radius:100,value:context.profile}),(0,import_jsx_runtime9.jsx)(HumanNameDisplay,{value:context.profile?.name?.[0]}),(0,import_jsx_runtime9.jsx)(import_core14.Text,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&(0,import_jsx_runtime9.jsx)(import_core14.Menu.Divider,{}),logins.map(login=>login.profile.reference!==(0,import_core15.getReferenceString)(context.profile)&&(0,import_jsx_runtime9.jsx)(import_core14.Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>window.location.reload()).catch(console.log)},children:(0,import_jsx_runtime9.jsxs)(import_core14.Group,{children:[(0,import_jsx_runtime9.jsx)(import_core14.Avatar,{radius:"xl"}),(0,import_jsx_runtime9.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime9.jsx)(import_core14.Text,{size:"sm",fw:500,children:login.profile.display}),(0,import_jsx_runtime9.jsx)(import_core14.Text,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),(0,import_jsx_runtime9.jsx)(import_core14.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core14.Group,{justify:"center",children:(0,import_jsx_runtime9.jsx)(import_core14.SegmentedControl,{size:"xs",value:colorScheme,onChange:newValue=>setColorScheme(newValue),data:[{label:"Light",value:"light"},{label:"Dark",value:"dark"},{label:"Auto",value:"auto"}]})}),(0,import_jsx_runtime9.jsx)(import_core14.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core14.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Add another account"}),(0,import_jsx_runtime9.jsx)(import_core14.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${(0,import_core15.getReferenceString)(profile)}`),children:"Account settings"}),(0,import_jsx_runtime9.jsx)(import_core14.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconLogout,{size:14,stroke:1.5}),onClick:async()=>{await medplum.signOut(),navigate("/signin")},children:"Sign out"}),(0,import_jsx_runtime9.jsx)(import_core14.Text,{size:"xs",c:"dimmed",ta:"center",children:props.version})]})}var import_core18=require("@mantine/core"),import_core19=require("@medplum/core"),import_react_hooks5=require("@medplum/react-hooks");var import_react7=require("react");var import_core16=require("@mantine/core"),import_notifications=require("@mantine/notifications"),import_core17=require("@medplum/core");var import_react6=require("react");var AsyncAutocompleteTestIds={selectedItems:"selected-items",options:"options"};var import_jsx_runtime10=require("react/jsx-runtime");function AsyncAutocomplete(props){let combobox=(0,import_core16.useCombobox)({onDropdownClose:()=>combobox.resetSelectedOption(),onDropdownOpen:()=>combobox.updateSelectedOptionIndex("active")}),{name,label,description,error,defaultValue:defaultValue2,toOption:toOption4,loadOptions,itemComponent,pillComponent,emptyComponent,onChange,onCreate,creatable,clearable,required,placeholder,leftSection,maxValues,optionsDropdownMaxHeight=320,minInputLength=0,...rest}=props,disabled=rest.disabled,defaultItems=toDefaultItems(defaultValue2),[search,setSearch]=(0,import_react6.useState)(""),[timer,setTimer]=(0,import_react6.useState)(),[abortController,setAbortController]=(0,import_react6.useState)(),[autoSubmit,setAutoSubmit]=(0,import_react6.useState)(),[selected,setSelected]=(0,import_react6.useState)(defaultItems.map(toOption4)),[options,setOptions]=(0,import_react6.useState)([]),ItemComponent3=itemComponent??DefaultItemComponent,PillComponent=pillComponent??DefaultPillComponent,EmptyComponent=emptyComponent??DefaultEmptyComponent,searchRef=(0,import_react6.useRef)();searchRef.current=search;let lastLoadOptionsRef=(0,import_react6.useRef)(),lastValueRef=(0,import_react6.useRef)(),timerRef=(0,import_react6.useRef)();timerRef.current=timer;let abortControllerRef=(0,import_react6.useRef)();abortControllerRef.current=abortController;let autoSubmitRef=(0,import_react6.useRef)();autoSubmitRef.current=autoSubmit;let optionsRef=(0,import_react6.useRef)();optionsRef.current=options;let handleTimer=(0,import_react6.useCallback)(()=>{if(setTimer(void 0),searchRef.current===lastValueRef.current&&loadOptions===lastLoadOptionsRef.current||(searchRef.current?.length??0){newAbortController.signal.aborted||(setOptions(newValues.map(toOption4)),autoSubmitRef.current?(newValues.length>0&&onChange(newValues.slice(0,1)),setAutoSubmit(!1)):newValues.length>0&&combobox.openDropdown())}).catch(err=>{newAbortController.signal.aborted||err.message.includes("aborted")||(0,import_notifications.showNotification)({color:"red",message:(0,import_core17.normalizeErrorString)(err)})}).finally(()=>{newAbortController.signal.aborted||setAbortController(void 0)})},[combobox,loadOptions,onChange,toOption4,minInputLength]),handleSearchChange=(0,import_react6.useCallback)(e=>{(options&&options.length>0||creatable)&&combobox.openDropdown(),combobox.updateSelectedOptionIndex(),setSearch(e.currentTarget.value),abortControllerRef.current&&(abortControllerRef.current.abort(),setAbortController(void 0)),timerRef.current!==void 0&&window.clearTimeout(timerRef.current);let newTimer=window.setTimeout(()=>handleTimer(),100);setTimer(newTimer)},[combobox,options,creatable,handleTimer]),addSelected=(0,import_react6.useCallback)(newValue=>{let alreadySelected=selected.some(v=>v.value===newValue),newSelected=alreadySelected?selected.filter(v=>v.value!==newValue):[...selected],option=options?.find(option2=>option2.value===newValue);if(!option&&creatable!==!1&&onCreate){let createdResource=onCreate(newValue);option=toOption4(createdResource)}if(option){if(maxValues===0){onChange([option.resource]),selected.length>0&&setSelected([]);return}alreadySelected||newSelected.push(option)}if(maxValues!==void 0)for(;newSelected.length>maxValues;)newSelected.shift();onChange(newSelected.map(v=>v.resource)),setSelected(newSelected)},[creatable,options,selected,maxValues,onChange,onCreate,toOption4]),handleValueSelect=(0,import_react6.useMemo)(()=>{if(!disabled)return val=>{disabled||(maxValues===1&&(setSearch(""),setOptions([]),combobox.closeDropdown()),lastValueRef.current=void 0,val==="$create"?(setSearch(""),addSelected(search)):addSelected(val))}},[addSelected,combobox,disabled,maxValues,search]),handleValueRemove=(0,import_react6.useCallback)(item=>{let newSelected=selected.filter(v=>v.value!==item.value);onChange(newSelected.map(v=>v.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=(0,import_react6.useCallback)(e=>{e.key==="Enter"?(timer||abortController)&&setAutoSubmit(!0):e.key==="Backspace"&&search.length===0&&(killEvent(e),handleValueRemove(selected[selected.length-1]))},[abortController,handleValueRemove,search.length,selected,timer]);(0,import_react6.useEffect)(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=!disabled&&clearable&&selected.length>0&&(0,import_jsx_runtime10.jsx)(import_core16.Combobox.ClearButton,{title:"Clear all",size:"sm",onClear:()=>{setSearch(""),setSelected([]),onChange([]),combobox.closeDropdown()}}),createVisible=creatable&&search.trim().length>0,comboboxVisible=options.length>0||createVisible;return(0,import_jsx_runtime10.jsxs)(import_core16.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[(0,import_jsx_runtime10.jsx)(import_core16.Combobox.DropdownTarget,{children:(0,import_jsx_runtime10.jsx)(import_core16.PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?(0,import_jsx_runtime10.jsx)(import_core16.Loader,{size:16}):clearButton,required,disabled,children:(0,import_jsx_runtime10.jsxs)(import_core16.Pill.Group,{"data-testid":AsyncAutocompleteTestIds.selectedItems,children:[selected.map(item=>(0,import_jsx_runtime10.jsx)(PillComponent,{item,disabled,onRemove:()=>handleValueRemove(item)},item.value)),!disabled&&(maxValues===void 0||maxValues===0||selected.length{combobox.closeDropdown(),setSearch("")},onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),(0,import_jsx_runtime10.jsx)(import_core16.Combobox.Dropdown,{hidden:!comboboxVisible,"data-testid":AsyncAutocompleteTestIds.options,children:(0,import_jsx_runtime10.jsx)(import_core16.Combobox.Options,{children:(0,import_jsx_runtime10.jsxs)(import_core16.ScrollAreaAutosize,{type:"scroll",mah:optionsDropdownMaxHeight,children:[options.map(item=>{let active=selected.some(v=>v.value===item.value);return(0,import_jsx_runtime10.jsx)(import_core16.Combobox.Option,{value:item.value,active,children:(0,import_jsx_runtime10.jsx)(ItemComponent3,{...item,active})},item.value)}),createVisible&&(0,import_jsx_runtime10.jsxs)(import_core16.Combobox.Option,{value:"$create",children:["+ Create ",search]}),!creatable&&search.trim().length>0&&options.length===0&&(0,import_jsx_runtime10.jsx)(EmptyComponent,{search})]})})})]})}function toDefaultItems(defaultValue2){return defaultValue2?Array.isArray(defaultValue2)?defaultValue2:[defaultValue2]:[]}function DefaultItemComponent(props){return(0,import_jsx_runtime10.jsxs)(import_core16.Group,{gap:"xs",children:[props.active&&(0,import_jsx_runtime10.jsx)(IconCheck,{size:12}),(0,import_jsx_runtime10.jsx)("span",{children:props.label})]})}function DefaultPillComponent({item,disabled,onRemove}){return(0,import_jsx_runtime10.jsx)(import_core16.Pill,{withRemoveButton:!disabled,onRemove,children:item.label})}function DefaultEmptyComponent(){return(0,import_jsx_runtime10.jsx)(import_core16.Combobox.Empty,{children:"Nothing found"})}var HeaderSearchInput_default={searchInput:"HeaderSearchInput_searchInput"};var import_jsx_runtime11=require("react/jsx-runtime");function toOption(resource){return{value:resource.id,label:(0,import_core19.getDisplayString)(resource),resource}}function HeaderSearchInput(props){let navigate=(0,import_react_hooks5.useMedplumNavigate)(),medplum=(0,import_react_hooks5.useMedplum)(),loadData=(0,import_react7.useCallback)(async(input,signal)=>{let query=buildGraphQLQuery(input),options={signal},response=await medplum.graphql(query,void 0,void 0,options);return getResourcesFromResponse(response,input)},[medplum]),handleSelect=(0,import_react7.useCallback)(item=>{item.length>0&&navigate(`/${(0,import_core19.getReferenceString)(item[0])}`)},[navigate]);return(0,import_jsx_runtime11.jsx)(AsyncAutocomplete,{size:"sm",radius:"md",className:HeaderSearchInput_default.searchInput,leftSection:(0,import_jsx_runtime11.jsx)(IconSearch,{size:16}),placeholder:"Search",itemComponent:ItemComponent,toOption,onChange:handleSelect,loadOptions:loadData,maxValues:0,clearable:!1},`${props.pathname}?${props.searchParams}`)}var ItemComponent=(0,import_react7.forwardRef)(({resource,active:_active,...others},ref)=>{let helpText;return resource.resourceType==="Patient"?helpText=resource.birthDate:resource.resourceType==="ServiceRequest"&&(helpText=resource.subject?.display),(0,import_jsx_runtime11.jsx)("div",{ref,...others,children:(0,import_jsx_runtime11.jsxs)(import_core18.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime11.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime11.jsxs)("div",{children:[(0,import_jsx_runtime11.jsx)(import_core18.Text,{children:(0,import_core19.getDisplayString)(resource)}),(0,import_jsx_runtime11.jsx)(import_core18.Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return(0,import_core19.isUUID)(input)?`{ Patients1: PatientList(_id: ${escaped}, _count: 1) { resourceType id identifier { system value } name { given family } birthDate } ServiceRequestList(_id: ${escaped}, _count: 1) { resourceType id identifier { system value } subject { display } } }`.replace(/\s+/g," "):`{ Patients1: PatientList(name: ${escaped}, _count: 5) { resourceType id identifier { system value } name { given family } birthDate } Patients2: PatientList(identifier: ${escaped}, _count: 5) { resourceType id identifier { system value } name { given family } birthDate } ServiceRequestList(identifier: ${escaped}, _count: 5) { resourceType id identifier { system value } subject { display } } }`.replace(/\s+/g," ")}function getResourcesFromResponse(response,query){let resources=[];return response.data.Patients1&&resources.push(...response.data.Patients1),response.data.Patients2&&resources.push(...response.data.Patients2),response.data.ServiceRequestList&&resources.push(...response.data.ServiceRequestList),sortByRelevance(dedupeResources(resources),query).slice(0,5)}function dedupeResources(resources){let ids=new Set,result=[];for(let resource of resources)ids.has(resource.id)||(ids.add(resource.id),result.push(resource));return result}function sortByRelevance(resources,query){return resources.sort((a,b)=>getResourceScore(b,query)-getResourceScore(a,query))}function getResourceScore(resource,query){let bestScore=0;if(resource.identifier)for(let identifier of resource.identifier)bestScore=Math.max(bestScore,getStringScore(identifier.value,query));if(resource.resourceType==="Patient"&&resource.name)for(let name of resource.name)bestScore=Math.max(bestScore,getStringScore((0,import_core19.formatHumanName)(name),query));return bestScore}function getStringScore(str,query){if(!str)return 0;let index=str.toLowerCase().indexOf(query.toLowerCase());return index<0?0:100-index}var import_jsx_runtime12=require("react/jsx-runtime");function Header(props){let profile=(0,import_react_hooks6.useMedplumProfile)(),[userMenuOpened,setUserMenuOpened]=(0,import_react8.useState)(!1);return(0,import_jsx_runtime12.jsx)(import_core20.AppShell.Header,{p:8,style:{zIndex:101},children:(0,import_jsx_runtime12.jsxs)(import_core20.Group,{justify:"space-between",children:[(0,import_jsx_runtime12.jsxs)(import_core20.Group,{gap:"xs",children:[(0,import_jsx_runtime12.jsx)(import_core20.UnstyledButton,{className:Header_default.logoButton,onClick:props.navbarToggle,children:props.logo}),!props.headerSearchDisabled&&(0,import_jsx_runtime12.jsx)(HeaderSearchInput,{pathname:props.pathname,searchParams:props.searchParams})]}),(0,import_jsx_runtime12.jsxs)(import_core20.Group,{gap:"lg",pr:"sm",children:[props.notifications,(0,import_jsx_runtime12.jsxs)(import_core20.Menu,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime12.jsx)(import_core20.Menu.Target,{children:(0,import_jsx_runtime12.jsx)(import_core20.UnstyledButton,{className:clsx_default(Header_default.user,{[Header_default.userActive]:userMenuOpened}),onClick:()=>setUserMenuOpened(o=>!o),children:(0,import_jsx_runtime12.jsxs)(import_core20.Group,{gap:7,children:[(0,import_jsx_runtime12.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime12.jsx)(import_core20.Text,{size:"sm",className:Header_default.userName,children:(0,import_core21.formatHumanName)(profile?.name?.[0])}),(0,import_jsx_runtime12.jsx)(IconChevronDown,{size:12,stroke:1.5})]})})}),(0,import_jsx_runtime12.jsx)(import_core20.Menu.Dropdown,{children:(0,import_jsx_runtime12.jsx)(HeaderDropdown,{version:props.version})})]})]})]})})}var import_core25=require("@mantine/core"),import_react_hooks9=require("@medplum/react-hooks");var import_react12=require("react");var import_core22=require("@mantine/core"),import_notifications2=require("@mantine/notifications"),import_core23=require("@medplum/core"),import_react_hooks7=require("@medplum/react-hooks");function parseForm(form){let result={};for(let element of Array.from(form.elements))element instanceof HTMLInputElement?parseInputElement(result,element):element instanceof HTMLTextAreaElement?result[element.name]=element.value:element instanceof HTMLSelectElement&&parseSelectElement(result,element);return result}function parseInputElement(result,el){el.disabled||(el.type==="checkbox"||el.type==="radio")&&!el.checked||(result[el.name]=el.value)}function parseSelectElement(result,el){result[el.name]=el.value}var import_jsx_runtime13=require("react/jsx-runtime");function Form(props){return(0,import_jsx_runtime13.jsx)("form",{style:props.style,"data-testid":props.testid,onSubmit:e=>{e.preventDefault();let formData=parseForm(e.target);props.onSubmit&&props.onSubmit(formData)},children:props.children})}var import_jsx_runtime14=require("react/jsx-runtime");function BookmarkDialog(props){let medplum=(0,import_react_hooks7.useMedplum)(),config=medplum.getUserConfiguration();function submitHandler(formData){let{menuname,bookmarkname:name}=formData,target=`${props.pathname}?${props.searchParams.toString()}`,newConfig=(0,import_core23.deepClone)(config);newConfig.menu?.find(({title})=>title===menuname)?.link?.push({name,target}),medplum.updateResource(newConfig).then(res=>{config.menu=res.menu,medplum.dispatchEvent({type:"change"}),(0,import_notifications2.showNotification)({color:"green",message:"Success"}),props.onOk()}).catch(err=>{(0,import_notifications2.showNotification)({color:"red",message:(0,import_core23.normalizeErrorString)(err)})})}return(0,import_jsx_runtime14.jsx)(import_core22.Modal,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime14.jsx)(Form,{onSubmit:submitHandler,children:(0,import_jsx_runtime14.jsxs)(import_core22.Stack,{children:[(0,import_jsx_runtime14.jsx)(SelectMenu,{config}),(0,import_jsx_runtime14.jsx)(import_core22.TextInput,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),(0,import_jsx_runtime14.jsx)(import_core22.Group,{justify:"flex-end",children:(0,import_jsx_runtime14.jsx)(import_core22.Button,{mt:"sm",type:"submit",children:"OK"})})]})})})}function SelectMenu(props){function userConfigToMenu(config){return config?.menu?.map(menu=>menu.title)}let menus=userConfigToMenu(props.config);return(0,import_jsx_runtime14.jsx)(import_core22.NativeSelect,{name:"menuname",defaultValue:menus[0],label:"Select Menu Option",data:menus,withAsterisk:!0})}var import_react11=require("react");var import_react10=require("react");var import_core24=require("@mantine/core"),import_react_hooks8=require("@medplum/react-hooks"),import_react9=require("react");var import_jsx_runtime15=require("react/jsx-runtime");function toKey(element){return typeof element.code=="string"?element.code:JSON.stringify(element)}function getDisplay(item){return typeof item.display=="string"?item.display:toKey(item)}function toOption2(element){return{value:toKey(element),label:getDisplay(element),resource:element}}function createValue(input){return{code:input,display:input}}function ValueSetAutocomplete(props){let medplum=(0,import_react_hooks8.useMedplum)(),{binding,creatable,clearable,expandParams,withHelpText,...rest}=props,loadValues=(0,import_react9.useCallback)(async(input,signal)=>{if(!binding)return[];let valueSetElements=(await medplum.valueSetExpand({...expandParams,url:binding,filter:input},{signal})).expansion?.contains??[],newData=[];for(let valueSetElement of valueSetElements)valueSetElement.code&&!newData.some(item=>item.code===valueSetElement.code)&&newData.push(valueSetElement);return newData},[medplum,expandParams,binding]);return(0,import_jsx_runtime15.jsx)(AsyncAutocomplete,{...rest,creatable:creatable??!0,clearable:clearable??!0,toOption:toOption2,loadOptions:loadValues,onCreate:createValue,itemComponent:withHelpText?ItemComponent2:void 0})}var ItemComponent2=(0,import_react9.forwardRef)(({label,resource,active,...others},ref)=>(0,import_jsx_runtime15.jsx)("div",{ref,...others,children:(0,import_jsx_runtime15.jsxs)(import_core24.Group,{wrap:"nowrap",gap:"xs",children:[active&&(0,import_jsx_runtime15.jsx)(IconCheck,{size:12}),(0,import_jsx_runtime15.jsxs)("div",{children:[(0,import_jsx_runtime15.jsx)(import_core24.Text,{children:label}),(0,import_jsx_runtime15.jsx)(import_core24.Text,{size:"xs",c:"dimmed",children:`${resource.system}#${resource.code}`})]})]})}));var import_jsx_runtime16=require("react/jsx-runtime");function CodeInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react10.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newCode=valueSetElementToCode(newValue);setValue(newCode),onChange&&onChange(newCode)}return(0,import_jsx_runtime16.jsx)(ValueSetAutocomplete,{defaultValue:codeToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeToValueSetElement(code){return code?{code}:void 0}function valueSetElementToCode(element){return element?.code}var import_jsx_runtime17=require("react/jsx-runtime");function ResourceTypeInput(props){let[resourceType,setResourceType]=(0,import_react11.useState)(props.defaultValue),onChange=props.onChange,setResourceTypeWrapper=(0,import_react11.useCallback)(newResourceType=>{setResourceType(newResourceType),onChange&&onChange(newResourceType)},[onChange]);return(0,import_jsx_runtime17.jsx)(CodeInput,{disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":props.testId,defaultValue:resourceType,onChange:setResourceTypeWrapper,name:props.name,placeholder:props.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxValues:props.maxValues??1,clearable:!1,withHelpText:!1})}var Navbar_default={menuTitle:"Navbar_menuTitle",link:"Navbar_link",linkActive:"Navbar_linkActive"};var import_jsx_runtime18=require("react/jsx-runtime");function Navbar(props){let navigate=(0,import_react_hooks9.useMedplumNavigate)(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react12.useState)(!1);function onLinkClick(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}return(0,import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment,{children:[(0,import_jsx_runtime18.jsx)(import_core25.AppShell.Navbar,{children:(0,import_jsx_runtime18.jsxs)(import_core25.ScrollArea,{p:"xs",children:[!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime18.jsx)(import_core25.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime18.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),(0,import_jsx_runtime18.jsxs)(import_core25.AppShell.Section,{grow:!0,children:[props.menus?.map(menu=>(0,import_jsx_runtime18.jsxs)(import_react12.Fragment,{children:[(0,import_jsx_runtime18.jsx)(import_core25.Text,{className:Navbar_default.menuTitle,children:menu.title}),menu.links?.map(link=>(0,import_jsx_runtime18.jsxs)(NavbarLink,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick(e,link.href),children:[(0,import_jsx_runtime18.jsx)(NavLinkIcon,{to:link.href,icon:link.icon}),(0,import_jsx_runtime18.jsx)("span",{children:link.label})]},link.href))]},`menu-${menu.title}`)),props.displayAddBookmark&&(0,import_jsx_runtime18.jsx)(import_core25.Button,{variant:"subtle",size:"xs",mt:"xl",leftSection:(0,import_jsx_runtime18.jsx)(IconPlus,{size:"0.75rem"}),onClick:()=>setBookmarkDialogVisible(!0),children:"Add Bookmark"})]})]})}),props.pathname&&props.searchParams&&(0,import_jsx_runtime18.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLink(props){return(0,import_jsx_runtime18.jsx)(MedplumLink,{onClick:props.onClick,to:props.to,className:clsx_default(Navbar_default.link,{[Navbar_default.linkActive]:props.active}),children:props.children})}function NavLinkIcon(props){return props.icon?props.icon:(0,import_jsx_runtime18.jsx)(import_core25.Space,{w:30})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&¤tSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime19=require("react/jsx-runtime");function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react13.useState)(localStorage.navbarOpen==="true"),medplum=(0,import_react_hooks10.useMedplum)(),profile=(0,import_react_hooks10.useMedplumProfile)();(0,import_react13.useEffect)(()=>{function eventListener(){(0,import_notifications3.showNotification)({id:"offline",color:"red",message:"No connection to server",autoClose:!1})}return medplum.addEventListener("offline",eventListener),()=>medplum.removeEventListener("offline",eventListener)},[medplum]);function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}return medplum.isLoading()?(0,import_jsx_runtime19.jsx)(Loading,{}):(0,import_jsx_runtime19.jsxs)(import_core26.AppShell,{header:{height:60},navbar:{width:250,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},padding:0,children:[profile&&(0,import_jsx_runtime19.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarToggle:toggleNavbar,notifications:props.notifications}),profile&&navbarOpen?(0,import_jsx_runtime19.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled}):void 0,(0,import_jsx_runtime19.jsx)(import_core26.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime19.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime19.jsx)(import_react13.Suspense,{fallback:(0,import_jsx_runtime19.jsx)(Loading,{}),children:props.children})})})]})}var import_core27=require("@mantine/core"),import_core28=require("@medplum/core"),import_react_hooks11=require("@medplum/react-hooks");var import_react14=require("react");var import_jsx_runtime20=require("react/jsx-runtime"),CCDA_VIEWER_URL="https://ccda.medplum.com";function CcdaDisplay(props){let{url}=props,[shouldSend,setShouldSend]=(0,import_react14.useState)(!1),iframeRef=(0,import_react14.useRef)(null);return(0,import_react14.useEffect)(()=>{url&&shouldSend&&iframeRef.current&&(sendCommand(iframeRef.current,{command:"loadCcdaXml",value:url}).catch(console.error),setShouldSend(!1))},[url,shouldSend]),url?(0,import_jsx_runtime20.jsx)("div",{"data-testid":"ccda-iframe",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime20.jsx)("iframe",{title:"C-CDA Viewer",width:"100%",height:"400",ref:iframeRef,src:CCDA_VIEWER_URL,allowFullScreen:!0,frameBorder:0,seamless:!0,onLoad:()=>setShouldSend(!0)})}):null}var import_jsx_runtime21=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=(0,import_react_hooks11.useCachedBinaryUrl)(uncachedUrl);return url?(0,import_jsx_runtime21.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime21.jsx)("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime21.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime21.jsx)("source",{type:contentType,src:url})}),(contentType?.startsWith("text/")||contentType==="application/json"||contentType==="application/pdf")&&(0,import_jsx_runtime21.jsx)("div",{"data-testid":"attachment-iframe",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime21.jsx)("iframe",{width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),contentType===import_core28.ContentType.CDA_XML&&(0,import_jsx_runtime21.jsx)(CcdaDisplay,{url}),(0,import_jsx_runtime21.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime21.jsx)(import_core27.Anchor,{href:uncachedUrl,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:getDownloadName(title),children:title||"Download"})})]}):null}function getDownloadName(title){return title?.includes(".")?title:void 0}var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime22=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime22.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment,{children:[(0,import_jsx_runtime22.jsx)("dt",{children:props.term}),(0,import_jsx_runtime22.jsx)("dd",{children:props.children})]})}var import_core29=require("@medplum/core"),import_jsx_runtime23=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v,index)=>(0,import_jsx_runtime23.jsx)("div",{children:(0,import_jsx_runtime23.jsx)(AttachmentDisplay,{value:v,maxWidth:props.maxWidth})},"attatchment-"+index)),content;if(props.includeDescriptionListEntry){if(props.property===void 0)throw new Error("props.property is required when includeDescriptionListEntry is true");if(!(0,import_core29.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime23.jsx)(DescriptionListEntry,{term:(0,import_core29.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment,{children:attachmentElements});return content}var import_core31=require("@mantine/core");var import_react16=require("react");var import_core30=require("@medplum/core"),import_react_hooks12=require("@medplum/react-hooks"),import_react15=require("react");var import_jsx_runtime24=require("react/jsx-runtime");function AttachmentButton(props){let medplum=(0,import_react_hooks12.useMedplum)(),fileInputRef=(0,import_react15.useRef)(null);function onClick(e){killEvent(e),fileInputRef.current?.click()}function onFileChange(e){killEvent(e);let files=e.target.files;files&&Array.from(files).forEach(processFile)}function processFile(file){!file||!file.name||(props.onUploadStart&&props.onUploadStart(),medplum.createAttachment({data:file,contentType:file.type||"application/octet-stream",filename:file.name,securityContext:props.securityContext,onProgress:props.onUploadProgress}).then(attachment=>props.onUpload(attachment)).catch(err=>{props.onUploadError&&props.onUploadError((0,import_core30.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment,{children:[(0,import_jsx_runtime24.jsx)("input",{disabled:props.disabled,type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:fileInputRef,onChange:e=>onFileChange(e)}),props.children({onClick,disabled:props.disabled})]})}var import_jsx_runtime25=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react16.useState)(props.defaultValue??[]),valuesRef=(0,import_react16.useRef)();valuesRef.current=values;function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime25.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime25.jsxs)("colgroup",{children:[(0,import_jsx_runtime25.jsx)("col",{width:"97%"}),(0,import_jsx_runtime25.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime25.jsxs)("tbody",{children:[values.map((v,index)=>(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentDisplay,{value:v,maxWidth:200})}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{disabled:props.disabled,title:"Remove",variant:"subtle",size:"sm",color:"gray",onClick:e=>{killEvent(e);let copy=values.slice();copy.splice(index,1),setValuesWrapper(copy)},children:(0,import_jsx_runtime25.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentButton,{disabled:props.disabled,onUpload:attachment=>{setValuesWrapper([...valuesRef.current,attachment])},children:props2=>(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:props2.disabled?"gray":"green",children:(0,import_jsx_runtime25.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core32=require("@mantine/core"),import_react17=require("react");var import_jsx_runtime26=require("react/jsx-runtime");function AttachmentInput(props){let[value,setValue]=(0,import_react17.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return value?(0,import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment,{children:[(0,import_jsx_runtime26.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime26.jsx)(import_core32.Button,{disabled:props.disabled,onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime26.jsx)(AttachmentButton,{disabled:props.disabled,securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime26.jsx)(import_core32.Button,{...props2,children:"Upload..."})})}var import_core41=require("@medplum/core"),import_react_hooks16=require("@medplum/react-hooks"),import_react21=require("react");var import_core33=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime27=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime27.jsx)(import_core33.Container,{className:Container_default.root,...others,children})}var import_core34=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime28=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime28.jsx)(import_core34.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_jsx_runtime29=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime29.jsx)(Container,{children:(0,import_jsx_runtime29.jsx)(Panel,{...others,children})})}var import_core35=require("@mantine/core"),import_core36=require("@medplum/core"),import_react_hooks13=require("@medplum/react-hooks"),import_react18=require("react");var import_jsx_runtime30=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime30.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_runtime30.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime30.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_runtime30.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_runtime30.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_runtime30.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_runtime30.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(` `)}function getIssuesForExpression(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))}var ARRAY_INDEX_REGEX=/\[\d+\]/;function isExpressionMatch(expr1,expr2){let isExpr1Indexed=typeof expr1=="string"&&ARRAY_INDEX_REGEX.test(expr1),isExpr2Indexed=typeof expr2=="string"&&ARRAY_INDEX_REGEX.test(expr2);if(isExpr1Indexed!==isExpr2Indexed&&(expr1=expr1?.replace(ARRAY_INDEX_REGEX,""),expr2=expr2?.replace(ARRAY_INDEX_REGEX,"")),expr1===expr2)return!0;if(!expr1||!expr2)return!1;let dot1=expr1.indexOf(".");if(dot1>=0&&expr1.substring(dot1+1)===expr2)return!0;let dot2=expr2.indexOf(".");return dot2>=0&&expr2.substring(dot2+1)===expr1}var import_jsx_runtime31=require("react/jsx-runtime");function NewProjectForm(props){let medplum=(0,import_react_hooks13.useMedplum)(),[outcome,setOutcome]=(0,import_react18.useState)();return(0,import_jsx_runtime31.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core36.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime31.jsxs)(import_core35.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime31.jsx)(Logo,{size:32}),(0,import_jsx_runtime31.jsx)(import_core35.Title,{children:"Create project"})]}),(0,import_jsx_runtime31.jsxs)(import_core35.Stack,{gap:"xl",children:[(0,import_jsx_runtime31.jsx)(import_core35.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"projectName")}),(0,import_jsx_runtime31.jsxs)(import_core35.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime31.jsx)(import_core35.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime31.jsx)(import_core35.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime31.jsx)(import_core35.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime31.jsx)(import_core35.Button,{type:"submit",children:"Create project"})})]})}var import_core39=require("@mantine/core"),import_core40=require("@medplum/core"),import_react_hooks15=require("@medplum/react-hooks"),import_react20=require("react");var import_react_hooks14=require("@medplum/react-hooks"),import_react19=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_runtime32=require("react/jsx-runtime");function GoogleButton(props){let medplum=(0,import_react_hooks14.useMedplum)(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react19.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react19.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react19.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react19.useState)(!1);return(0,import_react19.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_runtime32.jsx)("div",{ref:parentRef}):null}function getGoogleClientId(clientId){if(clientId)return clientId;if(typeof window<"u"){let origin=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}}var import_core37=require("@mantine/core"),import_core38=require("@medplum/core");var import_jsx_runtime33=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime33.jsx)(import_core37.Alert,{icon:(0,import_jsx_runtime33.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime33.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core38.operationOutcomeIssueToString)(issue)},issue.details?.text))})}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime34=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=(0,import_react_hooks15.useMedplum)(),[outcome,setOutcome]=(0,import_react20.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react20.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime34.jsxs)(Form,{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_core40.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime34.jsx)(import_core39.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime34.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment,{children:[(0,import_jsx_runtime34.jsx)(import_core39.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime34.jsx)(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,projectId:props.projectId,createUser:!0}))}catch(err){setOutcome((0,import_core40.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime34.jsx)(import_core39.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime34.jsxs)(import_core39.Stack,{gap:"xl",children:[(0,import_jsx_runtime34.jsx)(import_core39.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime34.jsx)(import_core39.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime34.jsx)(import_core39.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime34.jsx)(import_core39.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime34.jsxs)(import_core39.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime34.jsx)(import_core39.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime34.jsx)(import_core39.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime34.jsxs)(import_core39.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime34.jsx)(import_core39.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime34.jsx)(import_core39.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime34.jsxs)(import_core39.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime34.jsx)(import_core39.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime34.jsx)(import_core39.Button,{type:"submit",children:"Create account"})]})]})}var import_jsx_runtime35=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=(0,import_react_hooks16.useMedplum)(),[login,setLogin]=(0,import_react21.useState)(),[outcome,setOutcome]=(0,import_react21.useState)();(0,import_react21.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core41.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_runtime35.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime35.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime35.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime35.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications4=require("@mantine/notifications"),import_core49=require("@medplum/core"),import_react_hooks20=require("@medplum/react-hooks"),import_react25=require("react");var import_core42=require("@mantine/core"),import_core43=require("@medplum/core"),import_react_hooks17=require("@medplum/react-hooks"),import_react22=require("react");var import_jsx_runtime36=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react22.useState)();return email?(0,import_jsx_runtime36.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime36.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react22.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react22.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_react22.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_react22.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core43.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime36.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime36.jsx)(import_core42.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime36.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment,{children:[(0,import_jsx_runtime36.jsx)(import_core42.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime36.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime36.jsx)(import_core42.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime36.jsx)(import_core42.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime36.jsxs)(import_core42.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime36.jsx)("div",{children:onRegister&&(0,import_jsx_runtime36.jsx)(import_core42.Anchor,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime36.jsx)(import_core42.Button,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=(0,import_react_hooks17.useMedplum)(),[outcome,setOutcome]=(0,import_react22.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react22.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core43.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime36.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime36.jsx)(import_core42.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime36.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime36.jsx)(import_core42.Stack,{gap:"xl",children:(0,import_jsx_runtime36.jsx)(import_core42.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime36.jsxs)(import_core42.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime36.jsx)(import_core42.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime36.jsx)(import_core42.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime36.jsx)(import_core42.Button,{type:"submit",children:"Sign in"})]})]})}var import_core44=require("@mantine/core"),import_core45=require("@medplum/core"),import_react_hooks18=require("@medplum/react-hooks"),import_react23=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=(0,import_react_hooks18.useMedplum)(),combobox=(0,import_core44.useCombobox)(),[search,setSearch]=(0,import_react23.useState)(""),[outcome,setOutcome]=(0,import_react23.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_core45.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime37.jsx)(import_core44.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime37.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime37.jsxs)(import_core44.Stack,{children:[(0,import_jsx_runtime37.jsxs)(import_core44.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime37.jsx)(Logo,{size:32}),(0,import_jsx_runtime37.jsx)(import_core44.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime37.jsxs)(import_core44.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime37.jsx)(import_core44.Combobox.EventsTarget,{children:(0,import_jsx_runtime37.jsx)(import_core44.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime37.jsx)("div",{children:(0,import_jsx_runtime37.jsx)(import_core44.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime37.jsx)(import_core44.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime37.jsxs)(import_core44.Group,{children:[(0,import_jsx_runtime37.jsx)(import_core44.Avatar,{radius:"xl"}),(0,import_jsx_runtime37.jsxs)("div",{children:[(0,import_jsx_runtime37.jsx)(import_core44.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime37.jsx)(import_core44.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core46=require("@mantine/core"),import_react_hooks19=require("@medplum/react-hooks");var import_jsx_runtime38=require("react/jsx-runtime"),openConditionScope=/^patient\/Condition\.(?:\*|c?r?u?d?s?)$/,encounterDiagnosis="?category=http://terminology.hl7.org/CodeSystem/condition-category|encounter-diagnosis",problemListItem="?category=http://terminology.hl7.org/CodeSystem/condition-category|problem-list-item",healthConcern="?category=http://hl7.org/fhir/us/core/CodeSystem/condition-category|health-concern",openObservationScope=/^patient\/Observation\.(?:\*|c?r?u?d?s?)$/,clinicalTest="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-observation-category|clinical-test",laboratory="?category=http://terminology.hl7.org/CodeSystem/observation-category|laboratory",socialHistory="?category=http://terminology.hl7.org/CodeSystem/observation-category|social-history",sdoh="?category=http://hl7.org/fhir/us/core/CodeSystem/us-core-category|sdoh",survey="?category=http://terminology.hl7.org/CodeSystem/observation-category|survey",vitalSigns="?category=http://terminology.hl7.org/CodeSystem/observation-category|vital-signs";function ChooseScopeForm(props){let medplum=(0,import_react_hooks19.useMedplum)();return(0,import_jsx_runtime38.jsx)(Form,{onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:(0,import_jsx_runtime38.jsxs)(import_core46.Stack,{children:[(0,import_jsx_runtime38.jsxs)(import_core46.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime38.jsx)(Logo,{size:32}),(0,import_jsx_runtime38.jsx)(import_core46.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime38.jsx)(import_core46.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>{let additionalScopes;return openConditionScope.test(scopeName)?additionalScopes=[scopeName+encounterDiagnosis,scopeName+problemListItem,scopeName+healthConcern]:openObservationScope.test(scopeName)&&(additionalScopes=[scopeName+clinicalTest,scopeName+laboratory,scopeName+socialHistory,scopeName+sdoh,scopeName+survey,scopeName+vitalSigns]),(0,import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment,{children:[(0,import_jsx_runtime38.jsx)(import_core46.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName),additionalScopes?.map(scope=>(0,import_jsx_runtime38.jsx)(import_core46.Checkbox,{id:scope,name:scope,label:scope},scope))]})})}),(0,import_jsx_runtime38.jsx)(import_core46.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime38.jsx)(import_core46.Button,{type:"submit",children:"Set scope"})})]})})}var import_core47=require("@mantine/core"),import_core48=require("@medplum/core");var import_react24=require("react");var import_jsx_runtime39=require("react/jsx-runtime");function MfaForm(props){let[errorMessage,setErrorMessage]=(0,import_react24.useState)();return(0,import_jsx_runtime39.jsx)(Form,{onSubmit:formData=>{setErrorMessage(void 0),props.onSubmit(formData).catch(err=>setErrorMessage((0,import_core48.normalizeErrorString)(err)))},children:(0,import_jsx_runtime39.jsxs)(import_core47.Stack,{children:[(0,import_jsx_runtime39.jsxs)(import_core47.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime39.jsx)(Logo,{size:32}),(0,import_jsx_runtime39.jsx)(import_core47.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime39.jsx)(import_core47.Alert,{icon:(0,import_jsx_runtime39.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime39.jsx)(import_core47.Stack,{children:(0,import_jsx_runtime39.jsx)(import_core47.TextInput,{name:"token",label:"MFA code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime39.jsx)(import_core47.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime39.jsx)(import_core47.Button,{type:"submit",children:"Submit code"})})]})})}var import_jsx_runtime40=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),[login,setLogin]=(0,import_react25.useState)(),loginRequested=(0,import_react25.useRef)(!1),[mfaRequired,setAuthenticatorRequired]=(0,import_react25.useState)(!1),[memberships,setMemberships]=(0,import_react25.useState)(),handleCode=(0,import_react25.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core49.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react25.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_react25.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react25.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications4.showNotification)({color:"red",message:(0,import_core49.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime40.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime40.jsx)(MfaForm,{onSubmit:async fields=>{let res=await medplum.post("auth/mfa/verify",{login,token:fields.token});handleAuthResponse(res)}}):memberships?(0,import_jsx_runtime40.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime40.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime40.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime40.jsx)("div",{children:"Success"}):(0,import_jsx_runtime40.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core63=require("@medplum/core");var import_core61=require("@mantine/core"),import_core62=require("@medplum/core");var import_core50=require("@medplum/core"),import_jsx_runtime41=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core50.formatCodeableConcept)(props.value)})}var import_core51=require("@medplum/core"),import_jsx_runtime42=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime42.jsx)(import_jsx_runtime42.Fragment,{children:(0,import_core51.formatCoding)(props.value)})}var import_jsx_runtime43=require("react/jsx-runtime");function ContactPointDisplay(props){let contactPoint=props.value;if(!contactPoint)return null;let builder=[];return contactPoint.value&&builder.push(contactPoint.value),(contactPoint.use||contactPoint.system)&&(builder.push(" ["),contactPoint.use&&builder.push(contactPoint.use),contactPoint.use&&contactPoint.system&&builder.push(" "),contactPoint.system&&builder.push(contactPoint.system),builder.push("]")),(0,import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime44=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime44.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_jsx_runtime45=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime45.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core52=require("@medplum/core"),import_jsx_runtime46=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime46.jsx)(import_jsx_runtime46.Fragment,{children:(0,import_core52.formatMoney)(props.value)})}var import_core53=require("@medplum/core"),import_jsx_runtime47=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment,{children:(0,import_core53.formatQuantity)(props.value)})}var import_core54=require("@medplum/core"),import_jsx_runtime48=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment,{children:(0,import_core54.formatRange)(props.value)})}var import_jsx_runtime49=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment,{children:[(0,import_jsx_runtime49.jsx)(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",(0,import_jsx_runtime49.jsx)(QuantityDisplay,{value:value.denominator})]}):null}var import_core55=require("@medplum/core");var import_jsx_runtime50=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core55.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime50.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime50.jsx)(import_jsx_runtime50.Fragment,{children:displayString})}var import_core58=require("@medplum/core");var import_react27=require("react");var import_core56=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core56.isPopulated)(slicing?.slices))return[values];let slicedValues=new Array(slices.length+1);for(let i=0;islice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}return slicedValues}async function prepareSlices({medplum,property}){return new Promise((resolve,reject)=>{if(!property.slicing){resolve([]);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!(0,import_core56.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core56.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl&&promises.push(medplum.requestProfileSchema(profileUrl))}Promise.all(promises).then(()=>{for(let i=0;i{if((0,import_core57.isPopulated)(sliceElements))return(0,import_core57.buildElementsContext)({parentContext,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentContext,props.path,slice.typeSchema?.url,sliceElements]);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime52.jsx)(import_jsx_runtime52.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime52.jsx)("div",{children:(0,import_jsx_runtime52.jsx)(ResourcePropertyDisplay,{property,path:props.path,arrayElement:!0,elementDefinitionType:slice.type[0],propertyType:slice.type[0].code,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${props.value.length}`))}))}var import_jsx_runtime53=require("react/jsx-runtime");function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=(0,import_react_hooks21.useMedplum)(),values=(0,import_react27.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react27.useState)(!0),[slices,setSlices]=(0,import_react27.useState)([]),[slicedValues,setSlicedValues]=(0,import_react27.useState)(()=>[values]),ctx=(0,import_react27.useContext)(ElementsContext);if((0,import_react27.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(values,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime53.jsx)("div",{children:"Loading..."});let nonSliceContent;if(property.type[0]?.code!=="Extension"){let nonSliceValues=slicedValues[slices.length],nonSliceElements=nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime53.jsx)("div",{children:(0,import_jsx_runtime53.jsx)(ResourcePropertyDisplay,{path:props.path,arrayElement:!0,property,propertyType,value,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${valueIndex}-${nonSliceValues.length}`));if(props.includeDescriptionListEntry){if(!(0,import_core58.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime53.jsx)(DescriptionListEntry,{term:(0,import_core58.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime53.jsx)(SliceDisplay,{path:props.path,slice,property,value:slicedValues[sliceIndex],ignoreMissingValues:props.ignoreMissingValues,link:props.link},slice.name);return props.includeDescriptionListEntry&&(sliceDisplay=(0,import_jsx_runtime53.jsx)(DescriptionListEntry,{term:(0,import_core58.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent]})}var import_core60=require("@medplum/core"),import_react_hooks22=require("@medplum/react-hooks"),import_react28=require("react");var import_core59=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core59.getTypedPropertyValue)(context,path,{profileUrl});return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}function getValueAndTypeFromElement(typedValue,path,element){let typedResult=(0,import_core59.getTypedPropertyValueWithSchema)(typedValue,path,element);return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}var import_jsx_runtime54=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=(0,import_react_hooks22.useMedplum)(),ctx=(0,import_react28.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react28.useState)((0,import_core60.getDataType)("Extension")),profileUrl=(0,import_react28.useMemo)(()=>{if((0,import_core60.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react28.useState)(profileUrl!==void 0);if((0,import_react28.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core60.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core60.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime54.jsx)("div",{children:"Loading..."});if(typeSchema.elements["value[x]"]?.max!==0){let[propertyValue,propertyType]=getValueAndType({type:"Extension",value:props.value},"value[x]",profileUrl??ctx.profileUrl);return(0,import_jsx_runtime54.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime54.jsx)(BackboneElementDisplay,{path:props.path,value:{type:typeSchema.type,value:props.value},compact:props.compact,ignoreMissingValues:props.ignoreMissingValues,link:props.link,profileUrl})}var import_jsx_runtime55=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime55.jsxs)(import_core61.Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!(0,import_core62.isEmpty)(value)&&(0,import_jsx_runtime55.jsx)(import_core61.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime55.jsx)(import_core61.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime55.jsx)(import_core61.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime55.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime55.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core62.PropertyType.Attachment?(0,import_jsx_runtime55.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime55.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core62.PropertyType.boolean:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core62.PropertyType.SystemString:case import_core62.PropertyType.string:return(0,import_jsx_runtime55.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core62.PropertyType.code:case import_core62.PropertyType.date:case import_core62.PropertyType.decimal:case import_core62.PropertyType.id:case import_core62.PropertyType.integer:case import_core62.PropertyType.positiveInt:case import_core62.PropertyType.unsignedInt:case import_core62.PropertyType.uri:case import_core62.PropertyType.url:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:value});case import_core62.PropertyType.canonical:return(0,import_jsx_runtime55.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core62.PropertyType.dateTime:case import_core62.PropertyType.instant:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:(0,import_core62.formatDateTime)(value)});case import_core62.PropertyType.markdown:return(0,import_jsx_runtime55.jsx)("pre",{children:value});case import_core62.PropertyType.Address:return(0,import_jsx_runtime55.jsx)(AddressDisplay,{value});case import_core62.PropertyType.Annotation:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:value?.text});case import_core62.PropertyType.Attachment:return(0,import_jsx_runtime55.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core62.PropertyType.CodeableConcept:return(0,import_jsx_runtime55.jsx)(CodeableConceptDisplay,{value});case import_core62.PropertyType.Coding:return(0,import_jsx_runtime55.jsx)(CodingDisplay,{value});case import_core62.PropertyType.ContactDetail:return(0,import_jsx_runtime55.jsx)(ContactDetailDisplay,{value});case import_core62.PropertyType.ContactPoint:return(0,import_jsx_runtime55.jsx)(ContactPointDisplay,{value});case import_core62.PropertyType.HumanName:return(0,import_jsx_runtime55.jsx)(HumanNameDisplay,{value});case import_core62.PropertyType.Identifier:return(0,import_jsx_runtime55.jsx)(IdentifierDisplay,{value});case import_core62.PropertyType.Money:return(0,import_jsx_runtime55.jsx)(MoneyDisplay,{value});case import_core62.PropertyType.Period:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:(0,import_core62.formatPeriod)(value)});case import_core62.PropertyType.Quantity:case import_core62.PropertyType.Duration:return(0,import_jsx_runtime55.jsx)(QuantityDisplay,{value});case import_core62.PropertyType.Range:return(0,import_jsx_runtime55.jsx)(RangeDisplay,{value});case import_core62.PropertyType.Ratio:return(0,import_jsx_runtime55.jsx)(RatioDisplay,{value});case import_core62.PropertyType.Reference:return(0,import_jsx_runtime55.jsx)(ReferenceDisplay,{value,link:props.link});case import_core62.PropertyType.Timing:return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:(0,import_core62.formatTiming)(value)});case import_core62.PropertyType.Dosage:case import_core62.PropertyType.UsageContext:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime55.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core62.PropertyType.Extension:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime55.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime55.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}var import_react29=require("react");var import_jsx_runtime56=require("react/jsx-runtime"),EXTENSION_KEYS2=["extension","modifierExtension"],IGNORED_PROPERTIES2=DEFAULT_IGNORED_PROPERTIES.filter(prop=>!EXTENSION_KEYS2.includes(prop));function BackboneElementDisplay(props){let typedValue=props.value,{value,type:typeName}=typedValue,parentElementsContext=(0,import_react29.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react29.useMemo)(()=>(0,import_core63.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react29.useMemo)(()=>{if(typeSchema)return(0,import_core63.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if((0,import_core63.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime56.jsxs)("div",{children:[typeName,"\xA0not implemented"]});if(typeof value=="object"&&"name"in value&&Object.keys(value).length===1&&typeof value.name=="string")return(0,import_jsx_runtime56.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime56.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core63.isEmpty)(property.slicing?.slices))return null;if(IGNORED_PROPERTIES2.includes(key))return null;if(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&property.path.split(".").length===2||key.includes("."))return null;let[propertyValue,propertyType]=getValueAndType(typedValue,key,elementsContext.profileUrl);if((props.ignoreMissingValues||property.max===0)&&(0,import_core63.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime56.jsx)(ResourcePropertyDisplay,{property,propertyType,path:props.path+"."+key,value:propertyValue,ignoreMissingValues:props.ignoreMissingValues,includeArrayDescriptionListEntry:isArrayProperty,link:props.link},key);return isArrayProperty?resourcePropertyDisplay:(0,import_jsx_runtime56.jsx)(DescriptionListEntry,{term:(0,import_core63.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core97=require("@medplum/core"),import_react52=require("react");var import_core95=require("@mantine/core"),import_core96=require("@medplum/core"),import_react51=require("react");var import_core65=require("@mantine/core"),import_react30=require("react");var import_core64=require("@mantine/core"),import_jsx_runtime57=require("react/jsx-runtime"),READ_ONLY_TOOLTIP_TEXT="Read Only";function maybeWrapWithTooltip(tooltipText,children){return tooltipText?(0,import_jsx_runtime57.jsx)(import_core64.Tooltip.Floating,{label:tooltipText,children}):children}var FormSection_default={dimmed:"FormSection_dimmed",preserveBreaks:"FormSection_preserveBreaks"};var import_jsx_runtime58=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react30.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime58.jsxs)(import_core65.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime58.jsx)("div",{children:props.children}),(0,import_jsx_runtime58.jsx)("div",{children:(0,import_jsx_runtime58.jsx)(import_core65.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:props?.readonly?FormSection_default.dimmed:void 0},description:props.description,withAsterisk:props.withAsterisk,children:null})})]}))}var import_core66=require("@mantine/core"),import_react31=require("react");var import_jsx_runtime59=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react31.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,maybeWrapWithTooltip(props?.readonly?READ_ONLY_TOOLTIP_TEXT:void 0,(0,import_jsx_runtime59.jsx)(import_core66.Input.Wrapper,{id:props.htmlFor,label,classNames:{label:clsx_default({[FormSection_default.dimmed]:props?.readonly},FormSection_default.preserveBreaks)},description:props.description,withAsterisk:props.withAsterisk,error:getErrorsForInput(props.outcome,props.errorExpression??props.htmlFor),"data-testid":props.testId,children:props.children}))}var import_core67=require("@medplum/core");function setPropertyValue(obj,key,propName,elementDefinition,value){let types=elementDefinition.type;if(types.length>1)for(let type of types){let compoundKey=key.replace("[x]",(0,import_core67.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return(0,import_core67.isEmpty)(value)?obj[propName]=void 0:obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core67.isEmpty)(profile.url)&&!(0,import_core67.isEmpty)(profile.name)}var import_core93=require("@mantine/core"),import_core94=require("@medplum/core"),import_react50=require("react");var import_react32=require("react");var import_jsx_runtime60=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react32.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime60.jsx)(ValueSetAutocomplete,{defaultValue:value&&codeableConceptToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeableConceptToValueSetElement(concept){return concept.coding?.map(c=>({system:c.system,code:c.code,display:c.display}))}function valueSetElementToCodeableConcept(elements){if(elements.length!==0)return{coding:elements.map(e=>({system:e.system,code:e.code,display:e.display}))}}var import_react33=require("react");var import_jsx_runtime61=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react33.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime61.jsx)(ValueSetAutocomplete,{defaultValue:value&&codingToValueSetElement(value),maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core69=require("@mantine/core"),import_react35=require("react");var import_core68=require("@mantine/core"),import_react34=require("react");var import_jsx_runtime62=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath,getExtendedProps}=(0,import_react34.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react34.useState)(props.defaultValue),ref=(0,import_react34.useRef)();ref.current=contactPoint;let[systemElement,useElement,valueElement]=(0,import_react34.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]),[systemProps,useProps,valueProps]=(0,import_react34.useMemo)(()=>["system","use","value"].map(field=>getExtendedProps(path+"."+field)),[getExtendedProps,path]);function setContactPointWrapper(newValue){newValue&&Object.keys(newValue).length===0&&(newValue=void 0),setContactPoint(newValue),props.onChange&&props.onChange(newValue)}function setSystem(system){let newValue={...ref.current,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...ref.current,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...ref.current,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime62.jsxs)(import_core68.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime62.jsx)(import_core68.NativeSelect,{disabled:props.disabled||systemProps?.readonly,"data-testid":"system",defaultValue:contactPoint?.system,required:(systemElement?.min??0)>0,onChange:e=>setSystem(e.currentTarget.value),data:["","email","phone","fax","pager","sms","other"],error:getErrorsForInput(outcome,errorPath+".system")}),(0,import_jsx_runtime62.jsx)(import_core68.NativeSelect,{disabled:props.disabled||useProps?.readonly,"data-testid":"use",defaultValue:contactPoint?.use,required:(useElement?.min??0)>0,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","mobile"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime62.jsx)(import_core68.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",defaultValue:contactPoint?.value,required:(valueElement?.min??0)>0,onChange:e=>setValue(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".value")})]})}var import_jsx_runtime63=require("react/jsx-runtime");function ContactDetailInput(props){let[contactPoint,setContactDetail]=(0,import_react35.useState)(props.defaultValue),ref=(0,import_react35.useRef)();ref.current=contactPoint;let{getExtendedProps}=(0,import_react35.useContext)(ElementsContext),[nameProps,telecomProps]=(0,import_react35.useMemo)(()=>["name","telecom"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setContactDetailWrapper(newValue){setContactDetail(newValue),props.onChange&&props.onChange(newValue)}function setName(name){let newValue={...ref.current,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...ref.current,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime63.jsxs)(import_core69.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime63.jsx)(import_core69.TextInput,{disabled:props.disabled||nameProps?.readonly,"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactPoint?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime63.jsx)(ContactPointInput,{disabled:props.disabled||telecomProps?.readonly,name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactPoint?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core71=require("@mantine/core");var import_core70=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core70.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core70.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime64=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime64.jsx)(import_core71.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props["data-testid"]??props.name,placeholder:props.placeholder,required:props.required,disabled:props.disabled,type:getInputType(),defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core72=require("@medplum/core"),import_react_hooks23=require("@medplum/react-hooks"),import_react36=require("react");var import_jsx_runtime65=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=(0,import_react_hooks23.useMedplum)(),profileUrl=(0,import_react36.useMemo)(()=>{if((0,import_core72.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react36.useState)(profileUrl!==void 0);return(0,import_react36.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>setLoadingProfile(!1)).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core72.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime65.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime65.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core73=require("@mantine/core"),import_react37=require("react");var import_jsx_runtime66=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react37.useState)(props.defaultValue),{getExtendedProps}=(0,import_react37.useContext)(ElementsContext),[useProps,prefixProps,givenProps,familyProps,suffixProps]=(0,import_react37.useMemo)(()=>["use","prefix","given","family","suffix"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...value,use:use||void 0})}function setPrefix(prefix){setValueWrapper({...value,prefix:prefix?prefix.split(" "):void 0})}function setGiven(given){setValueWrapper({...value,given:given?given.split(" "):void 0})}function setFamily(family){setValueWrapper({...value,family:family||void 0})}function setSuffix(suffix){setValueWrapper({...value,suffix:suffix?suffix.split(" "):void 0})}let errorPath=props.valuePath??path;return(0,import_jsx_runtime66.jsxs)(import_core73.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime66.jsx)(import_core73.NativeSelect,{disabled:props.disabled||useProps?.readonly,defaultValue:value?.use,name:props.name+"-use","data-testid":"use",onChange:e=>setUse(e.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"],error:getErrorsForInput(outcome,errorPath+".use")}),(0,import_jsx_runtime66.jsx)(import_core73.TextInput,{disabled:props.disabled||prefixProps?.readonly,placeholder:"Prefix",name:props.name+"-prefix",defaultValue:value?.prefix?.join(" "),onChange:e=>setPrefix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".prefix")}),(0,import_jsx_runtime66.jsx)(import_core73.TextInput,{disabled:props.disabled||givenProps?.readonly,placeholder:"Given",name:props.name+"-given",defaultValue:value?.given?.join(" "),onChange:e=>setGiven(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".given")}),(0,import_jsx_runtime66.jsx)(import_core73.TextInput,{disabled:props.disabled||familyProps?.readonly,name:props.name+"-family",placeholder:"Family",defaultValue:value?.family,onChange:e=>setFamily(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".family")}),(0,import_jsx_runtime66.jsx)(import_core73.TextInput,{disabled:props.disabled||suffixProps?.readonly,placeholder:"Suffix",name:props.name+"-suffix",defaultValue:value?.suffix?.join(" "),onChange:e=>setSuffix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".suffix")})]})}var import_core74=require("@mantine/core"),import_react38=require("react");var import_jsx_runtime67=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react38.useState)(props.defaultValue),{elementsByPath,getExtendedProps}=(0,import_react38.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react38.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]),[systemProps,valueProps]=(0,import_react38.useMemo)(()=>["system","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let errorPath=props.valuePath??props.path;return(0,import_jsx_runtime67.jsxs)(import_core74.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime67.jsx)(import_core74.TextInput,{disabled:props.disabled||systemProps?.readonly,placeholder:"System",required:(systemElement?.min??0)>0,defaultValue:value?.system,onChange:e=>setValueWrapper({...value,system:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".system")}),(0,import_jsx_runtime67.jsx)(import_core74.TextInput,{disabled:props.disabled||valueProps?.readonly,placeholder:"Value",required:(valueElement?.min??0)>0,defaultValue:value?.value,onChange:e=>setValueWrapper({...value,value:e.currentTarget.value}),error:getErrorsForInput(props.outcome,errorPath+".value")})]})}var import_core75=require("@mantine/core");var import_react39=require("react");var import_jsx_runtime68=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react39.useState)(props.defaultValue),{getExtendedProps}=(0,import_react39.useContext)(ElementsContext),[currencyProps,valueProps]=(0,import_react39.useMemo)(()=>["currency","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),setValueWrapper=(0,import_react39.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react39.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react39.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime68.jsx)(import_core75.NativeSelect,{disabled:props.disabled||currencyProps?.readonly,defaultValue:value?.currency,data,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:handleCurrencyChange});return(0,import_jsx_runtime68.jsx)(import_core75.TextInput,{disabled:props.disabled||valueProps?.readonly,type:"number",name:props.name,label:props.label,placeholder:props.placeholder??"Value",defaultValue:value?.value?.toString()??"USD",leftSection:(0,import_jsx_runtime68.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core76=require("@mantine/core"),import_react40=require("react");var import_jsx_runtime69=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react40.useState)(props.defaultValue),{getExtendedProps}=(0,import_react40.useContext)(ElementsContext),[startProps,endProps]=(0,import_react40.useMemo)(()=>["start","end"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime69.jsxs)(import_core76.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime69.jsx)(DateTimeInput,{disabled:props.disabled||startProps?.readonly,name:props.name+".start",placeholder:"Start",defaultValue:value?.start,onChange:newValue=>setValueWrapper({...value,start:newValue})}),(0,import_jsx_runtime69.jsx)(DateTimeInput,{disabled:props.disabled||endProps?.readonly,name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core77=require("@mantine/core"),import_react41=require("react");var import_jsx_runtime70=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react41.useState)(props.defaultValue),{getExtendedProps}=(0,import_react41.useContext)(ElementsContext),[comparatorProps,valueProps,unitProps]=(0,import_react41.useMemo)(()=>["comparator","value","unit"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime70.jsxs)(import_core77.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime70.jsx)(import_core77.NativeSelect,{disabled:props.disabled||comparatorProps?.readonly,style:{width:80},"data-testid":props.name+"-comparator",defaultValue:value?.comparator,data:["","<","<=",">=",">"],onChange:e=>setValueWrapper({...value,comparator:e.currentTarget.value})}),(0,import_jsx_runtime70.jsx)(import_core77.TextInput,{disabled:props.disabled||valueProps?.readonly,id:props.name,name:props.name,required:props.required,"data-autofocus":props.autoFocus,"data-testid":props.name+"-value",type:"number",placeholder:"Value",defaultValue:value?.value,autoFocus:props.autoFocus,step:"any",onWheel:e=>{props.disableWheel&&e.currentTarget.blur()},onChange:e=>{setValueWrapper({...value,value:tryParseNumber(e.currentTarget.value)})}}),(0,import_jsx_runtime70.jsx)(import_core77.TextInput,{disabled:props.disabled||unitProps?.readonly,placeholder:"Unit","data-testid":props.name+"-unit",defaultValue:value?.unit,onChange:e=>setValueWrapper({...value,unit:e.currentTarget.value})})]})}function tryParseNumber(str){if(str)return parseFloat(str)}var import_core78=require("@mantine/core"),import_react42=require("react");var import_jsx_runtime71=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react42.useState)(props.defaultValue),{getExtendedProps}=(0,import_react42.useContext)(ElementsContext),[lowProps,highProps]=(0,import_react42.useMemo)(()=>["low","high"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime71.jsxs)(import_core78.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime71.jsx)(QuantityInput,{path:props.path+".low",disabled:props.disabled||lowProps?.readonly,name:props.name+"-low",defaultValue:value?.low,onChange:v=>setValueWrapper({...value,low:v})}),(0,import_jsx_runtime71.jsx)(QuantityInput,{path:props.path+".high",disabled:props.disabled||highProps?.readonly,name:props.name+"-high",defaultValue:value?.high,onChange:v=>setValueWrapper({...value,high:v})})]})}var import_core79=require("@mantine/core"),import_react43=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react43.useState)(props.defaultValue),{getExtendedProps}=(0,import_react43.useContext)(ElementsContext),[numeratorProps,denominatorProps]=(0,import_react43.useMemo)(()=>["numerator","denominator"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime72.jsxs)(import_core79.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime72.jsx)(QuantityInput,{path:props.path+".numerator",disabled:props.disabled||numeratorProps?.readonly,name:props.name+"-numerator",defaultValue:value?.numerator,onChange:v=>setValueWrapper({...value,numerator:v})}),(0,import_jsx_runtime72.jsx)(QuantityInput,{path:props.path+".denominator",disabled:props.disabled||denominatorProps?.readonly,name:props.name+"-denominator",defaultValue:value?.denominator,onChange:v=>setValueWrapper({...value,denominator:v})})]})}var import_core82=require("@mantine/core"),import_core83=require("@medplum/core"),import_react_hooks25=require("@medplum/react-hooks"),import_react45=require("react");var import_core80=require("@mantine/core"),import_core81=require("@medplum/core"),import_react_hooks24=require("@medplum/react-hooks"),import_react44=require("react");var import_jsx_runtime73=require("react/jsx-runtime"),SEARCH_CODES={Device:"device-name",Observation:"code",Subscription:"criteria",User:"email:contains"},NAME_RESOURCE_TYPES=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","CareTeam","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","Group","HealthcareService","ImplementationGuide","InsurancePlan","Library","Location","Measure","MedicinalProduct","MessageDefinition","NamingSystem","OperationDefinition","Organization","Patient","Person","PlanDefinition","Practitioner","Project","Questionnaire","RelatedPerson","ResearchDefinition","ResearchElementDefinition","ResearchStudy","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function toOption3(resource){return{value:(0,import_core81.getReferenceString)(resource),label:(0,import_core81.getDisplayString)(resource),resource}}function ResourceInput(props){let medplum=(0,import_react_hooks24.useMedplum)(),{resourceType,searchCriteria}=props,[outcome,setOutcome]=(0,import_react44.useState)(),defaultValue2=(0,import_react_hooks24.useResource)(props.defaultValue,setOutcome),ItemComponent3=props.itemComponent??DefaultItemComponent2,onChange=props.onChange,loadValues=(0,import_react44.useCallback)(async(input,signal)=>{let searchCode=getSearchParamForResourceType(resourceType),searchParams=new URLSearchParams({[searchCode]:input??"",_count:"10",...searchCriteria});return await medplum.searchResources(resourceType,searchParams,{signal})},[medplum,resourceType,searchCriteria]),handleChange=(0,import_react44.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_core81.isPopulated)(props.defaultValue)&&!outcome&&!defaultValue2?null:(0,import_jsx_runtime73.jsx)(AsyncAutocomplete,{disabled:props.disabled,name:props.name,label:props.label,error:props.error,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultValue2,placeholder:props.placeholder,maxValues:1,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var DefaultItemComponent2=(0,import_react44.forwardRef)(({label,resource,active:_active,...others},ref)=>(0,import_jsx_runtime73.jsx)("div",{ref,...others,children:(0,import_jsx_runtime73.jsxs)(import_core80.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime73.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime73.jsxs)("div",{children:[(0,import_jsx_runtime73.jsx)(import_core80.Text,{children:label}),(0,import_jsx_runtime73.jsx)(import_core80.Text,{size:"xs",c:"dimmed",children:resource.birthDate||resource.id})]})]})}));function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var import_jsx_runtime74=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=(0,import_react_hooks25.useMedplum)(),[value,setValue]=(0,import_react45.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react45.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react45.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react45.useRef)(new import_core83.LRUCache),searchCriteria=(0,import_react45.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react45.useEffect)(()=>{let anyToFetch=!1,newTargetTypePromises=targetTypes?.map(tt=>{if(!shouldFetchResourceType(tt))return Promise.resolve(tt);anyToFetch=!0;let cacheKey=tt.value,cached=promiseCache.current.get(cacheKey);if(cached)return cached;let promise=fetchResourceTypeOfProfile(medplum,tt.value).then(profile=>{let newTargetType={...tt};return profile?(0,import_core83.isPopulated)(profile.type)?(newTargetType.resourceType=profile.type,newTargetType.name=profile.name,newTargetType.title=profile.title):(console.error(`StructureDefinition.type missing for ${tt.value}`),newTargetType.error="StructureDefinition.type missing"):(console.error(`StructureDefinition not found for ${tt.value}`),newTargetType.error="StructureDefinition not found"),newTargetType}).catch(reason=>(console.error(reason),{...tt,error:reason})),readablePromise=new import_core83.ReadablePromise(promise);return promiseCache.current.set(cacheKey,readablePromise),readablePromise});!newTargetTypePromises||!anyToFetch||Promise.all(newTargetTypePromises).then(newTargetTypes=>{if(setTargetTypes(newTargetTypes),!targetType)return;let index=newTargetTypes.findIndex(tt=>tt.value===targetType.value||tt.resourceType===targetType.resourceType);if(index===-1){console.debug(`defaultValue had unexpected resourceType: ${targetType.resourceType}`);return}setTargetType(newTargetTypes[index])}).catch(console.error)},[medplum,targetType,targetTypes]);let setValueHelper=(0,import_react45.useCallback)(item=>{let newValue=item?(0,import_core83.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react45.useMemo)(()=>targetTypes?targetTypes.map(tt=>({value:tt.value,label:tt.type==="profile"?tt.title??tt.name??tt.resourceType??tt.value:tt.value})):[],[targetTypes]);return(0,import_jsx_runtime74.jsxs)(import_core82.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime74.jsx)(import_core82.NativeSelect,{disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:targetType?.resourceType,autoFocus:props.autoFocus,onChange:e=>{let newValue=e.currentTarget.value,newTargetType=targetTypes.find(tt=>tt.value===newValue);setTargetType(newTargetType)},data:typeSelectOptions}),!targetTypes&&(0,import_jsx_runtime74.jsx)(ResourceTypeInput,{disabled:props.disabled,autoFocus:props.autoFocus,testId:"reference-input-resource-type-input",defaultValue:targetType?.resourceType,onChange:newResourceType=>{setTargetType(newResourceType?{type:"resourceType",value:newResourceType,resourceType:newResourceType}:void 0)},name:props.name+"-resourceType",placeholder:"Resource Type"}),(0,import_jsx_runtime74.jsx)(ResourceInput,{resourceType:targetType?.resourceType,name:props.name+"-id",required:props.required,placeholder:props.placeholder,defaultValue:value,searchCriteria,onChange:setValueHelper,disabled:props.disabled})]})}function createTargetTypes(resourceTypesAndProfileUrls){if(!resourceTypesAndProfileUrls||resourceTypesAndProfileUrls.length===0||resourceTypesAndProfileUrls.length===1&&resourceTypesAndProfileUrls[0]==="Resource")return;let results=[];for(let value of resourceTypesAndProfileUrls)value.includes("/")?results.push({type:"profile",value}):results.push({type:"resourceType",value,resourceType:value});return results}function getInitialTargetType(defaultValue2,targetTypes){let defaultValueResourceType=defaultValue2?.reference?.split("/")[0];if(defaultValueResourceType){let targetType=targetTypes?.find(tt=>tt.resourceType===defaultValueResourceType);return targetType||{type:"resourceType",value:defaultValueResourceType,resourceType:defaultValueResourceType}}if(targetTypes&&targetTypes.length>0)return targetTypes[0]}async function fetchResourceTypeOfProfile(medplum,profileUrl){let profile=(0,import_core83.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{ StructureDefinitionList(url: "${profileUrl}", _sort: "_lastUpdated", _count: 1) { type, name, title, } }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core83.isEmpty)(targetType.resourceType)}var import_core88=require("@mantine/core"),import_core89=require("@medplum/core"),import_react_hooks26=require("@medplum/react-hooks"),import_react47=require("react");var import_core86=require("@mantine/core"),import_core87=require("@medplum/core"),import_react46=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core84=require("@mantine/core");var import_jsx_runtime75=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime75.jsx)(import_core84.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime75.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime75.jsx)(import_core84.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime75.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core85=require("@mantine/core");var import_jsx_runtime76=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime76.jsx)(import_core85.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime76.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime77=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react46.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react46.useContext)(ElementsContext),contextValue=(0,import_react46.useMemo)(()=>{if((0,import_core87.isPopulated)(sliceElements))return(0,import_core87.buildElementsContext)({parentContext:parentElementsContextValue,elements:sliceElements,path:props.path,profileUrl:slice.typeSchema?.url})},[parentElementsContextValue,props.path,slice.typeSchema?.url,sliceElements]);function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}let required=slice.min>0,indentedStack=(0,import_core87.isEmpty)(slice.elements),propertyDisplayName=(0,import_core87.getPropertyDisplayName)(slice.name),showEmptyMessage=props.property.readonly&&values.length===0;return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime77.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,readonly:props.property.readonly,children:showEmptyMessage?(0,import_jsx_runtime77.jsx)(import_core86.Text,{c:"dimmed",children:"(empty)"}):(0,import_jsx_runtime77.jsxs)(import_core86.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime77.jsxs)(import_core86.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime77.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime77.jsx)(ElementDefinitionTypeInput,{elementDefinitionType:slice.type[0],name:slice.name,defaultValue:value,onChange:newValue=>{let newValues=[...values];newValues[valueIndex]=newValue,setValuesWrapper(newValues)},outcome:props.outcome,min:slice.min,max:slice.max,binding:slice.binding,path:props.path,valuePath:void 0,readOnly:props.property.readonly})}),!props.property.readonly&&values.length>slice.min&&(0,import_jsx_runtime77.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),!props.property.readonly&&values.length{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_jsx_runtime78=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=(0,import_react_hooks26.useMedplum)(),[loading,setLoading]=(0,import_react47.useState)(!0),[slices,setSlices]=(0,import_react47.useState)([]),[defaultValue2]=(0,import_react47.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react47.useState)(()=>[defaultValue2]),ctx=(0,import_react47.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react47.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(defaultValue2,slices2,property.slicing,ctx.profileUrl);addPlaceholderValues(slicedValues2,slices2),setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,defaultValue2,ctx.profileUrl,setSlicedValues]);function setValuesWrapper(newValues,sliceIndex){let newSlicedValues=[...slicedValues];if(newSlicedValues[sliceIndex]=newValues,setSlicedValues(newSlicedValues),props.onChange){let cleaned=newSlicedValues.flat().filter(val=>val!==void 0);props.onChange(cleaned)}}if(loading)return(0,import_jsx_runtime78.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core89.getPathDisplayName)(property.path),showEmptyMessage=props.property.readonly&&slices.length===0&&defaultValue2.length===0;return(0,import_jsx_runtime78.jsxs)(import_core88.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[showEmptyMessage&&(0,import_jsx_runtime78.jsx)(import_core88.Text,{c:"dimmed",children:"(empty)"}),slices.map((slice,sliceIndex)=>(0,import_jsx_runtime78.jsx)(SliceInput,{slice,path:props.path,valuePath:props.valuePath,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>(0,import_jsx_runtime78.jsxs)(import_core88.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime78.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime78.jsx)(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,path:props.path,valuePath:getValuePath(props.path,props.valuePath,valueIndex),defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),!props.property.readonly&&(0,import_jsx_runtime78.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),!props.property.readonly&&showNonSliceValues&&slicedValues.flat().length{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function addPlaceholderValues(slicedValues,slices){for(let sliceIndex=0;sliceIndexsetRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime79.jsx)(import_core90.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications5.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime79.jsx)(IconCopy,{})})]})}var import_core91=require("@mantine/core"),import_core92=require("@medplum/core"),import_react49=require("react");var import_jsx_runtime80=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react49.useState)(props.defaultValue),[open,setOpen]=(0,import_react49.useState)(!props.disabled&&(props.defaultModalOpen??!1)),valueRef=(0,import_react49.useRef)();return valueRef.current=value,(0,import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment,{children:[(0,import_jsx_runtime80.jsxs)(import_core91.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime80.jsx)("span",{children:(0,import_core92.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime80.jsx)(import_core91.Button,{disabled:props.disabled,onClick:()=>setOpen(!0),children:"Edit"})]}),!props.disabled&&(0,import_jsx_runtime80.jsx)(TimingEditorDialog,{path:props.path,visible:open,defaultValue:valueRef.current,onOk:newValue=>{props.onChange&&props.onChange(newValue),setValue(newValue),setOpen(!1)},onCancel:()=>setOpen(!1)})]})}var defaultValue={repeat:{period:1,periodUnit:"d"}};function TimingEditorDialog(props){let[value,setValue]=(0,import_react49.useState)(props.defaultValue||defaultValue),{getExtendedProps}=(0,import_react49.useContext)(ElementsContext),[eventProps,repeatProps,repeatPeriodProps,repeatPeriodUnitProps,repeatDayOfWeekProps]=(0,import_react49.useMemo)(()=>["event","repeat","repeat.period","repeat.periodUnit","repeat.dayOfWeek"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),valueRef=(0,import_react49.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_runtime80.jsx)(import_core91.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime80.jsxs)(import_core91.Stack,{children:[(0,import_jsx_runtime80.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime80.jsx)(DateTimeInput,{disabled:eventProps?.readonly,name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime80.jsx)(import_core91.Switch,{disabled:repeatProps?.readonly,label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment,{children:[(0,import_jsx_runtime80.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime80.jsxs)(import_core91.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime80.jsx)(import_core91.TextInput,{disabled:repeatPeriodProps?.readonly,type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime80.jsx)(import_core91.NativeSelect,{disabled:repeatPeriodUnitProps?.readonly,id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.currentTarget.value),data:[{label:"second",value:"s"},{label:"minute",value:"min"},{label:"hour",value:"h"},{label:"day",value:"d"},{label:"week",value:"wk"},{label:"month",value:"mo"},{label:"year",value:"a"}]})]})}),value.repeat.periodUnit==="wk"&&(0,import_jsx_runtime80.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime80.jsx)(import_core91.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime80.jsx)(import_core91.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime80.jsx)(import_core91.Chip,{value:day,size:"xs",radius:"xl",disabled:repeatDayOfWeekProps?.readonly,children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime80.jsx)(import_core91.Group,{justify:"flex-end",children:(0,import_jsx_runtime80.jsx)(import_core91.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime81=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_core94.PropertyType.Attachment)return(0,import_jsx_runtime81.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange,disabled:property.readonly});let indent=propertyTypes[0]?.code!==import_core94.PropertyType.Extension;return(0,import_jsx_runtime81.jsx)(ResourceArrayInput,{property,name,path:props.path,valuePath:props.valuePath,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}else return propertyTypes.length>1?(0,import_jsx_runtime81.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime81.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core94.capitalize)(propertyTypes[0].code));props.onChange(newValue,newPropName)}},outcome:props.outcome,elementDefinitionType:propertyTypes[0],min:property.min,max:property.min,binding:property.binding,path:props.path,valuePath:props.valuePath,readOnly:property.readonly})}function ElementDefinitionInputSelector(props){let propertyTypes=props.elementDefinitionTypes,initialPropertyType;props.defaultPropertyType&&(initialPropertyType=propertyTypes.find(t=>t.code===props.defaultPropertyType)),initialPropertyType||(initialPropertyType=propertyTypes[0]);let[selectedType,setSelectedType]=(0,import_react50.useState)(initialPropertyType);return(0,import_jsx_runtime81.jsxs)(import_core93.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime81.jsx)(import_core93.NativeSelect,{disabled:props.property.readonly,style:{width:"200px"},defaultValue:selectedType.code,"data-testid":props.name&&props.name+"-selector",onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),(0,import_jsx_runtime81.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_core94.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path,valuePath:props.valuePath,readOnly:props.property.readonly})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path,valuePath,readOnly}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react50.useContext)(ElementsContext),defaultValue2=(0,import_react50.useMemo)(()=>{if(!(0,import_core94.isComplexTypeCode)(propertyType)||!(0,import_core94.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core94.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core94.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core94.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core94.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime81.jsx)("div",{children:"Property type not specified "});function getComplexInputProps(){return{name,defaultValue:defaultValue2,onChange,outcome,path,valuePath,disabled:readOnly}}function getPrimitiveInputProps(){let error=getErrorsForInput(props.outcome,valuePath??path);return{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,error,disabled:readOnly}}switch(propertyType){case import_core94.PropertyType.SystemString:case import_core94.PropertyType.canonical:case import_core94.PropertyType.string:case import_core94.PropertyType.time:case import_core94.PropertyType.uri:case import_core94.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime81.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime81.jsx)(import_core93.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core94.PropertyType.date:return(0,import_jsx_runtime81.jsx)(import_core93.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core94.PropertyType.dateTime:case import_core94.PropertyType.instant:return(0,import_jsx_runtime81.jsx)(DateTimeInput,{...getPrimitiveInputProps(),onChange,outcome});case import_core94.PropertyType.decimal:case import_core94.PropertyType.integer:case import_core94.PropertyType.positiveInt:case import_core94.PropertyType.unsignedInt:return(0,import_jsx_runtime81.jsx)(import_core93.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core94.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core94.PropertyType.code:return(0,import_jsx_runtime81.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet,creatable:!0,maxValues:1});case import_core94.PropertyType.boolean:return(0,import_jsx_runtime81.jsx)(import_core93.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core94.PropertyType.base64Binary:case import_core94.PropertyType.markdown:return(0,import_jsx_runtime81.jsx)(import_core93.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core94.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core94.PropertyType.Address:return(0,import_jsx_runtime81.jsx)(AddressInput,{...getComplexInputProps()});case import_core94.PropertyType.Annotation:return(0,import_jsx_runtime81.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core94.PropertyType.Attachment:return(0,import_jsx_runtime81.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core94.PropertyType.CodeableConcept:return(0,import_jsx_runtime81.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core94.PropertyType.Coding:return(0,import_jsx_runtime81.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core94.PropertyType.ContactDetail:return(0,import_jsx_runtime81.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core94.PropertyType.ContactPoint:return(0,import_jsx_runtime81.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core94.PropertyType.Extension:return(0,import_jsx_runtime81.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core94.PropertyType.HumanName:return(0,import_jsx_runtime81.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core94.PropertyType.Identifier:return(0,import_jsx_runtime81.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core94.PropertyType.Money:return(0,import_jsx_runtime81.jsx)(MoneyInput,{...getComplexInputProps()});case import_core94.PropertyType.Period:return(0,import_jsx_runtime81.jsx)(PeriodInput,{...getComplexInputProps()});case import_core94.PropertyType.Duration:case import_core94.PropertyType.Quantity:return(0,import_jsx_runtime81.jsx)(QuantityInput,{...getComplexInputProps()});case import_core94.PropertyType.Range:return(0,import_jsx_runtime81.jsx)(RangeInput,{...getComplexInputProps()});case import_core94.PropertyType.Ratio:return(0,import_jsx_runtime81.jsx)(RatioInput,{...getComplexInputProps()});case import_core94.PropertyType.Reference:return(0,import_jsx_runtime81.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core94.PropertyType.Timing:return(0,import_jsx_runtime81.jsx)(TimingInput,{...getComplexInputProps()});case import_core94.PropertyType.Dosage:case import_core94.PropertyType.UsageContext:default:return(0,import_jsx_runtime81.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core94.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_runtime82=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react51.useState)(props.defaultValue??{}),elementsContext=(0,import_react51.useContext)(ElementsContext),elementsToRender=(0,import_react51.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_runtime82.jsx)(import_core95.Stack,{style:{flexGrow:1},"data-testid":props.testId,children:elementsToRender.map(([key,element])=>{let[propertyValue,propertyType]=getValueAndTypeFromElement(typedValue,key,element),required=element.min!==void 0&&element.min>0,valuePath=props.valuePath?props.valuePath+"."+key:void 0,resourcePropertyInput=(0,import_jsx_runtime82.jsx)(ResourcePropertyInput,{property:element,name:key,path:props.path+"."+key,valuePath,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.includes(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?(0,import_jsx_runtime82.jsx)(CheckboxFormSection,{title:(0,import_core96.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,readonly:element.readonly,children:resourcePropertyInput},key):(0,import_jsx_runtime82.jsx)(FormSection,{title:(0,import_core96.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,readonly:element.readonly,children:resourcePropertyInput},key)})})}var import_jsx_runtime83=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react52.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react52.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react52.useMemo)(()=>(0,import_core97.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react52.useMemo)(()=>{if(typeSchema)return(0,import_core97.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime83.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime83.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core98=require("@mantine/core"),import_react53=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_runtime84=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react53.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_react53.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime84.jsxs)("div",{children:[(0,import_jsx_runtime84.jsxs)(import_core98.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime84.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime84.jsxs)(import_core98.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime84.jsx)(import_core98.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime84.jsx)(import_core98.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime84.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime84.jsx)("thead",{children:(0,import_jsx_runtime84.jsxs)("tr",{children:[(0,import_jsx_runtime84.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime84.jsx)("th",{children:"MON"}),(0,import_jsx_runtime84.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime84.jsx)("th",{children:"WED"}),(0,import_jsx_runtime84.jsx)("th",{children:"THU"}),(0,import_jsx_runtime84.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime84.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime84.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime84.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime84.jsx)("td",{children:day&&(0,import_jsx_runtime84.jsx)(import_core98.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;ic.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a,b)=>a.sent.localeCompare(b.sent)),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,onMessageUpdated,inputDisabled,onError,...paperProps}=props,medplum=(0,import_react_hooks27.useMedplum)(),inputRef=(0,import_react54.useRef)(null),scrollAreaRef=(0,import_react54.useRef)(null),firstScrollRef=(0,import_react54.useRef)(!0),initialLoadRef=(0,import_react54.useRef)(!0),[profile,setProfile]=(0,import_react54.useState)(medplum.getProfile()),[reconnecting,setReconnecting]=(0,import_react54.useState)(!1),[loading,setLoading]=(0,import_react54.useState)(!0);loading||(initialLoadRef.current=!1);let profileRefStr=(0,import_react54.useMemo)(()=>profile?(0,import_core100.getReferenceString)(medplum.getProfile()):"",[profile,medplum]),searchMessages=(0,import_react54.useCallback)(async()=>{setLoading(!0);let searchParams=new URLSearchParams(query);searchParams.append("_sort","-sent"),searchParams.append("sent:missing","false");let searchResult=await medplum.searchResources("Communication",searchParams,{cache:"no-cache"});upsertCommunications(communicationsRef.current,searchResult,setCommunications),setLoading(!1)},[medplum,setCommunications,query]);(0,import_react54.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core100.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react_hooks27.useSubscription)(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),(0,import_core100.getReferenceString)(communication.sender)!==profileRefStr&&(communicationsRef.current.find(c=>c.id===communication.id)?onMessageUpdated?.(communication):onMessageReceived?.(communication))},{onWebSocketClose:(0,import_react54.useCallback)(()=>{reconnecting||setReconnecting(!0),(0,import_notifications6.showNotification)({color:"red",message:"Live chat disconnected. Attempting to reconnect..."})},[reconnecting]),onWebSocketOpen:(0,import_react54.useCallback)(()=>{reconnecting&&(0,import_notifications6.showNotification)({color:"green",message:"Live chat reconnected."})},[reconnecting]),onSubscriptionConnect:(0,import_react54.useCallback)(()=>{reconnecting&&(searchMessages().catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core100.normalizeErrorString)(err)})),setReconnecting(!1))},[reconnecting,searchMessages]),onError:(0,import_react54.useCallback)(err=>{onError?onError(err):showError((0,import_core100.normalizeErrorString)(err))},[onError])});let sendMessageInternal=(0,import_react54.useCallback)(formData=>{inputDisabled||(inputRef.current&&(inputRef.current.value=""),sendMessage(formData.message),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage]);(0,import_react54.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks2.useResizeObserver)(),communicationsRef=(0,import_react54.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react54.useRef)(communications),scrollToBottomRef=(0,import_react54.useRef)(!0);(0,import_react54.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react54.useEffect)(()=>{scrollToBottomRef.current&&scrollAreaRef.current?.scrollTo&&(scrollAreaRef.current.scrollTo({top:scrollAreaRef.current.scrollHeight,...firstScrollRef.current?{duration:0}:{behavior:"smooth"}}),firstScrollRef.current=!1,scrollToBottomRef.current=!1)});let myLastDeliveredId=(0,import_react54.useMemo)(()=>{let i=communications.length;for(;i--;){let comm=communications[i];if(comm.sender?.reference===profileRefStr&&comm.received)return comm.id}return""},[communications,profileRefStr]);return profile?(0,import_jsx_runtime85.jsxs)(import_core99.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[(0,import_jsx_runtime85.jsx)(import_core99.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime85.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:initialLoadRef.current?(0,import_jsx_runtime85.jsxs)(import_core99.Stack,{align:"stretch",mt:"lg",children:[(0,import_jsx_runtime85.jsxs)(import_core99.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime85.jsx)(import_core99.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime85.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]}),(0,import_jsx_runtime85.jsxs)(import_core99.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime85.jsx)(ChatBubbleSkeleton,{alignment:"right",parentWidth:parentRect.width}),(0,import_jsx_runtime85.jsx)(import_core99.Skeleton,{height:38,circle:!0,mr:"md"})]}),(0,import_jsx_runtime85.jsxs)(import_core99.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime85.jsx)(import_core99.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime85.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]})]},"skeleton-chat-messages"):(0,import_jsx_runtime85.jsxs)(import_core99.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:[(0,import_jsx_runtime85.jsx)(import_core99.LoadingOverlay,{visible:loading||reconnecting,style:{width:parentRect.width,height:parentRect.height,position:"absolute",zIndex:1}}),communications.map((c,i)=>{let prevCommunication=i>0?communications[i-1]:void 0,prevCommTime=prevCommunication?parseSentTime(prevCommunication):void 0,currCommTime=parseSentTime(c);return(0,import_jsx_runtime85.jsxs)(import_core99.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime85.jsx)("div",{style:{textAlign:"center"},children:currCommTime}),c.sender?.reference===profileRefStr?(0,import_jsx_runtime85.jsxs)(import_core99.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime85.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered:!!c.received&&c.id===myLastDeliveredId}),(0,import_jsx_runtime85.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender})]}):(0,import_jsx_runtime85.jsxs)(import_core99.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime85.jsx)(ResourceAvatar,{radius:"xl",value:c.sender}),(0,import_jsx_runtime85.jsx)(ChatBubble,{alignment:"left",communication:c})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})]})}),(0,import_jsx_runtime85.jsx)("div",{className:BaseChat_default.chatInputContainer,children:(0,import_jsx_runtime85.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime85.jsx)(import_core99.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",rightSectionWidth:42,disabled:inputDisabled,rightSection:inputDisabled?void 0:(0,import_jsx_runtime85.jsx)(import_core99.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime85.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,content=communication.payload?.[0]?.contentString||"",seenTime=new Date(communication.received??-1),senderResource=(0,import_react_hooks27.useResource)(communication.sender);return(0,import_jsx_runtime85.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime85.jsx)("div",{className:clsx_default(BaseChat_default.chatBubbleName,alignment==="right"&&BaseChat_default.chatBubbleNameRight),"aria-label":"Sender name",children:senderResource?(0,import_core100.getDisplayString)(senderResource):"[Unknown sender]"}),(0,import_jsx_runtime85.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime85.jsx)("div",{className:BaseChat_default.chatBubble,children:content})}),showDelivered&&(0,import_jsx_runtime85.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}function ChatBubbleSkeleton(props){let{alignment,parentWidth}=props;return(0,import_jsx_runtime85.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime85.jsx)("div",{className:BaseChat_default.chatBubbleName,"aria-label":"Placeholder sender name",children:(0,import_jsx_runtime85.jsx)("div",{style:{position:"relative"},children:(0,import_jsx_runtime85.jsx)(import_core99.Skeleton,{height:14,width:"100px",radius:"l",ml:alignment==="left"?"sm":void 0,style:alignment==="right"?{position:"absolute",right:5,top:-15}:void 0})})}),(0,import_jsx_runtime85.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime85.jsx)("div",{className:BaseChat_default.chatBubble,children:(0,import_jsx_runtime85.jsx)(import_core99.Skeleton,{height:14,width:parentWidth*.5,radius:"l"})})})]})}var import_core101=require("@mantine/core"),import_react_hooks28=require("@medplum/react-hooks");var import_react55=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime86=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=(0,import_react_hooks28.useMedplumProfile)(),[opened,setOpened]=(0,import_react55.useState)(open??!1);return(0,import_react55.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime86.jsxs)(import_jsx_runtime86.Fragment,{children:[opened&&(0,import_jsx_runtime86.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime86.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime86.jsx)(import_core101.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime86.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime86.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime86.jsx)(import_core101.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime86.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core102=require("@medplum/core"),import_react_hooks29=require("@medplum/react-hooks"),import_react56=require("react");var import_jsx_runtime87=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled,onError}=props,medplum=(0,import_react_hooks29.useMedplum)(),profile=(0,import_react_hooks29.useMedplumProfile)(),prevThreadId=(0,import_react_hooks29.usePrevious)(thread?.id),[communications,setCommunications]=(0,import_react56.useState)([]),profileRef=(0,import_react56.useMemo)(()=>profile?(0,import_core102.createReference)(profile):void 0,[profile]),threadRef=(0,import_react56.useMemo)(()=>(0,import_core102.createReference)(thread),[thread]);(0,import_react56.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react56.useCallback)(message=>{let profileRefStr=profileRef?(0,import_core102.getReferenceString)(profileRef):void 0;profileRefStr&&medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core102.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload:[{contentString:message}],partOf:[threadRef]}).then(communication=>{setCommunications([...communications,communication]),onMessageSent?.(communication)}).catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react56.useMemo)(()=>thread.recipient?.length===2?message=>{message.received&&message.status==="completed"||medplum.updateResource({...message,received:message.received??new Date().toISOString(),status:"completed"}).catch(console.error)}:void 0,[medplum,thread.recipient?.length]);return profile?(0,import_jsx_runtime87.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core102.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled,onError}):null}var import_core116=require("@mantine/core"),import_notifications7=require("@mantine/notifications"),import_core117=require("@medplum/core"),import_react_hooks34=require("@medplum/react-hooks");var import_react62=require("react");var import_core108=require("@mantine/core"),import_core109=require("@medplum/core"),import_react_hooks31=require("@medplum/react-hooks");var import_react58=require("react");var import_core103=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime88=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime88.jsx)(import_core103.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime88.jsx)(import_core103.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_core106=require("@mantine/core");var import_core104=require("@mantine/core"),import_core105=require("@medplum/core"),import_react_hooks30=require("@medplum/react-hooks"),import_react57=require("react");var import_jsx_runtime89=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react57.useState)(),resource=(0,import_react_hooks30.useResource)(value,setOutcome),text;if(outcome&&!(0,import_core105.isOk)(outcome))text=`[${(0,import_core105.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core105.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime89.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime89.jsx)(import_core104.Text,{component:"span",...rest,children:text})}var import_jsx_runtime90=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime90.jsxs)(import_core106.Group,{gap:"xs",children:[(0,import_jsx_runtime90.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime90.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core107=require("@mantine/core"),import_jsx_runtime91=require("react/jsx-runtime"),statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red",connected:"green",disconnected:"red"};function StatusBadge(props){return(0,import_jsx_runtime91.jsx)(import_core107.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_runtime92=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=(0,import_react_hooks31.useMedplum)(),diagnosticReport=(0,import_react_hooks31.useResource)(props.value),[specimens,setSpecimens]=(0,import_react58.useState)();if((0,import_react58.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_runtime92.jsxs)(import_core108.Stack,{children:[(0,import_jsx_runtime92.jsx)(import_core108.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime92.jsx)(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime92.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime92.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return(0,import_jsx_runtime92.jsxs)(import_core108.Group,{mt:"md",gap:30,children:[value.subject&&(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime92.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime92.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime92.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime92.jsx)(import_core108.Text,{children:(0,import_core109.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime92.jsx)(import_core108.Text,{children:(0,import_core109.capitalize)(value.status)})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime92.jsxs)(import_core108.Stack,{gap:"xs",children:[(0,import_jsx_runtime92.jsx)(import_core108.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime92.jsx)(import_core108.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime92.jsx)(import_core108.List.Item,{ml:"sm",children:(0,import_jsx_runtime92.jsxs)(import_core108.Group,{gap:20,children:[(0,import_jsx_runtime92.jsxs)(import_core108.Group,{gap:5,children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{fw:500,children:"Collected:"})," ",(0,import_core109.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime92.jsxs)(import_core108.Group,{gap:5,children:[(0,import_jsx_runtime92.jsx)(import_core108.Text,{fw:500,children:"Received:"})," ",(0,import_core109.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime92.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime92.jsx)("thead",{children:(0,import_jsx_runtime92.jsxs)("tr",{children:[(0,import_jsx_runtime92.jsx)("th",{children:"Test"}),(0,import_jsx_runtime92.jsx)("th",{children:"Value"}),(0,import_jsx_runtime92.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime92.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime92.jsx)("th",{children:"Category"}),(0,import_jsx_runtime92.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime92.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime92.jsx)("tbody",{children:(0,import_jsx_runtime92.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime92.jsx)(import_jsx_runtime92.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime92.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core109.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=(0,import_react_hooks31.useResource)(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:[(0,import_jsx_runtime92.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime92.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime92.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime92.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime92.jsx)("td",{children:(0,import_jsx_runtime92.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime92.jsx)("td",{children:(0,import_jsx_runtime92.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime92.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime92.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime92.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime92.jsx)(import_jsx_runtime92.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime92.jsx)("div",{children:(0,import_jsx_runtime92.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core109.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime92.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime92.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime92.jsx)("td",{children:observation.status&&(0,import_jsx_runtime92.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime92.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime92.jsx)("tr",{children:(0,import_jsx_runtime92.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime92.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime92.jsx)(import_jsx_runtime92.Fragment,{children:(0,import_core109.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime92.jsx)(import_jsx_runtime92.Fragment,{children:range.text}):(0,import_jsx_runtime92.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_core111=require("@mantine/core"),import_core112=require("@medplum/core"),import_react_hooks32=require("@medplum/react-hooks"),import_react60=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var import_react59=require("react"),import_core110=require("@mantine/core");var ResourceDiffRow_default={removed:"ResourceDiffRow_removed",added:"ResourceDiffRow_added"};var import_jsx_runtime93=require("react/jsx-runtime");function ResourceDiffRow(props){let{name,path,property,originalValue,revisedValue}=props,isAttachmentType=!!property?.type?.find(t=>t.code==="Attachment"),[isCollapsed,setIsCollapsed]=(0,import_react59.useState)(isAttachmentType),toggleCollapse=()=>setIsCollapsed(prev=>!prev);return(0,import_jsx_runtime93.jsx)(import_jsx_runtime93.Fragment,{children:isAttachmentType&&!isCollapsed||!isAttachmentType?(0,import_jsx_runtime93.jsx)(import_jsx_runtime93.Fragment,{children:(0,import_jsx_runtime93.jsxs)(import_core110.Table.Tr,{children:[(0,import_jsx_runtime93.jsx)(import_core110.Table.Td,{children:name}),(0,import_jsx_runtime93.jsx)(import_core110.Table.Td,{className:ResourceDiffRow_default.removed,children:originalValue&&(0,import_jsx_runtime93.jsx)(ResourcePropertyDisplay,{path,property,propertyType:originalValue.type,value:originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime93.jsx)(import_core110.Table.Td,{className:ResourceDiffRow_default.added,children:revisedValue&&(0,import_jsx_runtime93.jsx)(ResourcePropertyDisplay,{path,property,propertyType:revisedValue.type,value:revisedValue.value,ignoreMissingValues:!0})})]})}):(0,import_jsx_runtime93.jsxs)(import_core110.Table.Tr,{children:[(0,import_jsx_runtime93.jsx)(import_core110.Table.Td,{children:name}),(0,import_jsx_runtime93.jsx)(import_core110.Table.Td,{colSpan:2,style:{textAlign:"right"},children:(0,import_jsx_runtime93.jsx)(import_core110.Button,{onClick:toggleCollapse,variant:"light",children:"Expand"})})]})})}var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime94=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=(0,import_react_hooks32.useMedplum)(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react60.useState)(!1);(0,import_react60.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react60.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core112.toTypedValue)(original)],typedRevised=[(0,import_core112.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_core112.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core112.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core112.capitalize)(op.op)} ${fhirPath}`,path:property?.path??original.resourceType+"."+fhirPath,property,originalValue:touchUpValue(property,originalValue),revisedValue:touchUpValue(property,revisedValue)})}return result},[schemaLoaded,original,revised]);return diffTable?(0,import_jsx_runtime94.jsxs)(import_core111.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime94.jsx)(import_core111.Table.Thead,{children:(0,import_jsx_runtime94.jsxs)(import_core111.Table.Tr,{children:[(0,import_jsx_runtime94.jsx)(import_core111.Table.Th,{}),(0,import_jsx_runtime94.jsx)(import_core111.Table.Th,{children:"Before"}),(0,import_jsx_runtime94.jsx)(import_core111.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime94.jsx)(import_core111.Table.Tbody,{children:diffTable.map(row=>(0,import_jsx_runtime94.jsx)(ResourceDiffRow,{...row}))})]}):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;i0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){return(0,import_core112.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_core112.arrayify)(input).flatMap(v=>v.value);return isArray?inputValue:inputValue[0]}var import_core113=require("@medplum/core"),import_react_hooks33=require("@medplum/react-hooks"),import_react61=require("react");var import_jsx_runtime95=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=(0,import_react_hooks33.useMedplum)(),accessPolicy=medplum.getAccessPolicy(),value=(0,import_react_hooks33.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react61.useState)(!1);(0,import_react61.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{(0,import_core113.tryGetProfile)(profileUrl)?setSchemaLoaded(!0):console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)});else{let schemaName=value.resourceType;medplum.requestSchema(schemaName).then(()=>{setSchemaLoaded(!0)}).catch(console.error)}},[medplum,profileUrl,value]);let accessPolicyResource=(0,import_react61.useMemo)(()=>value&&(0,import_core113.satisfiedAccessPolicy)(value,import_core113.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,value]);return!schemaLoaded||!value?null:(0,import_jsx_runtime95.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:value.resourceType,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues,accessPolicyResource})}var import_core114=require("@mantine/core"),import_core115=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime96=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime96.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_runtime96.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime96.jsxs)(import_core114.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime96.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime96.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime96.jsx)(import_core114.Text,{size:"sm",children:(0,import_jsx_runtime96.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime96.jsxs)(import_core114.Text,{size:"xs",children:[(0,import_jsx_runtime96.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core115.formatDateTime)(dateTime)}),(0,import_jsx_runtime96.jsx)(import_core114.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime96.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime96.jsxs)(import_core114.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime96.jsx)(import_core114.Menu.Target,{children:(0,import_jsx_runtime96.jsx)(import_core114.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core115.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime96.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime96.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime96.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b,timelineResource);return priority1>priority2?1:priority1{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react62.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_react62.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react62.useCallback)(()=>{let resourceType,id;"resourceType"in props.value?(resourceType=props.value.resourceType,id=props.value.id):[resourceType,id]=props.value.reference?.split("/"),loadTimelineResources(medplum,resourceType,id).then(handleBatchResponse).catch(console.error)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);(0,import_react62.useEffect)(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.error)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime97.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core117.normalizeErrorString)(reason),icon:(0,import_jsx_runtime97.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function onUploadStart(){(0,import_notifications7.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications7.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications7.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core117.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime97.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime97.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime97.jsx)(Panel,{children:(0,import_jsx_runtime97.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime97.jsxs)(import_core116.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime97.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime97.jsx)(import_core116.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime97.jsx)(import_core116.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime97.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime97.jsx)(AttachmentButton,{securityContext:(0,import_core117.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime97.jsx)(import_core116.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime97.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`,menu=props.getMenu?props.getMenu({primaryResource:resource,currentResource:item,reloadTimeline:loadTimeline}):void 0;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime97.jsx)(HistoryTimelineItem,{history,resource:item,popupMenuItems:menu},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime97.jsx)(AuditEventTimelineItem,{resource:item,popupMenuItems:menu},key);case"Communication":return(0,import_jsx_runtime97.jsx)(CommunicationTimelineItem,{resource:item,popupMenuItems:menu},key);case"DiagnosticReport":return(0,import_jsx_runtime97.jsx)(DiagnosticReportTimelineItem,{resource:item,popupMenuItems:menu},key);case"Media":return(0,import_jsx_runtime97.jsx)(MediaTimelineItem,{resource:item,popupMenuItems:menu},key);default:return(0,import_jsx_runtime97.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime97.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime97.jsx)(import_core116.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime97.jsx)(import_core116.Loader,{})})}function HistoryTimelineItem(props){let{history,resource,...rest}=props,previous=getPrevious(history,resource);return previous?(0,import_jsx_runtime97.jsx)(TimelineItem,{resource,padding:!0,...rest,children:(0,import_jsx_runtime97.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime97.jsxs)(TimelineItem,{resource,padding:!0,...rest,children:[(0,import_jsx_runtime97.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime97.jsx)(ResourceTable,{value:resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function getPrevious(history,version){let entries=history.entry??[],index=entries.findIndex(entry=>entry.resource?.meta?.versionId===version.meta?.versionId);if(!(index>=entries.length-1))return entries[index+1].resource}function CommunicationTimelineItem(props){let className=!props.resource.priority||props.resource.priority==="routine"?void 0:ResourceTimeline_default.pinnedComment;return(0,import_jsx_runtime97.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime97.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_runtime97.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime97.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime97.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime97.jsx)(import_core116.ScrollArea,{children:(0,import_jsx_runtime97.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime97.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime97.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_runtime98=require("react/jsx-runtime");function DefaultResourceTimeline(props){let{resource,...rest}=props;return(0,import_jsx_runtime98.jsx)(ResourceTimeline,{value:resource,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`;return Promise.allSettled([medplum.readHistory(resourceType,id),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count:100})])},...rest})}var import_core118=require("@medplum/core");var import_jsx_runtime99=require("react/jsx-runtime");function EncounterTimeline(props){let{encounter,...rest}=props;return(0,import_jsx_runtime99.jsx)(ResourceTimeline,{value:encounter,loadTimelineResources:async(medplum,_resourceType,id)=>Promise.allSettled([medplum.readHistory("Encounter",id),medplum.search("Communication","encounter=Encounter/"+id),medplum.search("Media","encounter=Encounter/"+id)]),createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",encounter:(0,import_core118.createReference)(resource),subject:resource.subject,sender:(0,import_core118.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core118.createReference)(resource),subject:resource.subject,operator:(0,import_core118.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core135=require("@mantine/core"),import_core136=require("@medplum/core"),import_react_hooks36=require("@medplum/react-hooks"),import_react67=require("react");var import_core119=require("@medplum/core");var import_jsx_runtime100=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core119.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_runtime100.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core133=require("@mantine/core"),import_core134=require("@medplum/core"),import_react_hooks35=require("@medplum/react-hooks");var import_react66=require("react");var import_core120=require("@mantine/core"),import_jsx_runtime101=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime101.jsxs)(import_core120.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime101.jsxs)(import_core120.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime101.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime101.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime101.jsx)(import_core120.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime101.jsx)(import_core120.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core122=require("@mantine/core"),import_core123=require("@medplum/core"),import_react63=require("react");var import_core121=require("@medplum/core");var import_jsx_runtime102=require("react/jsx-runtime"),searchParamToOperators={string:[import_core121.Operator.EQUALS,import_core121.Operator.NOT,import_core121.Operator.CONTAINS,import_core121.Operator.EXACT],fulltext:[import_core121.Operator.EQUALS,import_core121.Operator.NOT,import_core121.Operator.CONTAINS,import_core121.Operator.EXACT],token:[import_core121.Operator.EQUALS,import_core121.Operator.NOT],reference:[import_core121.Operator.EQUALS,import_core121.Operator.NOT],numeric:[import_core121.Operator.EQUALS,import_core121.Operator.NOT_EQUALS,import_core121.Operator.GREATER_THAN,import_core121.Operator.LESS_THAN,import_core121.Operator.GREATER_THAN_OR_EQUALS,import_core121.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core121.Operator.EQUALS,import_core121.Operator.NOT_EQUALS,import_core121.Operator.GREATER_THAN,import_core121.Operator.LESS_THAN,import_core121.Operator.GREATER_THAN_OR_EQUALS,import_core121.Operator.LESS_THAN_OR_EQUALS],date:[import_core121.Operator.EQUALS,import_core121.Operator.NOT_EQUALS,import_core121.Operator.GREATER_THAN,import_core121.Operator.LESS_THAN,import_core121.Operator.GREATER_THAN_OR_EQUALS,import_core121.Operator.LESS_THAN_OR_EQUALS,import_core121.Operator.STARTS_AFTER,import_core121.Operator.ENDS_BEFORE,import_core121.Operator.APPROXIMATELY],datetime:[import_core121.Operator.EQUALS,import_core121.Operator.NOT_EQUALS,import_core121.Operator.GREATER_THAN,import_core121.Operator.LESS_THAN,import_core121.Operator.GREATER_THAN_OR_EQUALS,import_core121.Operator.LESS_THAN_OR_EQUALS,import_core121.Operator.STARTS_AFTER,import_core121.Operator.ENDS_BEFORE,import_core121.Operator.APPROXIMATELY],uri:[import_core121.Operator.EQUALS,import_core121.Operator.NOT,import_core121.Operator.ABOVE,import_core121.Operator.BELOW]},operatorNames={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",sw:"starts with",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",present:"present",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function 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_core121.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core121.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_core121.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_core121.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_core121.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_core121.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_runtime102.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core121.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime102.jsx)(import_jsx_runtime102.Fragment,{children:value.map((v,index)=>(0,import_jsx_runtime102.jsx)(ResourcePropertyDisplay,{propertyType:v.type,value:v.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime103=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react63.useRef)(!1),[state,setState]=(0,import_react63.useState)({search:JSON.parse((0,import_core123.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react63.useState)(!1);(0,import_react63.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react63.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core123.getDataType)(resourceType),searchParams=(0,import_core123.getSearchParameters)(resourceType);return(0,import_core123.sortStringArray)(getFieldsList(typeSchema,searchParams)).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_runtime103.jsx)(import_core122.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_runtime103.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime103.jsxs)(import_core122.Stack,{children:[(0,import_jsx_runtime103.jsx)(import_core122.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_runtime103.jsx)(import_core122.Group,{justify:"flex-end",children:(0,import_jsx_runtime103.jsx)(import_core122.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_core126=require("@mantine/core"),import_core127=require("@medplum/core");var import_react64=require("react");var import_core124=require("@mantine/core"),import_core125=require("@medplum/core");var import_jsx_runtime104=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core125.getSearchParameterDetails)(props.resourceType,props.searchParam),name=props.name??"filter-value";switch(details.type){case import_core125.SearchParameterType.REFERENCE:return(0,import_jsx_runtime104.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_core125.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime104.jsx)(import_core124.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_core125.SearchParameterType.DATE:return(0,import_jsx_runtime104.jsx)(import_core124.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_core125.SearchParameterType.DATETIME:return(0,import_jsx_runtime104.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core125.SearchParameterType.NUMBER:return(0,import_jsx_runtime104.jsx)(import_core124.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_core125.SearchParameterType.QUANTITY:return(0,import_jsx_runtime104.jsx)(QuantityInput,{name,path:"",defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime104.jsx)(import_core124.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_runtime105=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react64.useState)((0,import_core127.deepClone)(props.search)),searchRef=(0,import_react64.useRef)(search);searchRef.current=search,(0,import_react64.useEffect)(()=>{setSearch((0,import_core127.deepClone)(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_core127.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime105.jsx)(import_core126.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime105.jsxs)(Form,{onSubmit:()=>props.onOk(searchRef.current),children:[(0,import_jsx_runtime105.jsxs)("div",{children:[(0,import_jsx_runtime105.jsxs)("table",{children:[(0,import_jsx_runtime105.jsxs)("colgroup",{children:[(0,import_jsx_runtime105.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime105.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime105.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime105.jsx)("col",{style:{width:40}})]}),(0,import_jsx_runtime105.jsx)("thead",{children:(0,import_jsx_runtime105.jsxs)("tr",{children:[(0,import_jsx_runtime105.jsx)("th",{children:"Field"}),(0,import_jsx_runtime105.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime105.jsx)("th",{children:"Value"}),(0,import_jsx_runtime105.jsx)("th",{})]})}),(0,import_jsx_runtime105.jsx)("tbody",{children:filters.map((filter,index)=>(0,import_jsx_runtime105.jsx)(FilterRowInput,{id:`filter-${index}-row`,resourceType,searchParams,value:filter,onChange:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters))},onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${index}-row`))})]}),(0,import_jsx_runtime105.jsx)(ArrayAddButton,{propertyDisplayName:"Filter",onClick:()=>onAddFilter({})})]}),(0,import_jsx_runtime105.jsx)(import_core126.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime105.jsx)(import_core126.Button,{type:"submit",children:"OK"})})]})})}function FilterRowInput(props){let value=props.value,valueRef=(0,import_react64.useRef)(value);valueRef.current=value;function setFilterCode(newCode){valueRef.current.code=newCode,valueRef.current.operator=import_core127.Operator.EQUALS,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterOperator(newOperator){valueRef.current.operator=newOperator,valueRef.current.value="",props.onChange(valueRef.current)}function setFilterValue(newFilterValue){valueRef.current.value=newFilterValue,props.onChange(valueRef.current)}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime105.jsxs)("tr",{children:[(0,import_jsx_runtime105.jsx)("td",{children:(0,import_jsx_runtime105.jsx)(import_core126.NativeSelect,{"data-testid":`${props.id}-filter-field`,defaultValue:props.value.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime105.jsx)("td",{children:operators&&(0,import_jsx_runtime105.jsx)(import_core126.NativeSelect,{"data-testid":`${props.id}-filter-operation`,defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),(0,import_jsx_runtime105.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime105.jsx)(SearchFilterValueInput,{name:`${props.id}-filter-value`,resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),(0,import_jsx_runtime105.jsx)("td",{children:props.onDelete&&(0,import_jsx_runtime105.jsx)(import_core126.ActionIcon,{variant:"outline",color:"red",radius:"xl","aria-label":"Delete filter",onClick:props.onDelete,children:(0,import_jsx_runtime105.jsx)(IconX,{style:{width:"70%",height:"70%"},stroke:1.5})})})]})}var import_core128=require("@mantine/core"),import_react65=require("react");var import_jsx_runtime106=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react65.useState)(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime106.jsx)(import_core128.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime106.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime106.jsxs)(import_core128.Grid,{children:[(0,import_jsx_runtime106.jsx)(import_core128.Grid.Col,{span:10,children:(0,import_jsx_runtime106.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime106.jsx)(import_core128.Grid.Col,{span:2,children:(0,import_jsx_runtime106.jsx)(import_core128.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core129=require("@medplum/core");var import_jsx_runtime107=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core129.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core129.Operator.EQUALS||filter.operator===import_core129.Operator.NOT_EQUALS))return(0,import_jsx_runtime107.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core129.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core129.SearchParameterType.DATETIME)return(0,import_jsx_runtime107.jsx)(import_jsx_runtime107.Fragment,{children:(0,import_core129.formatDateTime)(filter.value)})}return(0,import_jsx_runtime107.jsx)(import_jsx_runtime107.Fragment,{children:filter.value})}var import_core130=require("@mantine/core"),import_core131=require("@medplum/core");var import_jsx_runtime108=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_runtime108.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime108.jsx)(import_core130.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime108.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime108.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime108.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime108.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime108.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime108.jsxs)(import_core130.Menu.Dropdown,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime108.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime108.jsxs)(import_core130.Menu.Dropdown,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime108.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime108.jsxs)(import_core130.Menu.Dropdown,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime108.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime108.jsxs)(import_core130.Menu.Dropdown,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime108.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime108.jsxs)(import_core130.Menu.Dropdown,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core131.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime108.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment,{children:[(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Divider,{}),(0,import_jsx_runtime108.jsx)(import_core130.Menu.Item,{leftSection:(0,import_jsx_runtime108.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_core132=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_core132.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core132.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core132.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_core132.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime109=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change"),this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load"),this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click"),this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=(0,import_react_hooks35.useMedplum)(),[outcome,setOutcome]=(0,import_react66.useState)(),{search,onLoad}=props,[memoizedSearch,setMemoizedSearch]=(0,import_react66.useState)(search);(0,import_core134.deepEquals)(search,memoizedSearch)||setMemoizedSearch(search);let[state,setState]=(0,import_react66.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react66.useRef)(state);stateRef.current=state;let total=memoizedSearch.total??"accurate",loadResults=(0,import_react66.useCallback)(options=>{setOutcome(void 0),medplum.requestSchema(memoizedSearch.resourceType).then(()=>medplum.search(memoizedSearch.resourceType,(0,import_core134.formatSearchQuery)({...memoizedSearch,total,fields:void 0}),options)).then(response=>{setState({...stateRef.current,searchResponse:response}),onLoad&&onLoad(new SearchLoadEvent(response))}).catch(reason=>{setState({...stateRef.current,searchResponse:void 0}),setOutcome((0,import_core134.normalizeOperationOutcome)(reason))})},[medplum,memoizedSearch,total,onLoad]),refreshResults=(0,import_react66.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react66.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(outcome)return(0,import_jsx_runtime109.jsx)(OperationOutcomeAlert,{outcome});if(!(0,import_core134.isDataTypeLoaded)(memoizedSearch.resourceType))return(0,import_jsx_runtime109.jsx)(import_core133.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime109.jsx)(import_core133.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(memoizedSearch),resourceType=memoizedSearch.resourceType,lastResult=state.searchResponse,resources=lastResult?.entry?.map(e=>e.resource),buttonVariant="subtle",buttonColor="gray",iconSize=16,isMobile=window.innerWidth<768;return(0,import_jsx_runtime109.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime109.jsxs)(import_core133.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime109.jsxs)(import_core133.Group,{gap:2,children:[(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime109.jsx)(import_core133.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime109.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime109.jsxs)(import_core133.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime109.jsxs)(import_core133.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(memoizedSearch,lastResult).toLocaleString(),"-",getEnd(memoizedSearch,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${memoizedSearch.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime109.jsx)(import_core133.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime109.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime109.jsxs)(import_core133.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime109.jsxs)(import_core133.Table.Thead,{children:[(0,import_jsx_runtime109.jsxs)(import_core133.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime109.jsx)(import_core133.Table.Th,{children:(0,import_jsx_runtime109.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_runtime109.jsx)(import_core133.Table.Th,{children:(0,import_jsx_runtime109.jsxs)(import_core133.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime109.jsx)(import_core133.Menu.Target,{children:(0,import_jsx_runtime109.jsx)(import_core133.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime109.jsxs)(import_core133.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime109.jsx)(import_core133.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime109.jsx)(import_core133.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime109.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime109.jsx)(SearchPopupMenu,{search:memoizedSearch,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_runtime109.jsxs)(import_core133.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime109.jsx)(import_core133.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime109.jsx)(import_core133.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime109.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:memoizedSearch.filters})},field.name))]})]}),(0,import_jsx_runtime109.jsx)(import_core133.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime109.jsxs)(import_core133.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_runtime109.jsx)(import_core133.Table.Td,{children:(0,import_jsx_runtime109.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_runtime109.jsx)(import_core133.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),!resources?.length&&(0,import_jsx_runtime109.jsx)(Container,{children:(0,import_jsx_runtime109.jsx)(import_core133.Center,{style:{height:150},children:(0,import_jsx_runtime109.jsx)(import_core133.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime109.jsx)(import_core133.Center,{m:"md",p:"md",children:(0,import_jsx_runtime109.jsx)(import_core133.Pagination,{value:getPage(memoizedSearch),total:getTotalPages(memoizedSearch,lastResult),onChange:newPage=>emitSearchChange(setPage(memoizedSearch,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),(0,import_jsx_runtime109.jsx)(SearchFieldEditor,{search:memoizedSearch,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),(0,import_jsx_runtime109.jsx)(SearchFilterEditor,{search:memoizedSearch,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),(0,import_jsx_runtime109.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),(0,import_jsx_runtime109.jsx)(SearchFilterValueDialog,{visible:stateRef.current.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(memoizedSearch,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},state.filterDialogSearchParam?.code)]})}var MemoizedSearchControl=SearchControl;function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p=>p.code===f.code));return filters.length===0?(0,import_jsx_runtime109.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime109.jsx)(import_jsx_runtime109.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime109.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime109.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_core134.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core134.DEFAULT_SEARCH_COUNT,total=getTotal(search,lastResult);return Math.ceil(total/pageSize)}function getStart(search,lastResult){return Math.min(getTotal(search,lastResult),(search.offset??0)+1)}function getEnd(search,lastResult){return Math.max(getStart(search,lastResult)+(lastResult.entry?.length??0)-1,0)}function getTotal(search,lastResult){let total=lastResult.total;return total===void 0&&(total=(search.offset??0)+(lastResult.entry?.length??0)+(lastResult.link?.some(l=>l.relation==="next")?1:0)),total}var import_jsx_runtime110=require("react/jsx-runtime");function FhirPathTable(props){let medplum=(0,import_react_hooks36.useMedplum)(),[schemaLoaded,setSchemaLoaded]=(0,import_react67.useState)(!1),[outcome,setOutcome]=(0,import_react67.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react67.useState)(),[selected,setSelected]=(0,import_react67.useState)({}),responseRef=(0,import_react67.useRef)();responseRef.current=response;let selectedRef=(0,import_react67.useRef)({});selectedRef.current=selected,(0,import_react67.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core136.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_react67.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime110.jsx)(import_core135.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime110.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime110.jsxs)(import_core135.Table,{children:[(0,import_jsx_runtime110.jsx)(import_core135.Table.Thead,{children:(0,import_jsx_runtime110.jsxs)(import_core135.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime110.jsx)(import_core135.Table.Th,{children:(0,import_jsx_runtime110.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_runtime110.jsx)(import_core135.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime110.jsx)(import_core135.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime110.jsxs)(import_core135.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime110.jsx)(import_core135.Table.Td,{children:(0,import_jsx_runtime110.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_runtime110.jsx)(import_core135.Table.Td,{children:(0,import_jsx_runtime110.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime110.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime110.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime110.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime110.jsx)(import_core135.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react67.memo)(FhirPathTable);var import_core139=require("@mantine/core"),import_react_hooks37=require("@medplum/react-hooks");var import_core137=require("@mantine/core"),import_core138=require("@medplum/core");var import_jsx_runtime111=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime111.jsx)(import_core137.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime111.jsxs)(import_core137.Group,{children:[group.measureScore&&(0,import_jsx_runtime111.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime111.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime111.jsxs)(import_jsx_runtime111.Fragment,{children:[(0,import_jsx_runtime111.jsx)(import_core137.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime111.jsx)(import_core137.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_core138.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core138.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime111.jsxs)(import_core137.Box,{children:[(0,import_jsx_runtime111.jsx)(import_core137.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime111.jsx)(import_core137.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime111.jsxs)(import_core137.Box,{children:[(0,import_jsx_runtime111.jsx)(import_core137.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime111.jsx)(import_core137.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime111.jsx)(import_core137.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime111.jsx)(import_core137.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime111.jsx)(import_core137.Flex,{justify:"center",children:(0,import_jsx_runtime111.jsxs)(import_core137.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_runtime111.jsx)(import_jsx_runtime111.Fragment,{children:unit==="%"?(0,import_jsx_runtime111.jsx)(import_core137.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime111.jsx)(import_core137.Flex,{justify:"center",children:(0,import_jsx_runtime111.jsx)(import_core137.Text,{fw:700,fz:18,children:(0,import_jsx_runtime111.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime111.jsx)(import_core137.Flex,{h:120,align:"center",children:(0,import_jsx_runtime111.jsx)(import_core137.Title,{order:3,children:(0,import_jsx_runtime111.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_runtime112=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=(0,import_react_hooks37.useResource)(props.measureReport),[measure]=(0,import_react_hooks37.useSearchOne)("Measure",{url:report?.measure});return report?(0,import_jsx_runtime112.jsxs)(import_core139.Box,{children:[measure&&(0,import_jsx_runtime112.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime112.jsx)(import_core139.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime112.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core140=require("@mantine/core"),import_react_hooks38=require("@medplum/react-hooks"),import_react68=require("react"),import_jsx_runtime113=require("react/jsx-runtime");function NotificationIcon(props){let medplum=(0,import_react_hooks38.useMedplum)(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react68.useState)(0),updateCount=(0,import_react68.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react68.useEffect)(()=>{updateCount("default")},[updateCount]),(0,import_react_hooks38.useSubscription)(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime113.jsx)(import_core140.Tooltip,{label,children:(0,import_jsx_runtime113.jsx)(import_core140.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime113.jsx)(import_core140.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core141=require("@mantine/core"),import_notifications8=require("@mantine/notifications"),import_core142=require("@medplum/core"),import_react_hooks39=require("@medplum/react-hooks");var import_react69=require("react");var import_jsx_runtime114=require("react/jsx-runtime"),NOTIFICATION_ID="patient-export",NOTIFICATION_TITLE="Patient Export",formats={everything:{operation:"$everything",extension:"json",contentType:import_core142.ContentType.FHIR_JSON},summary:{operation:"$summary",extension:"json",contentType:import_core142.ContentType.FHIR_JSON},ccda:{operation:"$ccda-export",extension:"xml",contentType:import_core142.ContentType.CDA_XML}};function PatientExportForm(props){let medplum=(0,import_react_hooks39.useMedplum)(),{patient}=props,handleSubmit=(0,import_react69.useCallback)(async data2=>{let patientId=(0,import_core142.resolveId)(patient),format=data2.format,{operation,contentType,extension}=formats[format],url=medplum.fhirUrl("Patient",patientId,operation);data2.startDate&&url.searchParams.append("start",data2.startDate),data2.endDate&&url.searchParams.append("end",data2.endDate),import_notifications8.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,loading:!0,message:"Exporting...",autoClose:!1,withCloseButton:!1});try{let response=await medplum.get(url,{cache:"no-cache",headers:{Accept:contentType}}),fileName=`Patient-export-${patientId}-${new Date().toISOString().replaceAll(":","-")}.${extension}`;saveData(response,fileName,contentType),import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"green",message:"Done",icon:(0,import_jsx_runtime114.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}catch(err){import_notifications8.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:(0,import_core142.normalizeErrorString)(err),icon:(0,import_jsx_runtime114.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}},[medplum,patient]);return(0,import_jsx_runtime114.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime114.jsxs)(import_core141.Stack,{children:[(0,import_jsx_runtime114.jsx)(FormSection,{title:"Export Format",description:"Required",withAsterisk:!0,children:(0,import_jsx_runtime114.jsx)(import_core141.SegmentedControl,{name:"format",data:[{label:"FHIR Everything",value:"everything"},{label:"Patient Summary",value:"summary"},{label:"C-CDA",value:"ccda"}],fullWidth:!0})}),(0,import_jsx_runtime114.jsx)(FormSection,{title:"Start Date",description:"If no start date is provided, all records prior to the end date are in scope.",children:(0,import_jsx_runtime114.jsx)(DateTimeInput,{name:"startDate",placeholder:"Start date"})}),(0,import_jsx_runtime114.jsx)(FormSection,{title:"End Date",description:"If no end date is provided, all records subsequent to the start date are in scope.",children:(0,import_jsx_runtime114.jsx)(DateTimeInput,{name:"endDate",placeholder:"End date"})}),(0,import_jsx_runtime114.jsx)(import_core141.Group,{justify:"right",children:(0,import_jsx_runtime114.jsx)(import_core141.Button,{type:"submit",children:"Request Export"})})]})})}function saveData(data2,fileName,contentType){let content=typeof data2=="string"?data2:JSON.stringify(data2,null,2),blob=new Blob([content],{type:contentType}),url=window.URL.createObjectURL(blob),a=document.createElement("a");document.body.appendChild(a),a.style.display="none",a.href=url,a.download=fileName,a.click(),window.URL.revokeObjectURL(url)}var import_core161=require("@mantine/core"),import_core162=require("@medplum/core"),import_react_hooks47=require("@medplum/react-hooks");var import_react79=require("react");var import_core147=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_react_hooks40=require("@medplum/react-hooks"),import_react71=require("react");var import_core143=require("@mantine/core"),import_core144=require("@medplum/core"),import_react70=require("react");var import_jsx_runtime115=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core144.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react70.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react70.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react70.useCallback)(formData=>{onSubmit((0,import_core144.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core144.createReference)(patient),encounter:encounter?(0,import_core144.createReference)(encounter):void 0,code,clinicalStatus,onsetDateTime:formData.onsetDateTime?formData.onsetDateTime:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0},PATIENT_ALLERGY_PROFILE))},[patient,encounter,allergy,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime115.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime115.jsxs)(import_core143.Stack,{children:[(0,import_jsx_runtime115.jsx)(CodeableConceptInput,{name:"allergy",label:"Code",path:"AllergyIntolerance.code","data-autofocus":!0,binding:HTTP+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1186.8",maxValues:1,defaultValue:allergy?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime115.jsx)(import_core143.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime115.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core144.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",maxValues:1,defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime115.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime115.jsx)(import_core143.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime115.jsx)(import_core143.Button,{type:"submit",children:"Save"})})]})},allergy?.id)}var import_core145=require("@mantine/core"),import_core146=require("@medplum/core");var import_jsx_runtime116=require("react/jsx-runtime");function ConceptBadge(props){let{resource,display,onClick,onEdit}=props,rightSection;return onEdit&&(rightSection=(0,import_jsx_runtime116.jsx)(import_core145.ActionIcon,{variant:"subtle",size:12,radius:"xl",children:(0,import_jsx_runtime116.jsx)(IconPencil,{"aria-label":`Edit ${(0,import_core146.getDisplayString)(resource)}`,size:12,onClick:e=>{killEvent(e),onEdit(resource)}})})),(0,import_jsx_runtime116.jsx)(MedplumLink,{to:onClick?void 0:resource,onClick:onClick?()=>onClick(resource):void 0,children:(0,import_jsx_runtime116.jsx)(import_core145.Badge,{variant:"light",maw:"100%",rightSection,style:{cursor:"pointer"},children:display??(0,import_core146.getDisplayString)(resource)})},resource.id)}var import_jsx_runtime117=require("react/jsx-runtime");function Allergies(props){let medplum=(0,import_react_hooks40.useMedplum)(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react71.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react71.useState)(),handleSubmit=(0,import_react71.useCallback)(async allergy=>{if(allergy.id){let updatedAllergy=await medplum.updateResource(allergy);setAllergies(allergies.map(a=>a.id===updatedAllergy.id?updatedAllergy:a))}else{let newAllergy=await medplum.createResource(allergy);setAllergies([...allergies,newAllergy])}setEditAllergy(void 0),close()},[medplum,allergies,close]);return(0,import_jsx_runtime117.jsxs)(import_jsx_runtime117.Fragment,{children:[(0,import_jsx_runtime117.jsxs)(import_core147.Group,{justify:"space-between",children:[(0,import_jsx_runtime117.jsx)(import_core147.Text,{fz:"md",fw:700,children:"Allergies"}),(0,import_jsx_runtime117.jsx)(import_core147.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditAllergy(void 0),open()},children:"+ Add"})]}),allergies.length>0?(0,import_jsx_runtime117.jsx)(import_core147.Box,{children:allergies.map(allergy=>(0,import_jsx_runtime117.jsx)(ConceptBadge,{resource:allergy,onClick:props.onClickResource,onEdit:a=>{setEditAllergy(a),open()}},allergy.id))}):(0,import_jsx_runtime117.jsx)(import_core147.Text,{children:"(none)"}),(0,import_jsx_runtime117.jsx)(import_core147.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime117.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}var import_core150=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_react_hooks42=require("@medplum/react-hooks"),import_react73=require("react");var import_core148=require("@mantine/core"),import_core149=require("@medplum/core"),import_react72=require("react");var import_react_hooks41=require("@medplum/react-hooks"),import_jsx_runtime118=require("react/jsx-runtime"),HTTP2="http://",statusValues=["active","stopped","on-hold","cancelled","completed","entered-in-error","draft","unknown"];function MedicationDialog(props){let me=(0,import_react_hooks41.useMedplumProfile)(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react72.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react72.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core149.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core149.createReference)(encounter)),requester:medication?.requester??(0,import_core149.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core149.createReference)(patient)},import_core149.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime118.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime118.jsxs)(import_core148.Stack,{children:[(0,import_jsx_runtime118.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:HTTP2+"cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1010.4",maxValues:1,defaultValue:medication?.medicationCodeableConcept,onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime118.jsx)(import_core148.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime118.jsx)(import_core148.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime118.jsx)(import_core148.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime118.jsx)(import_core148.Button,{type:"submit",children:"Save"})})]})}):(0,import_jsx_runtime118.jsx)(import_core148.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime119=require("react/jsx-runtime");function Medications(props){let medplum=(0,import_react_hooks42.useMedplum)(),[medicationRequests,setMedicationRequests]=(0,import_react73.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react73.useState)(),[opened,{open,close}]=(0,import_hooks4.useDisclosure)(!1),handleSubmit=(0,import_react73.useCallback)(async medication=>{if(medication.id){let updatedMedication=await medplum.updateResource(medication);setMedicationRequests(medicationRequests.map(m=>m.id===updatedMedication.id?updatedMedication:m))}else{let newMedication=await medplum.createResource(medication);setMedicationRequests([newMedication,...medicationRequests])}setEditMedication(void 0),close()},[medplum,medicationRequests,close]);return(0,import_jsx_runtime119.jsxs)(import_jsx_runtime119.Fragment,{children:[(0,import_jsx_runtime119.jsxs)(import_core150.Group,{justify:"space-between",children:[(0,import_jsx_runtime119.jsx)(import_core150.Text,{fz:"md",fw:700,children:"Medications"}),(0,import_jsx_runtime119.jsx)(import_core150.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditMedication(void 0),open()},children:"+ Add"})]}),medicationRequests.length>0?(0,import_jsx_runtime119.jsx)(import_core150.Box,{children:medicationRequests.map(request=>(0,import_jsx_runtime119.jsx)(ConceptBadge,{resource:request,onClick:props.onClickResource,onEdit:mr=>{setEditMedication(mr),open()}},request.id))}):(0,import_jsx_runtime119.jsx)(import_core150.Text,{children:"(none)"}),(0,import_jsx_runtime119.jsx)(import_core150.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime119.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}var import_core153=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_react_hooks43=require("@medplum/react-hooks"),import_react75=require("react");var import_core151=require("@mantine/core"),import_core152=require("@medplum/core"),import_react74=require("react");var import_jsx_runtime120=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react74.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react74.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react74.useCallback)(formData=>{let updatedCondition=(0,import_core152.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core152.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core152.createReference)(patient),encounter:encounter&&(0,import_core152.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core152.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-condition-problems-health-concerns");onSubmit(updatedCondition)},[patient,encounter,condition,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime120.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime120.jsxs)(import_core151.Stack,{children:[(0,import_jsx_runtime120.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core152.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime120.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core152.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime120.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime120.jsx)(import_core151.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime120.jsx)(import_core151.Button,{type:"submit",children:"Save"})})]})},condition?.id)}var import_jsx_runtime121=require("react/jsx-runtime");function ProblemList(props){let medplum=(0,import_react_hooks43.useMedplum)(),{patient,encounter}=props,[problems,setProblems]=(0,import_react75.useState)(props.problems),[editCondition,setEditCondition]=(0,import_react75.useState)(),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react75.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([...problems,newCondition])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment,{children:[(0,import_jsx_runtime121.jsxs)(import_core153.Group,{justify:"space-between",children:[(0,import_jsx_runtime121.jsx)(import_core153.Text,{fz:"md",fw:700,children:"Problem List"}),(0,import_jsx_runtime121.jsx)(import_core153.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditCondition(void 0),open()},children:"+ Add"})]}),problems.length>0?(0,import_jsx_runtime121.jsx)(import_core153.Grid,{gutter:"xs",children:problems.map(problem=>(0,import_jsx_runtime121.jsxs)(import_react75.Fragment,{children:[(0,import_jsx_runtime121.jsx)(import_core153.Grid.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),(0,import_jsx_runtime121.jsx)(import_core153.Grid.Col,{span:10,children:(0,import_jsx_runtime121.jsx)(ConceptBadge,{resource:problem,onClick:props.onClickResource,onEdit:c=>{setEditCondition(c),open()}},problem.id)})]},problem.id))}):(0,import_jsx_runtime121.jsx)(import_core153.Text,{children:"(none)"}),(0,import_jsx_runtime121.jsx)(import_core153.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime121.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var import_core154=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core155=require("@medplum/core"),import_react_hooks44=require("@medplum/react-hooks"),import_react76=require("react");var import_jsx_runtime122=require("react/jsx-runtime"),NULLFLAVOR=import_core155.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/v3-NullFlavor",CodesToText={38628009:"Homosexual",20430005:"Heterosexual",42035005:"Bisexual",OTH:"Other",UNK:"Unknown",ASKU:"Asked but no answer"},CodesToSystem={38628009:import_core155.SNOMED,20430005:import_core155.SNOMED,42035005:import_core155.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let medplum=(0,import_react_hooks44.useMedplum)(),{patient,encounter}=props,[sexualOrientation,setSexualOrientation]=(0,import_react76.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react76.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core155.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core155.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core155.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core155.createReference)(patient),encounter:encounter?(0,import_core155.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:CodesToSystem[code],code:formData.sexualOrientation}],text:CodesToText[code]}}).then(newSexualOrientation=>{setSexualOrientation(newSexualOrientation),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:[(0,import_jsx_runtime122.jsxs)(import_core154.Group,{justify:"space-between",children:[(0,import_jsx_runtime122.jsx)(import_core154.Text,{fz:"md",fw:700,children:"Sexual Orientation"}),(0,import_jsx_runtime122.jsx)(import_core154.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),sexualOrientation?.valueCodeableConcept?(0,import_jsx_runtime122.jsx)(ConceptBadge,{resource:sexualOrientation,display:(0,import_core155.formatCodeableConcept)(sexualOrientation.valueCodeableConcept),onClick:props.onClickResource,onEdit:()=>open()},sexualOrientation.id):(0,import_jsx_runtime122.jsx)(import_core154.Text,{children:"(none)"}),(0,import_jsx_runtime122.jsx)(import_core154.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime122.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime122.jsxs)(import_core154.Stack,{children:[(0,import_jsx_runtime122.jsx)(import_core154.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime122.jsx)(import_core154.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime122.jsx)(import_core154.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime122.jsx)(import_core154.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core156=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_core157=require("@medplum/core"),import_react_hooks45=require("@medplum/react-hooks"),import_react77=require("react");var import_jsx_runtime123=require("react/jsx-runtime"),smokingStatusOptions={266919005:"Never smoked tobacco",266927001:"Tobacco smoking consumption unknown","428041000124106":"Occasional tobacco smoker","428061000124105":"Light tobacco smoker","428071000124103":"Heavy tobacco smoker",449868002:"Smokes tobacco daily",77176002:"Smoker",8517006:"Ex-smoker"};function SmokingStatus(props){let medplum=(0,import_react_hooks45.useMedplum)(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=(0,import_react77.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks7.useDisclosure)(!1),handleSubmit=(0,import_react77.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core157.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_core157.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core157.createReference)(patient),encounter:encounter?(0,import_core157.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core157.SNOMED,version:import_core157.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_runtime123.jsxs)(import_jsx_runtime123.Fragment,{children:[(0,import_jsx_runtime123.jsxs)(import_core156.Group,{justify:"space-between",children:[(0,import_jsx_runtime123.jsx)(import_core156.Text,{fz:"md",fw:700,children:"Smoking Status"}),(0,import_jsx_runtime123.jsx)(import_core156.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime123.jsx)(ConceptBadge,{resource:smokingStatus,display:(0,import_core157.formatCodeableConcept)(smokingStatus.valueCodeableConcept),onClick:props.onClickResource,onEdit:()=>open()},smokingStatus.id):(0,import_jsx_runtime123.jsx)(import_core156.Text,{children:"(none)"}),(0,import_jsx_runtime123.jsx)(import_core156.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime123.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime123.jsxs)(import_core156.Stack,{children:[(0,import_jsx_runtime123.jsx)(import_core156.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime123.jsx)(import_core156.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime123.jsx)(import_core156.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime123.jsx)(import_core156.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core159=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_core160=require("@medplum/core"),import_react_hooks46=require("@medplum/react-hooks"),import_react78=require("react");var import_core158=require("@medplum/core");function getObservationValue(obs,component){return component?obs.component?.find(c=>c.code?.coding?.[0].code===component)?.valueQuantity:obs.valueQuantity}function createObservation(patient,encounter,code,title,valueQuantity){if(isValidNumber(valueQuantity.value))return{...createBaseObservation(patient,encounter,code,title),valueQuantity}}function createCompoundObservation(patient,encounter,code,title,components){let component=components.filter(c=>isValidNumber(c.valueQuantity?.value));if(component.length!==0)return{...createBaseObservation(patient,encounter,code,title),component}}function createBaseObservation(patient,encounter,code,title){return{resourceType:"Observation",status:"preliminary",subject:(0,import_core158.createReference)(patient),encounter:encounter?(0,import_core158.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_core158.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core158.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime124=require("react/jsx-runtime"),BP="85354-9",SYSTOLIC="8480-6",DIASTOLIC="8462-4",LOINC_CODES=[{name:"systolic",short:"BP Sys",code:BP,component:SYSTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"diastolic",short:"BP Dias",code:BP,component:DIASTOLIC,title:"Blood Pressure",unit:"mm[Hg]"},{name:"heartRate",short:"HR",code:"8867-4",title:"Heart Rate",unit:"/min"},{name:"bodyTemperature",short:"Temp",code:"8310-5",title:"Body Temperature",unit:"Cel"},{name:"respiratoryRate",short:"RR",code:"9279-1",title:"Respiratory Rate",unit:"/min"},{name:"height",short:"Ht",code:"8302-2",title:"Height",unit:"cm"},{name:"weight",short:"Wt",code:"29463-7",title:"Weight",unit:"kg"},{name:"bmi",short:"BMI",code:"39156-5",title:"BMI",unit:"kg/m2"},{name:"oxygen",short:"O2",code:"2708-6",title:"Oxygen",unit:"%"},{name:"headCircumference",short:"HC",code:"9843-4",title:"Head Circumference",unit:"cm"}];function Vitals(props){let medplum=(0,import_react_hooks46.useMedplum)(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react78.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks8.useDisclosure)(!1),handleSubmit=(0,import_react78.useCallback)(formData=>{let newObservations=[];newObservations.push(createCompoundObservation(patient,encounter,BP,"Blood pressure",[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.diastolic),"mm[Hg]")}]));for(let meta of LOINC_CODES)meta.component||newObservations.push(createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[meta.name]),meta.unit)));Promise.all(newObservations.filter(Boolean).map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment,{children:[(0,import_jsx_runtime124.jsxs)(import_core159.Group,{justify:"space-between",children:[(0,import_jsx_runtime124.jsx)(import_core159.Text,{fz:"md",fw:700,children:"Vitals"}),(0,import_jsx_runtime124.jsx)(import_core159.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),(0,import_jsx_runtime124.jsx)(import_core159.Grid,{children:LOINC_CODES.map(meta=>{let obs=vitals.find(o=>o.code?.coding?.[0].code===meta.code);return(0,import_jsx_runtime124.jsxs)(import_react78.Fragment,{children:[(0,import_jsx_runtime124.jsx)(import_core159.Grid.Col,{span:2,ta:"right",children:(0,import_jsx_runtime124.jsx)(import_core159.Tooltip,{label:meta.title,children:(0,import_jsx_runtime124.jsx)(import_core159.Text,{c:"dimmed",size:"xs",children:meta.short})})}),(0,import_jsx_runtime124.jsx)(import_core159.Grid.Col,{span:4,children:(0,import_jsx_runtime124.jsx)(import_core159.Text,{size:"xs",children:obs&&(0,import_jsx_runtime124.jsx)(ConceptBadge,{resource:obs,display:(0,import_core160.formatQuantity)(getObservationValue(obs,meta.component)),onClick:props.onClickResource},meta.name)})})]},meta.name)})}),(0,import_jsx_runtime124.jsx)(import_core159.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime124.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime124.jsx)(import_core159.SimpleGrid,{cols:2,children:LOINC_CODES.map((meta,index)=>(0,import_jsx_runtime124.jsx)(import_core159.TextInput,{name:meta.name,label:meta.short,description:meta.title,"data-autofocus":index===0,autoFocus:index===0},meta.name))}),(0,import_jsx_runtime124.jsx)(import_core159.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime124.jsx)(import_core159.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime124.jsx)(import_core159.Button,{type:"submit",children:"Save"})})]})})]})}var import_jsx_runtime125=require("react/jsx-runtime");function getGenderIcon(patient){switch(patient?.gender){case"female":return IconGenderFemale;case"male":return IconGenderMale;default:return}}function pluralize(count,singular,plural){return count===0?`No ${plural}`:count===1?`1 ${singular}`:`${count} ${plural}`}function PatientSummary(props){let medplum=(0,import_react_hooks47.useMedplum)(),{patient:propsPatient,background,appointmentsUrl:propsAppointmentsUrl,encountersUrl:propsEncountersUrl,onClickResource,...cardProps}=props,patient=(0,import_react_hooks47.useResource)(propsPatient),[medicalData,setMedicalData]=(0,import_react79.useState)(),appointmentsUrl="appointmentsUrl"in props?propsAppointmentsUrl:"#",encountersUrl="encountersUrl"in props?propsEncountersUrl:"#";(0,import_react79.useEffect)(()=>{let ref=`Patient/${(0,import_core162.resolveId)(propsPatient)}`,searchMeta={_count:100,_sort:"-_lastUpdated"},today=new Date().toISOString().substring(0,10);Promise.all([medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta}),medplum.searchResources("Appointment",{patient:ref,date:`ge${today}`,status:"proposed,pending,booked",...searchMeta}),medplum.searchResources("Encounter",{subject:ref,date:`le${today}`,status:"finished",...searchMeta})]).then(results=>{let observations=results[3];setMedicalData({allergies:results[0],problems:results[1],medicationRequests:results[2],sexualOrientation:observations.find(obs=>obs.code?.coding?.[0].code==="76690-7"),smokingStatus:observations.find(obs=>obs.code?.coding?.[0].code==="72166-2"),vitals:observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"),appointments:results[4],encounters:results[5]})}).catch(console.error)},[medplum,propsPatient]);let links=(0,import_react79.useMemo)(()=>{let appointmentsLink=appointmentsUrl===void 0?void 0:(0,import_jsx_runtime125.jsx)(MedplumLink,{to:appointmentsUrl,children:pluralize(medicalData?.appointments?.length,"upcoming appointment","upcoming appointments")},"appt"),encountersLink=encountersUrl===void 0?void 0:(0,import_jsx_runtime125.jsx)(MedplumLink,{to:encountersUrl,children:pluralize(medicalData?.encounters?.length,"documented visit","documented visits")},"enc");return[appointmentsLink,encountersLink].filter(Boolean)},[appointmentsUrl,medicalData?.appointments?.length,medicalData?.encounters?.length,encountersUrl]);if(!patient)return null;let GenderIconComponent=getGenderIcon(patient);return(0,import_jsx_runtime125.jsxs)(import_core161.Card,{...cardProps,children:[(0,import_jsx_runtime125.jsx)(import_core161.Card.Section,{h:100,style:{background}}),(0,import_jsx_runtime125.jsx)(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),(0,import_jsx_runtime125.jsx)(import_core161.Text,{ta:"center",fz:"lg",fw:500,children:(0,import_core162.formatHumanName)(patient.name?.[0])}),patient.birthDate&&(0,import_jsx_runtime125.jsxs)(import_core161.Text,{ta:"center",fz:"xs",c:"dimmed",children:[patient.birthDate," (",(0,import_core162.calculateAgeString)(patient.birthDate),")"]}),(0,import_jsx_runtime125.jsx)(import_core161.Paper,{withBorder:!0,p:"md",my:"md",children:(0,import_jsx_runtime125.jsxs)(import_core161.Group,{wrap:"nowrap",justify:"space-evenly",children:[(0,import_jsx_runtime125.jsxs)(import_core161.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime125.jsx)(IconUserSquare,{size:24,color:"gray"}),(0,import_jsx_runtime125.jsx)(import_core161.Text,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),(0,import_jsx_runtime125.jsxs)(import_core161.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime125.jsx)(IconStethoscope,{size:24,color:"gray"}),(0,import_jsx_runtime125.jsx)(import_core161.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),GenderIconComponent&&(0,import_jsx_runtime125.jsxs)(import_core161.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime125.jsx)(GenderIconComponent,{size:24,color:"gray"}),(0,import_jsx_runtime125.jsx)(import_core161.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),(0,import_jsx_runtime125.jsxs)(import_core161.Stack,{gap:"xs",children:[links.length>0&&(0,import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment,{children:[links,(0,import_jsx_runtime125.jsx)(import_core161.Divider,{})]}),medicalData&&(0,import_jsx_runtime125.jsxs)(import_jsx_runtime125.Fragment,{children:[(0,import_jsx_runtime125.jsx)(Allergies,{patient,allergies:medicalData.allergies,onClickResource}),(0,import_jsx_runtime125.jsx)(import_core161.Divider,{}),(0,import_jsx_runtime125.jsx)(ProblemList,{patient,problems:medicalData.problems,onClickResource}),(0,import_jsx_runtime125.jsx)(import_core161.Divider,{}),(0,import_jsx_runtime125.jsx)(Medications,{patient,medicationRequests:medicalData.medicationRequests,onClickResource}),(0,import_jsx_runtime125.jsx)(import_core161.Divider,{}),(0,import_jsx_runtime125.jsx)(SexualOrientation,{patient,sexualOrientation:medicalData.sexualOrientation,onClickResource}),(0,import_jsx_runtime125.jsx)(import_core161.Divider,{}),(0,import_jsx_runtime125.jsx)(SmokingStatus,{patient,smokingStatus:medicalData.smokingStatus,onClickResource}),(0,import_jsx_runtime125.jsx)(import_core161.Divider,{}),(0,import_jsx_runtime125.jsx)(Vitals,{patient,vitals:medicalData.vitals,onClickResource})]})]})]})}var import_core163=require("@medplum/core"),import_react80=require("react");var import_jsx_runtime126=require("react/jsx-runtime");function PatientTimeline(props){let{patient,...rest}=props,loadTimelineResources=(0,import_react80.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_runtime126.jsx)(ResourceTimeline,{value:patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core163.createReference)(resource),sender:(0,import_core163.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core163.createReference)(resource),operator:(0,import_core163.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core164=require("@mantine/core"),import_core165=require("@medplum/core"),import_react_hooks48=require("@medplum/react-hooks");var import_react81=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing"};var import_jsx_runtime127=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=(0,import_react_hooks48.useMedplum)(),defaultValue2=(0,import_react_hooks48.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react81.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react81.useState)(),[hoverKey,setHoverKey]=(0,import_react81.useState)(),[value,setValue]=(0,import_react81.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react81.useRef)();if(valueRef.current=value,(0,import_react81.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react81.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_runtime127.jsx)("div",{children:(0,import_jsx_runtime127.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime127.jsx)(import_core164.TextInput,{label:"Plan Title",py:"md",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime127.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),(0,import_jsx_runtime127.jsx)(import_core164.Button,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react81.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_runtime127.jsxs)(import_core164.Stack,{gap:"md",className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime127.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_runtime127.jsx)("div",{children:(0,import_jsx_runtime127.jsx)(import_core164.Button,{variant:"outline",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action);function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}return(0,import_jsx_runtime127.jsx)("div",{onClick,onMouseOver:onHover,onFocus:onHover,children:(0,import_jsx_runtime127.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove})})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react81.useState)(props.actionType),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function changeProperty(property,value){props.onChange({...action,[property]:value})}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime127.jsxs)(import_core164.Paper,{"data-testid":action.id,className,p:0,radius:"sm",withBorder:!0,children:[(0,import_jsx_runtime127.jsxs)(import_core164.Flex,{w:"100%",p:"xs",bg:"gray.0",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime127.jsx)(import_core164.TextInput,{w:"100%",name:`actionTitle-${action.id}`,defaultValue:action.title,placeholder:"Title",onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime127.jsx)(import_core164.ActionIcon,{variant:"subtle",color:"gray",onClick:props.onRemove,children:(0,import_jsx_runtime127.jsx)(import_core164.CloseButton,{"data-testid":"close-button"})})]}),editing&&(0,import_jsx_runtime127.jsxs)(import_core164.Stack,{gap:"xl",p:"md",children:[(0,import_jsx_runtime127.jsxs)(import_core164.Box,{children:[(0,import_jsx_runtime127.jsx)(import_core164.Text,{fw:600,mb:"xs",children:"Task Description"}),(0,import_jsx_runtime127.jsx)(import_core164.TextInput,{placeholder:"Enter task description",name:`actionDescription-${action.id}`,defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)})]}),(0,import_jsx_runtime127.jsxs)(import_core164.Box,{children:[(0,import_jsx_runtime127.jsx)(import_core164.Text,{fw:600,mb:"xs",children:"Type"}),(0,import_jsx_runtime127.jsx)(import_core164.Radio.Group,{value:actionType,onChange:setActionType,children:(0,import_jsx_runtime127.jsxs)(import_core164.Stack,{gap:"sm",children:[(0,import_jsx_runtime127.jsx)(import_core164.Radio,{value:"standard",label:"Standard task",onChange:()=>props.onChange({...props.action,definitionCanonical:void 0})}),(0,import_jsx_runtime127.jsx)(import_core164.Radio,{value:"questionnaire",label:"Task with Questionnaire"})]})})]}),actionType==="questionnaire"&&(0,import_jsx_runtime127.jsxs)(import_core164.Box,{children:[(0,import_jsx_runtime127.jsxs)(import_core164.Group,{gap:"xs",mb:"xs",children:[(0,import_jsx_runtime127.jsx)(import_core164.Text,{fw:600,children:"Select questionnaire"}),(0,import_jsx_runtime127.jsx)(import_core164.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime127.jsxs)(import_core164.Text,{size:"sm",c:"dimmed",mb:"sm",children:["Questionnaire to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime127.jsx)(import_core164.Anchor,{href:"/Questionnaire",target:"_blank",c:"blue",children:"questionnaires list"})]}),(0,import_jsx_runtime127.jsx)(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",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_runtime127.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core165.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function getInitialActionType(action){return action.definitionCanonical?.startsWith("Questionnaire")?"questionnaire":"standard"}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=parseInt(existing.substring(3),10);isNaN(existingNum)||(nextId=Math.max(nextId,existingNum+1))}return existing}return"id-"+nextId++}function ensurePlanDefinitionKeys(planDefinition){return{...planDefinition,action:ensurePlanDefinitionActionKeys(planDefinition.action)}}function ensurePlanDefinitionActionKeys(actions){if(actions)return actions.map(action=>({...action,id:generateId(action.id),action:ensurePlanDefinitionActionKeys(action.action)}))}var import_core169=require("@mantine/core"),import_core170=require("@medplum/core"),import_react_hooks49=require("@medplum/react-hooks");var import_react84=require("react");var import_core167=require("@mantine/core"),import_core168=require("@medplum/core"),import_react83=require("react");var import_core166=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,questionnaireResponse){let extension=(0,import_core166.getExtension)(item,import_core166.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-enableWhenExpression");if(questionnaireResponse&&extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core166.toTypedValue)(questionnaireResponse),result=(0,import_core166.evalFhirPathTyped)(expression,[value],{"%resource":value});return(0,import_core166.toJsBoolean)(result)}}if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(questionnaireResponse?.item,enableWhen.question);if(enableWhen.operator==="exists"&&!enableWhen.answerBoolean&&!actualAnswers?.length){if(enableBehavior==="any")return!0;continue}let{anyMatch,allMatch}=checkAnswers(enableWhen,actualAnswers,enableBehavior);if(enableBehavior==="any"&&anyMatch)return!0;if(enableBehavior==="all"&&!allMatch)return!1}return enableBehavior!=="any"}function evaluateCalculatedExpressionsInQuestionnaire(items,response){return items.map(item=>{if(item.item)return{...item,item:evaluateCalculatedExpressionsInQuestionnaire(item.item,response)};{let calculatedValue=evaluateCalculatedExpression(item,response);if(!calculatedValue)return null;let answer=typedValueToResponseItem(item,calculatedValue);return answer?{id:item?.id,linkId:item?.linkId,text:item.text,answer:[answer]}:null}}).filter(item=>item!==null)}function typedValueToResponseItem(item,value){if(item.type)switch(item.type){case"boolean":return value.type===import_core166.PropertyType.boolean?{valueBoolean:value.value}:void 0;case"date":return value.type===import_core166.PropertyType.date?{valueDate:value.value}:void 0;case"dateTime":return value.type===import_core166.PropertyType.dateTime?{valueDateTime:value.value}:void 0;case"time":return value.type===import_core166.PropertyType.time?{valueTime:value.value}:void 0;case"url":return value.type===import_core166.PropertyType.url?{valueString:value.value}:void 0;case"text":return value.type===import_core166.PropertyType.string?{valueString:value.value}:void 0;case"attachment":return value.type===import_core166.PropertyType.Attachment?{valueAttachment:value.value}:void 0;case"reference":return value.type===import_core166.PropertyType.Reference?{valueReference:value.value}:void 0;case"quantity":return{valueQuantity:value.value};case"decimal":return{valueDecimal:value.value};case"integer":return{valueInteger:value.value};case"string":return{valueString:value.value};default:return}}function evaluateCalculatedExpression(item,response){if(!response)return;let extension=(0,import_core166.getExtension)(item,import_core166.HTTP_HL7_ORG+"/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression");if(extension){let expression=extension.valueExpression?.expression;if(expression){let value=(0,import_core166.toTypedValue)(response),result=(0,import_core166.evalFhirPathTyped)(expression,[value],{"%resource":value});return result.length!==0?result[0]:void 0}}}function mergeUpdatedItems(mergedItems,updatedItems){return mergedItems.map(mergedItem=>{let updatedItem=updatedItems.find(updated=>updated.linkId===mergedItem.linkId);return updatedItem?{...mergedItem,item:updatedItem.item?mergeUpdatedItems(mergedItem.item||[],updatedItem.item):mergedItem.item,answer:updatedItem.answer||mergedItem.answer}:mergedItem})}function getNewMultiSelectValues(selected,propertyName,item){let result=[];for(let selectedStr of selected){let option=item.answerOption?.find(candidate=>(0,import_core166.typedValueToString)(getItemAnswerOptionValue(candidate))===selectedStr);if(option){let optionValue=getItemAnswerOptionValue(option);optionValue&&result.push({[propertyName]:optionValue.value})}}return result}function getByLinkId(responseItems,linkId){if(responseItems)for(let response of responseItems){if(response.linkId===linkId)return response.answer;if(response.item){let nestedAnswer=getByLinkId(response.item,linkId);if(nestedAnswer)return nestedAnswer}}}function evaluateMatch(actualAnswer,expectedAnswer,operator){if(operator==="exists")return!!actualAnswer===expectedAnswer.value;if(actualAnswer){let fhirPathOperator=operator==="="||operator==="!="?operator?.replace("=","~"):operator,[{value}]=(0,import_core166.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=getItemEnableWhenValueAnswer(enableWhen),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=getResponseItemAnswerValue(actualAnswerValue),{operator}=enableWhen;if(evaluateMatch(actualAnswer,expectedAnswer,operator)?anyMatch=!0:allMatch=!1,enableBehavior==="any"&&anyMatch)break}return{anyMatch,allMatch}}function getQuestionnaireItemReferenceTargetTypes(item){let extension=(0,import_core166.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_core166.deepClone)(item),extension=(0,import_core166.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_core166.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_core166.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:(0,import_core166.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 getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core166.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}function getItemInitialValue(initial){return(0,import_core166.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemInitial",value:initial},"value")}function getItemAnswerOptionValue(option){return(0,import_core166.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemAnswerOption",value:option},"value")}function getItemEnableWhenValueAnswer(enableWhen){return(0,import_core166.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer")}function getResponseItemAnswerValue(answer){return(0,import_core166.getTypedPropertyValueWithoutSchema)({type:"QuestionnaireResponseItemAnswer",value:answer},"value")}var import_react82=require("react"),QuestionnaireFormContext=(0,import_react82.createContext)({});var import_jsx_runtime128=require("react/jsx-runtime");function QuestionnaireFormItem(props){let context=(0,import_react83.useContext)(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a,idx)=>idx===props.index?newResponseAnswer:a)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??getItemInitialValue(initial);switch(type){case"display":return(0,import_jsx_runtime128.jsx)("p",{children:props.item.text},props.item.linkId);case"boolean":return(0,import_jsx_runtime128.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime128.jsx)(import_core167.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_runtime128.jsx)(import_core167.TextInput,{type:"number",step:"any",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{type:"number",step:1,id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{type:"date",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return(0,import_jsx_runtime128.jsx)(DateTimeInput,{name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{type:"time",id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return(0,import_jsx_runtime128.jsx)(import_core167.Textarea,{id:name,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return(0,import_jsx_runtime128.jsx)(import_core167.Group,{py:4,children:(0,import_jsx_runtime128.jsx)(AttachmentInput,{path:"",name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return(0,import_jsx_runtime128.jsx)(ReferenceInput,{name,required:props.required??item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});case"quantity":return(0,import_jsx_runtime128.jsx)(QuantityInput,{path:"",name,required:props.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_runtime128.jsx)(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):isMultiSelectChoice(item)&&!item.answerValueSet?(0,import_jsx_runtime128.jsx)(QuestionnaireMultiSelectInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):(0,import_jsx_runtime128.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_runtime128.jsx)(NoAnswerDisplay,{});let initialValue=getItemInitialValue(initial),data2=[""];for(let option of item.answerOption){let optionValue=getItemAnswerOptionValue(option);data2.push((0,import_core168.typedValueToString)(optionValue))}let defaultValue2=getCurrentAnswer(response)??initialValue;if(item.repeats){let{propertyName,data:data3}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime128.jsx)(import_core167.MultiSelect,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core168.typedValueToString)(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return(0,import_jsx_runtime128.jsx)(import_core167.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core168.capitalize)(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core168.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireMultiSelectInput(props){let{item,initial,response}=props;if(!item.answerOption?.length)return(0,import_jsx_runtime128.jsx)(NoAnswerDisplay,{});let initialValue=getItemInitialValue(initial),{propertyName,data:data2}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime128.jsx)(import_core167.MultiSelect,{data:data2,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core168.typedValueToString)(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?(0,import_jsx_runtime128.jsx)(NoAnswerDisplay,{}):item.answerValueSet?(0,import_jsx_runtime128.jsx)(CodingInput,{path:"",name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code}),creatable:item.type==="open-choice"}):(0,import_jsx_runtime128.jsx)(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core168.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=getItemInitialValue(initial),options=[],defaultValue2;if(item.answerOption)for(let i=0;i{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core168.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>(0,import_jsx_runtime128.jsx)(import_core167.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime128.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return(0,import_jsx_runtime128.jsx)(import_core167.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemAnswerOptionValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a=>getItemAnswerOptionValue(a)).map(type=>(0,import_core168.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core168.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}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 isMultiSelectChoice(item){return!!item.extension?.some(e=>e.url===import_core168.HTTP_HL7_ORG+"/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code==="multi-select")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=getItemAnswerOptionValue(option),propertyName="value"+(0,import_core168.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(answerOption=>{let answerOptionValue=getItemAnswerOptionValue(answerOption),answerOptionValueStr=(0,import_core168.typedValueToString)(answerOptionValue);return{value:answerOptionValueStr,label:answerOptionValueStr}});return{propertyName,data:data2}}var QuestionnaireBuilder_default={section:"QuestionnaireBuilder_section",hovering:"QuestionnaireBuilder_hovering",editing:"QuestionnaireBuilder_editing",questionBody:"QuestionnaireBuilder_questionBody",topActions:"QuestionnaireBuilder_topActions",bottomActions:"QuestionnaireBuilder_bottomActions",movementActions:"QuestionnaireBuilder_movementActions",movementIcons:"QuestionnaireBuilder_movementIcons",columnAlignment:"QuestionnaireBuilder_columnAlignment",linkIdInput:"QuestionnaireBuilder_linkIdInput",typeSelect:"QuestionnaireBuilder_typeSelect",preserveBreaks:"QuestionnaireBuilder_preserveBreaks"};var import_jsx_runtime129=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=(0,import_react_hooks49.useMedplum)(),defaultValue2=(0,import_react_hooks49.useResource)(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react84.useState)(!1),[value,setValue]=(0,import_react84.useState)(),[selectedKey,setSelectedKey]=(0,import_react84.useState)(),[hoverKey,setHoverKey]=(0,import_react84.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react84.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react84.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_runtime129.jsx)("div",{children:(0,import_jsx_runtime129.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime129.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime129.jsx)(import_core169.Button,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core170.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_react84.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_runtime129.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime129.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[isResource2&&(0,import_jsx_runtime129.jsx)(import_core169.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime129.jsx)(import_core169.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime129.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime129.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[resource.title&&(0,import_jsx_runtime129.jsx)(import_core169.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime129.jsx)("div",{className:QuestionnaireBuilder_default.preserveBreaks,children:item.text}),!isContainer&&(0,import_jsx_runtime129.jsx)(QuestionnaireFormItem,{item,index:0,required:!1,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime129.jsx)("div",{children:(0,import_jsx_runtime129.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_runtime129.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(import_core169.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime129.jsx)(import_core169.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_runtime129.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime129.jsx)(import_core169.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime129.jsxs)(import_core169.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime129.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime129.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime129.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core170.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime129.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime129.jsx)(import_core169.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime129.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime129.jsxs)(import_core169.Box,{display:"flex",children:[(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime129.jsx)(import_core169.Space,{w:"lg"}),(0,import_jsx_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime129.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime129.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime129.jsx)("div",{children:(0,import_jsx_runtime129.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_runtime129.jsx)("div",{children:(0,import_jsx_runtime129.jsx)(import_core169.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_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime129.jsxs)(import_core169.Group,{children:[(0,import_jsx_runtime129.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_runtime129.jsx)(import_core169.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime129.jsx)(import_core169.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_core174=require("@mantine/core"),import_core175=require("@medplum/core"),import_react_hooks50=require("@medplum/react-hooks"),import_react87=require("react");var import_core173=require("@mantine/core");var import_core171=require("@mantine/core"),import_react85=require("react");var import_jsx_runtime130=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react85.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return(0,import_jsx_runtime130.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_runtime130.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime130.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_,index)=>(0,import_jsx_runtime130.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime130.jsx)(import_core171.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_core172=require("@mantine/core"),import_react86=require("react");var import_jsx_runtime131=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react86.useState)(props.response);if((0,import_react86.useEffect)(()=>{setResponses(props.response)},[props.response]),responses.length===0)return null;function handleRepeatableGroup(newResponseItems,index){let newResponses=responses.map((responses2,idx)=>idx===index?newResponseItems[0]:responses2);setResponses(newResponses),props.onChange(newResponses)}function insertNewGroup(){let newResponse=buildInitialResponseItem(props.item);setResponses([...responses,newResponse])}return(0,import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime131.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime131.jsx)(import_core172.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_runtime131.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime131.jsx)(import_core172.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime131.jsx)(import_core172.Stack,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?(0,import_jsx_runtime131.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime131.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime131.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime132=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,excludeButtons,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type==="group"?(0,import_jsx_runtime132.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime132.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime132.jsx)(import_core173.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[renderPages&&(0,import_jsx_runtime132.jsx)(import_core173.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime132.jsx)(import_core173.Stack,{children:form}),!excludeButtons&&(0,import_jsx_runtime132.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep:renderPages?nextStep:void 0,prevStep:renderPages?prevStep:void 0,renderPages,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.renderPages&&props.activePage>0,showNextButton=props.renderPages&&props.activePage{let form=e.currentTarget.closest("form");props.nextStep&&form.reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime132.jsx)(import_core173.Button,{type:"submit",children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime133=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=(0,import_react_hooks50.useMedplum)(),{subject,source:sourceFromProps}=props,questionnaire=(0,import_react_hooks50.useResource)(props.questionnaire),prevQuestionnaire=(0,import_react_hooks50.usePrevious)(questionnaire),[response,setResponse]=(0,import_react87.useState)(),[activePage,setActivePage]=(0,import_react87.useState)(0),onChangeRef=(0,import_react87.useRef)(props.onChange);onChangeRef.current=props.onChange;let onSubmitRef=(0,import_react87.useRef)(props.onSubmit);onSubmitRef.current=props.onSubmit,(0,import_react87.useEffect)(()=>{questionnaire&&getQuestionnaireIdentity(prevQuestionnaire)===getQuestionnaireIdentity(questionnaire)||setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)},[questionnaire,prevQuestionnaire]),(0,import_react87.useEffect)(()=>{if(response&&onChangeRef.current)try{onChangeRef.current(response)}catch(e){console.error("Error invoking QuestionnaireForm.onChange callback",e)}},[response]);let setItems=(0,import_react87.useCallback)(newResponseItems=>{setResponse(prevResponse=>{let currentItems=prevResponse?.item??[],mergedItems=mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems]),tempResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergedItems},updatedItems=evaluateCalculatedExpressionsInQuestionnaire(questionnaire?.item??[],tempResponse);return{resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeUpdatedItems(mergedItems,updatedItems)}})},[questionnaire]),handleSubmit=(0,import_react87.useCallback)(()=>{let onSubmit=onSubmitRef.current;if(onSubmit&&response){let source=sourceFromProps;if(!source){let profile=medplum.getProfile();profile&&(source=(0,import_core175.createReference)(profile))}onSubmit({...response,questionnaire:(0,import_core175.getReferenceString)(questionnaire),subject,source,authored:new Date().toISOString(),status:"completed"})}},[medplum,questionnaire,response,subject,sourceFromProps]);function checkForQuestionEnabled(item){return isQuestionEnabled(item,response)}if(!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime133.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime133.jsxs)(Form,{testid:"questionnaire-form",onSubmit:handleSubmit,children:[questionnaire.title&&(0,import_jsx_runtime133.jsx)(import_core174.Title,{children:questionnaire.title}),(0,import_jsx_runtime133.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:!props.disablePagination&&numberOfPages>1,activePage,numberOfPages,excludeButtons:props.excludeButtons,submitButtonText:props.submitButtonText,checkForQuestionEnabled,nextStep,prevStep})]})})}function mergeIndividualItems(prevItem,newItem){let mergedNestedItems=mergeItems(prevItem.item??[],newItem.item??[]);return{...newItem,item:mergedNestedItems.length>0?mergedNestedItems:void 0,answer:newItem.answer&&newItem.answer.length>0?newItem.answer:prevItem.answer}}function mergeItems(prevItems,newItems){let result=[],usedIds=new Set;for(let prevItem of prevItems){let itemId=prevItem.id,newItem=newItems.find(item=>item.id===itemId);newItem?(result.push(mergeIndividualItems(prevItem,newItem)),usedIds.add(newItem.id)):result.push(prevItem)}for(let newItem of newItems)usedIds.has(newItem.id)||result.push(newItem);return result}function getQuestionnaireIdentity(questionnaire){return questionnaire?.id||questionnaire}var import_core176=require("@mantine/core"),import_core177=require("@medplum/core");var import_react88=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime134=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_react88.useState)([]),[groupId,setGroupId]=(0,import_react88.useState)(1),[intervalId,setIntervalId]=(0,import_react88.useState)(1);return(0,import_react88.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime134.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime134.jsx)(import_core176.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime134.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime134.jsx)(import_core176.Group,{justify:"flex-end",children:(0,import_jsx_runtime134.jsx)(import_core176.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(g=>g.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&¤tGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g=>g.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime134.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime134.jsxs)(import_core176.Stack,{gap:"lg",children:[(0,import_jsx_runtime134.jsx)(import_core176.Group,{justify:"flex-end",children:(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime134.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime134.jsx)(import_core176.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime134.jsxs)(import_core176.Stack,{gap:"xs",children:[(0,import_jsx_runtime134.jsxs)(import_core176.Group,{children:[(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.jsx)(import_core176.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_runtime134.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime134.jsx)(RangeInput,{path:"",onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.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_runtime134.jsxs)(import_core176.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime134.jsx)(import_core176.Group,{children:(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.jsxs)(import_core176.Group,{gap:"xs",children:[(0,import_jsx_runtime134.jsx)(import_core176.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime134.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime134.jsx)(RangeInput,{path:"",name:`age-${intervalGroup.id}`,defaultValue:intervalGroup.filters.age,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime134.jsx)(import_core176.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_runtime134.jsx)(import_core176.NativeSelect,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f=>[f,interval[f]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core177.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core177.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_core177.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_core178=require("@mantine/core"),import_core179=require("@medplum/core"),import_react_hooks51=require("@medplum/react-hooks");var import_react89=require("react");var import_jsx_runtime135=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=(0,import_react_hooks51.useMedplum)(),requestGroup=(0,import_react_hooks51.useResource)(props.value),[startedLoading,setStartedLoading]=(0,import_react89.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react89.useState)();if((0,import_react89.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_runtime135.jsx)(import_core178.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_runtime135.jsxs)(import_react89.Fragment,{children:[(0,import_jsx_runtime135.jsx)(import_core178.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime135.jsx)(IconCheckbox,{}):(0,import_jsx_runtime135.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime135.jsxs)(import_core178.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime135.jsx)(import_core178.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime135.jsx)("div",{children:action.description}),(0,import_jsx_runtime135.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime135.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core179.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime135.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime135.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime135.jsxs)(import_core178.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime135.jsx)(import_core178.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime135.jsx)(import_core178.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_core179.getReferenceString)(entry.resource))return entry.resource}}var import_react_hooks52=require("@medplum/react-hooks"),import_react90=require("react");var import_core180=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N=orig.length,M=rev.length,MAX=N+M+1,size=1+2*MAX,middle=size/2|0,diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;dnode.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N&&j>=M)return diagonal[kmiddle]}diagonal[middle+d-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=(history.entry??[]).filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:(0,import_core180.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b)=>a.meta.lastUpdated.localeCompare(b.meta.lastUpdated));if(!versions.length)return[];let table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i0)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_runtime136=require("react/jsx-runtime");function ResourceBlame(props){let medplum=(0,import_react_hooks52.useMedplum)(),[value,setValue]=(0,import_react90.useState)(props.history);if((0,import_react90.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_runtime136.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime136.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime136.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime136.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime136.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime136.jsxs)(import_jsx_runtime136.Fragment,{children:[(0,import_jsx_runtime136.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime136.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime136.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime136.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime136.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime136.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime136.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core181=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime137=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_core181.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core181.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime137.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime137.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:["...",(0,import_jsx_runtime137.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime137.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(` `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime137.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(` `)}),"...",(0,import_jsx_runtime137.jsx)("br",{})]})}var import_core182=require("@mantine/core"),import_core183=require("@medplum/core"),import_react_hooks53=require("@medplum/react-hooks");var import_react91=require("react");var ResourceForm_default={splitButton:"ResourceForm_splitButton",menuControl:"ResourceForm_menuControl"};var import_jsx_runtime138=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=(0,import_react_hooks53.useMedplum)(),defaultValue2=(0,import_react_hooks53.useResource)(props.defaultValue),resourceType=defaultValue2?.resourceType,[schemaLoaded,setSchemaLoaded]=(0,import_react91.useState)(!1),[value,setValue]=(0,import_react91.useState)(),accessPolicy=medplum.getAccessPolicy(),theme=(0,import_core182.useMantineTheme)();(0,import_react91.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core183.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(!0);let modifiedDefaultValue=(0,import_core183.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else medplum.requestSchema(resourceType).then(()=>{setValue(defaultValue2),setSchemaLoaded(!0)}).catch(console.log)},[medplum,defaultValue2,resourceType,props.profileUrl]);let accessPolicyResource=(0,import_react91.useMemo)(()=>defaultValue2&&(0,import_core183.satisfiedAccessPolicy)(defaultValue2,import_core183.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,defaultValue2]),canWrite=(0,import_react91.useMemo)(()=>medplum.isSuperAdmin()||!accessPolicy||!(0,import_core183.isPopulated)(value?.resourceType)?!0:(0,import_core183.canWriteResourceType)(accessPolicy,value?.resourceType),[medplum,accessPolicy,value?.resourceType]);return!schemaLoaded||!value?(0,import_jsx_runtime138.jsx)("div",{children:"Loading..."}):canWrite?(0,import_jsx_runtime138.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime138.jsxs)(import_core182.Stack,{mb:"xl",children:[(0,import_jsx_runtime138.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime138.jsx)(import_core182.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime138.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime138.jsx)(import_core182.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime138.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:resourceType,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl,accessPolicyResource}),(0,import_jsx_runtime138.jsxs)(import_core182.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",gap:0,children:[(0,import_jsx_runtime138.jsx)(import_core182.Button,{type:"submit",className:clsx_default((props.onPatch||props.onDelete)&&ResourceForm_default.splitButton),children:defaultValue2?.id?"Update":"Create"}),(props.onPatch||props.onDelete)&&(0,import_jsx_runtime138.jsxs)(import_core182.Menu,{transitionProps:{transition:"pop"},position:"bottom-end",withinPortal:!0,children:[(0,import_jsx_runtime138.jsx)(import_core182.Menu.Target,{children:(0,import_jsx_runtime138.jsx)(import_core182.ActionIcon,{variant:"filled",color:theme.primaryColor,size:36,className:ResourceForm_default.menuControl,"aria-label":"More actions",children:(0,import_jsx_runtime138.jsx)(IconChevronDown,{size:14,stroke:1.5})})}),(0,import_jsx_runtime138.jsxs)(import_core182.Menu.Dropdown,{children:[props.onPatch&&(0,import_jsx_runtime138.jsx)(import_core182.Menu.Item,{leftSection:(0,import_jsx_runtime138.jsx)(IconEdit,{size:14,stroke:1.5}),onClick:()=>{props.onPatch(value)},children:"Patch"}),props.onDelete&&(0,import_jsx_runtime138.jsx)(import_core182.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime138.jsx)(IconTrash,{size:14,stroke:1.5,color:"red"}),onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})]})]}):(0,import_jsx_runtime138.jsxs)(import_core182.Alert,{color:"red",title:"Permission denied",icon:(0,import_jsx_runtime138.jsx)(IconAlertCircle,{}),children:["Your access level prevents you from editing and creating ",value.resourceType," resources."]})}var import_core184=require("@mantine/core"),import_core185=require("@medplum/core"),import_react_hooks54=require("@medplum/react-hooks"),import_react92=require("react");var import_jsx_runtime139=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=(0,import_react_hooks54.useMedplum)(),[value,setValue]=(0,import_react92.useState)(props.history);return(0,import_react92.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_runtime139.jsxs)(import_core184.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime139.jsx)(import_core184.Table.Thead,{children:(0,import_jsx_runtime139.jsxs)(import_core184.Table.Tr,{children:[(0,import_jsx_runtime139.jsx)(import_core184.Table.Th,{children:"Author"}),(0,import_jsx_runtime139.jsx)(import_core184.Table.Th,{children:"Date"}),(0,import_jsx_runtime139.jsx)(import_core184.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime139.jsx)(import_core184.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime139.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime139.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime139.jsxs)(import_core184.Table.Tr,{children:[(0,import_jsx_runtime139.jsx)(import_core184.Table.Td,{children:(0,import_jsx_runtime139.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime139.jsx)(import_core184.Table.Td,{children:(0,import_core185.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime139.jsx)(import_core184.Table.Td,{children:(0,import_jsx_runtime139.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime139.jsx)(import_core184.Table.Tr,{children:(0,import_jsx_runtime139.jsx)(import_core184.Table.Td,{colSpan:3,children:(0,import_core185.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core186=require("@mantine/core"),import_core187=require("@medplum/core"),import_react_hooks55=require("@medplum/react-hooks"),import_react93=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime140=require("react/jsx-runtime");function Scheduler(props){let schedule=(0,import_react_hooks55.useResource)(props.schedule),questionnaire=(0,import_react_hooks55.useResource)(props.questionnaire),[month,setMonth]=(0,import_react93.useState)(getStartMonth()),[date,setDate]=(0,import_react93.useState)(),[slot,setSlot]=(0,import_react93.useState)(),[response,setResponse]=(0,import_react93.useState)(),[slots]=(0,import_react_hooks55.useSearchResources)("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core187.isReference)(props.schedule)?props.schedule.reference:(0,import_core187.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_runtime140.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime140.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime140.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime140.jsx)(import_core186.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime140.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime140.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime140.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime140.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime140.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime140.jsxs)("div",{children:[(0,import_jsx_runtime140.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime140.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime140.jsxs)("div",{children:[(0,import_jsx_runtime140.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime140.jsx)(import_core186.Stack,{children:slots.map(s=>{let slotStart=new Date(s.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime140.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime140.jsxs)("div",{children:[(0,import_jsx_runtime140.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime140.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_core188=require("@medplum/core");var import_jsx_runtime141=require("react/jsx-runtime");function ServiceRequestTimeline(props){let{serviceRequest,...rest}=props;return(0,import_jsx_runtime141.jsx)(ResourceTimeline,{value:serviceRequest,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("ServiceRequest",id),medplum.search("Communication",{"based-on":ref,_count}),medplum.search("DiagnosticReport",{"based-on":ref,_count}),medplum.search("Media",{"based-on":ref,_count}),medplum.search("DocumentReference",{related:ref,_count}),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count})])},createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",basedOn:[(0,import_core188.createReference)(resource)],subject:resource.subject,sender:(0,import_core188.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core188.createReference)(resource)],subject:resource.subject,operator:(0,import_core188.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core189=require("@mantine/core"),import_notifications9=require("@mantine/notifications"),import_core190=require("@medplum/core"),import_react_hooks56=require("@medplum/react-hooks"),import_jsx_runtime142=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=(0,import_react_hooks56.useMedplum)(),{client,patient,encounter,children,...rest}=props;function launchApp(){medplum.createResource({resourceType:"SmartAppLaunch",patient,encounter}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",(0,import_core190.ensureTrailingSlash)(medplum.fhirUrl().toString())),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications9.showNotification)({color:"red",message:(0,import_core190.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime142.jsx)(import_core189.Anchor,{onClick:()=>launchApp(),...rest,children})} /*! Bundled license information: @tabler/icons-react/dist/esm/defaultAttributes.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/createReactComponent.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconArrowDown.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconArrowRight.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconArrowUp.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBleachOff.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBleach.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBucketOff.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconBucket.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCalendar.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCheck.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCheckbox.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconChevronDown.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconChevronUp.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconColumns.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCopy.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconDots.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconEdit.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconEqualNot.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconEqual.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconFileAlert.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconFilePlus.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconFilter.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconGenderFemale.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconGenderMale.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconLogout.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconMathGreater.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconMathLower.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconMessage.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconPencil.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconPlus.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconRefresh.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSearch.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSettings.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSortAscending.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSortDescending.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSquare.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconStethoscope.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconSwitchHorizontal.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconTableExport.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconTrash.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconUserSquare.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/icons/IconX.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) @tabler/icons-react/dist/esm/tabler-icons-react.mjs: (** * @license @tabler/icons-react v3.17.0 - MIT * * This source code is licensed under the MIT license. * See the LICENSE file in the root directory of this source tree. *) */ //# sourceMappingURL=index.cjs.map