@medplum/react 5.1.11 → 5.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "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 __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;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 __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var require_pointer=__commonJS({"../../node_modules/rfc6902/pointer.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;exports.unescapeToken=unescapeToken;exports.escapeToken=escapeToken;function unescapeToken(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function escapeToken(token){return token.replace(/~/g,"~0").replace(/\//g,"~1")}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;i<l;i++)parent=value,key=this.tokens[i],!(key=="__proto__"||key=="constructor"||key=="prototype")&&(value=(parent||{})[key]);return{parent,key,value}},Pointer2.prototype.get=function(object){return this.evaluate(object).value},Pointer2.prototype.set=function(object,value){var endpoint=this.evaluate(object);endpoint.parent&&(endpoint.parent[endpoint.key]=value)},Pointer2.prototype.push=function(token){this.tokens.push(token)},Pointer2.prototype.add=function(token){var tokens=this.tokens.concat(String(token));return new Pointer2(tokens)},Pointer2.prototype.parent=function(){var tokens=this.tokens.length>1?this.tokens.slice(0,-1):[""];return new Pointer2(tokens)},Pointer2})();exports.Pointer=Pointer}});var require_util=__commonJS({"../../node_modules/rfc6902/util.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.hasOwnProperty=void 0;exports.objectType=objectType;exports.clone=clone;exports.hasOwnProperty=Object.prototype.hasOwnProperty;function objectType(object){return object===void 0?"undefined":object===null?"null":Array.isArray(object)?"array":typeof object}function isNonPrimitive(value){return value!=null&&typeof value=="object"}function clone(source){if(!isNonPrimitive(source))return source;if(source.constructor==Array){for(var length=source.length,arrayTarget=new Array(length),i=0;i<length;i++)arrayTarget[i]=clone(source[i]);return arrayTarget}if(source.constructor==Date){var dateTarget=new Date(+source);return dateTarget}var objectTarget={};for(var key in source)exports.hasOwnProperty.call(source,key)&&(objectTarget[key]=clone(source[key]));return objectTarget}}});var require_diff=__commonJS({"../../node_modules/rfc6902/diff.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.isDestructive=isDestructive;exports.subtract=subtract;exports.intersection=intersection;exports.diffArrays=diffArrays;exports.diffObjects=diffObjects;exports.diffAny=diffAny;var util_1=require_util();function isDestructive(_a){var op=_a.op;return op==="remove"||op==="replace"||op==="copy"||op==="move"}function subtract(minuend,subtrahend){var keys=[];for(var key in minuend)util_1.hasOwnProperty.call(minuend,key)&&minuend[key]!==void 0&&!(util_1.hasOwnProperty.call(subtrahend,key)&&subtrahend[key]!==void 0)&&keys.push(key);return keys}function intersection(objects){for(var length=objects.length,counter={},i=0;i<length;i++){var object=objects[i];for(var key in object)util_1.hasOwnProperty.call(object,key)&&object[key]!==void 0&&(counter[key]=(counter[key]||0)+1)}for(var key in counter)counter[key]<length&&delete counter[key];return Object.keys(counter)}function intersection2(a,b){var keys=[];for(var key in a)util_1.hasOwnProperty.call(a,key)&&a[key]!==void 0&&util_1.hasOwnProperty.call(b,key)&&b[key]!==void 0&&keys.push(key);return keys}function isArrayAdd(array_operation){return array_operation.op==="add"}function isArrayRemove(array_operation){return array_operation.op==="remove"}function appendArrayOperation(base,operation){return{operations:base.operations.concat(operation),cost:base.cost+1}}function diffArrays(input,output,ptr,diff2){diff2===void 0&&(diff2=diffAny);var max_length=Math.max(input.length,output.length),memo2=new Map([[0,{operations:[],cost:0}]]);function dist(i,j){var memo_key=i*max_length+j,memoized=memo2.get(memo_key);if(memoized===void 0){if(i>0&&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.set(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<input_length+padding?String(padded_index):"-",operation={op:array_operation.op,path:ptr.add(index_token).toString(),value:array_operation.value};return[operations.concat(operation),padding+1]}else if(isArrayRemove(array_operation)){var operation={op:array_operation.op,path:ptr.add(String(array_operation.index+padding)).toString()};return[operations.concat(operation),padding-1]}else{var replace_ptr=ptr.add(String(array_operation.index+padding)),replace_operations=diff2(array_operation.original,array_operation.value,replace_ptr);return[operations.concat.apply(operations,replace_operations),padding]}},[[],0])[0];return padded_operations}function diffObjects(input,output,ptr,diff2){diff2===void 0&&(diff2=diffAny);var operations=[];return subtract(input,output).forEach(function(key){operations.push({op:"remove",path:ptr.add(key).toString()})}),subtract(output,input).forEach(function(key){operations.push({op:"add",path:ptr.add(key).toString(),value:output[key]})}),intersection2(input,output).forEach(function(key){operations.push.apply(operations,diff2(input[key],output[key],ptr.add(key)))}),operations}function diffAny(input,output,ptr,diff2){if(diff2===void 0&&(diff2=diffAny),input===output)return[];var input_type=(0,util_1.objectType)(input),output_type=(0,util_1.objectType)(output);return input_type=="array"&&output_type=="array"?diffArrays(input,output,ptr,diff2):input_type=="object"&&output_type=="object"?diffObjects(input,output,ptr,diff2):[{op:"replace",path:ptr.toString(),value:output}]}}});var require_patch=__commonJS({"../../node_modules/rfc6902/patch.js"(exports){"use strict";var __extends=exports&&exports.__extends||(function(){var extendStatics=function(d,b){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d2,b2){d2.__proto__=b2}||function(d2,b2){for(var p in b2)Object.prototype.hasOwnProperty.call(b2,p)&&(d2[p]=b2[p])},extendStatics(d,b)};return function(d,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}})();Object.defineProperty(exports,"__esModule",{value:!0});exports.InvalidOperationError=exports.TestError=exports.MissingError=void 0;exports.add=add;exports.remove=remove;exports.replace=replace;exports.move=move;exports.copy=copy;exports.test=test;exports.apply=apply;var pointer_1=require_pointer(),util_1=require_util(),diff_1=require_diff(),MissingError=(function(_super){__extends(MissingError2,_super);function MissingError2(path){var _this=_super.call(this,"Value required at path: ".concat(path))||this;return _this.path=path,_this.name="MissingError",_this}return MissingError2})(Error);exports.MissingError=MissingError;var TestError=(function(_super){__extends(TestError2,_super);function TestError2(actual,expected){var _this=_super.call(this,"Test failed: ".concat(actual," != ").concat(expected))||this;return _this.actual=actual,_this.expected=expected,_this.name="TestError",_this}return TestError2})(Error);exports.TestError=TestError;function _add(object,key,value){if(Array.isArray(object))if(key=="-")object.push(value);else{var index=parseInt(key,10);object.splice(index,0,value)}else object[key]=value}function _remove(object,key){if(Array.isArray(object)){var index=parseInt(key,10);object.splice(index,1)}else delete object[key]}function add(object,operation,options){var pointer=pointer_1.Pointer.fromJSON(operation.path);if(options?.implicitArrayCreation&&pointer.tokens[pointer.tokens.length-1]==="-"){var parentEndpoint=pointer.parent().evaluate(object);parentEndpoint.value===void 0&&(0,util_1.objectType)(parentEndpoint.parent)==="object"&&(parentEndpoint.parent[parentEndpoint.key]=[])}var endpoint=pointer.evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):options?.implicitArrayCreation&&endpoint.key==="-"&&!Array.isArray(endpoint.parent)?new MissingError(operation.path):(_add(endpoint.parent,endpoint.key,(0,util_1.clone)(operation.value)),null)}function remove(object,operation,options){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.value===void 0?new MissingError(operation.path):(_remove(endpoint.parent,endpoint.key),null)}function replace(object,operation,options){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);if(endpoint.parent===null)return new MissingError(operation.path);if(Array.isArray(endpoint.parent)){if(parseInt(endpoint.key,10)>=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}function move(object,operation,options){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)}function copy(object,operation,options){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)}function test(object,operation,options){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}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,options){switch(operation.op){case"add":return add(object,operation,options);case"remove":return remove(object,operation,options);case"replace":return replace(object,operation,options);case"move":return move(object,operation,options);case"copy":return copy(object,operation,options);case"test":return test(object,operation,options)}return new InvalidOperationError(operation)}}});var require_rfc6902=__commonJS({"../../node_modules/rfc6902/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;exports.applyPatch=applyPatch;exports.createPatch=createPatch2;exports.createTests=createTests;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,options){return patch.map(function(operation){return(0,patch_1.apply)(object,operation,options)})}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)}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}}});var index_exports={};__export(index_exports,{AddressDisplay:()=>AddressDisplay,AddressInput:()=>AddressInput,AllergiesSection:()=>AllergiesSection,AnnotationInput:()=>AnnotationInput,AppShell:()=>AppShell,AsyncAutocomplete:()=>AsyncAutocomplete,AttachmentArrayDisplay:()=>AttachmentArrayDisplay,AttachmentArrayInput:()=>AttachmentArrayInput,AttachmentButton:()=>AttachmentButton,AttachmentDisplay:()=>AttachmentDisplay,AttachmentInput:()=>AttachmentInput,BackboneElementDisplay:()=>BackboneElementDisplay,BackboneElementInput:()=>BackboneElementInput,BaseChat:()=>BaseChat,CalendarInput:()=>CalendarInput,ChangePasswordForm:()=>ChangePasswordForm,ChatList:()=>ChatList,ChatListItem:()=>ChatListItem,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,DefaultResourceItemComponent:()=>DefaultResourceItemComponent,DefaultResourceTimeline:()=>DefaultResourceTimeline,DemographicsSection:()=>DemographicsSection,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,InfoBar:()=>InfoBar,InsuranceSection:()=>InsuranceSection,LabsSection:()=>LabsSection,LinkTabs:()=>LinkTabs,Loading:()=>Loading,Logo:()=>Logo,MeasureReportDisplay:()=>MeasureReportDisplay,MedicationsSection:()=>MedicationsSection,MedplumLink:()=>MedplumLink,MemoizedFhirPathTable:()=>MemoizedFhirPathTable,MfaForm:()=>MfaForm,MoneyDisplay:()=>MoneyDisplay,MoneyInput:()=>MoneyInput,MultiResourceInput:()=>MultiResourceInput,Navbar:()=>Navbar,NewTopicDialog:()=>NewTopicDialog,NoteDisplay:()=>NoteDisplay,NotificationIcon:()=>NotificationIcon,ObservationTable:()=>ObservationTable,OperationOutcomeAlert:()=>OperationOutcomeAlert,PATIENT_PREFERRED_PHARMACY_URL:()=>import_core163.PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>import_core163.PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED:()=>import_core163.PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY:()=>import_core163.PHARMACY_TYPE_PRIMARY,Panel:()=>Panel,ParticipantFilter:()=>ParticipantFilter,PatientAccountsForm:()=>PatientAccountsForm,PatientExportForm:()=>PatientExportForm,PatientHeader:()=>PatientHeader,PatientSummary:()=>PatientSummary,PatientTimeline:()=>PatientTimeline,Pharmacies:()=>Pharmacies,PharmaciesSection:()=>PharmaciesSection,PharmacyDialog:()=>PharmacyDialog,PlanDefinitionBuilder:()=>PlanDefinitionBuilder,ProblemListSection:()=>ProblemListSection,QuantityDisplay:()=>QuantityDisplay,QuantityInput:()=>QuantityInput,QuestionnaireBuilder:()=>QuestionnaireBuilder,QuestionnaireForm:()=>QuestionnaireForm,QuestionnaireResponseDisplay:()=>QuestionnaireResponseDisplay,RangeDisplay:()=>RangeDisplay,RangeInput:()=>RangeInput,RatioInput:()=>RatioInput,ReferenceDisplay:()=>ReferenceDisplay,ReferenceInput:()=>ReferenceInput,ReferenceRangeEditor:()=>ReferenceRangeEditor,ReferenceRangeGroupEditor:()=>ReferenceRangeGroupEditor,RegisterForm:()=>RegisterForm,RequestGroupDisplay:()=>RequestGroupDisplay,ResetPasswordForm:()=>ResetPasswordForm,ResourceArrayDisplay:()=>ResourceArrayDisplay,ResourceArrayInput:()=>ResourceArrayInput,ResourceAvatar:()=>ResourceAvatar,ResourceBadge:()=>ResourceBadge,ResourceBlame:()=>ResourceBlame,ResourceDiff:()=>ResourceDiff,ResourceDiffTable:()=>ResourceDiffTable,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,SetPasswordForm:()=>SetPasswordForm,SexualOrientationSection:()=>SexualOrientationSection,SignInForm:()=>SignInForm,SignatureInput:()=>SignatureInput,SmartAppLaunchLink:()=>SmartAppLaunchLink,SmokingStatusSection:()=>SmokingStatusSection,Spotlight:()=>Spotlight,StatusBadge:()=>StatusBadge,SubmitButton:()=>SubmitButton,ThreadChat:()=>ThreadChat,ThreadInbox:()=>ThreadInbox,Timeline:()=>Timeline,TimelineItem:()=>TimelineItem,TimingInput:()=>TimingInput,ValueSetAutocomplete:()=>ValueSetAutocomplete,VitalsSection:()=>VitalsSection,addDateFilterBetween:()=>addDateFilterBetween,addField:()=>addField,addFilter:()=>addFilter,addLastMonthFilter:()=>addLastMonthFilter,addMissingFilter:()=>addMissingFilter,addNext24HoursFilter:()=>addNext24HoursFilter,addNextMonthFilter:()=>addNextMonthFilter,addPreferredPharmacyToPatient:()=>import_core163.addPreferredPharmacyToPatient,addThisMonthFilter:()=>addThisMonthFilter,addTodayFilter:()=>addTodayFilter,addTomorrowFilter:()=>addTomorrowFilter,addYearToDateFilter:()=>addYearToDateFilter,addYesterdayFilter:()=>addYesterdayFilter,buildFieldNameString:()=>buildFieldNameString,clearFilters:()=>clearFilters,clearFiltersOnField:()=>clearFiltersOnField,codingToValueSetElement:()=>codingToValueSetElement,convertIsoToLocal:()=>convertIsoToLocal,convertLocalToIso:()=>convertLocalToIso,createLabsSection:()=>createLabsSection,createPharmaciesSection:()=>createPharmaciesSection,createPreferredPharmacyExtension:()=>import_core163.createPreferredPharmacyExtension,createScriptTag:()=>createScriptTag,deleteFilter:()=>deleteFilter,exportJsonFile:()=>exportJsonFile,getAppName:()=>getAppName,getDefaultSections:()=>getDefaultSections,getErrorsForInput:()=>getErrorsForInput,getFieldDefinitions:()=>getFieldDefinitions,getIssuesForExpression:()=>getIssuesForExpression,getOpString:()=>getOpString,getPaginationControlProps:()=>getPaginationControlProps,getPreferredPharmaciesFromPatient:()=>import_core163.getPreferredPharmaciesFromPatient,getRecaptcha:()=>getRecaptcha,getSearchOperators:()=>getSearchOperators,getSortField:()=>getSortField,getValuePath:()=>getValuePath,initRecaptcha:()=>initRecaptcha,isAddPharmacyResponse:()=>import_core163.isAddPharmacyResponse,isAuxClick:()=>isAuxClick,isCheckboxCell:()=>isCheckboxCell,isOrganizationArray:()=>import_core163.isOrganizationArray,isSortDescending:()=>isSortDescending,isSupportedProfileStructureDefinition:()=>isSupportedProfileStructureDefinition,killEvent:()=>killEvent,parseForm:()=>parseForm,removePreferredPharmacyFromPatient:()=>import_core163.removePreferredPharmacyFromPatient,renderValue:()=>renderValue,sendCommand:()=>sendCommand,setFilters:()=>setFilters,setOffset:()=>setOffset,setPage:()=>setPage,setPropertyValue:()=>setPropertyValue,setSort:()=>setSort,sortByDateAndPriority:()=>sortByDateAndPriority,summaryResourceListSection:()=>summaryResourceListSection,toggleSort:()=>toggleSort,valueSetElementToCoding:()=>valueSetElementToCoding});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,props.options)}):null}var import_core3=require("@mantine/core"),import_core4=require("@medplum/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:(0,import_core4.trimTrailingEmptyElements)(line)}}function AddressInput(props){let[value,setValue]=(0,import_react2.useState)(props.defaultValue||{}),{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(prevValue=>({...prevValue,...newValue})),props.onChange&&props.onChange({...value,...newValue})}function setUse(use){setValueWrapper({use})}function setType(type){setValueWrapper({type})}function setLine1(line1){setValueWrapper(setLine(value,0,line1))}function setLine2(line2){setValueWrapper(setLine(value,1,line2))}function setCity(city){setValueWrapper({city})}function setState(state){setValueWrapper({state})}function setPostalCode(postalCode){setValueWrapper({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_core5=require("@mantine/core"),import_core6=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_core6.createReference)(author),time:new Date().toISOString()}:{};setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime3.jsx)(import_core5.TextInput,{disabled:props.disabled,name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}var import_core32=require("@mantine/core"),import_react_hooks11=require("@medplum/react-hooks"),import_react18=require("react");var import_core7=require("@mantine/core"),import_core8=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 __iconNode=[["path",{d:"M12 6a2 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:"M6 12a2 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:"M15 18a2 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"}]],IconAdjustmentsHorizontal=createReactComponent("outline","adjustments-horizontal","AdjustmentsHorizontal",__iconNode);var __iconNode2=[["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"}]],IconAlertCircle=createReactComponent("outline","alert-circle","AlertCircle",__iconNode2);var __iconNode3=[["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"}]],IconArrowDown=createReactComponent("outline","arrow-down","ArrowDown",__iconNode3);var __iconNode4=[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]],IconArrowRight=createReactComponent("outline","arrow-right","ArrowRight",__iconNode4);var __iconNode5=[["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"}]],IconArrowUp=createReactComponent("outline","arrow-up","ArrowUp",__iconNode5);var __iconNode6=[["path",{d:"M6 20a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-0"}],["path",{d:"M16 4a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-1"}],["path",{d:"M16 20a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-2"}],["path",{d:"M11 12a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-3"}],["path",{d:"M21 12a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-4"}],["path",{d:"M5.058 18.306l2.88 -4.606",key:"svg-5"}],["path",{d:"M10.061 10.303l2.877 -4.604",key:"svg-6"}],["path",{d:"M10.065 13.705l2.876 4.6",key:"svg-7"}],["path",{d:"M15.063 5.7l2.881 4.61",key:"svg-8"}]],IconBinaryTree=createReactComponent("outline","binary-tree","BinaryTree",__iconNode6);var __iconNode7=[["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"}]],IconBleachOff=createReactComponent("outline","bleach-off","BleachOff",__iconNode7);var __iconNode8=[["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"}]],IconBleach=createReactComponent("outline","bleach","Bleach",__iconNode8);var __iconNode9=[["path",{d:"M18 7v14l-6 -4l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4",key:"svg-0"}]],IconBookmark=createReactComponent("outline","bookmark","Bookmark",__iconNode9);var __iconNode10=[["path",{d:"M7 5a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2l0 -10",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"}]],IconBoxMultiple=createReactComponent("outline","box-multiple","BoxMultiple",__iconNode10);var __iconNode11=[["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"}]],IconBracketsContain=createReactComponent("outline","brackets-contain","BracketsContain",__iconNode11);var __iconNode12=[["path",{d:"M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9",key:"svg-0"}],["path",{d:"M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2",key:"svg-1"}],["path",{d:"M12 12l0 .01",key:"svg-2"}],["path",{d:"M3 13a20 20 0 0 0 18 0",key:"svg-3"}]],IconBriefcase=createReactComponent("outline","briefcase","Briefcase",__iconNode12);var __iconNode13=[["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"}]],IconBucketOff=createReactComponent("outline","bucket-off","BucketOff",__iconNode13);var __iconNode14=[["path",{d:"M4 7a8 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"}]],IconBucket=createReactComponent("outline","bucket","Bucket",__iconNode14);var __iconNode15=[["path",{d:"M3 20h18v-8a3 3 0 0 0 -3 -3h-12a3 3 0 0 0 -3 3v8",key:"svg-0"}],["path",{d:"M3 14.803c.312 .135 .654 .204 1 .197a2.4 2.4 0 0 0 2 -1a2.4 2.4 0 0 1 2 -1a2.4 2.4 0 0 1 2 1a2.4 2.4 0 0 0 2 1a2.4 2.4 0 0 0 2 -1a2.4 2.4 0 0 1 2 -1a2.4 2.4 0 0 1 2 1a2.4 2.4 0 0 0 2 1c.35 .007 .692 -.062 1 -.197",key:"svg-1"}],["path",{d:"M12 4l1.465 1.638a2 2 0 1 1 -3.015 .099l1.55 -1.737",key:"svg-2"}]],IconCake=createReactComponent("outline","cake","Cake",__iconNode15);var __iconNode16=[["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-12",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"}]],IconCalendar=createReactComponent("outline","calendar","Calendar",__iconNode16);var __iconNode17=[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]],IconCheck=createReactComponent("outline","check","Check",__iconNode17);var __iconNode18=[["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"}]],IconCheckbox=createReactComponent("outline","checkbox","Checkbox",__iconNode18);var __iconNode19=[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]],IconChevronDown=createReactComponent("outline","chevron-down","ChevronDown",__iconNode19);var __iconNode20=[["path",{d:"M9 6l6 6l-6 6",key:"svg-0"}]],IconChevronRight=createReactComponent("outline","chevron-right","ChevronRight",__iconNode20);var __iconNode21=[["path",{d:"M6 15l6 -6l6 6",key:"svg-0"}]],IconChevronUp=createReactComponent("outline","chevron-up","ChevronUp",__iconNode21);var __iconNode22=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l6 0",key:"svg-1"}]],IconCircleMinus=createReactComponent("outline","circle-minus","CircleMinus",__iconNode22);var __iconNode23=[["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"}]],IconCirclePlus=createReactComponent("outline","circle-plus","CirclePlus",__iconNode23);var __iconNode24=[["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"}]],IconCloudUpload=createReactComponent("outline","cloud-upload","CloudUpload",__iconNode24);var __iconNode25=[["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"}]],IconColumns=createReactComponent("outline","columns","Columns",__iconNode25);var __iconNode26=[["path",{d:"M7 9.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.667l0 -8.666",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"}]],IconCopy=createReactComponent("outline","copy","Copy",__iconNode26);var __iconNode27=[["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"}]],IconCurrencyDollar=createReactComponent("outline","currency-dollar","CurrencyDollar",__iconNode27);var __iconNode28=[["path",{d:"M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]],IconDots=createReactComponent("outline","dots","Dots",__iconNode28);var __iconNode29=[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 11l5 5l5 -5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]],IconDownload=createReactComponent("outline","download","Download",__iconNode29);var __iconNode30=[["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.415",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]],IconEdit=createReactComponent("outline","edit","Edit",__iconNode30);var __iconNode31=[["path",{d:"M9.5 5.5a2.5 2.5 0 1 0 5 0a2.5 2.5 0 1 0 -5 0",key:"svg-0"}],["path",{d:"M12 21.368l5.095 -5.096a3.088 3.088 0 1 0 -4.367 -4.367l-.728 .727l-.728 -.727a3.088 3.088 0 1 0 -4.367 4.367l5.095 5.096",key:"svg-1"}]],IconEmpathize=createReactComponent("outline","empathize","Empathize",__iconNode31);var __iconNode32=[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}],["path",{d:"M5 19l14 -14",key:"svg-2"}]],IconEqualNot=createReactComponent("outline","equal-not","EqualNot",__iconNode32);var __iconNode33=[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]],IconEqual=createReactComponent("outline","equal","Equal",__iconNode33);var __iconNode34=[["path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828",key:"svg-0"}],["path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]],IconEyeOff=createReactComponent("outline","eye-off","EyeOff",__iconNode34);var __iconNode35=[["path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-0"}],["path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6",key:"svg-1"}]],IconEye=createReactComponent("outline","eye","Eye",__iconNode35);var __iconNode36=[["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 2",key:"svg-1"}],["path",{d:"M12 17l.01 0",key:"svg-2"}],["path",{d:"M12 11l0 3",key:"svg-3"}]],IconFileAlert=createReactComponent("outline","file-alert","FileAlert",__iconNode36);var __iconNode37=[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M11.5 21h-4.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v5m-5 6h7m-3 -3l3 3l-3 3",key:"svg-1"}]],IconFileExport=createReactComponent("outline","file-export","FileExport",__iconNode37);var __iconNode38=[["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 2",key:"svg-1"}],["path",{d:"M12 11l0 6",key:"svg-2"}],["path",{d:"M9 14l6 0",key:"svg-3"}]],IconFilePlus=createReactComponent("outline","file-plus","FilePlus",__iconNode38);var __iconNode39=[["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 2",key:"svg-1"}],["path",{d:"M9 9l1 0",key:"svg-2"}],["path",{d:"M9 13l6 0",key:"svg-3"}],["path",{d:"M9 17l6 0",key:"svg-4"}]],IconFileText=createReactComponent("outline","file-text","FileText",__iconNode39);var __iconNode40=[["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.227",key:"svg-0"}]],IconFilter=createReactComponent("outline","filter","Filter",__iconNode40);var __iconNode41=[["path",{d:"M9 6.371c0 4.418 -2.239 6.629 -5 6.629",key:"svg-0"}],["path",{d:"M4 6.371h7",key:"svg-1"}],["path",{d:"M5 9c0 2.144 2.252 3.908 6 4",key:"svg-2"}],["path",{d:"M12 20l4 -9l4 9",key:"svg-3"}],["path",{d:"M19.1 18h-6.2",key:"svg-4"}],["path",{d:"M6.694 3l.793 .582",key:"svg-5"}]],IconLanguage=createReactComponent("outline","language","Language",__iconNode41);var __iconNode42=[["path",{d:"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12",key:"svg-0"}],["path",{d:"M9 4l0 16",key:"svg-1"}]],IconLayoutSidebar=createReactComponent("outline","layout-sidebar","LayoutSidebar",__iconNode42);var __iconNode43=[["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"}]],IconLogout=createReactComponent("outline","logout","Logout",__iconNode43);var __iconNode44=[["path",{d:"M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0",key:"svg-1"}]],IconMapPin=createReactComponent("outline","map-pin","MapPin",__iconNode44);var __iconNode45=[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]],IconMathGreater=createReactComponent("outline","math-greater","MathGreater",__iconNode45);var __iconNode46=[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]],IconMathLower=createReactComponent("outline","math-lower","MathLower",__iconNode46);var __iconNode47=[["path",{d:"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1",key:"svg-0"}]],IconMessageCircle=createReactComponent("outline","message-circle","MessageCircle",__iconNode47);var __iconNode48=[["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 -3h12",key:"svg-2"}]],IconMessage=createReactComponent("outline","message","Message",__iconNode48);var __iconNode49=[["path",{d:"M5 12l14 0",key:"svg-0"}]],IconMinus=createReactComponent("outline","minus","Minus",__iconNode49);var __iconNode50=[["path",{d:"M15 7l-6.5 6.5a1.5 1.5 0 0 0 3 3l6.5 -6.5a3 3 0 0 0 -6 -6l-6.5 6.5a4.5 4.5 0 0 0 9 9l6.5 -6.5",key:"svg-0"}]],IconPaperclip=createReactComponent("outline","paperclip","Paperclip",__iconNode50);var __iconNode51=[["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"}]],IconPencil=createReactComponent("outline","pencil","Pencil",__iconNode51);var __iconNode52=[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]],IconPlus=createReactComponent("outline","plus","Plus",__iconNode52);var __iconNode53=[["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"}]],IconRefresh=createReactComponent("outline","refresh","Refresh",__iconNode53);var __iconNode54=[["path",{d:"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]],IconSearch=createReactComponent("outline","search","Search",__iconNode54);var __iconNode55=[["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.065",key:"svg-0"}],["path",{d:"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-1"}]],IconSettings=createReactComponent("outline","settings","Settings",__iconNode55);var __iconNode56=[["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"}]],IconSortAscending=createReactComponent("outline","sort-ascending","SortAscending",__iconNode56);var __iconNode57=[["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"}]],IconSortDescending=createReactComponent("outline","sort-descending","SortDescending",__iconNode57);var __iconNode58=[["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-14",key:"svg-0"}]],IconSquare=createReactComponent("outline","square","Square",__iconNode58);var __iconNode59=[["path",{d:"M6 4h-1a2 2 0 0 0 -2 2v3.5a5.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:"M18 10a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-4"}]],IconStethoscope=createReactComponent("outline","stethoscope","Stethoscope",__iconNode59);var __iconNode60=[["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"}]],IconSwitchHorizontal=createReactComponent("outline","switch-horizontal","SwitchHorizontal",__iconNode60);var __iconNode61=[["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"}]],IconTableExport=createReactComponent("outline","table-export","TableExport",__iconNode61);var __iconNode62=[["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"}]],IconTrash=createReactComponent("outline","trash","Trash",__iconNode62);var __iconNode63=[["path",{d:"M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0",key:"svg-0"}],["path",{d:"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2",key:"svg-1"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"svg-2"}],["path",{d:"M21 21v-2a4 4 0 0 0 -3 -3.85",key:"svg-3"}]],IconUsers=createReactComponent("outline","users","Users",__iconNode63);var __iconNode64=[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]],IconX=createReactComponent("outline","x","X",__iconNode64);var import_react5=require("react");var import_jsx_runtime4=require("react/jsx-runtime"),ErrorBoundary=class extends import_react5.Component{constructor(props){super(props);__publicField(this,"state");this.state={lastLocation:import_core8.locationUtils.getLocation()}}static getDerivedStateFromError(error){return{error,lastLocation:import_core8.locationUtils.getLocation()}}componentDidUpdate(_prevProps,_prevState){import_core8.locationUtils.getLocation()!==this.state.lastLocation&&this.setState({lastLocation:import_core8.locationUtils.getLocation(),error:void 0})}shouldComponentUpdate(nextProps,nextState){return!!(this.props.children!==nextProps.children||nextState.error&&!this.state.error||this.state.lastLocation!==import_core8.locationUtils.getLocation())}componentDidCatch(error,errorInfo){console.error("Uncaught error:",error,errorInfo)}render(){return this.state.error?(0,import_jsx_runtime4.jsx)(import_core7.Alert,{icon:(0,import_jsx_runtime4.jsx)(IconAlertCircle,{size:16}),title:"Something went wrong",color:"red",children:(0,import_core8.normalizeErrorString)(this.state.error)}):this.props.children}};var import_core9=require("@mantine/core"),import_jsx_runtime5=require("react/jsx-runtime");function Loading(){return(0,import_jsx_runtime5.jsx)(import_core9.Center,{style:{width:"100%",height:"100vh"},children:(0,import_jsx_runtime5.jsx)(import_core9.Loader,{})})}var AppShell_default={main:"AppShell_main"};var import_core22=require("@mantine/core"),import_core23=require("@medplum/core"),import_react_hooks6=require("@medplum/react-hooks");var import_react9=require("react");var import_core13=require("@mantine/core"),import_core14=require("@medplum/core"),import_react_hooks3=require("@medplum/react-hooks");var import_core11=require("@mantine/core"),import_core12=require("@medplum/core"),import_react_hooks2=require("@medplum/react-hooks");var import_core10=require("@medplum/core");function killEvent(e){e.preventDefault(),e.stopPropagation()}function isAuxClick(e){return e.button===1||e.ctrlKey||e.metaKey}function isCheckboxCell(el){if(isCheckboxElement(el))return!0;if(el instanceof HTMLTableCellElement){let children=el.children;if(children.length===1&&isCheckboxElement(children[0]))return!0}return!1}function isCheckboxElement(el){return el instanceof HTMLInputElement&&el.type==="checkbox"}async function sendCommand(frame,command){return new Promise((resolve,reject)=>{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])})}function exportJsonFile(jsonString,fileName){let blobForExport=new Blob([jsonString],{type:import_core10.ContentType.JSON}),url=URL.createObjectURL(blobForExport),link=document.createElement("a");link.href=url;let linkName=fileName??new Date().toISOString().replaceAll(/\D/g,"");link.download=`${linkName}.json`,document.body.appendChild(link),link.click(),URL.revokeObjectURL(url)}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_core11.Anchor,{href,"aria-label":label,onAuxClick:e=>{e.stopPropagation()},onClick:e=>{e.stopPropagation(),onClick?(e.preventDefault(),onClick(e)):to&&(isAuxClick(e)||(e.preventDefault(),navigate(href)))},...rest,children})}function getHref(to){if(to){if(typeof to=="string")return getStringHref(to);if((0,import_core12.isResource)(to))return getResourceHref(to);if((0,import_core12.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.at(-1)?.at(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_core14.getDisplayString)(resource):props.alt??"",initials=getInitials(text),uncachedImageUrl=(resource&&(0,import_core14.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_core13.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}):(0,import_jsx_runtime7.jsx)(import_core13.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName"};var import_core16=require("@mantine/core"),import_core17=require("@medplum/core"),import_react_hooks4=require("@medplum/react-hooks");var import_react6=require("react");var import_core15=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_core15.formatHumanName)(name,props.options)}):null}function getAppName(){return process.env.MEDPLUM_APP_NAME||"Medplum"}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_core16.useMantineColorScheme)(),[layoutVersion]=(0,import_react6.useState)(localStorage.appShellLayoutVersion??"v1"),showLayoutToggle=props.showLayoutVersionToggle??!0;function setAppShellVersion(version){localStorage.appShellLayoutVersion=version,import_core17.locationUtils.reload()}return(0,import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment,{children:[(0,import_jsx_runtime9.jsxs)(import_core16.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_core16.Text,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),logins.map(login=>login.profile.reference!==(0,import_core17.getReferenceString)(context.profile)&&(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>import_core17.locationUtils.reload()).catch(console.log)},children:(0,import_jsx_runtime9.jsxs)(import_core16.Group,{children:[(0,import_jsx_runtime9.jsx)(import_core16.Avatar,{radius:"xl"}),(0,import_jsx_runtime9.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime9.jsx)(import_core16.Text,{size:"sm",fw:500,children:login.profile.display}),(0,import_jsx_runtime9.jsx)(import_core16.Text,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Switch to another project"}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsxs)(import_core16.Group,{justify:"center",children:[(0,import_jsx_runtime9.jsx)(import_core16.SegmentedControl,{size:"xs",value:colorScheme,onChange:newValue=>setColorScheme(newValue),data:[{label:"Light",value:"light"},{label:"Dark",value:"dark"},{label:"Auto",value:"auto"}]}),showLayoutToggle&&(0,import_jsx_runtime9.jsx)(import_core16.SegmentedControl,{size:"xs",value:layoutVersion,onChange:newValue=>setAppShellVersion(newValue),data:[{label:"v1",value:"v1"},{label:"v2",value:"v2"}]})]}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${(0,import_core17.getReferenceString)(profile)}`),children:"Account settings"}),(0,import_jsx_runtime9.jsx)(import_core16.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.jsxs)(import_core16.Text,{size:"xs",c:"dimmed",my:"sm",ta:"center",children:[getAppName()," ",props.version]})]})}var import_core20=require("@mantine/core"),import_core21=require("@medplum/core"),import_react_hooks5=require("@medplum/react-hooks");var import_react8=require("react");var import_core18=require("@mantine/core"),import_notifications=require("@mantine/notifications"),import_core19=require("@medplum/core");var import_react7=require("react");var AsyncAutocompleteTestIds={selectedItems:"selected-items",options:"options"};var import_jsx_runtime10=require("react/jsx-runtime");function AsyncAutocomplete(props){let combobox=(0,import_core18.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_react7.useState)(""),[timer,setTimer]=(0,import_react7.useState)(),[abortController,setAbortController]=(0,import_react7.useState)(),[autoSubmit,setAutoSubmit]=(0,import_react7.useState)(),[selected,setSelected]=(0,import_react7.useState)(defaultItems.map(toOption4)),[options,setOptions]=(0,import_react7.useState)([]),ItemComponent3=itemComponent??DefaultItemComponent,PillComponent=pillComponent??DefaultPillComponent,EmptyComponent=emptyComponent??DefaultEmptyComponent,searchRef=(0,import_react7.useRef)(search),lastLoadOptionsRef=(0,import_react7.useRef)(void 0),lastValueRef=(0,import_react7.useRef)(void 0),timerRef=(0,import_react7.useRef)(timer),abortControllerRef=(0,import_react7.useRef)(abortController),autoSubmitRef=(0,import_react7.useRef)(autoSubmit);(0,import_react7.useLayoutEffect)(()=>{searchRef.current=search,timerRef.current=timer,abortControllerRef.current=abortController,autoSubmitRef.current=autoSubmit});let handleTimer=(0,import_react7.useCallback)(()=>{if(setTimer(void 0),searchRef.current===lastValueRef.current&&loadOptions===lastLoadOptionsRef.current||(searchRef.current?.length??0)<minInputLength)return;lastValueRef.current=searchRef.current,lastLoadOptionsRef.current=loadOptions;let newAbortController=new AbortController;setAbortController(newAbortController),loadOptions(searchRef.current??"",newAbortController.signal).then(newValues=>{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_core19.normalizeErrorString)(err)})}).finally(()=>{newAbortController.signal.aborted||setAbortController(void 0)})},[combobox,loadOptions,onChange,toOption4,minInputLength]),handleSearchChange=(0,import_react7.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_react7.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_react7.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_react7.useCallback)(item=>{let newSelected=selected.filter(v=>v.value!==item.value);onChange(newSelected.map(v=>v.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=(0,import_react7.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_react7.useEffect)(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=!disabled&&clearable&&selected.length>0&&(0,import_jsx_runtime10.jsx)(import_core18.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_core18.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[(0,import_jsx_runtime10.jsx)(import_core18.Combobox.DropdownTarget,{children:(0,import_jsx_runtime10.jsx)(import_core18.PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?(0,import_jsx_runtime10.jsx)(import_core18.Loader,{size:16}):clearButton,required,disabled,children:(0,import_jsx_runtime10.jsxs)(import_core18.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<maxValues)&&(0,import_jsx_runtime10.jsx)(import_core18.Combobox.EventsTarget,{children:(0,import_jsx_runtime10.jsx)(import_core18.PillsInput.Field,{role:"searchbox",name,value:search,placeholder,onFocus:handleSearchChange,onBlur:()=>{combobox.closeDropdown(),setSearch("")},onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),(0,import_jsx_runtime10.jsx)(import_core18.Combobox.Dropdown,{hidden:!comboboxVisible,"data-testid":AsyncAutocompleteTestIds.options,children:(0,import_jsx_runtime10.jsx)(import_core18.Combobox.Options,{children:(0,import_jsx_runtime10.jsxs)(import_core18.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_core18.Combobox.Option,{value:item.value,active,children:(0,import_jsx_runtime10.jsx)(ItemComponent3,{...item,active})},item.value)}),createVisible&&(0,import_jsx_runtime10.jsxs)(import_core18.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_core18.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_core18.Pill,{withRemoveButton:!disabled,onRemove,children:item.label})}function DefaultEmptyComponent(){return(0,import_jsx_runtime10.jsx)(import_core18.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_core21.getDisplayString)(resource),resource}}function HeaderSearchInput(props){let navigate=(0,import_react_hooks5.useMedplumNavigate)(),medplum=(0,import_react_hooks5.useMedplum)(),loadData=(0,import_react8.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_react8.useCallback)(item=>{item.length>0&&navigate(`/${(0,import_core21.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_react8.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_core20.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_core20.Text,{children:(0,import_core21.getDisplayString)(resource)}),(0,import_jsx_runtime11.jsx)(import_core20.Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return(0,import_core21.isUUID)(input)?`{
1
+ "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 __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;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 __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var require_pointer=__commonJS({"../../node_modules/rfc6902/pointer.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;exports.unescapeToken=unescapeToken;exports.escapeToken=escapeToken;function unescapeToken(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function escapeToken(token){return token.replace(/~/g,"~0").replace(/\//g,"~1")}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;i<l;i++)parent=value,key=this.tokens[i],!(key=="__proto__"||key=="constructor"||key=="prototype")&&(value=(parent||{})[key]);return{parent,key,value}},Pointer2.prototype.get=function(object){return this.evaluate(object).value},Pointer2.prototype.set=function(object,value){var endpoint=this.evaluate(object);endpoint.parent&&(endpoint.parent[endpoint.key]=value)},Pointer2.prototype.push=function(token){this.tokens.push(token)},Pointer2.prototype.add=function(token){var tokens=this.tokens.concat(String(token));return new Pointer2(tokens)},Pointer2.prototype.parent=function(){var tokens=this.tokens.length>1?this.tokens.slice(0,-1):[""];return new Pointer2(tokens)},Pointer2})();exports.Pointer=Pointer}});var require_util=__commonJS({"../../node_modules/rfc6902/util.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.hasOwnProperty=void 0;exports.objectType=objectType;exports.clone=clone;exports.hasOwnProperty=Object.prototype.hasOwnProperty;function objectType(object){return object===void 0?"undefined":object===null?"null":Array.isArray(object)?"array":typeof object}function isNonPrimitive(value){return value!=null&&typeof value=="object"}function clone(source){if(!isNonPrimitive(source))return source;if(source.constructor==Array){for(var length=source.length,arrayTarget=new Array(length),i=0;i<length;i++)arrayTarget[i]=clone(source[i]);return arrayTarget}if(source.constructor==Date){var dateTarget=new Date(+source);return dateTarget}var objectTarget={};for(var key in source)exports.hasOwnProperty.call(source,key)&&(objectTarget[key]=clone(source[key]));return objectTarget}}});var require_diff=__commonJS({"../../node_modules/rfc6902/diff.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.isDestructive=isDestructive;exports.subtract=subtract;exports.intersection=intersection;exports.diffArrays=diffArrays;exports.diffObjects=diffObjects;exports.diffAny=diffAny;var util_1=require_util();function isDestructive(_a){var op=_a.op;return op==="remove"||op==="replace"||op==="copy"||op==="move"}function subtract(minuend,subtrahend){var keys=[];for(var key in minuend)util_1.hasOwnProperty.call(minuend,key)&&minuend[key]!==void 0&&!(util_1.hasOwnProperty.call(subtrahend,key)&&subtrahend[key]!==void 0)&&keys.push(key);return keys}function intersection(objects){for(var length=objects.length,counter={},i=0;i<length;i++){var object=objects[i];for(var key in object)util_1.hasOwnProperty.call(object,key)&&object[key]!==void 0&&(counter[key]=(counter[key]||0)+1)}for(var key in counter)counter[key]<length&&delete counter[key];return Object.keys(counter)}function intersection2(a,b){var keys=[];for(var key in a)util_1.hasOwnProperty.call(a,key)&&a[key]!==void 0&&util_1.hasOwnProperty.call(b,key)&&b[key]!==void 0&&keys.push(key);return keys}function isArrayAdd(array_operation){return array_operation.op==="add"}function isArrayRemove(array_operation){return array_operation.op==="remove"}function appendArrayOperation(base,operation){return{operations:base.operations.concat(operation),cost:base.cost+1}}function diffArrays(input,output,ptr,diff2){diff2===void 0&&(diff2=diffAny);var max_length=Math.max(input.length,output.length),memo2=new Map([[0,{operations:[],cost:0}]]);function dist(i,j){var memo_key=i*max_length+j,memoized=memo2.get(memo_key);if(memoized===void 0){if(i>0&&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.set(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<input_length+padding?String(padded_index):"-",operation={op:array_operation.op,path:ptr.add(index_token).toString(),value:array_operation.value};return[operations.concat(operation),padding+1]}else if(isArrayRemove(array_operation)){var operation={op:array_operation.op,path:ptr.add(String(array_operation.index+padding)).toString()};return[operations.concat(operation),padding-1]}else{var replace_ptr=ptr.add(String(array_operation.index+padding)),replace_operations=diff2(array_operation.original,array_operation.value,replace_ptr);return[operations.concat.apply(operations,replace_operations),padding]}},[[],0])[0];return padded_operations}function diffObjects(input,output,ptr,diff2){diff2===void 0&&(diff2=diffAny);var operations=[];return subtract(input,output).forEach(function(key){operations.push({op:"remove",path:ptr.add(key).toString()})}),subtract(output,input).forEach(function(key){operations.push({op:"add",path:ptr.add(key).toString(),value:output[key]})}),intersection2(input,output).forEach(function(key){operations.push.apply(operations,diff2(input[key],output[key],ptr.add(key)))}),operations}function diffAny(input,output,ptr,diff2){if(diff2===void 0&&(diff2=diffAny),input===output)return[];var input_type=(0,util_1.objectType)(input),output_type=(0,util_1.objectType)(output);return input_type=="array"&&output_type=="array"?diffArrays(input,output,ptr,diff2):input_type=="object"&&output_type=="object"?diffObjects(input,output,ptr,diff2):[{op:"replace",path:ptr.toString(),value:output}]}}});var require_patch=__commonJS({"../../node_modules/rfc6902/patch.js"(exports){"use strict";var __extends=exports&&exports.__extends||(function(){var extendStatics=function(d,b){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d2,b2){d2.__proto__=b2}||function(d2,b2){for(var p in b2)Object.prototype.hasOwnProperty.call(b2,p)&&(d2[p]=b2[p])},extendStatics(d,b)};return function(d,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");extendStatics(d,b);function __(){this.constructor=d}d.prototype=b===null?Object.create(b):(__.prototype=b.prototype,new __)}})();Object.defineProperty(exports,"__esModule",{value:!0});exports.InvalidOperationError=exports.TestError=exports.MissingError=void 0;exports.add=add;exports.remove=remove;exports.replace=replace;exports.move=move;exports.copy=copy;exports.test=test;exports.apply=apply;var pointer_1=require_pointer(),util_1=require_util(),diff_1=require_diff(),MissingError=(function(_super){__extends(MissingError2,_super);function MissingError2(path){var _this=_super.call(this,"Value required at path: ".concat(path))||this;return _this.path=path,_this.name="MissingError",_this}return MissingError2})(Error);exports.MissingError=MissingError;var TestError=(function(_super){__extends(TestError2,_super);function TestError2(actual,expected){var _this=_super.call(this,"Test failed: ".concat(actual," != ").concat(expected))||this;return _this.actual=actual,_this.expected=expected,_this.name="TestError",_this}return TestError2})(Error);exports.TestError=TestError;function _add(object,key,value){if(Array.isArray(object))if(key=="-")object.push(value);else{var index=parseInt(key,10);object.splice(index,0,value)}else object[key]=value}function _remove(object,key){if(Array.isArray(object)){var index=parseInt(key,10);object.splice(index,1)}else delete object[key]}function add(object,operation,options){var pointer=pointer_1.Pointer.fromJSON(operation.path);if(options?.implicitArrayCreation&&pointer.tokens[pointer.tokens.length-1]==="-"){var parentEndpoint=pointer.parent().evaluate(object);parentEndpoint.value===void 0&&(0,util_1.objectType)(parentEndpoint.parent)==="object"&&(parentEndpoint.parent[parentEndpoint.key]=[])}var endpoint=pointer.evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):options?.implicitArrayCreation&&endpoint.key==="-"&&!Array.isArray(endpoint.parent)?new MissingError(operation.path):(_add(endpoint.parent,endpoint.key,(0,util_1.clone)(operation.value)),null)}function remove(object,operation,options){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.value===void 0?new MissingError(operation.path):(_remove(endpoint.parent,endpoint.key),null)}function replace(object,operation,options){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);if(endpoint.parent===null)return new MissingError(operation.path);if(Array.isArray(endpoint.parent)){if(parseInt(endpoint.key,10)>=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}function move(object,operation,options){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)}function copy(object,operation,options){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)}function test(object,operation,options){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}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,options){switch(operation.op){case"add":return add(object,operation,options);case"remove":return remove(object,operation,options);case"replace":return replace(object,operation,options);case"move":return move(object,operation,options);case"copy":return copy(object,operation,options);case"test":return test(object,operation,options)}return new InvalidOperationError(operation)}}});var require_rfc6902=__commonJS({"../../node_modules/rfc6902/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;exports.applyPatch=applyPatch;exports.createPatch=createPatch2;exports.createTests=createTests;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,options){return patch.map(function(operation){return(0,patch_1.apply)(object,operation,options)})}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)}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}}});var index_exports={};__export(index_exports,{AddressDisplay:()=>AddressDisplay,AddressInput:()=>AddressInput,AllergiesSection:()=>AllergiesSection,AnnotationInput:()=>AnnotationInput,AppShell:()=>AppShell,AsyncAutocomplete:()=>AsyncAutocomplete,AttachmentArrayDisplay:()=>AttachmentArrayDisplay,AttachmentArrayInput:()=>AttachmentArrayInput,AttachmentButton:()=>AttachmentButton,AttachmentDisplay:()=>AttachmentDisplay,AttachmentInput:()=>AttachmentInput,BackboneElementDisplay:()=>BackboneElementDisplay,BackboneElementInput:()=>BackboneElementInput,BaseChat:()=>BaseChat,BaseScheduler:()=>BaseScheduler,CalendarDateInput:()=>CalendarDateInput,CalendarInput:()=>CalendarInput,ChangePasswordForm:()=>ChangePasswordForm,ChatList:()=>ChatList,ChatListItem:()=>ChatListItem,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,DefaultResourceItemComponent:()=>DefaultResourceItemComponent,DefaultResourceTimeline:()=>DefaultResourceTimeline,DemographicsSection:()=>DemographicsSection,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,InfoBar:()=>InfoBar,InsuranceSection:()=>InsuranceSection,LabsSection:()=>LabsSection,LinkTabs:()=>LinkTabs,Loading:()=>Loading,Logo:()=>Logo,MeasureReportDisplay:()=>MeasureReportDisplay,MedicationsSection:()=>MedicationsSection,MedplumLink:()=>MedplumLink,MemoizedFhirPathTable:()=>MemoizedFhirPathTable,MfaForm:()=>MfaForm,MoneyDisplay:()=>MoneyDisplay,MoneyInput:()=>MoneyInput,MultiResourceInput:()=>MultiResourceInput,Navbar:()=>Navbar,NewTopicDialog:()=>NewTopicDialog,NoteDisplay:()=>NoteDisplay,NotificationIcon:()=>NotificationIcon,ObservationTable:()=>ObservationTable,OperationOutcomeAlert:()=>OperationOutcomeAlert,PATIENT_PREFERRED_PHARMACY_URL:()=>import_core164.PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>import_core164.PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED:()=>import_core164.PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY:()=>import_core164.PHARMACY_TYPE_PRIMARY,Panel:()=>Panel,ParticipantFilter:()=>ParticipantFilter,PatientAccountsForm:()=>PatientAccountsForm,PatientExportForm:()=>PatientExportForm,PatientHeader:()=>PatientHeader,PatientSummary:()=>PatientSummary,PatientTimeline:()=>PatientTimeline,Pharmacies:()=>Pharmacies,PharmaciesSection:()=>PharmaciesSection,PharmacyDialog:()=>PharmacyDialog,PlanDefinitionBuilder:()=>PlanDefinitionBuilder,ProblemListSection:()=>ProblemListSection,QuantityDisplay:()=>QuantityDisplay,QuantityInput:()=>QuantityInput,QuestionnaireBuilder:()=>QuestionnaireBuilder,QuestionnaireForm:()=>QuestionnaireForm,QuestionnaireResponseDisplay:()=>QuestionnaireResponseDisplay,RangeDisplay:()=>RangeDisplay,RangeInput:()=>RangeInput,RatioInput:()=>RatioInput,ReferenceDisplay:()=>ReferenceDisplay,ReferenceInput:()=>ReferenceInput,ReferenceRangeEditor:()=>ReferenceRangeEditor,ReferenceRangeGroupEditor:()=>ReferenceRangeGroupEditor,RegisterForm:()=>RegisterForm,RequestGroupDisplay:()=>RequestGroupDisplay,ResetPasswordForm:()=>ResetPasswordForm,ResourceArrayDisplay:()=>ResourceArrayDisplay,ResourceArrayInput:()=>ResourceArrayInput,ResourceAvatar:()=>ResourceAvatar,ResourceBadge:()=>ResourceBadge,ResourceBlame:()=>ResourceBlame,ResourceDiff:()=>ResourceDiff,ResourceDiffTable:()=>ResourceDiffTable,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,SetPasswordForm:()=>SetPasswordForm,SexualOrientationSection:()=>SexualOrientationSection,SignInForm:()=>SignInForm,SignatureInput:()=>SignatureInput,SmartAppLaunchLink:()=>SmartAppLaunchLink,SmokingStatusSection:()=>SmokingStatusSection,Spotlight:()=>Spotlight,StatusBadge:()=>StatusBadge,SubmitButton:()=>SubmitButton,ThreadChat:()=>ThreadChat,ThreadInbox:()=>ThreadInbox,Timeline:()=>Timeline,TimelineItem:()=>TimelineItem,TimingInput:()=>TimingInput,ValueSetAutocomplete:()=>ValueSetAutocomplete,VitalsSection:()=>VitalsSection,addDateFilterBetween:()=>addDateFilterBetween,addField:()=>addField,addFilter:()=>addFilter,addLastMonthFilter:()=>addLastMonthFilter,addMissingFilter:()=>addMissingFilter,addNext24HoursFilter:()=>addNext24HoursFilter,addNextMonthFilter:()=>addNextMonthFilter,addPreferredPharmacyToPatient:()=>import_core164.addPreferredPharmacyToPatient,addThisMonthFilter:()=>addThisMonthFilter,addTodayFilter:()=>addTodayFilter,addTomorrowFilter:()=>addTomorrowFilter,addYearToDateFilter:()=>addYearToDateFilter,addYesterdayFilter:()=>addYesterdayFilter,buildFieldNameString:()=>buildFieldNameString,clearFilters:()=>clearFilters,clearFiltersOnField:()=>clearFiltersOnField,codingToValueSetElement:()=>codingToValueSetElement,convertIsoToLocal:()=>convertIsoToLocal,convertLocalToIso:()=>convertLocalToIso,createLabsSection:()=>createLabsSection,createPharmaciesSection:()=>createPharmaciesSection,createPreferredPharmacyExtension:()=>import_core164.createPreferredPharmacyExtension,createScriptTag:()=>createScriptTag,deleteFilter:()=>deleteFilter,exportJsonFile:()=>exportJsonFile,getAppName:()=>getAppName,getDefaultSections:()=>getDefaultSections,getErrorsForInput:()=>getErrorsForInput,getFieldDefinitions:()=>getFieldDefinitions,getIssuesForExpression:()=>getIssuesForExpression,getOpString:()=>getOpString,getPaginationControlProps:()=>getPaginationControlProps,getPreferredPharmaciesFromPatient:()=>import_core164.getPreferredPharmaciesFromPatient,getRecaptcha:()=>getRecaptcha,getSearchOperators:()=>getSearchOperators,getSortField:()=>getSortField,getValuePath:()=>getValuePath,initRecaptcha:()=>initRecaptcha,isAddPharmacyResponse:()=>import_core164.isAddPharmacyResponse,isAuxClick:()=>isAuxClick,isCheckboxCell:()=>isCheckboxCell,isOrganizationArray:()=>import_core164.isOrganizationArray,isSortDescending:()=>isSortDescending,isSupportedProfileStructureDefinition:()=>isSupportedProfileStructureDefinition,killEvent:()=>killEvent,parseForm:()=>parseForm,removePreferredPharmacyFromPatient:()=>import_core164.removePreferredPharmacyFromPatient,renderValue:()=>renderValue,sendCommand:()=>sendCommand,setFilters:()=>setFilters,setOffset:()=>setOffset,setPage:()=>setPage,setPropertyValue:()=>setPropertyValue,setSort:()=>setSort,sortByDateAndPriority:()=>sortByDateAndPriority,summaryResourceListSection:()=>summaryResourceListSection,toggleSort:()=>toggleSort,valueSetElementToCoding:()=>valueSetElementToCoding});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,props.options)}):null}var import_core3=require("@mantine/core"),import_core4=require("@medplum/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:(0,import_core4.trimTrailingEmptyElements)(line)}}function AddressInput(props){let[value,setValue]=(0,import_react2.useState)(props.defaultValue||{}),{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(prevValue=>({...prevValue,...newValue})),props.onChange&&props.onChange({...value,...newValue})}function setUse(use){setValueWrapper({use})}function setType(type){setValueWrapper({type})}function setLine1(line1){setValueWrapper(setLine(value,0,line1))}function setLine2(line2){setValueWrapper(setLine(value,1,line2))}function setCity(city){setValueWrapper({city})}function setState(state){setValueWrapper({state})}function setPostalCode(postalCode){setValueWrapper({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_core5=require("@mantine/core"),import_core6=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_core6.createReference)(author),time:new Date().toISOString()}:{};setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime3.jsx)(import_core5.TextInput,{disabled:props.disabled,name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}var import_core32=require("@mantine/core"),import_react_hooks11=require("@medplum/react-hooks"),import_react18=require("react");var import_core7=require("@mantine/core"),import_core8=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 __iconNode=[["path",{d:"M12 6a2 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:"M6 12a2 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:"M15 18a2 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"}]],IconAdjustmentsHorizontal=createReactComponent("outline","adjustments-horizontal","AdjustmentsHorizontal",__iconNode);var __iconNode2=[["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"}]],IconAlertCircle=createReactComponent("outline","alert-circle","AlertCircle",__iconNode2);var __iconNode3=[["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"}]],IconArrowDown=createReactComponent("outline","arrow-down","ArrowDown",__iconNode3);var __iconNode4=[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]],IconArrowRight=createReactComponent("outline","arrow-right","ArrowRight",__iconNode4);var __iconNode5=[["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"}]],IconArrowUp=createReactComponent("outline","arrow-up","ArrowUp",__iconNode5);var __iconNode6=[["path",{d:"M6 20a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-0"}],["path",{d:"M16 4a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-1"}],["path",{d:"M16 20a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-2"}],["path",{d:"M11 12a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-3"}],["path",{d:"M21 12a2 2 0 1 0 -4 0a2 2 0 0 0 4 0",key:"svg-4"}],["path",{d:"M5.058 18.306l2.88 -4.606",key:"svg-5"}],["path",{d:"M10.061 10.303l2.877 -4.604",key:"svg-6"}],["path",{d:"M10.065 13.705l2.876 4.6",key:"svg-7"}],["path",{d:"M15.063 5.7l2.881 4.61",key:"svg-8"}]],IconBinaryTree=createReactComponent("outline","binary-tree","BinaryTree",__iconNode6);var __iconNode7=[["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"}]],IconBleachOff=createReactComponent("outline","bleach-off","BleachOff",__iconNode7);var __iconNode8=[["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"}]],IconBleach=createReactComponent("outline","bleach","Bleach",__iconNode8);var __iconNode9=[["path",{d:"M18 7v14l-6 -4l-6 4v-14a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4",key:"svg-0"}]],IconBookmark=createReactComponent("outline","bookmark","Bookmark",__iconNode9);var __iconNode10=[["path",{d:"M7 5a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2l0 -10",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"}]],IconBoxMultiple=createReactComponent("outline","box-multiple","BoxMultiple",__iconNode10);var __iconNode11=[["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"}]],IconBracketsContain=createReactComponent("outline","brackets-contain","BracketsContain",__iconNode11);var __iconNode12=[["path",{d:"M3 9a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2l0 -9",key:"svg-0"}],["path",{d:"M8 7v-2a2 2 0 0 1 2 -2h4a2 2 0 0 1 2 2v2",key:"svg-1"}],["path",{d:"M12 12l0 .01",key:"svg-2"}],["path",{d:"M3 13a20 20 0 0 0 18 0",key:"svg-3"}]],IconBriefcase=createReactComponent("outline","briefcase","Briefcase",__iconNode12);var __iconNode13=[["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"}]],IconBucketOff=createReactComponent("outline","bucket-off","BucketOff",__iconNode13);var __iconNode14=[["path",{d:"M4 7a8 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"}]],IconBucket=createReactComponent("outline","bucket","Bucket",__iconNode14);var __iconNode15=[["path",{d:"M3 20h18v-8a3 3 0 0 0 -3 -3h-12a3 3 0 0 0 -3 3v8",key:"svg-0"}],["path",{d:"M3 14.803c.312 .135 .654 .204 1 .197a2.4 2.4 0 0 0 2 -1a2.4 2.4 0 0 1 2 -1a2.4 2.4 0 0 1 2 1a2.4 2.4 0 0 0 2 1a2.4 2.4 0 0 0 2 -1a2.4 2.4 0 0 1 2 -1a2.4 2.4 0 0 1 2 1a2.4 2.4 0 0 0 2 1c.35 .007 .692 -.062 1 -.197",key:"svg-1"}],["path",{d:"M12 4l1.465 1.638a2 2 0 1 1 -3.015 .099l1.55 -1.737",key:"svg-2"}]],IconCake=createReactComponent("outline","cake","Cake",__iconNode15);var __iconNode16=[["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-12",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"}]],IconCalendar=createReactComponent("outline","calendar","Calendar",__iconNode16);var __iconNode17=[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]],IconCheck=createReactComponent("outline","check","Check",__iconNode17);var __iconNode18=[["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"}]],IconCheckbox=createReactComponent("outline","checkbox","Checkbox",__iconNode18);var __iconNode19=[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]],IconChevronDown=createReactComponent("outline","chevron-down","ChevronDown",__iconNode19);var __iconNode20=[["path",{d:"M9 6l6 6l-6 6",key:"svg-0"}]],IconChevronRight=createReactComponent("outline","chevron-right","ChevronRight",__iconNode20);var __iconNode21=[["path",{d:"M6 15l6 -6l6 6",key:"svg-0"}]],IconChevronUp=createReactComponent("outline","chevron-up","ChevronUp",__iconNode21);var __iconNode22=[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l6 0",key:"svg-1"}]],IconCircleMinus=createReactComponent("outline","circle-minus","CircleMinus",__iconNode22);var __iconNode23=[["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"}]],IconCirclePlus=createReactComponent("outline","circle-plus","CirclePlus",__iconNode23);var __iconNode24=[["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"}]],IconCloudUpload=createReactComponent("outline","cloud-upload","CloudUpload",__iconNode24);var __iconNode25=[["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"}]],IconColumns=createReactComponent("outline","columns","Columns",__iconNode25);var __iconNode26=[["path",{d:"M7 9.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.667l0 -8.666",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"}]],IconCopy=createReactComponent("outline","copy","Copy",__iconNode26);var __iconNode27=[["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"}]],IconCurrencyDollar=createReactComponent("outline","currency-dollar","CurrencyDollar",__iconNode27);var __iconNode28=[["path",{d:"M4 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M11 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M18 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]],IconDots=createReactComponent("outline","dots","Dots",__iconNode28);var __iconNode29=[["path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M7 11l5 5l5 -5",key:"svg-1"}],["path",{d:"M12 4l0 12",key:"svg-2"}]],IconDownload=createReactComponent("outline","download","Download",__iconNode29);var __iconNode30=[["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.415",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]],IconEdit=createReactComponent("outline","edit","Edit",__iconNode30);var __iconNode31=[["path",{d:"M9.5 5.5a2.5 2.5 0 1 0 5 0a2.5 2.5 0 1 0 -5 0",key:"svg-0"}],["path",{d:"M12 21.368l5.095 -5.096a3.088 3.088 0 1 0 -4.367 -4.367l-.728 .727l-.728 -.727a3.088 3.088 0 1 0 -4.367 4.367l5.095 5.096",key:"svg-1"}]],IconEmpathize=createReactComponent("outline","empathize","Empathize",__iconNode31);var __iconNode32=[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}],["path",{d:"M5 19l14 -14",key:"svg-2"}]],IconEqualNot=createReactComponent("outline","equal-not","EqualNot",__iconNode32);var __iconNode33=[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]],IconEqual=createReactComponent("outline","equal","Equal",__iconNode33);var __iconNode34=[["path",{d:"M10.585 10.587a2 2 0 0 0 2.829 2.828",key:"svg-0"}],["path",{d:"M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]],IconEyeOff=createReactComponent("outline","eye-off","EyeOff",__iconNode34);var __iconNode35=[["path",{d:"M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-0"}],["path",{d:"M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6",key:"svg-1"}]],IconEye=createReactComponent("outline","eye","Eye",__iconNode35);var __iconNode36=[["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 2",key:"svg-1"}],["path",{d:"M12 17l.01 0",key:"svg-2"}],["path",{d:"M12 11l0 3",key:"svg-3"}]],IconFileAlert=createReactComponent("outline","file-alert","FileAlert",__iconNode36);var __iconNode37=[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M11.5 21h-4.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v5m-5 6h7m-3 -3l3 3l-3 3",key:"svg-1"}]],IconFileExport=createReactComponent("outline","file-export","FileExport",__iconNode37);var __iconNode38=[["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 2",key:"svg-1"}],["path",{d:"M12 11l0 6",key:"svg-2"}],["path",{d:"M9 14l6 0",key:"svg-3"}]],IconFilePlus=createReactComponent("outline","file-plus","FilePlus",__iconNode38);var __iconNode39=[["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 2",key:"svg-1"}],["path",{d:"M9 9l1 0",key:"svg-2"}],["path",{d:"M9 13l6 0",key:"svg-3"}],["path",{d:"M9 17l6 0",key:"svg-4"}]],IconFileText=createReactComponent("outline","file-text","FileText",__iconNode39);var __iconNode40=[["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.227",key:"svg-0"}]],IconFilter=createReactComponent("outline","filter","Filter",__iconNode40);var __iconNode41=[["path",{d:"M9 6.371c0 4.418 -2.239 6.629 -5 6.629",key:"svg-0"}],["path",{d:"M4 6.371h7",key:"svg-1"}],["path",{d:"M5 9c0 2.144 2.252 3.908 6 4",key:"svg-2"}],["path",{d:"M12 20l4 -9l4 9",key:"svg-3"}],["path",{d:"M19.1 18h-6.2",key:"svg-4"}],["path",{d:"M6.694 3l.793 .582",key:"svg-5"}]],IconLanguage=createReactComponent("outline","language","Language",__iconNode41);var __iconNode42=[["path",{d:"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12",key:"svg-0"}],["path",{d:"M9 4l0 16",key:"svg-1"}]],IconLayoutSidebar=createReactComponent("outline","layout-sidebar","LayoutSidebar",__iconNode42);var __iconNode43=[["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"}]],IconLogout=createReactComponent("outline","logout","Logout",__iconNode43);var __iconNode44=[["path",{d:"M9 11a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0",key:"svg-1"}]],IconMapPin=createReactComponent("outline","map-pin","MapPin",__iconNode44);var __iconNode45=[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]],IconMathGreater=createReactComponent("outline","math-greater","MathGreater",__iconNode45);var __iconNode46=[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]],IconMathLower=createReactComponent("outline","math-lower","MathLower",__iconNode46);var __iconNode47=[["path",{d:"M3 20l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c3.255 2.777 3.695 7.266 1.029 10.501c-2.666 3.235 -7.615 4.215 -11.574 2.293l-4.7 1",key:"svg-0"}]],IconMessageCircle=createReactComponent("outline","message-circle","MessageCircle",__iconNode47);var __iconNode48=[["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 -3h12",key:"svg-2"}]],IconMessage=createReactComponent("outline","message","Message",__iconNode48);var __iconNode49=[["path",{d:"M5 12l14 0",key:"svg-0"}]],IconMinus=createReactComponent("outline","minus","Minus",__iconNode49);var __iconNode50=[["path",{d:"M15 7l-6.5 6.5a1.5 1.5 0 0 0 3 3l6.5 -6.5a3 3 0 0 0 -6 -6l-6.5 6.5a4.5 4.5 0 0 0 9 9l6.5 -6.5",key:"svg-0"}]],IconPaperclip=createReactComponent("outline","paperclip","Paperclip",__iconNode50);var __iconNode51=[["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"}]],IconPencil=createReactComponent("outline","pencil","Pencil",__iconNode51);var __iconNode52=[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]],IconPlus=createReactComponent("outline","plus","Plus",__iconNode52);var __iconNode53=[["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"}]],IconRefresh=createReactComponent("outline","refresh","Refresh",__iconNode53);var __iconNode54=[["path",{d:"M3 10a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]],IconSearch=createReactComponent("outline","search","Search",__iconNode54);var __iconNode55=[["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.065",key:"svg-0"}],["path",{d:"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-1"}]],IconSettings=createReactComponent("outline","settings","Settings",__iconNode55);var __iconNode56=[["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"}]],IconSortAscending=createReactComponent("outline","sort-ascending","SortAscending",__iconNode56);var __iconNode57=[["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"}]],IconSortDescending=createReactComponent("outline","sort-descending","SortDescending",__iconNode57);var __iconNode58=[["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-14",key:"svg-0"}]],IconSquare=createReactComponent("outline","square","Square",__iconNode58);var __iconNode59=[["path",{d:"M6 4h-1a2 2 0 0 0 -2 2v3.5a5.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:"M18 10a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-4"}]],IconStethoscope=createReactComponent("outline","stethoscope","Stethoscope",__iconNode59);var __iconNode60=[["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"}]],IconSwitchHorizontal=createReactComponent("outline","switch-horizontal","SwitchHorizontal",__iconNode60);var __iconNode61=[["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"}]],IconTableExport=createReactComponent("outline","table-export","TableExport",__iconNode61);var __iconNode62=[["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"}]],IconTrash=createReactComponent("outline","trash","Trash",__iconNode62);var __iconNode63=[["path",{d:"M5 7a4 4 0 1 0 8 0a4 4 0 1 0 -8 0",key:"svg-0"}],["path",{d:"M3 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2",key:"svg-1"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"svg-2"}],["path",{d:"M21 21v-2a4 4 0 0 0 -3 -3.85",key:"svg-3"}]],IconUsers=createReactComponent("outline","users","Users",__iconNode63);var __iconNode64=[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]],IconX=createReactComponent("outline","x","X",__iconNode64);var import_react5=require("react");var import_jsx_runtime4=require("react/jsx-runtime"),ErrorBoundary=class extends import_react5.Component{constructor(props){super(props);__publicField(this,"state");this.state={lastLocation:import_core8.locationUtils.getLocation()}}static getDerivedStateFromError(error){return{error,lastLocation:import_core8.locationUtils.getLocation()}}componentDidUpdate(_prevProps,_prevState){import_core8.locationUtils.getLocation()!==this.state.lastLocation&&this.setState({lastLocation:import_core8.locationUtils.getLocation(),error:void 0})}shouldComponentUpdate(nextProps,nextState){return!!(this.props.children!==nextProps.children||nextState.error&&!this.state.error||this.state.lastLocation!==import_core8.locationUtils.getLocation())}componentDidCatch(error,errorInfo){console.error("Uncaught error:",error,errorInfo)}render(){return this.state.error?(0,import_jsx_runtime4.jsx)(import_core7.Alert,{icon:(0,import_jsx_runtime4.jsx)(IconAlertCircle,{size:16}),title:"Something went wrong",color:"red",children:(0,import_core8.normalizeErrorString)(this.state.error)}):this.props.children}};var import_core9=require("@mantine/core"),import_jsx_runtime5=require("react/jsx-runtime");function Loading(){return(0,import_jsx_runtime5.jsx)(import_core9.Center,{style:{width:"100%",height:"100vh"},children:(0,import_jsx_runtime5.jsx)(import_core9.Loader,{})})}var AppShell_default={main:"AppShell_main"};var import_core22=require("@mantine/core"),import_core23=require("@medplum/core"),import_react_hooks6=require("@medplum/react-hooks");var import_react9=require("react");var import_core13=require("@mantine/core"),import_core14=require("@medplum/core"),import_react_hooks3=require("@medplum/react-hooks");var import_core11=require("@mantine/core"),import_core12=require("@medplum/core"),import_react_hooks2=require("@medplum/react-hooks");var import_core10=require("@medplum/core");function killEvent(e){e.preventDefault(),e.stopPropagation()}function isAuxClick(e){return e.button===1||e.ctrlKey||e.metaKey}function isCheckboxCell(el){if(isCheckboxElement(el))return!0;if(el instanceof HTMLTableCellElement){let children=el.children;if(children.length===1&&isCheckboxElement(children[0]))return!0}return!1}function isCheckboxElement(el){return el instanceof HTMLInputElement&&el.type==="checkbox"}async function sendCommand(frame,command){return new Promise((resolve,reject)=>{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])})}function exportJsonFile(jsonString,fileName){let blobForExport=new Blob([jsonString],{type:import_core10.ContentType.JSON}),url=URL.createObjectURL(blobForExport),link=document.createElement("a");link.href=url;let linkName=fileName??new Date().toISOString().replaceAll(/\D/g,"");link.download=`${linkName}.json`,document.body.appendChild(link),link.click(),URL.revokeObjectURL(url)}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_core11.Anchor,{href,"aria-label":label,onAuxClick:e=>{e.stopPropagation()},onClick:e=>{e.stopPropagation(),onClick?(e.preventDefault(),onClick(e)):to&&(isAuxClick(e)||(e.preventDefault(),navigate(href)))},...rest,children})}function getHref(to){if(to){if(typeof to=="string")return getStringHref(to);if((0,import_core12.isResource)(to))return getResourceHref(to);if((0,import_core12.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.at(-1)?.at(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_core14.getDisplayString)(resource):props.alt??"",initials=getInitials(text),uncachedImageUrl=(resource&&(0,import_core14.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_core13.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}):(0,import_jsx_runtime7.jsx)(import_core13.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName"};var import_core16=require("@mantine/core"),import_core17=require("@medplum/core"),import_react_hooks4=require("@medplum/react-hooks");var import_react6=require("react");var import_core15=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_core15.formatHumanName)(name,props.options)}):null}function getAppName(){return process.env.MEDPLUM_APP_NAME||"Medplum"}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_core16.useMantineColorScheme)(),[layoutVersion]=(0,import_react6.useState)(localStorage.appShellLayoutVersion??"v1"),showLayoutToggle=props.showLayoutVersionToggle??!0;function setAppShellVersion(version){localStorage.appShellLayoutVersion=version,import_core17.locationUtils.reload()}return(0,import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment,{children:[(0,import_jsx_runtime9.jsxs)(import_core16.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_core16.Text,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),logins.map(login=>login.profile.reference!==(0,import_core17.getReferenceString)(context.profile)&&(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>import_core17.locationUtils.reload()).catch(console.log)},children:(0,import_jsx_runtime9.jsxs)(import_core16.Group,{children:[(0,import_jsx_runtime9.jsx)(import_core16.Avatar,{radius:"xl"}),(0,import_jsx_runtime9.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime9.jsx)(import_core16.Text,{size:"sm",fw:500,children:login.profile.display}),(0,import_jsx_runtime9.jsx)(import_core16.Text,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Switch to another project"}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsxs)(import_core16.Group,{justify:"center",children:[(0,import_jsx_runtime9.jsx)(import_core16.SegmentedControl,{size:"xs",value:colorScheme,onChange:newValue=>setColorScheme(newValue),data:[{label:"Light",value:"light"},{label:"Dark",value:"dark"},{label:"Auto",value:"auto"}]}),showLayoutToggle&&(0,import_jsx_runtime9.jsx)(import_core16.SegmentedControl,{size:"xs",value:layoutVersion,onChange:newValue=>setAppShellVersion(newValue),data:[{label:"v1",value:"v1"},{label:"v2",value:"v2"}]})]}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Divider,{}),(0,import_jsx_runtime9.jsx)(import_core16.Menu.Item,{leftSection:(0,import_jsx_runtime9.jsx)(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${(0,import_core17.getReferenceString)(profile)}`),children:"Account settings"}),(0,import_jsx_runtime9.jsx)(import_core16.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.jsxs)(import_core16.Text,{size:"xs",c:"dimmed",my:"sm",ta:"center",children:[getAppName()," ",props.version]})]})}var import_core20=require("@mantine/core"),import_core21=require("@medplum/core"),import_react_hooks5=require("@medplum/react-hooks");var import_react8=require("react");var import_core18=require("@mantine/core"),import_notifications=require("@mantine/notifications"),import_core19=require("@medplum/core");var import_react7=require("react");var AsyncAutocompleteTestIds={selectedItems:"selected-items",options:"options"};var import_jsx_runtime10=require("react/jsx-runtime");function AsyncAutocomplete(props){let combobox=(0,import_core18.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_react7.useState)(""),[timer,setTimer]=(0,import_react7.useState)(),[abortController,setAbortController]=(0,import_react7.useState)(),[autoSubmit,setAutoSubmit]=(0,import_react7.useState)(),[selected,setSelected]=(0,import_react7.useState)(defaultItems.map(toOption4)),[options,setOptions]=(0,import_react7.useState)([]),ItemComponent3=itemComponent??DefaultItemComponent,PillComponent=pillComponent??DefaultPillComponent,EmptyComponent=emptyComponent??DefaultEmptyComponent,searchRef=(0,import_react7.useRef)(search),lastLoadOptionsRef=(0,import_react7.useRef)(void 0),lastValueRef=(0,import_react7.useRef)(void 0),timerRef=(0,import_react7.useRef)(timer),abortControllerRef=(0,import_react7.useRef)(abortController),autoSubmitRef=(0,import_react7.useRef)(autoSubmit);(0,import_react7.useLayoutEffect)(()=>{searchRef.current=search,timerRef.current=timer,abortControllerRef.current=abortController,autoSubmitRef.current=autoSubmit});let handleTimer=(0,import_react7.useCallback)(()=>{if(setTimer(void 0),searchRef.current===lastValueRef.current&&loadOptions===lastLoadOptionsRef.current||(searchRef.current?.length??0)<minInputLength)return;lastValueRef.current=searchRef.current,lastLoadOptionsRef.current=loadOptions;let newAbortController=new AbortController;setAbortController(newAbortController),loadOptions(searchRef.current??"",newAbortController.signal).then(newValues=>{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_core19.normalizeErrorString)(err)})}).finally(()=>{newAbortController.signal.aborted||setAbortController(void 0)})},[combobox,loadOptions,onChange,toOption4,minInputLength]),handleSearchChange=(0,import_react7.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_react7.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_react7.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_react7.useCallback)(item=>{let newSelected=selected.filter(v=>v.value!==item.value);onChange(newSelected.map(v=>v.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=(0,import_react7.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_react7.useEffect)(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=!disabled&&clearable&&selected.length>0&&(0,import_jsx_runtime10.jsx)(import_core18.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_core18.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[(0,import_jsx_runtime10.jsx)(import_core18.Combobox.DropdownTarget,{children:(0,import_jsx_runtime10.jsx)(import_core18.PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?(0,import_jsx_runtime10.jsx)(import_core18.Loader,{size:16}):clearButton,required,disabled,children:(0,import_jsx_runtime10.jsxs)(import_core18.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<maxValues)&&(0,import_jsx_runtime10.jsx)(import_core18.Combobox.EventsTarget,{children:(0,import_jsx_runtime10.jsx)(import_core18.PillsInput.Field,{role:"searchbox",name,value:search,placeholder,onFocus:handleSearchChange,onBlur:()=>{combobox.closeDropdown(),setSearch("")},onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),(0,import_jsx_runtime10.jsx)(import_core18.Combobox.Dropdown,{hidden:!comboboxVisible,"data-testid":AsyncAutocompleteTestIds.options,children:(0,import_jsx_runtime10.jsx)(import_core18.Combobox.Options,{children:(0,import_jsx_runtime10.jsxs)(import_core18.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_core18.Combobox.Option,{value:item.value,active,children:(0,import_jsx_runtime10.jsx)(ItemComponent3,{...item,active})},item.value)}),createVisible&&(0,import_jsx_runtime10.jsxs)(import_core18.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_core18.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_core18.Pill,{withRemoveButton:!disabled,onRemove,children:item.label})}function DefaultEmptyComponent(){return(0,import_jsx_runtime10.jsx)(import_core18.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_core21.getDisplayString)(resource),resource}}function HeaderSearchInput(props){let navigate=(0,import_react_hooks5.useMedplumNavigate)(),medplum=(0,import_react_hooks5.useMedplum)(),loadData=(0,import_react8.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_react8.useCallback)(item=>{item.length>0&&navigate(`/${(0,import_core21.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_react8.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_core20.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_core20.Text,{children:(0,import_core21.getDisplayString)(resource)}),(0,import_jsx_runtime11.jsx)(import_core20.Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return(0,import_core21.isUUID)(input)?`{
2
2
  Patients1: PatientList(_id: ${escaped}, _count: 1) {
3
3
  resourceType
4
4
  id
@@ -99,16 +99,16 @@
99
99
  identifier { system value }
100
100
  subject { display }
101
101
  }
102
- }`.replaceAll(/\s+/g," ")}function getResourcesFromResponse2(response){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),dedupeResources2(resources)}function dedupeResources2(resources){let ids=new Set,result=[];for(let resource of resources)resource.id&&!ids.has(resource.id)&&(ids.add(resource.id),result.push(resource));return result}function patientsToActions(patients,navigate){let patientActions=patients.filter(p=>!!p.id).map(patient=>({id:patient.id,label:patient.name?(0,import_core29.formatHumanName)(patient.name[0]):patient.id,description:patient.birthDate,leftSection:(0,import_jsx_runtime19.jsx)(ResourceAvatar,{value:patient,radius:"xl",size:24}),onClick:()=>navigate(`/Patient/${patient.id}`)}));return patientActions.length>0?[{group:"Patients",actions:patientActions}]:[]}function resourcesToActions(resources,resourceTypes,navigate){let result=[],resourceTypeActions=resourceTypes.map(rt=>({id:`resource-type-${rt.code}`,label:rt.display??rt.code??"",description:"Resource Type",onClick:()=>navigate(`/${rt.code}`)}));resourceTypeActions.length>0&&result.push({group:"Resource Types",actions:resourceTypeActions});let patientActions=[],serviceRequestActions=[];for(let resource of resources)resource.resourceType==="Patient"&&resource.id?patientActions.push({id:resource.id,label:resource.name?(0,import_core29.formatHumanName)(resource.name[0]):resource.id,description:resource.birthDate,leftSection:(0,import_jsx_runtime19.jsx)(ResourceAvatar,{value:resource,radius:"xl",size:24}),onClick:()=>navigate(`/Patient/${resource.id}`)}):resource.resourceType==="ServiceRequest"&&resource.id&&serviceRequestActions.push({id:resource.id,label:resource.id,description:resource.subject?.display,onClick:()=>navigate(`/ServiceRequest/${resource.id}`)});return patientActions.length>0&&result.push({group:"Patients",actions:patientActions}),serviceRequestActions.length>0&&result.push({group:"Service Requests",actions:serviceRequestActions}),result}var import_jsx_runtime20=require("react/jsx-runtime");function Navbar(props){let navigate=(0,import_react_hooks10.useMedplumNavigate)(),profile=(0,import_react_hooks10.useMedplumProfile)(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[userMenuOpened,setUserMenuOpened]=(0,import_react17.useState)(!1),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react17.useState)(!1);function onLinkClick2(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}let opened=props.opened??!0;return(0,import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment,{children:[(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Navbar,{id:"navbar",className:Navbar_default.navbar,children:[props.logo&&(0,import_jsx_runtime20.jsx)(import_core30.AppShell.Section,{px:"xs",pt:"xs",pb:"4px",children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{className:Navbar_default.logoButton,onClick:props.navbarToggle,"aria-expanded":opened,"aria-controls":"navbar","aria-label":"Medplum Logo",children:props.logo})}),(0,import_jsx_runtime20.jsx)(import_core30.ScrollArea,{px:"xs",pb:"xs",pt:"sm",h:"100%",children:(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Section,{grow:!0,children:[props.spotlightEnabled&&(0,import_jsx_runtime20.jsx)(import_core30.Box,{mb:2,children:(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Search",position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:Navbar_default.link,onClick:()=>import_spotlight2.spotlight.open(),"aria-label":"Search",children:[(0,import_jsx_runtime20.jsx)(IconSearch,{size:"1.2rem"}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:"Search"})]})})}),props.spotlightEnabled&&(0,import_jsx_runtime20.jsx)(Spotlight,{patientsOnly:props.patientsOnly}),!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime20.jsx)(import_core30.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime20.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),props.menus?.map((menu,index)=>(0,import_jsx_runtime20.jsxs)(import_react17.Fragment,{children:[menu.title&&(0,import_jsx_runtime20.jsx)(import_core30.Text,{className:Navbar_default.menuTitle,"data-opened":opened||void 0,children:menu.title}),(0,import_jsx_runtime20.jsx)(import_core30.Stack,{gap:"2",children:menu.links?.map(link=>link.notificationCount?(0,import_jsx_runtime20.jsx)(NavbarLinkWithSubscription,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick2(e,link.href),icon:link.icon,label:link.label??"",opened,alert:link.alert,notificationCount:link.notificationCount,onDismiss:link.onDismiss},link.href):(0,import_jsx_runtime20.jsx)(NavbarLinkContent,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick2(e,link.href),icon:link.icon,label:link.label??"",opened,alert:link.alert,count:link.count,onDismiss:link.onDismiss},link.href))})]},`menu-${menu.title??index}`)),props.displayAddBookmark&&(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Add Bookmark",position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:`${Navbar_default.link} ${Navbar_default.addBookmarkLink}`,onClick:()=>setBookmarkDialogVisible(!0),children:[(0,import_jsx_runtime20.jsx)(IconCirclePlus,{}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:"Add Bookmark"})]})})]})}),props.userMenuEnabled&&(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Section,{px:"xs",py:"xs",children:[(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:opened?"Close Sidebar":"Open Sidebar",position:"right",transitionProps:{duration:0},children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{className:Navbar_default.toggleButton,"aria-label":opened?"Close Sidebar":"Open Sidebar",onClick:props.navbarToggle,"aria-expanded":opened,"aria-controls":"navbar",children:(0,import_jsx_runtime20.jsx)(IconLayoutSidebar,{})})}),(0,import_jsx_runtime20.jsx)(import_core30.Divider,{my:"xs",mx:6,className:Navbar_default.divider}),(0,import_jsx_runtime20.jsxs)(import_core30.Menu,{width:260,shadow:"xl",position:"top-start",transitionProps:{transition:"fade-up"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime20.jsx)(import_core30.Menu.Target,{children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:Navbar_default.link,pl:"7","aria-label":"User menu","data-active":userMenuOpened||void 0,onClick:()=>setUserMenuOpened(o=>!o),bd:"1px 0 0 0 solid var(--mantine-color-gray-200)",children:[(0,import_jsx_runtime20.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:(0,import_core31.formatHumanName)(profile?.name?.[0])})]})}),(0,import_jsx_runtime20.jsx)(import_core30.Menu.Dropdown,{children:(0,import_jsx_runtime20.jsx)(HeaderDropdown,{version:props.version,showLayoutVersionToggle:props.showLayoutVersionToggle})})]})]})]}),props.pathname&&props.searchParams&&(0,import_jsx_runtime20.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLinkContent(props){let{to,icon,label,onClick,active,count,alert,opened,onDismiss}=props,showCount=count!==void 0&&count>0,iconElement=icon??(0,import_jsx_runtime20.jsx)(IconBookmark,{}),showDot=showCount&&alert&&!opened;function handleDismiss(e){e.preventDefault(),e.stopPropagation(),onDismiss?.()}return(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label,position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(MedplumLink,{to,onClick,className:Navbar_default.link,"data-active":active||void 0,children:[(0,import_jsx_runtime20.jsxs)("span",{className:Navbar_default.iconWrapper,children:[iconElement,showDot&&(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.alertDot})]}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:label}),showCount&&(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkCount,"data-opened":opened||void 0,"data-alert":alert||void 0,children:count.toLocaleString()}),onDismiss&&opened&&(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Dismiss",openDelay:500,children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{"aria-label":"Dismiss",className:Navbar_default.dismissButton,onClick:handleDismiss,children:(0,import_jsx_runtime20.jsx)(IconX,{size:14})})})]})})}function NavbarLinkWithSubscription(props){let count=(0,import_react_hooks10.useNotificationCount)(props.notificationCount);return(0,import_jsx_runtime20.jsx)(NavbarLinkContent,{to:props.to,active:props.active,onClick:props.onClick,icon:props.icon,label:props.label,opened:props.opened,alert:props.alert,count,onDismiss:props.onDismiss})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&&currentSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime21=require("react/jsx-runtime"),OPEN_WIDTH=250,CLOSED_WIDTH=59;function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react18.useState)(localStorage.navbarOpen==="true"),[layoutVersion]=(0,import_react18.useState)(props.layoutVersion??localStorage.appShellLayoutVersion??"v1"),medplum=(0,import_react_hooks11.useMedplum)(),profile=(0,import_react_hooks11.useMedplumProfile)();function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}if(medplum.isLoading())return(0,import_jsx_runtime21.jsx)(Loading,{});let headerProp,navbarProp,headerComponent,navbarComponent;return layoutVersion==="v2"?(headerProp={height:0},navbarProp={width:navbarOpen?OPEN_WIDTH:CLOSED_WIDTH,breakpoint:0,collapsed:{desktop:!profile,mobile:!profile}},headerComponent=void 0,navbarComponent=profile?(0,import_jsx_runtime21.jsx)(Navbar,{logo:props.logo,pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,navbarToggle:toggleNavbar,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:!0,opened:navbarOpen,spotlightEnabled:!0,patientsOnly:props.spotlightPatientsOnly,userMenuEnabled:!0,version:props.version,showLayoutVersionToggle:props.showLayoutVersionToggle}):void 0):(headerProp={height:60},navbarProp={width:OPEN_WIDTH,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},headerComponent=profile&&(0,import_jsx_runtime21.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarOpen,navbarToggle:toggleNavbar,notifications:props.notifications}),navbarComponent=profile&&navbarOpen?(0,import_jsx_runtime21.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,navbarToggle:toggleNavbar,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled,patientsOnly:props.spotlightPatientsOnly}):void 0),(0,import_jsx_runtime21.jsxs)(import_core32.AppShell,{header:headerProp,navbar:navbarProp,padding:0,children:[headerComponent,navbarComponent,(0,import_jsx_runtime21.jsx)(import_core32.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime21.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime21.jsx)(import_react18.Suspense,{fallback:(0,import_jsx_runtime21.jsx)(Loading,{}),children:props.children})})})]})}var import_core36=require("@medplum/core");var import_core34=require("@mantine/core"),import_core35=require("@medplum/core"),import_react_hooks12=require("@medplum/react-hooks");var import_core33=require("@mantine/core"),import_react19=require("react");var import_jsx_runtime22=require("react/jsx-runtime"),CCDA_VIEWER_URL="https://ccda.medplum.com",BASE_VALIDATION_URL="https://ccda-validator.medplum.com/";function CcdaDisplay(props){let{url}=props,[shouldSend,setShouldSend]=(0,import_react19.useState)(!1),iframeRef=(0,import_react19.useRef)(null),[validationResult,setValidationResult]=(0,import_react19.useState)(),[validating,setValidating]=(0,import_react19.useState)(!1);(0,import_react19.useEffect)(()=>{url&&shouldSend&&iframeRef.current&&(sendCommand(iframeRef.current,{command:"loadCcdaXml",value:url}).catch(console.error),setShouldSend(!1))},[url,shouldSend]);let validateCcda=async()=>{if(url)try{setValidating(!0);let ccdaContent=await(await fetch(url)).text(),formData=new FormData;formData.append("ccdaFile",new Blob([ccdaContent],{type:"text/xml"}),"ccda.xml");let validationUrl=`${BASE_VALIDATION_URL}referenceccdaservice/?validationObjective=C-CDA_IG_Plus_Vocab&referenceFileName=No%20scenario%20File&curesUpdate=true&severityLevel=WARNING`,validationResponse=await fetch(validationUrl,{method:"POST",body:formData,credentials:"omit",redirect:"manual"});if(!validationResponse.ok)throw new Error(`Validation failed: ${validationResponse.status} ${validationResponse.statusText}`);let validationResult2=await validationResponse.json();setValidationResult(validationResult2)}catch(error){setValidationResult(void 0),console.error("CCDA validation error:",error)}finally{setValidating(!1)}},downloadResults=()=>{if(!validationResult)return;let resultsJson=JSON.stringify(validationResult,null,2);exportJsonFile(resultsJson,"ccda-validation-results")},getErrorCount=()=>validationResult?validationResult.resultsMetaData.resultMetaData.filter(item=>item?.type.includes("Error")).reduce((sum,item)=>sum+(item.count||0),0):0;return url?(0,import_jsx_runtime22.jsxs)("div",{"data-testid":"ccda-iframe",style:{maxWidth:props.maxWidth},children:[(0,import_jsx_runtime22.jsx)("div",{style:{minHeight:400},children:(0,import_jsx_runtime22.jsx)("iframe",{title:"C-CDA Viewer",width:"100%",height:"400",ref:iframeRef,src:CCDA_VIEWER_URL,allowFullScreen:!0,frameBorder:0,seamless:!0,onLoad:()=>setShouldSend(!0)})}),(0,import_jsx_runtime22.jsxs)("div",{style:{marginTop:"10px",marginBottom:"10px",display:"flex",alignItems:"center"},children:[(0,import_jsx_runtime22.jsx)(import_core33.Button,{type:"button",onClick:validateCcda,disabled:validating,children:validating?"Validating...":"Validate"}),validationResult&&(0,import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment,{children:[(0,import_jsx_runtime22.jsxs)("div",{style:{marginLeft:"15px"},children:[(0,import_jsx_runtime22.jsx)("strong",{children:"Validation Results:"})," ",getErrorCount()," errors found"]}),(0,import_jsx_runtime22.jsx)(import_core33.Button,{type:"button",onClick:downloadResults,color:"green",style:{marginLeft:"auto"},children:"Download Full Results"})]})]})]}):null}var import_jsx_runtime23=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=(0,import_react_hooks12.useCachedBinaryUrl)(uncachedUrl);return url?(0,import_jsx_runtime23.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime23.jsx)("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime23.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime23.jsx)("source",{type:contentType,src:url})}),(contentType?.startsWith("text/")||contentType==="application/json"||contentType==="application/pdf")&&(0,import_jsx_runtime23.jsx)("div",{"data-testid":"attachment-iframe",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime23.jsx)("iframe",{title:"Attachment",width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),contentType===import_core35.ContentType.CDA_XML&&(0,import_jsx_runtime23.jsx)(CcdaDisplay,{url}),(0,import_jsx_runtime23.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime23.jsx)(import_core34.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}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<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime24=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime24.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment,{children:[(0,import_jsx_runtime24.jsx)("dt",{children:props.term}),(0,import_jsx_runtime24.jsx)("dd",{children:props.children})]})}var import_jsx_runtime25=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v,index)=>(0,import_jsx_runtime25.jsx)("div",{children:(0,import_jsx_runtime25.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_core36.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime25.jsx)(DescriptionListEntry,{term:(0,import_core36.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment,{children:attachmentElements});return content}var import_core38=require("@mantine/core");var import_react21=require("react");var import_core37=require("@medplum/core"),import_react_hooks13=require("@medplum/react-hooks"),import_react20=require("react");var import_jsx_runtime26=require("react/jsx-runtime");function AttachmentButton(props){let medplum=(0,import_react_hooks13.useMedplum)(),fileInputRef=(0,import_react20.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_core37.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment,{children:[(0,import_jsx_runtime26.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_runtime27=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react21.useState)(props.defaultValue??[]);function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime27.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime27.jsxs)("colgroup",{children:[(0,import_jsx_runtime27.jsx)("col",{width:"97%"}),(0,import_jsx_runtime27.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime27.jsxs)("tbody",{children:[values.map((v,index)=>(0,import_jsx_runtime27.jsxs)("tr",{children:[(0,import_jsx_runtime27.jsx)("td",{children:(0,import_jsx_runtime27.jsx)(AttachmentDisplay,{value:v,maxWidth:200})}),(0,import_jsx_runtime27.jsx)("td",{children:(0,import_jsx_runtime27.jsx)(import_core38.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_runtime27.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime27.jsxs)("tr",{children:[(0,import_jsx_runtime27.jsx)("td",{}),(0,import_jsx_runtime27.jsx)("td",{children:(0,import_jsx_runtime27.jsx)(AttachmentButton,{disabled:props.disabled,onUpload:attachment=>{setValuesWrapper([...values,attachment])},children:props2=>(0,import_jsx_runtime27.jsx)(import_core38.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:props2.disabled?"gray":"green",children:(0,import_jsx_runtime27.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core39=require("@mantine/core"),import_react22=require("react");var import_jsx_runtime28=require("react/jsx-runtime");function AttachmentInput(props){let[value,setValue]=(0,import_react22.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return value?(0,import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment,{children:[(0,import_jsx_runtime28.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime28.jsx)(import_core39.Button,{disabled:props.disabled,onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime28.jsx)(AttachmentButton,{disabled:props.disabled,securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime28.jsx)(import_core39.Button,{...props2,children:"Upload..."})})}var import_core42=require("@mantine/core"),import_core43=require("@medplum/core"),import_react_hooks14=require("@medplum/react-hooks"),import_react23=require("react");var import_core40=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime29=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime29.jsx)(import_core40.Container,{className:Container_default.root,...others,children})}var import_core41=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime30=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime30.jsx)(import_core41.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_jsx_runtime31=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime31.jsx)(Container,{children:(0,import_jsx_runtime31.jsx)(Panel,{...others,children})})}var import_jsx_runtime32=require("react/jsx-runtime");function Logo(props){let overrideUrl=process.env.MEDPLUM_LOGO_URL;return overrideUrl?(0,import_jsx_runtime32.jsx)("img",{src:overrideUrl,alt:"Logo",style:{maxHeight:props.size}}):(0,import_jsx_runtime32.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 180 180",style:{width:props.size,height:props.size},children:[(0,import_jsx_runtime32.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime32.jsx)("path",{fill:props.fill??"#9c36b5",d:"M84 56c-3-15-15-24-23-28l5-10c8 2 14 8 20 14 0-12 1-16 5-21 8-9 13-9 41-9 0 7 1 18-3 24-7 9-16 7-41 8 5 8 7 14 8 22 36-24 74-7 74 39 0 42-40 83-80 83s-80-41-80-83c0-46 38-63 74-39Zm-3 43H65c-4 0-7 3-7 7v4c0 4 3 7 7 7h16v16c0 4 3 7 7 7h4c4 0 7-3 7-7v-16h16c4 0 7-3 7-7v-4c0-4-3-7-7-7H99V83c0-4-3-7-7-7h-4c-4 0-7 3-7 7z"})]})}function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
103
- `)}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_runtime33=require("react/jsx-runtime");function ChangePasswordForm(props){let{onSuccess}=props,medplum=(0,import_react_hooks14.useMedplum)(),[outcome,setOutcome]=(0,import_react23.useState)(),[success,setSuccess]=(0,import_react23.useState)(!1);return(0,import_jsx_runtime33.jsx)(Document,{width:450,children:(0,import_jsx_runtime33.jsxs)(Form,{onSubmit:formData=>{setOutcome(void 0),medplum.post("auth/changepassword",formData).then(()=>{setSuccess(!0),onSuccess?.()}).catch(err=>setOutcome((0,import_core43.normalizeOperationOutcome)(err)))},children:[(0,import_jsx_runtime33.jsxs)(import_core42.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime33.jsx)(Logo,{size:32}),(0,import_jsx_runtime33.jsx)(import_core42.Title,{children:"Change password"})]}),!success&&(0,import_jsx_runtime33.jsxs)(import_core42.Stack,{gap:"xl",mt:"xl",children:[(0,import_jsx_runtime33.jsx)(import_core42.PasswordInput,{name:"oldPassword",label:"Old password",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"oldPassword")}),(0,import_jsx_runtime33.jsx)(import_core42.PasswordInput,{name:"newPassword",label:"New password",required:!0,error:getErrorsForInput(outcome,"newPassword")}),(0,import_jsx_runtime33.jsx)(import_core42.PasswordInput,{name:"confirmPassword",label:"Confirm new password",required:!0,error:getErrorsForInput(outcome,"confirmPassword")}),(0,import_jsx_runtime33.jsx)(import_core42.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime33.jsx)(import_core42.Button,{type:"submit",children:"Change password"})})]}),success&&(0,import_jsx_runtime33.jsx)("div",{"data-testid":"success",children:"Password changed successfully"})]})})}var import_core44=require("@mantine/core"),import_core45=require("@medplum/core");var import_react24=require("react");var import_jsx_runtime34=require("react/jsx-runtime");function MfaForm(props){let[errorMessage,setErrorMessage]=(0,import_react24.useState)();return(0,import_jsx_runtime34.jsxs)(Form,{onSubmit:formData=>{setErrorMessage(void 0),props.onSubmit(formData)?.catch(err=>setErrorMessage((0,import_core45.normalizeErrorString)(err)))},children:[(0,import_jsx_runtime34.jsxs)(import_core44.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime34.jsx)(Logo,{size:32}),(0,import_jsx_runtime34.jsx)(import_core44.Title,{order:3,py:"lg",children:props.title}),!props.qrCodeUrl&&props.description&&(0,import_jsx_runtime34.jsx)(import_core44.Text,{c:"dimmed",mb:"lg",mt:"-lg",children:props.description})]}),errorMessage&&(0,import_jsx_runtime34.jsx)(import_core44.Alert,{icon:(0,import_jsx_runtime34.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",mb:"lg",children:errorMessage}),props.qrCodeUrl&&(0,import_jsx_runtime34.jsx)(import_core44.Center,{children:(0,import_jsx_runtime34.jsxs)(import_core44.Stack,{mb:"xl",children:[props.description&&(0,import_jsx_runtime34.jsx)(import_core44.Text,{c:"dimmed",mb:"md",mt:"-lg",ta:"center",children:props.description}),(0,import_jsx_runtime34.jsx)(import_core44.Image,{src:props.qrCodeUrl,alt:"Multi Factor Auth QR Code",w:"60%",mx:"auto",radius:"md",p:"xs",bg:"var(--mantine-color-white)",style:{border:"1px solid light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-4))"}})]})}),(0,import_jsx_runtime34.jsx)(import_core44.Stack,{gap:"sm",children:(0,import_jsx_runtime34.jsx)(import_core44.TextInput,{name:"token",label:"MFA code",autoComplete:"one-time-code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime34.jsx)(import_core44.Stack,{gap:"xs",pt:"md",children:(0,import_jsx_runtime34.jsx)(SubmitButton,{fullWidth:!0,children:props.buttonText})})]})}var import_core54=require("@medplum/core"),import_react_hooks17=require("@medplum/react-hooks"),import_react28=require("react");var import_core46=require("@mantine/core"),import_core47=require("@medplum/core");var import_jsx_runtime35=require("react/jsx-runtime");function OperationOutcomeAlert(props){let{outcome,issues:issuesProp,...spacingProps}=props,issues=outcome?.issue||issuesProp;return!issues||issues.length===0?null:(0,import_jsx_runtime35.jsx)(import_core46.Alert,{icon:(0,import_jsx_runtime35.jsx)(IconAlertCircle,{size:16}),color:"red",...spacingProps,children:issues.map(issue=>(0,import_jsx_runtime35.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core47.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core48=require("@mantine/core"),import_core49=require("@medplum/core"),import_react_hooks15=require("@medplum/react-hooks"),import_react25=require("react");var import_jsx_runtime36=require("react/jsx-runtime");function NewProjectForm(props){let medplum=(0,import_react_hooks15.useMedplum)(),[outcome,setOutcome]=(0,import_react25.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime36.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core49.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime36.jsxs)(import_core48.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime36.jsx)(Logo,{size:32}),(0,import_jsx_runtime36.jsx)(import_core48.Title,{order:3,py:"lg",children:"Create a new project"})]}),(0,import_jsx_runtime36.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),(0,import_jsx_runtime36.jsx)(import_core48.Stack,{gap:"sm",children:(0,import_jsx_runtime36.jsx)(import_core48.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"projectName")})}),(0,import_jsx_runtime36.jsxs)(import_core48.Stack,{gap:"xs",mt:"md",children:[(0,import_jsx_runtime36.jsx)(SubmitButton,{fullWidth:!0,children:"Create Project"}),(0,import_jsx_runtime36.jsxs)(import_core48.Text,{c:"dimmed",size:"xs",pt:"lg",ta:"center",children:['By clicking "Create Project" you agree to the Medplum'," ",(0,import_jsx_runtime36.jsx)(import_core48.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime36.jsx)(import_core48.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]})]})}var import_core52=require("@mantine/core"),import_core53=require("@medplum/core"),import_react_hooks16=require("@medplum/react-hooks"),import_react27=require("react");var import_core50=require("@mantine/core"),import_react26=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_runtime37=require("react/jsx-runtime");function GoogleButton(props){let{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react26.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react26.useState)(typeof google<"u"),initializedRef=(0,import_react26.useRef)(!1),buttonRenderedRef=(0,import_react26.useRef)(!1);return(0,import_react26.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initializedRef.current||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),initializedRef.current=!0),parentRef.current&&!buttonRenderedRef.current&&(google.accounts.id.renderButton(parentRef.current,{type:"standard",logo_alignment:"center",width:parentRef.current.clientWidth}),buttonRenderedRef.current=!0)},[googleClientId,scriptLoaded,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime37.jsx)(import_core50.Box,{ref:parentRef,w:"100%",h:40,display:"flex",style:{justifyContent:"center"}}):null}var import_core51=require("@medplum/core");function getGoogleClientId(clientId){if(clientId)return clientId;let origin=import_core51.locationUtils.getOrigin();if(origin&&("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime38=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=(0,import_react_hooks16.useMedplum)(),[outcome,setOutcome]=(0,import_react27.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react27.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime38.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core53.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime38.jsx)(import_core52.Flex,{direction:"column",align:"center",justify:"center",children:props.children}),(0,import_jsx_runtime38.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),googleClientId&&(0,import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment,{children:[(0,import_jsx_runtime38.jsx)(import_core52.Box,{style:{minHeight:40},children:(0,import_jsx_runtime38.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_core53.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime38.jsx)(import_core52.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime38.jsxs)(import_core52.Stack,{gap:"sm",children:[(0,import_jsx_runtime38.jsx)(import_core52.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime38.jsx)(import_core52.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime38.jsx)(import_core52.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime38.jsx)(import_core52.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")})]}),(0,import_jsx_runtime38.jsxs)(import_core52.Stack,{gap:"xs",children:[(0,import_jsx_runtime38.jsx)(import_core52.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1},pt:"md",pb:"xs"}),(0,import_jsx_runtime38.jsx)(SubmitButton,{fullWidth:!0,children:"Register Account"}),(0,import_jsx_runtime38.jsxs)(import_core52.Text,{c:"dimmed",size:"xs",pt:"lg",ta:"center",children:['By clicking "Register Account" you agree to the Medplum'," ",(0,import_jsx_runtime38.jsx)(import_core52.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime38.jsx)(import_core52.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime38.jsxs)(import_core52.Text,{c:"dimmed",size:"xs",ta:"center",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime38.jsx)(import_core52.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime38.jsx)(import_core52.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]})]})}var import_jsx_runtime39=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=(0,import_react_hooks17.useMedplum)(),[login,setLogin]=(0,import_react28.useState)(),[outcome,setOutcome]=(0,import_react28.useState)();(0,import_react28.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core54.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code?medplum.processCode(response.code).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core54.normalizeOperationOutcome)(err))):response.login&&setLogin(response.login)}let issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime39.jsxs)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:[(0,import_jsx_runtime39.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),!login&&(0,import_jsx_runtime39.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime39.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_core55=require("@mantine/core"),import_core56=require("@medplum/core"),import_react_hooks18=require("@medplum/react-hooks"),import_react29=require("react");var import_jsx_runtime40=require("react/jsx-runtime");function ResetPasswordForm(props){let{projectId,recaptchaSiteKey,onSuccess,onSignIn,onRegister}=props,medplum=(0,import_react_hooks18.useMedplum)(),[outcome,setOutcome]=(0,import_react29.useState)(),[success,setSuccess]=(0,import_react29.useState)(!1);return(0,import_react29.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime40.jsx)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:(0,import_jsx_runtime40.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),await medplum.post("auth/resetpassword",{...formData,projectId,recaptchaToken}),setSuccess(!0),onSuccess?.()}catch(err){setOutcome((0,import_core56.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime40.jsxs)(import_core55.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime40.jsx)(Logo,{size:32}),(0,import_jsx_runtime40.jsx)(import_core55.Title,{order:3,py:"lg",children:"Reset your password"})]}),(0,import_jsx_runtime40.jsx)(OperationOutcomeAlert,{issues:getIssuesForExpression(outcome,void 0),mb:"lg"}),!success&&(0,import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment,{children:[(0,import_jsx_runtime40.jsx)(import_core55.Stack,{gap:"sm",mb:"md",children:(0,import_jsx_runtime40.jsx)(import_core55.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")})}),(0,import_jsx_runtime40.jsxs)(import_core55.Stack,{gap:"xs",children:[(0,import_jsx_runtime40.jsx)(SubmitButton,{fullWidth:!0,children:"Reset Password"}),onSignIn&&(0,import_jsx_runtime40.jsx)(import_core55.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:(0,import_jsx_runtime40.jsx)(import_core55.Anchor,{onClick:onSignIn,children:"Back to Sign In"})}),onRegister&&(0,import_jsx_runtime40.jsxs)(import_core55.Text,{size:"sm",mt:"none",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:["Don't have an account? ",(0,import_jsx_runtime40.jsx)(import_core55.Anchor,{onClick:onRegister,children:"Sign Up"})]})]})]}),success&&(0,import_jsx_runtime40.jsx)(import_core55.Text,{c:"dimmed",size:"sm",ta:"center",mt:"md",children:"If the account exists on our system, a password reset email will be sent."})]})})}var import_core57=require("@mantine/core"),import_core58=require("@medplum/core"),import_react_hooks19=require("@medplum/react-hooks"),import_react30=require("react");var import_jsx_runtime41=require("react/jsx-runtime");function SetPasswordForm(props){let{id,secret,onSuccess,onSignIn}=props,medplum=(0,import_react_hooks19.useMedplum)(),[outcome,setOutcome]=(0,import_react30.useState)(),[success,setSuccess]=(0,import_react30.useState)(!1),issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime41.jsxs)(Document,{width:450,children:[(0,import_jsx_runtime41.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime41.jsxs)(Form,{onSubmit:formData=>{if(formData.password!==formData.confirmPassword){setOutcome((0,import_core58.badRequest)("Passwords do not match","confirmPassword"));return}setOutcome(void 0),medplum.post("auth/setpassword",{id,secret,password:formData.password}).then(()=>{setSuccess(!0),onSuccess?.()}).catch(err=>setOutcome((0,import_core58.normalizeOperationOutcome)(err)))},children:[(0,import_jsx_runtime41.jsxs)(import_core57.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime41.jsx)(Logo,{size:32}),(0,import_jsx_runtime41.jsx)(import_core57.Title,{children:"Set password"})]}),!success&&(0,import_jsx_runtime41.jsxs)(import_core57.Stack,{children:[(0,import_jsx_runtime41.jsx)(import_core57.PasswordInput,{name:"password",label:"New password",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime41.jsx)(import_core57.PasswordInput,{name:"confirmPassword",label:"Confirm new password",required:!0,error:getErrorsForInput(outcome,"confirmPassword")}),(0,import_jsx_runtime41.jsx)(import_core57.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime41.jsx)(import_core57.Button,{type:"submit",children:"Set password"})})]}),success&&(0,import_jsx_runtime41.jsxs)("div",{"data-testid":"success",children:["Password set. You can now\xA0",onSignIn?(0,import_jsx_runtime41.jsx)(import_core57.Anchor,{component:"button",type:"button",onClick:onSignIn,children:"sign in"}):"sign in","."]})]})]})}var import_notifications3=require("@mantine/notifications"),import_core64=require("@medplum/core"),import_react_hooks23=require("@medplum/react-hooks"),import_react33=require("react");var import_core59=require("@mantine/core"),import_core60=require("@medplum/core"),import_react_hooks20=require("@medplum/react-hooks");var import_react31=require("react");var import_jsx_runtime42=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react31.useState)();return email?(0,import_jsx_runtime42.jsx)(PasswordForm,{email,resetEmail:()=>setEmail(void 0),...props}):(0,import_jsx_runtime42.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react31.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react31.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain,returnTo:import_core60.locationUtils.getLocation()}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),import_core60.locationUtils.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react31.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_react31.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core60.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime42.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime42.jsx)(import_core59.Flex,{direction:"column",align:"center",justify:"center",children}),(0,import_jsx_runtime42.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),googleClientId&&(0,import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment,{children:[(0,import_jsx_runtime42.jsx)(import_core59.Box,{style:{minHeight:40},children:(0,import_jsx_runtime42.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime42.jsx)(import_core59.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime42.jsx)(import_core59.TextInput,{name:"email",type:"email",label:"Email",mb:"md",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email"),"data-testid":"auth.email"}),(0,import_jsx_runtime42.jsxs)(import_core59.Stack,{gap:"xs",children:[!disableEmailAuth&&(0,import_jsx_runtime42.jsx)(SubmitButton,{fullWidth:!0,children:"Continue"}),onRegister&&(0,import_jsx_runtime42.jsxs)(import_core59.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:["Don\u2019t have an account? ",(0,import_jsx_runtime42.jsx)(import_core59.Anchor,{onClick:onRegister,children:"Register"})]})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),[outcome,setOutcome]=(0,import_react31.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react31.useCallback)(formData=>medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core60.normalizeOperationOutcome)(err))),[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime42.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime42.jsx)(import_core59.Flex,{direction:"column",align:"center",justify:"center",children}),(0,import_jsx_runtime42.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),(0,import_jsx_runtime42.jsxs)(import_core59.Stack,{gap:"sm",children:[(0,import_jsx_runtime42.jsx)(import_core59.TextInput,{label:"Email",value:props.email,disabled:!0,rightSectionWidth:36,rightSection:(0,import_jsx_runtime42.jsx)(import_core59.ActionIcon,{variant:"subtle",color:"gray",onClick:props.resetEmail,"aria-label":"Change email",children:(0,import_jsx_runtime42.jsx)(IconPencil,{size:"1rem",stroke:1.5})})}),(0,import_jsx_runtime42.jsx)(import_core59.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password"),"data-testid":"auth.password"})]}),(0,import_jsx_runtime42.jsxs)(import_core59.Stack,{gap:"xs",children:[(0,import_jsx_runtime42.jsx)(import_core59.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1},pt:"md",pb:"xs"}),(0,import_jsx_runtime42.jsx)(SubmitButton,{children:"Sign In"}),onForgotPassword&&(0,import_jsx_runtime42.jsx)(import_core59.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:(0,import_jsx_runtime42.jsx)(import_core59.Anchor,{onClick:onForgotPassword,children:"Reset Password"})})]})]})}var import_core61=require("@mantine/core"),import_core62=require("@medplum/core"),import_react_hooks21=require("@medplum/react-hooks");var import_react32=require("react");var ChooseProfileForm_default={option:"ChooseProfileForm_option",iconBox:"ChooseProfileForm_iconBox"};var import_jsx_runtime43=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=(0,import_react_hooks21.useMedplum)(),combobox=(0,import_core61.useCombobox)(),[search,setSearch]=(0,import_react32.useState)(""),[outcome,setOutcome]=(0,import_react32.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)||filterDisplay(getMembershipLabel(membership))}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core62.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime43.jsx)(import_core61.Combobox.Option,{value:item.id,className:ChooseProfileForm_default.option,children:(0,import_jsx_runtime43.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime43.jsxs)(import_core61.Stack,{gap:"0",children:[(0,import_jsx_runtime43.jsxs)(import_core61.Flex,{justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime43.jsx)(Logo,{size:32}),(0,import_jsx_runtime43.jsx)(import_core61.Title,{order:3,py:"lg",children:"Choose a Project"})]}),(0,import_jsx_runtime43.jsx)(OperationOutcomeAlert,{outcome,mb:"lg"}),(0,import_jsx_runtime43.jsxs)(import_core61.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime43.jsx)(import_core61.Combobox.EventsTarget,{children:(0,import_jsx_runtime43.jsx)(import_core61.TextInput,{placeholder:"Search",value:search,mb:"md",autoFocus:!0,leftSection:(0,import_jsx_runtime43.jsx)(IconSearch,{size:16}),onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime43.jsx)("div",{children:(0,import_jsx_runtime43.jsx)(import_core61.Combobox.Options,{style:{marginLeft:"-10px",marginRight:"-10px",marginBottom:"-10px"},children:options.length>0?options:(0,import_jsx_runtime43.jsx)(import_core61.Combobox.Empty,{children:"Nothing found..."})})})]}),(0,import_jsx_runtime43.jsx)(import_core61.Text,{size:"sm",ta:"center",mt:"md",children:(0,import_jsx_runtime43.jsx)(import_core61.Anchor,{component:"button",type:"button",onClick:()=>{window.location.href=`/signin?project=new&login=${props.login}`},children:"Create a new project"})})]})}function getMembershipLabel(membership){return membership.identifier?.find(i=>i.system==="https://medplum.com/identifier/label")?.value}function SelectOption(membership){let label=getMembershipLabel(membership);return(0,import_jsx_runtime43.jsxs)(import_core61.Group,{gap:"xs",align:"center",children:[(0,import_jsx_runtime43.jsx)(import_core61.Box,{className:ChooseProfileForm_default.iconBox,children:(0,import_jsx_runtime43.jsx)(IconBriefcase,{size:16,stroke:2})}),(0,import_jsx_runtime43.jsxs)("div",{children:[(0,import_jsx_runtime43.jsxs)(import_core61.Text,{size:"sm",fw:500,children:[membership.project?.display," ",label?` - ${label}`:""]}),(0,import_jsx_runtime43.jsx)(import_core61.Text,{size:"xs",c:"dimmed",children:membership.profile?.display})]})]})}var import_core63=require("@mantine/core"),import_react_hooks22=require("@medplum/react-hooks"),import_jsx_runtime44=require("react/jsx-runtime");var import_jsx_runtime45=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_hooks22.useMedplum)();return(0,import_jsx_runtime45.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_runtime45.jsxs)(import_core63.Stack,{children:[(0,import_jsx_runtime45.jsxs)(import_core63.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime45.jsx)(Logo,{size:32}),(0,import_jsx_runtime45.jsx)(import_core63.Title,{order:3,py:"lg",children:"Choose scope"})]}),(0,import_jsx_runtime45.jsx)(import_core63.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_runtime45.jsxs)(import_jsx_runtime44.Fragment,{children:[(0,import_jsx_runtime45.jsx)(import_core63.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName),additionalScopes?.map(scope=>(0,import_jsx_runtime45.jsx)(import_core63.Checkbox,{id:scope,name:scope,label:scope},scope))]},scopeName+"_group")})}),(0,import_jsx_runtime45.jsx)(import_core63.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime45.jsx)(SubmitButton,{fullWidth:!0,children:"Set Scope"})})]})})}var import_jsx_runtime46=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=(0,import_react_hooks23.useMedplum)(),[login,setLogin]=(0,import_react33.useState)(),loginRequested=(0,import_react33.useRef)(!1),[mfaEnrollRequired,setMfaEnrollRequired]=(0,import_react33.useState)(!1),[enrollQrCode,setEnrollQrCode]=(0,import_react33.useState)(),[mfaRequired,setMfaRequired]=(0,import_react33.useState)(!1),[memberships,setMemberships]=(0,import_react33.useState)(),handleCode=(0,import_react33.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications3.showNotification)({color:"red",message:(0,import_core64.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react33.useCallback)(response=>{setMfaEnrollRequired(!!response.mfaEnrollRequired),setEnrollQrCode(response.enrollQrCode),setMfaRequired(!!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_react33.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react33.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications3.showNotification)({color:"red",message:(0,import_core64.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime46.jsx)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:login?mfaEnrollRequired&&enrollQrCode?(0,import_jsx_runtime46.jsx)(MfaForm,{title:"Enroll in MFA",description:"Scan this QR code with your authenticator app.",buttonText:"Enroll",qrCodeUrl:enrollQrCode,onSubmit:async fields=>{let res=await medplum.post("auth/mfa/login-enroll",{login,token:fields.token});handleAuthResponse(res)}}):mfaRequired?(0,import_jsx_runtime46.jsx)(MfaForm,{title:"Enter MFA code",description:"Enter the code from your authenticator app.",buttonText:"Submit Code",onSubmit:async fields=>{let res=await medplum.post("auth/mfa/verify",{login,token:fields.token});handleAuthResponse(res)}}):props.projectId==="new"?(0,import_jsx_runtime46.jsx)(NewProjectForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime46.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime46.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime46.jsx)("div",{children:"Success"}):(0,import_jsx_runtime46.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core79=require("@medplum/core"),import_react38=require("react");var import_core77=require("@mantine/core"),import_core78=require("@medplum/core");var import_react37=require("react");var import_core65=require("@medplum/core"),import_jsx_runtime47=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime47.jsx)(import_jsx_runtime47.Fragment,{children:(0,import_core65.formatCodeableConcept)(props.value)})}var import_core66=require("@medplum/core"),import_jsx_runtime48=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment,{children:(0,import_core66.formatCoding)(props.value,props.includeCode)})}var import_jsx_runtime49=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_runtime49.jsx)(import_jsx_runtime49.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime50=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime50.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_core68=require("@medplum/core"),import_react_hooks24=require("@medplum/react-hooks"),import_react34=require("react");var import_core67=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core67.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_core67.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_runtime51=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=(0,import_react_hooks24.useMedplum)(),ctx=(0,import_react34.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react34.useState)((0,import_core68.getDataType)("Extension")),profileUrl=(0,import_react34.useMemo)(()=>{if((0,import_core68.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react34.useState)(profileUrl!==void 0);if((0,import_react34.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core68.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core68.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime51.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_runtime51.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime51.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_runtime52=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime52.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core69=require("@medplum/core"),import_jsx_runtime53=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime53.jsx)(import_jsx_runtime53.Fragment,{children:(0,import_core69.formatMoney)(props.value)})}var import_core70=require("@medplum/core"),import_jsx_runtime54=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime54.jsx)(import_jsx_runtime54.Fragment,{children:(0,import_core70.formatQuantity)(props.value,props.precision)})}var import_core71=require("@medplum/core"),import_jsx_runtime55=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:(0,import_core71.formatRange)(props.value,props.precision,props.exclusive)})}var import_jsx_runtime56=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime56.jsxs)(import_jsx_runtime56.Fragment,{children:[(0,import_jsx_runtime56.jsx)(QuantityDisplay,{value:value.numerator,precision:props.precision}),"\xA0/\xA0",(0,import_jsx_runtime56.jsx)(QuantityDisplay,{value:value.denominator,precision:props.precision})]}):null}var import_core72=require("@medplum/core");var import_jsx_runtime57=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core72.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime57.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment,{children:displayString})}var import_core75=require("@mantine/core"),import_core76=require("@medplum/core"),import_react_hooks25=require("@medplum/react-hooks"),import_react36=require("react");var import_core73=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core73.isPopulated)(slicing?.slices))return[values];let slicedValues=new Array(slices.length+1);for(let i=0;i<slicedValues.length;i++)slicedValues[i]=[];for(let value of values){let sliceName=(0,import_core73.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}return slicedValues}async function prepareSlices({medplum,property}){return new Promise((resolve,reject)=>{if(!property.slicing){resolve([]);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!(0,import_core73.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core73.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl&&promises.push(medplum.requestProfileSchema(profileUrl))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core73.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core74=require("@medplum/core"),import_react35=require("react");var import_jsx_runtime58=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime58.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime59=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react35.useContext)(ElementsContext),contextValue=(0,import_react35.useMemo)(()=>{if((0,import_core74.isPopulated)(sliceElements))return(0,import_core74.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_runtime59.jsx)(import_jsx_runtime59.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime59.jsx)("div",{children:(0,import_jsx_runtime59.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_runtime60=require("react/jsx-runtime"),MAX_ARRAY_SIZE=50;function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=(0,import_react_hooks25.useMedplum)(),values=(0,import_react36.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react36.useState)(!0),[slices,setSlices]=(0,import_react36.useState)([]),[slicedValues,setSlicedValues]=(0,import_react36.useState)(()=>[values]),[valuesLength,setValuesLength]=(0,import_react36.useState)(0),ctx=(0,import_react36.useContext)(ElementsContext);if((0,import_react36.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setValuesLength(values.length),setSlices(slices2);let limitedValues=values.slice(0,MAX_ARRAY_SIZE),slicedValues2=assignValuesIntoSlices(limitedValues,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime60.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_runtime60.jsx)("div",{children:(0,import_jsx_runtime60.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_core76.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime60.jsx)(DescriptionListEntry,{term:(0,import_core76.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime60.jsx)(import_jsx_runtime60.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime60.jsxs)(import_jsx_runtime60.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw new Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime60.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_runtime60.jsx)(DescriptionListEntry,{term:(0,import_core76.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent,valuesLength>MAX_ARRAY_SIZE&&(0,import_jsx_runtime60.jsx)(import_core75.Group,{justify:"right",children:(0,import_jsx_runtime60.jsxs)(import_core75.Text,{children:["... ",valuesLength," total values"]})})]})}var import_jsx_runtime61=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime61.jsxs)(import_core77.Flex,{gap:3,align:"center",children:[value,!(0,import_core78.isEmpty)(value)&&(0,import_jsx_runtime61.jsx)(import_core77.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime61.jsx)(import_core77.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime61.jsx)(import_core77.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime61.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime61.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core78.PropertyType.Attachment?(0,import_jsx_runtime61.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime61.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core78.PropertyType.boolean:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core78.PropertyType.SystemString:case import_core78.PropertyType.string:return props.property?.path?.toLowerCase().includes("secret")?(0,import_jsx_runtime61.jsx)(SecretFieldDisplay,{value}):(0,import_jsx_runtime61.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core78.PropertyType.code:case import_core78.PropertyType.date:case import_core78.PropertyType.decimal:case import_core78.PropertyType.id:case import_core78.PropertyType.integer:case import_core78.PropertyType.positiveInt:case import_core78.PropertyType.unsignedInt:case import_core78.PropertyType.uri:case import_core78.PropertyType.url:case import_core78.PropertyType.xhtml:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:value});case import_core78.PropertyType.canonical:return(0,import_jsx_runtime61.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core78.PropertyType.dateTime:case import_core78.PropertyType.instant:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:(0,import_core78.formatDateTime)(value)});case import_core78.PropertyType.time:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:(0,import_core78.formatWallTime)(value)});case import_core78.PropertyType.markdown:return(0,import_jsx_runtime61.jsx)("pre",{children:value});case import_core78.PropertyType.Address:return(0,import_jsx_runtime61.jsx)(AddressDisplay,{value});case import_core78.PropertyType.Annotation:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:value?.text});case import_core78.PropertyType.Attachment:return(0,import_jsx_runtime61.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core78.PropertyType.CodeableConcept:return(0,import_jsx_runtime61.jsx)(CodeableConceptDisplay,{value});case import_core78.PropertyType.Coding:return(0,import_jsx_runtime61.jsx)(CodingDisplay,{value});case import_core78.PropertyType.ContactDetail:return(0,import_jsx_runtime61.jsx)(ContactDetailDisplay,{value});case import_core78.PropertyType.ContactPoint:return(0,import_jsx_runtime61.jsx)(ContactPointDisplay,{value});case import_core78.PropertyType.HumanName:return(0,import_jsx_runtime61.jsx)(HumanNameDisplay,{value});case import_core78.PropertyType.Identifier:return(0,import_jsx_runtime61.jsx)(IdentifierDisplay,{value});case import_core78.PropertyType.Money:return(0,import_jsx_runtime61.jsx)(MoneyDisplay,{value});case import_core78.PropertyType.Period:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:(0,import_core78.formatPeriod)(value)});case import_core78.PropertyType.Quantity:case import_core78.PropertyType.Duration:return(0,import_jsx_runtime61.jsx)(QuantityDisplay,{value});case import_core78.PropertyType.Range:return(0,import_jsx_runtime61.jsx)(RangeDisplay,{value});case import_core78.PropertyType.Ratio:return(0,import_jsx_runtime61.jsx)(RatioDisplay,{value});case import_core78.PropertyType.Reference:return(0,import_jsx_runtime61.jsx)(ReferenceDisplay,{value,link:props.link});case import_core78.PropertyType.Timing:return(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:(0,import_core78.formatTiming)(value)});case import_core78.PropertyType.Dosage:case import_core78.PropertyType.UsageContext:if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime61.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core78.PropertyType.Extension:if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime61.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw new Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime61.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}function SecretFieldDisplay(props){let[isVisible,setIsVisible]=(0,import_react37.useState)(!1),secretValue=props.value??"",hasValue=!(0,import_core78.isEmpty)(secretValue),MASK="\u2022".repeat(8);return(0,import_jsx_runtime61.jsxs)(import_core77.Flex,{gap:3,align:"center",children:[isVisible?(0,import_jsx_runtime61.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:secretValue}):(0,import_jsx_runtime61.jsx)("div",{style:{whiteSpace:"pre-wrap"},"aria-hidden":"true",children:hasValue?MASK:""}),hasValue&&(0,import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment,{children:[(0,import_jsx_runtime61.jsx)(import_core77.CopyButton,{value:props.value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime61.jsx)(import_core77.Tooltip,{label:copied?"Copied":"Copy secret",withArrow:!0,position:"right",children:(0,import_jsx_runtime61.jsx)(import_core77.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,"aria-label":copied?"Copied":"Copy secret",children:copied?(0,import_jsx_runtime61.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime61.jsx)(IconCopy,{size:"1rem"})})})}),(0,import_jsx_runtime61.jsx)(import_core77.Tooltip,{label:isVisible?"Hide secret":"Show secret",withArrow:!0,position:"right",children:(0,import_jsx_runtime61.jsx)(import_core77.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>setIsVisible(!isVisible),"aria-label":isVisible?"Hide secret":"Show secret",children:isVisible?(0,import_jsx_runtime61.jsx)(IconEyeOff,{size:"1rem"}):(0,import_jsx_runtime61.jsx)(IconEye,{size:"1rem"})})})]})]})}var import_jsx_runtime62=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_react38.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react38.useMemo)(()=>(0,import_core79.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react38.useMemo)(()=>{if(typeSchema)return(0,import_core79.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if((0,import_core79.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime62.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_runtime62.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime62.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core79.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_core79.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime62.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_runtime62.jsx)(DescriptionListEntry,{term:(0,import_core79.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core113=require("@mantine/core"),import_core114=require("@medplum/core");var import_react62=require("react");var import_core111=require("@mantine/core"),import_core112=require("@medplum/core"),import_react61=require("react");var import_core81=require("@mantine/core"),import_react39=require("react");var FormSection_default={dimmed:"FormSection_dimmed",preserveBreaks:"FormSection_preserveBreaks"};var import_core80=require("@mantine/core"),import_jsx_runtime63=require("react/jsx-runtime"),READ_ONLY_TOOLTIP_TEXT="Read Only";function maybeWrapWithTooltip(tooltipText,children){return tooltipText?(0,import_jsx_runtime63.jsx)(import_core80.Tooltip.Floating,{label:tooltipText,children}):children}var import_jsx_runtime64=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react39.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_runtime64.jsxs)(import_core81.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime64.jsx)("div",{children:props.children}),(0,import_jsx_runtime64.jsx)("div",{children:(0,import_jsx_runtime64.jsx)(import_core81.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_core82=require("@mantine/core");var import_react40=require("react");var import_jsx_runtime65=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react40.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_runtime65.jsx)(import_core82.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_core83=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_core83.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return(0,import_core83.isEmpty)(value)?obj[propName]=void 0:obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core83.isEmpty)(profile.url)&&!(0,import_core83.isEmpty)(profile.name)}var import_core109=require("@mantine/core"),import_core110=require("@medplum/core"),import_react60=require("react");var import_react41=require("react");var import_jsx_runtime66=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react41.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime66.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_react42=require("react");var import_jsx_runtime67=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,response,...rest}=props,[value,setValue]=(0,import_react42.useState)(response?.answer?.[0]?.valueCoding??defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime67.jsx)(ValueSetAutocomplete,{defaultValue:value?codingToValueSetElement(value):void 0,maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core85=require("@mantine/core"),import_react44=require("react");var import_core84=require("@mantine/core"),import_react43=require("react");var import_jsx_runtime68=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath,getExtendedProps}=(0,import_react43.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react43.useState)(props.defaultValue),[systemElement,useElement,valueElement]=(0,import_react43.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]),[systemProps,useProps,valueProps]=(0,import_react43.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={...contactPoint,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...contactPoint,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...contactPoint,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime68.jsxs)(import_core84.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime68.jsx)(import_core84.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_runtime68.jsx)(import_core84.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_runtime68.jsx)(import_core84.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_runtime69=require("react/jsx-runtime");function ContactDetailInput(props){let[contactDetail,setContactDetail]=(0,import_react44.useState)(props.defaultValue),{getExtendedProps}=(0,import_react44.useContext)(ElementsContext),[nameProps,telecomProps]=(0,import_react44.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={...contactDetail,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...contactDetail,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime69.jsxs)(import_core85.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime69.jsx)(import_core85.TextInput,{disabled:props.disabled||nameProps?.readonly,"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactDetail?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime69.jsx)(ContactPointInput,{disabled:props.disabled||telecomProps?.readonly,name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactDetail?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core87=require("@mantine/core");var import_core86=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core86.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core86.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime70=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime70.jsx)(import_core87.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props["data-testid"]??props.name,placeholder:props.placeholder,required:props.required,disabled:props.disabled,type:getInputType(),step:1,defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core88=require("@medplum/core"),import_react_hooks26=require("@medplum/react-hooks"),import_react45=require("react");var import_jsx_runtime71=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=(0,import_react_hooks26.useMedplum)(),profileUrl=(0,import_react45.useMemo)(()=>{if((0,import_core88.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react45.useState)(profileUrl!==void 0);return(0,import_react45.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>setLoadingProfile(!1)).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core88.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime71.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime71.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core89=require("@mantine/core"),import_react46=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react46.useState)(props.defaultValue),{getExtendedProps}=(0,import_react46.useContext)(ElementsContext),[useProps,prefixProps,givenProps,familyProps,suffixProps]=(0,import_react46.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_runtime72.jsxs)(import_core89.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime72.jsx)(import_core89.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_runtime72.jsx)(import_core89.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_runtime72.jsx)(import_core89.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_runtime72.jsx)(import_core89.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_runtime72.jsx)(import_core89.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_core90=require("@mantine/core"),import_react47=require("react");var import_jsx_runtime73=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react47.useState)(props.defaultValue),{elementsByPath,getExtendedProps}=(0,import_react47.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react47.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]),[systemProps,valueProps]=(0,import_react47.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_runtime73.jsxs)(import_core90.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime73.jsx)(import_core90.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_runtime73.jsx)(import_core90.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_core91=require("@mantine/core");var import_react48=require("react");var import_jsx_runtime74=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react48.useState)(props.defaultValue),{getExtendedProps}=(0,import_react48.useContext)(ElementsContext),[currencyProps,valueProps]=(0,import_react48.useMemo)(()=>["currency","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),setValueWrapper=(0,import_react48.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react48.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react48.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime74.jsx)(import_core91.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_runtime74.jsx)(import_core91.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_runtime74.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core92=require("@mantine/core"),import_react49=require("react");var import_jsx_runtime75=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react49.useState)(props.defaultValue),{getExtendedProps}=(0,import_react49.useContext)(ElementsContext),[startProps,endProps]=(0,import_react49.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_runtime75.jsxs)(import_core92.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime75.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_runtime75.jsx)(DateTimeInput,{disabled:props.disabled||endProps?.readonly,name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core93=require("@mantine/core"),import_react50=require("react");var import_jsx_runtime76=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react50.useState)(props.defaultValue),{getExtendedProps}=(0,import_react50.useContext)(ElementsContext),[comparatorProps,valueProps,unitProps]=(0,import_react50.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_runtime76.jsxs)(import_core93.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime76.jsx)(import_core93.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_runtime76.jsx)(import_core93.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_runtime76.jsx)(import_core93.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 Number.parseFloat(str)}var import_core94=require("@mantine/core"),import_react51=require("react");var import_jsx_runtime77=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react51.useState)(props.defaultValue),{getExtendedProps}=(0,import_react51.useContext)(ElementsContext),[lowProps,highProps]=(0,import_react51.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_runtime77.jsxs)(import_core94.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime77.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_runtime77.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_core95=require("@mantine/core"),import_react52=require("react");var import_jsx_runtime78=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue),{getExtendedProps}=(0,import_react52.useContext)(ElementsContext),[numeratorProps,denominatorProps]=(0,import_react52.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_runtime78.jsxs)(import_core95.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime78.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_runtime78.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_core98=require("@mantine/core"),import_core99=require("@medplum/core"),import_react_hooks28=require("@medplum/react-hooks"),import_react55=require("react");var import_react54=require("react");var import_core96=require("@mantine/core"),import_core97=require("@medplum/core"),import_react_hooks27=require("@medplum/react-hooks"),import_react53=require("react");var import_jsx_runtime79=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_core97.getReferenceString)(resource)??"",label:(0,import_core97.getDisplayString)(resource),resource}}function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var DefaultResourceItemComponent=(0,import_react53.forwardRef)(({label,resource,active:_active,...others},ref)=>(0,import_jsx_runtime79.jsx)("div",{ref,...others,children:(0,import_jsx_runtime79.jsxs)(import_core96.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime79.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime79.jsxs)("div",{children:[(0,import_jsx_runtime79.jsx)(import_core96.Text,{children:label}),(0,import_jsx_runtime79.jsx)(import_core96.Text,{size:"xs",c:"dimmed",children:resource.birthDate||resource.id})]})]})}));DefaultResourceItemComponent.displayName="DefaultResourceItemComponent";function MultiResourceInput(props){let medplum=(0,import_react_hooks27.useMedplum)(),{resourceType,searchCriteria}=props,ItemComponent3=props.itemComponent??DefaultResourceItemComponent,onChange=props.onChange,initialDefaultValue=(0,import_react53.useRef)(props.defaultValue),[defaultResources,setDefaultResources]=(0,import_react53.useState)(!props.defaultValue||props.defaultValue.length===0?[]:void 0);(0,import_react53.useEffect)(()=>{let cancelled=!1,items=initialDefaultValue.current;return items&&items.length>0&&Promise.allSettled(items.map(item=>{if((0,import_core97.isResource)(item))return Promise.resolve(item);if((0,import_core97.isReference)(item)){let ref=item;return medplum.readReference(ref)}return Promise.reject(new Error("Not a resolvable item"))})).then(settled=>{cancelled||setDefaultResources(settled.filter(r2=>r2.status==="fulfilled").map(r2=>r2.value))}).catch(()=>{}),()=>{cancelled=!0}},[medplum]);let loadValues=(0,import_react53.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_react53.useCallback)(newResources=>{onChange&&onChange(newResources)},[onChange]);return defaultResources===void 0?null:(0,import_jsx_runtime79.jsx)(AsyncAutocomplete,{disabled:props.disabled,name:props.name,label:props.label,error:props.error,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultResources,placeholder:props.placeholder,maxValues:props.maxValues,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var import_jsx_runtime80=require("react/jsx-runtime");function ResourceInput(props){let onChange=props.onChange,handleChange=(0,import_react54.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_jsx_runtime80.jsx)(MultiResourceInput,{resourceType:props.resourceType,name:props.name,defaultValue:props.defaultValue?[props.defaultValue]:void 0,searchCriteria:props.searchCriteria,placeholder:props.placeholder,required:props.required,itemComponent:props.itemComponent,onChange:handleChange,disabled:props.disabled,label:props.label,error:props.error,maxValues:1})}var import_jsx_runtime81=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=(0,import_react_hooks28.useMedplum)(),[value,setValue]=(0,import_react55.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react55.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react55.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react55.useRef)(new import_core99.LRUCache),searchCriteria=(0,import_react55.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react55.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_core99.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_core99.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_react55.useCallback)(item=>{let newValue=item?(0,import_core99.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react55.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_runtime81.jsxs)(import_jsx_runtime81.Fragment,{children:[props.name&&(0,import_jsx_runtime81.jsx)("input",{type:"hidden",name:props.name,value:value?.reference??""}),(0,import_jsx_runtime81.jsxs)(import_core98.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime81.jsx)(import_core98.NativeSelect,{name:props.name+"-resourceType",disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:targetType?.resourceType,autoFocus:props.autoFocus,onChange:e=>{let newValue=e.currentTarget.value,newTargetType=targetTypes.find(tt=>tt.value===newValue);setTargetType(newTargetType)},data:typeSelectOptions}),!targetTypes&&(0,import_jsx_runtime81.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_runtime81.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_core99.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
102
+ }`.replaceAll(/\s+/g," ")}function getResourcesFromResponse2(response){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),dedupeResources2(resources)}function dedupeResources2(resources){let ids=new Set,result=[];for(let resource of resources)resource.id&&!ids.has(resource.id)&&(ids.add(resource.id),result.push(resource));return result}function patientsToActions(patients,navigate){let patientActions=patients.filter(p=>!!p.id).map(patient=>({id:patient.id,label:patient.name?(0,import_core29.formatHumanName)(patient.name[0]):patient.id,description:patient.birthDate,leftSection:(0,import_jsx_runtime19.jsx)(ResourceAvatar,{value:patient,radius:"xl",size:24}),onClick:()=>navigate(`/Patient/${patient.id}`)}));return patientActions.length>0?[{group:"Patients",actions:patientActions}]:[]}function resourcesToActions(resources,resourceTypes,navigate){let result=[],resourceTypeActions=resourceTypes.map(rt=>({id:`resource-type-${rt.code}`,label:rt.display??rt.code??"",description:"Resource Type",onClick:()=>navigate(`/${rt.code}`)}));resourceTypeActions.length>0&&result.push({group:"Resource Types",actions:resourceTypeActions});let patientActions=[],serviceRequestActions=[];for(let resource of resources)resource.resourceType==="Patient"&&resource.id?patientActions.push({id:resource.id,label:resource.name?(0,import_core29.formatHumanName)(resource.name[0]):resource.id,description:resource.birthDate,leftSection:(0,import_jsx_runtime19.jsx)(ResourceAvatar,{value:resource,radius:"xl",size:24}),onClick:()=>navigate(`/Patient/${resource.id}`)}):resource.resourceType==="ServiceRequest"&&resource.id&&serviceRequestActions.push({id:resource.id,label:resource.id,description:resource.subject?.display,onClick:()=>navigate(`/ServiceRequest/${resource.id}`)});return patientActions.length>0&&result.push({group:"Patients",actions:patientActions}),serviceRequestActions.length>0&&result.push({group:"Service Requests",actions:serviceRequestActions}),result}var import_jsx_runtime20=require("react/jsx-runtime");function Navbar(props){let navigate=(0,import_react_hooks10.useMedplumNavigate)(),profile=(0,import_react_hooks10.useMedplumProfile)(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[userMenuOpened,setUserMenuOpened]=(0,import_react17.useState)(!1),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react17.useState)(!1);function onLinkClick2(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}let opened=props.opened??!0;return(0,import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment,{children:[(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Navbar,{id:"navbar",className:Navbar_default.navbar,children:[props.logo&&(0,import_jsx_runtime20.jsx)(import_core30.AppShell.Section,{px:"xs",pt:"xs",pb:"4px",children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{className:Navbar_default.logoButton,onClick:props.navbarToggle,"aria-expanded":opened,"aria-controls":"navbar","aria-label":"Medplum Logo",children:props.logo})}),(0,import_jsx_runtime20.jsx)(import_core30.ScrollArea,{px:"xs",pb:"xs",pt:"sm",h:"100%",children:(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Section,{grow:!0,children:[props.spotlightEnabled&&(0,import_jsx_runtime20.jsx)(import_core30.Box,{mb:2,children:(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Search",position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:Navbar_default.link,onClick:()=>import_spotlight2.spotlight.open(),"aria-label":"Search",children:[(0,import_jsx_runtime20.jsx)(IconSearch,{size:"1.2rem"}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:"Search"})]})})}),props.spotlightEnabled&&(0,import_jsx_runtime20.jsx)(Spotlight,{patientsOnly:props.patientsOnly}),!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime20.jsx)(import_core30.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime20.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),props.menus?.map((menu,index)=>(0,import_jsx_runtime20.jsxs)(import_react17.Fragment,{children:[menu.title&&(0,import_jsx_runtime20.jsx)(import_core30.Text,{className:Navbar_default.menuTitle,"data-opened":opened||void 0,children:menu.title}),(0,import_jsx_runtime20.jsx)(import_core30.Stack,{gap:"2",children:menu.links?.map(link=>link.notificationCount?(0,import_jsx_runtime20.jsx)(NavbarLinkWithSubscription,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick2(e,link.href),icon:link.icon,label:link.label??"",opened,alert:link.alert,notificationCount:link.notificationCount,onDismiss:link.onDismiss},link.href):(0,import_jsx_runtime20.jsx)(NavbarLinkContent,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick2(e,link.href),icon:link.icon,label:link.label??"",opened,alert:link.alert,count:link.count,onDismiss:link.onDismiss},link.href))})]},`menu-${menu.title??index}`)),props.displayAddBookmark&&(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Add Bookmark",position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:`${Navbar_default.link} ${Navbar_default.addBookmarkLink}`,onClick:()=>setBookmarkDialogVisible(!0),children:[(0,import_jsx_runtime20.jsx)(IconCirclePlus,{}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:"Add Bookmark"})]})})]})}),props.userMenuEnabled&&(0,import_jsx_runtime20.jsxs)(import_core30.AppShell.Section,{px:"xs",py:"xs",children:[(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:opened?"Close Sidebar":"Open Sidebar",position:"right",transitionProps:{duration:0},children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{className:Navbar_default.toggleButton,"aria-label":opened?"Close Sidebar":"Open Sidebar",onClick:props.navbarToggle,"aria-expanded":opened,"aria-controls":"navbar",children:(0,import_jsx_runtime20.jsx)(IconLayoutSidebar,{})})}),(0,import_jsx_runtime20.jsx)(import_core30.Divider,{my:"xs",mx:6,className:Navbar_default.divider}),(0,import_jsx_runtime20.jsxs)(import_core30.Menu,{width:260,shadow:"xl",position:"top-start",transitionProps:{transition:"fade-up"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime20.jsx)(import_core30.Menu.Target,{children:(0,import_jsx_runtime20.jsxs)(import_core30.UnstyledButton,{className:Navbar_default.link,pl:"7","aria-label":"User menu","data-active":userMenuOpened||void 0,onClick:()=>setUserMenuOpened(o=>!o),bd:"1px 0 0 0 solid var(--mantine-color-gray-200)",children:[(0,import_jsx_runtime20.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:(0,import_core31.formatHumanName)(profile?.name?.[0])})]})}),(0,import_jsx_runtime20.jsx)(import_core30.Menu.Dropdown,{children:(0,import_jsx_runtime20.jsx)(HeaderDropdown,{version:props.version,showLayoutVersionToggle:props.showLayoutVersionToggle})})]})]})]}),props.pathname&&props.searchParams&&(0,import_jsx_runtime20.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLinkContent(props){let{to,icon,label,onClick,active,count,alert,opened,onDismiss}=props,showCount=count!==void 0&&count>0,iconElement=icon??(0,import_jsx_runtime20.jsx)(IconBookmark,{}),showDot=showCount&&alert&&!opened;function handleDismiss(e){e.preventDefault(),e.stopPropagation(),onDismiss?.()}return(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label,position:"right",transitionProps:{duration:0},disabled:opened,children:(0,import_jsx_runtime20.jsxs)(MedplumLink,{to,onClick,className:Navbar_default.link,"data-active":active||void 0,children:[(0,import_jsx_runtime20.jsxs)("span",{className:Navbar_default.iconWrapper,children:[iconElement,showDot&&(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.alertDot})]}),(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkLabel,"data-opened":opened||void 0,children:label}),showCount&&(0,import_jsx_runtime20.jsx)("span",{className:Navbar_default.linkCount,"data-opened":opened||void 0,"data-alert":alert||void 0,children:count.toLocaleString()}),onDismiss&&opened&&(0,import_jsx_runtime20.jsx)(import_core30.Tooltip,{label:"Dismiss",openDelay:500,children:(0,import_jsx_runtime20.jsx)(import_core30.UnstyledButton,{"aria-label":"Dismiss",className:Navbar_default.dismissButton,onClick:handleDismiss,children:(0,import_jsx_runtime20.jsx)(IconX,{size:14})})})]})})}function NavbarLinkWithSubscription(props){let count=(0,import_react_hooks10.useNotificationCount)(props.notificationCount);return(0,import_jsx_runtime20.jsx)(NavbarLinkContent,{to:props.to,active:props.active,onClick:props.onClick,icon:props.icon,label:props.label,opened:props.opened,alert:props.alert,count,onDismiss:props.onDismiss})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&&currentSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime21=require("react/jsx-runtime"),OPEN_WIDTH=250,CLOSED_WIDTH=59;function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react18.useState)(localStorage.navbarOpen==="true"),[layoutVersion]=(0,import_react18.useState)(props.layoutVersion??localStorage.appShellLayoutVersion??"v1"),medplum=(0,import_react_hooks11.useMedplum)(),profile=(0,import_react_hooks11.useMedplumProfile)();function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}if(medplum.isLoading())return(0,import_jsx_runtime21.jsx)(Loading,{});let headerProp,navbarProp,headerComponent,navbarComponent;return layoutVersion==="v2"?(headerProp={height:0},navbarProp={width:navbarOpen?OPEN_WIDTH:CLOSED_WIDTH,breakpoint:0,collapsed:{desktop:!profile,mobile:!profile}},headerComponent=void 0,navbarComponent=profile?(0,import_jsx_runtime21.jsx)(Navbar,{logo:props.logo,pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,navbarToggle:toggleNavbar,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:!0,opened:navbarOpen,spotlightEnabled:!0,patientsOnly:props.spotlightPatientsOnly,userMenuEnabled:!0,version:props.version,showLayoutVersionToggle:props.showLayoutVersionToggle}):void 0):(headerProp={height:60},navbarProp={width:OPEN_WIDTH,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},headerComponent=profile&&(0,import_jsx_runtime21.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarOpen,navbarToggle:toggleNavbar,notifications:props.notifications}),navbarComponent=profile&&navbarOpen?(0,import_jsx_runtime21.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,navbarToggle:toggleNavbar,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled,patientsOnly:props.spotlightPatientsOnly}):void 0),(0,import_jsx_runtime21.jsxs)(import_core32.AppShell,{header:headerProp,navbar:navbarProp,padding:0,children:[headerComponent,navbarComponent,(0,import_jsx_runtime21.jsx)(import_core32.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime21.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime21.jsx)(import_react18.Suspense,{fallback:(0,import_jsx_runtime21.jsx)(Loading,{}),children:props.children})})})]})}var import_core37=require("@medplum/core");var import_core35=require("@mantine/core"),import_core36=require("@medplum/core"),import_react_hooks12=require("@medplum/react-hooks");var import_core33=require("@mantine/core"),import_react19=require("react");var import_jsx_runtime22=require("react/jsx-runtime"),CCDA_VIEWER_URL="https://ccda.medplum.com",BASE_VALIDATION_URL="https://ccda-validator.medplum.com/";function CcdaDisplay(props){let{url}=props,[shouldSend,setShouldSend]=(0,import_react19.useState)(!1),iframeRef=(0,import_react19.useRef)(null),[validationResult,setValidationResult]=(0,import_react19.useState)(),[validating,setValidating]=(0,import_react19.useState)(!1);(0,import_react19.useEffect)(()=>{url&&shouldSend&&iframeRef.current&&(sendCommand(iframeRef.current,{command:"loadCcdaXml",value:url}).catch(console.error),setShouldSend(!1))},[url,shouldSend]);let validateCcda=async()=>{if(url)try{setValidating(!0);let ccdaContent=await(await fetch(url)).text(),formData=new FormData;formData.append("ccdaFile",new Blob([ccdaContent],{type:"text/xml"}),"ccda.xml");let validationUrl=`${BASE_VALIDATION_URL}referenceccdaservice/?validationObjective=C-CDA_IG_Plus_Vocab&referenceFileName=No%20scenario%20File&curesUpdate=true&severityLevel=WARNING`,validationResponse=await fetch(validationUrl,{method:"POST",body:formData,credentials:"omit",redirect:"manual"});if(!validationResponse.ok)throw new Error(`Validation failed: ${validationResponse.status} ${validationResponse.statusText}`);let validationResult2=await validationResponse.json();setValidationResult(validationResult2)}catch(error){setValidationResult(void 0),console.error("CCDA validation error:",error)}finally{setValidating(!1)}},downloadResults=()=>{if(!validationResult)return;let resultsJson=JSON.stringify(validationResult,null,2);exportJsonFile(resultsJson,"ccda-validation-results")},getErrorCount=()=>validationResult?validationResult.resultsMetaData.resultMetaData.filter(item=>item?.type.includes("Error")).reduce((sum,item)=>sum+(item.count||0),0):0;return url?(0,import_jsx_runtime22.jsxs)("div",{"data-testid":"ccda-iframe",style:{maxWidth:props.maxWidth},children:[(0,import_jsx_runtime22.jsx)("div",{style:{minHeight:400},children:(0,import_jsx_runtime22.jsx)("iframe",{title:"C-CDA Viewer",width:"100%",height:"400",ref:iframeRef,src:CCDA_VIEWER_URL,allowFullScreen:!0,frameBorder:0,seamless:!0,onLoad:()=>setShouldSend(!0)})}),(0,import_jsx_runtime22.jsxs)("div",{style:{marginTop:"10px",marginBottom:"10px",display:"flex",alignItems:"center"},children:[(0,import_jsx_runtime22.jsx)(import_core33.Button,{type:"button",onClick:validateCcda,disabled:validating,children:validating?"Validating...":"Validate"}),validationResult&&(0,import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment,{children:[(0,import_jsx_runtime22.jsxs)("div",{style:{marginLeft:"15px"},children:[(0,import_jsx_runtime22.jsx)("strong",{children:"Validation Results:"})," ",getErrorCount()," errors found"]}),(0,import_jsx_runtime22.jsx)(import_core33.Button,{type:"button",onClick:downloadResults,color:"green",style:{marginLeft:"auto"},children:"Download Full Results"})]})]})]}):null}var import_core34=require("@mantine/core"),import_react20=require("react"),import_jsx_runtime23=require("react/jsx-runtime");function ScannedImage(props){let{maxRetries=5,...rest}=props,[attempt,setAttempt]=(0,import_react20.useState)(0),[status,setStatus]=(0,import_react20.useState)("fetching"),timeoutRef=(0,import_react20.useRef)(void 0);(0,import_react20.useEffect)(()=>()=>{timeoutRef.current!==void 0&&clearTimeout(timeoutRef.current)},[]);let handleError=()=>{if(attempt>=maxRetries){setStatus("failed");return}setStatus("backoff");let delay=Math.min(1e3*2**attempt,16e3);timeoutRef.current=setTimeout(()=>{setAttempt(a=>a+1),setStatus("fetching"),timeoutRef.current=void 0},delay)};return status==="failed"?(0,import_jsx_runtime23.jsx)("div",{className:"image-placeholder",children:"Image unavailable"}):status==="backoff"?(0,import_jsx_runtime23.jsx)(import_core34.Loader,{}):(0,import_jsx_runtime23.jsx)("img",{onLoad:()=>setStatus("loaded"),onError:handleError,...rest})}var import_jsx_runtime24=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=(0,import_react_hooks12.useCachedBinaryUrl)(uncachedUrl);return url?(0,import_jsx_runtime24.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime24.jsx)(ScannedImage,{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime24.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime24.jsx)("source",{type:contentType,src:url})}),(contentType?.startsWith("text/")||contentType==="application/json"||contentType==="application/pdf")&&(0,import_jsx_runtime24.jsx)("div",{"data-testid":"attachment-iframe",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime24.jsx)("iframe",{title:"Attachment",width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),contentType===import_core36.ContentType.CDA_XML&&(0,import_jsx_runtime24.jsx)(CcdaDisplay,{url}),(0,import_jsx_runtime24.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime24.jsx)(import_core35.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}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<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f)}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime25=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime25.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment,{children:[(0,import_jsx_runtime25.jsx)("dt",{children:props.term}),(0,import_jsx_runtime25.jsx)("dd",{children:props.children})]})}var import_jsx_runtime26=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v,index)=>(0,import_jsx_runtime26.jsx)("div",{children:(0,import_jsx_runtime26.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_core37.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime26.jsx)(DescriptionListEntry,{term:(0,import_core37.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime26.jsx)(import_jsx_runtime26.Fragment,{children:attachmentElements});return content}var import_core39=require("@mantine/core");var import_react22=require("react");var import_core38=require("@medplum/core"),import_react_hooks13=require("@medplum/react-hooks"),import_react21=require("react");var import_jsx_runtime27=require("react/jsx-runtime");function AttachmentButton(props){let medplum=(0,import_react_hooks13.useMedplum)(),fileInputRef=(0,import_react21.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_core38.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment,{children:[(0,import_jsx_runtime27.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_runtime28=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react22.useState)(props.defaultValue??[]);function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime28.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime28.jsxs)("colgroup",{children:[(0,import_jsx_runtime28.jsx)("col",{width:"97%"}),(0,import_jsx_runtime28.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime28.jsxs)("tbody",{children:[values.map((v,index)=>(0,import_jsx_runtime28.jsxs)("tr",{children:[(0,import_jsx_runtime28.jsx)("td",{children:(0,import_jsx_runtime28.jsx)(AttachmentDisplay,{value:v,maxWidth:200})}),(0,import_jsx_runtime28.jsx)("td",{children:(0,import_jsx_runtime28.jsx)(import_core39.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_runtime28.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime28.jsxs)("tr",{children:[(0,import_jsx_runtime28.jsx)("td",{}),(0,import_jsx_runtime28.jsx)("td",{children:(0,import_jsx_runtime28.jsx)(AttachmentButton,{disabled:props.disabled,onUpload:attachment=>{setValuesWrapper([...values,attachment])},children:props2=>(0,import_jsx_runtime28.jsx)(import_core39.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:props2.disabled?"gray":"green",children:(0,import_jsx_runtime28.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core40=require("@mantine/core"),import_react23=require("react");var import_jsx_runtime29=require("react/jsx-runtime");function AttachmentInput(props){let[value,setValue]=(0,import_react23.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return value?(0,import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment,{children:[(0,import_jsx_runtime29.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime29.jsx)(import_core40.Button,{disabled:props.disabled,onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime29.jsx)(AttachmentButton,{disabled:props.disabled,securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime29.jsx)(import_core40.Button,{...props2,children:"Upload..."})})}var import_core43=require("@mantine/core"),import_core44=require("@medplum/core"),import_react_hooks14=require("@medplum/react-hooks"),import_react24=require("react");var import_core41=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime30=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime30.jsx)(import_core41.Container,{className:Container_default.root,...others,children})}var import_core42=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime31=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime31.jsx)(import_core42.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_jsx_runtime32=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime32.jsx)(Container,{children:(0,import_jsx_runtime32.jsx)(Panel,{...others,children})})}var import_jsx_runtime33=require("react/jsx-runtime");function Logo(props){let overrideUrl=process.env.MEDPLUM_LOGO_URL;return overrideUrl?(0,import_jsx_runtime33.jsx)("img",{src:overrideUrl,alt:"Logo",style:{maxHeight:props.size}}):(0,import_jsx_runtime33.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 180 180",style:{width:props.size,height:props.size},children:[(0,import_jsx_runtime33.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime33.jsx)("path",{fill:props.fill??"#9c36b5",d:"M84 56c-3-15-15-24-23-28l5-10c8 2 14 8 20 14 0-12 1-16 5-21 8-9 13-9 41-9 0 7 1 18-3 24-7 9-16 7-41 8 5 8 7 14 8 22 36-24 74-7 74 39 0 42-40 83-80 83s-80-41-80-83c0-46 38-63 74-39Zm-3 43H65c-4 0-7 3-7 7v4c0 4 3 7 7 7h16v16c0 4 3 7 7 7h4c4 0 7-3 7-7v-16h16c4 0 7-3 7-7v-4c0-4-3-7-7-7H99V83c0-4-3-7-7-7h-4c-4 0-7 3-7 7z"})]})}function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
103
+ `)}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_runtime34=require("react/jsx-runtime");function ChangePasswordForm(props){let{onSuccess}=props,medplum=(0,import_react_hooks14.useMedplum)(),[outcome,setOutcome]=(0,import_react24.useState)(),[success,setSuccess]=(0,import_react24.useState)(!1);return(0,import_jsx_runtime34.jsx)(Document,{width:450,children:(0,import_jsx_runtime34.jsxs)(Form,{onSubmit:formData=>{setOutcome(void 0),medplum.post("auth/changepassword",formData).then(()=>{setSuccess(!0),onSuccess?.()}).catch(err=>setOutcome((0,import_core44.normalizeOperationOutcome)(err)))},children:[(0,import_jsx_runtime34.jsxs)(import_core43.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime34.jsx)(Logo,{size:32}),(0,import_jsx_runtime34.jsx)(import_core43.Title,{children:"Change password"})]}),!success&&(0,import_jsx_runtime34.jsxs)(import_core43.Stack,{gap:"xl",mt:"xl",children:[(0,import_jsx_runtime34.jsx)(import_core43.PasswordInput,{name:"oldPassword",label:"Old password",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"oldPassword")}),(0,import_jsx_runtime34.jsx)(import_core43.PasswordInput,{name:"newPassword",label:"New password",required:!0,error:getErrorsForInput(outcome,"newPassword")}),(0,import_jsx_runtime34.jsx)(import_core43.PasswordInput,{name:"confirmPassword",label:"Confirm new password",required:!0,error:getErrorsForInput(outcome,"confirmPassword")}),(0,import_jsx_runtime34.jsx)(import_core43.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime34.jsx)(import_core43.Button,{type:"submit",children:"Change password"})})]}),success&&(0,import_jsx_runtime34.jsx)("div",{"data-testid":"success",children:"Password changed successfully"})]})})}var import_core45=require("@mantine/core"),import_core46=require("@medplum/core");var import_react25=require("react");var import_jsx_runtime35=require("react/jsx-runtime");function MfaForm(props){let[errorMessage,setErrorMessage]=(0,import_react25.useState)();return(0,import_jsx_runtime35.jsxs)(Form,{onSubmit:formData=>{setErrorMessage(void 0),props.onSubmit(formData)?.catch(err=>setErrorMessage((0,import_core46.normalizeErrorString)(err)))},children:[(0,import_jsx_runtime35.jsxs)(import_core45.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime35.jsx)(Logo,{size:32}),(0,import_jsx_runtime35.jsx)(import_core45.Title,{order:3,py:"lg",children:props.title}),!props.qrCodeUrl&&props.description&&(0,import_jsx_runtime35.jsx)(import_core45.Text,{c:"dimmed",mb:"lg",mt:"-lg",children:props.description})]}),errorMessage&&(0,import_jsx_runtime35.jsx)(import_core45.Alert,{icon:(0,import_jsx_runtime35.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",mb:"lg",children:errorMessage}),props.qrCodeUrl&&(0,import_jsx_runtime35.jsx)(import_core45.Center,{children:(0,import_jsx_runtime35.jsxs)(import_core45.Stack,{mb:"xl",children:[props.description&&(0,import_jsx_runtime35.jsx)(import_core45.Text,{c:"dimmed",mb:"md",mt:"-lg",ta:"center",children:props.description}),(0,import_jsx_runtime35.jsx)(import_core45.Image,{src:props.qrCodeUrl,alt:"Multi Factor Auth QR Code",w:"60%",mx:"auto",radius:"md",p:"xs",bg:"var(--mantine-color-white)",style:{border:"1px solid light-dark(var(--mantine-color-gray-2), var(--mantine-color-dark-4))"}})]})}),(0,import_jsx_runtime35.jsx)(import_core45.Stack,{gap:"sm",children:(0,import_jsx_runtime35.jsx)(import_core45.TextInput,{name:"token",label:"MFA code",autoComplete:"one-time-code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime35.jsx)(import_core45.Stack,{gap:"xs",pt:"md",children:(0,import_jsx_runtime35.jsx)(SubmitButton,{fullWidth:!0,children:props.buttonText})})]})}var import_core55=require("@medplum/core"),import_react_hooks17=require("@medplum/react-hooks"),import_react29=require("react");var import_core47=require("@mantine/core"),import_core48=require("@medplum/core");var import_jsx_runtime36=require("react/jsx-runtime");function OperationOutcomeAlert(props){let{outcome,issues:issuesProp,...spacingProps}=props,issues=outcome?.issue||issuesProp;return!issues||issues.length===0?null:(0,import_jsx_runtime36.jsx)(import_core47.Alert,{icon:(0,import_jsx_runtime36.jsx)(IconAlertCircle,{size:16}),color:"red",...spacingProps,children:issues.map(issue=>(0,import_jsx_runtime36.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core48.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core49=require("@mantine/core"),import_core50=require("@medplum/core"),import_react_hooks15=require("@medplum/react-hooks"),import_react26=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function NewProjectForm(props){let medplum=(0,import_react_hooks15.useMedplum)(),[outcome,setOutcome]=(0,import_react26.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime37.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core50.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime37.jsxs)(import_core49.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime37.jsx)(Logo,{size:32}),(0,import_jsx_runtime37.jsx)(import_core49.Title,{order:3,py:"lg",children:"Create a new project"})]}),(0,import_jsx_runtime37.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),(0,import_jsx_runtime37.jsx)(import_core49.Stack,{gap:"sm",children:(0,import_jsx_runtime37.jsx)(import_core49.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"projectName")})}),(0,import_jsx_runtime37.jsxs)(import_core49.Stack,{gap:"xs",mt:"md",children:[(0,import_jsx_runtime37.jsx)(SubmitButton,{fullWidth:!0,children:"Create Project"}),(0,import_jsx_runtime37.jsxs)(import_core49.Text,{c:"dimmed",size:"xs",pt:"lg",ta:"center",children:['By clicking "Create Project" you agree to the Medplum'," ",(0,import_jsx_runtime37.jsx)(import_core49.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime37.jsx)(import_core49.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]})]})}var import_core53=require("@mantine/core"),import_core54=require("@medplum/core"),import_react_hooks16=require("@medplum/react-hooks"),import_react28=require("react");var import_core51=require("@mantine/core"),import_react27=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_runtime38=require("react/jsx-runtime");function GoogleButton(props){let{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react27.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react27.useState)(typeof google<"u"),initializedRef=(0,import_react27.useRef)(!1),buttonRenderedRef=(0,import_react27.useRef)(!1);return(0,import_react27.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initializedRef.current||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),initializedRef.current=!0),parentRef.current&&!buttonRenderedRef.current&&(google.accounts.id.renderButton(parentRef.current,{type:"standard",logo_alignment:"center",width:parentRef.current.clientWidth}),buttonRenderedRef.current=!0)},[googleClientId,scriptLoaded,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime38.jsx)(import_core51.Box,{ref:parentRef,w:"100%",h:40,display:"flex",style:{justifyContent:"center"}}):null}var import_core52=require("@medplum/core");function getGoogleClientId(clientId){if(clientId)return clientId;let origin=import_core52.locationUtils.getOrigin();if(origin&&("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime39=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=(0,import_react_hooks16.useMedplum)(),[outcome,setOutcome]=(0,import_react28.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react28.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime39.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core54.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime39.jsx)(import_core53.Flex,{direction:"column",align:"center",justify:"center",children:props.children}),(0,import_jsx_runtime39.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),googleClientId&&(0,import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment,{children:[(0,import_jsx_runtime39.jsx)(import_core53.Box,{style:{minHeight:40},children:(0,import_jsx_runtime39.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_core54.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime39.jsx)(import_core53.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime39.jsxs)(import_core53.Stack,{gap:"sm",children:[(0,import_jsx_runtime39.jsx)(import_core53.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime39.jsx)(import_core53.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime39.jsx)(import_core53.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime39.jsx)(import_core53.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")})]}),(0,import_jsx_runtime39.jsxs)(import_core53.Stack,{gap:"xs",children:[(0,import_jsx_runtime39.jsx)(import_core53.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1},pt:"md",pb:"xs"}),(0,import_jsx_runtime39.jsx)(SubmitButton,{fullWidth:!0,children:"Register Account"}),(0,import_jsx_runtime39.jsxs)(import_core53.Text,{c:"dimmed",size:"xs",pt:"lg",ta:"center",children:['By clicking "Register Account" you agree to the Medplum'," ",(0,import_jsx_runtime39.jsx)(import_core53.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime39.jsx)(import_core53.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime39.jsxs)(import_core53.Text,{c:"dimmed",size:"xs",ta:"center",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime39.jsx)(import_core53.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime39.jsx)(import_core53.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]})]})}var import_jsx_runtime40=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=(0,import_react_hooks17.useMedplum)(),[login,setLogin]=(0,import_react29.useState)(props.login),[outcome,setOutcome]=(0,import_react29.useState)(),[emailVerificationRequired,setEmailVerificationRequired]=(0,import_react29.useState)(!1);(0,import_react29.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core55.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code&&medplum.processCode(response.code).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core55.normalizeOperationOutcome)(err))),response.login&&setLogin(response.login),response.emailVerificationRequired&&setEmailVerificationRequired(!0)}let issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime40.jsxs)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:[(0,import_jsx_runtime40.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),!login&&(0,import_jsx_runtime40.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),emailVerificationRequired&&(0,import_jsx_runtime40.jsx)("div",{children:"Please check your email for a verification link. Click the link to continue setting up your account."}),login&&!emailVerificationRequired&&type==="project"&&(0,import_jsx_runtime40.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_core56=require("@mantine/core"),import_core57=require("@medplum/core"),import_react_hooks18=require("@medplum/react-hooks"),import_react30=require("react");var import_jsx_runtime41=require("react/jsx-runtime");function ResetPasswordForm(props){let{projectId,recaptchaSiteKey,onSuccess,onSignIn,onRegister}=props,medplum=(0,import_react_hooks18.useMedplum)(),[outcome,setOutcome]=(0,import_react30.useState)(),[success,setSuccess]=(0,import_react30.useState)(!1);return(0,import_react30.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime41.jsx)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:(0,import_jsx_runtime41.jsxs)(Form,{onSubmit:async formData=>{setOutcome(void 0);try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),await medplum.post("auth/resetpassword",{...formData,projectId,recaptchaToken}),setSuccess(!0),onSuccess?.()}catch(err){setOutcome((0,import_core57.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime41.jsxs)(import_core56.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime41.jsx)(Logo,{size:32}),(0,import_jsx_runtime41.jsx)(import_core56.Title,{order:3,py:"lg",children:"Reset your password"})]}),(0,import_jsx_runtime41.jsx)(OperationOutcomeAlert,{issues:getIssuesForExpression(outcome,void 0),mb:"lg"}),!success&&(0,import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment,{children:[(0,import_jsx_runtime41.jsx)(import_core56.Stack,{gap:"sm",mb:"md",children:(0,import_jsx_runtime41.jsx)(import_core56.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")})}),(0,import_jsx_runtime41.jsxs)(import_core56.Stack,{gap:"xs",children:[(0,import_jsx_runtime41.jsx)(SubmitButton,{fullWidth:!0,children:"Reset Password"}),onSignIn&&(0,import_jsx_runtime41.jsx)(import_core56.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:(0,import_jsx_runtime41.jsx)(import_core56.Anchor,{onClick:onSignIn,children:"Back to Sign In"})}),onRegister&&(0,import_jsx_runtime41.jsxs)(import_core56.Text,{size:"sm",mt:"none",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:["Don't have an account? ",(0,import_jsx_runtime41.jsx)(import_core56.Anchor,{onClick:onRegister,children:"Sign Up"})]})]})]}),success&&(0,import_jsx_runtime41.jsx)(import_core56.Text,{c:"dimmed",size:"sm",ta:"center",mt:"md",children:"If the account exists on our system, a password reset email will be sent."})]})})}var import_core58=require("@mantine/core"),import_core59=require("@medplum/core"),import_react_hooks19=require("@medplum/react-hooks"),import_react31=require("react");var import_jsx_runtime42=require("react/jsx-runtime");function SetPasswordForm(props){let{id,secret,onSuccess,onSignIn}=props,medplum=(0,import_react_hooks19.useMedplum)(),[outcome,setOutcome]=(0,import_react31.useState)(),[success,setSuccess]=(0,import_react31.useState)(!1),issues=getIssuesForExpression(outcome,void 0);return(0,import_jsx_runtime42.jsxs)(Document,{width:450,children:[(0,import_jsx_runtime42.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime42.jsxs)(Form,{onSubmit:formData=>{if(formData.password!==formData.confirmPassword){setOutcome((0,import_core59.badRequest)("Passwords do not match","confirmPassword"));return}setOutcome(void 0),medplum.post("auth/setpassword",{id,secret,password:formData.password}).then(()=>{setSuccess(!0),onSuccess?.()}).catch(err=>setOutcome((0,import_core59.normalizeOperationOutcome)(err)))},children:[(0,import_jsx_runtime42.jsxs)(import_core58.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime42.jsx)(Logo,{size:32}),(0,import_jsx_runtime42.jsx)(import_core58.Title,{children:"Set password"})]}),!success&&(0,import_jsx_runtime42.jsxs)(import_core58.Stack,{children:[(0,import_jsx_runtime42.jsx)(import_core58.PasswordInput,{name:"password",label:"New password",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime42.jsx)(import_core58.PasswordInput,{name:"confirmPassword",label:"Confirm new password",required:!0,error:getErrorsForInput(outcome,"confirmPassword")}),(0,import_jsx_runtime42.jsx)(import_core58.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime42.jsx)(import_core58.Button,{type:"submit",children:"Set password"})})]}),success&&(0,import_jsx_runtime42.jsxs)("div",{"data-testid":"success",children:["Password set. You can now\xA0",onSignIn?(0,import_jsx_runtime42.jsx)(import_core58.Anchor,{component:"button",type:"button",onClick:onSignIn,children:"sign in"}):"sign in","."]})]})]})}var import_notifications3=require("@mantine/notifications"),import_core65=require("@medplum/core"),import_react_hooks23=require("@medplum/react-hooks"),import_react34=require("react");var import_core60=require("@mantine/core"),import_core61=require("@medplum/core"),import_react_hooks20=require("@medplum/react-hooks");var import_react32=require("react");var import_jsx_runtime43=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react32.useState)();return email?(0,import_jsx_runtime43.jsx)(PasswordForm,{email,resetEmail:()=>setEmail(void 0),...props}):(0,import_jsx_runtime43.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react32.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react32.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain,returnTo:import_core61.locationUtils.getLocation()}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),import_core61.locationUtils.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react32.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_react32.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core61.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime43.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime43.jsx)(import_core60.Flex,{direction:"column",align:"center",justify:"center",children}),(0,import_jsx_runtime43.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),googleClientId&&(0,import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment,{children:[(0,import_jsx_runtime43.jsx)(import_core60.Box,{style:{minHeight:40},children:(0,import_jsx_runtime43.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime43.jsx)(import_core60.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime43.jsx)(import_core60.TextInput,{name:"email",type:"email",label:"Email",mb:"md",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email"),"data-testid":"auth.email"}),(0,import_jsx_runtime43.jsxs)(import_core60.Stack,{gap:"xs",children:[!disableEmailAuth&&(0,import_jsx_runtime43.jsx)(SubmitButton,{fullWidth:!0,children:"Continue"}),onRegister&&(0,import_jsx_runtime43.jsxs)(import_core60.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:["Don\u2019t have an account? ",(0,import_jsx_runtime43.jsx)(import_core60.Anchor,{onClick:onRegister,children:"Register"})]})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=(0,import_react_hooks20.useMedplum)(),[outcome,setOutcome]=(0,import_react32.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react32.useCallback)(formData=>medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core61.normalizeOperationOutcome)(err))),[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime43.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime43.jsx)(import_core60.Flex,{direction:"column",align:"center",justify:"center",children}),(0,import_jsx_runtime43.jsx)(OperationOutcomeAlert,{issues,mb:"lg"}),(0,import_jsx_runtime43.jsxs)(import_core60.Stack,{gap:"sm",children:[(0,import_jsx_runtime43.jsx)(import_core60.TextInput,{label:"Email",value:props.email,disabled:!0,rightSectionWidth:36,rightSection:(0,import_jsx_runtime43.jsx)(import_core60.ActionIcon,{variant:"subtle",color:"gray",onClick:props.resetEmail,"aria-label":"Change email",children:(0,import_jsx_runtime43.jsx)(IconPencil,{size:"1rem",stroke:1.5})})}),(0,import_jsx_runtime43.jsx)(import_core60.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password"),"data-testid":"auth.password"})]}),(0,import_jsx_runtime43.jsxs)(import_core60.Stack,{gap:"xs",children:[(0,import_jsx_runtime43.jsx)(import_core60.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1},pt:"md",pb:"xs"}),(0,import_jsx_runtime43.jsx)(SubmitButton,{children:"Sign In"}),onForgotPassword&&(0,import_jsx_runtime43.jsx)(import_core60.Text,{size:"sm",mt:"lg",c:"dimmed",style:{textAlign:"center"},"data-dashlane-ignore":"true","data-lp-ignore":"true","data-no-autofill":"true","data-form-type":"navigation",children:(0,import_jsx_runtime43.jsx)(import_core60.Anchor,{onClick:onForgotPassword,children:"Reset Password"})})]})]})}var import_core62=require("@mantine/core"),import_core63=require("@medplum/core"),import_react_hooks21=require("@medplum/react-hooks");var import_react33=require("react");var ChooseProfileForm_default={option:"ChooseProfileForm_option",iconBox:"ChooseProfileForm_iconBox"};var import_jsx_runtime44=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=(0,import_react_hooks21.useMedplum)(),combobox=(0,import_core62.useCombobox)(),[search,setSearch]=(0,import_react33.useState)(""),[outcome,setOutcome]=(0,import_react33.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)||filterDisplay(getMembershipLabel(membership))}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core63.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime44.jsx)(import_core62.Combobox.Option,{value:item.id,className:ChooseProfileForm_default.option,children:(0,import_jsx_runtime44.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime44.jsxs)(import_core62.Stack,{gap:"0",children:[(0,import_jsx_runtime44.jsxs)(import_core62.Flex,{justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime44.jsx)(Logo,{size:32}),(0,import_jsx_runtime44.jsx)(import_core62.Title,{order:3,py:"lg",children:"Choose a Project"})]}),(0,import_jsx_runtime44.jsx)(OperationOutcomeAlert,{outcome,mb:"lg"}),(0,import_jsx_runtime44.jsxs)(import_core62.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime44.jsx)(import_core62.Combobox.EventsTarget,{children:(0,import_jsx_runtime44.jsx)(import_core62.TextInput,{placeholder:"Search",value:search,mb:"md",autoFocus:!0,leftSection:(0,import_jsx_runtime44.jsx)(IconSearch,{size:16}),onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime44.jsx)("div",{children:(0,import_jsx_runtime44.jsx)(import_core62.Combobox.Options,{style:{marginLeft:"-10px",marginRight:"-10px",marginBottom:"-10px"},children:options.length>0?options:(0,import_jsx_runtime44.jsx)(import_core62.Combobox.Empty,{children:"Nothing found..."})})})]}),(0,import_jsx_runtime44.jsx)(import_core62.Text,{size:"sm",ta:"center",mt:"md",children:(0,import_jsx_runtime44.jsx)(import_core62.Anchor,{component:"button",type:"button",onClick:()=>{window.location.href=`/signin?project=new&login=${props.login}`},children:"Create a new project"})})]})}function getMembershipLabel(membership){return membership.identifier?.find(i=>i.system==="https://medplum.com/identifier/label")?.value}function SelectOption(membership){let label=getMembershipLabel(membership);return(0,import_jsx_runtime44.jsxs)(import_core62.Group,{gap:"xs",align:"center",children:[(0,import_jsx_runtime44.jsx)(import_core62.Box,{className:ChooseProfileForm_default.iconBox,children:(0,import_jsx_runtime44.jsx)(IconBriefcase,{size:16,stroke:2})}),(0,import_jsx_runtime44.jsxs)("div",{children:[(0,import_jsx_runtime44.jsxs)(import_core62.Text,{size:"sm",fw:500,children:[membership.project?.display," ",label?` - ${label}`:""]}),(0,import_jsx_runtime44.jsx)(import_core62.Text,{size:"xs",c:"dimmed",children:membership.profile?.display})]})]})}var import_core64=require("@mantine/core"),import_react_hooks22=require("@medplum/react-hooks"),import_jsx_runtime45=require("react/jsx-runtime");var import_jsx_runtime46=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_hooks22.useMedplum)();return(0,import_jsx_runtime46.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_runtime46.jsxs)(import_core64.Stack,{children:[(0,import_jsx_runtime46.jsxs)(import_core64.Flex,{direction:"column",align:"center",justify:"center",children:[(0,import_jsx_runtime46.jsx)(Logo,{size:32}),(0,import_jsx_runtime46.jsx)(import_core64.Title,{order:3,py:"lg",children:"Choose scope"})]}),(0,import_jsx_runtime46.jsx)(import_core64.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_runtime46.jsxs)(import_jsx_runtime45.Fragment,{children:[(0,import_jsx_runtime46.jsx)(import_core64.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName),additionalScopes?.map(scope=>(0,import_jsx_runtime46.jsx)(import_core64.Checkbox,{id:scope,name:scope,label:scope},scope))]},scopeName+"_group")})}),(0,import_jsx_runtime46.jsx)(import_core64.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime46.jsx)(SubmitButton,{fullWidth:!0,children:"Set Scope"})})]})})}var import_jsx_runtime47=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=(0,import_react_hooks23.useMedplum)(),[login,setLogin]=(0,import_react34.useState)(),loginRequested=(0,import_react34.useRef)(!1),[mfaEnrollRequired,setMfaEnrollRequired]=(0,import_react34.useState)(!1),[enrollQrCode,setEnrollQrCode]=(0,import_react34.useState)(),[mfaRequired,setMfaRequired]=(0,import_react34.useState)(!1),[memberships,setMemberships]=(0,import_react34.useState)(),handleCode=(0,import_react34.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications3.showNotification)({color:"red",message:(0,import_core65.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react34.useCallback)(response=>{setMfaEnrollRequired(!!response.mfaEnrollRequired),setEnrollQrCode(response.enrollQrCode),setMfaRequired(!!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_react34.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react34.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications3.showNotification)({color:"red",message:(0,import_core65.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime47.jsx)(Document,{width:400,px:"xl",py:"xl",bdrs:"md",children:login?mfaEnrollRequired&&enrollQrCode?(0,import_jsx_runtime47.jsx)(MfaForm,{title:"Enroll in MFA",description:"Scan this QR code with your authenticator app.",buttonText:"Enroll",qrCodeUrl:enrollQrCode,onSubmit:async fields=>{let res=await medplum.post("auth/mfa/login-enroll",{login,token:fields.token});handleAuthResponse(res)}}):mfaRequired?(0,import_jsx_runtime47.jsx)(MfaForm,{title:"Enter MFA code",description:"Enter the code from your authenticator app.",buttonText:"Submit Code",onSubmit:async fields=>{let res=await medplum.post("auth/mfa/verify",{login,token:fields.token});handleAuthResponse(res)}}):props.projectId==="new"?(0,import_jsx_runtime47.jsx)(NewProjectForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime47.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime47.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime47.jsx)("div",{children:"Success"}):(0,import_jsx_runtime47.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core80=require("@medplum/core"),import_react39=require("react");var import_core78=require("@mantine/core"),import_core79=require("@medplum/core");var import_react38=require("react");var import_core66=require("@medplum/core"),import_jsx_runtime48=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime48.jsx)(import_jsx_runtime48.Fragment,{children:(0,import_core66.formatCodeableConcept)(props.value)})}var import_core67=require("@medplum/core"),import_jsx_runtime49=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime49.jsx)(import_jsx_runtime49.Fragment,{children:(0,import_core67.formatCoding)(props.value,props.includeCode)})}var import_jsx_runtime50=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_runtime50.jsx)(import_jsx_runtime50.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime51=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime51.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_core69=require("@medplum/core"),import_react_hooks24=require("@medplum/react-hooks"),import_react35=require("react");var import_core68=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core68.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_core68.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_runtime52=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=(0,import_react_hooks24.useMedplum)(),ctx=(0,import_react35.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react35.useState)((0,import_core69.getDataType)("Extension")),profileUrl=(0,import_react35.useMemo)(()=>{if((0,import_core69.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react35.useState)(profileUrl!==void 0);if((0,import_react35.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core69.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core69.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime52.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_runtime52.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime52.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_runtime53=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime53.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core70=require("@medplum/core"),import_jsx_runtime54=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime54.jsx)(import_jsx_runtime54.Fragment,{children:(0,import_core70.formatMoney)(props.value)})}var import_core71=require("@medplum/core"),import_jsx_runtime55=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime55.jsx)(import_jsx_runtime55.Fragment,{children:(0,import_core71.formatQuantity)(props.value,props.precision)})}var import_core72=require("@medplum/core"),import_jsx_runtime56=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime56.jsx)(import_jsx_runtime56.Fragment,{children:(0,import_core72.formatRange)(props.value,props.precision,props.exclusive)})}var import_jsx_runtime57=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment,{children:[(0,import_jsx_runtime57.jsx)(QuantityDisplay,{value:value.numerator,precision:props.precision}),"\xA0/\xA0",(0,import_jsx_runtime57.jsx)(QuantityDisplay,{value:value.denominator,precision:props.precision})]}):null}var import_core73=require("@medplum/core");var import_jsx_runtime58=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core73.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime58.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime58.jsx)(import_jsx_runtime58.Fragment,{children:displayString})}var import_core76=require("@mantine/core"),import_core77=require("@medplum/core"),import_react_hooks25=require("@medplum/react-hooks"),import_react37=require("react");var import_core74=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core74.isPopulated)(slicing?.slices))return[values];let slicedValues=new Array(slices.length+1);for(let i=0;i<slicedValues.length;i++)slicedValues[i]=[];for(let value of values){let sliceName=(0,import_core74.getValueSliceName)(value,slices,slicing.discriminator,profileUrl),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}return slicedValues}async function prepareSlices({medplum,property}){return new Promise((resolve,reject)=>{if(!property.slicing){resolve([]);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!(0,import_core74.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core74.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl&&promises.push(medplum.requestProfileSchema(profileUrl))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core74.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core75=require("@medplum/core"),import_react36=require("react");var import_jsx_runtime59=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime59.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime60=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react36.useContext)(ElementsContext),contextValue=(0,import_react36.useMemo)(()=>{if((0,import_core75.isPopulated)(sliceElements))return(0,import_core75.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_runtime60.jsx)(import_jsx_runtime60.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime60.jsx)("div",{children:(0,import_jsx_runtime60.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_runtime61=require("react/jsx-runtime"),MAX_ARRAY_SIZE=50;function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=(0,import_react_hooks25.useMedplum)(),values=(0,import_react37.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react37.useState)(!0),[slices,setSlices]=(0,import_react37.useState)([]),[slicedValues,setSlicedValues]=(0,import_react37.useState)(()=>[values]),[valuesLength,setValuesLength]=(0,import_react37.useState)(0),ctx=(0,import_react37.useContext)(ElementsContext);if((0,import_react37.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setValuesLength(values.length),setSlices(slices2);let limitedValues=values.slice(0,MAX_ARRAY_SIZE),slicedValues2=assignValuesIntoSlices(limitedValues,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime61.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_runtime61.jsx)("div",{children:(0,import_jsx_runtime61.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_core77.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime61.jsx)(DescriptionListEntry,{term:(0,import_core77.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime61.jsx)(import_jsx_runtime61.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime61.jsxs)(import_jsx_runtime61.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw new Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime61.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_runtime61.jsx)(DescriptionListEntry,{term:(0,import_core77.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent,valuesLength>MAX_ARRAY_SIZE&&(0,import_jsx_runtime61.jsx)(import_core76.Group,{justify:"right",children:(0,import_jsx_runtime61.jsxs)(import_core76.Text,{children:["... ",valuesLength," total values"]})})]})}var import_jsx_runtime62=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime62.jsxs)(import_core78.Flex,{gap:3,align:"center",children:[value,!(0,import_core79.isEmpty)(value)&&(0,import_jsx_runtime62.jsx)(import_core78.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime62.jsx)(import_core78.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime62.jsx)(import_core78.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime62.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime62.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core79.PropertyType.Attachment?(0,import_jsx_runtime62.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime62.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core79.PropertyType.boolean:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core79.PropertyType.SystemString:case import_core79.PropertyType.string:return props.property?.path?.toLowerCase().includes("secret")?(0,import_jsx_runtime62.jsx)(SecretFieldDisplay,{value}):(0,import_jsx_runtime62.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core79.PropertyType.code:case import_core79.PropertyType.date:case import_core79.PropertyType.decimal:case import_core79.PropertyType.id:case import_core79.PropertyType.integer:case import_core79.PropertyType.positiveInt:case import_core79.PropertyType.unsignedInt:case import_core79.PropertyType.uri:case import_core79.PropertyType.url:case import_core79.PropertyType.xhtml:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:value});case import_core79.PropertyType.canonical:return(0,import_jsx_runtime62.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core79.PropertyType.dateTime:case import_core79.PropertyType.instant:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:(0,import_core79.formatDateTime)(value)});case import_core79.PropertyType.time:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:(0,import_core79.formatWallTime)(value)});case import_core79.PropertyType.markdown:return(0,import_jsx_runtime62.jsx)("pre",{children:value});case import_core79.PropertyType.Address:return(0,import_jsx_runtime62.jsx)(AddressDisplay,{value});case import_core79.PropertyType.Annotation:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:value?.text});case import_core79.PropertyType.Attachment:return(0,import_jsx_runtime62.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core79.PropertyType.CodeableConcept:return(0,import_jsx_runtime62.jsx)(CodeableConceptDisplay,{value});case import_core79.PropertyType.Coding:return(0,import_jsx_runtime62.jsx)(CodingDisplay,{value});case import_core79.PropertyType.ContactDetail:return(0,import_jsx_runtime62.jsx)(ContactDetailDisplay,{value});case import_core79.PropertyType.ContactPoint:return(0,import_jsx_runtime62.jsx)(ContactPointDisplay,{value});case import_core79.PropertyType.HumanName:return(0,import_jsx_runtime62.jsx)(HumanNameDisplay,{value});case import_core79.PropertyType.Identifier:return(0,import_jsx_runtime62.jsx)(IdentifierDisplay,{value});case import_core79.PropertyType.Money:return(0,import_jsx_runtime62.jsx)(MoneyDisplay,{value});case import_core79.PropertyType.Period:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:(0,import_core79.formatPeriod)(value)});case import_core79.PropertyType.Quantity:case import_core79.PropertyType.Duration:return(0,import_jsx_runtime62.jsx)(QuantityDisplay,{value});case import_core79.PropertyType.Range:return(0,import_jsx_runtime62.jsx)(RangeDisplay,{value});case import_core79.PropertyType.Ratio:return(0,import_jsx_runtime62.jsx)(RatioDisplay,{value});case import_core79.PropertyType.Reference:return(0,import_jsx_runtime62.jsx)(ReferenceDisplay,{value,link:props.link});case import_core79.PropertyType.Timing:return(0,import_jsx_runtime62.jsx)(import_jsx_runtime62.Fragment,{children:(0,import_core79.formatTiming)(value)});case import_core79.PropertyType.Dosage:case import_core79.PropertyType.UsageContext:if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime62.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core79.PropertyType.Extension:if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime62.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw new Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw new Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime62.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}function SecretFieldDisplay(props){let[isVisible,setIsVisible]=(0,import_react38.useState)(!1),secretValue=props.value??"",hasValue=!(0,import_core79.isEmpty)(secretValue),MASK="\u2022".repeat(8);return(0,import_jsx_runtime62.jsxs)(import_core78.Flex,{gap:3,align:"center",children:[isVisible?(0,import_jsx_runtime62.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:secretValue}):(0,import_jsx_runtime62.jsx)("div",{style:{whiteSpace:"pre-wrap"},"aria-hidden":"true",children:hasValue?MASK:""}),hasValue&&(0,import_jsx_runtime62.jsxs)(import_jsx_runtime62.Fragment,{children:[(0,import_jsx_runtime62.jsx)(import_core78.CopyButton,{value:props.value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime62.jsx)(import_core78.Tooltip,{label:copied?"Copied":"Copy secret",withArrow:!0,position:"right",children:(0,import_jsx_runtime62.jsx)(import_core78.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,"aria-label":copied?"Copied":"Copy secret",children:copied?(0,import_jsx_runtime62.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime62.jsx)(IconCopy,{size:"1rem"})})})}),(0,import_jsx_runtime62.jsx)(import_core78.Tooltip,{label:isVisible?"Hide secret":"Show secret",withArrow:!0,position:"right",children:(0,import_jsx_runtime62.jsx)(import_core78.ActionIcon,{variant:"subtle",color:"gray",onClick:()=>setIsVisible(!isVisible),"aria-label":isVisible?"Hide secret":"Show secret",children:isVisible?(0,import_jsx_runtime62.jsx)(IconEyeOff,{size:"1rem"}):(0,import_jsx_runtime62.jsx)(IconEye,{size:"1rem"})})})]})]})}var import_jsx_runtime63=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_react39.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react39.useMemo)(()=>(0,import_core80.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react39.useMemo)(()=>{if(typeSchema)return(0,import_core80.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if((0,import_core80.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime63.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_runtime63.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime63.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core80.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_core80.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime63.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_runtime63.jsx)(DescriptionListEntry,{term:(0,import_core80.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core114=require("@mantine/core"),import_core115=require("@medplum/core");var import_react63=require("react");var import_core112=require("@mantine/core"),import_core113=require("@medplum/core"),import_react62=require("react");var import_core82=require("@mantine/core"),import_react40=require("react");var FormSection_default={dimmed:"FormSection_dimmed",preserveBreaks:"FormSection_preserveBreaks"};var import_core81=require("@mantine/core"),import_jsx_runtime64=require("react/jsx-runtime"),READ_ONLY_TOOLTIP_TEXT="Read Only";function maybeWrapWithTooltip(tooltipText,children){return tooltipText?(0,import_jsx_runtime64.jsx)(import_core81.Tooltip.Floating,{label:tooltipText,children}):children}var import_jsx_runtime65=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react40.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_runtime65.jsxs)(import_core82.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime65.jsx)("div",{children:props.children}),(0,import_jsx_runtime65.jsx)("div",{children:(0,import_jsx_runtime65.jsx)(import_core82.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_core83=require("@mantine/core");var import_react41=require("react");var import_jsx_runtime66=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react41.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_runtime66.jsx)(import_core83.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_core84=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_core84.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return(0,import_core84.isEmpty)(value)?obj[propName]=void 0:obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core84.isEmpty)(profile.url)&&!(0,import_core84.isEmpty)(profile.name)}var import_core110=require("@mantine/core"),import_core111=require("@medplum/core"),import_react61=require("react");var import_react42=require("react");var import_jsx_runtime67=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react42.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime67.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_react43=require("react");var import_jsx_runtime68=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,response,...rest}=props,[value,setValue]=(0,import_react43.useState)(response?.answer?.[0]?.valueCoding??defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime68.jsx)(ValueSetAutocomplete,{defaultValue:value?codingToValueSetElement(value):void 0,maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core86=require("@mantine/core"),import_react45=require("react");var import_core85=require("@mantine/core"),import_react44=require("react");var import_jsx_runtime69=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath,getExtendedProps}=(0,import_react44.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react44.useState)(props.defaultValue),[systemElement,useElement,valueElement]=(0,import_react44.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]),[systemProps,useProps,valueProps]=(0,import_react44.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={...contactPoint,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...contactPoint,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...contactPoint,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime69.jsxs)(import_core85.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime69.jsx)(import_core85.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_runtime69.jsx)(import_core85.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_runtime69.jsx)(import_core85.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_runtime70=require("react/jsx-runtime");function ContactDetailInput(props){let[contactDetail,setContactDetail]=(0,import_react45.useState)(props.defaultValue),{getExtendedProps}=(0,import_react45.useContext)(ElementsContext),[nameProps,telecomProps]=(0,import_react45.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={...contactDetail,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...contactDetail,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime70.jsxs)(import_core86.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime70.jsx)(import_core86.TextInput,{disabled:props.disabled||nameProps?.readonly,"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactDetail?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime70.jsx)(ContactPointInput,{disabled:props.disabled||telecomProps?.readonly,name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactDetail?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core88=require("@mantine/core");var import_core87=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core87.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core87.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime71=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime71.jsx)(import_core88.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props["data-testid"]??props.name,placeholder:props.placeholder,required:props.required,disabled:props.disabled,type:getInputType(),step:1,defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core89=require("@medplum/core"),import_react_hooks26=require("@medplum/react-hooks"),import_react46=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=(0,import_react_hooks26.useMedplum)(),profileUrl=(0,import_react46.useMemo)(()=>{if((0,import_core89.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react46.useState)(profileUrl!==void 0);return(0,import_react46.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>setLoadingProfile(!1)).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core89.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime72.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime72.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core90=require("@mantine/core"),import_react47=require("react");var import_jsx_runtime73=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react47.useState)(props.defaultValue),{getExtendedProps}=(0,import_react47.useContext)(ElementsContext),[useProps,prefixProps,givenProps,familyProps,suffixProps]=(0,import_react47.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_runtime73.jsxs)(import_core90.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime73.jsx)(import_core90.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_runtime73.jsx)(import_core90.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_runtime73.jsx)(import_core90.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_runtime73.jsx)(import_core90.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_runtime73.jsx)(import_core90.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_core91=require("@mantine/core"),import_react48=require("react");var import_jsx_runtime74=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react48.useState)(props.defaultValue),{elementsByPath,getExtendedProps}=(0,import_react48.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react48.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]),[systemProps,valueProps]=(0,import_react48.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_runtime74.jsxs)(import_core91.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime74.jsx)(import_core91.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_runtime74.jsx)(import_core91.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_core92=require("@mantine/core");var import_react49=require("react");var import_jsx_runtime75=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react49.useState)(props.defaultValue),{getExtendedProps}=(0,import_react49.useContext)(ElementsContext),[currencyProps,valueProps]=(0,import_react49.useMemo)(()=>["currency","value"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]),setValueWrapper=(0,import_react49.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react49.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react49.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime75.jsx)(import_core92.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_runtime75.jsx)(import_core92.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_runtime75.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core93=require("@mantine/core"),import_react50=require("react");var import_jsx_runtime76=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react50.useState)(props.defaultValue),{getExtendedProps}=(0,import_react50.useContext)(ElementsContext),[startProps,endProps]=(0,import_react50.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_runtime76.jsxs)(import_core93.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime76.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_runtime76.jsx)(DateTimeInput,{disabled:props.disabled||endProps?.readonly,name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core94=require("@mantine/core"),import_react51=require("react");var import_jsx_runtime77=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react51.useState)(props.defaultValue),{getExtendedProps}=(0,import_react51.useContext)(ElementsContext),[comparatorProps,valueProps,unitProps]=(0,import_react51.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_runtime77.jsxs)(import_core94.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime77.jsx)(import_core94.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_runtime77.jsx)(import_core94.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_runtime77.jsx)(import_core94.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 Number.parseFloat(str)}var import_core95=require("@mantine/core"),import_react52=require("react");var import_jsx_runtime78=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react52.useState)(props.defaultValue),{getExtendedProps}=(0,import_react52.useContext)(ElementsContext),[lowProps,highProps]=(0,import_react52.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_runtime78.jsxs)(import_core95.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime78.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_runtime78.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_core96=require("@mantine/core"),import_react53=require("react");var import_jsx_runtime79=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react53.useState)(props.defaultValue),{getExtendedProps}=(0,import_react53.useContext)(ElementsContext),[numeratorProps,denominatorProps]=(0,import_react53.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_runtime79.jsxs)(import_core96.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime79.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_runtime79.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_core99=require("@mantine/core"),import_core100=require("@medplum/core"),import_react_hooks28=require("@medplum/react-hooks"),import_react56=require("react");var import_react55=require("react");var import_core97=require("@mantine/core"),import_core98=require("@medplum/core"),import_react_hooks27=require("@medplum/react-hooks"),import_react54=require("react");var import_jsx_runtime80=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_core98.getReferenceString)(resource)??"",label:(0,import_core98.getDisplayString)(resource),resource}}function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var DefaultResourceItemComponent=(0,import_react54.forwardRef)(({label,resource,active:_active,...others},ref)=>(0,import_jsx_runtime80.jsx)("div",{ref,...others,children:(0,import_jsx_runtime80.jsxs)(import_core97.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime80.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime80.jsxs)("div",{children:[(0,import_jsx_runtime80.jsx)(import_core97.Text,{children:label}),(0,import_jsx_runtime80.jsx)(import_core97.Text,{size:"xs",c:"dimmed",children:resource.birthDate||resource.id})]})]})}));DefaultResourceItemComponent.displayName="DefaultResourceItemComponent";function MultiResourceInput(props){let medplum=(0,import_react_hooks27.useMedplum)(),{resourceType,searchCriteria}=props,ItemComponent3=props.itemComponent??DefaultResourceItemComponent,onChange=props.onChange,initialDefaultValue=(0,import_react54.useRef)(props.defaultValue),[defaultResources,setDefaultResources]=(0,import_react54.useState)(!props.defaultValue||props.defaultValue.length===0?[]:void 0);(0,import_react54.useEffect)(()=>{let cancelled=!1,items=initialDefaultValue.current;return items&&items.length>0&&Promise.allSettled(items.map(item=>{if((0,import_core98.isResource)(item))return Promise.resolve(item);if((0,import_core98.isReference)(item)){let ref=item;return medplum.readReference(ref)}return Promise.reject(new Error("Not a resolvable item"))})).then(settled=>{cancelled||setDefaultResources(settled.filter(r2=>r2.status==="fulfilled").map(r2=>r2.value))}).catch(()=>{}),()=>{cancelled=!0}},[medplum]);let loadValues=(0,import_react54.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_react54.useCallback)(newResources=>{onChange&&onChange(newResources)},[onChange]);return defaultResources===void 0?null:(0,import_jsx_runtime80.jsx)(AsyncAutocomplete,{disabled:props.disabled,name:props.name,label:props.label,error:props.error,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultResources,placeholder:props.placeholder,maxValues:props.maxValues,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var import_jsx_runtime81=require("react/jsx-runtime");function ResourceInput(props){let onChange=props.onChange,handleChange=(0,import_react55.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_jsx_runtime81.jsx)(MultiResourceInput,{resourceType:props.resourceType,name:props.name,defaultValue:props.defaultValue?[props.defaultValue]:void 0,searchCriteria:props.searchCriteria,placeholder:props.placeholder,required:props.required,itemComponent:props.itemComponent,onChange:handleChange,disabled:props.disabled,label:props.label,error:props.error,maxValues:1})}var import_jsx_runtime82=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=(0,import_react_hooks28.useMedplum)(),[value,setValue]=(0,import_react56.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react56.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react56.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react56.useRef)(new import_core100.LRUCache),searchCriteria=(0,import_react56.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react56.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_core100.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_core100.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_react56.useCallback)(item=>{let newValue=item?(0,import_core100.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react56.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_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:[props.name&&(0,import_jsx_runtime82.jsx)("input",{type:"hidden",name:props.name,value:value?.reference??""}),(0,import_jsx_runtime82.jsxs)(import_core99.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime82.jsx)(import_core99.NativeSelect,{name:props.name+"-resourceType",disabled:props.disabled,"data-autofocus":props.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:targetType?.resourceType,autoFocus:props.autoFocus,onChange:e=>{let newValue=e.currentTarget.value,newTargetType=targetTypes.find(tt=>tt.value===newValue);setTargetType(newTargetType)},data:typeSelectOptions}),!targetTypes&&(0,import_jsx_runtime82.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_runtime82.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_core100.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
104
104
  StructureDefinitionList(url: "${profileUrl}", _sort: "_lastUpdated", _count: 1) {
105
105
  type,
106
106
  name,
107
107
  title,
108
108
  }
109
- }`.replaceAll(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core99.isEmpty)(targetType.resourceType)}var import_core104=require("@mantine/core"),import_core105=require("@medplum/core"),import_react_hooks29=require("@medplum/react-hooks"),import_react57=require("react");function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_core102=require("@mantine/core"),import_core103=require("@medplum/core"),import_react56=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core100=require("@mantine/core");var import_jsx_runtime82=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime82.jsx)(import_core100.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime82.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime82.jsx)(import_core100.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime82.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core101=require("@mantine/core");var import_jsx_runtime83=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime83.jsx)(import_core101.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime83.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime84=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react56.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react56.useContext)(ElementsContext),contextValue=(0,import_react56.useMemo)(()=>{if((0,import_core103.isPopulated)(sliceElements))return(0,import_core103.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_core103.isEmpty)(slice.elements),propertyDisplayName=(0,import_core103.getPropertyDisplayName)(slice.name),showEmptyMessage=props.property.readonly&&values.length===0;return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime84.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_runtime84.jsx)(import_core102.Text,{c:"dimmed",children:"(empty)"}):(0,import_jsx_runtime84.jsxs)(import_core102.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime84.jsxs)(import_core102.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime84.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime84.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_runtime84.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),!props.property.readonly&&values.length<slice.max&&(0,import_jsx_runtime84.jsx)(import_core102.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime84.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_jsx_runtime85=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=(0,import_react_hooks29.useMedplum)(),[loading,setLoading]=(0,import_react57.useState)(!0),[slices,setSlices]=(0,import_react57.useState)([]),[defaultValue2]=(0,import_react57.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react57.useState)(()=>[defaultValue2]),ctx=(0,import_react57.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react57.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_runtime85.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core105.getPathDisplayName)(property.path),showEmptyMessage=props.property.readonly&&slices.length===0&&defaultValue2.length===0;return(0,import_jsx_runtime85.jsxs)(import_core104.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[showEmptyMessage&&(0,import_jsx_runtime85.jsx)(import_core104.Text,{c:"dimmed",children:"(empty)"}),slices.map((slice,sliceIndex)=>(0,import_jsx_runtime85.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_runtime85.jsxs)(import_core104.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime85.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime85.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_runtime85.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),!props.property.readonly&&showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime85.jsx)(import_core104.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime85.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function addPlaceholderValues(slicedValues,slices){for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}}var import_core106=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react58=require("react"),import_jsx_runtime86=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react58.useState)(!1),clipboard=(0,import_hooks2.useClipboard)(),ref=(0,import_react58.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime86.jsxs)(import_core106.Flex,{gap:"xs",children:[(0,import_jsx_runtime86.jsx)(import_core106.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime86.jsx)(import_core106.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime86.jsx)(IconCopy,{})})]})}var import_core107=require("@mantine/core"),import_core108=require("@medplum/core"),import_react59=require("react");var import_jsx_runtime87=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react59.useState)(props.defaultValue),[open,setOpen]=(0,import_react59.useState)(!props.disabled&&(props.defaultModalOpen??!1));return(0,import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment,{children:[(0,import_jsx_runtime87.jsxs)(import_core107.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime87.jsx)("span",{"data-testid":"timinginput-display",children:(0,import_core108.formatTiming)(value)||"No repeat"}),(0,import_jsx_runtime87.jsx)(import_core107.Button,{disabled:props.disabled,onClick:()=>setOpen(!0),children:"Edit"})]}),!props.disabled&&(0,import_jsx_runtime87.jsx)(TimingEditorDialog,{path:props.path,visible:open,defaultValue:value,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_react59.useState)(props.defaultValue||defaultValue),[timeOfDayItems,setTimeOfDayItems]=(0,import_react59.useState)(()=>(props.defaultValue?.repeat?.timeOfDay??[]).map((v,i)=>({id:i,value:v}))),nextTimeOfDayId=(0,import_react59.useRef)(timeOfDayItems.length),{getExtendedProps}=(0,import_react59.useContext)(ElementsContext),[eventProps,repeatProps,repeatPeriodProps,repeatPeriodUnitProps,repeatDayOfWeekProps,repeatTimeOfDayProps]=(0,import_react59.useMemo)(()=>["event","repeat","repeat.period","repeat.periodUnit","repeat.dayOfWeek","repeat.timeOfDay"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setStart(newStart){setValue(value2=>({...value2,event:[newStart]}))}function setRepeat(repeat){setValue(value2=>({...value2,repeat}))}function setPeriod(period){setValue(value2=>({...value2,repeat:{...value2.repeat,period}}))}function setPeriodUnit(periodUnit){setValue(value2=>({...value2,repeat:{...value2.repeat,periodUnit}}))}function setDaysOfWeek(dayOfWeek){setValue(value2=>({...value2,repeat:{...value2.repeat,dayOfWeek}}))}function setTimeOfDay(updater){setTimeOfDayItems(items=>{let newItems=updater(items),timeOfDay=newItems.map(item=>item.value);return setValue(value2=>({...value2,repeat:{...value2.repeat,timeOfDay}})),newItems})}return(0,import_jsx_runtime87.jsx)(import_core107.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime87.jsxs)(import_core107.Stack,{gap:"md",children:[(0,import_jsx_runtime87.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime87.jsx)(DateTimeInput,{disabled:eventProps?.readonly,name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime87.jsx)(import_core107.Switch,{disabled:repeatProps?.readonly,label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime87.jsxs)(import_jsx_runtime87.Fragment,{children:[(0,import_jsx_runtime87.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime87.jsxs)(import_core107.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime87.jsx)(import_core107.TextInput,{disabled:repeatPeriodProps?.readonly,type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(Number.parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime87.jsx)(import_core107.NativeSelect,{disabled:repeatPeriodUnitProps?.readonly,id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.currentTarget.value),data:[{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_runtime87.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime87.jsx)(import_core107.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,value:value.repeat?.dayOfWeek,children:(0,import_jsx_runtime87.jsx)(import_core107.Group,{justify:"space-between",mt:"xs",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime87.jsx)(import_core107.Chip,{value:day,size:"xs",radius:"xl",disabled:repeatDayOfWeekProps?.readonly,checked:(value.repeat?.dayOfWeek??[]).includes(day),children:day.charAt(0).toUpperCase()},day))})})}),(0,import_jsx_runtime87.jsx)(FormSection,{title:"At times",children:(0,import_jsx_runtime87.jsxs)(import_core107.Stack,{mt:"xs",children:[timeOfDayItems.map((item,idx)=>(0,import_jsx_runtime87.jsxs)(import_core107.Group,{children:[(0,import_jsx_runtime87.jsx)(import_core107.TextInput,{disabled:repeatTimeOfDayProps?.readonly,type:"time",id:`timing-dialog-repeat-timeOfDay[${idx}]`,name:`timing-dialog-repeat-timeOfDay[${idx}]`,"data-testid":`timing-repeat-timeOfDay-input-${idx}`,defaultValue:item.value.slice(0,5),onChange:e=>{let newValue=`${e.currentTarget.value}:00`;setTimeOfDay(items=>items.with(idx,{...item,value:newValue}))},style:{flexGrow:1}}),(0,import_jsx_runtime87.jsx)(ArrayRemoveButton,{testId:`timing-repeat-timeOfDay-remove-${idx}`,onClick:()=>setTimeOfDay(items=>items.toSpliced(idx,1))})]},item.id)),(0,import_jsx_runtime87.jsx)(import_core107.Box,{children:(0,import_jsx_runtime87.jsx)(ArrayAddButton,{propertyDisplayName:"Time of Day",onClick:()=>setTimeOfDay(items=>{let id=nextTimeOfDayId.current++;return items.concat({id,value:"00:00:00"})})})})]})})]}),(0,import_jsx_runtime87.jsx)(import_core107.Group,{justify:"flex-end",children:(0,import_jsx_runtime87.jsx)(import_core107.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime88=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_core110.PropertyType.Attachment)return(0,import_jsx_runtime88.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange,disabled:property.readonly});let indent=propertyTypes[0]?.code!==import_core110.PropertyType.Extension;return(0,import_jsx_runtime88.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_runtime88.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime88.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core110.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_react60.useState)(initialPropertyType);return(0,import_jsx_runtime88.jsxs)(import_core109.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime88.jsx)(import_core109.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_runtime88.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_core110.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_react60.useContext)(ElementsContext),defaultValue2=(0,import_react60.useMemo)(()=>{if(!(0,import_core110.isComplexTypeCode)(propertyType)||!(0,import_core110.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core110.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core110.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core110.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core110.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime88.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_core110.PropertyType.SystemString:case import_core110.PropertyType.canonical:case import_core110.PropertyType.string:case import_core110.PropertyType.uri:case import_core110.PropertyType.url:return props.path==="Project.secret.value[x]"||props.path==="ClientApplication.certificateTrustStore"?(0,import_jsx_runtime88.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime88.jsx)(import_core109.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core110.PropertyType.date:return(0,import_jsx_runtime88.jsx)(import_core109.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core110.PropertyType.time:return(0,import_jsx_runtime88.jsx)(import_core109.TextInput,{...getPrimitiveInputProps(),type:"time",step:1,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core110.PropertyType.dateTime:case import_core110.PropertyType.instant:return(0,import_jsx_runtime88.jsx)(DateTimeInput,{...getPrimitiveInputProps(),onChange,outcome});case import_core110.PropertyType.decimal:case import_core110.PropertyType.integer:case import_core110.PropertyType.positiveInt:case import_core110.PropertyType.unsignedInt:return(0,import_jsx_runtime88.jsx)(import_core109.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core110.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core110.PropertyType.code:return(0,import_jsx_runtime88.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet,creatable:!0,maxValues:1});case import_core110.PropertyType.boolean:return(0,import_jsx_runtime88.jsx)(import_core109.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core110.PropertyType.base64Binary:case import_core110.PropertyType.markdown:case import_core110.PropertyType.xhtml:return(0,import_jsx_runtime88.jsx)(import_core109.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core110.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core110.PropertyType.Address:return(0,import_jsx_runtime88.jsx)(AddressInput,{...getComplexInputProps()});case import_core110.PropertyType.Annotation:return(0,import_jsx_runtime88.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core110.PropertyType.Attachment:return(0,import_jsx_runtime88.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core110.PropertyType.CodeableConcept:return(0,import_jsx_runtime88.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core110.PropertyType.Coding:return(0,import_jsx_runtime88.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core110.PropertyType.ContactDetail:return(0,import_jsx_runtime88.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core110.PropertyType.ContactPoint:return(0,import_jsx_runtime88.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core110.PropertyType.Extension:return(0,import_jsx_runtime88.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core110.PropertyType.HumanName:return(0,import_jsx_runtime88.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core110.PropertyType.Identifier:return(0,import_jsx_runtime88.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core110.PropertyType.Money:return(0,import_jsx_runtime88.jsx)(MoneyInput,{...getComplexInputProps()});case import_core110.PropertyType.Period:return(0,import_jsx_runtime88.jsx)(PeriodInput,{...getComplexInputProps()});case import_core110.PropertyType.Duration:case import_core110.PropertyType.Quantity:return(0,import_jsx_runtime88.jsx)(QuantityInput,{...getComplexInputProps()});case import_core110.PropertyType.Range:return(0,import_jsx_runtime88.jsx)(RangeInput,{...getComplexInputProps()});case import_core110.PropertyType.Ratio:return(0,import_jsx_runtime88.jsx)(RatioInput,{...getComplexInputProps()});case import_core110.PropertyType.Reference:return(0,import_jsx_runtime88.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core110.PropertyType.Timing:return(0,import_jsx_runtime88.jsx)(TimingInput,{...getComplexInputProps()});case import_core110.PropertyType.Dosage:case import_core110.PropertyType.UsageContext:default:return(0,import_jsx_runtime88.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core110.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_runtime89=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react61.useState)(props.defaultValue??{}),elementsContext=(0,import_react61.useContext)(ElementsContext),elementsToRender=(0,import_react61.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_runtime89.jsx)(import_core111.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_runtime89.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_runtime89.jsx)(CheckboxFormSection,{title:(0,import_core112.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,readonly:element.readonly,children:resourcePropertyInput},key):(0,import_jsx_runtime89.jsx)(FormSection,{title:(0,import_core112.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,readonly:element.readonly,children:resourcePropertyInput},key)})})}var BackboneElementInput_default={nested:"BackboneElementInput_nested"};var import_jsx_runtime90=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react62.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react62.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react62.useMemo)(()=>(0,import_core114.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react62.useMemo)(()=>{if(typeSchema)return(0,import_core114.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if(!typeSchema)return(0,import_jsx_runtime90.jsxs)("div",{children:[type,"\xA0not implemented"]});let isNested=parentElementsContext.path!=="";return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime90.jsx)(import_core113.Box,{className:clsx_default({[BackboneElementInput_default.nested]:isNested}),children:(0,import_jsx_runtime90.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})}))}var import_core115=require("@mantine/core"),import_react63=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_runtime91=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react63.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_react63.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime91.jsxs)("div",{children:[(0,import_jsx_runtime91.jsxs)(import_core115.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime91.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime91.jsxs)(import_core115.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime91.jsx)(import_core115.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime91.jsx)(import_core115.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime91.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime91.jsx)("thead",{children:(0,import_jsx_runtime91.jsxs)("tr",{children:[(0,import_jsx_runtime91.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime91.jsx)("th",{children:"MON"}),(0,import_jsx_runtime91.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime91.jsx)("th",{children:"WED"}),(0,import_jsx_runtime91.jsx)("th",{children:"THU"}),(0,import_jsx_runtime91.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime91.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime91.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime91.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime91.jsx)("td",{children:day&&(0,import_jsx_runtime91.jsx)(import_core115.Button,{variant:"light",disabled:!day.available,onClick:()=>onClick(day.date),children:day.date.getDate()})},"day-"+dayIndex))},"week-"+weekIndex))})]})]})}function buildGrid(startDate,slots){let d=new Date(startDate.getFullYear(),startDate.getMonth()),grid=[],row=[];for(let i=0;i<d.getDay();i++)row.push(void 0);for(;d.getMonth()===startDate.getMonth();)row.push({date:new Date(d.getTime()),available:isDayAvailable(d,slots)}),d.getDay()===6&&(grid.push(row),row=[]),d.setDate(d.getDate()+1);if(d.getDay()!==0){for(let i=d.getDay();i<7;i++)row.push(void 0);grid.push(row)}return grid}function isDayAvailable(day,slots){for(let slot of slots){let slotStart=new Date(slot.start);if(slotStart.getFullYear()===day.getFullYear()&&slotStart.getMonth()===day.getMonth()&&slotStart.getDate()===day.getDate())return!0}return!1}var import_core118=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_notifications5=require("@mantine/notifications"),import_core119=require("@medplum/core"),import_react_hooks31=require("@medplum/react-hooks");var import_react65=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatPendingFile:"BaseChat_chatPendingFile",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleNameRight:"BaseChat_chatBubbleNameRight",chatBubbleAttachmentWithText:"BaseChat_chatBubbleAttachmentWithText",chatBubbleAttachmentIcon:"BaseChat_chatBubbleAttachmentIcon",chatBubbleMenu:"BaseChat_chatBubbleMenu"};var import_core116=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core117=require("@medplum/core"),import_react_hooks30=require("@medplum/react-hooks");var import_react64=require("react"),import_jsx_runtime92=require("react/jsx-runtime");function DocumentPicker({subjectRef,onSelect,onUpload}){let medplum=(0,import_react_hooks30.useMedplum)(),[search,setSearch]=(0,import_react64.useState)(""),[docs,setDocs]=(0,import_react64.useState)([]),[loading,setLoading]=(0,import_react64.useState)(!0),subjectRefStr=subjectRef?(0,import_core117.getReferenceString)(subjectRef):void 0,fetchDocs=(0,import_hooks3.useDebouncedCallback)(async query=>{setLoading(!0);try{let params=new URLSearchParams;subjectRefStr&&params.set("subject",subjectRefStr),query.trim()&&params.set("description:contains",query.trim()),params.set("_sort","-date"),params.set("_count","5");let results=await medplum.searchResources("DocumentReference",params);setDocs([...results])}catch(err){console.error(err)}finally{setLoading(!1)}},300);(0,import_react64.useEffect)(()=>{fetchDocs(search)},[fetchDocs,search]);let getDocName=doc=>doc.description??doc.content?.[0]?.attachment?.title??"Untitled";return(0,import_jsx_runtime92.jsxs)(import_core116.Stack,{gap:0,w:280,children:[(0,import_jsx_runtime92.jsx)(import_core116.Text,{fw:500,fz:"sm",px:"sm",pt:"sm",pb:"xs",children:"Attachments"}),(0,import_jsx_runtime92.jsx)(import_core116.Box,{px:"sm",pb:"xs",children:(0,import_jsx_runtime92.jsx)(import_core116.TextInput,{placeholder:"Search for a Document...",size:"xs",value:search,onChange:e=>setSearch(e.currentTarget.value)})}),(0,import_jsx_runtime92.jsx)(import_core116.Divider,{}),loading?(0,import_jsx_runtime92.jsx)(import_core116.Box,{py:"sm",style:{display:"flex",justifyContent:"center"},children:(0,import_jsx_runtime92.jsx)(import_core116.Loader,{size:"xs"})}):(0,import_jsx_runtime92.jsxs)(import_core116.Stack,{gap:0,children:[docs.map(doc=>(0,import_jsx_runtime92.jsxs)(import_core116.UnstyledButton,{px:"sm",py:"xs",onClick:()=>onSelect(doc),style:{display:"flex",alignItems:"center",gap:8},children:[(0,import_jsx_runtime92.jsx)(IconFileText,{size:"1rem",style:{flexShrink:0,color:"var(--mantine-color-blue-6)"}}),(0,import_jsx_runtime92.jsx)(import_core116.Text,{fz:"sm",truncate:!0,children:getDocName(doc)})]},doc.id)),docs.length===0&&(0,import_jsx_runtime92.jsx)(import_core116.Text,{fz:"xs",c:"dimmed",px:"sm",py:"xs",children:"No documents found"})]}),(0,import_jsx_runtime92.jsx)(import_core116.Divider,{}),(0,import_jsx_runtime92.jsxs)(import_core116.UnstyledButton,{px:"sm",py:"xs",onClick:onUpload,style:{display:"flex",alignItems:"center",gap:8},children:[(0,import_jsx_runtime92.jsx)(IconPaperclip,{size:"1rem",style:{flexShrink:0,color:"var(--mantine-color-gray-6)"}}),(0,import_jsx_runtime92.jsx)(import_core116.Text,{fz:"sm",c:"dimmed",children:"Upload an image, pdf, etc."})]})]})}var import_jsx_runtime93=require("react/jsx-runtime");function toSafeUrl(url){if(url)try{let{protocol}=new URL(url);return protocol==="https:"||protocol==="http:"||protocol==="blob:"?url:void 0}catch{return}}function showError(message){(0,import_notifications5.showNotification)({color:"red",title:"Error",message,autoClose:!1})}function parseSentTime(communication){return new Date(communication.sent??0).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a,b)=>!a.sent&&!b.sent?0:a.sent?b.sent?a.sent.localeCompare(b.sent):1:-1),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,onMessageUpdated,inputDisabled,onError,excludeHeader=!1,uploadEnabled=!1,attachmentSubjectRef,onViewInDocuments,...paperProps}=props,medplum=(0,import_react_hooks31.useMedplum)(),inputRef=(0,import_react65.useRef)(null),scrollAreaRef=(0,import_react65.useRef)(null),firstScrollRef=(0,import_react65.useRef)(!0),initialLoadRef=(0,import_react65.useRef)(!0),[profile,setProfile]=(0,import_react65.useState)(medplum.getProfile()),[reconnecting,setReconnecting]=(0,import_react65.useState)(!1),[loading,setLoading]=(0,import_react65.useState)(!0),[pendingFile,setPendingFile]=(0,import_react65.useState)(void 0),[pendingDocRef,setPendingDocRef]=(0,import_react65.useState)(void 0),[pickerOpen,setPickerOpen]=(0,import_react65.useState)(!1),fileInputRef=(0,import_react65.useRef)(null);loading||(initialLoadRef.current=!1);let profileRefStr=(0,import_react65.useMemo)(()=>profile?(0,import_core119.getReferenceString)(medplum.getProfile()):"",[profile,medplum]),searchMessages=(0,import_react65.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_react65.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications5.showNotification)({color:"red",message:(0,import_core119.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react_hooks31.useSubscription)(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),(0,import_core119.getReferenceString)(communication.sender)!==profileRefStr&&(communicationsRef.current.find(c=>c.id===communication.id)?onMessageUpdated?.(communication):onMessageReceived?.(communication))},{onWebSocketClose:(0,import_react65.useCallback)(()=>{reconnecting||setReconnecting(!0),(0,import_notifications5.showNotification)({color:"red",message:"Live chat disconnected. Attempting to reconnect..."})},[reconnecting]),onWebSocketOpen:(0,import_react65.useCallback)(()=>{reconnecting&&(0,import_notifications5.showNotification)({color:"green",message:"Live chat reconnected."})},[reconnecting]),onSubscriptionConnect:(0,import_react65.useCallback)(()=>{reconnecting&&(searchMessages().catch(err=>(0,import_notifications5.showNotification)({color:"red",message:(0,import_core119.normalizeErrorString)(err)})),setReconnecting(!1))},[reconnecting,searchMessages]),onError:(0,import_react65.useCallback)(err=>{onError?onError(err):showError((0,import_core119.normalizeErrorString)(err))},[onError])});let sendMessageInternal=(0,import_react65.useCallback)(formData=>{if(inputDisabled)return;let message=formData.message?.trim()??"";!message&&!pendingFile&&!pendingDocRef||(inputRef.current&&(inputRef.current.value=""),fileInputRef.current&&(fileInputRef.current.value=""),sendMessage(message,pendingFile,pendingDocRef),setPendingFile(void 0),setPendingDocRef(void 0),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage,pendingFile,pendingDocRef]);(0,import_react65.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks4.useResizeObserver)(),communicationsRef=(0,import_react65.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react65.useRef)(communications),scrollToBottomRef=(0,import_react65.useRef)(!0);(0,import_react65.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react65.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_react65.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_runtime93.jsxs)(import_core118.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[!excludeHeader&&(0,import_jsx_runtime93.jsx)(import_core118.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime93.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:initialLoadRef.current?(0,import_jsx_runtime93.jsxs)(import_core118.Stack,{align:"stretch",mt:"lg",children:[(0,import_jsx_runtime93.jsxs)(import_core118.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime93.jsx)(import_core118.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime93.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]}),(0,import_jsx_runtime93.jsxs)(import_core118.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime93.jsx)(ChatBubbleSkeleton,{alignment:"right",parentWidth:parentRect.width}),(0,import_jsx_runtime93.jsx)(import_core118.Skeleton,{height:38,circle:!0,mr:"md"})]}),(0,import_jsx_runtime93.jsxs)(import_core118.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime93.jsx)(import_core118.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime93.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]})]},"skeleton-chat-messages"):(0,import_jsx_runtime93.jsxs)(import_core118.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:[(0,import_jsx_runtime93.jsx)(import_core118.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),showDelivered=!!c.received&&c.id===myLastDeliveredId,payloads=c.payload??[],contentRef=payloads.find(p=>p.contentReference)?.contentReference,contentAttachment=payloads.find(p=>p.contentAttachment)?.contentAttachment,hasAttachment=!!(contentRef||contentAttachment),isSender=c.sender?.reference===profileRefStr,menu=hasAttachment?(0,import_jsx_runtime93.jsx)(ChatBubbleMenu,{contentRef,contentAttachment,onViewInDocuments}):null;return(0,import_jsx_runtime93.jsxs)(import_core118.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime93.jsx)(import_core118.Text,{fz:"xs",ta:"center",children:currCommTime}),isSender?(0,import_jsx_runtime93.jsxs)(import_core118.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime93.jsx)("div",{className:BaseChat_default.chatBubbleMenu,children:menu}),(0,import_jsx_runtime93.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered}),(0,import_jsx_runtime93.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender,mb:showDelivered?void 0:"sm"})]}):(0,import_jsx_runtime93.jsxs)(import_core118.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime93.jsx)(ResourceAvatar,{radius:"xl",value:c.sender,mb:"sm"}),(0,import_jsx_runtime93.jsx)(ChatBubble,{alignment:"left",communication:c}),(0,import_jsx_runtime93.jsx)("div",{className:BaseChat_default.chatBubbleMenu,children:menu})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})]})}),(0,import_jsx_runtime93.jsxs)("div",{className:BaseChat_default.chatInputContainer,children:[(pendingFile||pendingDocRef)&&(0,import_jsx_runtime93.jsxs)(import_core118.Group,{className:BaseChat_default.chatPendingFile,gap:4,align:"center",wrap:"nowrap",children:[pendingDocRef?(0,import_jsx_runtime93.jsx)(IconFileText,{size:"0.75rem"}):(0,import_jsx_runtime93.jsx)(IconPaperclip,{size:"0.75rem"}),(0,import_jsx_runtime93.jsx)(import_core118.Text,{fz:"xs",c:"dimmed",flex:1,truncate:!0,children:pendingDocRef?pendingDocRef.description??pendingDocRef.content?.[0]?.attachment?.title??"Document":pendingFile?.name}),(0,import_jsx_runtime93.jsx)(import_core118.ActionIcon,{size:"xs",variant:"subtle",color:"red",onClick:()=>{setPendingDocRef(void 0),setPendingFile(void 0),fileInputRef.current&&(fileInputRef.current.value="")},"aria-label":"Remove attachment",children:(0,import_jsx_runtime93.jsx)(IconX,{size:"0.75rem"})})]}),(0,import_jsx_runtime93.jsx)("input",{ref:fileInputRef,type:"file",style:{display:"none"},disabled:inputDisabled,onChange:e=>{let file=e.target.files?.[0];file&&(setPendingFile(file),setPendingDocRef(void 0))}}),(0,import_jsx_runtime93.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime93.jsx)(import_core118.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",leftSectionWidth:42,rightSectionWidth:42,disabled:inputDisabled,leftSection:!inputDisabled&&uploadEnabled?(0,import_jsx_runtime93.jsxs)(import_core118.Popover,{opened:pickerOpen,onChange:setPickerOpen,position:"top-start",withArrow:!0,shadow:"md",withinPortal:!0,children:[(0,import_jsx_runtime93.jsx)(import_core118.Popover.Target,{children:(0,import_jsx_runtime93.jsx)(import_core118.ActionIcon,{onClick:()=>setPickerOpen(o=>!o),size:"1.5rem",radius:"xl",color:pendingFile||pendingDocRef?"blue":"gray",variant:pendingFile||pendingDocRef?"filled":"subtle","aria-label":"Attach file",children:(0,import_jsx_runtime93.jsx)(IconPaperclip,{size:"1rem",stroke:1.5})})}),(0,import_jsx_runtime93.jsx)(import_core118.Popover.Dropdown,{p:0,children:(0,import_jsx_runtime93.jsx)(DocumentPicker,{subjectRef:attachmentSubjectRef,onSelect:doc=>{setPendingDocRef(doc),setPendingFile(void 0),setPickerOpen(!1)},onUpload:()=>{setPickerOpen(!1),fileInputRef.current?.click()}})})]}):void 0,rightSection:inputDisabled?void 0:(0,import_jsx_runtime93.jsx)(import_core118.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime93.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})]})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,payloads=communication.payload??[],textContent=payloads.find(p=>p.contentString)?.contentString??"",contentRef=payloads.find(p=>p.contentReference)?.contentReference,attachment=payloads.find(p=>p.contentAttachment)?.contentAttachment,sentTime=new Date(communication.sent??-1),seenTime=new Date(communication.received??-1),senderResource=(0,import_react_hooks31.useResource)(communication.sender);return(0,import_jsx_runtime93.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime93.jsxs)(import_core118.Text,{fz:"xs",mb:"xs",fw:500,className:alignment==="right"?BaseChat_default.chatBubbleNameRight:void 0,"aria-label":"Sender name",children:[senderResource?(0,import_core119.getDisplayString)(senderResource):"[Unknown sender]","\xA0\xB7\xA0",(0,import_jsx_runtime93.jsx)(import_core118.Text,{span:!0,c:"dimmed",fz:"xs",children:Number.isNaN(sentTime.getTime())?"":sentTime.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,import_jsx_runtime93.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime93.jsxs)("div",{className:BaseChat_default.chatBubble,children:[textContent&&(0,import_jsx_runtime93.jsx)("span",{children:textContent}),contentRef&&(0,import_jsx_runtime93.jsx)(ChatBubbleDocumentReference,{reference:contentRef,hasText:!!textContent}),attachment&&(0,import_jsx_runtime93.jsx)(ChatBubbleAttachment,{attachment,hasText:!!textContent})]})}),showDelivered&&(0,import_jsx_runtime93.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}function ChatBubbleAttachment({attachment,hasText}){return(0,import_jsx_runtime93.jsx)("div",{className:hasText?BaseChat_default.chatBubbleAttachmentWithText:void 0,children:(0,import_jsx_runtime93.jsxs)(import_core118.Group,{gap:4,wrap:"nowrap",children:[(0,import_jsx_runtime93.jsx)("span",{className:BaseChat_default.chatBubbleAttachmentIcon,children:(0,import_jsx_runtime93.jsx)(IconPaperclip,{size:"0.75rem"})}),(0,import_jsx_runtime93.jsx)(import_core118.Text,{fz:"xs",truncate:!0,children:attachment.title??"File attached"})]})})}function ChatBubbleDocumentReference({reference,hasText}){let attachment=(0,import_react_hooks31.useResource)(reference)?.content?.[0]?.attachment;return attachment?(0,import_jsx_runtime93.jsx)(ChatBubbleAttachment,{attachment,hasText}):null}function ChatBubbleMenu({contentRef,contentAttachment,onViewInDocuments}){let docRef=(0,import_react_hooks31.useResource)(contentRef),attachment=contentRef?docRef?.content?.[0]?.attachment:contentAttachment,cachedUrl=(0,import_react_hooks31.useCachedBinaryUrl)(attachment?.url),handleDownload=()=>{let href=toSafeUrl(cachedUrl??attachment?.url);href&&window.open(href,"_blank","noopener,noreferrer")};return(0,import_jsx_runtime93.jsxs)(import_core118.Menu,{withinPortal:!0,position:"bottom-start",shadow:"md",children:[(0,import_jsx_runtime93.jsx)(import_core118.Menu.Target,{children:(0,import_jsx_runtime93.jsx)(import_core118.ActionIcon,{variant:"outline",color:"gray",radius:"xl",size:"sm","aria-label":"Attachment options",children:(0,import_jsx_runtime93.jsx)(IconDots,{size:"0.75rem"})})}),(0,import_jsx_runtime93.jsxs)(import_core118.Menu.Dropdown,{children:[contentRef&&onViewInDocuments&&(0,import_jsx_runtime93.jsx)(import_core118.Menu.Item,{leftSection:(0,import_jsx_runtime93.jsx)(IconFileExport,{size:"0.9rem"}),onClick:()=>onViewInDocuments(contentRef),children:"View in Documents"}),(0,import_jsx_runtime93.jsx)(import_core118.Menu.Item,{leftSection:(0,import_jsx_runtime93.jsx)(IconDownload,{size:"0.9rem"}),onClick:handleDownload,children:"Download"})]})]})}function ChatBubbleSkeleton(props){let{alignment,parentWidth}=props;return(0,import_jsx_runtime93.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime93.jsx)("div",{className:BaseChat_default.chatBubbleName,"aria-label":"Placeholder sender name",children:(0,import_jsx_runtime93.jsx)("div",{style:{position:"relative"},children:(0,import_jsx_runtime93.jsx)(import_core118.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_runtime93.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime93.jsx)("div",{className:BaseChat_default.chatBubble,children:(0,import_jsx_runtime93.jsx)(import_core118.Skeleton,{height:14,width:parentWidth*.5,radius:"l"})})})]})}var import_core120=require("@mantine/core"),import_react_hooks32=require("@medplum/react-hooks");var import_react66=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime94=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=(0,import_react_hooks32.useMedplumProfile)(),[opened,setOpened]=(0,import_react66.useState)(open??!1);return(0,import_react66.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime94.jsxs)(import_jsx_runtime94.Fragment,{children:[opened&&(0,import_jsx_runtime94.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime94.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime94.jsx)(import_core120.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime94.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime94.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime94.jsx)(import_core120.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime94.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core121=require("@medplum/core"),import_react_hooks33=require("@medplum/react-hooks"),import_react67=require("react");var import_jsx_runtime95=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled,excludeHeader,uploadEnabled,onError,onViewInDocuments}=props,medplum=(0,import_react_hooks33.useMedplum)(),profile=(0,import_react_hooks33.useMedplumProfile)(),prevThreadId=(0,import_react_hooks33.usePrevious)(thread?.id),[communications,setCommunications]=(0,import_react67.useState)([]),profileRef=(0,import_react67.useMemo)(()=>profile?(0,import_core121.createReference)(profile):void 0,[profile]),threadRef=(0,import_react67.useMemo)(()=>(0,import_core121.createReference)(thread),[thread]);(0,import_react67.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react67.useCallback)((message,file,existingDocRef)=>{let profileRefStr=profileRef?(0,import_core121.getReferenceString)(profileRef):void 0;if(!profileRefStr)return;(async()=>{let payload=[];if(message&&payload.push({contentString:message}),existingDocRef)payload.push({contentReference:(0,import_core121.createReference)(existingDocRef)});else if(file){let docRef=await medplum.createDocumentReference({data:file,contentType:file.type||"application/octet-stream",filename:file.name,additionalFields:{...thread.subject?{subject:thread.subject}:{},description:file.name}});payload.push({contentReference:(0,import_core121.createReference)(docRef)})}let communication=await medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core121.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload,partOf:[threadRef],subject:thread.subject});setCommunications([...communications,communication]),onMessageSent?.(communication)})().catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react67.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_runtime95.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core121.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled,excludeHeader,uploadEnabled,onError,attachmentSubjectRef:thread.subject,onViewInDocuments}):null}var import_core124=require("@mantine/core"),import_react68=require("react");var import_core122=require("@mantine/core"),import_core123=require("@medplum/core"),import_react_hooks34=require("@medplum/react-hooks");var ChatListItem_default={content:"ChatListItem_content",contentContainer:"ChatListItem_contentContainer",selected:"ChatListItem_selected"};var import_jsx_runtime96=require("react/jsx-runtime"),ChatListItem=props=>{let{topic,lastCommunication,isSelected,getThreadUri}=props,patientResource=(0,import_react_hooks34.useResource)(topic.subject),patientName=(0,import_core123.formatHumanName)(patientResource?.name?.[0]),lastMsg=lastCommunication?.payload?.[0]?.contentString,trimmedMsg=lastMsg?.length&&lastMsg.length>100?lastMsg.slice(0,100)+"...":lastMsg,senderName=lastCommunication?.sender?.display?`${lastCommunication?.sender?.display}: `:"",content=trimmedMsg?`${senderName} ${trimmedMsg}`:"No messages available",topicName=topic.topic?.text??content;return(0,import_jsx_runtime96.jsx)(MedplumLink,{to:getThreadUri(topic),underline:"never",children:(0,import_jsx_runtime96.jsxs)(import_core122.Group,{p:"xs",align:"center",wrap:"nowrap",className:clsx_default(ChatListItem_default.contentContainer,{[ChatListItem_default.selected]:isSelected}),children:[(0,import_jsx_runtime96.jsx)(ResourceAvatar,{value:topic.subject,radius:"xl",size:36}),(0,import_jsx_runtime96.jsxs)(import_core122.Stack,{gap:0,children:[(0,import_jsx_runtime96.jsx)(import_core122.Text,{size:"sm",fw:700,truncate:"end",children:patientName}),(0,import_jsx_runtime96.jsx)(import_core122.Text,{size:"sm",fw:400,lineClamp:2,className:ChatListItem_default.content,children:topicName}),(0,import_jsx_runtime96.jsx)(import_core122.Text,{size:"xs",style:{marginTop:2},children:lastCommunication?(0,import_core123.formatDateTime)(lastCommunication.sent):""})]})]})})};var import_jsx_runtime97=require("react/jsx-runtime"),ChatList=props=>{let{threads,selectedCommunication,getThreadUri}=props;return(0,import_jsx_runtime97.jsx)(import_core124.Stack,{gap:0,children:threads.map(thread=>{let topicCommunication=thread[0],lastCommunication=thread[1],_isSelected=selectedCommunication?.id===topicCommunication.id;return(0,import_jsx_runtime97.jsxs)(import_react68.Fragment,{children:[(0,import_jsx_runtime97.jsx)(ChatListItem,{topic:topicCommunication,lastCommunication,isSelected:_isSelected,getThreadUri}),(0,import_jsx_runtime97.jsx)(import_core124.Divider,{})]},topicCommunication.id)})})};var import_core136=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core137=require("@medplum/core"),import_react_hooks40=require("@medplum/react-hooks"),import_react72=require("react");var import_core134=require("@mantine/core"),import_core135=require("@medplum/core"),import_react_hooks39=require("@medplum/react-hooks"),import_react71=require("react");var import_core125=require("@mantine/core"),import_core126=require("@medplum/core"),import_react_hooks35=require("@medplum/react-hooks");var import_react69=require("react");var Point=class{constructor(x,y,pressure,time){__publicField(this,"x");__publicField(this,"y");__publicField(this,"pressure");__publicField(this,"time");if(isNaN(x)||isNaN(y))throw new Error(`Point is invalid: (${x}, ${y})`);this.x=+x,this.y=+y,this.pressure=pressure||0,this.time=time||Date.now()}distanceTo(start){return Math.sqrt(Math.pow(this.x-start.x,2)+Math.pow(this.y-start.y,2))}equals(other){return this.x===other.x&&this.y===other.y&&this.pressure===other.pressure&&this.time===other.time}velocityFrom(start){return this.time!==start.time?this.distanceTo(start)/(this.time-start.time):0}},Bezier=class _Bezier{constructor(startPoint,control2,control1,endPoint,startWidth,endWidth){this.startPoint=startPoint,this.control2=control2,this.control1=control1,this.endPoint=endPoint,this.startWidth=startWidth,this.endWidth=endWidth}static fromPoints(points,widths){let c2=this.calculateControlPoints(points[0],points[1],points[2]).c2,c3=this.calculateControlPoints(points[1],points[2],points[3]).c1;return new _Bezier(points[1],c2,c3,points[2],widths.start,widths.end)}static calculateControlPoints(s1,s2,s3){let dx1=s1.x-s2.x,dy1=s1.y-s2.y,dx2=s2.x-s3.x,dy2=s2.y-s3.y,m1={x:(s1.x+s2.x)/2,y:(s1.y+s2.y)/2},m2={x:(s2.x+s3.x)/2,y:(s2.y+s3.y)/2},l1=Math.sqrt(dx1*dx1+dy1*dy1),l2=Math.sqrt(dx2*dx2+dy2*dy2),dxm=m1.x-m2.x,dym=m1.y-m2.y,k=l1+l2==0?0:l2/(l1+l2),cm={x:m2.x+dxm*k,y:m2.y+dym*k},tx=s2.x-cm.x,ty=s2.y-cm.y;return{c1:new Point(m1.x+tx,m1.y+ty),c2:new Point(m2.x+tx,m2.y+ty)}}length(){let length=0,px,py;for(let i=0;i<=10;i+=1){let t=i/10,cx=this.point(t,this.startPoint.x,this.control1.x,this.control2.x,this.endPoint.x),cy=this.point(t,this.startPoint.y,this.control1.y,this.control2.y,this.endPoint.y);if(i>0){let xdiff=cx-px,ydiff=cy-py;length+=Math.sqrt(xdiff*xdiff+ydiff*ydiff)}px=cx,py=cy}return length}point(t,start,c1,c2,end){return start*(1-t)*(1-t)*(1-t)+3*c1*(1-t)*(1-t)*t+3*c2*(1-t)*t*t+end*t*t*t}},SignatureEventTarget=class{constructor(){__publicField(this,"_et");try{this._et=new EventTarget}catch{this._et=document}}addEventListener(type,listener,options){this._et.addEventListener(type,listener,options)}dispatchEvent(event){return this._et.dispatchEvent(event)}removeEventListener(type,callback,options){this._et.removeEventListener(type,callback,options)}};function throttle(fn,wait=250){let previous=0,timeout=null,result,storedContext,storedArgs,later=()=>{previous=Date.now(),timeout=null,result=fn.apply(storedContext,storedArgs),timeout||(storedContext=null,storedArgs=[])};return function(...args){let now=Date.now(),remaining=wait-(now-previous);return storedContext=this,storedArgs=args,remaining<=0||remaining>wait?(timeout&&(clearTimeout(timeout),timeout=null),previous=now,result=fn.apply(storedContext,storedArgs),timeout||(storedContext=null,storedArgs=[])):timeout||(timeout=window.setTimeout(later,remaining)),result}}var SignaturePad=class _SignaturePad extends SignatureEventTarget{constructor(canvas,options={}){super();__publicField(this,"dotSize");__publicField(this,"minWidth");__publicField(this,"maxWidth");__publicField(this,"penColor");__publicField(this,"minDistance");__publicField(this,"velocityFilterWeight");__publicField(this,"compositeOperation");__publicField(this,"backgroundColor");__publicField(this,"throttle");__publicField(this,"canvasContextOptions");__publicField(this,"_ctx");__publicField(this,"_drawingStroke",!1);__publicField(this,"_isEmpty",!0);__publicField(this,"_dataUrl");__publicField(this,"_dataUrlOptions");__publicField(this,"_lastPoints",[]);__publicField(this,"_data",[]);__publicField(this,"_lastVelocity",0);__publicField(this,"_lastWidth",0);__publicField(this,"_strokeMoveUpdate");__publicField(this,"_strokePointerId");this.canvas=canvas,this.velocityFilterWeight=options.velocityFilterWeight||.7,this.minWidth=options.minWidth||.5,this.maxWidth=options.maxWidth||2.5,this.throttle=options.throttle??16,this.minDistance=options.minDistance??5,this.dotSize=options.dotSize||0,this.penColor=options.penColor||"black",this.backgroundColor=options.backgroundColor||"rgba(0,0,0,0)",this.compositeOperation=options.compositeOperation||"source-over",this.canvasContextOptions=options.canvasContextOptions??{},this._strokeMoveUpdate=this.throttle?throttle(_SignaturePad.prototype._strokeUpdate,this.throttle):_SignaturePad.prototype._strokeUpdate,this._handleMouseDown=this._handleMouseDown.bind(this),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this._handleTouchStart=this._handleTouchStart.bind(this),this._handleTouchMove=this._handleTouchMove.bind(this),this._handleTouchEnd=this._handleTouchEnd.bind(this),this._handlePointerDown=this._handlePointerDown.bind(this),this._handlePointerMove=this._handlePointerMove.bind(this),this._handlePointerUp=this._handlePointerUp.bind(this),this._handlePointerCancel=this._handlePointerCancel.bind(this),this._handleTouchCancel=this._handleTouchCancel.bind(this),this._ctx=canvas.getContext("2d",this.canvasContextOptions),this.clear(),this.on()}clear(){let{_ctx:ctx,canvas}=this;ctx.fillStyle=this.backgroundColor,ctx.clearRect(0,0,canvas.width,canvas.height),ctx.fillRect(0,0,canvas.width,canvas.height),this._data=[],this._reset(this._getPointGroupOptions()),this._isEmpty=!0,this._dataUrl=void 0,this._dataUrlOptions=void 0,this._strokePointerId=void 0}redraw(){let data2=this._data,dataUrl=this._dataUrl,dataUrlOptions=this._dataUrlOptions;this.clear(),dataUrl&&this.fromDataURL(dataUrl,dataUrlOptions),this.fromData(data2,{clear:!1})}fromDataURL(dataUrl,options={}){return new Promise((resolve,reject)=>{let image=new Image,ratio=options.ratio||window.devicePixelRatio||1,width=options.width||this.canvas.width/ratio,height=options.height||this.canvas.height/ratio,xOffset=options.xOffset||0,yOffset=options.yOffset||0;this._reset(this._getPointGroupOptions()),image.onload=()=>{this._ctx.drawImage(image,xOffset,yOffset,width,height),resolve()},image.onerror=error=>{reject(error)},image.crossOrigin="anonymous",image.src=dataUrl,this._isEmpty=!1,this._dataUrl=dataUrl,this._dataUrlOptions={...options}})}toDataURL(type="image/png",encoderOptions){return type==="image/svg+xml"?(typeof encoderOptions!="object"&&(encoderOptions=void 0),`data:image/svg+xml;base64,${btoa(this.toSVG(encoderOptions))}`):(typeof encoderOptions!="number"&&(encoderOptions=void 0),this.canvas.toDataURL(type,encoderOptions))}on(){this.canvas.style.touchAction="none",this.canvas.style.msTouchAction="none",this.canvas.style.userSelect="none",this.canvas.style.webkitUserSelect="none";let isIOS=/Macintosh/.test(navigator.userAgent)&&"ontouchstart"in document;window.PointerEvent&&!isIOS?this._handlePointerEvents():(this._handleMouseEvents(),"ontouchstart"in window&&this._handleTouchEvents())}off(){this.canvas.style.touchAction="auto",this.canvas.style.msTouchAction="auto",this.canvas.style.userSelect="auto",this.canvas.style.webkitUserSelect="auto",this.canvas.removeEventListener("pointerdown",this._handlePointerDown),this.canvas.removeEventListener("mousedown",this._handleMouseDown),this.canvas.removeEventListener("touchstart",this._handleTouchStart),this._removeMoveUpEventListeners()}_getListenerFunctions(){let canvasWindow=window.document===this.canvas.ownerDocument?window:this.canvas.ownerDocument.defaultView??this.canvas.ownerDocument;return{addEventListener:canvasWindow.addEventListener.bind(canvasWindow),removeEventListener:canvasWindow.removeEventListener.bind(canvasWindow)}}_removeMoveUpEventListeners(){let{removeEventListener}=this._getListenerFunctions();removeEventListener("pointermove",this._handlePointerMove),removeEventListener("pointerup",this._handlePointerUp),removeEventListener("pointercancel",this._handlePointerCancel),removeEventListener("mousemove",this._handleMouseMove),removeEventListener("mouseup",this._handleMouseUp),removeEventListener("touchmove",this._handleTouchMove),removeEventListener("touchend",this._handleTouchEnd),removeEventListener("touchcancel",this._handleTouchCancel)}isEmpty(){return this._isEmpty}fromData(pointGroups,{clear=!0}={}){clear&&this.clear(),this._fromData(pointGroups,this._drawCurve.bind(this),this._drawDot.bind(this)),this._data=this._data.concat(pointGroups)}toData(){return this._data}_isLeftButtonPressed(event,only){return only?event.buttons===1:(event.buttons&1)===1}_pointerEventToSignatureEvent(event){return{event,type:event.type,x:event.clientX,y:event.clientY,pressure:"pressure"in event?event.pressure:0}}_touchEventToSignatureEvent(event){let touch=event.changedTouches[0];return{event,type:event.type,x:touch.clientX,y:touch.clientY,pressure:touch.force}}_handleMouseDown(event){!this._isLeftButtonPressed(event,!0)||this._drawingStroke||this._strokeBegin(this._pointerEventToSignatureEvent(event))}_handleMouseMove(event){if(!this._isLeftButtonPressed(event,!0)||!this._drawingStroke){this._strokeEnd(this._pointerEventToSignatureEvent(event),!1);return}this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event))}_handleMouseUp(event){this._isLeftButtonPressed(event)||this._strokeEnd(this._pointerEventToSignatureEvent(event))}_handleTouchStart(event){event.targetTouches.length!==1||this._drawingStroke||(event.cancelable&&event.preventDefault(),this._strokeBegin(this._touchEventToSignatureEvent(event)))}_handleTouchMove(event){if(event.targetTouches.length===1){if(event.cancelable&&event.preventDefault(),!this._drawingStroke){this._strokeEnd(this._touchEventToSignatureEvent(event),!1);return}this._strokeMoveUpdate(this._touchEventToSignatureEvent(event))}}_handleTouchEnd(event){event.targetTouches.length===0&&(event.cancelable&&event.preventDefault(),this._strokeEnd(this._touchEventToSignatureEvent(event)))}_handlePointerCancel(event){this._allowPointerId(event)&&(event.preventDefault(),this._strokeEnd(this._pointerEventToSignatureEvent(event),!1))}_handleTouchCancel(event){event.cancelable&&event.preventDefault(),this._strokeEnd(this._touchEventToSignatureEvent(event),!1)}_getPointerId(event){return event.persistentDeviceId||event.pointerId}_allowPointerId(event,allowUndefined=!1){return typeof this._strokePointerId>"u"?allowUndefined:this._getPointerId(event)===this._strokePointerId}_handlePointerDown(event){this._drawingStroke||!this._isLeftButtonPressed(event)||!this._allowPointerId(event,!0)||(this._strokePointerId=this._getPointerId(event),event.preventDefault(),this._strokeBegin(this._pointerEventToSignatureEvent(event)))}_handlePointerMove(event){if(this._allowPointerId(event)){if(!this._isLeftButtonPressed(event,!0)||!this._drawingStroke){this._strokeEnd(this._pointerEventToSignatureEvent(event),!1);return}event.preventDefault(),this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event))}}_handlePointerUp(event){this._isLeftButtonPressed(event)||!this._allowPointerId(event)||(event.preventDefault(),this._strokeEnd(this._pointerEventToSignatureEvent(event)))}_getPointGroupOptions(group){return{penColor:group&&"penColor"in group?group.penColor:this.penColor,dotSize:group&&"dotSize"in group?group.dotSize:this.dotSize,minWidth:group&&"minWidth"in group?group.minWidth:this.minWidth,maxWidth:group&&"maxWidth"in group?group.maxWidth:this.maxWidth,velocityFilterWeight:group&&"velocityFilterWeight"in group?group.velocityFilterWeight:this.velocityFilterWeight,compositeOperation:group&&"compositeOperation"in group?group.compositeOperation:this.compositeOperation}}_strokeBegin(event){if(!this.dispatchEvent(new CustomEvent("beginStroke",{detail:event,cancelable:!0})))return;let{addEventListener}=this._getListenerFunctions();switch(event.event.type){case"mousedown":addEventListener("mousemove",this._handleMouseMove,{passive:!1}),addEventListener("mouseup",this._handleMouseUp,{passive:!1});break;case"touchstart":addEventListener("touchmove",this._handleTouchMove,{passive:!1}),addEventListener("touchend",this._handleTouchEnd,{passive:!1}),addEventListener("touchcancel",this._handleTouchCancel,{passive:!1});break;case"pointerdown":addEventListener("pointermove",this._handlePointerMove,{passive:!1}),addEventListener("pointerup",this._handlePointerUp,{passive:!1}),addEventListener("pointercancel",this._handlePointerCancel,{passive:!1});break;default:}this._drawingStroke=!0;let pointGroupOptions=this._getPointGroupOptions(),newPointGroup={...pointGroupOptions,points:[]};this._data.push(newPointGroup),this._reset(pointGroupOptions),this._strokeUpdate(event)}_strokeUpdate(event){if(!this._drawingStroke)return;if(this._data.length===0){this._strokeBegin(event);return}this.dispatchEvent(new CustomEvent("beforeUpdateStroke",{detail:event}));let point=this._createPoint(event.x,event.y,event.pressure),lastPointGroup=this._data[this._data.length-1],lastPoints=lastPointGroup.points,lastPoint=lastPoints.length>0&&lastPoints[lastPoints.length-1],isLastPointTooClose=lastPoint?point.distanceTo(lastPoint)<=this.minDistance:!1,pointGroupOptions=this._getPointGroupOptions(lastPointGroup);if(!lastPoint||!(lastPoint&&isLastPointTooClose)){let curve=this._addPoint(point,pointGroupOptions);lastPoint?curve&&this._drawCurve(curve,pointGroupOptions):this._drawDot(point,pointGroupOptions),lastPoints.push({time:point.time,x:point.x,y:point.y,pressure:point.pressure})}this.dispatchEvent(new CustomEvent("afterUpdateStroke",{detail:event}))}_strokeEnd(event,shouldUpdate=!0){this._removeMoveUpEventListeners(),this._drawingStroke&&(shouldUpdate&&this._strokeUpdate(event),this._drawingStroke=!1,this._strokePointerId=void 0,this.dispatchEvent(new CustomEvent("endStroke",{detail:event})))}_handlePointerEvents(){this._drawingStroke=!1,this.canvas.addEventListener("pointerdown",this._handlePointerDown,{passive:!1})}_handleMouseEvents(){this._drawingStroke=!1,this.canvas.addEventListener("mousedown",this._handleMouseDown,{passive:!1})}_handleTouchEvents(){this.canvas.addEventListener("touchstart",this._handleTouchStart,{passive:!1})}_reset(options){this._lastPoints=[],this._lastVelocity=0,this._lastWidth=(options.minWidth+options.maxWidth)/2,this._ctx.fillStyle=options.penColor,this._ctx.globalCompositeOperation=options.compositeOperation}_createPoint(x,y,pressure){let rect=this.canvas.getBoundingClientRect();return new Point(x-rect.left,y-rect.top,pressure,new Date().getTime())}_addPoint(point,options){let{_lastPoints}=this;if(_lastPoints.push(point),_lastPoints.length>2){_lastPoints.length===3&&_lastPoints.unshift(_lastPoints[0]);let widths=this._calculateCurveWidths(_lastPoints[1],_lastPoints[2],options),curve=Bezier.fromPoints(_lastPoints,widths);return _lastPoints.shift(),curve}return null}_calculateCurveWidths(startPoint,endPoint,options){let velocity=options.velocityFilterWeight*endPoint.velocityFrom(startPoint)+(1-options.velocityFilterWeight)*this._lastVelocity,newWidth=this._strokeWidth(velocity,options),widths={end:newWidth,start:this._lastWidth};return this._lastVelocity=velocity,this._lastWidth=newWidth,widths}_strokeWidth(velocity,options){return Math.max(options.maxWidth/(velocity+1),options.minWidth)}_drawCurveSegment(x,y,width){let ctx=this._ctx;ctx.moveTo(x,y),ctx.arc(x,y,width,0,2*Math.PI,!1),this._isEmpty=!1}_drawCurve(curve,options){let ctx=this._ctx,widthDelta=curve.endWidth-curve.startWidth,drawSteps=Math.ceil(curve.length())*2;ctx.beginPath(),ctx.fillStyle=options.penColor;for(let i=0;i<drawSteps;i+=1){let t=i/drawSteps,tt=t*t,ttt=tt*t,u=1-t,uu=u*u,uuu=uu*u,x=uuu*curve.startPoint.x;x+=3*uu*t*curve.control1.x,x+=3*u*tt*curve.control2.x,x+=ttt*curve.endPoint.x;let y=uuu*curve.startPoint.y;y+=3*uu*t*curve.control1.y,y+=3*u*tt*curve.control2.y,y+=ttt*curve.endPoint.y;let width=Math.min(curve.startWidth+ttt*widthDelta,options.maxWidth);this._drawCurveSegment(x,y,width)}ctx.closePath(),ctx.fill()}_drawDot(point,options){let ctx=this._ctx,width=options.dotSize>0?options.dotSize:(options.minWidth+options.maxWidth)/2;ctx.beginPath(),this._drawCurveSegment(point.x,point.y,width),ctx.closePath(),ctx.fillStyle=options.penColor,ctx.fill()}_fromData(pointGroups,drawCurve,drawDot){for(let group of pointGroups){let{points}=group,pointGroupOptions=this._getPointGroupOptions(group);if(points.length>1)for(let j=0;j<points.length;j+=1){let basicPoint=points[j],point=new Point(basicPoint.x,basicPoint.y,basicPoint.pressure,basicPoint.time);j===0&&this._reset(pointGroupOptions);let curve=this._addPoint(point,pointGroupOptions);curve&&drawCurve(curve,pointGroupOptions)}else this._reset(pointGroupOptions),drawDot(points[0],pointGroupOptions)}}toSVG({includeBackgroundColor=!1,includeDataUrl=!1}={}){let pointGroups=this._data,ratio=Math.max(window.devicePixelRatio||1,1),minX=0,minY=0,maxX=this.canvas.width/ratio,maxY=this.canvas.height/ratio,svg=document.createElementNS("http://www.w3.org/2000/svg","svg");if(svg.setAttribute("xmlns","http://www.w3.org/2000/svg"),svg.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),svg.setAttribute("viewBox",`${minX} ${minY} ${maxX} ${maxY}`),svg.setAttribute("width",maxX.toString()),svg.setAttribute("height",maxY.toString()),includeBackgroundColor&&this.backgroundColor){let rect=document.createElement("rect");rect.setAttribute("width","100%"),rect.setAttribute("height","100%"),rect.setAttribute("fill",this.backgroundColor),svg.appendChild(rect)}if(includeDataUrl&&this._dataUrl){let ratio2=this._dataUrlOptions?.ratio||window.devicePixelRatio||1,width=this._dataUrlOptions?.width||this.canvas.width/ratio2,height=this._dataUrlOptions?.height||this.canvas.height/ratio2,xOffset=this._dataUrlOptions?.xOffset||0,yOffset=this._dataUrlOptions?.yOffset||0,image=document.createElement("image");image.setAttribute("x",xOffset.toString()),image.setAttribute("y",yOffset.toString()),image.setAttribute("width",width.toString()),image.setAttribute("height",height.toString()),image.setAttribute("preserveAspectRatio","none"),image.setAttribute("href",this._dataUrl),svg.appendChild(image)}return this._fromData(pointGroups,(curve,{penColor})=>{let path=document.createElement("path");if(!isNaN(curve.control1.x)&&!isNaN(curve.control1.y)&&!isNaN(curve.control2.x)&&!isNaN(curve.control2.y)){let attr=`M ${curve.startPoint.x.toFixed(3)},${curve.startPoint.y.toFixed(3)} C ${curve.control1.x.toFixed(3)},${curve.control1.y.toFixed(3)} ${curve.control2.x.toFixed(3)},${curve.control2.y.toFixed(3)} ${curve.endPoint.x.toFixed(3)},${curve.endPoint.y.toFixed(3)}`;path.setAttribute("d",attr),path.setAttribute("stroke-width",(curve.endWidth*2.25).toFixed(3)),path.setAttribute("stroke",penColor),path.setAttribute("fill","none"),path.setAttribute("stroke-linecap","round"),svg.appendChild(path)}},(point,{penColor,dotSize,minWidth,maxWidth})=>{let circle=document.createElement("circle"),size=dotSize>0?dotSize:(minWidth+maxWidth)/2;circle.setAttribute("r",size.toString()),circle.setAttribute("cx",point.x.toString()),circle.setAttribute("cy",point.y.toString()),circle.setAttribute("fill",penColor),svg.appendChild(circle)}),svg.outerHTML}};var import_jsx_runtime98=require("react/jsx-runtime");function SignatureInput(props){let medplum=(0,import_react_hooks35.useMedplum)(),{width=500,height=200,defaultValue:defaultValue2,who,onChange,...rest}=props,canvasRef=(0,import_react69.useRef)(null),signaturePadRef=(0,import_react69.useRef)(null),onChangeRef=(0,import_react69.useRef)(onChange);return(0,import_react69.useLayoutEffect)(()=>{onChangeRef.current=onChange}),(0,import_react69.useEffect)(()=>{function handleEndStroke(){onChangeRef.current?.({type:[{system:import_core126.HTTP_HL7_ORG+"/fhir/signature-type",code:"ProofOfOrigin",display:"Proof of Origin"}],when:new Date().toISOString(),who:who??(0,import_core126.createReference)(medplum.getProfile()),data:signaturePadRef.current?.toDataURL().split(",")[1]})}if(canvasRef.current){let signaturePad=new SignaturePad(canvasRef.current);defaultValue2?.data&&signaturePad.fromDataURL(defaultValue2.data).catch(console.error),signaturePad.addEventListener("endStroke",handleEndStroke),signaturePadRef.current=signaturePad}return()=>{signaturePadRef.current&&signaturePadRef.current.removeEventListener("beginStroke",handleEndStroke)}},[medplum,defaultValue2,who]),(0,import_jsx_runtime98.jsxs)(import_core125.Paper,{withBorder:!0,p:0,w:width,h:height,pos:"relative",...rest,children:[(0,import_jsx_runtime98.jsx)("canvas",{ref:canvasRef,width,height,"aria-label":"Signature input area"}),(0,import_jsx_runtime98.jsx)(import_core125.Button,{onClick:()=>{signaturePadRef.current&&signaturePadRef.current.clear(),onChangeRef.current?.(void 0)},"aria-label":"Clear signature",pos:"absolute",top:0,right:0,size:"xs",leftSection:(0,import_jsx_runtime98.jsx)(IconTrash,{size:16}),variant:"subtle",color:"gray",children:"Clear"})]})}var import_core132=require("@mantine/core"),import_react_hooks38=require("@medplum/react-hooks");var import_core127=require("@mantine/core");var import_jsx_runtime99=require("react/jsx-runtime");function QuestionnaireFormGroup(props){let newContext=[...props.context,props.responseItem];return(0,import_jsx_runtime99.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime99.jsx)(import_core127.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime99.jsx)(QuestionnaireFormItemArray,{formState:props.formState,context:newContext,items:props.item.item??[],responseItems:props.responseItem.item??[]})]},props.item.linkId)}var import_core128=require("@mantine/core"),import_core129=require("@medplum/core"),import_react_hooks36=require("@medplum/react-hooks"),import_react70=require("react");var import_jsx_runtime100=require("react/jsx-runtime"),MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS=30,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS=50;function QuestionnaireFormItem(props){let formState=props.formState,item=props.item,response=props.responseItem;function onChangeAnswer(newResponseAnswer){if(formState&&props.context)if(item.repeats&&props.index!==void 0&&item.type!==import_react_hooks36.QuestionnaireItemType.choice&&item.type!==import_react_hooks36.QuestionnaireItemType.openChoice){let updatedAnswers=[...response.answer||[]];newResponseAnswer.length===0?updatedAnswers.splice(props.index,1):updatedAnswers[props.index]=newResponseAnswer[0],formState.onChangeAnswer(props.context,props.item,updatedAnswers)}else formState.onChangeAnswer(props.context,props.item,newResponseAnswer)}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let inputId=item.repeats&&props.index!==void 0&&item.type!==import_react_hooks36.QuestionnaireItemType.choice&&item.type!==import_react_hooks36.QuestionnaireItemType.openChoice?`${name}-${props.index}`:name,initial;item.initial&&item.initial.length>0?initial=item.initial[0]:item.answerOption&&item.answerOption.length>0&&(initial=item.answerOption.find(option=>option.initialSelected));let defaultValue2=getCurrentAnswer(response,props.index)??(0,import_react_hooks36.getItemInitialValue)(initial),validationError=(0,import_core129.getExtension)(response,`${import_core129.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`),formComponent=null;switch(type){case import_react_hooks36.QuestionnaireItemType.display:formComponent=(0,import_jsx_runtime100.jsx)("p",{children:props.item.text},props.item.linkId);break;case import_react_hooks36.QuestionnaireItemType.boolean:formComponent=(0,import_jsx_runtime100.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:inputId,children:(0,import_jsx_runtime100.jsx)(import_core128.Checkbox,{id:inputId,name,required:props.required??item.required,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueBoolean:e.currentTarget.checked}])})},props.item.linkId);break;case import_react_hooks36.QuestionnaireItemType.decimal:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{type:"number",step:"any",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer(e.currentTarget.value===""?[]:[{valueDecimal:e.currentTarget.valueAsNumber}])});break;case import_react_hooks36.QuestionnaireItemType.integer:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{type:"number",step:1,id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer(e.currentTarget.value===""?[]:[{valueInteger:e.currentTarget.valueAsNumber}])});break;case import_react_hooks36.QuestionnaireItemType.date:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{type:"date",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueDate:e.currentTarget.value}])});break;case import_react_hooks36.QuestionnaireItemType.dateTime:formComponent=(0,import_jsx_runtime100.jsx)(DateTimeInput,{name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueDateTime:newValue}])});break;case import_react_hooks36.QuestionnaireItemType.time:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{type:"time",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueTime:e.currentTarget.value}])});break;case import_react_hooks36.QuestionnaireItemType.string:case import_react_hooks36.QuestionnaireItemType.url:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer(value===""?[]:[{valueString:value}])}});break;case import_react_hooks36.QuestionnaireItemType.text:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.Textarea,{id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer(value===""?[]:[{valueString:value}])}});break;case import_react_hooks36.QuestionnaireItemType.attachment:formComponent=(0,import_jsx_runtime100.jsx)(import_core128.Group,{py:4,children:(0,import_jsx_runtime100.jsx)(AttachmentInput,{path:"",name:inputId,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueAttachment:newValue}])})});break;case import_react_hooks36.QuestionnaireItemType.reference:formComponent=(0,import_jsx_runtime100.jsx)(ReferenceInput,{name:inputId,required:props.required??item.required,targetTypes:(0,import_react_hooks36.getQuestionnaireItemReferenceTargetTypes)(item),searchCriteria:(0,import_react_hooks36.getQuestionnaireItemReferenceFilter)(item,formState?.subject,formState?.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueReference:newValue}])});break;case import_react_hooks36.QuestionnaireItemType.quantity:formComponent=(0,import_jsx_runtime100.jsx)(QuantityInput,{path:"",name:inputId,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueQuantity:newValue}]),disableWheel:!0});break;case import_react_hooks36.QuestionnaireItemType.choice:case import_react_hooks36.QuestionnaireItemType.openChoice:{let{widget,multiselect}=resolveChoiceControl(item),sharedProps={name:inputId,item,required:props.required??item.required,initial,response,multiselect,onChangeAnswer};widget==="check-box"?formComponent=(0,import_jsx_runtime100.jsx)(QuestionnaireCheckboxInput,{...sharedProps}):widget==="drop-down"?formComponent=(0,import_jsx_runtime100.jsx)(QuestionnaireDropdownInput,{...sharedProps}):formComponent=(0,import_jsx_runtime100.jsx)(QuestionnaireRadioButtonInput,{...sharedProps})}break;default:return null}return(0,import_jsx_runtime100.jsxs)(import_jsx_runtime100.Fragment,{children:[formComponent,validationError?.valueString&&(0,import_jsx_runtime100.jsx)(import_core128.Text,{c:"red",size:"lg",mt:4,children:validationError.valueString})]})}function QuestionnaireDropdownInput(props){let{name,item,required,initial,onChangeAnswer,response,multiselect}=props;if(!item.answerOption?.length&&!item.answerValueSet)return(0,import_jsx_runtime100.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_react_hooks36.getItemInitialValue)(initial),defaultValue2=getCurrentAnswer(response)??initialValue,currentAnswer=getCurrentMultiSelectAnswer(response),isMultiSelect=item.repeats||multiselect;if(item.answerValueSet)return(0,import_jsx_runtime100.jsx)(ValueSetAutocomplete,{name,placeholder:"Select items",binding:item.answerValueSet,maxValues:isMultiSelect?void 0:1,required,onChange:values=>{isMultiSelect?values.length===0?onChangeAnswer([{}]):onChangeAnswer(values.map(coding=>({valueCoding:coding}))):onChangeAnswer([{valueCoding:values[0]}])},defaultValue:defaultValue2?.value});if(isMultiSelect){let{propertyName,data:data2}=formatSelectData(item);return(0,import_jsx_runtime100.jsx)(import_core128.MultiSelect,{data:data2,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core129.typedValueToString)(initialValue)],required,onChange:selected=>{if(selected.length===0)onChangeAnswer([{}]);else{let values=(0,import_react_hooks36.getNewMultiSelectValues)(selected,propertyName,item);onChangeAnswer(values)}}})}else{let data2=[""];if(item.answerOption)for(let option of item.answerOption){let optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);data2.push((0,import_core129.typedValueToString)(optionValue))}return(0,import_jsx_runtime100.jsx)(import_core128.NativeSelect,{id:name,name,required,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){onChangeAnswer([{}]);return}let option=item.answerOption[index-1],optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option),propertyName="value"+(0,import_core129.capitalize)(optionValue.type);onChangeAnswer([{[propertyName]:optionValue.value}])},defaultValue:(0,import_core129.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}}function getValueSetOptions(valueSetUrl,medplum){return valueSetUrl?medplum.valueSetExpand({url:valueSetUrl,count:MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS+1}).then(valueSet=>valueSet.expansion?.contains??[]):Promise.resolve([])}function useValueSetOptions(valueSetUrl){let medplum=(0,import_react_hooks36.useMedplum)(),[valueSetOptions,setValueSetOptions]=(0,import_react70.useState)([]),[isLoading,setIsLoading]=(0,import_react70.useState)(!1);return(0,import_react70.useEffect)(()=>{async function loadValueSet(){if(valueSetUrl){setIsLoading(!0);try{let options=await getValueSetOptions(valueSetUrl,medplum);setValueSetOptions(options)}catch(err){console.error("Error loading value set:",err)}finally{setIsLoading(!1)}}}loadValueSet().catch(console.error)},[valueSetUrl,medplum]),[valueSetOptions,isLoading]}function getOptionsFromValueSet(valueSetOptions,name){return valueSetOptions.map((option,i)=>{let optionName=`${name}-valueset-${i}`,optionValue={type:"Coding",value:{system:option.system,code:option.code,display:option.display}};return[optionName,optionValue]})}function QuestionnaireRadioButtonInput(props){let{name,item,required,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core129.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_react_hooks36.getItemInitialValue)(initial),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),options=[],defaultValue2;if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);return optionValue?.value?(initialValue&&(0,import_core129.stringify)(optionValue)===(0,import_core129.stringify)(initialValue)&&(defaultValue2=optionName),[optionName,optionValue]):null}).filter(option=>option!==null);options.push(...mappedOptions)}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);if(isLoading)return(0,import_jsx_runtime100.jsx)(import_core128.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime100.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS);return(0,import_jsx_runtime100.jsxs)(import_jsx_runtime100.Fragment,{children:[(0,import_jsx_runtime100.jsx)(import_core128.Radio.Group,{name,value:answerLinkId??defaultValue2,required,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core129.capitalize)(optionValue.type);onChangeAnswer([{[propertyName]:optionValue.value}])}},children:limitedOptions.map(([optionName,optionValue])=>(0,import_jsx_runtime100.jsx)(import_core128.Radio,{id:optionName,value:optionName,py:4,required,label:(0,import_jsx_runtime100.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime100.jsxs)(import_core128.Text,{size:"sm",c:"dimmed",mt:"xs",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function QuestionnaireCheckboxInput(props){let{name,item,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core129.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),initialSelectedValues=item.answerValueSet?(response?.answer?.map(a=>a.valueCoding)||[]).filter(c=>c!==void 0):getCurrentMultiSelectAnswer(response),[selectedValues,setSelectedValues]=(0,import_react70.useState)(initialSelectedValues),options=[];if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);return optionValue?.value?[optionName,optionValue]:null}).filter(option=>option!==null);options.push(...mappedOptions)}if(isLoading)return(0,import_jsx_runtime100.jsx)(import_core128.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime100.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS),handleCheckboxChange=(optionValue,selected)=>{if(item.answerValueSet){let currentCodings=selectedValues,newCodings;selected?newCodings=[...currentCodings,optionValue.value]:newCodings=currentCodings.filter(c=>!(0,import_core129.deepEquals)(c,optionValue.value)),setSelectedValues(newCodings),newCodings.length===0?onChangeAnswer([{}]):onChangeAnswer(newCodings.map(coding=>({valueCoding:coding})))}else{let currentValues=selectedValues,optionValueStr=(0,import_core129.typedValueToString)(optionValue),newValues;if(selected?newValues=[...currentValues,optionValueStr]:newValues=currentValues.filter(v=>v!==optionValueStr),setSelectedValues(newValues),newValues.length===0)onChangeAnswer([{}]);else{let values=(0,import_react_hooks36.getNewMultiSelectValues)(newValues,"value"+(0,import_core129.capitalize)(optionValue.type),item);onChangeAnswer(values)}}};return(0,import_jsx_runtime100.jsxs)(import_core128.Group,{style:{flexDirection:"column",alignItems:"flex-start"},children:[limitedOptions.map(([optionName,optionValue])=>{let optionValueStr=(0,import_core129.typedValueToString)(optionValue),isChecked=item.answerValueSet?selectedValues.some(coding=>(0,import_core129.deepEquals)(coding,optionValue.value)):selectedValues.includes(optionValueStr);return(0,import_jsx_runtime100.jsx)(import_core128.Checkbox,{id:optionName,label:(0,import_jsx_runtime100.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value}),checked:isChecked,onChange:event=>handleCheckboxChange(optionValue,event.currentTarget.checked)},optionName)}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime100.jsxs)(import_core128.Text,{size:"sm",c:"dimmed",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function NoAnswerDisplay(){return(0,import_jsx_runtime100.jsx)(import_core128.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getCurrentAnswer(response,index=0){return(0,import_react_hooks36.getItemAnswerOptionValue)(response?.answer?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response?.answer;return results?results.map(a=>(0,import_react_hooks36.getItemAnswerOptionValue)(a)).map(type=>(0,import_core129.formatCoding)(type?.value)||type?.value).filter(Boolean):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core129.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}var choiceTypes=["drop-down","radio-button","check-box"];function resolveChoiceControl(item){let widget="radio-button",multiselect=!1;item.answerValueSet&&(widget="drop-down");for(let ext of item.extension??[]){if(ext.url!==import_react_hooks36.QUESTIONNAIRE_ITEM_CONTROL_URL)continue;let code=ext.valueCodeableConcept?.coding?.[0]?.code;choiceTypes.includes(code)&&(widget=code),code==="multi-select"&&(multiselect=!0)}return widget==="radio-button"&&multiselect&&(widget="check-box"),{widget,multiselect}}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option),propertyName="value"+(0,import_core129.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(answerOption=>{let answerOptionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(answerOption),answerOptionValueStr=(0,import_core129.typedValueToString)(answerOptionValue);return{value:answerOptionValueStr,label:answerOptionValueStr}});return{propertyName,data:data2}}var import_core130=require("@mantine/core");var import_jsx_runtime101=require("react/jsx-runtime");function QuestionnaireFormRepeatableGroup(props){return(0,import_jsx_runtime101.jsxs)(import_jsx_runtime101.Fragment,{children:[props.responseItems.map(response=>(0,import_jsx_runtime101.jsx)(QuestionnaireFormGroup,{formState:props.formState,context:props.context,item:props.item,responseItem:response},`group-${response.id}`)),(0,import_jsx_runtime101.jsx)(import_core130.Anchor,{onClick:()=>props.formState.onAddGroup(props.context,props.item),children:`Add Group: ${props.item.text}`})]})}var import_core131=require("@mantine/core"),import_react_hooks37=require("@medplum/react-hooks");var import_jsx_runtime102=require("react/jsx-runtime");function QuestionnaireFormRepeatableItem(props){let{formState,context,item,responseItem}=props,isChoiceType=item.type===import_react_hooks37.QuestionnaireItemType.choice||item.type===import_react_hooks37.QuestionnaireItemType.openChoice,showAddButton=!isChoiceType,answers=!isChoiceType&&responseItem.answer&&responseItem.answer.length>0?responseItem.answer:[{}];return(0,import_jsx_runtime102.jsxs)(FormSection,{title:props.item.text,withAsterisk:props.item.required,children:[(0,import_jsx_runtime102.jsx)(import_core131.Stack,{gap:"xs",children:answers?.map((_,index)=>(0,import_jsx_runtime102.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem,index},`${item.linkId}-${index}`))}),showAddButton&&(0,import_jsx_runtime102.jsx)(import_core131.Anchor,{onClick:()=>formState.onAddAnswer(context,item),children:"Add Item"})]},props.item.linkId)}var import_jsx_runtime103=require("react/jsx-runtime");function QuestionnaireFormItemArray(props){let{formState,context,items,responseItems}=props;return(0,import_jsx_runtime103.jsx)(import_core132.Stack,{children:items.map((item,index)=>{if(!(0,import_react_hooks38.isQuestionEnabled)(item,formState.questionnaireResponse))return null;if(item.type===import_react_hooks38.QuestionnaireItemType.display)return(0,import_jsx_runtime103.jsx)("p",{children:item.text},`display-${item.id}-${index}`);let filteredResponseItems=responseItems.filter(responseItem=>responseItem.linkId===item.linkId);return item.type===import_react_hooks38.QuestionnaireItemType.group&&item.repeats?(0,import_jsx_runtime103.jsx)(QuestionnaireFormRepeatableGroup,{formState,context,item,responseItems:filteredResponseItems},`repeating-group-${item.id}-${index}`):item.type===import_react_hooks38.QuestionnaireItemType.group?(0,import_jsx_runtime103.jsx)(QuestionnaireFormGroup,{formState,context,item,responseItem:filteredResponseItems[0]},`group-${item.id}-${index}`):item.type===import_react_hooks38.QuestionnaireItemType.boolean?(0,import_jsx_runtime103.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem:filteredResponseItems[0],index:0},`boolean-item-${item.id}-${index}`):item.repeats?(0,import_jsx_runtime103.jsx)(QuestionnaireFormRepeatableItem,{formState,context,item,responseItem:filteredResponseItems[0]},`repeating-item-${item.id}-${index}`):(0,import_jsx_runtime103.jsx)(FormSection,{htmlFor:item.linkId,title:item.text,withAsterisk:item.required,children:(0,import_jsx_runtime103.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem:filteredResponseItems[0],index:0})},`repeating-item-${item.id}-${index}`)})})}var import_core133=require("@mantine/core");var import_jsx_runtime104=require("react/jsx-runtime");function QuestionnaireFormStepper(props){let{formState,submitButtonText,excludeButtons,children}=props,pages=formState.pages,activePage=formState.activePage,showBackButton=activePage>0,showNextButton=activePage<pages.length-1,showSubmitButton=activePage===pages.length-1;return(0,import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment,{children:[(0,import_jsx_runtime104.jsx)(import_core133.Stepper,{active:activePage,allowNextStepsSelect:!1,p:6,children:pages.map((page,index)=>(0,import_jsx_runtime104.jsx)(import_core133.Stepper.Step,{label:page.title,children:index===activePage&&children},page.linkId))}),!excludeButtons&&(0,import_jsx_runtime104.jsxs)(import_core133.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime104.jsx)(import_core133.Button,{onClick:formState.onPrevPage,children:"Back"}),showNextButton&&(0,import_jsx_runtime104.jsx)(import_core133.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&formState.onNextPage()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime104.jsx)(SubmitButton,{children:submitButtonText??"Submit"})]})]})}var import_jsx_runtime105=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=(0,import_react_hooks39.useMedplum)(),[signatureRequiredSubmitted,setSignatureRequiredSubmitted]=(0,import_react71.useState)(!1),propsRef=(0,import_react71.useRef)(props),pendingChangeRef=(0,import_react71.useRef)(void 0);(0,import_react71.useLayoutEffect)(()=>{propsRef.current=props});let onFormChange=(0,import_react71.useCallback)(response=>{pendingChangeRef.current=response},[]),formState=(0,import_react_hooks39.useQuestionnaireForm)({questionnaire:props.questionnaire,defaultValue:props.questionnaireResponse,subject:props.subject,encounter:props.encounter,source:props.source,disablePagination:props.disablePagination,onChange:onFormChange}),formStateRef=(0,import_react71.useRef)(formState);(0,import_react71.useLayoutEffect)(()=>{formStateRef.current=formState}),(0,import_react71.useEffect)(()=>{let pendingChange=pendingChangeRef.current;pendingChange&&(pendingChangeRef.current=void 0,setSignatureRequiredSubmitted(!1),propsRef.current.onChange?.(pendingChange))});let isSignatureRequired=(0,import_react71.useMemo)(()=>formState.loading?!1:!!(0,import_core135.getExtension)(formState.questionnaire,import_react_hooks39.QUESTIONNAIRE_SIGNATURE_REQUIRED_URL),[formState]),hasSignature=(0,import_react71.useMemo)(()=>formState.loading?!1:!!formState.questionnaireResponse.extension?.find(ext=>ext.url===import_react_hooks39.QUESTIONNAIRE_SIGNATURE_RESPONSE_URL),[formState]),handleSubmit=(0,import_react71.useCallback)(()=>{let formState2=formStateRef.current;if(formState2.loading)return;let onSubmit=propsRef.current.onSubmit;if(!onSubmit)return;if(isSignatureRequired&&!hasSignature){setSignatureRequiredSubmitted(!0);return}let questionnaire2=formState2.questionnaire,response=formState2.questionnaireResponse,subject=propsRef.current.subject,source=propsRef.current.source;if(!source){let profile=medplum.getProfile();profile&&(source=(0,import_core135.createReference)(profile))}onSubmit({...response,questionnaire:questionnaire2.url??(0,import_core135.getReferenceString)(questionnaire2),subject,source,authored:new Date().toISOString(),status:"completed"})},[medplum,isSignatureRequired,hasSignature]);return formState.loading?null:(0,import_jsx_runtime105.jsxs)(Form,{testid:"questionnaire-form",onSubmit:handleSubmit,children:[formState.questionnaire.title&&(0,import_jsx_runtime105.jsx)(import_core134.Title,{children:formState.questionnaire.title}),formState.pagination?(0,import_jsx_runtime105.jsx)(QuestionnaireFormStepper,{formState,submitButtonText:props.submitButtonText,excludeButtons:props.excludeButtons,children:(0,import_jsx_runtime105.jsx)(QuestionnaireFormItemArray,{formState,context:[],items:formState.items,responseItems:formState.responseItems})}):(0,import_jsx_runtime105.jsxs)(import_jsx_runtime105.Fragment,{children:[(0,import_jsx_runtime105.jsx)(QuestionnaireFormItemArray,{formState,context:[],items:formState.items,responseItems:formState.responseItems}),isSignatureRequired&&(0,import_jsx_runtime105.jsxs)(import_core134.Stack,{mt:"md",gap:0,children:[(0,import_jsx_runtime105.jsx)(import_core134.Text,{size:"sm",fw:500,children:"Signature"}),(0,import_jsx_runtime105.jsx)(SignatureInput,{onChange:formState.onChangeSignature}),!hasSignature&&signatureRequiredSubmitted&&(0,import_jsx_runtime105.jsx)(import_core134.Text,{c:"red",size:"sm",children:"Signature is required."})]}),!props.excludeButtons&&(0,import_jsx_runtime105.jsx)(import_core134.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:(0,import_jsx_runtime105.jsx)(SubmitButton,{children:props.submitButtonText??"Submit"})})]})]})}var import_jsx_runtime106=require("react/jsx-runtime"),NewTopicDialog=props=>{let{subject,opened,onClose,onSubmit,allowPatientSelection=!1}=props,medplum=(0,import_react_hooks40.useMedplum)(),profile=(0,import_react_hooks40.useMedplumProfile)(),profileRef=(0,import_react72.useMemo)(()=>profile?(0,import_core137.createReference)(profile):void 0,[profile]),[topic,setTopic]=(0,import_react72.useState)(""),[practitioners,setPractitioners]=(0,import_react72.useState)(profile?.resourceType==="Practitioner"?[(0,import_core137.createReference)(profile)]:[]),[patient,setPatient]=(0,import_react72.useState)(subject?(0,import_core137.createReference)(subject):void 0),initialResponse=(0,import_react72.useMemo)(()=>{if(profile?.resourceType==="Practitioner")return{resourceType:"QuestionnaireResponse",status:"in-progress",item:[{linkId:"q1",answer:[{valueReference:(0,import_core137.createReference)(profile)}]}]}},[profile]);return(0,import_jsx_runtime106.jsx)(import_core136.Modal,{opened,onClose,title:"New Message",size:"md",children:(0,import_jsx_runtime106.jsxs)(import_core136.Stack,{gap:"xl",children:[(0,import_jsx_runtime106.jsxs)(import_core136.Stack,{gap:0,children:[(0,import_jsx_runtime106.jsx)(import_core136.Text,{fw:500,children:"Patient"}),allowPatientSelection&&(0,import_jsx_runtime106.jsx)(import_core136.Text,{c:"dimmed",children:"Select a patient"}),(0,import_jsx_runtime106.jsx)(ResourceInput,{resourceType:"Patient",name:"patient",required:!0,defaultValue:patient,disabled:!allowPatientSelection&&!!patient,onChange:value=>{setPatient(value?(0,import_core137.createReference)(value):void 0)}})]}),(0,import_jsx_runtime106.jsxs)(import_core136.Stack,{gap:0,children:[(0,import_jsx_runtime106.jsx)(import_core136.Text,{fw:500,children:"Practitioner (optional)"}),(0,import_jsx_runtime106.jsx)(import_core136.Text,{c:"dimmed",children:"Select one or more practitioners"}),(0,import_jsx_runtime106.jsx)(QuestionnaireForm,{questionnaire,questionnaireResponse:initialResponse,excludeButtons:!0,onChange:value=>{let references=value.item?.[0].answer?.map(item=>item.valueReference).filter(ref=>ref!==void 0)??[];setPractitioners(references)}})]}),(0,import_jsx_runtime106.jsxs)(import_core136.Stack,{gap:0,children:[(0,import_jsx_runtime106.jsx)(import_core136.Text,{fw:500,children:"Topic (optional)"}),(0,import_jsx_runtime106.jsx)(import_core136.Text,{c:"dimmed",children:"Enter a topic for the message"}),(0,import_jsx_runtime106.jsx)(import_core136.TextInput,{placeholder:"Enter your topic",value:topic,onChange:e=>setTopic(e.target.value)})]}),(0,import_jsx_runtime106.jsx)(import_core136.Button,{onClick:async()=>{if(!patient){(0,import_notifications6.showNotification)({title:"Error",message:"Please select a patient",color:"red"});return}let communication={resourceType:"Communication",status:"in-progress",subject:patient,sender:profileRef,recipient:[patient,...practitioners.map(practitioner=>({reference:practitioner.reference}))],topic:{text:topic}};try{let createdCommunication=await medplum.createResource(communication);onSubmit?.(createdCommunication),onClose()}catch(error){(0,import_notifications6.showNotification)({title:"Error",message:(0,import_core137.normalizeErrorString)(error),color:"red"})}},children:"Next"})]})})},questionnaire={resourceType:"Questionnaire",status:"active",item:[{linkId:"q1",type:"reference",repeats:!0,extension:[{url:`${import_core137.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,valueCodeableConcept:{coding:[{system:`${import_core137.HTTP_HL7_ORG}/fhir/fhir-types`,display:"Practitioner",code:"Practitioner"}]}}]}]};var import_core138=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_notifications7=require("@mantine/notifications"),import_core139=require("@medplum/core"),import_react_hooks41=require("@medplum/react-hooks");var import_react73=require("react");var ParticipantFilter_default={participantItem:"ParticipantFilter_participantItem"};var import_jsx_runtime107=require("react/jsx-runtime");function ParticipantFilter(props){let{selectedParticipants,onFilterChange}=props,[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),[searchQuery,setSearchQuery]=(0,import_react73.useState)(""),[searchResults,setSearchResults]=(0,import_react73.useState)([]),[isSearching,setIsSearching]=(0,import_react73.useState)(!1),medplum=(0,import_react_hooks41.useMedplum)(),profile=(0,import_react_hooks41.useMedplumProfile)(),currentUserParticipant=(0,import_react73.useMemo)(()=>{if(profile)return(0,import_core139.createReference)(profile)},[profile]),additionalParticipants=(0,import_react73.useMemo)(()=>{let currentUserRef=currentUserParticipant?.reference;return selectedParticipants.filter(p=>p.reference!==currentUserRef)},[selectedParticipants,currentUserParticipant]),debouncedSearch=(0,import_hooks5.useDebouncedCallback)(async query=>{if(!query.trim()){setSearchResults([]);return}setIsSearching(!0);try{let bundle=await medplum.search("Patient",{_type:"Patient,Practitioner",name:query,_count:"10"}),currentUserRef=currentUserParticipant?.reference,results=(bundle.entry??[]).map(entry=>entry.resource).filter(resource=>{if(!resource)return!1;let refString=(0,import_core139.getReferenceString)(resource);return!!refString&&refString!==currentUserRef}).map(resource=>(0,import_core139.createReference)(resource));setSearchResults(results)}catch(error){(0,import_notifications7.showNotification)({title:"Error",message:(0,import_core139.normalizeErrorString)(error),color:"red"}),setSearchResults([])}finally{setIsSearching(!1)}},300);(0,import_react73.useEffect)(()=>(debouncedSearch(searchQuery),debouncedSearch.cancel),[searchQuery,debouncedSearch]);let isSelected=participant=>selectedParticipants.some(p=>p.reference===participant.reference),toggleParticipant=participant=>{let newParticipants=isSelected(participant)?selectedParticipants.filter(p=>p.reference!==participant.reference):[...selectedParticipants,participant];onFilterChange(newParticipants)},removeParticipant=participant=>{let newParticipants=selectedParticipants.filter(p=>p.reference!==participant.reference);onFilterChange(newParticipants)},displayParticipants=(0,import_react73.useMemo)(()=>{let result=[];for(let p of additionalParticipants)result.some(r2=>r2.reference===p.reference)||result.push(p);if(searchQuery.trim()&&searchResults.length>0)for(let p of searchResults)currentUserParticipant?.reference!==p.reference&&(result.some(r2=>r2.reference===p.reference)||result.push(p));return result},[additionalParticipants,searchQuery,searchResults,currentUserParticipant]),hasActiveFilter=selectedParticipants.length>0;return(0,import_jsx_runtime107.jsxs)(import_core138.Popover,{opened,onChange:o=>!o&&close(),position:"bottom-start",width:360,shadow:"md",radius:"md",withinPortal:!0,children:[(0,import_jsx_runtime107.jsx)(import_core138.Popover.Target,{children:(0,import_jsx_runtime107.jsx)(import_core138.Tooltip,{label:"Message Participants",position:"bottom",openDelay:500,disabled:opened,children:(0,import_jsx_runtime107.jsx)(import_core138.Indicator,{disabled:!hasActiveFilter,color:"blue",size:8,offset:4,children:(0,import_jsx_runtime107.jsx)(import_core138.ActionIcon,{variant:"transparent",onClick:opened?close:open,radius:"xl",size:32,className:"outline-icon-button","data-opened":opened||void 0,children:(0,import_jsx_runtime107.jsx)(IconUsers,{size:16})})})})}),(0,import_jsx_runtime107.jsx)(import_core138.Popover.Dropdown,{p:"md",children:(0,import_jsx_runtime107.jsxs)(import_core138.Stack,{gap:"md",children:[(0,import_jsx_runtime107.jsx)(import_core138.Text,{size:"xs",c:"dimmed",fw:500,children:"Message Participants"}),(0,import_jsx_runtime107.jsx)(import_core138.TextInput,{placeholder:"Search for a Patient or Practitioner...",value:searchQuery,autoFocus:!0,onChange:e=>setSearchQuery(e.target.value),rightSection:searchQuery?(0,import_jsx_runtime107.jsx)(import_core138.CloseButton,{size:"sm",onClick:()=>setSearchQuery("")}):null}),(0,import_jsx_runtime107.jsxs)(import_core138.Stack,{gap:"xs",mah:250,style:{overflowY:"auto"},children:[currentUserParticipant&&(0,import_jsx_runtime107.jsx)(ParticipantItem,{participant:currentUserParticipant,isSelected:isSelected(currentUserParticipant),isCurrentUser:!0,onToggle:()=>toggleParticipant(currentUserParticipant)}),displayParticipants.map(participant=>(0,import_jsx_runtime107.jsx)(ParticipantItem,{participant,isSelected:isSelected(participant),isCurrentUser:!1,onToggle:()=>toggleParticipant(participant),onRemove:isSelected(participant)?()=>removeParticipant(participant):void 0},participant.reference)),isSearching&&(0,import_jsx_runtime107.jsx)(import_core138.Text,{size:"sm",c:"dimmed",ta:"center",children:"Searching..."}),searchQuery.trim()&&!isSearching&&searchResults.length===0&&(0,import_jsx_runtime107.jsx)(import_core138.Text,{size:"sm",c:"dimmed",ta:"center",children:"No results found"})]})]})})]})}function ParticipantItem(props){let{participant,isSelected,isCurrentUser,onToggle,onRemove}=props,patientResource=(0,import_react_hooks41.useResource)(participant);return patientResource?(0,import_jsx_runtime107.jsxs)(import_core138.Group,{justify:"space-between",wrap:"nowrap",className:ParticipantFilter_default.participantItem,children:[(0,import_jsx_runtime107.jsxs)(import_core138.Group,{gap:"sm",wrap:"nowrap",style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime107.jsx)(import_core138.Checkbox,{checked:isSelected,onChange:onToggle}),(0,import_jsx_runtime107.jsx)(ResourceAvatar,{value:participant,radius:"xl",size:32}),(0,import_jsx_runtime107.jsxs)(import_core138.Text,{size:"sm",truncate:!0,style:{flex:1},children:[(0,import_core139.formatHumanName)(patientResource?.name?.[0]??{}),isCurrentUser&&(0,import_jsx_runtime107.jsxs)(import_core138.Text,{component:"span",c:"dimmed",size:"sm",children:[" ","(you)"]})]})]}),onRemove&&(0,import_jsx_runtime107.jsx)(import_core138.CloseButton,{size:"sm",onClick:onRemove})]}):null}var import_core181=require("@mantine/core"),import_hooks14=require("@mantine/hooks"),import_notifications8=require("@mantine/notifications"),import_core182=require("@medplum/core"),import_react_hooks54=require("@medplum/react-hooks");var import_react89=require("react");var import_core179=require("@mantine/core"),import_core180=require("@medplum/core"),import_react_hooks53=require("@medplum/react-hooks"),import_react88=require("react");var PatientSummary_default={panel:"PatientSummary_panel",patientSummaryBadge:"PatientSummary_patientSummaryBadge",patientSummaryAddButton:"PatientSummary_patientSummaryAddButton",patientSummaryHeader:"PatientSummary_patientSummaryHeader",patientSummaryCollapseIcon:"PatientSummary_patientSummaryCollapseIcon",collapsed:"PatientSummary_collapsed"};var import_core177=require("@mantine/core"),import_core178=require("@medplum/core");var import_core145=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core146=require("@medplum/core"),import_react_hooks42=require("@medplum/react-hooks"),import_react76=require("react");var import_core140=require("@mantine/core"),import_jsx_runtime108=require("react/jsx-runtime"),statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red",connected:"green",disconnected:"red",finished:"green",planned:"gray"};function StatusBadge(props){let{status,...badgeProps}=props;return(0,import_jsx_runtime108.jsx)(import_core140.Badge,{color:props.color||statusToColor[status],...badgeProps,children:status.replaceAll("-"," ")})}var import_core141=require("@mantine/core"),import_core142=require("@medplum/core"),import_react74=require("react");var import_jsx_runtime109=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core142.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react74.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react74.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react74.useCallback)(formData=>{onSubmit((0,import_core142.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core142.createReference)(patient),encounter:encounter?(0,import_core142.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_runtime109.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime109.jsxs)(import_core141.Stack,{children:[(0,import_jsx_runtime109.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_runtime109.jsx)(import_core141.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime109.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core142.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",maxValues:1,defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime109.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime109.jsx)(import_core141.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime109.jsx)(SubmitButton,{children:"Save"})})]})},allergy?.id)}var import_core143=require("@mantine/core");var import_react75=require("react");var CollapsibleSection_default={root:"CollapsibleSection_root",header:"CollapsibleSection_header",chevron:"CollapsibleSection_chevron",title:"CollapsibleSection_title",addButton:"CollapsibleSection_addButton"};var import_jsx_runtime110=require("react/jsx-runtime");function CollapsibleSection(props){let{title,children,onAdd}=props,[collapsed,setCollapsed]=(0,import_react75.useState)(!1);return(0,import_jsx_runtime110.jsxs)(import_core143.Box,{className:CollapsibleSection_default.root,children:[(0,import_jsx_runtime110.jsxs)(import_core143.Group,{justify:"space-between",className:CollapsibleSection_default.header,children:[(0,import_jsx_runtime110.jsxs)(import_core143.Group,{gap:8,children:[(0,import_jsx_runtime110.jsx)(import_core143.ActionIcon,{variant:"subtle",onClick:()=>setCollapsed(c=>!c),"aria-label":collapsed?`Show ${title.toLowerCase()}`:`Hide ${title.toLowerCase()}`,className:CollapsibleSection_default.chevron,"data-collapsed":collapsed||void 0,size:"md",children:(0,import_jsx_runtime110.jsx)(IconChevronDown,{size:20})}),(0,import_jsx_runtime110.jsx)(import_core143.Text,{fz:"md",fw:800,onClick:()=>setCollapsed(c=>!c),className:CollapsibleSection_default.title,children:title})]}),onAdd&&(0,import_jsx_runtime110.jsx)(import_core143.ActionIcon,{role:"button","aria-label":"Add item",className:CollapsibleSection_default.addButton,variant:"subtle",onClick:e=>{killEvent(e),onAdd()},size:"md",children:(0,import_jsx_runtime110.jsx)(IconPlus,{size:18})})]}),(0,import_jsx_runtime110.jsx)(import_core143.Collapse,{in:!collapsed,children:(0,import_jsx_runtime110.jsx)(import_core143.Box,{ml:"var(--mantine-spacing-xl)",mt:"xs",mb:"md",pl:4,children})})]})}var import_core144=require("@mantine/core");var SummaryItem_default={gradient:"SummaryItem_gradient",container:"SummaryItem_container",chevron:"SummaryItem_chevron",item:"SummaryItem_item",itemText:"SummaryItem_itemText"};var import_jsx_runtime111=require("react/jsx-runtime");function SummaryItem(props){let{children,onClick}=props;return(0,import_jsx_runtime111.jsxs)(import_core144.Box,{className:SummaryItem_default.item,onClick,children:[children,(0,import_jsx_runtime111.jsx)("div",{className:SummaryItem_default.gradient}),(0,import_jsx_runtime111.jsx)("div",{className:SummaryItem_default.container,children:(0,import_jsx_runtime111.jsx)(import_core144.ActionIcon,{className:SummaryItem_default.chevron,size:"md",variant:"transparent",tabIndex:-1,children:(0,import_jsx_runtime111.jsx)(IconChevronRight,{size:16,stroke:2.5})})})]})}var import_jsx_runtime112=require("react/jsx-runtime");function Allergies(props){let medplum=(0,import_react_hooks42.useMedplum)(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react76.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react76.useState)(),sortedAllergies=(0,import_react76.useMemo)(()=>[...allergies].sort((a,b)=>{let aStatus=a.clinicalStatus?.coding?.[0]?.code,bStatus=b.clinicalStatus?.coding?.[0]?.code;return aStatus==="active"&&bStatus!=="active"?-1:aStatus!=="active"&&bStatus==="active"?1:(0,import_core146.getDisplayString)(a).localeCompare((0,import_core146.getDisplayString)(b))}),[allergies]),handleSubmit=(0,import_react76.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_runtime112.jsxs)(import_jsx_runtime112.Fragment,{children:[(0,import_jsx_runtime112.jsx)(CollapsibleSection,{title:"Allergies",onAdd:()=>{setEditAllergy(void 0),open()},children:sortedAllergies.length>0?(0,import_jsx_runtime112.jsx)(import_core145.Box,{children:(0,import_jsx_runtime112.jsx)(import_core145.Flex,{direction:"column",gap:8,children:sortedAllergies.map(allergy=>{let status=allergy.clinicalStatus?.coding?.[0]?.code||"unknown";return(0,import_jsx_runtime112.jsx)(SummaryItem,{onClick:()=>{setEditAllergy(allergy),open()},children:(0,import_jsx_runtime112.jsxs)(import_core145.Box,{children:[(0,import_jsx_runtime112.jsx)(import_core145.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core146.getDisplayString)(allergy)}),(0,import_jsx_runtime112.jsx)(import_core145.Group,{mt:2,gap:4,children:status&&(0,import_jsx_runtime112.jsx)(StatusBadge,{color:getClinicalStatusColor(status),variant:"light",status})})]})},allergy.id)})})}):(0,import_jsx_runtime112.jsx)(import_core145.Text,{children:"(none)"})}),(0,import_jsx_runtime112.jsx)(import_core145.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime112.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}function getClinicalStatusColor(status){if(!status)return"gray";switch(status){case"active":return"red";case"inactive":return"orange";case"resolved":return"blue";default:return"gray"}}var import_core147=require("@mantine/core"),import_core148=require("@medplum/core"),import_react_hooks43=require("@medplum/react-hooks");var import_jsx_runtime113=require("react/jsx-runtime");function CoverageItem(props){let{coverage,organization,onClickResource}=props,coverageResource=(0,import_react_hooks43.useResource)(coverage),organizationResource=(0,import_react_hooks43.useResource)(organization),payorName="Unknown Payor";organizationResource&&"name"in organizationResource&&typeof organizationResource.name=="string"&&(payorName=organizationResource.name);let detailsText=`ID: ${coverageResource?.subscriberId??"N/A"}${formatClassInfo(coverageResource)?` \xB7 ${formatClassInfo(coverageResource)}`:""}`;return(0,import_jsx_runtime113.jsx)(SummaryItem,{onClick:()=>{coverageResource&&onClickResource?.(coverageResource)},children:(0,import_jsx_runtime113.jsxs)(import_core147.Box,{children:[(0,import_jsx_runtime113.jsx)(import_core147.Text,{fw:500,className:PatientSummary_default.itemText,children:payorName}),(0,import_jsx_runtime113.jsx)(import_core147.Text,{fw:500,className:PatientSummary_default.itemText,children:detailsText}),(0,import_jsx_runtime113.jsxs)(import_core147.Group,{mt:2,gap:4,children:[(0,import_jsx_runtime113.jsx)(StatusBadge,{color:"green",variant:"light",status:"Active"}),(0,import_jsx_runtime113.jsxs)(import_core147.Text,{size:"xs",fw:500,color:"gray.6",children:["Ends ",(0,import_core148.formatDate)(coverageResource?.period?.end)]})]})]})})}function Insurance(props){let{coverages,onClickResource}=props,activeCoverages=coverages.filter(coverage=>coverage.status==="active"&&!coverage.type?.coding?.some(coding=>coding.code==="SELFPAY"));return(0,import_jsx_runtime113.jsx)(CollapsibleSection,{title:"Insurance",children:activeCoverages.length>0?(0,import_jsx_runtime113.jsx)(import_core147.Flex,{direction:"column",gap:8,children:activeCoverages.map(coverage=>(0,import_jsx_runtime113.jsx)(CoverageItem,{coverage,organization:coverage.payor?.[0],onClickResource},coverage.id))}):(0,import_jsx_runtime113.jsx)(import_core147.Text,{children:"(none)"})})}function capitalizeWords(str){return str.split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1).toLowerCase()).join(" ")}function formatClassInfo(coverage){return coverage?coverage.class?.filter(cls=>cls.type?.coding?.[0]?.code!=="plan").map(cls=>{let type=cls.type?.coding?.[0]?.code??"";return`${capitalizeWords(type)}: ${cls.value}`}).join(" \xB7 ")??"":""}var import_core155=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_core156=require("@medplum/core"),import_react79=require("react");var import_core153=require("@mantine/core"),import_core154=require("@medplum/core"),import_react_hooks45=require("@medplum/react-hooks");var import_react78=require("react");var import_core149=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime114=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime114.jsx)(import_core149.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime114.jsx)(import_core149.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_core152=require("@mantine/core");var import_core150=require("@mantine/core"),import_core151=require("@medplum/core"),import_react_hooks44=require("@medplum/react-hooks"),import_react77=require("react");var import_jsx_runtime115=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react77.useState)(),resource=(0,import_react_hooks44.useResource)(value,setOutcome),text;if(outcome&&!(0,import_core151.isOk)(outcome))text=`[${(0,import_core151.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core151.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime115.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime115.jsx)(import_core150.Text,{component:"span",...rest,children:text})}var import_jsx_runtime116=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime116.jsxs)(import_core152.Group,{gap:"xs",children:[(0,import_jsx_runtime116.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime116.jsx)(ResourceName,{value:props.value,link:props.link})]})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime117=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1,hideSubject:!1};function DiagnosticReportDisplay(props){let medplum=(0,import_react_hooks45.useMedplum)(),diagnosticReport=(0,import_react_hooks45.useResource)(props.value),[specimens,setSpecimens]=(0,import_react78.useState)();if((0,import_react78.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_runtime117.jsxs)(import_core153.Stack,{children:[(0,import_jsx_runtime117.jsx)(import_core153.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime117.jsx)(DiagnosticReportHeader,{value:diagnosticReport,hideSubject:props.hideSubject}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime117.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime117.jsx)(NoteDisplay,{value:specimenNotes}),diagnosticReport.conclusion&&(0,import_jsx_runtime117.jsxs)(import_core153.Stack,{mt:"md",children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{fw:500,size:"sm",c:"dimmed",children:"Conclusion"}),(0,import_jsx_runtime117.jsx)(import_core153.Text,{children:diagnosticReport.conclusion})]})]})}function DiagnosticReportHeader({value,hideSubject=!1}){return(0,import_jsx_runtime117.jsxs)(import_core153.Group,{mt:"md",gap:30,children:[value.subject&&!hideSubject&&(0,import_jsx_runtime117.jsxs)("div",{children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime117.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime117.jsxs)("div",{children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime117.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime117.jsxs)("div",{children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime117.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime117.jsxs)("div",{children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime117.jsx)(import_core153.Text,{children:(0,import_core154.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime117.jsxs)("div",{children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime117.jsx)(StatusBadge,{status:value.status})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime117.jsxs)(import_core153.Stack,{gap:"xs",children:[(0,import_jsx_runtime117.jsx)(import_core153.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime117.jsx)(import_core153.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime117.jsx)(import_core153.List.Item,{ml:"sm",children:(0,import_jsx_runtime117.jsxs)(import_core153.Group,{gap:20,children:[(0,import_jsx_runtime117.jsxs)(import_core153.Group,{gap:5,children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{fw:500,children:"Collected:"})," ",(0,import_core154.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime117.jsxs)(import_core153.Group,{gap:5,children:[(0,import_jsx_runtime117.jsx)(import_core153.Text,{fw:500,children:"Received:"})," ",(0,import_core154.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime117.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime117.jsx)("thead",{children:(0,import_jsx_runtime117.jsxs)("tr",{children:[(0,import_jsx_runtime117.jsx)("th",{children:"Test"}),(0,import_jsx_runtime117.jsx)("th",{children:"Value"}),(0,import_jsx_runtime117.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime117.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime117.jsx)("th",{children:"Category"}),(0,import_jsx_runtime117.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime117.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime117.jsx)("tbody",{children:(0,import_jsx_runtime117.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime117.jsx)(import_jsx_runtime117.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime117.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core154.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=(0,import_react_hooks45.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_runtime117.jsxs)(import_jsx_runtime117.Fragment,{children:[(0,import_jsx_runtime117.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime117.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime117.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime117.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime117.jsx)("td",{children:(0,import_jsx_runtime117.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime117.jsx)("td",{children:(0,import_jsx_runtime117.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime117.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime117.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime117.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime117.jsx)(import_jsx_runtime117.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime117.jsx)("div",{children:(0,import_jsx_runtime117.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core154.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime117.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime117.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime117.jsx)("td",{children:observation.status&&(0,import_jsx_runtime117.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime117.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime117.jsx)("tr",{children:(0,import_jsx_runtime117.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime117.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime117.jsx)(import_jsx_runtime117.Fragment,{children:(0,import_core154.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime117.jsx)(import_jsx_runtime117.Fragment,{children:range.text}):(0,import_jsx_runtime117.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_jsx_runtime118=require("react/jsx-runtime");function Labs(props){let{serviceRequests,diagnosticReports,onClickResource,onRequestLabs}=props,[selectedReport,setSelectedReport]=(0,import_react79.useState)(),[reportDialogOpened,{open:openReportDialog,close:closeReportDialog}]=(0,import_hooks7.useDisclosure)(!1),diagnosticReportsRequests=new Set,filteredDiagnosticReports=diagnosticReports.filter(report=>{let flag=isLaboratoryReport(report);return flag&&report.basedOn&&report.basedOn.forEach(basedOn=>{if(basedOn.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn.reference.split("/");diagnosticReportsRequests.add(id)}}),flag}),completedRequisitionNumbers=new Set,filteredServiceRequests=serviceRequests.filter(request=>{if(request.id&&diagnosticReportsRequests.has(request.id)||request.basedOn&&request.basedOn.find(basedOn2=>{if(basedOn2.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn2.reference.split("/");return diagnosticReportsRequests.has(id)}return!1}))return!1;let shouldFilter=shouldFilterRequest(request,completedRequisitionNumbers);return!shouldFilter&&request.requisition?.value&&completedRequisitionNumbers.add(request.requisition?.value),!shouldFilter}),handleDiagnosticReportClick=report=>{setSelectedReport(report),openReportDialog()};return(0,import_jsx_runtime118.jsxs)(import_jsx_runtime118.Fragment,{children:[(0,import_jsx_runtime118.jsx)(CollapsibleSection,{title:"Labs",onAdd:()=>onRequestLabs?.(),children:(0,import_jsx_runtime118.jsxs)(import_core155.Flex,{direction:"column",gap:8,children:[filteredServiceRequests.map(serviceRequest=>(0,import_jsx_runtime118.jsx)(SummaryItem,{onClick:()=>onClickResource?.(serviceRequest),children:(0,import_jsx_runtime118.jsxs)(import_core155.Box,{children:[(0,import_jsx_runtime118.jsx)(import_core155.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core156.getDisplayString)(serviceRequest)}),(0,import_jsx_runtime118.jsxs)(import_core155.Group,{mt:2,gap:4,children:[serviceRequest.status&&(0,import_jsx_runtime118.jsx)(StatusBadge,{color:getStatusColor(serviceRequest.status),variant:"light",status:serviceRequest.status}),(0,import_jsx_runtime118.jsx)(import_core155.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core156.formatDate)(serviceRequest.authoredOn)})]})]})},serviceRequest.id)),filteredDiagnosticReports.map(report=>(0,import_jsx_runtime118.jsx)(SummaryItem,{onClick:()=>handleDiagnosticReportClick(report),children:(0,import_jsx_runtime118.jsxs)(import_core155.Box,{children:[(0,import_jsx_runtime118.jsx)(import_core155.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core156.getDisplayString)(report)}),(0,import_jsx_runtime118.jsxs)(import_core155.Group,{mt:2,gap:4,children:[report.status&&(0,import_jsx_runtime118.jsx)(StatusBadge,{color:getStatusColor(report.status),variant:"light",status:report.status}),(0,import_jsx_runtime118.jsx)(import_core155.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core156.formatDate)(report.issued)})]})]})},report.id)),filteredServiceRequests.length===0&&filteredDiagnosticReports.length===0&&(0,import_jsx_runtime118.jsx)(import_core155.Text,{children:"(none)"})]})}),(0,import_jsx_runtime118.jsx)(import_core155.Modal,{opened:reportDialogOpened,onClose:closeReportDialog,size:"80%",children:selectedReport&&(0,import_jsx_runtime118.jsx)(DiagnosticReportDisplay,{value:selectedReport,hideSubject:!0})})]})}var getStatusColor=status=>{switch(status){case"active":return"indigo";case"final":return"teal";case"cancelled":return"red";default:return"gray"}};function hasLaboratoryCategory(category){if(!category.coding||!Array.isArray(category.coding))return!1;for(let coding of category.coding)if(coding.code==="LAB")return!0;return!1}function isLaboratoryReport(report){if(!report.category||!Array.isArray(report.category))return!1;for(let category of report.category)if(hasLaboratoryCategory(category))return!0;return!1}function shouldFilterRequest(request,completedRequisitionNumbers){if(["completed","draft","entered-in-error"].includes(request.status))return!0;let requisitionNumber=request.requisition?.value;return!!(requisitionNumber&&completedRequisitionNumbers.has(requisitionNumber))}var import_core159=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_core160=require("@medplum/core"),import_react_hooks47=require("@medplum/react-hooks"),import_react81=require("react");var import_core157=require("@mantine/core"),import_core158=require("@medplum/core"),import_react_hooks46=require("@medplum/react-hooks"),import_react80=require("react");var import_jsx_runtime119=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_hooks46.useMedplumProfile)(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react80.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react80.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core158.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core158.createReference)(encounter)),requester:medication?.requester??(0,import_core158.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core158.createReference)(patient)},import_core158.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime119.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime119.jsxs)(import_core157.Stack,{children:[(0,import_jsx_runtime119.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_runtime119.jsx)(import_core157.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime119.jsx)(import_core157.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime119.jsx)(import_core157.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime119.jsx)(SubmitButton,{children:"Save"})})]})}):(0,import_jsx_runtime119.jsx)(import_core157.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime120=require("react/jsx-runtime");function Medications(props){let medplum=(0,import_react_hooks47.useMedplum)(),[medicationRequests,setMedicationRequests]=(0,import_react81.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react81.useState)(),[opened,{open,close}]=(0,import_hooks8.useDisclosure)(!1),handleSubmit=(0,import_react81.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_runtime120.jsxs)(import_jsx_runtime120.Fragment,{children:[(0,import_jsx_runtime120.jsx)(CollapsibleSection,{title:"Medications",onAdd:()=>{setEditMedication(void 0),open()},children:medicationRequests.length>0?(0,import_jsx_runtime120.jsx)(import_core159.Flex,{direction:"column",gap:8,children:medicationRequests.map(medication=>(0,import_jsx_runtime120.jsx)(SummaryItem,{onClick:()=>{setEditMedication(medication),open()},children:(0,import_jsx_runtime120.jsxs)(import_core159.Box,{children:[(0,import_jsx_runtime120.jsx)(import_core159.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core160.getDisplayString)(medication)}),(0,import_jsx_runtime120.jsx)(import_core159.Group,{mt:2,gap:4,children:medication.status&&(0,import_jsx_runtime120.jsx)(StatusBadge,{color:getStatusColor2(medication.status),variant:"light",status:medication.status})})]})},medication.id))}):(0,import_jsx_runtime120.jsx)(import_core159.Text,{children:"(none)"})}),(0,import_jsx_runtime120.jsx)(import_core159.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime120.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}function getStatusColor2(status){if(!status)return"gray";switch(status){case"active":return"green";case"stopped":return"red";case"on-hold":return"yellow";case"cancelled":return"red";case"completed":return"blue";case"entered-in-error":return"red";case"draft":return"gray";default:return"gray"}}var import_core161=require("@mantine/core");var import_jsx_runtime121=require("react/jsx-runtime"),PatientInfoItem=props=>{let{patient,value,icon,placeholder,label,onClickResource}=props,displayText=value||placeholder;return(0,import_jsx_runtime121.jsx)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:(0,import_jsx_runtime121.jsx)(import_core161.Box,{className:PatientSummary_default.patientSummaryListItem,children:(0,import_jsx_runtime121.jsx)(import_core161.Tooltip,{label,position:"top-start",openDelay:650,children:(0,import_jsx_runtime121.jsxs)(import_core161.Group,{gap:"sm",align:"center",ml:6,mr:2,style:{cursor:"pointer",flexWrap:"nowrap",minWidth:0},children:[icon,(0,import_jsx_runtime121.jsx)(import_core161.Text,{fz:"sm",fw:400,truncate:!0,c:value?"inherit":"var(--mantine-color-gray-6)",children:displayText})]})})})})};var import_core162=require("@medplum/core");function getGenderIdentity(patient){return(0,import_core162.getExtension)(patient,`${import_core162.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-genderIdentity`)?.valueCodeableConcept?.coding?.[0]?.display}function getBirthSex(patient){return(0,import_core162.getExtension)(patient,`${import_core162.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-birthsex`)?.valueCode}function getRace(patient){return(0,import_core162.getExtension)(patient,`${import_core162.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-race`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getEthnicity(patient){return(0,import_core162.getExtension)(patient,`${import_core162.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-ethnicity`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getGeneralPractitioner(patient){return patient.generalPractitioner?.[0]?.display}function formatPatientGenderDisplay(patient){let capitalizedGender=patient.gender?(0,import_core162.capitalize)(patient.gender):"",genderIdentity=getGenderIdentity(patient),birthSex=getBirthSex(patient),parts=[];return capitalizedGender&&parts.push(capitalizedGender),genderIdentity&&parts.push(genderIdentity),birthSex&&parts.push(`Born as ${birthSex}`),parts.join(" \xB7 ")}function formatPatientRaceEthnicityDisplay(patient){let race=getRace(patient),ethnicity=getEthnicity(patient),parts=[];return race&&parts.push(race),ethnicity&&parts.push(ethnicity),parts.join(" \xB7 ")}var getPreferredLanguage=patient=>{if(!patient.communication?.length)return;let preferred=patient.communication?.find(comm=>comm.preferred===!0);return preferred?.language?.coding?.[0]?.display?preferred.language.coding[0].display:patient.communication[0]?.language?.coding?.[0]?.display};var import_core164=require("@mantine/core"),import_hooks9=require("@mantine/hooks"),import_core165=require("@medplum/core"),import_react_hooks48=require("@medplum/react-hooks"),import_react82=require("react");var import_core163=require("@medplum/core");var import_jsx_runtime122=require("react/jsx-runtime");function Pharmacies(props){let{patient:patientProp,onClickResource,pharmacyDialogComponent}=props,PharmacyDialogComponent=pharmacyDialogComponent,medplum=(0,import_react_hooks48.useMedplum)(),[opened,{open,close}]=(0,import_hooks9.useDisclosure)(!1),[resolvedPharmacies,setResolvedPharmacies]=(0,import_react82.useState)([]),[loadState,setLoadState]=(0,import_react82.useState)("loading"),patient=(0,import_react_hooks48.useResource)(patientProp),pharmacyRefs=(0,import_react82.useMemo)(()=>patient?(0,import_core163.getPreferredPharmaciesFromPatient)(patient):[],[patient]);(0,import_react82.useEffect)(()=>{let cancelled=!1;return(async()=>{if(props.pharmacies){cancelled||(setResolvedPharmacies(props.pharmacies),setLoadState("loaded"));return}if(pharmacyRefs.length===0){cancelled||(setResolvedPharmacies([]),setLoadState("loaded"));return}setLoadState("loading");try{let results=await Promise.all(pharmacyRefs.map(async pharmacyRef=>{try{return{...await medplum.readReference(pharmacyRef.organizationRef),isPrimary:pharmacyRef.isPrimary}}catch(error){return isNotFoundError(error),null}}));if(!cancelled){let validResults=results.filter(result=>result!==null);setResolvedPharmacies(validResults),setLoadState(validResults.length===0&&pharmacyRefs.length>0?"error":"loaded")}}catch{cancelled||setLoadState("error")}})().catch(()=>{}),()=>{cancelled=!0}},[medplum,pharmacyRefs,props.pharmacies]);let handleSubmit=(0,import_react82.useCallback)(async _pharmacy=>{patient?.id&&medplum.invalidateUrl((0,import_core165.getReferenceString)(patient)),close()},[medplum,patient,close]);return patient?(0,import_jsx_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:[(0,import_jsx_runtime122.jsx)(CollapsibleSection,{title:"Pharmacies",onAdd:pharmacyDialogComponent?open:void 0,children:loadState==="loading"?(0,import_jsx_runtime122.jsx)(import_core164.Loader,{size:"sm"}):loadState==="error"?(0,import_jsx_runtime122.jsx)(import_core164.Text,{c:"red",size:"sm",children:"Failed to load pharmacies"}):resolvedPharmacies.length===0?(0,import_jsx_runtime122.jsx)(import_core164.Text,{children:"(none)"}):(0,import_jsx_runtime122.jsx)(import_core164.Box,{children:(0,import_jsx_runtime122.jsx)(import_core164.Flex,{direction:"column",gap:8,children:resolvedPharmacies.map((pharmacy,index)=>(0,import_jsx_runtime122.jsx)(SummaryItem,{onClick:()=>onClickResource?.(pharmacy),children:(0,import_jsx_runtime122.jsxs)(import_core164.Box,{children:[(0,import_jsx_runtime122.jsx)(import_core164.Text,{fw:500,className:SummaryItem_default.itemText,children:pharmacy.name}),(0,import_jsx_runtime122.jsxs)(import_core164.Group,{mt:2,gap:4,children:[pharmacy.isPrimary&&(0,import_jsx_runtime122.jsx)(StatusBadge,{color:"blue",variant:"light",status:"primary"}),pharmacy.address?.[0]&&(0,import_jsx_runtime122.jsx)(import_core164.Text,{size:"xs",c:"dimmed",children:(0,import_core165.formatAddress)(pharmacy.address[0])})]})]})},pharmacy.id||index))})})}),PharmacyDialogComponent?(0,import_jsx_runtime122.jsx)(import_core164.Modal,{opened,onClose:close,title:"Add Pharmacy",size:"lg",children:(0,import_jsx_runtime122.jsx)(PharmacyDialogComponent,{patient,onSubmit:handleSubmit,onClose:close})}):null]}):(0,import_jsx_runtime122.jsx)(import_jsx_runtime122.Fragment,{})}function isNotFoundError(error){return error instanceof import_core165.OperationOutcomeError?error.outcome.issue?.some(issue=>issue.code==="not-found")??!1:!1}var import_core168=require("@mantine/core"),import_hooks10=require("@mantine/hooks"),import_core169=require("@medplum/core"),import_react_hooks49=require("@medplum/react-hooks"),import_react84=require("react");var import_core166=require("@mantine/core"),import_core167=require("@medplum/core"),import_react83=require("react");var import_jsx_runtime123=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react83.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react83.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react83.useCallback)(formData=>{let updatedCondition=(0,import_core167.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core167.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core167.createReference)(patient),encounter:encounter&&(0,import_core167.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core167.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_runtime123.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime123.jsxs)(import_core166.Stack,{children:[(0,import_jsx_runtime123.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core167.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime123.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core167.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime123.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime123.jsx)(import_core166.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime123.jsx)(SubmitButton,{children:"Save"})})]})},condition?.id)}var import_jsx_runtime124=require("react/jsx-runtime");function getCodeKey(condition){let coding=condition.code?.coding?.[0];return coding?.system&&coding?.code?`${coding.system}|${coding.code}`:coding?.code?coding.code:condition.code?.text??condition.id}function ProblemList(props){let medplum=(0,import_react_hooks49.useMedplum)(),{patient,encounter}=props,[problems,setProblems]=(0,import_react84.useState)(props.problems.filter(c=>c.verificationStatus?.coding?.[0]?.code!=="entered-in-error")),[editCondition,setEditCondition]=(0,import_react84.useState)(),[opened,{open,close}]=(0,import_hooks10.useDisclosure)(!1),[expandedGroups,setExpandedGroups]=(0,import_react84.useState)(()=>new Set),groupedProblems=(0,import_react84.useMemo)(()=>{let groups=new Map;for(let i=0;i<problems.length;i++){let problem=problems[i],key=getCodeKey(problem)??`ungrouped-${i}`,existing=groups.get(key);existing?existing.push(problem):groups.set(key,[problem])}return Array.from(groups.entries())},[problems]),toggleGroup=(0,import_react84.useCallback)(key=>{setExpandedGroups(prev=>{let next=new Set(prev);return next.has(key)?next.delete(key):next.add(key),next})},[]),handleSubmit=(0,import_react84.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([newCondition,...problems])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment,{children:[(0,import_jsx_runtime124.jsx)(CollapsibleSection,{title:"Problems",onAdd:()=>{setEditCondition(void 0),open()},children:problems.length>0?(0,import_jsx_runtime124.jsx)(import_core168.Flex,{direction:"column",gap:8,children:groupedProblems.map(([key,group],groupIndex)=>{let isExpanded=expandedGroups.has(key),displayProblems=isExpanded?group:[group[0]],groupContentId=`problem-group-content-${groupIndex}`;return(0,import_jsx_runtime124.jsxs)(import_core168.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core168.Flex,{direction:"column",gap:4,id:groupContentId,children:displayProblems.map(problem=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>{setEditCondition(problem),open()},children:(0,import_jsx_runtime124.jsxs)(import_core168.Box,{children:[(0,import_jsx_runtime124.jsxs)(import_core168.Group,{gap:6,wrap:"nowrap",children:[(0,import_jsx_runtime124.jsx)(import_core168.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core169.getDisplayString)(problem)}),!isExpanded&&group.length>1&&(0,import_jsx_runtime124.jsxs)(import_core168.Badge,{size:"xs",color:"gray",variant:"light",style:{flexShrink:0},children:["+",group.length-1]})]}),(0,import_jsx_runtime124.jsxs)(import_core168.Group,{mt:2,gap:4,children:[problem.clinicalStatus?.coding?.[0]?.code&&(0,import_jsx_runtime124.jsx)(StatusBadge,{"data-testid":"status-badge",color:getStatusColor3(problem.clinicalStatus?.coding?.[0]?.code),variant:"light",status:problem.clinicalStatus?.coding?.[0]?.code}),(0,import_jsx_runtime124.jsx)(import_core168.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core169.formatDate)(problem.onsetDateTime)})]})]})},problem.id))}),group.length>1&&(0,import_jsx_runtime124.jsx)(import_core168.UnstyledButton,{onClick:()=>toggleGroup(key),"aria-expanded":isExpanded,"aria-controls":groupContentId,pl:4,pt:2,style:{fontSize:"var(--mantine-font-size-xs)",color:"var(--mantine-color-dimmed)"},children:isExpanded?"Show less":`Show all ${group.length} entries`})]},key)})}):(0,import_jsx_runtime124.jsx)(import_core168.Text,{children:"(none)"})}),(0,import_jsx_runtime124.jsx)(import_core168.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime124.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var getStatusColor3=status=>{if(!status)return"gray";switch(status){case"active":case"recurrence":case"relapse":return"green";case"inactive":return"orange";case"remission":return"blue";case"resolved":return"teal";default:return"gray"}};var import_core170=require("@mantine/core"),import_hooks11=require("@mantine/hooks"),import_core171=require("@medplum/core"),import_react_hooks50=require("@medplum/react-hooks"),import_react85=require("react");var import_jsx_runtime125=require("react/jsx-runtime"),NULLFLAVOR=import_core171.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_core171.SNOMED,20430005:import_core171.SNOMED,42035005:import_core171.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let{patient,encounter}=props,medplum=(0,import_react_hooks50.useMedplum)(),[sexualOrientation,setSexualOrientation]=(0,import_react85.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks11.useDisclosure)(!1),[hoverIndex,setHoverIndex]=(0,import_react85.useState)(null),handleSubmit=(0,import_react85.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core171.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core171.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core171.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core171.createReference)(patient),encounter:encounter?(0,import_core171.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_runtime125.jsxs)(import_jsx_runtime125.Fragment,{children:[(0,import_jsx_runtime125.jsx)(CollapsibleSection,{title:"Sexual Orientation",onAdd:()=>{open()},children:sexualOrientation?(0,import_jsx_runtime125.jsx)(import_core170.Flex,{direction:"column",gap:8,children:(0,import_jsx_runtime125.jsx)(import_core170.Box,{onMouseEnter:()=>setHoverIndex(0),onMouseLeave:()=>setHoverIndex(null),children:(0,import_jsx_runtime125.jsx)(import_core170.UnstyledButton,{"data-testid":"sexual-orientation-button",onClick:e=>{killEvent(e),props.onClickResource&&props.onClickResource(sexualOrientation)},children:(0,import_jsx_runtime125.jsx)(import_core170.Box,{pr:hoverIndex===0?24:0,children:(0,import_jsx_runtime125.jsx)(import_core170.Text,{size:"sm",fw:500,children:sexualOrientation.valueCodeableConcept?.text??"Unknown"})})})})}):(0,import_jsx_runtime125.jsx)(import_core170.Text,{children:"(none)"})}),(0,import_jsx_runtime125.jsx)(import_core170.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime125.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime125.jsxs)(import_core170.Stack,{children:[(0,import_jsx_runtime125.jsx)(import_core170.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime125.jsx)(import_core170.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime125.jsx)(import_core170.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime125.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core172=require("@mantine/core"),import_hooks12=require("@mantine/hooks"),import_core173=require("@medplum/core"),import_react_hooks51=require("@medplum/react-hooks"),import_react86=require("react");var import_jsx_runtime126=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_hooks51.useMedplum)(),[smokingStatus,setSmokingStatus]=(0,import_react86.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks12.useDisclosure)(!1),handleSubmit=(0,import_react86.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core173.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_core173.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core173.createReference)(props.patient),encounter:props.encounter?(0,import_core173.createReference)(props.encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core173.SNOMED,version:import_core173.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,props.patient,props.encounter,close]);return(0,import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment,{children:[(0,import_jsx_runtime126.jsx)(CollapsibleSection,{title:"Smoking Status",onAdd:()=>{open()},children:smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime126.jsx)(import_core172.UnstyledButton,{"data-testid":"smoking-status-button",onClick:()=>props.onClickResource?.(smokingStatus),children:(0,import_jsx_runtime126.jsx)(import_core172.Text,{children:(0,import_core173.formatCodeableConcept)(smokingStatus.valueCodeableConcept)})}):(0,import_jsx_runtime126.jsx)(import_core172.Text,{children:"(none)"})}),(0,import_jsx_runtime126.jsx)(import_core172.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime126.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime126.jsxs)(import_core172.Stack,{children:[(0,import_jsx_runtime126.jsx)(import_core172.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime126.jsx)(import_core172.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime126.jsx)(import_core172.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime126.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core175=require("@mantine/core"),import_hooks13=require("@mantine/hooks"),import_core176=require("@medplum/core"),import_react_hooks52=require("@medplum/react-hooks"),import_react87=require("react");var import_core174=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_core174.createReference)(patient),encounter:encounter?(0,import_core174.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_core174.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core174.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!Number.isNaN(value)&&Number.isFinite(value)}var import_jsx_runtime127=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_hooks52.useMedplum)(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react87.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks13.useDisclosure)(!1),handleSubmit=(0,import_react87.useCallback)(formData=>{let newObservations=[];newObservations.push(createCompoundObservation(patient,encounter,BP,"Blood pressure",[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(Number.parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(Number.parseFloat(formData.diastolic),"mm[Hg]")}]));for(let meta of LOINC_CODES)meta.component||newObservations.push(createObservation(patient,encounter,meta.code,meta.title,createQuantity(Number.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_runtime127.jsxs)(import_jsx_runtime127.Fragment,{children:[(0,import_jsx_runtime127.jsx)(CollapsibleSection,{title:"Vitals",onAdd:()=>{open()},children:(0,import_jsx_runtime127.jsx)(import_core175.Stack,{children:LOINC_CODES.map(meta=>{let obs=vitals.find(o=>o.code?.coding?.[0].code===meta.code);return(0,import_jsx_runtime127.jsxs)(import_core175.Group,{align:"center",children:[(0,import_jsx_runtime127.jsx)(import_core175.Text,{c:"dimmed",children:meta.short}),obs&&(0,import_jsx_runtime127.jsx)(import_core175.Text,{children:(0,import_core176.formatQuantity)(getObservationValue(obs,meta.component))})]},meta.name)})})}),(0,import_jsx_runtime127.jsx)(import_core175.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime127.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime127.jsx)(import_core175.SimpleGrid,{cols:2,children:LOINC_CODES.map((meta,index)=>(0,import_jsx_runtime127.jsx)(import_core175.TextInput,{name:meta.name,label:meta.short,description:`${meta.title} (${meta.unit})`,"data-autofocus":index===0,autoFocus:index===0},meta.name))}),(0,import_jsx_runtime127.jsx)(import_core175.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime127.jsx)(import_core175.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime127.jsx)(SubmitButton,{children:"Save"})})]})})]})}var import_jsx_runtime128=require("react/jsx-runtime"),DemographicsSection={key:"demographics",title:"Demographics",component:({patient,onClickResource})=>{let languageDisplay=getPreferredLanguage(patient);return(0,import_jsx_runtime128.jsxs)(import_core177.Stack,{gap:"xs",py:8,children:[(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:patient.birthDate?`${patient.birthDate} (${(0,import_core178.calculateAgeString)(patient.birthDate)})`:void 0,icon:(0,import_jsx_runtime128.jsx)(IconCake,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Birthdate",label:"Birthdate & Age",onClickResource}),(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:patient.gender?formatPatientGenderDisplay(patient):void 0,icon:(0,import_jsx_runtime128.jsx)(IconEmpathize,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Gender & Identity",label:"Gender & Identity",onClickResource}),(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:getRace(patient)||getEthnicity(patient)?formatPatientRaceEthnicityDisplay(patient):void 0,icon:(0,import_jsx_runtime128.jsx)(IconBinaryTree,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Race & Ethnicity",label:"Race & Ethnicity",onClickResource}),(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:patient.address?.[0]?(0,import_core178.formatAddress)(patient.address[0]):void 0,icon:(0,import_jsx_runtime128.jsx)(IconMapPin,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Location",label:"Location",onClickResource}),(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:languageDisplay,icon:(0,import_jsx_runtime128.jsx)(IconLanguage,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Language",label:"Language",onClickResource}),(0,import_jsx_runtime128.jsx)(PatientInfoItem,{patient,value:getGeneralPractitioner(patient),icon:(0,import_jsx_runtime128.jsx)(IconStethoscope,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add General Practitioner",label:"General Practitioner",onClickResource})]})}},InsuranceSection={key:"insurance",title:"Insurance",searches:[{key:"coverages",resourceType:"Coverage",patientParam:"beneficiary"}],component:({results,onClickResource})=>(0,import_jsx_runtime128.jsx)(Insurance,{coverages:results.coverages||[],onClickResource})},AllergiesSection={key:"allergies",title:"Allergies",searches:[{key:"allergies",resourceType:"AllergyIntolerance",patientParam:"patient"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime128.jsx)(Allergies,{patient,allergies:results.allergies||[],onClickResource})},ProblemListSection={key:"problemList",title:"Problems",searches:[{key:"conditions",resourceType:"Condition",patientParam:"patient"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime128.jsx)(ProblemList,{patient,problems:results.conditions||[],onClickResource})},MedicationsSection={key:"medications",title:"Medications",searches:[{key:"medications",resourceType:"MedicationRequest",patientParam:"subject"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime128.jsx)(Medications,{patient,medicationRequests:results.medications||[],onClickResource})};function createLabsSection(onRequestLabs){return{key:"labs",title:"Labs",searches:[{key:"serviceRequests",resourceType:"ServiceRequest",patientParam:"subject"},{key:"diagnosticReports",resourceType:"DiagnosticReport",patientParam:"subject"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime128.jsx)(Labs,{patient,serviceRequests:results.serviceRequests||[],diagnosticReports:results.diagnosticReports||[],onClickResource,onRequestLabs})}}var LabsSection=createLabsSection(),SexualOrientationSection={key:"sexualOrientation",title:"Sexual Orientation",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{code:"76690-7"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime128.jsx)(SexualOrientation,{patient,sexualOrientation:observations[0],onClickResource})}},SmokingStatusSection={key:"smokingStatus",title:"Smoking Status",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{code:"72166-2"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime128.jsx)(SmokingStatus,{patient,smokingStatus:observations[0],onClickResource})}},VitalsSection={key:"vitals",title:"Vitals",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{category:"vital-signs"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime128.jsx)(Vitals,{patient,vitals:observations,onClickResource})}};function createPharmaciesSection(pharmacyDialogComponent){return{key:"pharmacies",title:"Pharmacies",component:({patient,onClickResource})=>(0,import_jsx_runtime128.jsx)(Pharmacies,{patient,onClickResource,pharmacyDialogComponent})}}var PharmaciesSection=createPharmaciesSection();function getDefaultSections(onRequestLabs){return[DemographicsSection,InsuranceSection,AllergiesSection,ProblemListSection,MedicationsSection,createLabsSection(onRequestLabs),SexualOrientationSection,SmokingStatusSection,VitalsSection,PharmaciesSection]}var import_jsx_runtime129=require("react/jsx-runtime");function PatientSummary(props){let medplum=(0,import_react_hooks53.useMedplum)(),{patient:propsPatient,onClickResource,onRequestLabs}=props,patient=(0,import_react_hooks53.useResource)(propsPatient),[createdDate,setCreatedDate]=(0,import_react88.useState)(),defaultSections=(0,import_react88.useMemo)(()=>getDefaultSections(onRequestLabs),[onRequestLabs]),sections=props.sections??defaultSections,{sectionData,loading,error}=(0,import_react_hooks53.usePatientSummaryData)(propsPatient,sections);return(0,import_react88.useEffect)(()=>{let id=(0,import_core180.resolveId)(propsPatient);id&&medplum.readHistory("Patient",id).then(history=>{let lastUpdated=history.entry?.[history.entry.length-1]?.resource?.meta?.lastUpdated;setCreatedDate(typeof lastUpdated=="string"?lastUpdated:"")}).catch(()=>{})},[propsPatient,medplum]),patient?(0,import_jsx_runtime129.jsxs)(import_core179.Flex,{direction:"column",gap:"xs",w:"100%",h:"100%",className:PatientSummary_default.panel,children:[(0,import_jsx_runtime129.jsxs)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:[(0,import_jsx_runtime129.jsxs)(import_core179.Group,{align:"center",gap:"sm",p:16,children:[(0,import_jsx_runtime129.jsx)(ResourceAvatar,{value:patient,size:48,radius:48,style:{border:"2px solid white"}}),(0,import_jsx_runtime129.jsxs)(import_core179.Stack,{gap:0,style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime129.jsx)(import_core179.Tooltip,{label:(0,import_core180.formatHumanName)(patient.name?.[0]),position:"top-start",openDelay:650,children:(0,import_jsx_runtime129.jsx)(import_core179.Text,{fz:"h4",fw:800,truncate:!0,style:{minWidth:0},children:(0,import_core180.formatHumanName)(patient.name?.[0])})}),(()=>{let dateString=typeof createdDate=="string"&&createdDate.length>0?createdDate:void 0;if(!dateString)return null;let d=new Date(dateString);return(0,import_jsx_runtime129.jsxs)(import_core179.Text,{fz:"xs",mt:-2,fw:500,c:"gray.6",truncate:!0,style:{minWidth:0},children:["Patient since ",d.getMonth()+1,"/",d.getDate(),"/",d.getFullYear()]})})()]})]}),(0,import_jsx_runtime129.jsx)(import_core179.Divider,{})]}),(0,import_jsx_runtime129.jsxs)(import_core179.Stack,{gap:"xs",px:16,pt:12,pb:16,style:{flex:2,overflowY:"auto",minHeight:0},children:[error&&(0,import_jsx_runtime129.jsxs)(import_core179.Text,{c:"red",fz:"sm",children:["Error loading patient summary: ",error.message]}),!loading&&sections.length>0&&(0,import_jsx_runtime129.jsx)(import_jsx_runtime129.Fragment,{children:sections.map((section,index)=>{let SectionComponent=section.component;return(0,import_jsx_runtime129.jsxs)("div",{children:[(0,import_jsx_runtime129.jsx)(SectionComponent,{patient,onClickResource,results:sectionData[index]??{}}),(0,import_jsx_runtime129.jsx)(import_core179.Divider,{})]},section.key)})})]})]}):null}var ThreadInbox_default={container:"ThreadInbox_container",rightBorder:"ThreadInbox_rightBorder"};var import_jsx_runtime130=require("react/jsx-runtime");function ThreadInbox(props){let{query,threadId,subject,showPatientSummary=!1,sections,onNew,getThreadUri,uploadEnabled,onViewInDocuments,onChange,inProgressUri,completedUri,allowPatientSelection=!1}=props,navigate=(0,import_react_hooks54.useMedplumNavigate)(),[modalOpened,{open:openModal,close:closeModal}]=(0,import_hooks14.useDisclosure)(!1),currentSearch=(0,import_react89.useMemo)(()=>(0,import_core182.parseSearchRequest)(`Communication?${query}`),[query]),searchParams=(0,import_react89.useMemo)(()=>new URLSearchParams(query),[query]),itemsPerPage=Number.parseInt(searchParams.get("_count")||"20",10),currentOffset=Number.parseInt(searchParams.get("_offset")||"0",10),currentPage=Math.floor(currentOffset/itemsPerPage)+1,status=searchParams.get("status")||"in-progress",selectedParticipants=(0,import_react89.useMemo)(()=>(currentSearch.filters?.filter(f=>f.code==="recipient")??[]).flatMap(f=>f.value.split(",").filter(Boolean).map(ref=>({reference:ref}))),[currentSearch]),{loading,error,threadMessages,selectedThread,total,handleThreadStatusChange,addThreadMessage,refreshThreadMessages}=(0,import_react_hooks54.useThreadInbox)({query,threadId}),handleParticipantsChange=(0,import_react89.useCallback)(participants=>{let otherFilters=currentSearch.filters?.filter(f=>f.code!=="recipient")??[],participantRefs=participants.map(p=>p.reference).filter(Boolean),newFilters=participantRefs.length>0?[...otherFilters,{code:"recipient",operator:import_core182.Operator.EQUALS,value:participantRefs.join(",")}]:otherFilters;onChange({...currentSearch,filters:newFilters,offset:0})},[currentSearch,onChange]),skeletonTitleWidths=[80,72,68,64],skeletonSubtitleWidths=[85,78,70,60];(0,import_react89.useEffect)(()=>{error&&(0,import_notifications8.showNotification)({title:"Error",message:(0,import_core182.normalizeErrorString)(error),color:"red"})},[error]);let handleTopicStatusChangeWithErrorHandling=async newStatus=>{handleThreadStatusChange(newStatus);try{await refreshThreadMessages()}catch(error2){(0,import_notifications8.showNotification)({title:"Error",message:(0,import_core182.normalizeErrorString)(error2),color:"red"})}},handleNewTopicCompletion=message=>{addThreadMessage(message),onNew(message)};return(0,import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment,{children:[(0,import_jsx_runtime130.jsx)("div",{className:ThreadInbox_default.container,children:(0,import_jsx_runtime130.jsxs)(import_core181.Flex,{direction:"row",h:"100%",w:"100%",children:[(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",w:380,h:"100%",className:ThreadInbox_default.rightBorder,children:(0,import_jsx_runtime130.jsxs)(import_core181.Paper,{h:"100%",style:{display:"flex",flexDirection:"column"},children:[(0,import_jsx_runtime130.jsxs)(import_core181.ScrollArea,{style:{flex:1},scrollbarSize:10,type:"hover",scrollHideDelay:250,children:[(0,import_jsx_runtime130.jsxs)(import_core181.Flex,{h:64,align:"center",justify:"space-between",p:"md",children:[(0,import_jsx_runtime130.jsx)(import_core181.Tabs,{value:status,onChange:value=>{navigate(value==="in-progress"?inProgressUri:completedUri)},variant:"unstyled",className:"pill-tabs",children:(0,import_jsx_runtime130.jsxs)(import_core181.Tabs.List,{children:[(0,import_jsx_runtime130.jsx)(import_core181.Tabs.Tab,{value:"in-progress",children:"In Progress"}),(0,import_jsx_runtime130.jsx)(import_core181.Tabs.Tab,{value:"completed",children:"Completed"})]})}),(0,import_jsx_runtime130.jsxs)(import_core181.Group,{gap:"xs",children:[(0,import_jsx_runtime130.jsx)(ParticipantFilter,{selectedParticipants,onFilterChange:handleParticipantsChange}),(0,import_jsx_runtime130.jsx)(import_core181.Tooltip,{label:"New Message",position:"bottom",openDelay:500,children:(0,import_jsx_runtime130.jsx)(import_core181.ActionIcon,{radius:"xl",variant:"filled",color:"blue",size:32,onClick:openModal,children:(0,import_jsx_runtime130.jsx)(IconPlus,{size:16})})})]})]}),(0,import_jsx_runtime130.jsx)(import_core181.Divider,{}),loading?(0,import_jsx_runtime130.jsx)(import_core181.Stack,{gap:"md",p:"md",children:Array.from({length:10}).map((_,index)=>{let titleWidth=skeletonTitleWidths[index%skeletonTitleWidths.length],subtitleWidth=skeletonSubtitleWidths[index%skeletonSubtitleWidths.length];return(0,import_jsx_runtime130.jsxs)(import_core181.Flex,{gap:"sm",align:"flex-start",children:[(0,import_jsx_runtime130.jsx)(import_core181.Skeleton,{height:40,width:40,radius:"50%"}),(0,import_jsx_runtime130.jsx)(import_core181.Box,{style:{flex:1},children:(0,import_jsx_runtime130.jsxs)(import_core181.Flex,{direction:"column",gap:"xs",children:[(0,import_jsx_runtime130.jsx)(import_core181.Skeleton,{height:16,width:`${titleWidth}%`}),(0,import_jsx_runtime130.jsx)(import_core181.Skeleton,{height:14,width:`${subtitleWidth}%`})]})})]},index)})}):threadMessages.length>0&&(0,import_jsx_runtime130.jsx)(ChatList,{threads:threadMessages,selectedCommunication:selectedThread,getThreadUri}),threadMessages.length===0&&!loading&&(0,import_jsx_runtime130.jsx)(EmptyMessagesState,{})]}),!loading&&total!==void 0&&total>itemsPerPage&&(0,import_jsx_runtime130.jsx)(import_core181.Box,{p:"md",children:(0,import_jsx_runtime130.jsx)(import_core181.Center,{children:(0,import_jsx_runtime130.jsx)(import_core181.Pagination,{value:currentPage,total:Math.ceil(total/itemsPerPage),onChange:page=>{let offset=(page-1)*itemsPerPage;onChange({...currentSearch,offset})},size:"sm",siblings:1,boundaries:1})})})]})}),selectedThread?(0,import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment,{children:[(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",style:{flex:1},h:"100%",className:ThreadInbox_default.rightBorder,children:(0,import_jsx_runtime130.jsx)(import_core181.Paper,{h:"100%",children:(0,import_jsx_runtime130.jsxs)(import_core181.Stack,{h:"100%",gap:0,children:[(0,import_jsx_runtime130.jsxs)(import_core181.Flex,{h:64,align:"center",justify:"space-between",p:"md",children:[(0,import_jsx_runtime130.jsx)(import_core181.Text,{fw:800,truncate:!0,fz:"lg",children:selectedThread.topic?.text??"Messages"}),(0,import_jsx_runtime130.jsxs)(import_core181.Menu,{position:"bottom-end",shadow:"md",children:[(0,import_jsx_runtime130.jsx)(import_core181.Menu.Target,{children:(0,import_jsx_runtime130.jsx)(import_core181.Button,{variant:"light",color:getStatusColor4(selectedThread.status),rightSection:selectedThread.status==="completed"?void 0:(0,import_jsx_runtime130.jsx)(IconChevronDown,{size:16}),radius:"xl",size:"sm",children:selectedThread.status.split("-").map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(" ")})}),selectedThread.status!=="completed"&&(0,import_jsx_runtime130.jsx)(import_core181.Menu.Dropdown,{children:(0,import_jsx_runtime130.jsx)(import_core181.Menu.Item,{onClick:()=>handleTopicStatusChangeWithErrorHandling("completed"),children:"Completed"})})]})]}),(0,import_jsx_runtime130.jsx)(import_core181.Divider,{}),(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",style:{flex:1},h:"100%",children:(0,import_jsx_runtime130.jsx)(ThreadChat,{title:"Messages",thread:selectedThread,excludeHeader:!0,uploadEnabled,onViewInDocuments},`${(0,import_core182.getReferenceString)(selectedThread)}`)})]})})}),selectedThread.subject&&showPatientSummary&&(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",w:300,h:"100%",children:(0,import_jsx_runtime130.jsx)(import_core181.ScrollArea,{p:0,h:"100%",scrollbarSize:10,type:"hover",scrollHideDelay:250,children:(0,import_jsx_runtime130.jsx)(PatientSummary,{patient:selectedThread.subject,sections},selectedThread.id)})})]}):(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",style:{flex:1},h:"100%",children:(0,import_jsx_runtime130.jsx)(NoMessages,{})})]})}),(0,import_jsx_runtime130.jsx)(NewTopicDialog,{subject,opened:modalOpened,onClose:closeModal,onSubmit:handleNewTopicCompletion,allowPatientSelection})]})}function NoMessages(){return(0,import_jsx_runtime130.jsx)(import_core181.Center,{h:"100%",w:"100%",children:(0,import_jsx_runtime130.jsxs)(import_core181.Stack,{align:"center",gap:"md",children:[(0,import_jsx_runtime130.jsx)(import_core181.ThemeIcon,{size:64,variant:"light",color:"gray",children:(0,import_jsx_runtime130.jsx)(IconMessageCircle,{size:32})}),(0,import_jsx_runtime130.jsx)(import_core181.Stack,{align:"center",gap:"xs",children:(0,import_jsx_runtime130.jsx)(import_core181.Text,{size:"sm",c:"dimmed",ta:"center",children:"Select a message from the list to view details"})})]})})}function getStatusColor4(status){return status==="completed"?"green":status==="stopped"?"red":"blue"}function EmptyMessagesState(){return(0,import_jsx_runtime130.jsx)(import_core181.Flex,{direction:"column",h:"100%",justify:"center",align:"center",children:(0,import_jsx_runtime130.jsxs)(import_core181.Stack,{align:"center",gap:"md",pt:"xl",children:[(0,import_jsx_runtime130.jsx)(IconMessageCircle,{size:64,color:"var(--mantine-color-gray-4)"}),(0,import_jsx_runtime130.jsx)(import_core181.Text,{size:"lg",c:"dimmed",fw:500,children:"No messages found"})]})})}var import_core189=require("@mantine/core"),import_notifications9=require("@mantine/notifications"),import_core190=require("@medplum/core"),import_react_hooks57=require("@medplum/react-hooks");var import_react93=require("react");var import_core184=require("@mantine/core"),import_core185=require("@medplum/core"),import_react_hooks55=require("@medplum/react-hooks"),import_react91=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var import_core183=require("@mantine/core"),import_react90=require("react");var ResourceDiffRow_default={removed:"ResourceDiffRow_removed",added:"ResourceDiffRow_added"};var import_jsx_runtime131=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_react90.useState)(isAttachmentType),toggleCollapse=()=>setIsCollapsed(prev=>!prev);return(0,import_jsx_runtime131.jsx)(import_jsx_runtime131.Fragment,{children:isAttachmentType&&!isCollapsed||!isAttachmentType?(0,import_jsx_runtime131.jsx)(import_jsx_runtime131.Fragment,{children:(0,import_jsx_runtime131.jsxs)(import_core183.Table.Tr,{children:[(0,import_jsx_runtime131.jsx)(import_core183.Table.Td,{children:name}),(0,import_jsx_runtime131.jsx)(import_core183.Table.Td,{className:ResourceDiffRow_default.removed,children:originalValue&&(0,import_jsx_runtime131.jsx)(ResourcePropertyDisplay,{path,property,propertyType:originalValue.type,value:originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime131.jsx)(import_core183.Table.Td,{className:ResourceDiffRow_default.added,children:revisedValue&&(0,import_jsx_runtime131.jsx)(ResourcePropertyDisplay,{path,property,propertyType:revisedValue.type,value:revisedValue.value,ignoreMissingValues:!0})})]})}):(0,import_jsx_runtime131.jsxs)(import_core183.Table.Tr,{children:[(0,import_jsx_runtime131.jsx)(import_core183.Table.Td,{children:name}),(0,import_jsx_runtime131.jsx)(import_core183.Table.Td,{colSpan:2,style:{textAlign:"right"},children:(0,import_jsx_runtime131.jsx)(import_core183.Button,{onClick:toggleCollapse,variant:"light",children:"Expand"})})]})})}var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime132=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=(0,import_react_hooks55.useMedplum)(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react91.useState)(!1);(0,import_react91.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react91.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core185.toTypedValue)(original)],typedRevised=[(0,import_core185.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_core185.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core185.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core185.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_runtime132.jsxs)(import_core184.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime132.jsx)(import_core184.Table.Thead,{children:(0,import_jsx_runtime132.jsxs)(import_core184.Table.Tr,{children:[(0,import_jsx_runtime132.jsx)(import_core184.Table.Th,{}),(0,import_jsx_runtime132.jsx)(import_core184.Table.Th,{children:"Before"}),(0,import_jsx_runtime132.jsx)(import_core184.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime132.jsx)(import_core184.Table.Tbody,{children:diffTable.map(row=>{let{key,...rest}=row;return(0,import_jsx_runtime132.jsx)(ResourceDiffRow,{...rest},key)})})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){try{return(0,import_core185.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}catch(err){console.warn("Failed to get element definition",{resourceType,fhirPath,err});return}}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_core185.arrayify)(input).flatMap(v=>v.value);return isArray?inputValue:inputValue[0]}var import_core186=require("@medplum/core"),import_react_hooks56=require("@medplum/react-hooks"),import_react92=require("react");var import_jsx_runtime133=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=(0,import_react_hooks56.useMedplum)(),accessPolicy=medplum.getAccessPolicy(),value=(0,import_react_hooks56.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react92.useState)(!1);(0,import_react92.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{(0,import_core186.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_react92.useMemo)(()=>value&&(0,import_core186.satisfiedAccessPolicy)(value,import_core186.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,value]);return!schemaLoaded||!value?null:(0,import_jsx_runtime133.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:value.resourceType,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues,accessPolicyResource})}var import_core187=require("@mantine/core"),import_core188=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime134=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime134.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_runtime134.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime134.jsxs)(import_core187.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime134.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime134.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime134.jsx)(import_core187.Text,{size:"sm",children:(0,import_jsx_runtime134.jsx)(ResourceName,{c:"inherit",fw:500,value:author,link:!0})}),(0,import_jsx_runtime134.jsxs)(import_core187.Text,{size:"xs",children:[(0,import_jsx_runtime134.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core188.formatDateTime)(dateTime)}),(0,import_jsx_runtime134.jsx)(import_core187.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime134.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime134.jsxs)(import_core187.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime134.jsx)(import_core187.Menu.Target,{children:(0,import_jsx_runtime134.jsx)(import_core187.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core188.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime134.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime134.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime134.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a,timelineResource)-getTime(b,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a,b){return!!b&&a.resourceType===b.resourceType&&a.id===b.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime135=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=(0,import_react_hooks57.useMedplum)(),sender=medplum.getProfile(),inputRef=(0,import_react93.useRef)(null),resource=(0,import_react_hooks57.useResource)(props.value),[history,setHistory]=(0,import_react93.useState)(),[items,setItems]=(0,import_react93.useState)([]),[countToShow,setCountToShow]=(0,import_react93.useState)(10),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react93.useRef)(items);(0,import_react93.useLayoutEffect)(()=>{itemsRef.current=items});let sortAndSetItems=(0,import_react93.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react93.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_react93.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react93.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_react93.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_notifications9.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime135.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications9.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core190.normalizeErrorString)(reason),icon:(0,import_jsx_runtime135.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function onUploadStart(){(0,import_notifications9.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications9.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications9.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core190.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime135.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}if(!resource)return(0,import_jsx_runtime135.jsx)(import_core189.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime135.jsx)(import_core189.Loader,{})});let itemsToShow=items.filter(item=>item).slice(0,countToShow);return(0,import_jsx_runtime135.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime135.jsx)(Panel,{children:(0,import_jsx_runtime135.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime135.jsxs)(import_core189.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime135.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime135.jsx)(import_core189.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime135.jsx)(import_core189.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime135.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime135.jsx)(AttachmentButton,{securityContext:(0,import_core190.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime135.jsx)(import_core189.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime135.jsx)(IconCloudUpload,{size:16})})})]})})}),itemsToShow.map(item=>{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_runtime135.jsx)(HistoryTimelineItem,{history,resource:item,popupMenuItems:menu},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime135.jsx)(AuditEventTimelineItem,{resource:item,popupMenuItems:menu},key);case"Communication":return(0,import_jsx_runtime135.jsx)(CommunicationTimelineItem,{resource:item,popupMenuItems:menu},key);case"DiagnosticReport":return(0,import_jsx_runtime135.jsx)(DiagnosticReportTimelineItem,{resource:item,popupMenuItems:menu},key);case"Media":return(0,import_jsx_runtime135.jsx)(MediaTimelineItem,{resource:item,popupMenuItems:menu},key);default:return(0,import_jsx_runtime135.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime135.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}}),countToShow<items.length&&(0,import_jsx_runtime135.jsx)(import_core189.Group,{justify:"center",pb:"lg",children:(0,import_jsx_runtime135.jsx)(import_core189.Button,{onClick:()=>setCountToShow(countToShow+10),children:"Show More"})})]})}function HistoryTimelineItem(props){let{history,resource,...rest}=props,previous=getPrevious(history,resource);return previous?(0,import_jsx_runtime135.jsx)(TimelineItem,{resource,padding:!0,...rest,children:(0,import_jsx_runtime135.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime135.jsxs)(TimelineItem,{resource,padding:!0,...rest,children:[(0,import_jsx_runtime135.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime135.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_runtime135.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime135.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_runtime135.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime135.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime135.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime135.jsx)(import_core189.ScrollArea,{children:(0,import_jsx_runtime135.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime135.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime135.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_runtime136=require("react/jsx-runtime");function DefaultResourceTimeline(props){let{resource,...rest}=props;return(0,import_jsx_runtime136.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_core191=require("@medplum/core");var import_jsx_runtime137=require("react/jsx-runtime");function EncounterTimeline(props){let{encounter,...rest}=props;return(0,import_jsx_runtime137.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_core191.createReference)(resource),subject:resource.subject,sender:(0,import_core191.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core191.createReference)(resource),subject:resource.subject,operator:(0,import_core191.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core208=require("@mantine/core"),import_core209=require("@medplum/core"),import_react_hooks59=require("@medplum/react-hooks"),import_react98=require("react");var import_core192=require("@medplum/core");var import_jsx_runtime138=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core192.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_runtime138.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core206=require("@mantine/core"),import_core207=require("@medplum/core"),import_react_hooks58=require("@medplum/react-hooks");var import_react97=require("react");var import_core193=require("@mantine/core"),import_jsx_runtime139=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime139.jsxs)(import_core193.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime139.jsxs)(import_core193.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime139.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime139.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime139.jsx)(import_core193.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime139.jsx)(import_core193.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core195=require("@mantine/core"),import_core196=require("@medplum/core"),import_react94=require("react");var import_core194=require("@medplum/core");var import_jsx_runtime140=require("react/jsx-runtime"),searchParamToOperators={string:[import_core194.Operator.EQUALS,import_core194.Operator.NOT,import_core194.Operator.CONTAINS,import_core194.Operator.EXACT],fulltext:[import_core194.Operator.EQUALS,import_core194.Operator.NOT,import_core194.Operator.CONTAINS,import_core194.Operator.EXACT],token:[import_core194.Operator.EQUALS,import_core194.Operator.NOT,import_core194.Operator.TEXT],reference:[import_core194.Operator.EQUALS,import_core194.Operator.NOT],numeric:[import_core194.Operator.EQUALS,import_core194.Operator.NOT_EQUALS,import_core194.Operator.GREATER_THAN,import_core194.Operator.LESS_THAN,import_core194.Operator.GREATER_THAN_OR_EQUALS,import_core194.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core194.Operator.EQUALS,import_core194.Operator.NOT_EQUALS,import_core194.Operator.GREATER_THAN,import_core194.Operator.LESS_THAN,import_core194.Operator.GREATER_THAN_OR_EQUALS,import_core194.Operator.LESS_THAN_OR_EQUALS],date:[import_core194.Operator.EQUALS,import_core194.Operator.NOT_EQUALS,import_core194.Operator.GREATER_THAN,import_core194.Operator.LESS_THAN,import_core194.Operator.GREATER_THAN_OR_EQUALS,import_core194.Operator.LESS_THAN_OR_EQUALS,import_core194.Operator.STARTS_AFTER,import_core194.Operator.ENDS_BEFORE,import_core194.Operator.APPROXIMATELY],datetime:[import_core194.Operator.EQUALS,import_core194.Operator.NOT_EQUALS,import_core194.Operator.GREATER_THAN,import_core194.Operator.LESS_THAN,import_core194.Operator.GREATER_THAN_OR_EQUALS,import_core194.Operator.LESS_THAN_OR_EQUALS,import_core194.Operator.STARTS_AFTER,import_core194.Operator.ENDS_BEFORE,import_core194.Operator.APPROXIMATELY],uri:[import_core194.Operator.EQUALS,import_core194.Operator.NOT,import_core194.Operator.ABOVE,import_core194.Operator.BELOW]},operatorNames={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",sw:"starts with",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",present:"present",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addNext24HoursFilter(definition,field){let now=new Date,endTime=new Date(now.getTime()+1440*60*1e3);return addDateFilterBetween(definition,field,now,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core194.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core194.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_core194.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_core194.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.replaceAll(/([A-Z])/g," $1"),tmp=tmp.replaceAll(/[-_]/g," "),tmp=tmp.replaceAll(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core194.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?(0,import_jsx_runtime140.jsx)(MedplumLink,{to:`/${resource.resourceType}/${resource.id}`,children:resource.id}):key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core194.formatDateTime)(resource.meta?.lastUpdated):`${resource.resourceType}.${field.name}`===field.elementDefinition?.path?renderPropertyValue(resource,field.elementDefinition):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_runtime140.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core194.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime140.jsx)(import_jsx_runtime140.Fragment,{children:value.map((v,index)=>(0,import_jsx_runtime140.jsx)(ResourcePropertyDisplay,{propertyType:v.type,value:v.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime141=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react94.useRef)(!1),[state,setState]=(0,import_react94.useState)({search:JSON.parse((0,import_core196.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react94.useState)(!1);(0,import_react94.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react94.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core196.getDataType)(resourceType),searchParams=(0,import_core196.getSearchParameters)(resourceType);return(0,import_core196.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime141.jsx)(import_core195.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_runtime141.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime141.jsxs)(import_core195.Stack,{children:[(0,import_jsx_runtime141.jsx)(import_core195.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_runtime141.jsx)(import_core195.Group,{justify:"flex-end",children:(0,import_jsx_runtime141.jsx)(import_core195.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_core199=require("@mantine/core"),import_core200=require("@medplum/core");var import_react95=require("react");var import_core197=require("@mantine/core"),import_core198=require("@medplum/core");var import_jsx_runtime142=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core198.getSearchParameterDetails)(props.resourceType,props.searchParam),name=props.name??"filter-value";switch(details.type){case import_core198.SearchParameterType.REFERENCE:return(0,import_jsx_runtime142.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_core198.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime142.jsx)(import_core197.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_core198.SearchParameterType.DATE:return(0,import_jsx_runtime142.jsx)(import_core197.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_core198.SearchParameterType.DATETIME:return(0,import_jsx_runtime142.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core198.SearchParameterType.NUMBER:return(0,import_jsx_runtime142.jsx)(import_core197.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_core198.SearchParameterType.QUANTITY:return(0,import_jsx_runtime142.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_runtime142.jsx)(import_core197.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:Number.parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime143=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react95.useState)((0,import_core200.deepClone)(props.search)),searchRef=(0,import_react95.useRef)(search);(0,import_react95.useLayoutEffect)(()=>{searchRef.current=search}),(0,import_react95.useEffect)(()=>{setSearch((0,import_core200.deepClone)(props.search))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}let resourceType=props.search.resourceType,searchParams=(0,import_core200.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime143.jsx)(import_core199.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime143.jsxs)(Form,{onSubmit:()=>props.onOk(searchRef.current),children:[(0,import_jsx_runtime143.jsxs)("div",{children:[(0,import_jsx_runtime143.jsxs)("table",{children:[(0,import_jsx_runtime143.jsxs)("colgroup",{children:[(0,import_jsx_runtime143.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime143.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime143.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime143.jsx)("col",{style:{width:40}})]}),(0,import_jsx_runtime143.jsx)("thead",{children:(0,import_jsx_runtime143.jsxs)("tr",{children:[(0,import_jsx_runtime143.jsx)("th",{children:"Field"}),(0,import_jsx_runtime143.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime143.jsx)("th",{children:"Value"}),(0,import_jsx_runtime143.jsx)("th",{})]})}),(0,import_jsx_runtime143.jsx)("tbody",{children:filters.map((filter,index)=>(0,import_jsx_runtime143.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_runtime143.jsx)(ArrayAddButton,{propertyDisplayName:"Filter",onClick:()=>onAddFilter({})})]}),(0,import_jsx_runtime143.jsx)(import_core199.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime143.jsx)(SubmitButton,{children:"OK"})})]})})}function FilterRowInput(props){let value=props.value;function setFilterCode(newCode){props.onChange({code:newCode,operator:import_core200.Operator.EQUALS,value:""})}function setFilterOperator(newOperator){props.onChange({code:value.code,operator:newOperator,value:""})}function setFilterValue(newFilterValue){props.onChange({code:value.code,operator:value.operator,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime143.jsxs)("tr",{children:[(0,import_jsx_runtime143.jsx)("td",{children:(0,import_jsx_runtime143.jsx)(import_core199.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_runtime143.jsx)("td",{children:operators&&(0,import_jsx_runtime143.jsx)(import_core199.NativeSelect,{"data-testid":`${props.id}-filter-operation`,defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]},`${props.id}-filter-value-${props.value.code}`)}),(0,import_jsx_runtime143.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime143.jsx)(SearchFilterValueInput,{name:`${props.id}-filter-value`,resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue},`${props.id}-filter-value-${props.value.code}-${props.value.operator}`)}),(0,import_jsx_runtime143.jsx)("td",{children:props.onDelete&&(0,import_jsx_runtime143.jsx)(import_core199.ActionIcon,{variant:"outline",color:"red",radius:"xl","aria-label":"Delete filter",onClick:props.onDelete,children:(0,import_jsx_runtime143.jsx)(IconX,{style:{width:"70%",height:"70%"},stroke:1.5})})})]})}var import_core201=require("@mantine/core"),import_react96=require("react");var import_jsx_runtime144=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react96.useState)(props.defaultValue??"");if(!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime144.jsx)(import_core201.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime144.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime144.jsxs)(import_core201.Grid,{children:[(0,import_jsx_runtime144.jsx)(import_core201.Grid.Col,{span:10,children:(0,import_jsx_runtime144.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime144.jsx)(import_core201.Grid.Col,{span:2,children:(0,import_jsx_runtime144.jsx)(import_core201.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core202=require("@medplum/core");var import_jsx_runtime145=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core202.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core202.Operator.EQUALS||filter.operator===import_core202.Operator.NOT_EQUALS))return(0,import_jsx_runtime145.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core202.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core202.SearchParameterType.DATETIME)return(0,import_jsx_runtime145.jsx)(import_jsx_runtime145.Fragment,{children:(0,import_core202.formatDateTime)(filter.value)})}return(0,import_jsx_runtime145.jsx)(import_jsx_runtime145.Fragment,{children:filter.value})}var import_core203=require("@mantine/core"),import_core204=require("@medplum/core");var import_jsx_runtime146=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_runtime146.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime146.jsx)(import_core203.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime146.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime146.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime146.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime146.jsx)(TextFilterSubMenu,{...props});case"token":return(0,import_jsx_runtime146.jsx)(TokenFilterSubMenu,{...props});case"uri":return(0,import_jsx_runtime146.jsx)(UriFilterSubMenu,{...props});default:return(0,import_jsx_runtime146.jsxs)(import_jsx_runtime146.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNext24HoursFilter(props.search,code)),children:"Next 24 Hours"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.TEXT),children:"Text contains..."}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function UriFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime146.jsxs)(import_core203.Menu.Dropdown,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core204.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime146.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime146.jsxs)(import_jsx_runtime146.Fragment,{children:[(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Divider,{}),(0,import_jsx_runtime146.jsx)(import_core203.Menu.Item,{leftSection:(0,import_jsx_runtime146.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}function getPaginationControlProps(controlName){switch(controlName){case"next":return{"aria-label":"Next page"};case"previous":return{"aria-label":"Previous page"};case"first":return{"aria-label":"First page"};case"last":return{"aria-label":"Last page"};default:return{}}}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core205=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_core205.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core205.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core205.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_core205.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime147=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change");__publicField(this,"definition");this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load");__publicField(this,"response");this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click");__publicField(this,"resource");__publicField(this,"browserEvent");this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=(0,import_react_hooks58.useMedplum)(),[outcome,setOutcome]=(0,import_react97.useState)(),{search,onLoad}=props,[memoizedSearch,setMemoizedSearch]=(0,import_react97.useState)(search);(0,import_core207.deepEquals)(search,memoizedSearch)||setMemoizedSearch(search);let[state,setState]=(0,import_react97.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react97.useRef)(state);(0,import_react97.useLayoutEffect)(()=>{stateRef.current=state});let total=memoizedSearch.total??"accurate",loadResults=(0,import_react97.useCallback)(options=>{setOutcome(void 0),medplum.requestSchema(memoizedSearch.resourceType).then(()=>medplum.search(memoizedSearch.resourceType,(0,import_core207.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_core207.normalizeOperationOutcome)(reason))})},[medplum,memoizedSearch,total,onLoad]),refreshResults=(0,import_react97.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react97.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(){if(!state.searchResponse?.entry||state.searchResponse.entry.length===0)return!1;for(let e of state.searchResponse.entry)if(e.resource?.id&&!state.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=isAuxClick(e);!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if(outcome)return(0,import_jsx_runtime147.jsx)(OperationOutcomeAlert,{outcome});if(!(0,import_core207.isDataTypeLoaded)(memoizedSearch.resourceType))return(0,import_jsx_runtime147.jsx)(import_core206.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime147.jsx)(import_core206.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_runtime147.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime147.jsxs)(import_core206.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime147.jsxs)(import_core206.Group,{gap:2,children:[(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Fields"}),(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0,dialogOpenTime:Date.now()}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime147.jsx)(import_core206.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime147.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime147.jsxs)(import_core206.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime147.jsxs)(import_core206.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_runtime147.jsx)(import_core206.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime147.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime147.jsxs)(import_core206.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime147.jsxs)(import_core206.Table.Thead,{children:[(0,import_jsx_runtime147.jsxs)(import_core206.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime147.jsx)(import_core206.Table.Th,{children:(0,import_jsx_runtime147.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_runtime147.jsx)(import_core206.Table.Th,{children:(0,import_jsx_runtime147.jsxs)(import_core206.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime147.jsx)(import_core206.Menu.Target,{children:(0,import_jsx_runtime147.jsx)(import_core206.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime147.jsxs)(import_core206.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime147.jsx)(import_core206.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime147.jsx)(import_core206.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime147.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime147.jsx)(SearchPopupMenu,{search:memoizedSearch,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter,dialogOpenTime:Date.now()})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime147.jsxs)(import_core206.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime147.jsx)(import_core206.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime147.jsx)(import_core206.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime147.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:memoizedSearch.filters})},field.name))]})]}),(0,import_jsx_runtime147.jsx)(import_core206.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime147.jsxs)(import_core206.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_runtime147.jsx)(import_core206.Table.Td,{children:(0,import_jsx_runtime147.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_runtime147.jsx)(import_core206.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),!resources?.length&&(0,import_jsx_runtime147.jsx)(Container,{children:(0,import_jsx_runtime147.jsx)(import_core206.Center,{style:{height:150},children:(0,import_jsx_runtime147.jsx)(import_core206.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime147.jsx)(import_core206.Center,{m:"md",p:"md",children:(0,import_jsx_runtime147.jsx)(import_core206.Pagination,{value:getPage(memoizedSearch),total:getTotalPages(memoizedSearch,lastResult),onChange:newPage=>emitSearchChange(setPage(memoizedSearch,newPage)),getControlProps:getPaginationControlProps})}),(0,import_jsx_runtime147.jsx)(SearchFieldEditor,{search:memoizedSearch,visible:state.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}},`search-field-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime147.jsx)(SearchFilterEditor,{search:memoizedSearch,visible:state.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}},`search-filter-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime147.jsx)(SearchExportDialog,{visible:state.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}},`search-export-dialog-${state.dialogOpenTime}`),(0,import_jsx_runtime147.jsx)(SearchFilterValueDialog,{visible:state.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(memoizedSearch,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},`search-filter-dialog-${state.dialogOpenTime}`)]})}function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p=>p.code===f.code));return filters.length===0?(0,import_jsx_runtime147.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime147.jsx)(import_jsx_runtime147.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime147.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime147.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_core207.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core207.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_runtime148=require("react/jsx-runtime");function FhirPathTable(props){let medplum=(0,import_react_hooks59.useMedplum)(),[schemaLoaded,setSchemaLoaded]=(0,import_react98.useState)(!1),[outcome,setOutcome]=(0,import_react98.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react98.useState)(),[selected,setSelected]=(0,import_react98.useState)({});(0,import_react98.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core209.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selected};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=response?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=response?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selected[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_react98.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime148.jsx)(import_core208.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime148.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime148.jsxs)(import_core208.Table,{children:[(0,import_jsx_runtime148.jsx)(import_core208.Table.Thead,{children:(0,import_jsx_runtime148.jsxs)(import_core208.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime148.jsx)(import_core208.Table.Th,{children:(0,import_jsx_runtime148.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_runtime148.jsx)(import_core208.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime148.jsx)(import_core208.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime148.jsxs)(import_core208.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime148.jsx)(import_core208.Table.Td,{children:(0,import_jsx_runtime148.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_runtime148.jsx)(import_core208.Table.Td,{children:(0,import_jsx_runtime148.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime148.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime148.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime148.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime148.jsx)(import_core208.Button,{onClick:()=>props.onBulk(Object.keys(selected)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react98.memo)(FhirPathTable);var import_core210=require("@mantine/core");var InfoBar_default={root:"InfoBar_root",entry:"InfoBar_entry",key:"InfoBar_key",value:"InfoBar_value"};var import_jsx_runtime149=require("react/jsx-runtime");function InfoBar(props){return(0,import_jsx_runtime149.jsx)(import_core210.ScrollArea,{children:(0,import_jsx_runtime149.jsx)("div",{className:InfoBar_default.root,children:props.children})})}InfoBar.Entry=function(props){return(0,import_jsx_runtime149.jsx)("div",{className:InfoBar_default.entry,children:props.children})};InfoBar.Key=function(props){return(0,import_jsx_runtime149.jsx)("div",{className:InfoBar_default.key,children:props.children})};InfoBar.Value=function(props){return(0,import_jsx_runtime149.jsx)("div",{className:InfoBar_default.value,children:props.children})};var import_core211=require("@mantine/core"),import_core212=require("@medplum/core"),import_react_hooks60=require("@medplum/react-hooks"),import_react99=require("react");var LinkTabs_default={list:"LinkTabs_list",link:"LinkTabs_link"};var import_jsx_runtime150=require("react/jsx-runtime");function LinkTabs(props){let{baseUrl,tabs:tabDefinitions,children,...rest}=props,tabs=normalizeTabDefinitions(tabDefinitions),navigate=(0,import_react_hooks60.useMedplumNavigate)(),[currentTab,setCurrentTab]=(0,import_react99.useState)(()=>{let segment=import_core212.locationUtils.getPathname().split("/").pop();if(segment){let segmentLower=segment.toLowerCase(),matched=tabs.find(t=>t.value.split(/[?#]/)[0].toLowerCase()===segmentLower);if(matched)return matched.value}return tabs[0].value});function onTabChange(newTabName){newTabName=newTabName||tabs[0].value,setCurrentTab(newTabName),navigate(`${baseUrl}/${newTabName}`)}return(0,import_jsx_runtime150.jsxs)(import_core211.Tabs,{value:currentTab,onChange:onTabChange,...rest,children:[(0,import_jsx_runtime150.jsx)(import_core211.Tabs.List,{className:LinkTabs_default.list,children:tabs.map(t=>(0,import_jsx_runtime150.jsx)(import_core211.Tabs.Tab,{value:t.value,children:(0,import_jsx_runtime150.jsx)(import_core211.Anchor,{className:LinkTabs_default.link,href:`${baseUrl}/${t.value}`,onClick:onLinkClick,children:t.label})},t.value))}),children]})}function normalizeTabDefinitions(tabs){return tabs.map(t=>(0,import_core212.isString)(t)?{label:t,value:t.toLowerCase()}:t)}function onLinkClick(e){isAuxClick(e)||e.preventDefault()}var import_core215=require("@mantine/core"),import_react_hooks61=require("@medplum/react-hooks");var import_core213=require("@mantine/core"),import_core214=require("@medplum/core");var import_jsx_runtime151=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime151.jsx)(import_core213.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime151.jsxs)(import_core213.Group,{children:[group.measureScore&&(0,import_jsx_runtime151.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime151.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime151.jsxs)(import_jsx_runtime151.Fragment,{children:[(0,import_jsx_runtime151.jsx)(import_core213.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime151.jsx)(import_core213.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_core214.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core214.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime151.jsxs)(import_core213.Box,{children:[(0,import_jsx_runtime151.jsx)(import_core213.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime151.jsx)(import_core213.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime151.jsxs)(import_core213.Box,{children:[(0,import_jsx_runtime151.jsx)(import_core213.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime151.jsx)(import_core213.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime151.jsx)(import_core213.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime151.jsx)(import_core213.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime151.jsx)(import_core213.Flex,{justify:"center",children:(0,import_jsx_runtime151.jsxs)(import_core213.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_runtime151.jsx)(import_jsx_runtime151.Fragment,{children:unit==="%"?(0,import_jsx_runtime151.jsx)(import_core213.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime151.jsx)(import_core213.Flex,{justify:"center",children:(0,import_jsx_runtime151.jsx)(import_core213.Text,{fw:700,fz:18,children:(0,import_jsx_runtime151.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime151.jsx)(import_core213.Flex,{h:120,align:"center",children:(0,import_jsx_runtime151.jsx)(import_core213.Title,{order:3,children:(0,import_jsx_runtime151.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_runtime152=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=(0,import_react_hooks61.useResource)(props.measureReport),[measure]=(0,import_react_hooks61.useSearchOne)("Measure",{url:report?.measure});return report?(0,import_jsx_runtime152.jsxs)(import_core215.Box,{children:[measure&&(0,import_jsx_runtime152.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime152.jsx)(import_core215.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime152.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core216=require("@mantine/core"),import_react_hooks62=require("@medplum/react-hooks"),import_jsx_runtime153=require("react/jsx-runtime");function NotificationIcon(props){let{resourceType,countCriteria,subscriptionCriteria}=props,unreadCount=(0,import_react_hooks62.useNotificationCount)({resourceType,countCriteria,subscriptionCriteria}),result=props.iconComponent;return props.onClick&&(result=(0,import_jsx_runtime153.jsx)(import_core216.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":props.label,onClick:props.onClick,children:result})),props.tooltip&&(result=(0,import_jsx_runtime153.jsx)(import_core216.Tooltip,{label:props.tooltip,children:result})),unreadCount>0&&(result=(0,import_jsx_runtime153.jsx)(import_core216.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:result})),result}var import_core217=require("@mantine/core"),import_notifications10=require("@mantine/notifications"),import_core218=require("@medplum/core"),import_react_hooks63=require("@medplum/react-hooks");var import_react100=require("react");var import_jsx_runtime154=require("react/jsx-runtime"),NOTIFICATION_ID="patient-accounts",NOTIFICATION_TITLE="Patient Accounts",ACCOUNT_TARGET_TYPES=["Organization","HealthcareService","CareTeam"];function PatientAccountsForm(props){let{patient}=props,medplum=(0,import_react_hooks63.useMedplum)(),isAdmin=medplum.isProjectAdmin()||medplum.isSuperAdmin(),originalAccounts=(0,import_react100.useMemo)(()=>(0,import_core218.extractAccountReferences)(patient.meta)??[],[patient.meta]),[pendingAccounts,setPendingAccounts]=(0,import_react100.useState)(originalAccounts),[confirmModalOpen,setConfirmModalOpen]=(0,import_react100.useState)(!1),[propagate,setPropagate]=(0,import_react100.useState)(!0),[saving,setSaving]=(0,import_react100.useState)(!1),changes=(0,import_react100.useMemo)(()=>{let result=[];for(let account of pendingAccounts)originalAccounts.some(o=>o.reference===account.reference)||result.push({reference:account,type:"addition"});for(let account of originalAccounts)pendingAccounts.some(p=>p.reference===account.reference)||result.push({reference:account,type:"removal"});return result},[originalAccounts,pendingAccounts]),hasChanges=changes.length>0,handleAddAccount=(0,import_react100.useCallback)(value=>{value?.reference&&(pendingAccounts.some(a=>a.reference===value.reference)||setPendingAccounts(prev=>[...prev,value]))},[pendingAccounts]),handleRemoveAccount=(0,import_react100.useCallback)(referenceString=>{setPendingAccounts(prev=>prev.filter(a=>a.reference!==referenceString))},[]),handleSave=(0,import_react100.useCallback)(async()=>{let patientId=patient.id;if(!patientId){import_notifications10.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:"Cannot update accounts: Patient resource has no ID.",icon:(0,import_jsx_runtime154.jsx)(IconX,{size:"1rem"}),autoClose:!1,withCloseButton:!0});return}setSaving(!0),setConfirmModalOpen(!1);let url=medplum.fhirUrl("Patient",patientId,"$set-accounts"),parameters={resourceType:"Parameters",parameter:[...pendingAccounts.map(account=>({name:"accounts",valueReference:{reference:account.reference}})),{name:"propagate",valueBoolean:propagate}]};import_notifications10.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,loading:!0,message:propagate?"Saving account changes and propagating to compartment...":"Saving account changes...",autoClose:!1,withCloseButton:!1});try{let headers={};propagate&&(headers.Prefer="respond-async"),await medplum.post(url,parameters,void 0,{headers}),medplum.invalidateUrl(medplum.fhirUrl("Patient",patientId)),import_notifications10.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"green",message:propagate?"Account changes saved. Compartment updates are being applied.":"Account changes saved.",icon:(0,import_jsx_runtime154.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0}),props.onSaved?.()}catch(err){import_notifications10.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:(0,import_core218.normalizeErrorString)(err),icon:(0,import_jsx_runtime154.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}finally{setSaving(!1)}},[medplum,patient,pendingAccounts,propagate,props]);return isAdmin?(0,import_jsx_runtime154.jsxs)(import_jsx_runtime154.Fragment,{children:[(0,import_jsx_runtime154.jsxs)(import_core217.Stack,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Title,{order:3,children:"Current Accounts"}),pendingAccounts.length===0?(0,import_jsx_runtime154.jsx)(import_core217.Text,{c:"dimmed",children:"No accounts assigned to this patient."}):(0,import_jsx_runtime154.jsxs)(import_core217.Table,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Table.Thead,{children:(0,import_jsx_runtime154.jsxs)(import_core217.Table.Tr,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Table.Th,{children:"Type"}),(0,import_jsx_runtime154.jsx)(import_core217.Table.Th,{children:"Account"}),(0,import_jsx_runtime154.jsx)(import_core217.Table.Th,{})]})}),(0,import_jsx_runtime154.jsx)(import_core217.Table.Tbody,{children:pendingAccounts.map(account=>(0,import_jsx_runtime154.jsxs)(import_core217.Table.Tr,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Table.Td,{children:(0,import_jsx_runtime154.jsx)(AccountTypeBadge,{reference:account})}),(0,import_jsx_runtime154.jsx)(import_core217.Table.Td,{children:(0,import_jsx_runtime154.jsx)(ResourceBadge,{value:account,link:!0})}),(0,import_jsx_runtime154.jsx)(import_core217.Table.Td,{children:(0,import_jsx_runtime154.jsx)(import_core217.ActionIcon,{variant:"subtle",color:"red","aria-label":`Remove ${account.reference}`,onClick:()=>handleRemoveAccount(account.reference),children:(0,import_jsx_runtime154.jsx)(IconX,{size:16})})})]},account.reference))})]}),(0,import_jsx_runtime154.jsx)(import_core217.Divider,{}),(0,import_jsx_runtime154.jsx)(import_core217.Title,{order:4,children:"Add Account"}),(0,import_jsx_runtime154.jsx)(ReferenceInput,{name:"newAccount",placeholder:"Search for Organization, HealthcareService, or CareTeam...",targetTypes:ACCOUNT_TARGET_TYPES,onChange:value=>{value&&handleAddAccount(value)}}),hasChanges&&(0,import_jsx_runtime154.jsxs)(import_jsx_runtime154.Fragment,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Divider,{}),(0,import_jsx_runtime154.jsx)(import_core217.Title,{order:4,children:"Pending Changes"}),(0,import_jsx_runtime154.jsx)(import_core217.Stack,{gap:"xs",children:changes.map(change=>(0,import_jsx_runtime154.jsxs)(import_core217.Group,{gap:"xs",children:[change.type==="addition"?(0,import_jsx_runtime154.jsx)(import_core217.Badge,{color:"green",variant:"light",leftSection:(0,import_jsx_runtime154.jsx)(IconPlus,{size:12}),children:"Add"}):(0,import_jsx_runtime154.jsx)(import_core217.Badge,{color:"red",variant:"light",leftSection:(0,import_jsx_runtime154.jsx)(IconMinus,{size:12}),children:"Remove"}),(0,import_jsx_runtime154.jsx)(ResourceBadge,{value:change.reference,link:!0})]},`${change.type}-${change.reference.reference}`))})]}),(0,import_jsx_runtime154.jsx)(import_core217.Box,{children:(0,import_jsx_runtime154.jsx)(import_core217.Button,{disabled:!hasChanges||saving,onClick:()=>setConfirmModalOpen(!0),children:"Save Changes"})})]}),(0,import_jsx_runtime154.jsx)(import_core217.Modal,{opened:confirmModalOpen,onClose:()=>setConfirmModalOpen(!1),title:"Confirm Account Changes",size:"md",keepMounted:!0,children:(0,import_jsx_runtime154.jsxs)(import_core217.Stack,{children:[(0,import_jsx_runtime154.jsxs)(import_core217.Text,{children:["The following changes will be applied to Patient"," ",(0,import_jsx_runtime154.jsxs)("strong",{children:[patient.name?.[0]?.given?.join(" ")," ",patient.name?.[0]?.family]}),":"]}),changes.filter(c=>c.type==="addition").length>0&&(0,import_jsx_runtime154.jsxs)(import_core217.Box,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Text,{fw:600,c:"green",children:"Adding:"}),(0,import_jsx_runtime154.jsx)(import_core217.Stack,{gap:"xs",mt:"xs",children:changes.filter(c=>c.type==="addition").map(c=>(0,import_jsx_runtime154.jsxs)(import_core217.Group,{gap:"xs",children:[(0,import_jsx_runtime154.jsx)(IconPlus,{size:14,color:"green"}),(0,import_jsx_runtime154.jsx)(ResourceBadge,{value:c.reference})]},c.reference.reference))})]}),changes.filter(c=>c.type==="removal").length>0&&(0,import_jsx_runtime154.jsxs)(import_core217.Box,{children:[(0,import_jsx_runtime154.jsx)(import_core217.Text,{fw:600,c:"red",children:"Removing:"}),(0,import_jsx_runtime154.jsx)(import_core217.Stack,{gap:"xs",mt:"xs",children:changes.filter(c=>c.type==="removal").map(c=>(0,import_jsx_runtime154.jsxs)(import_core217.Group,{gap:"xs",children:[(0,import_jsx_runtime154.jsx)(IconMinus,{size:14,color:"red"}),(0,import_jsx_runtime154.jsx)(ResourceBadge,{value:c.reference})]},c.reference.reference))})]}),(0,import_jsx_runtime154.jsx)(import_core217.Checkbox,{label:"Propagate changes to all resources in this patient's compartment",checked:propagate,onChange:event=>setPropagate(event.currentTarget.checked)}),(0,import_jsx_runtime154.jsxs)(import_core217.Group,{justify:"right",mt:"md",children:[(0,import_jsx_runtime154.jsx)(import_core217.Button,{variant:"default",onClick:()=>setConfirmModalOpen(!1),children:"Cancel"}),(0,import_jsx_runtime154.jsx)(import_core217.Button,{onClick:handleSave,loading:saving,children:"Confirm"})]})]})})]}):(0,import_jsx_runtime154.jsx)(import_core217.Alert,{color:"blue",title:"Admin access required",children:"You need project admin access to manage patient account assignments."})}function AccountTypeBadge({reference}){let type=reference.reference?.split("/")[0]??"Unknown";return(0,import_jsx_runtime154.jsx)(import_core217.Badge,{variant:"light",color:{Organization:"blue",HealthcareService:"teal",CareTeam:"violet"}[type]??"gray",size:"sm",children:type})}var import_core219=require("@mantine/core"),import_notifications11=require("@mantine/notifications"),import_core220=require("@medplum/core"),import_react_hooks64=require("@medplum/react-hooks");var import_react101=require("react");var import_jsx_runtime155=require("react/jsx-runtime"),NOTIFICATION_ID2="patient-export",NOTIFICATION_TITLE2="Patient Export",formats={everything:{operation:"$everything",extension:"json",contentType:import_core220.ContentType.FHIR_JSON},summary:{operation:"$summary",extension:"json",contentType:import_core220.ContentType.FHIR_JSON},ccda:{operation:"$ccda-export",extension:"xml",contentType:import_core220.ContentType.CDA_XML},ccdaReferral:{operation:"$ccda-export",type:"referral",extension:"xml",contentType:import_core220.ContentType.CDA_XML}};function PatientExportForm(props){let medplum=(0,import_react_hooks64.useMedplum)(),{patient}=props,handleSubmit=(0,import_react101.useCallback)(async data2=>{let patientId=(0,import_core220.resolveId)(patient),format=data2.format,{operation,type,contentType,extension}=formats[format],url=medplum.fhirUrl("Patient",patientId,operation),params={};type&&(params.type=type),data2.author&&(params.author={reference:data2.author}),data2.authoredOn&&(params.authoredOn=convertLocalToIso(data2.authoredOn)),data2.startDate&&(params.start=data2.startDate),data2.endDate&&(params.end=data2.endDate),import_notifications11.notifications.show({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,loading:!0,message:"Exporting...",autoClose:!1,withCloseButton:!1});try{let response=await medplum.post(url,params,void 0,{cache:"no-cache",headers:{Accept:contentType}}),fileName=`Patient-export-${patientId}-${new Date().toISOString().replaceAll(":","-")}.${extension}`;saveData(response,fileName,contentType),import_notifications11.notifications.update({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,color:"green",message:"Done",icon:(0,import_jsx_runtime155.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0})}catch(err){import_notifications11.notifications.update({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,color:"red",message:(0,import_core220.normalizeErrorString)(err),icon:(0,import_jsx_runtime155.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}},[medplum,patient]);return(0,import_jsx_runtime155.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime155.jsxs)(import_core219.Stack,{children:[(0,import_jsx_runtime155.jsx)(FormSection,{title:"Export Format",description:"Required",withAsterisk:!0,children:(0,import_jsx_runtime155.jsx)(import_core219.SegmentedControl,{name:"format",data:[{label:"FHIR Everything",value:"everything"},{label:"Patient Summary",value:"summary"},{label:"C-CDA",value:"ccda"},{label:"C-CDA Referral",value:"ccdaReferral"}],fullWidth:!0})}),(0,import_jsx_runtime155.jsx)(FormSection,{title:"Author",description:"Optional author for composition. Default value is current user.",children:(0,import_jsx_runtime155.jsx)(ReferenceInput,{name:"author",placeholder:"Author",targetTypes:["Organization","Practitioner","PractitionerRole"]})}),(0,import_jsx_runtime155.jsx)(FormSection,{title:"Authored On",description:"Optional date for composition authored on. Default value is current date.",children:(0,import_jsx_runtime155.jsx)(DateTimeInput,{name:"authoredOn",placeholder:"Authored on"})}),(0,import_jsx_runtime155.jsx)(FormSection,{title:"Start Date",description:"The start date of care. If no start date is provided, all records prior to the end date are in scope.",children:(0,import_jsx_runtime155.jsx)(DateTimeInput,{name:"startDate",placeholder:"Start date"})}),(0,import_jsx_runtime155.jsx)(FormSection,{title:"End Date",description:"The end date of care. If no end date is provided, all records subsequent to the start date are in scope.",children:(0,import_jsx_runtime155.jsx)(DateTimeInput,{name:"endDate",placeholder:"End date"})}),(0,import_jsx_runtime155.jsx)(import_core219.Group,{justify:"right",children:(0,import_jsx_runtime155.jsx)(SubmitButton,{children:"Request Export"})})]})})}function saveData(data2,fileName,contentType){let content=typeof data2=="string"?data2:JSON.stringify(data2,null,2),blob=new Blob([content],{type:contentType}),url=window.URL.createObjectURL(blob),a=document.createElement("a");document.body.appendChild(a),a.style.display="none",a.href=url,a.download=fileName,a.click(),window.URL.revokeObjectURL(url)}var import_core221=require("@medplum/core"),import_react_hooks65=require("@medplum/react-hooks");function getDefaultColor(patient){if(patient.gender==="male")return"blue";if(patient.gender==="female")return"pink"}var import_jsx_runtime156=require("react/jsx-runtime");function PatientHeader(props){let patient=(0,import_react_hooks65.useResource)(props.patient);return patient?(0,import_jsx_runtime156.jsxs)(InfoBar,{children:[(0,import_jsx_runtime156.jsx)(ResourceAvatar,{value:patient,size:"lg",color:getDefaultColor(patient)}),(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:"Name"}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:(0,import_jsx_runtime156.jsx)(MedplumLink,{to:patient,fw:500,children:patient.name?(0,import_jsx_runtime156.jsx)(HumanNameDisplay,{value:patient.name[0],options:{use:!1}}):"[blank]"})})]}),patient.birthDate&&(0,import_jsx_runtime156.jsxs)(import_jsx_runtime156.Fragment,{children:[(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:"DoB"}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:patient.birthDate})]}),(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:"Age"}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:(0,import_core221.calculateAgeString)(patient.birthDate)})]})]}),patient.gender&&(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:"Gender"}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:patient.gender})]}),patient.address&&(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:"State"}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:patient.address[0]?.state})]}),patient.identifier?.map(identifier=>(0,import_jsx_runtime156.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime156.jsx)(InfoBar.Key,{children:identifier?.system}),(0,import_jsx_runtime156.jsx)(InfoBar.Value,{children:identifier?.value})]},`${identifier?.system}-${identifier?.value}`))]}):null}var import_core222=require("@mantine/core"),import_notifications12=require("@mantine/notifications"),import_core223=require("@medplum/core"),import_react102=require("react");var PharmacyDialog_default={pharmacyItem:"PharmacyDialog_pharmacyItem",pharmacyItemSelected:"PharmacyDialog_pharmacyItemSelected"};var import_jsx_runtime157=require("react/jsx-runtime");function getPharmacyKey(pharmacy,index){return pharmacy.identifier?.[0]?.value||`pharmacy-${index}`}function SearchForm({onSearch,searching}){return(0,import_jsx_runtime157.jsx)("form",{onSubmit:e=>{e.preventDefault();let formData=new FormData(e.currentTarget);onSearch(formData)},children:(0,import_jsx_runtime157.jsxs)(import_core222.Stack,{gap:"md",children:[(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"name",label:"Pharmacy Name",placeholder:"Enter pharmacy name (min 3 chars)"}),(0,import_jsx_runtime157.jsxs)(import_core222.Group,{grow:!0,children:[(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"city",label:"City",placeholder:"City (min 3 chars)"}),(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"state",label:"State",placeholder:"State (min 3 chars)"})]}),(0,import_jsx_runtime157.jsxs)(import_core222.Group,{grow:!0,children:[(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"zip",label:"Zip Code",placeholder:"Zip code (min 3 chars)"}),(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"phoneOrFax",label:"Phone or Fax",placeholder:"Phone or fax number"})]}),(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"address",label:"Address",placeholder:"Street address (min 3 chars)"}),(0,import_jsx_runtime157.jsx)(import_core222.TextInput,{name:"ncpdpID",label:"NCPDP ID",placeholder:"National Council for Prescription Drug Programs ID"}),(0,import_jsx_runtime157.jsx)(import_core222.Button,{type:"submit",loading:searching,children:"Search"})]})})}function PharmacyItem({pharmacy,pharmacyKey,isSelected,onSelect}){return(0,import_jsx_runtime157.jsx)(import_core222.Box,{p:"sm",className:isSelected?PharmacyDialog_default.pharmacyItemSelected:PharmacyDialog_default.pharmacyItem,onClick:onSelect,children:(0,import_jsx_runtime157.jsx)(import_core222.Radio,{value:pharmacyKey,label:(0,import_jsx_runtime157.jsxs)(import_core222.Box,{children:[(0,import_jsx_runtime157.jsx)(import_core222.Text,{fw:500,size:"sm",children:pharmacy.name}),pharmacy.address?.[0]&&(0,import_jsx_runtime157.jsx)(import_core222.Text,{size:"xs",c:"dimmed",children:(0,import_core223.formatAddress)(pharmacy.address[0])}),pharmacy.telecom?.find(t=>t.system==="phone")&&(0,import_jsx_runtime157.jsxs)(import_core222.Text,{size:"xs",c:"dimmed",children:["Phone: ",pharmacy.telecom.find(t=>t.system==="phone")?.value]}),pharmacy.telecom?.find(t=>t.system==="fax")&&(0,import_jsx_runtime157.jsxs)(import_core222.Text,{size:"xs",c:"dimmed",children:["Fax: ",pharmacy.telecom.find(t=>t.system==="fax")?.value]})]})})},pharmacyKey)}function SearchResults({searchResults,selectedPharmacy,onSelectPharmacy,setAsPrimary,onSetAsPrimary,onAddFavorite,onClose,adding}){return(0,import_jsx_runtime157.jsxs)(import_core222.Box,{mt:"xl",children:[(0,import_jsx_runtime157.jsxs)(import_core222.Text,{fw:600,mb:"md",children:["Search Results (",searchResults.length,")"]}),(0,import_jsx_runtime157.jsx)(import_core222.Radio.Group,{value:selectedPharmacy?getPharmacyKey(selectedPharmacy,searchResults.indexOf(selectedPharmacy)):"",onChange:value=>{let selected=searchResults.find((p,i)=>getPharmacyKey(p,i)===value);selected&&onSelectPharmacy(selected)},children:(0,import_jsx_runtime157.jsx)(import_core222.Stack,{gap:"sm",children:searchResults.map((pharmacy,index)=>{let pharmacyKey=getPharmacyKey(pharmacy,index),isSelected=selectedPharmacy?getPharmacyKey(selectedPharmacy,searchResults.indexOf(selectedPharmacy))===pharmacyKey:!1;return(0,import_jsx_runtime157.jsx)(PharmacyItem,{pharmacy,pharmacyKey,isSelected,onSelect:()=>onSelectPharmacy(pharmacy)},pharmacyKey)})})}),(0,import_jsx_runtime157.jsxs)(import_core222.Flex,{mt:"lg",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime157.jsx)(import_core222.Checkbox,{label:"Set as primary pharmacy",checked:setAsPrimary,onChange:e=>onSetAsPrimary(e.currentTarget.checked)}),(0,import_jsx_runtime157.jsxs)(import_core222.Group,{children:[(0,import_jsx_runtime157.jsx)(import_core222.Button,{variant:"subtle",onClick:onClose,children:"Cancel"}),(0,import_jsx_runtime157.jsx)(import_core222.Button,{onClick:onAddFavorite,disabled:!selectedPharmacy,loading:adding,children:"Add to Favorites"})]})]})]})}function PharmacyDialog(props){let{patient,onSubmit,onClose,onSearch,onAddToFavorites}=props,[searchResults,setSearchResults]=(0,import_react102.useState)([]),[searching,setSearching]=(0,import_react102.useState)(!1),[selectedPharmacy,setSelectedPharmacy]=(0,import_react102.useState)(),[setAsPrimary,setSetAsPrimary]=(0,import_react102.useState)(!1),[adding,setAdding]=(0,import_react102.useState)(!1),handleSearch=(0,import_react102.useCallback)(async formData=>{let searchParams={name:formData.get("name")||void 0,city:formData.get("city")||void 0,state:formData.get("state")||void 0,zip:formData.get("zip")||void 0,address:formData.get("address")||void 0,phoneOrFax:formData.get("phoneOrFax")||void 0,ncpdpID:formData.get("ncpdpID")||void 0},cleanParams=Object.fromEntries(Object.entries(searchParams).filter(([_,v])=>typeof v=="string"&&v.trim()!==""));if(Object.keys(cleanParams).length===0){(0,import_notifications12.showNotification)({color:"yellow",title:"Search Required",message:"Please enter at least one search criterion"});return}setSearching(!0),setSelectedPharmacy(void 0);try{let results=await onSearch(cleanParams);setSearchResults(results),results.length===0&&(0,import_notifications12.showNotification)({color:"blue",title:"No Results",message:"No pharmacies found matching your search criteria"})}catch(error){(0,import_notifications12.showNotification)({color:"red",title:"Search Error",message:(0,import_core223.normalizeErrorString)(error)})}finally{setSearching(!1)}},[onSearch]),handleAddFavorite=(0,import_react102.useCallback)(async()=>{if(!(!selectedPharmacy||!patient.id)){setAdding(!0);try{let response=await onAddToFavorites({patientId:patient.id,pharmacy:selectedPharmacy,setAsPrimary});response.success?((0,import_notifications12.showNotification)({color:"green",title:"Success",message:response.message}),onSubmit(response.organization||selectedPharmacy)):(0,import_notifications12.showNotification)({color:"red",title:"Error",message:response.message})}catch(error){(0,import_notifications12.showNotification)({color:"red",title:"Error",message:(0,import_core223.normalizeErrorString)(error)})}finally{setAdding(!1)}}},[selectedPharmacy,patient.id,setAsPrimary,onAddToFavorites,onSubmit]);return(0,import_jsx_runtime157.jsxs)(import_core222.Box,{children:[(0,import_jsx_runtime157.jsx)(SearchForm,{onSearch:formData=>handleSearch(formData).catch(console.error),searching}),searching&&(0,import_jsx_runtime157.jsx)(import_core222.Flex,{justify:"center",mt:"xl",children:(0,import_jsx_runtime157.jsx)(import_core222.Loader,{})}),searchResults.length>0&&!searching&&(0,import_jsx_runtime157.jsx)(SearchResults,{searchResults,selectedPharmacy,onSelectPharmacy:setSelectedPharmacy,setAsPrimary,onSetAsPrimary:setSetAsPrimary,onAddFavorite:handleAddFavorite,onClose,adding})]})}var import_core224=require("@mantine/core"),import_core225=require("@medplum/core");var import_jsx_runtime158=require("react/jsx-runtime");function summaryResourceListSection(options){return{key:options.key,title:options.title,searches:[{key:options.key,resourceType:options.search.resourceType,patientParam:options.search.patientParam,query:options.search.query}],component:context=>(0,import_jsx_runtime158.jsx)(ResourceListDisplay,{options,resources:context.results[options.key]??[],context})}}function ResourceListDisplay(props){let{options,context}=props,resources=[...props.resources];return options.filter&&(resources=resources.filter(options.filter)),options.sort&&resources.sort(options.sort),(0,import_jsx_runtime158.jsx)(CollapsibleSection,{title:options.title,onAdd:options.onAdd,children:resources.length>0?(0,import_jsx_runtime158.jsx)(import_core224.Flex,{direction:"column",gap:8,children:resources.map(resource=>{let displayString=options.getDisplayString?options.getDisplayString(resource):(0,import_core225.getDisplayString)(resource),status=options.getStatus?.(resource),secondaryText=options.getSecondaryText?.(resource);return(0,import_jsx_runtime158.jsx)(SummaryItem,{onClick:()=>context.onClickResource?.(resource),children:(0,import_jsx_runtime158.jsxs)(import_core224.Box,{children:[(0,import_jsx_runtime158.jsx)(import_core224.Text,{fw:500,className:SummaryItem_default.itemText,children:displayString}),(status||secondaryText)&&(0,import_jsx_runtime158.jsxs)(import_core224.Group,{mt:2,gap:4,children:[status&&(0,import_jsx_runtime158.jsx)(StatusBadge,{color:status.color,variant:"light",status:status.label}),secondaryText&&(0,import_jsx_runtime158.jsx)(import_core224.Text,{size:"xs",fw:500,c:"dimmed",children:secondaryText})]})]})},resource.id)})}):(0,import_jsx_runtime158.jsx)(import_core224.Text,{children:"(none)"})})}var import_core226=require("@medplum/core"),import_react103=require("react");var import_jsx_runtime159=require("react/jsx-runtime");function PatientTimeline(props){let{patient,...rest}=props,loadTimelineResources=(0,import_react103.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("ClinicalImpression",{subject:ref,_count}),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_runtime159.jsx)(ResourceTimeline,{value:patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core226.createReference)(resource),sender:(0,import_core226.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core226.createReference)(resource),operator:(0,import_core226.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core227=require("@mantine/core"),import_core228=require("@medplum/core"),import_react_hooks66=require("@medplum/react-hooks");var import_react104=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing"};var import_jsx_runtime160=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=(0,import_react_hooks66.useMedplum)(),defaultValue2=(0,import_react_hooks66.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react104.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react104.useState)(),[hoverKey,setHoverKey]=(0,import_react104.useState)(),[value,setValue]=(0,import_react104.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}if((0,import_react104.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react104.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(prevValue=>({...prevValue,[property]:newValue}))}return(0,import_jsx_runtime160.jsx)("div",{children:(0,import_jsx_runtime160.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime160.jsx)(import_core227.TextInput,{label:"Plan Title",py:"md",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime160.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),(0,import_jsx_runtime160.jsx)(SubmitButton,{children:"Save"})]})})}function ActionArrayBuilder(props){function changeAction(changedAction){props.onChange(props.actions.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...props.actions,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(props.actions.filter(i=>i!==removedAction))}return(0,import_jsx_runtime160.jsxs)(import_core227.Stack,{gap:"md",className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime160.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_runtime160.jsx)("div",{children:(0,import_jsx_runtime160.jsx)(import_core227.Button,{variant:"outline",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}return(0,import_jsx_runtime160.jsx)("div",{onClick,onMouseOver:onHover,onFocus:onHover,children:(0,import_jsx_runtime160.jsx)(ActionEditor,{action,onChange:props.onChange,selectedKey:props.selectedKey,hoverKey:props.hoverKey,onRemove:props.onRemove})})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react104.useState)(),medplum=(0,import_react_hooks66.useMedplum)(),[loading,setLoading]=(0,import_react104.useState)(!1),[resource,setResource]=(0,import_react104.useState)(),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_react104.useEffect)(()=>{(async()=>{if(!action.definitionCanonical)return;setLoading(!0);let resource2=await medplum.readCanonical(["Questionnaire","ActivityDefinition"],action.definitionCanonical);setActionType(getInitialActionType(resource2)),setResource(resource2),setLoading(!1)})().catch(console.error)},[action.definitionCanonical,medplum]),loading?(0,import_jsx_runtime160.jsx)(import_core227.Loader,{}):(0,import_jsx_runtime160.jsxs)(import_core227.Paper,{"data-testid":action.id,className,p:0,radius:"sm",withBorder:!0,children:[(0,import_jsx_runtime160.jsxs)(import_core227.Flex,{w:"100%",p:"xs",bg:"gray.0",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime160.jsx)(import_core227.TextInput,{w:"100%",name:`actionTitle-${action.id}`,defaultValue:action.title,placeholder:"Title",onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime160.jsx)(import_core227.CloseButton,{"data-testid":"close-button",onClick:props.onRemove})]}),editing&&(0,import_jsx_runtime160.jsxs)(import_core227.Stack,{gap:"xl",p:"md",children:[(0,import_jsx_runtime160.jsx)(import_core227.Box,{children:(0,import_jsx_runtime160.jsx)(import_core227.TextInput,{label:"Task Description",placeholder:"Enter task description",name:`actionDescription-${action.id}`,defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)})}),(0,import_jsx_runtime160.jsx)(import_core227.Box,{children:(0,import_jsx_runtime160.jsx)(import_core227.NativeSelect,{label:"Type of Action",value:actionType,onChange:e=>{let value=e.currentTarget.value==="standard"?void 0:e.currentTarget.value;setActionType(value),props.onChange({...props.action,definitionCanonical:value==="standard"?void 0:props.action.definitionCanonical})},data:[{value:"standard",label:"Standard task"},{value:"questionnaire",label:"Task with Questionnaire"},{value:"activitydefinition",label:"Task with Activity Definition"}]})}),actionType==="questionnaire"&&(0,import_jsx_runtime160.jsxs)(import_core227.Stack,{gap:0,children:[(0,import_jsx_runtime160.jsxs)(import_core227.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime160.jsx)(import_core227.Text,{fw:600,children:"Select questionnaire"}),(0,import_jsx_runtime160.jsx)(import_core227.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime160.jsxs)(import_core227.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_runtime160.jsx)(import_core227.Anchor,{href:"/Questionnaire",target:"_blank",c:"blue",children:"questionnaires list"})]}),(0,import_jsx_runtime160.jsx)(ActionResourceTypeBuilder,{resource,resourceType:"Questionnaire",action,onChange:props.onChange,placeholder:"Search for questionnaire"})]}),actionType==="activitydefinition"&&(0,import_jsx_runtime160.jsxs)(import_core227.Stack,{gap:0,children:[(0,import_jsx_runtime160.jsxs)(import_core227.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime160.jsx)(import_core227.Text,{fw:600,children:"Select activity definition"}),(0,import_jsx_runtime160.jsx)(import_core227.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime160.jsxs)(import_core227.Text,{size:"sm",c:"dimmed",mb:"sm",children:["ActivityDefinition.kind resource to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime160.jsx)(import_core227.Anchor,{href:"/ActivityDefinition",target:"_blank",c:"blue",children:"activity definitions list"})]}),(0,import_jsx_runtime160.jsx)(ActionResourceTypeBuilder,{resource,resourceType:"ActivityDefinition",action,onChange:props.onChange,placeholder:"Search for activity definition"})]})]})]})}function ActionResourceTypeBuilder(props){let{id}=props.action,{resource}=props;return(0,import_jsx_runtime160.jsx)(ResourceInput,{name:id,placeholder:props.placeholder,resourceType:props.resourceType,defaultValue:resource,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:"url"in newValue?newValue.url:void 0,definitionUri:"url"in newValue?void 0:(0,import_core228.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function getInitialActionType(resource){return resource===void 0?"standard":resource.resourceType.toLowerCase()}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=Number.parseInt(existing.substring(3),10);Number.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_core229=require("@mantine/core"),import_core230=require("@medplum/core"),import_react_hooks67=require("@medplum/react-hooks");var import_react105=require("react");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_runtime161=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=(0,import_react_hooks67.useMedplum)(),defaultValue2=(0,import_react_hooks67.useResource)(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react105.useState)(!1),[value,setValue]=(0,import_react105.useState)(),[selectedKey,setSelectedKey]=(0,import_react105.useState)(),[hoverKey,setHoverKey]=(0,import_react105.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react105.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react105.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=(questionnaire2,disableSubmit)=>{setValue(questionnaire2),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire2)};return!schemaLoaded||!value?null:(0,import_jsx_runtime161.jsx)("div",{children:(0,import_jsx_runtime161.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime161.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime161.jsx)(SubmitButton,{children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource4=(0,import_core230.isResource)(props.item),isContainer=isResource4||item.type===import_react_hooks67.QuestionnaireItemType.group,linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react105.useRef)(props.item);(0,import_react105.useLayoutEffect)(()=>{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_runtime161.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime161.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[isResource4&&(0,import_jsx_runtime161.jsx)(import_core229.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource4&&(0,import_jsx_runtime161.jsx)(import_core229.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime161.jsx)(ReferenceProfiles,{item,onChange:updateItem}),(0,import_react_hooks67.isChoiceQuestion)(item)&&(0,import_jsx_runtime161.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[resource.title&&(0,import_jsx_runtime161.jsx)(import_core229.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime161.jsx)("div",{className:QuestionnaireBuilder_default.preserveBreaks,children:item.text}),!isContainer&&(0,import_jsx_runtime161.jsx)(QuestionnaireFormItem,{item,index:0,required:!1,responseItem:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime161.jsx)("div",{children:(0,import_jsx_runtime161.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_runtime161.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[(0,import_jsx_runtime161.jsx)(import_core229.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime161.jsx)(import_core229.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_runtime161.jsx)("div",{children:linkId})}),!isResource4&&(0,import_jsx_runtime161.jsx)(import_core229.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime161.jsxs)(import_core229.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime161.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime161.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime161.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId2(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId2(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource4&&(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource4&&(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core230.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime161.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime161.jsx)(import_core229.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime161.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime161.jsxs)(import_core229.Box,{display:"flex",children:[(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId2()}]})},children:"Add choice"}),(0,import_jsx_runtime161.jsx)(import_core229.Space,{w:"lg"}),(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime161.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime161.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime161.jsx)("div",{children:(0,import_jsx_runtime161.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_runtime161.jsx)("div",{children:(0,import_jsx_runtime161.jsx)(import_core229.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=(0,import_react_hooks67.getQuestionnaireItemReferenceTargetTypes)(props.item)??[];return(0,import_jsx_runtime161.jsxs)(import_jsx_runtime161.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime161.jsxs)(import_core229.Group,{children:[(0,import_jsx_runtime161.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime161.jsx)(import_core229.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId2=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId2(){return"id-"+nextId2++}function ensureQuestionnaireKeys(questionnaire2){return{...questionnaire2,id:questionnaire2.id||generateId2(),item:ensureQuestionnaireItemKeys(questionnaire2.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId2=Math.max(nextId2,Number.parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,Number.parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId2(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId2()}))}function createPage(){return{id:generateId2(),linkId:generateLinkId("s"),type:"group",text:"New Page",extension:[{url:import_react_hooks67.QUESTIONNAIRE_ITEM_CONTROL_URL,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_core233=require("@mantine/core"),import_react_hooks68=require("@medplum/react-hooks");var import_core231=require("@mantine/core"),import_core232=require("@medplum/core"),import_react106=require("react");var import_jsx_runtime162=require("react/jsx-runtime");function QuestionnaireResponseItemDisplay(props){let{item}=props,{text:title,answer,item:nestedAnswers}=item,renderContent=(0,import_react106.useMemo)(()=>answer&&answer.length>0?(0,import_jsx_runtime162.jsx)(import_jsx_runtime162.Fragment,{children:answer.map((ans,index)=>(0,import_jsx_runtime162.jsx)(AnswerDisplay,{answer:ans},`answer-${index}`))}):nestedAnswers&&nestedAnswers.length>0?(0,import_jsx_runtime162.jsx)(import_jsx_runtime162.Fragment,{children:nestedAnswers.map((nestedAnswer,index)=>(0,import_jsx_runtime162.jsx)(QuestionnaireResponseItemDisplay,{item:nestedAnswer},`nested-${nestedAnswer.id??index}`))}):(0,import_jsx_runtime162.jsx)(import_core231.Text,{c:"dimmed",children:"No answer"}),[answer,nestedAnswers]);return(0,import_jsx_runtime162.jsxs)(import_core231.Stack,{gap:0,pb:"xs",children:[(0,import_jsx_runtime162.jsx)(import_core231.Text,{size:"lg",fw:600,id:item.id?`question-${item.id}`:void 0,component:"h3",children:title}),renderContent]})}function AnswerDisplay({answer}){if(!answer)return(0,import_jsx_runtime162.jsx)(import_core231.Text,{c:"dimmed",children:"Invalid answer"});let validEntries=Object.entries(answer).filter(([,value2])=>value2!=null);if(validEntries.length===0)return(0,import_jsx_runtime162.jsx)(import_core231.Text,{c:"dimmed",children:"No valid answer data"});let[key,value]=validEntries[0];switch(key){case"valueInteger":return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:value});case"valueQuantity":return(0,import_jsx_runtime162.jsx)(QuantityDisplay,{value});case"valueString":return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:value});case"valueCoding":return(0,import_jsx_runtime162.jsx)(CodeableConceptDisplay,{value:{coding:[value]}});case"valueRange":return(0,import_jsx_runtime162.jsx)(RangeDisplay,{value});case"valueDateTime":return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:(0,import_core232.formatDate)(value)});case"valueBoolean":return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:value?"True":"False"});case"valueReference":return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:value.display??value.reference});default:return(0,import_jsx_runtime162.jsx)(import_core231.Text,{children:value.toString()})}}var import_jsx_runtime163=require("react/jsx-runtime");function QuestionnaireResponseDisplay(props){let questionnaireResponse=(0,import_react_hooks68.useResource)(props.questionnaireResponse);return(0,import_jsx_runtime163.jsx)(import_core233.Stack,{gap:0,children:questionnaireResponse?.item?.map((item,index)=>(0,import_jsx_runtime163.jsx)(QuestionnaireResponseItemDisplay,{item},`item-${item.id??index}`))})}var import_core234=require("@mantine/core"),import_core235=require("@medplum/core");var import_react107=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime164=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_react107.useState)([]),[groupId,setGroupId]=(0,import_react107.useState)(1),[intervalId,setIntervalId]=(0,import_react107.useState)(1);return(0,import_react107.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime164.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime164.jsx)(import_core234.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime164.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime164.jsx)(import_core234.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_runtime164.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime164.jsx)(import_core234.Group,{justify:"flex-end",children:(0,import_jsx_runtime164.jsx)(SubmitButton,{children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g=>g.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime164.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime164.jsxs)(import_core234.Stack,{gap:"lg",children:[(0,import_jsx_runtime164.jsx)(import_core234.Group,{justify:"flex-end",children:(0,import_jsx_runtime164.jsx)(import_core234.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_runtime164.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime164.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime164.jsx)(import_core234.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime164.jsxs)(import_core234.Stack,{gap:"xs",children:[(0,import_jsx_runtime164.jsxs)(import_core234.Group,{children:[(0,import_jsx_runtime164.jsx)(import_core234.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_runtime164.jsx)(import_core234.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_runtime164.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime164.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_runtime164.jsx)(import_core234.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_runtime164.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props,age=intervalGroup.filters.age??{},ageWithDefaults={low:age.low?.unit?age.low:{...age.low,unit:"years",system:"http://unitsofmeasure.org"},high:age.high?.unit?age.high:{...age.high,unit:"years",system:"http://unitsofmeasure.org"}};return(0,import_jsx_runtime164.jsxs)(import_core234.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime164.jsx)(import_core234.Group,{children:(0,import_jsx_runtime164.jsx)(import_core234.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_runtime164.jsxs)(import_core234.Group,{gap:"xs",children:[(0,import_jsx_runtime164.jsx)(import_core234.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime164.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime164.jsx)(RangeInput,{path:"",name:`age-${intervalGroup.id}`,defaultValue:ageWithDefaults,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime164.jsx)(import_core234.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_runtime164.jsx)(import_core234.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||[],nextId3=Math.max(...intervals.map(interval=>{let existingNum=Number.parseInt(interval.id?.substring(3)||"",10);return Number.isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId3)||(nextId3=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId3++}`}))},setIntervalId(nextId3),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_core235.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core235.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_core235.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_core236=require("@mantine/core"),import_core237=require("@medplum/core"),import_react_hooks69=require("@medplum/react-hooks");var import_react108=require("react");var import_jsx_runtime165=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=(0,import_react_hooks69.useMedplum)(),requestGroup=(0,import_react_hooks69.useResource)(props.value),[startedLoading,setStartedLoading]=(0,import_react108.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react108.useState)();if((0,import_react108.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_runtime165.jsx)(import_core236.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_runtime165.jsxs)(import_react108.Fragment,{children:[(0,import_jsx_runtime165.jsx)(import_core236.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime165.jsx)(IconCheckbox,{}):(0,import_jsx_runtime165.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime165.jsxs)(import_core236.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime165.jsx)(import_core236.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime165.jsx)("div",{children:action.description}),(0,import_jsx_runtime165.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime165.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core237.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime165.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime165.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime165.jsxs)(import_core236.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime165.jsx)(import_core236.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime165.jsx)(import_core236.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_core237.getReferenceString)(entry.resource))return entry.resource}}var import_react_hooks70=require("@medplum/react-hooks"),import_react109=require("react");var import_core238=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=Math.trunc(size/2),diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k=-d;k<=d;k+=2){let kmiddle=middle+k,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k===-d||k!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N&&j<M&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N&&j>=M)return diagonal[kmiddle]}diagonal[middle+d-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=(history.entry??[]).filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:(0,import_core238.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b)=>a.meta.lastUpdated.localeCompare(b.meta.lastUpdated));if(!versions.length)return[];let table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k=0;k<revision.revised.lines.length;k++)table.splice(position+k,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime166=require("react/jsx-runtime");function ResourceBlame(props){let medplum=(0,import_react_hooks70.useMedplum)(),[value,setValue]=(0,import_react109.useState)(props.history);if((0,import_react109.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_runtime166.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime166.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime166.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime166.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime166.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime166.jsxs)(import_jsx_runtime166.Fragment,{children:[(0,import_jsx_runtime166.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime166.jsx)(ResourceName,{value:row.meta.author,link:!0,fz:"xs"})}),(0,import_jsx_runtime166.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime166.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),fz:"xs",children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime166.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime166.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime166.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core239=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime167=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_core239.stringify)(originalResource,!0).match(/[^\r\n]+/g)??["{","}"],revised=(0,import_core239.stringify)(revisedResource,!0).match(/[^\r\n]+/g)??["{","}"],deltas=diff(original,revised);return(0,import_jsx_runtime167.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime167.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime167.jsxs)(import_jsx_runtime167.Fragment,{children:["...",(0,import_jsx_runtime167.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime167.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
110
- `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime167.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
111
- `)}),"...",(0,import_jsx_runtime167.jsx)("br",{})]})}var import_core240=require("@mantine/core"),import_core241=require("@medplum/core"),import_react_hooks71=require("@medplum/react-hooks");var import_react110=require("react");var ResourceForm_default={splitButton:"ResourceForm_splitButton",menuControl:"ResourceForm_menuControl"};var import_jsx_runtime168=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=(0,import_react_hooks71.useMedplum)(),defaultValue2=(0,import_react_hooks71.useResource)(props.defaultValue),resourceType=defaultValue2?.resourceType,[schemaLoaded,setSchemaLoaded]=(0,import_react110.useState)(!1),[value,setValue]=(0,import_react110.useState)(),accessPolicy=medplum.getAccessPolicy(),theme=(0,import_core240.useMantineTheme)();(0,import_react110.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core241.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(!0);let modifiedDefaultValue=(0,import_core241.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_react110.useMemo)(()=>defaultValue2&&(0,import_core241.satisfiedAccessPolicy)(defaultValue2,import_core241.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,defaultValue2]),canWrite=(0,import_react110.useMemo)(()=>medplum.isSuperAdmin()||!accessPolicy||!(0,import_core241.isPopulated)(value?.resourceType)?!0:(0,import_core241.canWriteResourceType)(accessPolicy,value?.resourceType),[medplum,accessPolicy,value?.resourceType]);return!schemaLoaded||!value?(0,import_jsx_runtime168.jsx)("div",{children:"Loading..."}):canWrite?(0,import_jsx_runtime168.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime168.jsxs)(import_core240.Stack,{mb:"xl",children:[(0,import_jsx_runtime168.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime168.jsx)(import_core240.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime168.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime168.jsx)(import_core240.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime168.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:resourceType,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl,accessPolicyResource}),(0,import_jsx_runtime168.jsxs)(import_core240.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",gap:0,children:[(0,import_jsx_runtime168.jsx)(import_core240.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_runtime168.jsxs)(import_core240.Menu,{transitionProps:{transition:"pop"},position:"bottom-end",withinPortal:!0,children:[(0,import_jsx_runtime168.jsx)(import_core240.Menu.Target,{children:(0,import_jsx_runtime168.jsx)(import_core240.ActionIcon,{variant:"filled",color:theme.primaryColor,size:36,className:ResourceForm_default.menuControl,"aria-label":"More actions",children:(0,import_jsx_runtime168.jsx)(IconChevronDown,{size:14,stroke:1.5})})}),(0,import_jsx_runtime168.jsxs)(import_core240.Menu.Dropdown,{children:[props.onPatch&&(0,import_jsx_runtime168.jsx)(import_core240.Menu.Item,{leftSection:(0,import_jsx_runtime168.jsx)(IconEdit,{size:14,stroke:1.5}),onClick:()=>{props.onPatch(value)},children:"Patch"}),props.onDelete&&(0,import_jsx_runtime168.jsx)(import_core240.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime168.jsx)(IconTrash,{size:14,stroke:1.5,color:"red"}),onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})]})]}):(0,import_jsx_runtime168.jsxs)(import_core240.Alert,{color:"red",title:"Permission denied",icon:(0,import_jsx_runtime168.jsx)(IconAlertCircle,{}),children:["Your access level prevents you from editing and creating ",value.resourceType," resources."]})}var import_core242=require("@mantine/core"),import_core243=require("@medplum/core"),import_react_hooks72=require("@medplum/react-hooks"),import_react111=require("react");var import_jsx_runtime169=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=(0,import_react_hooks72.useMedplum)(),[value,setValue]=(0,import_react111.useState)(props.history);return(0,import_react111.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_runtime169.jsxs)(import_core242.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime169.jsx)(import_core242.Table.Thead,{children:(0,import_jsx_runtime169.jsxs)(import_core242.Table.Tr,{children:[(0,import_jsx_runtime169.jsx)(import_core242.Table.Th,{children:"Author"}),(0,import_jsx_runtime169.jsx)(import_core242.Table.Th,{children:"Date"}),(0,import_jsx_runtime169.jsx)(import_core242.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime169.jsx)(import_core242.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime169.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime169.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime169.jsxs)(import_core242.Table.Tr,{children:[(0,import_jsx_runtime169.jsx)(import_core242.Table.Td,{children:(0,import_jsx_runtime169.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime169.jsx)(import_core242.Table.Td,{children:(0,import_core243.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime169.jsx)(import_core242.Table.Td,{children:(0,import_jsx_runtime169.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime169.jsx)(import_core242.Table.Tr,{children:(0,import_jsx_runtime169.jsx)(import_core242.Table.Td,{colSpan:3,children:(0,import_core243.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core244=require("@mantine/core"),import_notifications13=require("@mantine/notifications"),import_core245=require("@medplum/core"),import_react_hooks73=require("@medplum/react-hooks"),import_react112=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime170=require("react/jsx-runtime");function onlyPractitioner(schedule){let refs=schedule.actor.filter(ref=>(0,import_core245.isReference)(ref,"Practitioner"));if(refs.length===1)return refs[0]}function Scheduler(props){let medplum=(0,import_react_hooks73.useMedplum)(),[month,setMonth]=(0,import_react112.useState)(getStartMonth()),[date,setDate]=(0,import_react112.useState)(),[actor,setActor]=(0,import_react112.useState)(),[slots,setSlots]=(0,import_react112.useState)(),[selectedSlot,setSelectedSlot]=(0,import_react112.useState)(),handleSelectSlot=slot=>{setSelectedSlot(slot),props.onSelectSlot?.(slot)};(0,import_react112.useEffect)(()=>{props.schedule||setSlots([]),(props.fetchSlots??(async period=>{let scheduleArray=[];if(!Array.isArray(props.schedule))scheduleArray.push((0,import_core245.isReference)(props.schedule,"Schedule")?props.schedule.reference:(0,import_core245.getReferenceString)(props.schedule));else for(let schedule of props.schedule)if((0,import_core245.isReference)(schedule))scheduleArray.push(schedule.reference);else{let scheduleRef=(0,import_core245.getReferenceString)(schedule);scheduleArray.push(scheduleRef)}let slotSearchParams=new URLSearchParams([["_count","720"],["schedule",scheduleArray.join(",")],["start","gt"+period.start],["start","lt"+period.end]]);return medplum.searchResources("Slot",slotSearchParams)}))({start:getStart2(month),end:getEnd2(month)}).then(setSlots).catch(console.error)},[medplum,props.schedule,props.fetchSlots,month]),(0,import_react112.useEffect)(()=>{props.schedule&&!Array.isArray(props.schedule)&&((0,import_core245.isResource)(props.schedule)?setActor(onlyPractitioner(props.schedule)):medplum.readReference(props.schedule).then(schedule=>setActor(onlyPractitioner(schedule))).catch(error=>{(0,import_notifications13.showNotification)({color:"red",title:"Error",message:(0,import_core245.normalizeErrorString)(error)})}))},[medplum,props.schedule]);let startTimeToSlotMap=(0,import_react112.useMemo)(()=>{if(!date)return null;let sortedSlots=(slots||[]).filter(slot=>new Date(slot.start).getTime()>date.getTime()&&new Date(slot.start).getTime()<date.getTime()+24*3600*1e3).sort((a,b)=>new Date(a.start).getTime()-new Date(b.start).getTime()),startTimeToSlotMap2=new Map;for(let slot of sortedSlots)startTimeToSlotMap2.set(formatTime(new Date(slot.start)),slot);return startTimeToSlotMap2},[slots,date]);return slots?(0,import_jsx_runtime170.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime170.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime170.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime170.jsx)(import_core244.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime170.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime170.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime170.jsx)("p",{children:date.toLocaleDateString()}),selectedSlot&&(0,import_jsx_runtime170.jsx)("p",{children:formatTime(new Date(selectedSlot.start))})]}),(0,import_jsx_runtime170.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime170.jsxs)("div",{children:[(0,import_jsx_runtime170.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime170.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!selectedSlot&&(0,import_jsx_runtime170.jsxs)("div",{children:[(0,import_jsx_runtime170.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime170.jsx)(import_core244.Stack,{children:Array.from(startTimeToSlotMap?.entries()??[]).map(([startTime,slot])=>(0,import_jsx_runtime170.jsx)("div",{children:(0,import_jsx_runtime170.jsx)(import_core244.Button,{variant:"outline",style:{width:150},onClick:()=>handleSelectSlot(slot),children:startTime})},slot.id))})]}),props.children]})]}):(0,import_jsx_runtime170.jsx)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:(0,import_jsx_runtime170.jsx)(import_core244.Loader,{})})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+744*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_core246=require("@medplum/core");var import_jsx_runtime171=require("react/jsx-runtime");function ServiceRequestTimeline(props){let{serviceRequest,...rest}=props;return(0,import_jsx_runtime171.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_core246.createReference)(resource)],subject:resource.subject,sender:(0,import_core246.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core246.createReference)(resource)],subject:resource.subject,operator:(0,import_core246.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core247=require("@mantine/core"),import_notifications14=require("@mantine/notifications"),import_core248=require("@medplum/core"),import_react_hooks74=require("@medplum/react-hooks"),import_jsx_runtime172=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=(0,import_react_hooks74.useMedplum)(),{client,patient,encounter,children,...rest}=props,patientResource=(0,import_react_hooks74.useResource)(patient),encounterResource=(0,import_react_hooks74.useResource)(encounter);function launchApp(){let patientRef=patient,encounterRef=encounter;if(client.launchIdentifierSystems?.length){let patientIdentifierConfig=client.launchIdentifierSystems.find(config=>config.resourceType==="Patient");if(patientRef&&patientResource&&patientIdentifierConfig?.system){let identifier=patientResource.identifier?.find(i=>i.system===patientIdentifierConfig.system);identifier&&(patientRef={...patient,identifier})}let encounterIdentifierConfig=client.launchIdentifierSystems.find(config=>config.resourceType==="Encounter");if(encounterRef&&encounterResource&&encounterIdentifierConfig?.system){let identifier=encounterResource.identifier?.find(i=>i.system===encounterIdentifierConfig.system);identifier&&(encounterRef={...encounter,identifier})}}medplum.createResource({resourceType:"SmartAppLaunch",patient:patientRef,encounter:encounterRef,fhirContext:props.fhirContext}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",(0,import_core248.ensureTrailingSlash)(medplum.fhirUrl().toString())),url.searchParams.set("launch",result.id),window.open(url.toString(),"_blank")}).catch(err=>(0,import_notifications14.showNotification)({color:"red",message:(0,import_core248.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime172.jsx)(import_core247.Anchor,{onClick:()=>launchApp(),...rest,children})}
109
+ }`.replaceAll(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core100.isEmpty)(targetType.resourceType)}var import_core105=require("@mantine/core"),import_core106=require("@medplum/core"),import_react_hooks29=require("@medplum/react-hooks"),import_react58=require("react");function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_core103=require("@mantine/core"),import_core104=require("@medplum/core"),import_react57=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core101=require("@mantine/core");var import_jsx_runtime83=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime83.jsx)(import_core101.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime83.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime83.jsx)(import_core101.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime83.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core102=require("@mantine/core");var import_jsx_runtime84=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime84.jsx)(import_core102.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime84.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime85=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react57.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react57.useContext)(ElementsContext),contextValue=(0,import_react57.useMemo)(()=>{if((0,import_core104.isPopulated)(sliceElements))return(0,import_core104.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_core104.isEmpty)(slice.elements),propertyDisplayName=(0,import_core104.getPropertyDisplayName)(slice.name),showEmptyMessage=props.property.readonly&&values.length===0;return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime85.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_runtime85.jsx)(import_core103.Text,{c:"dimmed",children:"(empty)"}):(0,import_jsx_runtime85.jsxs)(import_core103.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime85.jsxs)(import_core103.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime85.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime85.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_runtime85.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),!props.property.readonly&&values.length<slice.max&&(0,import_jsx_runtime85.jsx)(import_core103.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime85.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}var import_jsx_runtime86=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=(0,import_react_hooks29.useMedplum)(),[loading,setLoading]=(0,import_react58.useState)(!0),[slices,setSlices]=(0,import_react58.useState)([]),[defaultValue2]=(0,import_react58.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react58.useState)(()=>[defaultValue2]),ctx=(0,import_react58.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react58.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_runtime86.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core106.getPathDisplayName)(property.path),showEmptyMessage=props.property.readonly&&slices.length===0&&defaultValue2.length===0;return(0,import_jsx_runtime86.jsxs)(import_core105.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[showEmptyMessage&&(0,import_jsx_runtime86.jsx)(import_core105.Text,{c:"dimmed",children:"(empty)"}),slices.map((slice,sliceIndex)=>(0,import_jsx_runtime86.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_runtime86.jsxs)(import_core105.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime86.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime86.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_runtime86.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),!props.property.readonly&&showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime86.jsx)(import_core105.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime86.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function addPlaceholderValues(slicedValues,slices){for(let sliceIndex=0;sliceIndex<slices.length;sliceIndex++){let slice=slices[sliceIndex],sliceValues=slicedValues[sliceIndex];for(;sliceValues.length<slice.min;)sliceValues.push(void 0)}}var import_core107=require("@mantine/core"),import_hooks2=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react59=require("react"),import_jsx_runtime87=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react59.useState)(!1),clipboard=(0,import_hooks2.useClipboard)(),ref=(0,import_react59.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime87.jsxs)(import_core107.Flex,{gap:"xs",children:[(0,import_jsx_runtime87.jsx)(import_core107.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime87.jsx)(import_core107.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime87.jsx)(IconCopy,{})})]})}var import_core108=require("@mantine/core"),import_core109=require("@medplum/core"),import_react60=require("react");var import_jsx_runtime88=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react60.useState)(props.defaultValue),[open,setOpen]=(0,import_react60.useState)(!props.disabled&&(props.defaultModalOpen??!1));return(0,import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment,{children:[(0,import_jsx_runtime88.jsxs)(import_core108.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime88.jsx)("span",{"data-testid":"timinginput-display",children:(0,import_core109.formatTiming)(value)||"No repeat"}),(0,import_jsx_runtime88.jsx)(import_core108.Button,{disabled:props.disabled,onClick:()=>setOpen(!0),children:"Edit"})]}),!props.disabled&&(0,import_jsx_runtime88.jsx)(TimingEditorDialog,{path:props.path,visible:open,defaultValue:value,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_react60.useState)(props.defaultValue||defaultValue),[timeOfDayItems,setTimeOfDayItems]=(0,import_react60.useState)(()=>(props.defaultValue?.repeat?.timeOfDay??[]).map((v,i)=>({id:i,value:v}))),nextTimeOfDayId=(0,import_react60.useRef)(timeOfDayItems.length),{getExtendedProps}=(0,import_react60.useContext)(ElementsContext),[eventProps,repeatProps,repeatPeriodProps,repeatPeriodUnitProps,repeatDayOfWeekProps,repeatTimeOfDayProps]=(0,import_react60.useMemo)(()=>["event","repeat","repeat.period","repeat.periodUnit","repeat.dayOfWeek","repeat.timeOfDay"].map(field=>getExtendedProps(props.path+"."+field)),[getExtendedProps,props.path]);function setStart(newStart){setValue(value2=>({...value2,event:[newStart]}))}function setRepeat(repeat){setValue(value2=>({...value2,repeat}))}function setPeriod(period){setValue(value2=>({...value2,repeat:{...value2.repeat,period}}))}function setPeriodUnit(periodUnit){setValue(value2=>({...value2,repeat:{...value2.repeat,periodUnit}}))}function setDaysOfWeek(dayOfWeek){setValue(value2=>({...value2,repeat:{...value2.repeat,dayOfWeek}}))}function setTimeOfDay(updater){setTimeOfDayItems(items=>{let newItems=updater(items),timeOfDay=newItems.map(item=>item.value);return setValue(value2=>({...value2,repeat:{...value2.repeat,timeOfDay}})),newItems})}return(0,import_jsx_runtime88.jsx)(import_core108.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime88.jsxs)(import_core108.Stack,{gap:"md",children:[(0,import_jsx_runtime88.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime88.jsx)(DateTimeInput,{disabled:eventProps?.readonly,name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime88.jsx)(import_core108.Switch,{disabled:repeatProps?.readonly,label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime88.jsxs)(import_jsx_runtime88.Fragment,{children:[(0,import_jsx_runtime88.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime88.jsxs)(import_core108.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime88.jsx)(import_core108.TextInput,{disabled:repeatPeriodProps?.readonly,type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(Number.parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime88.jsx)(import_core108.NativeSelect,{disabled:repeatPeriodUnitProps?.readonly,id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.currentTarget.value),data:[{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_runtime88.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime88.jsx)(import_core108.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,value:value.repeat?.dayOfWeek,children:(0,import_jsx_runtime88.jsx)(import_core108.Group,{justify:"space-between",mt:"xs",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime88.jsx)(import_core108.Chip,{value:day,size:"xs",radius:"xl",disabled:repeatDayOfWeekProps?.readonly,checked:(value.repeat?.dayOfWeek??[]).includes(day),children:day.charAt(0).toUpperCase()},day))})})}),(0,import_jsx_runtime88.jsx)(FormSection,{title:"At times",children:(0,import_jsx_runtime88.jsxs)(import_core108.Stack,{mt:"xs",children:[timeOfDayItems.map((item,idx)=>(0,import_jsx_runtime88.jsxs)(import_core108.Group,{children:[(0,import_jsx_runtime88.jsx)(import_core108.TextInput,{disabled:repeatTimeOfDayProps?.readonly,type:"time",id:`timing-dialog-repeat-timeOfDay[${idx}]`,name:`timing-dialog-repeat-timeOfDay[${idx}]`,"data-testid":`timing-repeat-timeOfDay-input-${idx}`,defaultValue:item.value.slice(0,5),onChange:e=>{let newValue=`${e.currentTarget.value}:00`;setTimeOfDay(items=>items.with(idx,{...item,value:newValue}))},style:{flexGrow:1}}),(0,import_jsx_runtime88.jsx)(ArrayRemoveButton,{testId:`timing-repeat-timeOfDay-remove-${idx}`,onClick:()=>setTimeOfDay(items=>items.toSpliced(idx,1))})]},item.id)),(0,import_jsx_runtime88.jsx)(import_core108.Box,{children:(0,import_jsx_runtime88.jsx)(ArrayAddButton,{propertyDisplayName:"Time of Day",onClick:()=>setTimeOfDay(items=>{let id=nextTimeOfDayId.current++;return items.concat({id,value:"00:00:00"})})})})]})})]}),(0,import_jsx_runtime88.jsx)(import_core108.Group,{justify:"flex-end",children:(0,import_jsx_runtime88.jsx)(import_core108.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime89=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_core111.PropertyType.Attachment)return(0,import_jsx_runtime89.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange,disabled:property.readonly});let indent=propertyTypes[0]?.code!==import_core111.PropertyType.Extension;return(0,import_jsx_runtime89.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_runtime89.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime89.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core111.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_react61.useState)(initialPropertyType);return(0,import_jsx_runtime89.jsxs)(import_core110.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime89.jsx)(import_core110.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_runtime89.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_core111.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_react61.useContext)(ElementsContext),defaultValue2=(0,import_react61.useMemo)(()=>{if(!(0,import_core111.isComplexTypeCode)(propertyType)||!(0,import_core111.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core111.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core111.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core111.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core111.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime89.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_core111.PropertyType.SystemString:case import_core111.PropertyType.canonical:case import_core111.PropertyType.string:case import_core111.PropertyType.uri:case import_core111.PropertyType.url:return props.path==="Project.secret.value[x]"||props.path==="ClientApplication.certificateTrustStore"?(0,import_jsx_runtime89.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime89.jsx)(import_core110.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core111.PropertyType.date:return(0,import_jsx_runtime89.jsx)(import_core110.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core111.PropertyType.time:return(0,import_jsx_runtime89.jsx)(import_core110.TextInput,{...getPrimitiveInputProps(),type:"time",step:1,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core111.PropertyType.dateTime:case import_core111.PropertyType.instant:return(0,import_jsx_runtime89.jsx)(DateTimeInput,{...getPrimitiveInputProps(),onChange,outcome});case import_core111.PropertyType.decimal:case import_core111.PropertyType.integer:case import_core111.PropertyType.positiveInt:case import_core111.PropertyType.unsignedInt:return(0,import_jsx_runtime89.jsx)(import_core110.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core111.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core111.PropertyType.code:return(0,import_jsx_runtime89.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet,creatable:!0,maxValues:1});case import_core111.PropertyType.boolean:return(0,import_jsx_runtime89.jsx)(import_core110.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core111.PropertyType.base64Binary:case import_core111.PropertyType.markdown:case import_core111.PropertyType.xhtml:return(0,import_jsx_runtime89.jsx)(import_core110.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core111.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core111.PropertyType.Address:return(0,import_jsx_runtime89.jsx)(AddressInput,{...getComplexInputProps()});case import_core111.PropertyType.Annotation:return(0,import_jsx_runtime89.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core111.PropertyType.Attachment:return(0,import_jsx_runtime89.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core111.PropertyType.CodeableConcept:return(0,import_jsx_runtime89.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core111.PropertyType.Coding:return(0,import_jsx_runtime89.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core111.PropertyType.ContactDetail:return(0,import_jsx_runtime89.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core111.PropertyType.ContactPoint:return(0,import_jsx_runtime89.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core111.PropertyType.Extension:return(0,import_jsx_runtime89.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core111.PropertyType.HumanName:return(0,import_jsx_runtime89.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core111.PropertyType.Identifier:return(0,import_jsx_runtime89.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core111.PropertyType.Money:return(0,import_jsx_runtime89.jsx)(MoneyInput,{...getComplexInputProps()});case import_core111.PropertyType.Period:return(0,import_jsx_runtime89.jsx)(PeriodInput,{...getComplexInputProps()});case import_core111.PropertyType.Duration:case import_core111.PropertyType.Quantity:return(0,import_jsx_runtime89.jsx)(QuantityInput,{...getComplexInputProps()});case import_core111.PropertyType.Range:return(0,import_jsx_runtime89.jsx)(RangeInput,{...getComplexInputProps()});case import_core111.PropertyType.Ratio:return(0,import_jsx_runtime89.jsx)(RatioInput,{...getComplexInputProps()});case import_core111.PropertyType.Reference:return(0,import_jsx_runtime89.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core111.PropertyType.Timing:return(0,import_jsx_runtime89.jsx)(TimingInput,{...getComplexInputProps()});case import_core111.PropertyType.Dosage:case import_core111.PropertyType.UsageContext:default:return(0,import_jsx_runtime89.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core111.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_runtime90=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react62.useState)(props.defaultValue??{}),elementsContext=(0,import_react62.useContext)(ElementsContext),elementsToRender=(0,import_react62.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_runtime90.jsx)(import_core112.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_runtime90.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_runtime90.jsx)(CheckboxFormSection,{title:(0,import_core113.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,readonly:element.readonly,children:resourcePropertyInput},key):(0,import_jsx_runtime90.jsx)(FormSection,{title:(0,import_core113.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,readonly:element.readonly,children:resourcePropertyInput},key)})})}var BackboneElementInput_default={nested:"BackboneElementInput_nested"};var import_jsx_runtime91=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react63.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react63.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react63.useMemo)(()=>(0,import_core115.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react63.useMemo)(()=>{if(typeSchema)return(0,import_core115.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url,accessPolicyResource:props.accessPolicyResource})},[typeSchema,parentElementsContext,props.path,props.accessPolicyResource]);if(!typeSchema)return(0,import_jsx_runtime91.jsxs)("div",{children:[type,"\xA0not implemented"]});let isNested=parentElementsContext.path!=="";return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime91.jsx)(import_core114.Box,{className:clsx_default({[BackboneElementInput_default.nested]:isNested}),children:(0,import_jsx_runtime91.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})}))}var import_core116=require("@mantine/core"),import_react64=require("react");var CalendarDateInput_default={table:"CalendarDateInput_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_runtime92=require("react/jsx-runtime");function CalendarDateInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react64.useState)(getStartMonth);function moveMonth(delta){setMonth(currMonth=>{let newMonth=new Date(currMonth);return newMonth.setMonth(currMonth.getMonth()+delta),onChangeMonth(newMonth),newMonth})}let grid=(0,import_react64.useMemo)(()=>buildGrid(month,props.availableDates),[month,props.availableDates]);return(0,import_jsx_runtime92.jsxs)("div",{children:[(0,import_jsx_runtime92.jsxs)(import_core116.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime92.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime92.jsxs)(import_core116.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime92.jsx)(import_core116.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime92.jsx)(import_core116.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime92.jsxs)("table",{className:CalendarDateInput_default.table,children:[(0,import_jsx_runtime92.jsx)("thead",{children:(0,import_jsx_runtime92.jsxs)("tr",{children:[(0,import_jsx_runtime92.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime92.jsx)("th",{children:"MON"}),(0,import_jsx_runtime92.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime92.jsx)("th",{children:"WED"}),(0,import_jsx_runtime92.jsx)("th",{children:"THU"}),(0,import_jsx_runtime92.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime92.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime92.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime92.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime92.jsx)("td",{children:day&&(0,import_jsx_runtime92.jsx)(import_core116.Button,{variant:"light",disabled:!day.available,onClick:()=>onClick(day.date),children:day.date.getDate()})},"day-"+dayIndex))},"week-"+weekIndex))})]})]})}function buildGrid(startDate,availableDates){let d=new Date(startDate.getFullYear(),startDate.getMonth()),grid=[],row=[];for(let i=0;i<d.getDay();i++)row.push(void 0);for(;d.getMonth()===startDate.getMonth();)row.push({date:new Date(d),available:isDayAvailable(d,availableDates)}),d.getDay()===6&&(grid.push(row),row=[]),d.setDate(d.getDate()+1);if(d.getDay()!==0){for(let i=d.getDay();i<7;i++)row.push(void 0);grid.push(row)}return grid}function isDayAvailable(day,availableDates){for(let availableDate of availableDates)if(availableDate.getFullYear()===day.getFullYear()&&availableDate.getMonth()===day.getMonth()&&availableDate.getDate()===day.getDate())return!0;return!1}var import_react65=require("react");var import_jsx_runtime93=require("react/jsx-runtime");function CalendarInput(props){let{slots,...rest}=props,availableDates=(0,import_react65.useMemo)(()=>slots.map(slot=>new Date(slot.start)),[slots]);return(0,import_jsx_runtime93.jsx)(CalendarDateInput,{...rest,availableDates})}var import_core119=require("@mantine/core"),import_hooks4=require("@mantine/hooks"),import_notifications5=require("@mantine/notifications"),import_core120=require("@medplum/core"),import_react_hooks31=require("@medplum/react-hooks");var import_react67=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatPendingFile:"BaseChat_chatPendingFile",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleNameRight:"BaseChat_chatBubbleNameRight",chatBubbleAttachmentWithText:"BaseChat_chatBubbleAttachmentWithText",chatBubbleAttachmentIcon:"BaseChat_chatBubbleAttachmentIcon",chatBubbleMenu:"BaseChat_chatBubbleMenu"};var import_core117=require("@mantine/core"),import_hooks3=require("@mantine/hooks"),import_core118=require("@medplum/core"),import_react_hooks30=require("@medplum/react-hooks");var import_react66=require("react"),import_jsx_runtime94=require("react/jsx-runtime");function DocumentPicker({subjectRef,onSelect,onUpload}){let medplum=(0,import_react_hooks30.useMedplum)(),[search,setSearch]=(0,import_react66.useState)(""),[docs,setDocs]=(0,import_react66.useState)([]),[loading,setLoading]=(0,import_react66.useState)(!0),subjectRefStr=subjectRef?(0,import_core118.getReferenceString)(subjectRef):void 0,fetchDocs=(0,import_hooks3.useDebouncedCallback)(async query=>{setLoading(!0);try{let params=new URLSearchParams;subjectRefStr&&params.set("subject",subjectRefStr),query.trim()&&params.set("description:contains",query.trim()),params.set("_sort","-date"),params.set("_count","5");let results=await medplum.searchResources("DocumentReference",params);setDocs([...results])}catch(err){console.error(err)}finally{setLoading(!1)}},300);(0,import_react66.useEffect)(()=>{fetchDocs(search)},[fetchDocs,search]);let getDocName=doc=>doc.description??doc.content?.[0]?.attachment?.title??"Untitled";return(0,import_jsx_runtime94.jsxs)(import_core117.Stack,{gap:0,w:280,children:[(0,import_jsx_runtime94.jsx)(import_core117.Text,{fw:500,fz:"sm",px:"sm",pt:"sm",pb:"xs",children:"Attachments"}),(0,import_jsx_runtime94.jsx)(import_core117.Box,{px:"sm",pb:"xs",children:(0,import_jsx_runtime94.jsx)(import_core117.TextInput,{placeholder:"Search for a Document...",size:"xs",value:search,onChange:e=>setSearch(e.currentTarget.value)})}),(0,import_jsx_runtime94.jsx)(import_core117.Divider,{}),loading?(0,import_jsx_runtime94.jsx)(import_core117.Box,{py:"sm",style:{display:"flex",justifyContent:"center"},children:(0,import_jsx_runtime94.jsx)(import_core117.Loader,{size:"xs"})}):(0,import_jsx_runtime94.jsxs)(import_core117.Stack,{gap:0,children:[docs.map(doc=>(0,import_jsx_runtime94.jsxs)(import_core117.UnstyledButton,{px:"sm",py:"xs",onClick:()=>onSelect(doc),style:{display:"flex",alignItems:"center",gap:8},children:[(0,import_jsx_runtime94.jsx)(IconFileText,{size:"1rem",style:{flexShrink:0,color:"var(--mantine-color-blue-6)"}}),(0,import_jsx_runtime94.jsx)(import_core117.Text,{fz:"sm",truncate:!0,children:getDocName(doc)})]},doc.id)),docs.length===0&&(0,import_jsx_runtime94.jsx)(import_core117.Text,{fz:"xs",c:"dimmed",px:"sm",py:"xs",children:"No documents found"})]}),(0,import_jsx_runtime94.jsx)(import_core117.Divider,{}),(0,import_jsx_runtime94.jsxs)(import_core117.UnstyledButton,{px:"sm",py:"xs",onClick:onUpload,style:{display:"flex",alignItems:"center",gap:8},children:[(0,import_jsx_runtime94.jsx)(IconPaperclip,{size:"1rem",style:{flexShrink:0,color:"var(--mantine-color-gray-6)"}}),(0,import_jsx_runtime94.jsx)(import_core117.Text,{fz:"sm",c:"dimmed",children:"Upload an image, pdf, etc."})]})]})}var import_jsx_runtime95=require("react/jsx-runtime");function toSafeUrl(url){if(url)try{let{protocol}=new URL(url);return protocol==="https:"||protocol==="http:"||protocol==="blob:"?url:void 0}catch{return}}function showError(message){(0,import_notifications5.showNotification)({color:"red",title:"Error",message,autoClose:!1})}function parseSentTime(communication){return new Date(communication.sent??0).toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a,b)=>!a.sent&&!b.sent?0:a.sent?b.sent?a.sent.localeCompare(b.sent):1:-1),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,onMessageUpdated,inputDisabled,onError,excludeHeader=!1,uploadEnabled=!1,attachmentSubjectRef,onViewInDocuments,...paperProps}=props,medplum=(0,import_react_hooks31.useMedplum)(),inputRef=(0,import_react67.useRef)(null),scrollAreaRef=(0,import_react67.useRef)(null),firstScrollRef=(0,import_react67.useRef)(!0),initialLoadRef=(0,import_react67.useRef)(!0),[profile,setProfile]=(0,import_react67.useState)(medplum.getProfile()),[reconnecting,setReconnecting]=(0,import_react67.useState)(!1),[loading,setLoading]=(0,import_react67.useState)(!0),[pendingFile,setPendingFile]=(0,import_react67.useState)(void 0),[pendingDocRef,setPendingDocRef]=(0,import_react67.useState)(void 0),[pickerOpen,setPickerOpen]=(0,import_react67.useState)(!1),fileInputRef=(0,import_react67.useRef)(null);loading||(initialLoadRef.current=!1);let profileRefStr=(0,import_react67.useMemo)(()=>profile?(0,import_core120.getReferenceString)(medplum.getProfile()):"",[profile,medplum]),searchMessages=(0,import_react67.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_react67.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications5.showNotification)({color:"red",message:(0,import_core120.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react_hooks31.useSubscription)(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),(0,import_core120.getReferenceString)(communication.sender)!==profileRefStr&&(communicationsRef.current.find(c=>c.id===communication.id)?onMessageUpdated?.(communication):onMessageReceived?.(communication))},{onWebSocketClose:(0,import_react67.useCallback)(()=>{reconnecting||setReconnecting(!0),(0,import_notifications5.showNotification)({color:"red",message:"Live chat disconnected. Attempting to reconnect..."})},[reconnecting]),onWebSocketOpen:(0,import_react67.useCallback)(()=>{reconnecting&&(0,import_notifications5.showNotification)({color:"green",message:"Live chat reconnected."})},[reconnecting]),onSubscriptionConnect:(0,import_react67.useCallback)(()=>{reconnecting&&(searchMessages().catch(err=>(0,import_notifications5.showNotification)({color:"red",message:(0,import_core120.normalizeErrorString)(err)})),setReconnecting(!1))},[reconnecting,searchMessages]),onError:(0,import_react67.useCallback)(err=>{onError?onError(err):showError((0,import_core120.normalizeErrorString)(err))},[onError])});let sendMessageInternal=(0,import_react67.useCallback)(formData=>{if(inputDisabled)return;let message=formData.message?.trim()??"";!message&&!pendingFile&&!pendingDocRef||(inputRef.current&&(inputRef.current.value=""),fileInputRef.current&&(fileInputRef.current.value=""),sendMessage(message,pendingFile,pendingDocRef),setPendingFile(void 0),setPendingDocRef(void 0),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage,pendingFile,pendingDocRef]);(0,import_react67.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks4.useResizeObserver)(),communicationsRef=(0,import_react67.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react67.useRef)(communications),scrollToBottomRef=(0,import_react67.useRef)(!0);(0,import_react67.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react67.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_react67.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_runtime95.jsxs)(import_core119.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[!excludeHeader&&(0,import_jsx_runtime95.jsx)(import_core119.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime95.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:initialLoadRef.current?(0,import_jsx_runtime95.jsxs)(import_core119.Stack,{align:"stretch",mt:"lg",children:[(0,import_jsx_runtime95.jsxs)(import_core119.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime95.jsx)(import_core119.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime95.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]}),(0,import_jsx_runtime95.jsxs)(import_core119.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime95.jsx)(ChatBubbleSkeleton,{alignment:"right",parentWidth:parentRect.width}),(0,import_jsx_runtime95.jsx)(import_core119.Skeleton,{height:38,circle:!0,mr:"md"})]}),(0,import_jsx_runtime95.jsxs)(import_core119.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime95.jsx)(import_core119.Skeleton,{height:38,circle:!0,ml:"md"}),(0,import_jsx_runtime95.jsx)(ChatBubbleSkeleton,{alignment:"left",parentWidth:parentRect.width})]})]},"skeleton-chat-messages"):(0,import_jsx_runtime95.jsxs)(import_core119.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:[(0,import_jsx_runtime95.jsx)(import_core119.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),showDelivered=!!c.received&&c.id===myLastDeliveredId,payloads=c.payload??[],contentRef=payloads.find(p=>p.contentReference)?.contentReference,contentAttachment=payloads.find(p=>p.contentAttachment)?.contentAttachment,hasAttachment=!!(contentRef||contentAttachment),isSender=c.sender?.reference===profileRefStr,menu=hasAttachment?(0,import_jsx_runtime95.jsx)(ChatBubbleMenu,{contentRef,contentAttachment,onViewInDocuments}):null;return(0,import_jsx_runtime95.jsxs)(import_core119.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime95.jsx)(import_core119.Text,{fz:"xs",ta:"center",children:currCommTime}),isSender?(0,import_jsx_runtime95.jsxs)(import_core119.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime95.jsx)("div",{className:BaseChat_default.chatBubbleMenu,children:menu}),(0,import_jsx_runtime95.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered}),(0,import_jsx_runtime95.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender,mb:showDelivered?void 0:"sm"})]}):(0,import_jsx_runtime95.jsxs)(import_core119.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime95.jsx)(ResourceAvatar,{radius:"xl",value:c.sender,mb:"sm"}),(0,import_jsx_runtime95.jsx)(ChatBubble,{alignment:"left",communication:c}),(0,import_jsx_runtime95.jsx)("div",{className:BaseChat_default.chatBubbleMenu,children:menu})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})]})}),(0,import_jsx_runtime95.jsxs)("div",{className:BaseChat_default.chatInputContainer,children:[(pendingFile||pendingDocRef)&&(0,import_jsx_runtime95.jsxs)(import_core119.Group,{className:BaseChat_default.chatPendingFile,gap:4,align:"center",wrap:"nowrap",children:[pendingDocRef?(0,import_jsx_runtime95.jsx)(IconFileText,{size:"0.75rem"}):(0,import_jsx_runtime95.jsx)(IconPaperclip,{size:"0.75rem"}),(0,import_jsx_runtime95.jsx)(import_core119.Text,{fz:"xs",c:"dimmed",flex:1,truncate:!0,children:pendingDocRef?pendingDocRef.description??pendingDocRef.content?.[0]?.attachment?.title??"Document":pendingFile?.name}),(0,import_jsx_runtime95.jsx)(import_core119.ActionIcon,{size:"xs",variant:"subtle",color:"red",onClick:()=>{setPendingDocRef(void 0),setPendingFile(void 0),fileInputRef.current&&(fileInputRef.current.value="")},"aria-label":"Remove attachment",children:(0,import_jsx_runtime95.jsx)(IconX,{size:"0.75rem"})})]}),(0,import_jsx_runtime95.jsx)("input",{ref:fileInputRef,type:"file",style:{display:"none"},disabled:inputDisabled,onChange:e=>{let file=e.target.files?.[0];file&&(setPendingFile(file),setPendingDocRef(void 0))}}),(0,import_jsx_runtime95.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime95.jsx)(import_core119.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",leftSectionWidth:42,rightSectionWidth:42,disabled:inputDisabled,leftSection:!inputDisabled&&uploadEnabled?(0,import_jsx_runtime95.jsxs)(import_core119.Popover,{opened:pickerOpen,onChange:setPickerOpen,position:"top-start",withArrow:!0,shadow:"md",withinPortal:!0,children:[(0,import_jsx_runtime95.jsx)(import_core119.Popover.Target,{children:(0,import_jsx_runtime95.jsx)(import_core119.ActionIcon,{onClick:()=>setPickerOpen(o=>!o),size:"1.5rem",radius:"xl",color:pendingFile||pendingDocRef?"blue":"gray",variant:pendingFile||pendingDocRef?"filled":"subtle","aria-label":"Attach file",children:(0,import_jsx_runtime95.jsx)(IconPaperclip,{size:"1rem",stroke:1.5})})}),(0,import_jsx_runtime95.jsx)(import_core119.Popover.Dropdown,{p:0,children:(0,import_jsx_runtime95.jsx)(DocumentPicker,{subjectRef:attachmentSubjectRef,onSelect:doc=>{setPendingDocRef(doc),setPendingFile(void 0),setPickerOpen(!1)},onUpload:()=>{setPickerOpen(!1),fileInputRef.current?.click()}})})]}):void 0,rightSection:inputDisabled?void 0:(0,import_jsx_runtime95.jsx)(import_core119.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime95.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})]})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,payloads=communication.payload??[],textContent=payloads.find(p=>p.contentString)?.contentString??"",contentRef=payloads.find(p=>p.contentReference)?.contentReference,attachment=payloads.find(p=>p.contentAttachment)?.contentAttachment,sentTime=new Date(communication.sent??-1),seenTime=new Date(communication.received??-1),senderResource=(0,import_react_hooks31.useResource)(communication.sender);return(0,import_jsx_runtime95.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime95.jsxs)(import_core119.Text,{fz:"xs",mb:"xs",fw:500,className:alignment==="right"?BaseChat_default.chatBubbleNameRight:void 0,"aria-label":"Sender name",children:[senderResource?(0,import_core120.getDisplayString)(senderResource):"[Unknown sender]","\xA0\xB7\xA0",(0,import_jsx_runtime95.jsx)(import_core119.Text,{span:!0,c:"dimmed",fz:"xs",children:Number.isNaN(sentTime.getTime())?"":sentTime.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})})]}),(0,import_jsx_runtime95.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime95.jsxs)("div",{className:BaseChat_default.chatBubble,children:[textContent&&(0,import_jsx_runtime95.jsx)("span",{children:textContent}),contentRef&&(0,import_jsx_runtime95.jsx)(ChatBubbleDocumentReference,{reference:contentRef,hasText:!!textContent}),attachment&&(0,import_jsx_runtime95.jsx)(ChatBubbleAttachment,{attachment,hasText:!!textContent})]})}),showDelivered&&(0,import_jsx_runtime95.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}function ChatBubbleAttachment({attachment,hasText}){return(0,import_jsx_runtime95.jsx)("div",{className:hasText?BaseChat_default.chatBubbleAttachmentWithText:void 0,children:(0,import_jsx_runtime95.jsxs)(import_core119.Group,{gap:4,wrap:"nowrap",children:[(0,import_jsx_runtime95.jsx)("span",{className:BaseChat_default.chatBubbleAttachmentIcon,children:(0,import_jsx_runtime95.jsx)(IconPaperclip,{size:"0.75rem"})}),(0,import_jsx_runtime95.jsx)(import_core119.Text,{fz:"xs",truncate:!0,children:attachment.title??"File attached"})]})})}function ChatBubbleDocumentReference({reference,hasText}){let attachment=(0,import_react_hooks31.useResource)(reference)?.content?.[0]?.attachment;return attachment?(0,import_jsx_runtime95.jsx)(ChatBubbleAttachment,{attachment,hasText}):null}function ChatBubbleMenu({contentRef,contentAttachment,onViewInDocuments}){let docRef=(0,import_react_hooks31.useResource)(contentRef),attachment=contentRef?docRef?.content?.[0]?.attachment:contentAttachment,cachedUrl=(0,import_react_hooks31.useCachedBinaryUrl)(attachment?.url),handleDownload=()=>{let href=toSafeUrl(cachedUrl??attachment?.url);href&&window.open(href,"_blank","noopener,noreferrer")};return(0,import_jsx_runtime95.jsxs)(import_core119.Menu,{withinPortal:!0,position:"bottom-start",shadow:"md",children:[(0,import_jsx_runtime95.jsx)(import_core119.Menu.Target,{children:(0,import_jsx_runtime95.jsx)(import_core119.ActionIcon,{variant:"outline",color:"gray",radius:"xl",size:"sm","aria-label":"Attachment options",children:(0,import_jsx_runtime95.jsx)(IconDots,{size:"0.75rem"})})}),(0,import_jsx_runtime95.jsxs)(import_core119.Menu.Dropdown,{children:[contentRef&&onViewInDocuments&&(0,import_jsx_runtime95.jsx)(import_core119.Menu.Item,{leftSection:(0,import_jsx_runtime95.jsx)(IconFileExport,{size:"0.9rem"}),onClick:()=>onViewInDocuments(contentRef),children:"View in Documents"}),(0,import_jsx_runtime95.jsx)(import_core119.Menu.Item,{leftSection:(0,import_jsx_runtime95.jsx)(IconDownload,{size:"0.9rem"}),onClick:handleDownload,children:"Download"})]})]})}function ChatBubbleSkeleton(props){let{alignment,parentWidth}=props;return(0,import_jsx_runtime95.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime95.jsx)("div",{className:BaseChat_default.chatBubbleName,"aria-label":"Placeholder sender name",children:(0,import_jsx_runtime95.jsx)("div",{style:{position:"relative"},children:(0,import_jsx_runtime95.jsx)(import_core119.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_runtime95.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime95.jsx)("div",{className:BaseChat_default.chatBubble,children:(0,import_jsx_runtime95.jsx)(import_core119.Skeleton,{height:14,width:parentWidth*.5,radius:"l"})})})]})}var import_core121=require("@mantine/core"),import_react_hooks32=require("@medplum/react-hooks");var import_react68=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime96=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=(0,import_react_hooks32.useMedplumProfile)(),[opened,setOpened]=(0,import_react68.useState)(open??!1);return(0,import_react68.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment,{children:[opened&&(0,import_jsx_runtime96.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime96.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime96.jsx)(import_core121.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime96.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime96.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime96.jsx)(import_core121.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime96.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core122=require("@medplum/core"),import_react_hooks33=require("@medplum/react-hooks"),import_react69=require("react");var import_jsx_runtime97=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled,excludeHeader,uploadEnabled,onError,onViewInDocuments}=props,medplum=(0,import_react_hooks33.useMedplum)(),profile=(0,import_react_hooks33.useMedplumProfile)(),prevThreadId=(0,import_react_hooks33.usePrevious)(thread?.id),[communications,setCommunications]=(0,import_react69.useState)([]),profileRef=(0,import_react69.useMemo)(()=>profile?(0,import_core122.createReference)(profile):void 0,[profile]),threadRef=(0,import_react69.useMemo)(()=>(0,import_core122.createReference)(thread),[thread]);(0,import_react69.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react69.useCallback)((message,file,existingDocRef)=>{let profileRefStr=profileRef?(0,import_core122.getReferenceString)(profileRef):void 0;if(!profileRefStr)return;(async()=>{let payload=[];if(message&&payload.push({contentString:message}),existingDocRef)payload.push({contentReference:(0,import_core122.createReference)(existingDocRef)});else if(file){let docRef=await medplum.createDocumentReference({data:file,contentType:file.type||"application/octet-stream",filename:file.name,additionalFields:{...thread.subject?{subject:thread.subject}:{},description:file.name}});payload.push({contentReference:(0,import_core122.createReference)(docRef)})}let communication=await medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core122.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload,partOf:[threadRef],subject:thread.subject});setCommunications([...communications,communication]),onMessageSent?.(communication)})().catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react69.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_runtime97.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core122.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled,excludeHeader,uploadEnabled,onError,attachmentSubjectRef:thread.subject,onViewInDocuments}):null}var import_core125=require("@mantine/core"),import_react70=require("react");var import_core123=require("@mantine/core"),import_core124=require("@medplum/core"),import_react_hooks34=require("@medplum/react-hooks");var ChatListItem_default={content:"ChatListItem_content",contentContainer:"ChatListItem_contentContainer",selected:"ChatListItem_selected"};var import_jsx_runtime98=require("react/jsx-runtime"),ChatListItem=props=>{let{topic,lastCommunication,isSelected,getThreadUri}=props,patientResource=(0,import_react_hooks34.useResource)(topic.subject),patientName=(0,import_core124.formatHumanName)(patientResource?.name?.[0]),lastMsg=lastCommunication?.payload?.[0]?.contentString,trimmedMsg=lastMsg?.length&&lastMsg.length>100?lastMsg.slice(0,100)+"...":lastMsg,senderName=lastCommunication?.sender?.display?`${lastCommunication?.sender?.display}: `:"",content=trimmedMsg?`${senderName} ${trimmedMsg}`:"No messages available",topicName=topic.topic?.text??content;return(0,import_jsx_runtime98.jsx)(MedplumLink,{to:getThreadUri(topic),underline:"never",children:(0,import_jsx_runtime98.jsxs)(import_core123.Group,{p:"xs",align:"center",wrap:"nowrap",className:clsx_default(ChatListItem_default.contentContainer,{[ChatListItem_default.selected]:isSelected}),children:[(0,import_jsx_runtime98.jsx)(ResourceAvatar,{value:topic.subject,radius:"xl",size:36}),(0,import_jsx_runtime98.jsxs)(import_core123.Stack,{gap:0,children:[(0,import_jsx_runtime98.jsx)(import_core123.Text,{size:"sm",fw:700,truncate:"end",children:patientName}),(0,import_jsx_runtime98.jsx)(import_core123.Text,{size:"sm",fw:400,lineClamp:2,className:ChatListItem_default.content,children:topicName}),(0,import_jsx_runtime98.jsx)(import_core123.Text,{size:"xs",style:{marginTop:2},children:lastCommunication?(0,import_core124.formatDateTime)(lastCommunication.sent):""})]})]})})};var import_jsx_runtime99=require("react/jsx-runtime"),ChatList=props=>{let{threads,selectedCommunication,getThreadUri}=props;return(0,import_jsx_runtime99.jsx)(import_core125.Stack,{gap:0,children:threads.map(thread=>{let topicCommunication=thread[0],lastCommunication=thread[1],_isSelected=selectedCommunication?.id===topicCommunication.id;return(0,import_jsx_runtime99.jsxs)(import_react70.Fragment,{children:[(0,import_jsx_runtime99.jsx)(ChatListItem,{topic:topicCommunication,lastCommunication,isSelected:_isSelected,getThreadUri}),(0,import_jsx_runtime99.jsx)(import_core125.Divider,{})]},topicCommunication.id)})})};var import_core137=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core138=require("@medplum/core"),import_react_hooks40=require("@medplum/react-hooks"),import_react74=require("react");var import_core135=require("@mantine/core"),import_core136=require("@medplum/core"),import_react_hooks39=require("@medplum/react-hooks"),import_react73=require("react");var import_core126=require("@mantine/core"),import_core127=require("@medplum/core"),import_react_hooks35=require("@medplum/react-hooks");var import_react71=require("react");var Point=class{constructor(x,y,pressure,time){__publicField(this,"x");__publicField(this,"y");__publicField(this,"pressure");__publicField(this,"time");if(isNaN(x)||isNaN(y))throw new Error(`Point is invalid: (${x}, ${y})`);this.x=+x,this.y=+y,this.pressure=pressure||0,this.time=time||Date.now()}distanceTo(start){return Math.sqrt(Math.pow(this.x-start.x,2)+Math.pow(this.y-start.y,2))}equals(other){return this.x===other.x&&this.y===other.y&&this.pressure===other.pressure&&this.time===other.time}velocityFrom(start){return this.time!==start.time?this.distanceTo(start)/(this.time-start.time):0}},Bezier=class _Bezier{constructor(startPoint,control2,control1,endPoint,startWidth,endWidth){this.startPoint=startPoint,this.control2=control2,this.control1=control1,this.endPoint=endPoint,this.startWidth=startWidth,this.endWidth=endWidth}static fromPoints(points,widths){let c2=this.calculateControlPoints(points[0],points[1],points[2]).c2,c3=this.calculateControlPoints(points[1],points[2],points[3]).c1;return new _Bezier(points[1],c2,c3,points[2],widths.start,widths.end)}static calculateControlPoints(s1,s2,s3){let dx1=s1.x-s2.x,dy1=s1.y-s2.y,dx2=s2.x-s3.x,dy2=s2.y-s3.y,m1={x:(s1.x+s2.x)/2,y:(s1.y+s2.y)/2},m2={x:(s2.x+s3.x)/2,y:(s2.y+s3.y)/2},l1=Math.sqrt(dx1*dx1+dy1*dy1),l2=Math.sqrt(dx2*dx2+dy2*dy2),dxm=m1.x-m2.x,dym=m1.y-m2.y,k=l1+l2==0?0:l2/(l1+l2),cm={x:m2.x+dxm*k,y:m2.y+dym*k},tx=s2.x-cm.x,ty=s2.y-cm.y;return{c1:new Point(m1.x+tx,m1.y+ty),c2:new Point(m2.x+tx,m2.y+ty)}}length(){let length=0,px,py;for(let i=0;i<=10;i+=1){let t=i/10,cx=this.point(t,this.startPoint.x,this.control1.x,this.control2.x,this.endPoint.x),cy=this.point(t,this.startPoint.y,this.control1.y,this.control2.y,this.endPoint.y);if(i>0){let xdiff=cx-px,ydiff=cy-py;length+=Math.sqrt(xdiff*xdiff+ydiff*ydiff)}px=cx,py=cy}return length}point(t,start,c1,c2,end){return start*(1-t)*(1-t)*(1-t)+3*c1*(1-t)*(1-t)*t+3*c2*(1-t)*t*t+end*t*t*t}},SignatureEventTarget=class{constructor(){__publicField(this,"_et");try{this._et=new EventTarget}catch{this._et=document}}addEventListener(type,listener,options){this._et.addEventListener(type,listener,options)}dispatchEvent(event){return this._et.dispatchEvent(event)}removeEventListener(type,callback,options){this._et.removeEventListener(type,callback,options)}};function throttle(fn,wait=250){let previous=0,timeout=null,result,storedContext,storedArgs,later=()=>{previous=Date.now(),timeout=null,result=fn.apply(storedContext,storedArgs),timeout||(storedContext=null,storedArgs=[])};return function(...args){let now=Date.now(),remaining=wait-(now-previous);return storedContext=this,storedArgs=args,remaining<=0||remaining>wait?(timeout&&(clearTimeout(timeout),timeout=null),previous=now,result=fn.apply(storedContext,storedArgs),timeout||(storedContext=null,storedArgs=[])):timeout||(timeout=window.setTimeout(later,remaining)),result}}var SignaturePad=class _SignaturePad extends SignatureEventTarget{constructor(canvas,options={}){super();__publicField(this,"dotSize");__publicField(this,"minWidth");__publicField(this,"maxWidth");__publicField(this,"penColor");__publicField(this,"minDistance");__publicField(this,"velocityFilterWeight");__publicField(this,"compositeOperation");__publicField(this,"backgroundColor");__publicField(this,"throttle");__publicField(this,"canvasContextOptions");__publicField(this,"_ctx");__publicField(this,"_drawingStroke",!1);__publicField(this,"_isEmpty",!0);__publicField(this,"_dataUrl");__publicField(this,"_dataUrlOptions");__publicField(this,"_lastPoints",[]);__publicField(this,"_data",[]);__publicField(this,"_lastVelocity",0);__publicField(this,"_lastWidth",0);__publicField(this,"_strokeMoveUpdate");__publicField(this,"_strokePointerId");this.canvas=canvas,this.velocityFilterWeight=options.velocityFilterWeight||.7,this.minWidth=options.minWidth||.5,this.maxWidth=options.maxWidth||2.5,this.throttle=options.throttle??16,this.minDistance=options.minDistance??5,this.dotSize=options.dotSize||0,this.penColor=options.penColor||"black",this.backgroundColor=options.backgroundColor||"rgba(0,0,0,0)",this.compositeOperation=options.compositeOperation||"source-over",this.canvasContextOptions=options.canvasContextOptions??{},this._strokeMoveUpdate=this.throttle?throttle(_SignaturePad.prototype._strokeUpdate,this.throttle):_SignaturePad.prototype._strokeUpdate,this._handleMouseDown=this._handleMouseDown.bind(this),this._handleMouseMove=this._handleMouseMove.bind(this),this._handleMouseUp=this._handleMouseUp.bind(this),this._handleTouchStart=this._handleTouchStart.bind(this),this._handleTouchMove=this._handleTouchMove.bind(this),this._handleTouchEnd=this._handleTouchEnd.bind(this),this._handlePointerDown=this._handlePointerDown.bind(this),this._handlePointerMove=this._handlePointerMove.bind(this),this._handlePointerUp=this._handlePointerUp.bind(this),this._handlePointerCancel=this._handlePointerCancel.bind(this),this._handleTouchCancel=this._handleTouchCancel.bind(this),this._ctx=canvas.getContext("2d",this.canvasContextOptions),this.clear(),this.on()}clear(){let{_ctx:ctx,canvas}=this;ctx.fillStyle=this.backgroundColor,ctx.clearRect(0,0,canvas.width,canvas.height),ctx.fillRect(0,0,canvas.width,canvas.height),this._data=[],this._reset(this._getPointGroupOptions()),this._isEmpty=!0,this._dataUrl=void 0,this._dataUrlOptions=void 0,this._strokePointerId=void 0}redraw(){let data2=this._data,dataUrl=this._dataUrl,dataUrlOptions=this._dataUrlOptions;this.clear(),dataUrl&&this.fromDataURL(dataUrl,dataUrlOptions),this.fromData(data2,{clear:!1})}fromDataURL(dataUrl,options={}){return new Promise((resolve,reject)=>{let image=new Image,ratio=options.ratio||window.devicePixelRatio||1,width=options.width||this.canvas.width/ratio,height=options.height||this.canvas.height/ratio,xOffset=options.xOffset||0,yOffset=options.yOffset||0;this._reset(this._getPointGroupOptions()),image.onload=()=>{this._ctx.drawImage(image,xOffset,yOffset,width,height),resolve()},image.onerror=error=>{reject(error)},image.crossOrigin="anonymous",image.src=dataUrl,this._isEmpty=!1,this._dataUrl=dataUrl,this._dataUrlOptions={...options}})}toDataURL(type="image/png",encoderOptions){return type==="image/svg+xml"?(typeof encoderOptions!="object"&&(encoderOptions=void 0),`data:image/svg+xml;base64,${btoa(this.toSVG(encoderOptions))}`):(typeof encoderOptions!="number"&&(encoderOptions=void 0),this.canvas.toDataURL(type,encoderOptions))}on(){this.canvas.style.touchAction="none",this.canvas.style.msTouchAction="none",this.canvas.style.userSelect="none",this.canvas.style.webkitUserSelect="none";let isIOS=/Macintosh/.test(navigator.userAgent)&&"ontouchstart"in document;window.PointerEvent&&!isIOS?this._handlePointerEvents():(this._handleMouseEvents(),"ontouchstart"in window&&this._handleTouchEvents())}off(){this.canvas.style.touchAction="auto",this.canvas.style.msTouchAction="auto",this.canvas.style.userSelect="auto",this.canvas.style.webkitUserSelect="auto",this.canvas.removeEventListener("pointerdown",this._handlePointerDown),this.canvas.removeEventListener("mousedown",this._handleMouseDown),this.canvas.removeEventListener("touchstart",this._handleTouchStart),this._removeMoveUpEventListeners()}_getListenerFunctions(){let canvasWindow=window.document===this.canvas.ownerDocument?window:this.canvas.ownerDocument.defaultView??this.canvas.ownerDocument;return{addEventListener:canvasWindow.addEventListener.bind(canvasWindow),removeEventListener:canvasWindow.removeEventListener.bind(canvasWindow)}}_removeMoveUpEventListeners(){let{removeEventListener}=this._getListenerFunctions();removeEventListener("pointermove",this._handlePointerMove),removeEventListener("pointerup",this._handlePointerUp),removeEventListener("pointercancel",this._handlePointerCancel),removeEventListener("mousemove",this._handleMouseMove),removeEventListener("mouseup",this._handleMouseUp),removeEventListener("touchmove",this._handleTouchMove),removeEventListener("touchend",this._handleTouchEnd),removeEventListener("touchcancel",this._handleTouchCancel)}isEmpty(){return this._isEmpty}fromData(pointGroups,{clear=!0}={}){clear&&this.clear(),this._fromData(pointGroups,this._drawCurve.bind(this),this._drawDot.bind(this)),this._data=this._data.concat(pointGroups)}toData(){return this._data}_isLeftButtonPressed(event,only){return only?event.buttons===1:(event.buttons&1)===1}_pointerEventToSignatureEvent(event){return{event,type:event.type,x:event.clientX,y:event.clientY,pressure:"pressure"in event?event.pressure:0}}_touchEventToSignatureEvent(event){let touch=event.changedTouches[0];return{event,type:event.type,x:touch.clientX,y:touch.clientY,pressure:touch.force}}_handleMouseDown(event){!this._isLeftButtonPressed(event,!0)||this._drawingStroke||this._strokeBegin(this._pointerEventToSignatureEvent(event))}_handleMouseMove(event){if(!this._isLeftButtonPressed(event,!0)||!this._drawingStroke){this._strokeEnd(this._pointerEventToSignatureEvent(event),!1);return}this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event))}_handleMouseUp(event){this._isLeftButtonPressed(event)||this._strokeEnd(this._pointerEventToSignatureEvent(event))}_handleTouchStart(event){event.targetTouches.length!==1||this._drawingStroke||(event.cancelable&&event.preventDefault(),this._strokeBegin(this._touchEventToSignatureEvent(event)))}_handleTouchMove(event){if(event.targetTouches.length===1){if(event.cancelable&&event.preventDefault(),!this._drawingStroke){this._strokeEnd(this._touchEventToSignatureEvent(event),!1);return}this._strokeMoveUpdate(this._touchEventToSignatureEvent(event))}}_handleTouchEnd(event){event.targetTouches.length===0&&(event.cancelable&&event.preventDefault(),this._strokeEnd(this._touchEventToSignatureEvent(event)))}_handlePointerCancel(event){this._allowPointerId(event)&&(event.preventDefault(),this._strokeEnd(this._pointerEventToSignatureEvent(event),!1))}_handleTouchCancel(event){event.cancelable&&event.preventDefault(),this._strokeEnd(this._touchEventToSignatureEvent(event),!1)}_getPointerId(event){return event.persistentDeviceId||event.pointerId}_allowPointerId(event,allowUndefined=!1){return typeof this._strokePointerId>"u"?allowUndefined:this._getPointerId(event)===this._strokePointerId}_handlePointerDown(event){this._drawingStroke||!this._isLeftButtonPressed(event)||!this._allowPointerId(event,!0)||(this._strokePointerId=this._getPointerId(event),event.preventDefault(),this._strokeBegin(this._pointerEventToSignatureEvent(event)))}_handlePointerMove(event){if(this._allowPointerId(event)){if(!this._isLeftButtonPressed(event,!0)||!this._drawingStroke){this._strokeEnd(this._pointerEventToSignatureEvent(event),!1);return}event.preventDefault(),this._strokeMoveUpdate(this._pointerEventToSignatureEvent(event))}}_handlePointerUp(event){this._isLeftButtonPressed(event)||!this._allowPointerId(event)||(event.preventDefault(),this._strokeEnd(this._pointerEventToSignatureEvent(event)))}_getPointGroupOptions(group){return{penColor:group&&"penColor"in group?group.penColor:this.penColor,dotSize:group&&"dotSize"in group?group.dotSize:this.dotSize,minWidth:group&&"minWidth"in group?group.minWidth:this.minWidth,maxWidth:group&&"maxWidth"in group?group.maxWidth:this.maxWidth,velocityFilterWeight:group&&"velocityFilterWeight"in group?group.velocityFilterWeight:this.velocityFilterWeight,compositeOperation:group&&"compositeOperation"in group?group.compositeOperation:this.compositeOperation}}_strokeBegin(event){if(!this.dispatchEvent(new CustomEvent("beginStroke",{detail:event,cancelable:!0})))return;let{addEventListener}=this._getListenerFunctions();switch(event.event.type){case"mousedown":addEventListener("mousemove",this._handleMouseMove,{passive:!1}),addEventListener("mouseup",this._handleMouseUp,{passive:!1});break;case"touchstart":addEventListener("touchmove",this._handleTouchMove,{passive:!1}),addEventListener("touchend",this._handleTouchEnd,{passive:!1}),addEventListener("touchcancel",this._handleTouchCancel,{passive:!1});break;case"pointerdown":addEventListener("pointermove",this._handlePointerMove,{passive:!1}),addEventListener("pointerup",this._handlePointerUp,{passive:!1}),addEventListener("pointercancel",this._handlePointerCancel,{passive:!1});break;default:}this._drawingStroke=!0;let pointGroupOptions=this._getPointGroupOptions(),newPointGroup={...pointGroupOptions,points:[]};this._data.push(newPointGroup),this._reset(pointGroupOptions),this._strokeUpdate(event)}_strokeUpdate(event){if(!this._drawingStroke)return;if(this._data.length===0){this._strokeBegin(event);return}this.dispatchEvent(new CustomEvent("beforeUpdateStroke",{detail:event}));let point=this._createPoint(event.x,event.y,event.pressure),lastPointGroup=this._data[this._data.length-1],lastPoints=lastPointGroup.points,lastPoint=lastPoints.length>0&&lastPoints[lastPoints.length-1],isLastPointTooClose=lastPoint?point.distanceTo(lastPoint)<=this.minDistance:!1,pointGroupOptions=this._getPointGroupOptions(lastPointGroup);if(!lastPoint||!(lastPoint&&isLastPointTooClose)){let curve=this._addPoint(point,pointGroupOptions);lastPoint?curve&&this._drawCurve(curve,pointGroupOptions):this._drawDot(point,pointGroupOptions),lastPoints.push({time:point.time,x:point.x,y:point.y,pressure:point.pressure})}this.dispatchEvent(new CustomEvent("afterUpdateStroke",{detail:event}))}_strokeEnd(event,shouldUpdate=!0){this._removeMoveUpEventListeners(),this._drawingStroke&&(shouldUpdate&&this._strokeUpdate(event),this._drawingStroke=!1,this._strokePointerId=void 0,this.dispatchEvent(new CustomEvent("endStroke",{detail:event})))}_handlePointerEvents(){this._drawingStroke=!1,this.canvas.addEventListener("pointerdown",this._handlePointerDown,{passive:!1})}_handleMouseEvents(){this._drawingStroke=!1,this.canvas.addEventListener("mousedown",this._handleMouseDown,{passive:!1})}_handleTouchEvents(){this.canvas.addEventListener("touchstart",this._handleTouchStart,{passive:!1})}_reset(options){this._lastPoints=[],this._lastVelocity=0,this._lastWidth=(options.minWidth+options.maxWidth)/2,this._ctx.fillStyle=options.penColor,this._ctx.globalCompositeOperation=options.compositeOperation}_createPoint(x,y,pressure){let rect=this.canvas.getBoundingClientRect();return new Point(x-rect.left,y-rect.top,pressure,new Date().getTime())}_addPoint(point,options){let{_lastPoints}=this;if(_lastPoints.push(point),_lastPoints.length>2){_lastPoints.length===3&&_lastPoints.unshift(_lastPoints[0]);let widths=this._calculateCurveWidths(_lastPoints[1],_lastPoints[2],options),curve=Bezier.fromPoints(_lastPoints,widths);return _lastPoints.shift(),curve}return null}_calculateCurveWidths(startPoint,endPoint,options){let velocity=options.velocityFilterWeight*endPoint.velocityFrom(startPoint)+(1-options.velocityFilterWeight)*this._lastVelocity,newWidth=this._strokeWidth(velocity,options),widths={end:newWidth,start:this._lastWidth};return this._lastVelocity=velocity,this._lastWidth=newWidth,widths}_strokeWidth(velocity,options){return Math.max(options.maxWidth/(velocity+1),options.minWidth)}_drawCurveSegment(x,y,width){let ctx=this._ctx;ctx.moveTo(x,y),ctx.arc(x,y,width,0,2*Math.PI,!1),this._isEmpty=!1}_drawCurve(curve,options){let ctx=this._ctx,widthDelta=curve.endWidth-curve.startWidth,drawSteps=Math.ceil(curve.length())*2;ctx.beginPath(),ctx.fillStyle=options.penColor;for(let i=0;i<drawSteps;i+=1){let t=i/drawSteps,tt=t*t,ttt=tt*t,u=1-t,uu=u*u,uuu=uu*u,x=uuu*curve.startPoint.x;x+=3*uu*t*curve.control1.x,x+=3*u*tt*curve.control2.x,x+=ttt*curve.endPoint.x;let y=uuu*curve.startPoint.y;y+=3*uu*t*curve.control1.y,y+=3*u*tt*curve.control2.y,y+=ttt*curve.endPoint.y;let width=Math.min(curve.startWidth+ttt*widthDelta,options.maxWidth);this._drawCurveSegment(x,y,width)}ctx.closePath(),ctx.fill()}_drawDot(point,options){let ctx=this._ctx,width=options.dotSize>0?options.dotSize:(options.minWidth+options.maxWidth)/2;ctx.beginPath(),this._drawCurveSegment(point.x,point.y,width),ctx.closePath(),ctx.fillStyle=options.penColor,ctx.fill()}_fromData(pointGroups,drawCurve,drawDot){for(let group of pointGroups){let{points}=group,pointGroupOptions=this._getPointGroupOptions(group);if(points.length>1)for(let j=0;j<points.length;j+=1){let basicPoint=points[j],point=new Point(basicPoint.x,basicPoint.y,basicPoint.pressure,basicPoint.time);j===0&&this._reset(pointGroupOptions);let curve=this._addPoint(point,pointGroupOptions);curve&&drawCurve(curve,pointGroupOptions)}else this._reset(pointGroupOptions),drawDot(points[0],pointGroupOptions)}}toSVG({includeBackgroundColor=!1,includeDataUrl=!1}={}){let pointGroups=this._data,ratio=Math.max(window.devicePixelRatio||1,1),minX=0,minY=0,maxX=this.canvas.width/ratio,maxY=this.canvas.height/ratio,svg=document.createElementNS("http://www.w3.org/2000/svg","svg");if(svg.setAttribute("xmlns","http://www.w3.org/2000/svg"),svg.setAttribute("xmlns:xlink","http://www.w3.org/1999/xlink"),svg.setAttribute("viewBox",`${minX} ${minY} ${maxX} ${maxY}`),svg.setAttribute("width",maxX.toString()),svg.setAttribute("height",maxY.toString()),includeBackgroundColor&&this.backgroundColor){let rect=document.createElement("rect");rect.setAttribute("width","100%"),rect.setAttribute("height","100%"),rect.setAttribute("fill",this.backgroundColor),svg.appendChild(rect)}if(includeDataUrl&&this._dataUrl){let ratio2=this._dataUrlOptions?.ratio||window.devicePixelRatio||1,width=this._dataUrlOptions?.width||this.canvas.width/ratio2,height=this._dataUrlOptions?.height||this.canvas.height/ratio2,xOffset=this._dataUrlOptions?.xOffset||0,yOffset=this._dataUrlOptions?.yOffset||0,image=document.createElement("image");image.setAttribute("x",xOffset.toString()),image.setAttribute("y",yOffset.toString()),image.setAttribute("width",width.toString()),image.setAttribute("height",height.toString()),image.setAttribute("preserveAspectRatio","none"),image.setAttribute("href",this._dataUrl),svg.appendChild(image)}return this._fromData(pointGroups,(curve,{penColor})=>{let path=document.createElement("path");if(!isNaN(curve.control1.x)&&!isNaN(curve.control1.y)&&!isNaN(curve.control2.x)&&!isNaN(curve.control2.y)){let attr=`M ${curve.startPoint.x.toFixed(3)},${curve.startPoint.y.toFixed(3)} C ${curve.control1.x.toFixed(3)},${curve.control1.y.toFixed(3)} ${curve.control2.x.toFixed(3)},${curve.control2.y.toFixed(3)} ${curve.endPoint.x.toFixed(3)},${curve.endPoint.y.toFixed(3)}`;path.setAttribute("d",attr),path.setAttribute("stroke-width",(curve.endWidth*2.25).toFixed(3)),path.setAttribute("stroke",penColor),path.setAttribute("fill","none"),path.setAttribute("stroke-linecap","round"),svg.appendChild(path)}},(point,{penColor,dotSize,minWidth,maxWidth})=>{let circle=document.createElement("circle"),size=dotSize>0?dotSize:(minWidth+maxWidth)/2;circle.setAttribute("r",size.toString()),circle.setAttribute("cx",point.x.toString()),circle.setAttribute("cy",point.y.toString()),circle.setAttribute("fill",penColor),svg.appendChild(circle)}),svg.outerHTML}};var import_jsx_runtime100=require("react/jsx-runtime");function SignatureInput(props){let medplum=(0,import_react_hooks35.useMedplum)(),{width=500,height=200,defaultValue:defaultValue2,who,onChange,...rest}=props,canvasRef=(0,import_react71.useRef)(null),signaturePadRef=(0,import_react71.useRef)(null),onChangeRef=(0,import_react71.useRef)(onChange);return(0,import_react71.useLayoutEffect)(()=>{onChangeRef.current=onChange}),(0,import_react71.useEffect)(()=>{function handleEndStroke(){onChangeRef.current?.({type:[{system:import_core127.HTTP_HL7_ORG+"/fhir/signature-type",code:"ProofOfOrigin",display:"Proof of Origin"}],when:new Date().toISOString(),who:who??(0,import_core127.createReference)(medplum.getProfile()),data:signaturePadRef.current?.toDataURL().split(",")[1]})}if(canvasRef.current){let signaturePad=new SignaturePad(canvasRef.current);defaultValue2?.data&&signaturePad.fromDataURL(defaultValue2.data).catch(console.error),signaturePad.addEventListener("endStroke",handleEndStroke),signaturePadRef.current=signaturePad}return()=>{signaturePadRef.current&&signaturePadRef.current.removeEventListener("beginStroke",handleEndStroke)}},[medplum,defaultValue2,who]),(0,import_jsx_runtime100.jsxs)(import_core126.Paper,{withBorder:!0,p:0,w:width,h:height,pos:"relative",...rest,children:[(0,import_jsx_runtime100.jsx)("canvas",{ref:canvasRef,width,height,"aria-label":"Signature input area"}),(0,import_jsx_runtime100.jsx)(import_core126.Button,{onClick:()=>{signaturePadRef.current&&signaturePadRef.current.clear(),onChangeRef.current?.(void 0)},"aria-label":"Clear signature",pos:"absolute",top:0,right:0,size:"xs",leftSection:(0,import_jsx_runtime100.jsx)(IconTrash,{size:16}),variant:"subtle",color:"gray",children:"Clear"})]})}var import_core133=require("@mantine/core"),import_react_hooks38=require("@medplum/react-hooks");var import_core128=require("@mantine/core");var import_jsx_runtime101=require("react/jsx-runtime");function QuestionnaireFormGroup(props){let newContext=[...props.context,props.responseItem];return(0,import_jsx_runtime101.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime101.jsx)(import_core128.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime101.jsx)(QuestionnaireFormItemArray,{formState:props.formState,context:newContext,items:props.item.item??[],responseItems:props.responseItem.item??[]})]},props.item.linkId)}var import_core129=require("@mantine/core"),import_core130=require("@medplum/core"),import_react_hooks36=require("@medplum/react-hooks"),import_react72=require("react");var import_jsx_runtime102=require("react/jsx-runtime"),MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS=30,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS=50;function QuestionnaireFormItem(props){let formState=props.formState,item=props.item,response=props.responseItem;function onChangeAnswer(newResponseAnswer){if(formState&&props.context)if(item.repeats&&props.index!==void 0&&item.type!==import_react_hooks36.QuestionnaireItemType.choice&&item.type!==import_react_hooks36.QuestionnaireItemType.openChoice){let updatedAnswers=[...response.answer||[]];newResponseAnswer.length===0?updatedAnswers.splice(props.index,1):updatedAnswers[props.index]=newResponseAnswer[0],formState.onChangeAnswer(props.context,props.item,updatedAnswers)}else formState.onChangeAnswer(props.context,props.item,newResponseAnswer)}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let inputId=item.repeats&&props.index!==void 0&&item.type!==import_react_hooks36.QuestionnaireItemType.choice&&item.type!==import_react_hooks36.QuestionnaireItemType.openChoice?`${name}-${props.index}`:name,initial;item.initial&&item.initial.length>0?initial=item.initial[0]:item.answerOption&&item.answerOption.length>0&&(initial=item.answerOption.find(option=>option.initialSelected));let defaultValue2=getCurrentAnswer(response,props.index)??(0,import_react_hooks36.getItemInitialValue)(initial),validationError=(0,import_core130.getExtension)(response,`${import_core130.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-validationError`),formComponent=null;switch(type){case import_react_hooks36.QuestionnaireItemType.display:formComponent=(0,import_jsx_runtime102.jsx)("p",{children:props.item.text},props.item.linkId);break;case import_react_hooks36.QuestionnaireItemType.boolean:formComponent=(0,import_jsx_runtime102.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:inputId,children:(0,import_jsx_runtime102.jsx)(import_core129.Checkbox,{id:inputId,name,required:props.required??item.required,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueBoolean:e.currentTarget.checked}])})},props.item.linkId);break;case import_react_hooks36.QuestionnaireItemType.decimal:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{type:"number",step:"any",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer(e.currentTarget.value===""?[]:[{valueDecimal:e.currentTarget.valueAsNumber}])});break;case import_react_hooks36.QuestionnaireItemType.integer:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{type:"number",step:1,id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer(e.currentTarget.value===""?[]:[{valueInteger:e.currentTarget.valueAsNumber}])});break;case import_react_hooks36.QuestionnaireItemType.date:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{type:"date",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueDate:e.currentTarget.value}])});break;case import_react_hooks36.QuestionnaireItemType.dateTime:formComponent=(0,import_jsx_runtime102.jsx)(DateTimeInput,{name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueDateTime:newValue}])});break;case import_react_hooks36.QuestionnaireItemType.time:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{type:"time",id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer([{valueTime:e.currentTarget.value}])});break;case import_react_hooks36.QuestionnaireItemType.string:case import_react_hooks36.QuestionnaireItemType.url:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer(value===""?[]:[{valueString:value}])}});break;case import_react_hooks36.QuestionnaireItemType.text:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.Textarea,{id:inputId,name,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:e=>{let value=e.currentTarget.value;onChangeAnswer(value===""?[]:[{valueString:value}])}});break;case import_react_hooks36.QuestionnaireItemType.attachment:formComponent=(0,import_jsx_runtime102.jsx)(import_core129.Group,{py:4,children:(0,import_jsx_runtime102.jsx)(AttachmentInput,{path:"",name:inputId,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueAttachment:newValue}])})});break;case import_react_hooks36.QuestionnaireItemType.reference:formComponent=(0,import_jsx_runtime102.jsx)(ReferenceInput,{name:inputId,required:props.required??item.required,targetTypes:(0,import_react_hooks36.getQuestionnaireItemReferenceTargetTypes)(item),searchCriteria:(0,import_react_hooks36.getQuestionnaireItemReferenceFilter)(item,formState?.subject,formState?.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueReference:newValue}])});break;case import_react_hooks36.QuestionnaireItemType.quantity:formComponent=(0,import_jsx_runtime102.jsx)(QuantityInput,{path:"",name:inputId,required:props.required??item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer([{valueQuantity:newValue}]),disableWheel:!0});break;case import_react_hooks36.QuestionnaireItemType.choice:case import_react_hooks36.QuestionnaireItemType.openChoice:{let{widget,multiselect}=resolveChoiceControl(item),sharedProps={name:inputId,item,required:props.required??item.required,initial,response,multiselect,onChangeAnswer};widget==="check-box"?formComponent=(0,import_jsx_runtime102.jsx)(QuestionnaireCheckboxInput,{...sharedProps}):widget==="drop-down"?formComponent=(0,import_jsx_runtime102.jsx)(QuestionnaireDropdownInput,{...sharedProps}):formComponent=(0,import_jsx_runtime102.jsx)(QuestionnaireRadioButtonInput,{...sharedProps})}break;default:return null}return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[formComponent,validationError?.valueString&&(0,import_jsx_runtime102.jsx)(import_core129.Text,{c:"red",size:"lg",mt:4,children:validationError.valueString})]})}function QuestionnaireDropdownInput(props){let{name,item,required,initial,onChangeAnswer,response,multiselect}=props;if(!item.answerOption?.length&&!item.answerValueSet)return(0,import_jsx_runtime102.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_react_hooks36.getItemInitialValue)(initial),defaultValue2=getCurrentAnswer(response)??initialValue,currentAnswer=getCurrentMultiSelectAnswer(response),isMultiSelect=item.repeats||multiselect;if(item.answerValueSet)return(0,import_jsx_runtime102.jsx)(ValueSetAutocomplete,{name,placeholder:"Select items",binding:item.answerValueSet,maxValues:isMultiSelect?void 0:1,required,onChange:values=>{isMultiSelect?values.length===0?onChangeAnswer([{}]):onChangeAnswer(values.map(coding=>({valueCoding:coding}))):onChangeAnswer([{valueCoding:values[0]}])},defaultValue:defaultValue2?.value});if(isMultiSelect){let{propertyName,data:data2}=formatSelectData(item);return(0,import_jsx_runtime102.jsx)(import_core129.MultiSelect,{data:data2,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[(0,import_core130.typedValueToString)(initialValue)],required,onChange:selected=>{if(selected.length===0)onChangeAnswer([{}]);else{let values=(0,import_react_hooks36.getNewMultiSelectValues)(selected,propertyName,item);onChangeAnswer(values)}}})}else{let data2=[""];if(item.answerOption)for(let option of item.answerOption){let optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);data2.push((0,import_core130.typedValueToString)(optionValue))}return(0,import_jsx_runtime102.jsx)(import_core129.NativeSelect,{id:name,name,required,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){onChangeAnswer([{}]);return}let option=item.answerOption[index-1],optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option),propertyName="value"+(0,import_core130.capitalize)(optionValue.type);onChangeAnswer([{[propertyName]:optionValue.value}])},defaultValue:(0,import_core130.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}}function getValueSetOptions(valueSetUrl,medplum){return valueSetUrl?medplum.valueSetExpand({url:valueSetUrl,count:MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS+1}).then(valueSet=>valueSet.expansion?.contains??[]):Promise.resolve([])}function useValueSetOptions(valueSetUrl){let medplum=(0,import_react_hooks36.useMedplum)(),[valueSetOptions,setValueSetOptions]=(0,import_react72.useState)([]),[isLoading,setIsLoading]=(0,import_react72.useState)(!1);return(0,import_react72.useEffect)(()=>{async function loadValueSet(){if(valueSetUrl){setIsLoading(!0);try{let options=await getValueSetOptions(valueSetUrl,medplum);setValueSetOptions(options)}catch(err){console.error("Error loading value set:",err)}finally{setIsLoading(!1)}}}loadValueSet().catch(console.error)},[valueSetUrl,medplum]),[valueSetOptions,isLoading]}function getOptionsFromValueSet(valueSetOptions,name){return valueSetOptions.map((option,i)=>{let optionName=`${name}-valueset-${i}`,optionValue={type:"Coding",value:{system:option.system,code:option.code,display:option.display}};return[optionName,optionValue]})}function QuestionnaireRadioButtonInput(props){let{name,item,required,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core130.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_react_hooks36.getItemInitialValue)(initial),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),options=[],defaultValue2;if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);return optionValue?.value?(initialValue&&(0,import_core130.stringify)(optionValue)===(0,import_core130.stringify)(initialValue)&&(defaultValue2=optionName),[optionName,optionValue]):null}).filter(option=>option!==null);options.push(...mappedOptions)}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);if(isLoading)return(0,import_jsx_runtime102.jsx)(import_core129.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime102.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS);return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[(0,import_jsx_runtime102.jsx)(import_core129.Radio.Group,{name,value:answerLinkId??defaultValue2,required,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core130.capitalize)(optionValue.type);onChangeAnswer([{[propertyName]:optionValue.value}])}},children:limitedOptions.map(([optionName,optionValue])=>(0,import_jsx_runtime102.jsx)(import_core129.Radio,{id:optionName,value:optionName,py:4,required,label:(0,import_jsx_runtime102.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime102.jsxs)(import_core129.Text,{size:"sm",c:"dimmed",mt:"xs",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function QuestionnaireCheckboxInput(props){let{name,item,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core130.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),[valueSetOptions,isLoading]=useValueSetOptions(item.answerValueSet),initialSelectedValues=item.answerValueSet?(response?.answer?.map(a=>a.valueCoding)||[]).filter(c=>c!==void 0):getCurrentMultiSelectAnswer(response),[selectedValues,setSelectedValues]=(0,import_react72.useState)(initialSelectedValues),options=[];if(item.answerValueSet)options.push(...getOptionsFromValueSet(valueSetOptions,name));else if(item.answerOption){let mappedOptions=item.answerOption.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS).map((option,i)=>{let optionName=`${name}-option-${i}`,optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option);return optionValue?.value?[optionName,optionValue]:null}).filter(option=>option!==null);options.push(...mappedOptions)}if(isLoading)return(0,import_jsx_runtime102.jsx)(import_core129.Text,{children:"Loading options..."});if(options.length===0)return(0,import_jsx_runtime102.jsx)(NoAnswerDisplay,{});let limitedOptions=options.slice(0,MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS),handleCheckboxChange=(optionValue,selected)=>{if(item.answerValueSet){let currentCodings=selectedValues,newCodings;selected?newCodings=[...currentCodings,optionValue.value]:newCodings=currentCodings.filter(c=>!(0,import_core130.deepEquals)(c,optionValue.value)),setSelectedValues(newCodings),newCodings.length===0?onChangeAnswer([{}]):onChangeAnswer(newCodings.map(coding=>({valueCoding:coding})))}else{let currentValues=selectedValues,optionValueStr=(0,import_core130.typedValueToString)(optionValue),newValues;if(selected?newValues=[...currentValues,optionValueStr]:newValues=currentValues.filter(v=>v!==optionValueStr),setSelectedValues(newValues),newValues.length===0)onChangeAnswer([{}]);else{let values=(0,import_react_hooks36.getNewMultiSelectValues)(newValues,"value"+(0,import_core130.capitalize)(optionValue.type),item);onChangeAnswer(values)}}};return(0,import_jsx_runtime102.jsxs)(import_core129.Group,{style:{flexDirection:"column",alignItems:"flex-start"},children:[limitedOptions.map(([optionName,optionValue])=>{let optionValueStr=(0,import_core130.typedValueToString)(optionValue),isChecked=item.answerValueSet?selectedValues.some(coding=>(0,import_core130.deepEquals)(coding,optionValue.value)):selectedValues.includes(optionValueStr);return(0,import_jsx_runtime102.jsx)(import_core129.Checkbox,{id:optionName,label:(0,import_jsx_runtime102.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value}),checked:isChecked,onChange:event=>handleCheckboxChange(optionValue,event.currentTarget.checked)},optionName)}),(item.answerValueSet&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS||item.answerOption&&options.length>MAX_DISPLAYED_CHECKBOX_RADIO_EXPLICITOPTION_OPTIONS)&&(0,import_jsx_runtime102.jsxs)(import_core129.Text,{size:"sm",c:"dimmed",children:["Showing first ",MAX_DISPLAYED_CHECKBOX_RADIO_VALUE_SET_OPTIONS," options"]})]})}function NoAnswerDisplay(){return(0,import_jsx_runtime102.jsx)(import_core129.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getCurrentAnswer(response,index=0){return(0,import_react_hooks36.getItemAnswerOptionValue)(response?.answer?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response?.answer;return results?results.map(a=>(0,import_react_hooks36.getItemAnswerOptionValue)(a)).map(type=>(0,import_core130.formatCoding)(type?.value)||type?.value).filter(Boolean):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core130.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}var choiceTypes=["drop-down","radio-button","check-box"];function resolveChoiceControl(item){let widget="radio-button",multiselect=!1;item.answerValueSet&&(widget="drop-down");for(let ext of item.extension??[]){if(ext.url!==import_react_hooks36.QUESTIONNAIRE_ITEM_CONTROL_URL)continue;let code=ext.valueCodeableConcept?.coding?.[0]?.code;choiceTypes.includes(code)&&(widget=code),code==="multi-select"&&(multiselect=!0)}return widget==="radio-button"&&multiselect&&(widget="check-box"),{widget,multiselect}}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(option),propertyName="value"+(0,import_core130.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(answerOption=>{let answerOptionValue=(0,import_react_hooks36.getItemAnswerOptionValue)(answerOption),answerOptionValueStr=(0,import_core130.typedValueToString)(answerOptionValue);return{value:answerOptionValueStr,label:answerOptionValueStr}});return{propertyName,data:data2}}var import_core131=require("@mantine/core");var import_jsx_runtime103=require("react/jsx-runtime");function QuestionnaireFormRepeatableGroup(props){return(0,import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment,{children:[props.responseItems.map(response=>(0,import_jsx_runtime103.jsx)(QuestionnaireFormGroup,{formState:props.formState,context:props.context,item:props.item,responseItem:response},`group-${response.id}`)),(0,import_jsx_runtime103.jsx)(import_core131.Anchor,{onClick:()=>props.formState.onAddGroup(props.context,props.item),children:`Add Group: ${props.item.text}`})]})}var import_core132=require("@mantine/core"),import_react_hooks37=require("@medplum/react-hooks");var import_jsx_runtime104=require("react/jsx-runtime");function QuestionnaireFormRepeatableItem(props){let{formState,context,item,responseItem}=props,isChoiceType=item.type===import_react_hooks37.QuestionnaireItemType.choice||item.type===import_react_hooks37.QuestionnaireItemType.openChoice,showAddButton=!isChoiceType,answers=!isChoiceType&&responseItem.answer&&responseItem.answer.length>0?responseItem.answer:[{}];return(0,import_jsx_runtime104.jsxs)(FormSection,{title:props.item.text,withAsterisk:props.item.required,children:[(0,import_jsx_runtime104.jsx)(import_core132.Stack,{gap:"xs",children:answers?.map((_,index)=>(0,import_jsx_runtime104.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem,index},`${item.linkId}-${index}`))}),showAddButton&&(0,import_jsx_runtime104.jsx)(import_core132.Anchor,{onClick:()=>formState.onAddAnswer(context,item),children:"Add Item"})]},props.item.linkId)}var import_jsx_runtime105=require("react/jsx-runtime");function QuestionnaireFormItemArray(props){let{formState,context,items,responseItems}=props;return(0,import_jsx_runtime105.jsx)(import_core133.Stack,{children:items.map((item,index)=>{if(!(0,import_react_hooks38.isQuestionEnabled)(item,formState.questionnaireResponse))return null;if(item.type===import_react_hooks38.QuestionnaireItemType.display)return(0,import_jsx_runtime105.jsx)("p",{children:item.text},`display-${item.id}-${index}`);let filteredResponseItems=responseItems.filter(responseItem=>responseItem.linkId===item.linkId);return item.type===import_react_hooks38.QuestionnaireItemType.group&&item.repeats?(0,import_jsx_runtime105.jsx)(QuestionnaireFormRepeatableGroup,{formState,context,item,responseItems:filteredResponseItems},`repeating-group-${item.id}-${index}`):item.type===import_react_hooks38.QuestionnaireItemType.group?(0,import_jsx_runtime105.jsx)(QuestionnaireFormGroup,{formState,context,item,responseItem:filteredResponseItems[0]},`group-${item.id}-${index}`):item.type===import_react_hooks38.QuestionnaireItemType.boolean?(0,import_jsx_runtime105.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem:filteredResponseItems[0],index:0},`boolean-item-${item.id}-${index}`):item.repeats?(0,import_jsx_runtime105.jsx)(QuestionnaireFormRepeatableItem,{formState,context,item,responseItem:filteredResponseItems[0]},`repeating-item-${item.id}-${index}`):(0,import_jsx_runtime105.jsx)(FormSection,{htmlFor:item.linkId,title:item.text,withAsterisk:item.required,children:(0,import_jsx_runtime105.jsx)(QuestionnaireFormItem,{formState,context,item,responseItem:filteredResponseItems[0],index:0})},`repeating-item-${item.id}-${index}`)})})}var import_core134=require("@mantine/core");var import_jsx_runtime106=require("react/jsx-runtime");function QuestionnaireFormStepper(props){let{formState,submitButtonText,excludeButtons,children}=props,pages=formState.pages,activePage=formState.activePage,showBackButton=activePage>0,showNextButton=activePage<pages.length-1,showSubmitButton=activePage===pages.length-1;return(0,import_jsx_runtime106.jsxs)(import_jsx_runtime106.Fragment,{children:[(0,import_jsx_runtime106.jsx)(import_core134.Stepper,{active:activePage,allowNextStepsSelect:!1,p:6,children:pages.map((page,index)=>(0,import_jsx_runtime106.jsx)(import_core134.Stepper.Step,{label:page.title,children:index===activePage&&children},page.linkId))}),!excludeButtons&&(0,import_jsx_runtime106.jsxs)(import_core134.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime106.jsx)(import_core134.Button,{onClick:formState.onPrevPage,children:"Back"}),showNextButton&&(0,import_jsx_runtime106.jsx)(import_core134.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&formState.onNextPage()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime106.jsx)(SubmitButton,{children:submitButtonText??"Submit"})]})]})}var import_jsx_runtime107=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=(0,import_react_hooks39.useMedplum)(),[signatureRequiredSubmitted,setSignatureRequiredSubmitted]=(0,import_react73.useState)(!1),propsRef=(0,import_react73.useRef)(props),pendingChangeRef=(0,import_react73.useRef)(void 0);(0,import_react73.useLayoutEffect)(()=>{propsRef.current=props});let onFormChange=(0,import_react73.useCallback)(response=>{pendingChangeRef.current=response},[]),formState=(0,import_react_hooks39.useQuestionnaireForm)({questionnaire:props.questionnaire,defaultValue:props.questionnaireResponse,subject:props.subject,encounter:props.encounter,source:props.source,disablePagination:props.disablePagination,onChange:onFormChange}),formStateRef=(0,import_react73.useRef)(formState);(0,import_react73.useLayoutEffect)(()=>{formStateRef.current=formState}),(0,import_react73.useEffect)(()=>{let pendingChange=pendingChangeRef.current;pendingChange&&(pendingChangeRef.current=void 0,setSignatureRequiredSubmitted(!1),propsRef.current.onChange?.(pendingChange))});let isSignatureRequired=(0,import_react73.useMemo)(()=>formState.loading?!1:!!(0,import_core136.getExtension)(formState.questionnaire,import_react_hooks39.QUESTIONNAIRE_SIGNATURE_REQUIRED_URL),[formState]),hasSignature=(0,import_react73.useMemo)(()=>formState.loading?!1:!!formState.questionnaireResponse.extension?.find(ext=>ext.url===import_react_hooks39.QUESTIONNAIRE_SIGNATURE_RESPONSE_URL),[formState]),handleSubmit=(0,import_react73.useCallback)(()=>{let formState2=formStateRef.current;if(formState2.loading)return;let onSubmit=propsRef.current.onSubmit;if(!onSubmit)return;if(isSignatureRequired&&!hasSignature){setSignatureRequiredSubmitted(!0);return}let questionnaire2=formState2.questionnaire,response=formState2.questionnaireResponse,subject=propsRef.current.subject,source=propsRef.current.source;if(!source){let profile=medplum.getProfile();profile&&(source=(0,import_core136.createReference)(profile))}onSubmit({...response,questionnaire:questionnaire2.url??(0,import_core136.getReferenceString)(questionnaire2),subject,source,authored:new Date().toISOString(),status:"completed"})},[medplum,isSignatureRequired,hasSignature]);return formState.loading?null:(0,import_jsx_runtime107.jsxs)(Form,{testid:"questionnaire-form",onSubmit:handleSubmit,children:[formState.questionnaire.title&&(0,import_jsx_runtime107.jsx)(import_core135.Title,{children:formState.questionnaire.title}),formState.pagination?(0,import_jsx_runtime107.jsx)(QuestionnaireFormStepper,{formState,submitButtonText:props.submitButtonText,excludeButtons:props.excludeButtons,children:(0,import_jsx_runtime107.jsx)(QuestionnaireFormItemArray,{formState,context:[],items:formState.items,responseItems:formState.responseItems})}):(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsx)(QuestionnaireFormItemArray,{formState,context:[],items:formState.items,responseItems:formState.responseItems}),isSignatureRequired&&(0,import_jsx_runtime107.jsxs)(import_core135.Stack,{mt:"md",gap:0,children:[(0,import_jsx_runtime107.jsx)(import_core135.Text,{size:"sm",fw:500,children:"Signature"}),(0,import_jsx_runtime107.jsx)(SignatureInput,{onChange:formState.onChangeSignature}),!hasSignature&&signatureRequiredSubmitted&&(0,import_jsx_runtime107.jsx)(import_core135.Text,{c:"red",size:"sm",children:"Signature is required."})]}),!props.excludeButtons&&(0,import_jsx_runtime107.jsx)(import_core135.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:(0,import_jsx_runtime107.jsx)(SubmitButton,{children:props.submitButtonText??"Submit"})})]})]})}var import_jsx_runtime108=require("react/jsx-runtime"),NewTopicDialog=props=>{let{subject,opened,onClose,onSubmit,allowPatientSelection=!1}=props,medplum=(0,import_react_hooks40.useMedplum)(),profile=(0,import_react_hooks40.useMedplumProfile)(),profileRef=(0,import_react74.useMemo)(()=>profile?(0,import_core138.createReference)(profile):void 0,[profile]),[topic,setTopic]=(0,import_react74.useState)(""),[practitioners,setPractitioners]=(0,import_react74.useState)(profile?.resourceType==="Practitioner"?[(0,import_core138.createReference)(profile)]:[]),[patient,setPatient]=(0,import_react74.useState)(subject?(0,import_core138.createReference)(subject):void 0),initialResponse=(0,import_react74.useMemo)(()=>{if(profile?.resourceType==="Practitioner")return{resourceType:"QuestionnaireResponse",status:"in-progress",item:[{linkId:"q1",answer:[{valueReference:(0,import_core138.createReference)(profile)}]}]}},[profile]);return(0,import_jsx_runtime108.jsx)(import_core137.Modal,{opened,onClose,title:"New Message",size:"md",children:(0,import_jsx_runtime108.jsxs)(import_core137.Stack,{gap:"xl",children:[(0,import_jsx_runtime108.jsxs)(import_core137.Stack,{gap:0,children:[(0,import_jsx_runtime108.jsx)(import_core137.Text,{fw:500,children:"Patient"}),allowPatientSelection&&(0,import_jsx_runtime108.jsx)(import_core137.Text,{c:"dimmed",children:"Select a patient"}),(0,import_jsx_runtime108.jsx)(ResourceInput,{resourceType:"Patient",name:"patient",required:!0,defaultValue:patient,disabled:!allowPatientSelection&&!!patient,onChange:value=>{setPatient(value?(0,import_core138.createReference)(value):void 0)}})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Stack,{gap:0,children:[(0,import_jsx_runtime108.jsx)(import_core137.Text,{fw:500,children:"Practitioner (optional)"}),(0,import_jsx_runtime108.jsx)(import_core137.Text,{c:"dimmed",children:"Select one or more practitioners"}),(0,import_jsx_runtime108.jsx)(QuestionnaireForm,{questionnaire,questionnaireResponse:initialResponse,excludeButtons:!0,onChange:value=>{let references=value.item?.[0].answer?.map(item=>item.valueReference).filter(ref=>ref!==void 0)??[];setPractitioners(references)}})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Stack,{gap:0,children:[(0,import_jsx_runtime108.jsx)(import_core137.Text,{fw:500,children:"Topic (optional)"}),(0,import_jsx_runtime108.jsx)(import_core137.Text,{c:"dimmed",children:"Enter a topic for the message"}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{placeholder:"Enter your topic",value:topic,onChange:e=>setTopic(e.target.value)})]}),(0,import_jsx_runtime108.jsx)(import_core137.Button,{onClick:async()=>{if(!patient){(0,import_notifications6.showNotification)({title:"Error",message:"Please select a patient",color:"red"});return}let communication={resourceType:"Communication",status:"in-progress",subject:patient,sender:profileRef,recipient:[patient,...practitioners.map(practitioner=>({reference:practitioner.reference}))],topic:{text:topic}};try{let createdCommunication=await medplum.createResource(communication);onSubmit?.(createdCommunication),onClose()}catch(error){(0,import_notifications6.showNotification)({title:"Error",message:(0,import_core138.normalizeErrorString)(error),color:"red"})}},children:"Next"})]})})},questionnaire={resourceType:"Questionnaire",status:"active",item:[{linkId:"q1",type:"reference",repeats:!0,extension:[{url:`${import_core138.HTTP_HL7_ORG}/fhir/StructureDefinition/questionnaire-referenceResource`,valueCodeableConcept:{coding:[{system:`${import_core138.HTTP_HL7_ORG}/fhir/fhir-types`,display:"Practitioner",code:"Practitioner"}]}}]}]};var import_core139=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_notifications7=require("@mantine/notifications"),import_core140=require("@medplum/core"),import_react_hooks41=require("@medplum/react-hooks");var import_react75=require("react");var ParticipantFilter_default={participantItem:"ParticipantFilter_participantItem"};var import_jsx_runtime109=require("react/jsx-runtime");function ParticipantFilter(props){let{selectedParticipants,onFilterChange}=props,[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),[searchQuery,setSearchQuery]=(0,import_react75.useState)(""),[searchResults,setSearchResults]=(0,import_react75.useState)([]),[isSearching,setIsSearching]=(0,import_react75.useState)(!1),medplum=(0,import_react_hooks41.useMedplum)(),profile=(0,import_react_hooks41.useMedplumProfile)(),currentUserParticipant=(0,import_react75.useMemo)(()=>{if(profile)return(0,import_core140.createReference)(profile)},[profile]),additionalParticipants=(0,import_react75.useMemo)(()=>{let currentUserRef=currentUserParticipant?.reference;return selectedParticipants.filter(p=>p.reference!==currentUserRef)},[selectedParticipants,currentUserParticipant]),debouncedSearch=(0,import_hooks5.useDebouncedCallback)(async query=>{if(!query.trim()){setSearchResults([]);return}setIsSearching(!0);try{let bundle=await medplum.search("Patient",{_type:"Patient,Practitioner",name:query,_count:"10"}),currentUserRef=currentUserParticipant?.reference,results=(bundle.entry??[]).map(entry=>entry.resource).filter(resource=>{if(!resource)return!1;let refString=(0,import_core140.getReferenceString)(resource);return!!refString&&refString!==currentUserRef}).map(resource=>(0,import_core140.createReference)(resource));setSearchResults(results)}catch(error){(0,import_notifications7.showNotification)({title:"Error",message:(0,import_core140.normalizeErrorString)(error),color:"red"}),setSearchResults([])}finally{setIsSearching(!1)}},300);(0,import_react75.useEffect)(()=>(debouncedSearch(searchQuery),debouncedSearch.cancel),[searchQuery,debouncedSearch]);let isSelected=participant=>selectedParticipants.some(p=>p.reference===participant.reference),toggleParticipant=participant=>{let newParticipants=isSelected(participant)?selectedParticipants.filter(p=>p.reference!==participant.reference):[...selectedParticipants,participant];onFilterChange(newParticipants)},removeParticipant=participant=>{let newParticipants=selectedParticipants.filter(p=>p.reference!==participant.reference);onFilterChange(newParticipants)},displayParticipants=(0,import_react75.useMemo)(()=>{let result=[];for(let p of additionalParticipants)result.some(r2=>r2.reference===p.reference)||result.push(p);if(searchQuery.trim()&&searchResults.length>0)for(let p of searchResults)currentUserParticipant?.reference!==p.reference&&(result.some(r2=>r2.reference===p.reference)||result.push(p));return result},[additionalParticipants,searchQuery,searchResults,currentUserParticipant]),hasActiveFilter=selectedParticipants.length>0;return(0,import_jsx_runtime109.jsxs)(import_core139.Popover,{opened,onChange:o=>!o&&close(),position:"bottom-start",width:360,shadow:"md",radius:"md",withinPortal:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.Popover.Target,{children:(0,import_jsx_runtime109.jsx)(import_core139.Tooltip,{label:"Message Participants",position:"bottom",openDelay:500,disabled:opened,children:(0,import_jsx_runtime109.jsx)(import_core139.Indicator,{disabled:!hasActiveFilter,color:"blue",size:8,offset:4,children:(0,import_jsx_runtime109.jsx)(import_core139.ActionIcon,{variant:"transparent",onClick:opened?close:open,radius:"xl",size:32,className:"outline-icon-button","data-opened":opened||void 0,children:(0,import_jsx_runtime109.jsx)(IconUsers,{size:16})})})})}),(0,import_jsx_runtime109.jsx)(import_core139.Popover.Dropdown,{p:"md",children:(0,import_jsx_runtime109.jsxs)(import_core139.Stack,{gap:"md",children:[(0,import_jsx_runtime109.jsx)(import_core139.Text,{size:"xs",c:"dimmed",fw:500,children:"Message Participants"}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{placeholder:"Search for a Patient or Practitioner...",value:searchQuery,autoFocus:!0,onChange:e=>setSearchQuery(e.target.value),rightSection:searchQuery?(0,import_jsx_runtime109.jsx)(import_core139.CloseButton,{size:"sm",onClick:()=>setSearchQuery("")}):null}),(0,import_jsx_runtime109.jsxs)(import_core139.Stack,{gap:"xs",mah:250,style:{overflowY:"auto"},children:[currentUserParticipant&&(0,import_jsx_runtime109.jsx)(ParticipantItem,{participant:currentUserParticipant,isSelected:isSelected(currentUserParticipant),isCurrentUser:!0,onToggle:()=>toggleParticipant(currentUserParticipant)}),displayParticipants.map(participant=>(0,import_jsx_runtime109.jsx)(ParticipantItem,{participant,isSelected:isSelected(participant),isCurrentUser:!1,onToggle:()=>toggleParticipant(participant),onRemove:isSelected(participant)?()=>removeParticipant(participant):void 0},participant.reference)),isSearching&&(0,import_jsx_runtime109.jsx)(import_core139.Text,{size:"sm",c:"dimmed",ta:"center",children:"Searching..."}),searchQuery.trim()&&!isSearching&&searchResults.length===0&&(0,import_jsx_runtime109.jsx)(import_core139.Text,{size:"sm",c:"dimmed",ta:"center",children:"No results found"})]})]})})]})}function ParticipantItem(props){let{participant,isSelected,isCurrentUser,onToggle,onRemove}=props,patientResource=(0,import_react_hooks41.useResource)(participant);return patientResource?(0,import_jsx_runtime109.jsxs)(import_core139.Group,{justify:"space-between",wrap:"nowrap",className:ParticipantFilter_default.participantItem,children:[(0,import_jsx_runtime109.jsxs)(import_core139.Group,{gap:"sm",wrap:"nowrap",style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime109.jsx)(import_core139.Checkbox,{checked:isSelected,onChange:onToggle}),(0,import_jsx_runtime109.jsx)(ResourceAvatar,{value:participant,radius:"xl",size:32}),(0,import_jsx_runtime109.jsxs)(import_core139.Text,{size:"sm",truncate:!0,style:{flex:1},children:[(0,import_core140.formatHumanName)(patientResource?.name?.[0]??{}),isCurrentUser&&(0,import_jsx_runtime109.jsxs)(import_core139.Text,{component:"span",c:"dimmed",size:"sm",children:[" ","(you)"]})]})]}),onRemove&&(0,import_jsx_runtime109.jsx)(import_core139.CloseButton,{size:"sm",onClick:onRemove})]}):null}var import_core182=require("@mantine/core"),import_hooks14=require("@mantine/hooks"),import_notifications8=require("@mantine/notifications"),import_core183=require("@medplum/core"),import_react_hooks54=require("@medplum/react-hooks");var import_react91=require("react");var import_core180=require("@mantine/core"),import_core181=require("@medplum/core"),import_react_hooks53=require("@medplum/react-hooks"),import_react90=require("react");var PatientSummary_default={panel:"PatientSummary_panel",patientSummaryBadge:"PatientSummary_patientSummaryBadge",patientSummaryAddButton:"PatientSummary_patientSummaryAddButton",patientSummaryHeader:"PatientSummary_patientSummaryHeader",patientSummaryCollapseIcon:"PatientSummary_patientSummaryCollapseIcon",collapsed:"PatientSummary_collapsed"};var import_core178=require("@mantine/core"),import_core179=require("@medplum/core");var import_core146=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core147=require("@medplum/core"),import_react_hooks42=require("@medplum/react-hooks"),import_react78=require("react");var import_core141=require("@mantine/core"),import_jsx_runtime110=require("react/jsx-runtime"),statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red",connected:"green",disconnected:"red",finished:"green",planned:"gray"};function StatusBadge(props){let{status,...badgeProps}=props;return(0,import_jsx_runtime110.jsx)(import_core141.Badge,{color:props.color||statusToColor[status],...badgeProps,children:status.replaceAll("-"," ")})}var import_core142=require("@mantine/core"),import_core143=require("@medplum/core"),import_react76=require("react");var import_jsx_runtime111=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core143.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react76.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react76.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react76.useCallback)(formData=>{onSubmit((0,import_core143.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core143.createReference)(patient),encounter:encounter?(0,import_core143.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_runtime111.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime111.jsxs)(import_core142.Stack,{children:[(0,import_jsx_runtime111.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_runtime111.jsx)(import_core142.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime111.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core143.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",maxValues:1,defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime111.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime111.jsx)(import_core142.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime111.jsx)(SubmitButton,{children:"Save"})})]})},allergy?.id)}var import_core144=require("@mantine/core");var import_react77=require("react");var CollapsibleSection_default={root:"CollapsibleSection_root",header:"CollapsibleSection_header",chevron:"CollapsibleSection_chevron",title:"CollapsibleSection_title",addButton:"CollapsibleSection_addButton"};var import_jsx_runtime112=require("react/jsx-runtime");function CollapsibleSection(props){let{title,children,onAdd}=props,[collapsed,setCollapsed]=(0,import_react77.useState)(!1);return(0,import_jsx_runtime112.jsxs)(import_core144.Box,{className:CollapsibleSection_default.root,children:[(0,import_jsx_runtime112.jsxs)(import_core144.Group,{justify:"space-between",className:CollapsibleSection_default.header,children:[(0,import_jsx_runtime112.jsxs)(import_core144.Group,{gap:8,children:[(0,import_jsx_runtime112.jsx)(import_core144.ActionIcon,{variant:"subtle",onClick:()=>setCollapsed(c=>!c),"aria-label":collapsed?`Show ${title.toLowerCase()}`:`Hide ${title.toLowerCase()}`,className:CollapsibleSection_default.chevron,"data-collapsed":collapsed||void 0,size:"md",children:(0,import_jsx_runtime112.jsx)(IconChevronDown,{size:20})}),(0,import_jsx_runtime112.jsx)(import_core144.Text,{fz:"md",fw:800,onClick:()=>setCollapsed(c=>!c),className:CollapsibleSection_default.title,children:title})]}),onAdd&&(0,import_jsx_runtime112.jsx)(import_core144.ActionIcon,{role:"button","aria-label":"Add item",className:CollapsibleSection_default.addButton,variant:"subtle",onClick:e=>{killEvent(e),onAdd()},size:"md",children:(0,import_jsx_runtime112.jsx)(IconPlus,{size:18})})]}),(0,import_jsx_runtime112.jsx)(import_core144.Collapse,{in:!collapsed,children:(0,import_jsx_runtime112.jsx)(import_core144.Box,{ml:"var(--mantine-spacing-xl)",mt:"xs",mb:"md",pl:4,children})})]})}var import_core145=require("@mantine/core");var SummaryItem_default={gradient:"SummaryItem_gradient",container:"SummaryItem_container",chevron:"SummaryItem_chevron",item:"SummaryItem_item",itemText:"SummaryItem_itemText"};var import_jsx_runtime113=require("react/jsx-runtime");function SummaryItem(props){let{children,onClick}=props;return(0,import_jsx_runtime113.jsxs)(import_core145.Box,{className:SummaryItem_default.item,onClick,children:[children,(0,import_jsx_runtime113.jsx)("div",{className:SummaryItem_default.gradient}),(0,import_jsx_runtime113.jsx)("div",{className:SummaryItem_default.container,children:(0,import_jsx_runtime113.jsx)(import_core145.ActionIcon,{className:SummaryItem_default.chevron,size:"md",variant:"transparent",tabIndex:-1,children:(0,import_jsx_runtime113.jsx)(IconChevronRight,{size:16,stroke:2.5})})})]})}var import_jsx_runtime114=require("react/jsx-runtime");function Allergies(props){let medplum=(0,import_react_hooks42.useMedplum)(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react78.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react78.useState)(),sortedAllergies=(0,import_react78.useMemo)(()=>[...allergies].sort((a,b)=>{let aStatus=a.clinicalStatus?.coding?.[0]?.code,bStatus=b.clinicalStatus?.coding?.[0]?.code;return aStatus==="active"&&bStatus!=="active"?-1:aStatus!=="active"&&bStatus==="active"?1:(0,import_core147.getDisplayString)(a).localeCompare((0,import_core147.getDisplayString)(b))}),[allergies]),handleSubmit=(0,import_react78.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_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(CollapsibleSection,{title:"Allergies",onAdd:()=>{setEditAllergy(void 0),open()},children:sortedAllergies.length>0?(0,import_jsx_runtime114.jsx)(import_core146.Box,{children:(0,import_jsx_runtime114.jsx)(import_core146.Flex,{direction:"column",gap:8,children:sortedAllergies.map(allergy=>{let status=allergy.clinicalStatus?.coding?.[0]?.code||"unknown";return(0,import_jsx_runtime114.jsx)(SummaryItem,{onClick:()=>{setEditAllergy(allergy),open()},children:(0,import_jsx_runtime114.jsxs)(import_core146.Box,{children:[(0,import_jsx_runtime114.jsx)(import_core146.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core147.getDisplayString)(allergy)}),(0,import_jsx_runtime114.jsx)(import_core146.Group,{mt:2,gap:4,children:status&&(0,import_jsx_runtime114.jsx)(StatusBadge,{color:getClinicalStatusColor(status),variant:"light",status})})]})},allergy.id)})})}):(0,import_jsx_runtime114.jsx)(import_core146.Text,{children:"(none)"})}),(0,import_jsx_runtime114.jsx)(import_core146.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime114.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}function getClinicalStatusColor(status){if(!status)return"gray";switch(status){case"active":return"red";case"inactive":return"orange";case"resolved":return"blue";default:return"gray"}}var import_core148=require("@mantine/core"),import_core149=require("@medplum/core"),import_react_hooks43=require("@medplum/react-hooks");var import_jsx_runtime115=require("react/jsx-runtime");function CoverageItem(props){let{coverage,organization,onClickResource}=props,coverageResource=(0,import_react_hooks43.useResource)(coverage),organizationResource=(0,import_react_hooks43.useResource)(organization),payorName="Unknown Payor";organizationResource&&"name"in organizationResource&&typeof organizationResource.name=="string"&&(payorName=organizationResource.name);let detailsText=`ID: ${coverageResource?.subscriberId??"N/A"}${formatClassInfo(coverageResource)?` \xB7 ${formatClassInfo(coverageResource)}`:""}`;return(0,import_jsx_runtime115.jsx)(SummaryItem,{onClick:()=>{coverageResource&&onClickResource?.(coverageResource)},children:(0,import_jsx_runtime115.jsxs)(import_core148.Box,{children:[(0,import_jsx_runtime115.jsx)(import_core148.Text,{fw:500,className:PatientSummary_default.itemText,children:payorName}),(0,import_jsx_runtime115.jsx)(import_core148.Text,{fw:500,className:PatientSummary_default.itemText,children:detailsText}),(0,import_jsx_runtime115.jsxs)(import_core148.Group,{mt:2,gap:4,children:[(0,import_jsx_runtime115.jsx)(StatusBadge,{color:"green",variant:"light",status:"Active"}),(0,import_jsx_runtime115.jsxs)(import_core148.Text,{size:"xs",fw:500,color:"gray.6",children:["Ends ",(0,import_core149.formatDate)(coverageResource?.period?.end)]})]})]})})}function Insurance(props){let{coverages,onClickResource}=props,activeCoverages=coverages.filter(coverage=>coverage.status==="active"&&!coverage.type?.coding?.some(coding=>coding.code==="SELFPAY"));return(0,import_jsx_runtime115.jsx)(CollapsibleSection,{title:"Insurance",children:activeCoverages.length>0?(0,import_jsx_runtime115.jsx)(import_core148.Flex,{direction:"column",gap:8,children:activeCoverages.map(coverage=>(0,import_jsx_runtime115.jsx)(CoverageItem,{coverage,organization:coverage.payor?.[0],onClickResource},coverage.id))}):(0,import_jsx_runtime115.jsx)(import_core148.Text,{children:"(none)"})})}function capitalizeWords(str){return str.split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1).toLowerCase()).join(" ")}function formatClassInfo(coverage){return coverage?coverage.class?.filter(cls=>cls.type?.coding?.[0]?.code!=="plan").map(cls=>{let type=cls.type?.coding?.[0]?.code??"";return`${capitalizeWords(type)}: ${cls.value}`}).join(" \xB7 ")??"":""}var import_core156=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_core157=require("@medplum/core"),import_react81=require("react");var import_core154=require("@mantine/core"),import_core155=require("@medplum/core"),import_react_hooks45=require("@medplum/react-hooks");var import_react80=require("react");var import_core150=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime116=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime116.jsx)(import_core150.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime116.jsx)(import_core150.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_core153=require("@mantine/core");var import_core151=require("@mantine/core"),import_core152=require("@medplum/core"),import_react_hooks44=require("@medplum/react-hooks"),import_react79=require("react");var import_jsx_runtime117=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react79.useState)(),resource=(0,import_react_hooks44.useResource)(value,setOutcome),text;if(outcome&&!(0,import_core152.isOk)(outcome))text=`[${(0,import_core152.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core152.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime117.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime117.jsx)(import_core151.Text,{component:"span",...rest,children:text})}var import_jsx_runtime118=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime118.jsxs)(import_core153.Group,{gap:"xs",children:[(0,import_jsx_runtime118.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime118.jsx)(ResourceName,{value:props.value,link:props.link})]})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime119=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1,hideSubject:!1};function DiagnosticReportDisplay(props){let medplum=(0,import_react_hooks45.useMedplum)(),diagnosticReport=(0,import_react_hooks45.useResource)(props.value),[specimens,setSpecimens]=(0,import_react80.useState)();if((0,import_react80.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_runtime119.jsxs)(import_core154.Stack,{children:[(0,import_jsx_runtime119.jsx)(import_core154.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime119.jsx)(DiagnosticReportHeader,{value:diagnosticReport,hideSubject:props.hideSubject}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime119.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime119.jsx)(NoteDisplay,{value:specimenNotes}),diagnosticReport.conclusion&&(0,import_jsx_runtime119.jsxs)(import_core154.Stack,{mt:"md",children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{fw:500,size:"sm",c:"dimmed",children:"Conclusion"}),(0,import_jsx_runtime119.jsx)(import_core154.Text,{children:diagnosticReport.conclusion})]})]})}function DiagnosticReportHeader({value,hideSubject=!1}){return(0,import_jsx_runtime119.jsxs)(import_core154.Group,{mt:"md",gap:30,children:[value.subject&&!hideSubject&&(0,import_jsx_runtime119.jsxs)("div",{children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime119.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime119.jsxs)("div",{children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime119.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime119.jsxs)("div",{children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime119.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime119.jsxs)("div",{children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime119.jsx)(import_core154.Text,{children:(0,import_core155.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime119.jsxs)("div",{children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime119.jsx)(StatusBadge,{status:value.status})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime119.jsxs)(import_core154.Stack,{gap:"xs",children:[(0,import_jsx_runtime119.jsx)(import_core154.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime119.jsx)(import_core154.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime119.jsx)(import_core154.List.Item,{ml:"sm",children:(0,import_jsx_runtime119.jsxs)(import_core154.Group,{gap:20,children:[(0,import_jsx_runtime119.jsxs)(import_core154.Group,{gap:5,children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{fw:500,children:"Collected:"})," ",(0,import_core155.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime119.jsxs)(import_core154.Group,{gap:5,children:[(0,import_jsx_runtime119.jsx)(import_core154.Text,{fw:500,children:"Received:"})," ",(0,import_core155.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime119.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime119.jsx)("thead",{children:(0,import_jsx_runtime119.jsxs)("tr",{children:[(0,import_jsx_runtime119.jsx)("th",{children:"Test"}),(0,import_jsx_runtime119.jsx)("th",{children:"Value"}),(0,import_jsx_runtime119.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime119.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime119.jsx)("th",{children:"Category"}),(0,import_jsx_runtime119.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime119.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime119.jsx)("tbody",{children:(0,import_jsx_runtime119.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime119.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core155.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=(0,import_react_hooks45.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_runtime119.jsxs)(import_jsx_runtime119.Fragment,{children:[(0,import_jsx_runtime119.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime119.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime119.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime119.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime119.jsx)("td",{children:(0,import_jsx_runtime119.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime119.jsx)("td",{children:(0,import_jsx_runtime119.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime119.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime119.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime119.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime119.jsx)("div",{children:(0,import_jsx_runtime119.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core155.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime119.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime119.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime119.jsx)("td",{children:observation.status&&(0,import_jsx_runtime119.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime119.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime119.jsx)("tr",{children:(0,import_jsx_runtime119.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime119.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment,{children:(0,import_core155.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime119.jsx)(import_jsx_runtime119.Fragment,{children:range.text}):(0,import_jsx_runtime119.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_jsx_runtime120=require("react/jsx-runtime");function Labs(props){let{serviceRequests,diagnosticReports,onClickResource,onRequestLabs}=props,[selectedReport,setSelectedReport]=(0,import_react81.useState)(),[reportDialogOpened,{open:openReportDialog,close:closeReportDialog}]=(0,import_hooks7.useDisclosure)(!1),diagnosticReportsRequests=new Set,filteredDiagnosticReports=diagnosticReports.filter(report=>{let flag=isLaboratoryReport(report);return flag&&report.basedOn&&report.basedOn.forEach(basedOn=>{if(basedOn.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn.reference.split("/");diagnosticReportsRequests.add(id)}}),flag}),completedRequisitionNumbers=new Set,filteredServiceRequests=serviceRequests.filter(request=>{if(request.id&&diagnosticReportsRequests.has(request.id)||request.basedOn&&request.basedOn.find(basedOn2=>{if(basedOn2.reference?.startsWith("ServiceRequest/")){let[,id]=basedOn2.reference.split("/");return diagnosticReportsRequests.has(id)}return!1}))return!1;let shouldFilter=shouldFilterRequest(request,completedRequisitionNumbers);return!shouldFilter&&request.requisition?.value&&completedRequisitionNumbers.add(request.requisition?.value),!shouldFilter}),handleDiagnosticReportClick=report=>{setSelectedReport(report),openReportDialog()};return(0,import_jsx_runtime120.jsxs)(import_jsx_runtime120.Fragment,{children:[(0,import_jsx_runtime120.jsx)(CollapsibleSection,{title:"Labs",onAdd:()=>onRequestLabs?.(),children:(0,import_jsx_runtime120.jsxs)(import_core156.Flex,{direction:"column",gap:8,children:[filteredServiceRequests.map(serviceRequest=>(0,import_jsx_runtime120.jsx)(SummaryItem,{onClick:()=>onClickResource?.(serviceRequest),children:(0,import_jsx_runtime120.jsxs)(import_core156.Box,{children:[(0,import_jsx_runtime120.jsx)(import_core156.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core157.getDisplayString)(serviceRequest)}),(0,import_jsx_runtime120.jsxs)(import_core156.Group,{mt:2,gap:4,children:[serviceRequest.status&&(0,import_jsx_runtime120.jsx)(StatusBadge,{color:getStatusColor(serviceRequest.status),variant:"light",status:serviceRequest.status}),(0,import_jsx_runtime120.jsx)(import_core156.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core157.formatDate)(serviceRequest.authoredOn)})]})]})},serviceRequest.id)),filteredDiagnosticReports.map(report=>(0,import_jsx_runtime120.jsx)(SummaryItem,{onClick:()=>handleDiagnosticReportClick(report),children:(0,import_jsx_runtime120.jsxs)(import_core156.Box,{children:[(0,import_jsx_runtime120.jsx)(import_core156.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core157.getDisplayString)(report)}),(0,import_jsx_runtime120.jsxs)(import_core156.Group,{mt:2,gap:4,children:[report.status&&(0,import_jsx_runtime120.jsx)(StatusBadge,{color:getStatusColor(report.status),variant:"light",status:report.status}),(0,import_jsx_runtime120.jsx)(import_core156.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core157.formatDate)(report.issued)})]})]})},report.id)),filteredServiceRequests.length===0&&filteredDiagnosticReports.length===0&&(0,import_jsx_runtime120.jsx)(import_core156.Text,{children:"(none)"})]})}),(0,import_jsx_runtime120.jsx)(import_core156.Modal,{opened:reportDialogOpened,onClose:closeReportDialog,size:"80%",children:selectedReport&&(0,import_jsx_runtime120.jsx)(DiagnosticReportDisplay,{value:selectedReport,hideSubject:!0})})]})}var getStatusColor=status=>{switch(status){case"active":return"indigo";case"final":return"teal";case"cancelled":return"red";default:return"gray"}};function hasLaboratoryCategory(category){if(!category.coding||!Array.isArray(category.coding))return!1;for(let coding of category.coding)if(coding.code==="LAB")return!0;return!1}function isLaboratoryReport(report){if(!report.category||!Array.isArray(report.category))return!1;for(let category of report.category)if(hasLaboratoryCategory(category))return!0;return!1}function shouldFilterRequest(request,completedRequisitionNumbers){if(["completed","draft","entered-in-error"].includes(request.status))return!0;let requisitionNumber=request.requisition?.value;return!!(requisitionNumber&&completedRequisitionNumbers.has(requisitionNumber))}var import_core160=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_core161=require("@medplum/core"),import_react_hooks47=require("@medplum/react-hooks"),import_react83=require("react");var import_core158=require("@mantine/core"),import_core159=require("@medplum/core"),import_react_hooks46=require("@medplum/react-hooks"),import_react82=require("react");var import_jsx_runtime121=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_hooks46.useMedplumProfile)(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react82.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react82.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core159.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core159.createReference)(encounter)),requester:medication?.requester??(0,import_core159.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core159.createReference)(patient)},import_core159.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime121.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime121.jsxs)(import_core158.Stack,{children:[(0,import_jsx_runtime121.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_runtime121.jsx)(import_core158.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime121.jsx)(import_core158.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime121.jsx)(import_core158.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime121.jsx)(SubmitButton,{children:"Save"})})]})}):(0,import_jsx_runtime121.jsx)(import_core158.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime122=require("react/jsx-runtime");function Medications(props){let medplum=(0,import_react_hooks47.useMedplum)(),[medicationRequests,setMedicationRequests]=(0,import_react83.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react83.useState)(),[opened,{open,close}]=(0,import_hooks8.useDisclosure)(!1),handleSubmit=(0,import_react83.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_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:[(0,import_jsx_runtime122.jsx)(CollapsibleSection,{title:"Medications",onAdd:()=>{setEditMedication(void 0),open()},children:medicationRequests.length>0?(0,import_jsx_runtime122.jsx)(import_core160.Flex,{direction:"column",gap:8,children:medicationRequests.map(medication=>(0,import_jsx_runtime122.jsx)(SummaryItem,{onClick:()=>{setEditMedication(medication),open()},children:(0,import_jsx_runtime122.jsxs)(import_core160.Box,{children:[(0,import_jsx_runtime122.jsx)(import_core160.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core161.getDisplayString)(medication)}),(0,import_jsx_runtime122.jsx)(import_core160.Group,{mt:2,gap:4,children:medication.status&&(0,import_jsx_runtime122.jsx)(StatusBadge,{color:getStatusColor2(medication.status),variant:"light",status:medication.status})})]})},medication.id))}):(0,import_jsx_runtime122.jsx)(import_core160.Text,{children:"(none)"})}),(0,import_jsx_runtime122.jsx)(import_core160.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime122.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}function getStatusColor2(status){if(!status)return"gray";switch(status){case"active":return"green";case"stopped":return"red";case"on-hold":return"yellow";case"cancelled":return"red";case"completed":return"blue";case"entered-in-error":return"red";case"draft":return"gray";default:return"gray"}}var import_core162=require("@mantine/core");var import_jsx_runtime123=require("react/jsx-runtime"),PatientInfoItem=props=>{let{patient,value,icon,placeholder,label,onClickResource}=props,displayText=value||placeholder;return(0,import_jsx_runtime123.jsx)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:(0,import_jsx_runtime123.jsx)(import_core162.Box,{className:PatientSummary_default.patientSummaryListItem,children:(0,import_jsx_runtime123.jsx)(import_core162.Tooltip,{label,position:"top-start",openDelay:650,children:(0,import_jsx_runtime123.jsxs)(import_core162.Group,{gap:"sm",align:"center",ml:6,mr:2,style:{cursor:"pointer",flexWrap:"nowrap",minWidth:0},children:[icon,(0,import_jsx_runtime123.jsx)(import_core162.Text,{fz:"sm",fw:400,truncate:!0,c:value?"inherit":"var(--mantine-color-gray-6)",children:displayText})]})})})})};var import_core163=require("@medplum/core");function getGenderIdentity(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-genderIdentity`)?.valueCodeableConcept?.coding?.[0]?.display}function getBirthSex(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-birthsex`)?.valueCode}function getRace(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-race`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getEthnicity(patient){return(0,import_core163.getExtension)(patient,`${import_core163.HTTP_HL7_ORG}/fhir/us/core/StructureDefinition/us-core-ethnicity`)?.extension?.find(subExt=>subExt.url==="ombCategory")?.valueCoding?.display}function getGeneralPractitioner(patient){return patient.generalPractitioner?.[0]?.display}function formatPatientGenderDisplay(patient){let capitalizedGender=patient.gender?(0,import_core163.capitalize)(patient.gender):"",genderIdentity=getGenderIdentity(patient),birthSex=getBirthSex(patient),parts=[];return capitalizedGender&&parts.push(capitalizedGender),genderIdentity&&parts.push(genderIdentity),birthSex&&parts.push(`Born as ${birthSex}`),parts.join(" \xB7 ")}function formatPatientRaceEthnicityDisplay(patient){let race=getRace(patient),ethnicity=getEthnicity(patient),parts=[];return race&&parts.push(race),ethnicity&&parts.push(ethnicity),parts.join(" \xB7 ")}var getPreferredLanguage=patient=>{if(!patient.communication?.length)return;let preferred=patient.communication?.find(comm=>comm.preferred===!0);return preferred?.language?.coding?.[0]?.display?preferred.language.coding[0].display:patient.communication[0]?.language?.coding?.[0]?.display};var import_core165=require("@mantine/core"),import_hooks9=require("@mantine/hooks"),import_core166=require("@medplum/core"),import_react_hooks48=require("@medplum/react-hooks"),import_react84=require("react");var import_core164=require("@medplum/core");var import_jsx_runtime124=require("react/jsx-runtime");function Pharmacies(props){let{patient:patientProp,onClickResource,pharmacyDialogComponent}=props,PharmacyDialogComponent=pharmacyDialogComponent,medplum=(0,import_react_hooks48.useMedplum)(),[opened,{open,close}]=(0,import_hooks9.useDisclosure)(!1),[resolvedPharmacies,setResolvedPharmacies]=(0,import_react84.useState)([]),[loadState,setLoadState]=(0,import_react84.useState)("loading"),patient=(0,import_react_hooks48.useResource)(patientProp),pharmacyRefs=(0,import_react84.useMemo)(()=>patient?(0,import_core164.getPreferredPharmaciesFromPatient)(patient):[],[patient]);(0,import_react84.useEffect)(()=>{let cancelled=!1;return(async()=>{if(props.pharmacies){cancelled||(setResolvedPharmacies(props.pharmacies),setLoadState("loaded"));return}if(pharmacyRefs.length===0){cancelled||(setResolvedPharmacies([]),setLoadState("loaded"));return}setLoadState("loading");try{let results=await Promise.all(pharmacyRefs.map(async pharmacyRef=>{try{return{...await medplum.readReference(pharmacyRef.organizationRef),isPrimary:pharmacyRef.isPrimary}}catch(error){return isNotFoundError(error),null}}));if(!cancelled){let validResults=results.filter(result=>result!==null);setResolvedPharmacies(validResults),setLoadState(validResults.length===0&&pharmacyRefs.length>0?"error":"loaded")}}catch{cancelled||setLoadState("error")}})().catch(()=>{}),()=>{cancelled=!0}},[medplum,pharmacyRefs,props.pharmacies]);let handleSubmit=(0,import_react84.useCallback)(async _pharmacy=>{patient?.id&&medplum.invalidateUrl((0,import_core166.getReferenceString)(patient)),close()},[medplum,patient,close]);return patient?(0,import_jsx_runtime124.jsxs)(import_jsx_runtime124.Fragment,{children:[(0,import_jsx_runtime124.jsx)(CollapsibleSection,{title:"Pharmacies",onAdd:pharmacyDialogComponent?open:void 0,children:loadState==="loading"?(0,import_jsx_runtime124.jsx)(import_core165.Loader,{size:"sm"}):loadState==="error"?(0,import_jsx_runtime124.jsx)(import_core165.Text,{c:"red",size:"sm",children:"Failed to load pharmacies"}):resolvedPharmacies.length===0?(0,import_jsx_runtime124.jsx)(import_core165.Text,{children:"(none)"}):(0,import_jsx_runtime124.jsx)(import_core165.Box,{children:(0,import_jsx_runtime124.jsx)(import_core165.Flex,{direction:"column",gap:8,children:resolvedPharmacies.map((pharmacy,index)=>(0,import_jsx_runtime124.jsx)(SummaryItem,{onClick:()=>onClickResource?.(pharmacy),children:(0,import_jsx_runtime124.jsxs)(import_core165.Box,{children:[(0,import_jsx_runtime124.jsx)(import_core165.Text,{fw:500,className:SummaryItem_default.itemText,children:pharmacy.name}),(0,import_jsx_runtime124.jsxs)(import_core165.Group,{mt:2,gap:4,children:[pharmacy.isPrimary&&(0,import_jsx_runtime124.jsx)(StatusBadge,{color:"blue",variant:"light",status:"primary"}),pharmacy.address?.[0]&&(0,import_jsx_runtime124.jsx)(import_core165.Text,{size:"xs",c:"dimmed",children:(0,import_core166.formatAddress)(pharmacy.address[0])})]})]})},pharmacy.id||index))})})}),PharmacyDialogComponent?(0,import_jsx_runtime124.jsx)(import_core165.Modal,{opened,onClose:close,title:"Add Pharmacy",size:"lg",children:(0,import_jsx_runtime124.jsx)(PharmacyDialogComponent,{patient,onSubmit:handleSubmit,onClose:close})}):null]}):(0,import_jsx_runtime124.jsx)(import_jsx_runtime124.Fragment,{})}function isNotFoundError(error){return error instanceof import_core166.OperationOutcomeError?error.outcome.issue?.some(issue=>issue.code==="not-found")??!1:!1}var import_core169=require("@mantine/core"),import_hooks10=require("@mantine/hooks"),import_core170=require("@medplum/core"),import_react_hooks49=require("@medplum/react-hooks"),import_react86=require("react");var import_core167=require("@mantine/core"),import_core168=require("@medplum/core"),import_react85=require("react");var import_jsx_runtime125=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react85.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react85.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react85.useCallback)(formData=>{let updatedCondition=(0,import_core168.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core168.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core168.createReference)(patient),encounter:encounter&&(0,import_core168.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core168.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_runtime125.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime125.jsxs)(import_core167.Stack,{children:[(0,import_jsx_runtime125.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core168.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime125.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core168.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime125.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime125.jsx)(import_core167.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime125.jsx)(SubmitButton,{children:"Save"})})]})},condition?.id)}var import_jsx_runtime126=require("react/jsx-runtime");function getCodeKey(condition){let coding=condition.code?.coding?.[0];return coding?.system&&coding?.code?`${coding.system}|${coding.code}`:coding?.code?coding.code:condition.code?.text??condition.id}function ProblemList(props){let medplum=(0,import_react_hooks49.useMedplum)(),{patient,encounter}=props,[problems,setProblems]=(0,import_react86.useState)(props.problems.filter(c=>c.verificationStatus?.coding?.[0]?.code!=="entered-in-error")),[editCondition,setEditCondition]=(0,import_react86.useState)(),[opened,{open,close}]=(0,import_hooks10.useDisclosure)(!1),[expandedGroups,setExpandedGroups]=(0,import_react86.useState)(()=>new Set),groupedProblems=(0,import_react86.useMemo)(()=>{let groups=new Map;for(let i=0;i<problems.length;i++){let problem=problems[i],key=getCodeKey(problem)??`ungrouped-${i}`,existing=groups.get(key);existing?existing.push(problem):groups.set(key,[problem])}return Array.from(groups.entries())},[problems]),toggleGroup=(0,import_react86.useCallback)(key=>{setExpandedGroups(prev=>{let next=new Set(prev);return next.has(key)?next.delete(key):next.add(key),next})},[]),handleSubmit=(0,import_react86.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([newCondition,...problems])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime126.jsxs)(import_jsx_runtime126.Fragment,{children:[(0,import_jsx_runtime126.jsx)(CollapsibleSection,{title:"Problems",onAdd:()=>{setEditCondition(void 0),open()},children:problems.length>0?(0,import_jsx_runtime126.jsx)(import_core169.Flex,{direction:"column",gap:8,children:groupedProblems.map(([key,group],groupIndex)=>{let isExpanded=expandedGroups.has(key),displayProblems=isExpanded?group:[group[0]],groupContentId=`problem-group-content-${groupIndex}`;return(0,import_jsx_runtime126.jsxs)(import_core169.Box,{children:[(0,import_jsx_runtime126.jsx)(import_core169.Flex,{direction:"column",gap:4,id:groupContentId,children:displayProblems.map(problem=>(0,import_jsx_runtime126.jsx)(SummaryItem,{onClick:()=>{setEditCondition(problem),open()},children:(0,import_jsx_runtime126.jsxs)(import_core169.Box,{children:[(0,import_jsx_runtime126.jsxs)(import_core169.Group,{gap:6,wrap:"nowrap",children:[(0,import_jsx_runtime126.jsx)(import_core169.Text,{fw:500,className:SummaryItem_default.itemText,children:(0,import_core170.getDisplayString)(problem)}),!isExpanded&&group.length>1&&(0,import_jsx_runtime126.jsxs)(import_core169.Badge,{size:"xs",color:"gray",variant:"light",style:{flexShrink:0},children:["+",group.length-1]})]}),(0,import_jsx_runtime126.jsxs)(import_core169.Group,{mt:2,gap:4,children:[problem.clinicalStatus?.coding?.[0]?.code&&(0,import_jsx_runtime126.jsx)(StatusBadge,{"data-testid":"status-badge",color:getStatusColor3(problem.clinicalStatus?.coding?.[0]?.code),variant:"light",status:problem.clinicalStatus?.coding?.[0]?.code}),(0,import_jsx_runtime126.jsx)(import_core169.Text,{size:"xs",fw:500,c:"dimmed",children:(0,import_core170.formatDate)(problem.onsetDateTime)})]})]})},problem.id))}),group.length>1&&(0,import_jsx_runtime126.jsx)(import_core169.UnstyledButton,{onClick:()=>toggleGroup(key),"aria-expanded":isExpanded,"aria-controls":groupContentId,pl:4,pt:2,style:{fontSize:"var(--mantine-font-size-xs)",color:"var(--mantine-color-dimmed)"},children:isExpanded?"Show less":`Show all ${group.length} entries`})]},key)})}):(0,import_jsx_runtime126.jsx)(import_core169.Text,{children:"(none)"})}),(0,import_jsx_runtime126.jsx)(import_core169.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime126.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var getStatusColor3=status=>{if(!status)return"gray";switch(status){case"active":case"recurrence":case"relapse":return"green";case"inactive":return"orange";case"remission":return"blue";case"resolved":return"teal";default:return"gray"}};var import_core171=require("@mantine/core"),import_hooks11=require("@mantine/hooks"),import_core172=require("@medplum/core"),import_react_hooks50=require("@medplum/react-hooks"),import_react87=require("react");var import_jsx_runtime127=require("react/jsx-runtime"),NULLFLAVOR=import_core172.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_core172.SNOMED,20430005:import_core172.SNOMED,42035005:import_core172.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let{patient,encounter}=props,medplum=(0,import_react_hooks50.useMedplum)(),[sexualOrientation,setSexualOrientation]=(0,import_react87.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks11.useDisclosure)(!1),[hoverIndex,setHoverIndex]=(0,import_react87.useState)(null),handleSubmit=(0,import_react87.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core172.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core172.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core172.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core172.createReference)(patient),encounter:encounter?(0,import_core172.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_runtime127.jsxs)(import_jsx_runtime127.Fragment,{children:[(0,import_jsx_runtime127.jsx)(CollapsibleSection,{title:"Sexual Orientation",onAdd:()=>{open()},children:sexualOrientation?(0,import_jsx_runtime127.jsx)(import_core171.Flex,{direction:"column",gap:8,children:(0,import_jsx_runtime127.jsx)(import_core171.Box,{onMouseEnter:()=>setHoverIndex(0),onMouseLeave:()=>setHoverIndex(null),children:(0,import_jsx_runtime127.jsx)(import_core171.UnstyledButton,{"data-testid":"sexual-orientation-button",onClick:e=>{killEvent(e),props.onClickResource&&props.onClickResource(sexualOrientation)},children:(0,import_jsx_runtime127.jsx)(import_core171.Box,{pr:hoverIndex===0?24:0,children:(0,import_jsx_runtime127.jsx)(import_core171.Text,{size:"sm",fw:500,children:sexualOrientation.valueCodeableConcept?.text??"Unknown"})})})})}):(0,import_jsx_runtime127.jsx)(import_core171.Text,{children:"(none)"})}),(0,import_jsx_runtime127.jsx)(import_core171.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime127.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime127.jsxs)(import_core171.Stack,{children:[(0,import_jsx_runtime127.jsx)(import_core171.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime127.jsx)(import_core171.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime127.jsx)(import_core171.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime127.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core173=require("@mantine/core"),import_hooks12=require("@mantine/hooks"),import_core174=require("@medplum/core"),import_react_hooks51=require("@medplum/react-hooks"),import_react88=require("react");var import_jsx_runtime128=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_hooks51.useMedplum)(),[smokingStatus,setSmokingStatus]=(0,import_react88.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks12.useDisclosure)(!1),handleSubmit=(0,import_react88.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core174.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_core174.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core174.createReference)(props.patient),encounter:props.encounter?(0,import_core174.createReference)(props.encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core174.SNOMED,version:import_core174.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,props.patient,props.encounter,close]);return(0,import_jsx_runtime128.jsxs)(import_jsx_runtime128.Fragment,{children:[(0,import_jsx_runtime128.jsx)(CollapsibleSection,{title:"Smoking Status",onAdd:()=>{open()},children:smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime128.jsx)(import_core173.UnstyledButton,{"data-testid":"smoking-status-button",onClick:()=>props.onClickResource?.(smokingStatus),children:(0,import_jsx_runtime128.jsx)(import_core173.Text,{children:(0,import_core174.formatCodeableConcept)(smokingStatus.valueCodeableConcept)})}):(0,import_jsx_runtime128.jsx)(import_core173.Text,{children:"(none)"})}),(0,import_jsx_runtime128.jsx)(import_core173.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime128.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime128.jsxs)(import_core173.Stack,{children:[(0,import_jsx_runtime128.jsx)(import_core173.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime128.jsx)(import_core173.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime128.jsx)(import_core173.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime128.jsx)(SubmitButton,{children:"Save"})})]})})})]})}var import_core176=require("@mantine/core"),import_hooks13=require("@mantine/hooks"),import_core177=require("@medplum/core"),import_react_hooks52=require("@medplum/react-hooks"),import_react89=require("react");var import_core175=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_core175.createReference)(patient),encounter:encounter?(0,import_core175.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_core175.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core175.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!Number.isNaN(value)&&Number.isFinite(value)}var import_jsx_runtime129=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_hooks52.useMedplum)(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react89.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks13.useDisclosure)(!1),handleSubmit=(0,import_react89.useCallback)(formData=>{let newObservations=[];newObservations.push(createCompoundObservation(patient,encounter,BP,"Blood pressure",[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(Number.parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(Number.parseFloat(formData.diastolic),"mm[Hg]")}]));for(let meta of LOINC_CODES)meta.component||newObservations.push(createObservation(patient,encounter,meta.code,meta.title,createQuantity(Number.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_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(CollapsibleSection,{title:"Vitals",onAdd:()=>{open()},children:(0,import_jsx_runtime129.jsx)(import_core176.Stack,{children:LOINC_CODES.map(meta=>{let obs=vitals.find(o=>o.code?.coding?.[0].code===meta.code);return(0,import_jsx_runtime129.jsxs)(import_core176.Group,{align:"center",children:[(0,import_jsx_runtime129.jsx)(import_core176.Text,{c:"dimmed",children:meta.short}),obs&&(0,import_jsx_runtime129.jsx)(import_core176.Text,{children:(0,import_core177.formatQuantity)(getObservationValue(obs,meta.component))})]},meta.name)})})}),(0,import_jsx_runtime129.jsx)(import_core176.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime129.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime129.jsx)(import_core176.SimpleGrid,{cols:2,children:LOINC_CODES.map((meta,index)=>(0,import_jsx_runtime129.jsx)(import_core176.TextInput,{name:meta.name,label:meta.short,description:`${meta.title} (${meta.unit})`,"data-autofocus":index===0,autoFocus:index===0},meta.name))}),(0,import_jsx_runtime129.jsx)(import_core176.Textarea,{name:"notes",label:"Notes"}),(0,import_jsx_runtime129.jsx)(import_core176.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime129.jsx)(SubmitButton,{children:"Save"})})]})})]})}var import_jsx_runtime130=require("react/jsx-runtime"),DemographicsSection={key:"demographics",title:"Demographics",component:({patient,onClickResource})=>{let languageDisplay=getPreferredLanguage(patient);return(0,import_jsx_runtime130.jsxs)(import_core178.Stack,{gap:"xs",py:8,children:[(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:patient.birthDate?`${patient.birthDate} (${(0,import_core179.calculateAgeString)(patient.birthDate)})`:void 0,icon:(0,import_jsx_runtime130.jsx)(IconCake,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Birthdate",label:"Birthdate & Age",onClickResource}),(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:patient.gender?formatPatientGenderDisplay(patient):void 0,icon:(0,import_jsx_runtime130.jsx)(IconEmpathize,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Gender & Identity",label:"Gender & Identity",onClickResource}),(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:getRace(patient)||getEthnicity(patient)?formatPatientRaceEthnicityDisplay(patient):void 0,icon:(0,import_jsx_runtime130.jsx)(IconBinaryTree,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Race & Ethnicity",label:"Race & Ethnicity",onClickResource}),(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:patient.address?.[0]?(0,import_core179.formatAddress)(patient.address[0]):void 0,icon:(0,import_jsx_runtime130.jsx)(IconMapPin,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Location",label:"Location",onClickResource}),(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:languageDisplay,icon:(0,import_jsx_runtime130.jsx)(IconLanguage,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add Language",label:"Language",onClickResource}),(0,import_jsx_runtime130.jsx)(PatientInfoItem,{patient,value:getGeneralPractitioner(patient),icon:(0,import_jsx_runtime130.jsx)(IconStethoscope,{size:16,stroke:2,color:"var(--mantine-color-gray-6)"}),placeholder:"Add General Practitioner",label:"General Practitioner",onClickResource})]})}},InsuranceSection={key:"insurance",title:"Insurance",searches:[{key:"coverages",resourceType:"Coverage",patientParam:"beneficiary"}],component:({results,onClickResource})=>(0,import_jsx_runtime130.jsx)(Insurance,{coverages:results.coverages||[],onClickResource})},AllergiesSection={key:"allergies",title:"Allergies",searches:[{key:"allergies",resourceType:"AllergyIntolerance",patientParam:"patient"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime130.jsx)(Allergies,{patient,allergies:results.allergies||[],onClickResource})},ProblemListSection={key:"problemList",title:"Problems",searches:[{key:"conditions",resourceType:"Condition",patientParam:"patient"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime130.jsx)(ProblemList,{patient,problems:results.conditions||[],onClickResource})},MedicationsSection={key:"medications",title:"Medications",searches:[{key:"medications",resourceType:"MedicationRequest",patientParam:"subject"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime130.jsx)(Medications,{patient,medicationRequests:results.medications||[],onClickResource})};function createLabsSection(onRequestLabs){return{key:"labs",title:"Labs",searches:[{key:"serviceRequests",resourceType:"ServiceRequest",patientParam:"subject"},{key:"diagnosticReports",resourceType:"DiagnosticReport",patientParam:"subject"}],component:({results,patient,onClickResource})=>(0,import_jsx_runtime130.jsx)(Labs,{patient,serviceRequests:results.serviceRequests||[],diagnosticReports:results.diagnosticReports||[],onClickResource,onRequestLabs})}}var LabsSection=createLabsSection(),SexualOrientationSection={key:"sexualOrientation",title:"Sexual Orientation",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{code:"76690-7"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime130.jsx)(SexualOrientation,{patient,sexualOrientation:observations[0],onClickResource})}},SmokingStatusSection={key:"smokingStatus",title:"Smoking Status",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{code:"72166-2"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime130.jsx)(SmokingStatus,{patient,smokingStatus:observations[0],onClickResource})}},VitalsSection={key:"vitals",title:"Vitals",searches:[{key:"observations",resourceType:"Observation",patientParam:"subject",query:{category:"vital-signs"}}],component:({results,patient,onClickResource})=>{let observations=results.observations||[];return(0,import_jsx_runtime130.jsx)(Vitals,{patient,vitals:observations,onClickResource})}};function createPharmaciesSection(pharmacyDialogComponent){return{key:"pharmacies",title:"Pharmacies",component:({patient,onClickResource})=>(0,import_jsx_runtime130.jsx)(Pharmacies,{patient,onClickResource,pharmacyDialogComponent})}}var PharmaciesSection=createPharmaciesSection();function getDefaultSections(onRequestLabs){return[DemographicsSection,InsuranceSection,AllergiesSection,ProblemListSection,MedicationsSection,createLabsSection(onRequestLabs),SexualOrientationSection,SmokingStatusSection,VitalsSection,PharmaciesSection]}var import_jsx_runtime131=require("react/jsx-runtime");function PatientSummary(props){let medplum=(0,import_react_hooks53.useMedplum)(),{patient:propsPatient,onClickResource,onRequestLabs}=props,patient=(0,import_react_hooks53.useResource)(propsPatient),[createdDate,setCreatedDate]=(0,import_react90.useState)(),defaultSections=(0,import_react90.useMemo)(()=>getDefaultSections(onRequestLabs),[onRequestLabs]),sections=props.sections??defaultSections,{sectionData,loading,error}=(0,import_react_hooks53.usePatientSummaryData)(propsPatient,sections);return(0,import_react90.useEffect)(()=>{let id=(0,import_core181.resolveId)(propsPatient);id&&medplum.readHistory("Patient",id).then(history=>{let lastUpdated=history.entry?.[history.entry.length-1]?.resource?.meta?.lastUpdated;setCreatedDate(typeof lastUpdated=="string"?lastUpdated:"")}).catch(()=>{})},[propsPatient,medplum]),patient?(0,import_jsx_runtime131.jsxs)(import_core180.Flex,{direction:"column",gap:"xs",w:"100%",h:"100%",className:PatientSummary_default.panel,children:[(0,import_jsx_runtime131.jsxs)(SummaryItem,{onClick:()=>{onClickResource?.(patient)},children:[(0,import_jsx_runtime131.jsxs)(import_core180.Group,{align:"center",gap:"sm",p:16,children:[(0,import_jsx_runtime131.jsx)(ResourceAvatar,{value:patient,size:48,radius:48,style:{border:"2px solid white"}}),(0,import_jsx_runtime131.jsxs)(import_core180.Stack,{gap:0,style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime131.jsx)(import_core180.Tooltip,{label:(0,import_core181.formatHumanName)(patient.name?.[0]),position:"top-start",openDelay:650,children:(0,import_jsx_runtime131.jsx)(import_core180.Text,{fz:"h4",fw:800,truncate:!0,style:{minWidth:0},children:(0,import_core181.formatHumanName)(patient.name?.[0])})}),(()=>{let dateString=typeof createdDate=="string"&&createdDate.length>0?createdDate:void 0;if(!dateString)return null;let d=new Date(dateString);return(0,import_jsx_runtime131.jsxs)(import_core180.Text,{fz:"xs",mt:-2,fw:500,c:"gray.6",truncate:!0,style:{minWidth:0},children:["Patient since ",d.getMonth()+1,"/",d.getDate(),"/",d.getFullYear()]})})()]})]}),(0,import_jsx_runtime131.jsx)(import_core180.Divider,{})]}),(0,import_jsx_runtime131.jsxs)(import_core180.Stack,{gap:"xs",px:16,pt:12,pb:16,style:{flex:2,overflowY:"auto",minHeight:0},children:[error&&(0,import_jsx_runtime131.jsxs)(import_core180.Text,{c:"red",fz:"sm",children:["Error loading patient summary: ",error.message]}),!loading&&sections.length>0&&(0,import_jsx_runtime131.jsx)(import_jsx_runtime131.Fragment,{children:sections.map((section,index)=>{let SectionComponent=section.component;return(0,import_jsx_runtime131.jsxs)("div",{children:[(0,import_jsx_runtime131.jsx)(SectionComponent,{patient,onClickResource,results:sectionData[index]??{}}),(0,import_jsx_runtime131.jsx)(import_core180.Divider,{})]},section.key)})})]})]}):null}var ThreadInbox_default={container:"ThreadInbox_container",rightBorder:"ThreadInbox_rightBorder"};var import_jsx_runtime132=require("react/jsx-runtime");function ThreadInbox(props){let{query,threadId,subject,showPatientSummary=!1,sections,onNew,getThreadUri,uploadEnabled,onViewInDocuments,onChange,inProgressUri,completedUri,allowPatientSelection=!1}=props,navigate=(0,import_react_hooks54.useMedplumNavigate)(),[modalOpened,{open:openModal,close:closeModal}]=(0,import_hooks14.useDisclosure)(!1),currentSearch=(0,import_react91.useMemo)(()=>(0,import_core183.parseSearchRequest)(`Communication?${query}`),[query]),searchParams=(0,import_react91.useMemo)(()=>new URLSearchParams(query),[query]),itemsPerPage=Number.parseInt(searchParams.get("_count")||"20",10),currentOffset=Number.parseInt(searchParams.get("_offset")||"0",10),currentPage=Math.floor(currentOffset/itemsPerPage)+1,status=searchParams.get("status")||"in-progress",selectedParticipants=(0,import_react91.useMemo)(()=>(currentSearch.filters?.filter(f=>f.code==="recipient")??[]).flatMap(f=>f.value.split(",").filter(Boolean).map(ref=>({reference:ref}))),[currentSearch]),{loading,error,threadMessages,selectedThread,total,handleThreadStatusChange,addThreadMessage,refreshThreadMessages}=(0,import_react_hooks54.useThreadInbox)({query,threadId}),handleParticipantsChange=(0,import_react91.useCallback)(participants=>{let otherFilters=currentSearch.filters?.filter(f=>f.code!=="recipient")??[],participantRefs=participants.map(p=>p.reference).filter(Boolean),newFilters=participantRefs.length>0?[...otherFilters,{code:"recipient",operator:import_core183.Operator.EQUALS,value:participantRefs.join(",")}]:otherFilters;onChange({...currentSearch,filters:newFilters,offset:0})},[currentSearch,onChange]),skeletonTitleWidths=[80,72,68,64],skeletonSubtitleWidths=[85,78,70,60];(0,import_react91.useEffect)(()=>{error&&(0,import_notifications8.showNotification)({title:"Error",message:(0,import_core183.normalizeErrorString)(error),color:"red"})},[error]);let handleTopicStatusChangeWithErrorHandling=async newStatus=>{handleThreadStatusChange(newStatus);try{await refreshThreadMessages()}catch(error2){(0,import_notifications8.showNotification)({title:"Error",message:(0,import_core183.normalizeErrorString)(error2),color:"red"})}},handleNewTopicCompletion=message=>{addThreadMessage(message),onNew(message)};return(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[(0,import_jsx_runtime132.jsx)("div",{className:ThreadInbox_default.container,children:(0,import_jsx_runtime132.jsxs)(import_core182.Flex,{direction:"row",h:"100%",w:"100%",children:[(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",w:380,h:"100%",className:ThreadInbox_default.rightBorder,children:(0,import_jsx_runtime132.jsxs)(import_core182.Paper,{h:"100%",style:{display:"flex",flexDirection:"column"},children:[(0,import_jsx_runtime132.jsxs)(import_core182.ScrollArea,{style:{flex:1},scrollbarSize:10,type:"hover",scrollHideDelay:250,children:[(0,import_jsx_runtime132.jsxs)(import_core182.Flex,{h:64,align:"center",justify:"space-between",p:"md",children:[(0,import_jsx_runtime132.jsx)(import_core182.Tabs,{value:status,onChange:value=>{navigate(value==="in-progress"?inProgressUri:completedUri)},variant:"unstyled",className:"pill-tabs",children:(0,import_jsx_runtime132.jsxs)(import_core182.Tabs.List,{children:[(0,import_jsx_runtime132.jsx)(import_core182.Tabs.Tab,{value:"in-progress",children:"In Progress"}),(0,import_jsx_runtime132.jsx)(import_core182.Tabs.Tab,{value:"completed",children:"Completed"})]})}),(0,import_jsx_runtime132.jsxs)(import_core182.Group,{gap:"xs",children:[(0,import_jsx_runtime132.jsx)(ParticipantFilter,{selectedParticipants,onFilterChange:handleParticipantsChange}),(0,import_jsx_runtime132.jsx)(import_core182.Tooltip,{label:"New Message",position:"bottom",openDelay:500,children:(0,import_jsx_runtime132.jsx)(import_core182.ActionIcon,{radius:"xl",variant:"filled",color:"blue",size:32,onClick:openModal,children:(0,import_jsx_runtime132.jsx)(IconPlus,{size:16})})})]})]}),(0,import_jsx_runtime132.jsx)(import_core182.Divider,{}),loading?(0,import_jsx_runtime132.jsx)(import_core182.Stack,{gap:"md",p:"md",children:Array.from({length:10}).map((_,index)=>{let titleWidth=skeletonTitleWidths[index%skeletonTitleWidths.length],subtitleWidth=skeletonSubtitleWidths[index%skeletonSubtitleWidths.length];return(0,import_jsx_runtime132.jsxs)(import_core182.Flex,{gap:"sm",align:"flex-start",children:[(0,import_jsx_runtime132.jsx)(import_core182.Skeleton,{height:40,width:40,radius:"50%"}),(0,import_jsx_runtime132.jsx)(import_core182.Box,{style:{flex:1},children:(0,import_jsx_runtime132.jsxs)(import_core182.Flex,{direction:"column",gap:"xs",children:[(0,import_jsx_runtime132.jsx)(import_core182.Skeleton,{height:16,width:`${titleWidth}%`}),(0,import_jsx_runtime132.jsx)(import_core182.Skeleton,{height:14,width:`${subtitleWidth}%`})]})})]},index)})}):threadMessages.length>0&&(0,import_jsx_runtime132.jsx)(ChatList,{threads:threadMessages,selectedCommunication:selectedThread,getThreadUri}),threadMessages.length===0&&!loading&&(0,import_jsx_runtime132.jsx)(EmptyMessagesState,{})]}),!loading&&total!==void 0&&total>itemsPerPage&&(0,import_jsx_runtime132.jsx)(import_core182.Box,{p:"md",children:(0,import_jsx_runtime132.jsx)(import_core182.Center,{children:(0,import_jsx_runtime132.jsx)(import_core182.Pagination,{value:currentPage,total:Math.ceil(total/itemsPerPage),onChange:page=>{let offset=(page-1)*itemsPerPage;onChange({...currentSearch,offset})},size:"sm",siblings:1,boundaries:1})})})]})}),selectedThread?(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",style:{flex:1},h:"100%",className:ThreadInbox_default.rightBorder,children:(0,import_jsx_runtime132.jsx)(import_core182.Paper,{h:"100%",children:(0,import_jsx_runtime132.jsxs)(import_core182.Stack,{h:"100%",gap:0,children:[(0,import_jsx_runtime132.jsxs)(import_core182.Flex,{h:64,align:"center",justify:"space-between",p:"md",children:[(0,import_jsx_runtime132.jsx)(import_core182.Text,{fw:800,truncate:!0,fz:"lg",children:selectedThread.topic?.text??"Messages"}),(0,import_jsx_runtime132.jsxs)(import_core182.Menu,{position:"bottom-end",shadow:"md",children:[(0,import_jsx_runtime132.jsx)(import_core182.Menu.Target,{children:(0,import_jsx_runtime132.jsx)(import_core182.Button,{variant:"light",color:getStatusColor4(selectedThread.status),rightSection:selectedThread.status==="completed"?void 0:(0,import_jsx_runtime132.jsx)(IconChevronDown,{size:16}),radius:"xl",size:"sm",children:selectedThread.status.split("-").map(word=>word.charAt(0).toUpperCase()+word.slice(1)).join(" ")})}),selectedThread.status!=="completed"&&(0,import_jsx_runtime132.jsx)(import_core182.Menu.Dropdown,{children:(0,import_jsx_runtime132.jsx)(import_core182.Menu.Item,{onClick:()=>handleTopicStatusChangeWithErrorHandling("completed"),children:"Completed"})})]})]}),(0,import_jsx_runtime132.jsx)(import_core182.Divider,{}),(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",style:{flex:1},h:"100%",children:(0,import_jsx_runtime132.jsx)(ThreadChat,{title:"Messages",thread:selectedThread,excludeHeader:!0,uploadEnabled,onViewInDocuments},`${(0,import_core183.getReferenceString)(selectedThread)}`)})]})})}),selectedThread.subject&&showPatientSummary&&(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",w:300,h:"100%",children:(0,import_jsx_runtime132.jsx)(import_core182.ScrollArea,{p:0,h:"100%",scrollbarSize:10,type:"hover",scrollHideDelay:250,children:(0,import_jsx_runtime132.jsx)(PatientSummary,{patient:selectedThread.subject,sections},selectedThread.id)})})]}):(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",style:{flex:1},h:"100%",children:(0,import_jsx_runtime132.jsx)(NoMessages,{})})]})}),(0,import_jsx_runtime132.jsx)(NewTopicDialog,{subject,opened:modalOpened,onClose:closeModal,onSubmit:handleNewTopicCompletion,allowPatientSelection})]})}function NoMessages(){return(0,import_jsx_runtime132.jsx)(import_core182.Center,{h:"100%",w:"100%",children:(0,import_jsx_runtime132.jsxs)(import_core182.Stack,{align:"center",gap:"md",children:[(0,import_jsx_runtime132.jsx)(import_core182.ThemeIcon,{size:64,variant:"light",color:"gray",children:(0,import_jsx_runtime132.jsx)(IconMessageCircle,{size:32})}),(0,import_jsx_runtime132.jsx)(import_core182.Stack,{align:"center",gap:"xs",children:(0,import_jsx_runtime132.jsx)(import_core182.Text,{size:"sm",c:"dimmed",ta:"center",children:"Select a message from the list to view details"})})]})})}function getStatusColor4(status){return status==="completed"?"green":status==="stopped"?"red":"blue"}function EmptyMessagesState(){return(0,import_jsx_runtime132.jsx)(import_core182.Flex,{direction:"column",h:"100%",justify:"center",align:"center",children:(0,import_jsx_runtime132.jsxs)(import_core182.Stack,{align:"center",gap:"md",pt:"xl",children:[(0,import_jsx_runtime132.jsx)(IconMessageCircle,{size:64,color:"var(--mantine-color-gray-4)"}),(0,import_jsx_runtime132.jsx)(import_core182.Text,{size:"lg",c:"dimmed",fw:500,children:"No messages found"})]})})}var import_core190=require("@mantine/core"),import_notifications9=require("@mantine/notifications"),import_core191=require("@medplum/core"),import_react_hooks57=require("@medplum/react-hooks");var import_react95=require("react");var import_core185=require("@mantine/core"),import_core186=require("@medplum/core"),import_react_hooks55=require("@medplum/react-hooks"),import_react93=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var import_core184=require("@mantine/core"),import_react92=require("react");var ResourceDiffRow_default={removed:"ResourceDiffRow_removed",added:"ResourceDiffRow_added"};var import_jsx_runtime133=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_react92.useState)(isAttachmentType),toggleCollapse=()=>setIsCollapsed(prev=>!prev);return(0,import_jsx_runtime133.jsx)(import_jsx_runtime133.Fragment,{children:isAttachmentType&&!isCollapsed||!isAttachmentType?(0,import_jsx_runtime133.jsx)(import_jsx_runtime133.Fragment,{children:(0,import_jsx_runtime133.jsxs)(import_core184.Table.Tr,{children:[(0,import_jsx_runtime133.jsx)(import_core184.Table.Td,{children:name}),(0,import_jsx_runtime133.jsx)(import_core184.Table.Td,{className:ResourceDiffRow_default.removed,children:originalValue&&(0,import_jsx_runtime133.jsx)(ResourcePropertyDisplay,{path,property,propertyType:originalValue.type,value:originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime133.jsx)(import_core184.Table.Td,{className:ResourceDiffRow_default.added,children:revisedValue&&(0,import_jsx_runtime133.jsx)(ResourcePropertyDisplay,{path,property,propertyType:revisedValue.type,value:revisedValue.value,ignoreMissingValues:!0})})]})}):(0,import_jsx_runtime133.jsxs)(import_core184.Table.Tr,{children:[(0,import_jsx_runtime133.jsx)(import_core184.Table.Td,{children:name}),(0,import_jsx_runtime133.jsx)(import_core184.Table.Td,{colSpan:2,style:{textAlign:"right"},children:(0,import_jsx_runtime133.jsx)(import_core184.Button,{onClick:toggleCollapse,variant:"light",children:"Expand"})})]})})}var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime134=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=(0,import_react_hooks55.useMedplum)(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react93.useState)(!1);(0,import_react93.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react93.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core186.toTypedValue)(original)],typedRevised=[(0,import_core186.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_core186.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core186.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core186.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_runtime134.jsxs)(import_core185.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime134.jsx)(import_core185.Table.Thead,{children:(0,import_jsx_runtime134.jsxs)(import_core185.Table.Tr,{children:[(0,import_jsx_runtime134.jsx)(import_core185.Table.Th,{}),(0,import_jsx_runtime134.jsx)(import_core185.Table.Th,{children:"Before"}),(0,import_jsx_runtime134.jsx)(import_core185.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime134.jsx)(import_core185.Table.Tbody,{children:diffTable.map(row=>{let{key,...rest}=row;return(0,import_jsx_runtime134.jsx)(ResourceDiffRow,{...rest},key)})})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){try{return(0,import_core186.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}catch(err){console.warn("Failed to get element definition",{resourceType,fhirPath,err});return}}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_core186.arrayify)(input).flatMap(v=>v.value);return isArray?inputValue:inputValue[0]}var import_core187=require("@medplum/core"),import_react_hooks56=require("@medplum/react-hooks"),import_react94=require("react");var import_jsx_runtime135=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=(0,import_react_hooks56.useMedplum)(),accessPolicy=medplum.getAccessPolicy(),value=(0,import_react_hooks56.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react94.useState)(!1);(0,import_react94.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{(0,import_core187.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_react94.useMemo)(()=>value&&(0,import_core187.satisfiedAccessPolicy)(value,import_core187.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,value]);return!schemaLoaded||!value?null:(0,import_jsx_runtime135.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:value.resourceType,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues,accessPolicyResource})}var import_core188=require("@mantine/core"),import_core189=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime136=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime136.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_runtime136.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime136.jsxs)(import_core188.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime136.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime136.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime136.jsx)(import_core188.Text,{size:"sm",children:(0,import_jsx_runtime136.jsx)(ResourceName,{c:"inherit",fw:500,value:author,link:!0})}),(0,import_jsx_runtime136.jsxs)(import_core188.Text,{size:"xs",children:[(0,import_jsx_runtime136.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core189.formatDateTime)(dateTime)}),(0,import_jsx_runtime136.jsx)(import_core188.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime136.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime136.jsxs)(import_core188.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime136.jsx)(import_core188.Menu.Target,{children:(0,import_jsx_runtime136.jsx)(import_core188.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core189.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime136.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime136.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime136.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a,timelineResource)-getTime(b,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a,b){return!!b&&a.resourceType===b.resourceType&&a.id===b.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime137=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=(0,import_react_hooks57.useMedplum)(),sender=medplum.getProfile(),inputRef=(0,import_react95.useRef)(null),resource=(0,import_react_hooks57.useResource)(props.value),[history,setHistory]=(0,import_react95.useState)(),[items,setItems]=(0,import_react95.useState)([]),[countToShow,setCountToShow]=(0,import_react95.useState)(10),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react95.useRef)(items);(0,import_react95.useLayoutEffect)(()=>{itemsRef.current=items});let sortAndSetItems=(0,import_react95.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react95.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_react95.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react95.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_react95.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_notifications9.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime137.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications9.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core191.normalizeErrorString)(reason),icon:(0,import_jsx_runtime137.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function onUploadStart(){(0,import_notifications9.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications9.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications9.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core191.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime137.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}if(!resource)return(0,import_jsx_runtime137.jsx)(import_core190.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime137.jsx)(import_core190.Loader,{})});let itemsToShow=items.filter(item=>item).slice(0,countToShow);return(0,import_jsx_runtime137.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime137.jsx)(Panel,{children:(0,import_jsx_runtime137.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime137.jsxs)(import_core190.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime137.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime137.jsx)(import_core190.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime137.jsx)(import_core190.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime137.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime137.jsx)(AttachmentButton,{securityContext:(0,import_core191.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime137.jsx)(import_core190.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime137.jsx)(IconCloudUpload,{size:16})})})]})})}),itemsToShow.map(item=>{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_runtime137.jsx)(HistoryTimelineItem,{history,resource:item,popupMenuItems:menu},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime137.jsx)(AuditEventTimelineItem,{resource:item,popupMenuItems:menu},key);case"Communication":return(0,import_jsx_runtime137.jsx)(CommunicationTimelineItem,{resource:item,popupMenuItems:menu},key);case"DiagnosticReport":return(0,import_jsx_runtime137.jsx)(DiagnosticReportTimelineItem,{resource:item,popupMenuItems:menu},key);case"Media":return(0,import_jsx_runtime137.jsx)(MediaTimelineItem,{resource:item,popupMenuItems:menu},key);default:return(0,import_jsx_runtime137.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime137.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}}),countToShow<items.length&&(0,import_jsx_runtime137.jsx)(import_core190.Group,{justify:"center",pb:"lg",children:(0,import_jsx_runtime137.jsx)(import_core190.Button,{onClick:()=>setCountToShow(countToShow+10),children:"Show More"})})]})}function HistoryTimelineItem(props){let{history,resource,...rest}=props,previous=getPrevious(history,resource);return previous?(0,import_jsx_runtime137.jsx)(TimelineItem,{resource,padding:!0,...rest,children:(0,import_jsx_runtime137.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime137.jsxs)(TimelineItem,{resource,padding:!0,...rest,children:[(0,import_jsx_runtime137.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime137.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_runtime137.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime137.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_runtime137.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime137.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime137.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime137.jsx)(import_core190.ScrollArea,{children:(0,import_jsx_runtime137.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime137.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:props.popupMenuItems,children:(0,import_jsx_runtime137.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_runtime138=require("react/jsx-runtime");function DefaultResourceTimeline(props){let{resource,...rest}=props;return(0,import_jsx_runtime138.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_core192=require("@medplum/core");var import_jsx_runtime139=require("react/jsx-runtime");function EncounterTimeline(props){let{encounter,...rest}=props;return(0,import_jsx_runtime139.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_core192.createReference)(resource),subject:resource.subject,sender:(0,import_core192.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core192.createReference)(resource),subject:resource.subject,operator:(0,import_core192.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core209=require("@mantine/core"),import_core210=require("@medplum/core"),import_react_hooks59=require("@medplum/react-hooks"),import_react100=require("react");var import_core193=require("@medplum/core");var import_jsx_runtime140=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core193.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_runtime140.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core207=require("@mantine/core"),import_core208=require("@medplum/core"),import_react_hooks58=require("@medplum/react-hooks");var import_react99=require("react");var import_core194=require("@mantine/core"),import_jsx_runtime141=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime141.jsxs)(import_core194.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime141.jsxs)(import_core194.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime141.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime141.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime141.jsx)(import_core194.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime141.jsx)(import_core194.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core196=require("@mantine/core"),import_core197=require("@medplum/core"),import_react96=require("react");var import_core195=require("@medplum/core");var import_jsx_runtime142=require("react/jsx-runtime"),searchParamToOperators={string:[import_core195.Operator.EQUALS,import_core195.Operator.NOT,import_core195.Operator.CONTAINS,import_core195.Operator.EXACT],fulltext:[import_core195.Operator.EQUALS,import_core195.Operator.NOT,import_core195.Operator.CONTAINS,import_core195.Operator.EXACT],token:[import_core195.Operator.EQUALS,import_core195.Operator.NOT,import_core195.Operator.TEXT],reference:[import_core195.Operator.EQUALS,import_core195.Operator.NOT],numeric:[import_core195.Operator.EQUALS,import_core195.Operator.NOT_EQUALS,import_core195.Operator.GREATER_THAN,import_core195.Operator.LESS_THAN,import_core195.Operator.GREATER_THAN_OR_EQUALS,import_core195.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core195.Operator.EQUALS,import_core195.Operator.NOT_EQUALS,import_core195.Operator.GREATER_THAN,import_core195.Operator.LESS_THAN,import_core195.Operator.GREATER_THAN_OR_EQUALS,import_core195.Operator.LESS_THAN_OR_EQUALS],date:[import_core195.Operator.EQUALS,import_core195.Operator.NOT_EQUALS,import_core195.Operator.GREATER_THAN,import_core195.Operator.LESS_THAN,import_core195.Operator.GREATER_THAN_OR_EQUALS,import_core195.Operator.LESS_THAN_OR_EQUALS,import_core195.Operator.STARTS_AFTER,import_core195.Operator.ENDS_BEFORE,import_core195.Operator.APPROXIMATELY],datetime:[import_core195.Operator.EQUALS,import_core195.Operator.NOT_EQUALS,import_core195.Operator.GREATER_THAN,import_core195.Operator.LESS_THAN,import_core195.Operator.GREATER_THAN_OR_EQUALS,import_core195.Operator.LESS_THAN_OR_EQUALS,import_core195.Operator.STARTS_AFTER,import_core195.Operator.ENDS_BEFORE,import_core195.Operator.APPROXIMATELY],uri:[import_core195.Operator.EQUALS,import_core195.Operator.NOT,import_core195.Operator.ABOVE,import_core195.Operator.BELOW]},operatorNames={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",sw:"starts with",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",present:"present",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addNext24HoursFilter(definition,field){let now=new Date,endTime=new Date(now.getTime()+1440*60*1e3);return addDateFilterBetween(definition,field,now,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core195.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core195.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_core195.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_core195.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.replaceAll(/([A-Z])/g," $1"),tmp=tmp.replaceAll(/[-_]/g," "),tmp=tmp.replaceAll(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core195.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?(0,import_jsx_runtime142.jsx)(MedplumLink,{to:`/${resource.resourceType}/${resource.id}`,children:resource.id}):key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core195.formatDateTime)(resource.meta?.lastUpdated):`${resource.resourceType}.${field.name}`===field.elementDefinition?.path?renderPropertyValue(resource,field.elementDefinition):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_runtime142.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core195.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime142.jsx)(import_jsx_runtime142.Fragment,{children:value.map((v,index)=>(0,import_jsx_runtime142.jsx)(ResourcePropertyDisplay,{propertyType:v.type,value:v.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime143=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react96.useRef)(!1),[state,setState]=(0,import_react96.useState)({search:JSON.parse((0,import_core197.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react96.useState)(!1);(0,import_react96.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react96.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core197.getDataType)(resourceType),searchParams=(0,import_core197.getSearchParameters)(resourceType);return(0,import_core197.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime143.jsx)(import_core196.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_runtime143.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime143.jsxs)(import_core196.Stack,{children:[(0,import_jsx_runtime143.jsx)(import_core196.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_runtime143.jsx)(import_core196.Group,{justify:"flex-end",children:(0,import_jsx_runtime143.jsx)(import_core196.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_core200=require("@mantine/core"),import_core201=require("@medplum/core");var import_react97=require("react");var import_core198=require("@mantine/core"),import_core199=require("@medplum/core");var import_jsx_runtime144=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core199.getSearchParameterDetails)(props.resourceType,props.searchParam),name=props.name??"filter-value";switch(details.type){case import_core199.SearchParameterType.REFERENCE:return(0,import_jsx_runtime144.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_core199.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime144.jsx)(import_core198.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_core199.SearchParameterType.DATE:return(0,import_jsx_runtime144.jsx)(import_core198.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_core199.SearchParameterType.DATETIME:return(0,import_jsx_runtime144.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core199.SearchParameterType.NUMBER:return(0,import_jsx_runtime144.jsx)(import_core198.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_core199.SearchParameterType.QUANTITY:return(0,import_jsx_runtime144.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_runtime144.jsx)(import_core198.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:Number.parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime145=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react97.useState)((0,import_core201.deepClone)(props.search)),searchRef=(0,import_react97.useRef)(search);(0,import_react97.useLayoutEffect)(()=>{searchRef.current=search}),(0,import_react97.useEffect)(()=>{setSearch((0,import_core201.deepClone)(props.search))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}let resourceType=props.search.resourceType,searchParams=(0,import_core201.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime145.jsx)(import_core200.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime145.jsxs)(Form,{onSubmit:()=>props.onOk(searchRef.current),children:[(0,import_jsx_runtime145.jsxs)("div",{children:[(0,import_jsx_runtime145.jsxs)("table",{children:[(0,import_jsx_runtime145.jsxs)("colgroup",{children:[(0,import_jsx_runtime145.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime145.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime145.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime145.jsx)("col",{style:{width:40}})]}),(0,import_jsx_runtime145.jsx)("thead",{children:(0,import_jsx_runtime145.jsxs)("tr",{children:[(0,import_jsx_runtime145.jsx)("th",{children:"Field"}),(0,import_jsx_runtime145.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime145.jsx)("th",{children:"Value"}),(0,import_jsx_runtime145.jsx)("th",{})]})}),(0,import_jsx_runtime145.jsx)("tbody",{children:filters.map((filter,index)=>(0,import_jsx_runtime145.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_runtime145.jsx)(ArrayAddButton,{propertyDisplayName:"Filter",onClick:()=>onAddFilter({})})]}),(0,import_jsx_runtime145.jsx)(import_core200.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime145.jsx)(SubmitButton,{children:"OK"})})]})})}function FilterRowInput(props){let value=props.value;function setFilterCode(newCode){props.onChange({code:newCode,operator:import_core201.Operator.EQUALS,value:""})}function setFilterOperator(newOperator){props.onChange({code:value.code,operator:newOperator,value:""})}function setFilterValue(newFilterValue){props.onChange({code:value.code,operator:value.operator,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime145.jsxs)("tr",{children:[(0,import_jsx_runtime145.jsx)("td",{children:(0,import_jsx_runtime145.jsx)(import_core200.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_runtime145.jsx)("td",{children:operators&&(0,import_jsx_runtime145.jsx)(import_core200.NativeSelect,{"data-testid":`${props.id}-filter-operation`,defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]},`${props.id}-filter-value-${props.value.code}`)}),(0,import_jsx_runtime145.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime145.jsx)(SearchFilterValueInput,{name:`${props.id}-filter-value`,resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue},`${props.id}-filter-value-${props.value.code}-${props.value.operator}`)}),(0,import_jsx_runtime145.jsx)("td",{children:props.onDelete&&(0,import_jsx_runtime145.jsx)(import_core200.ActionIcon,{variant:"outline",color:"red",radius:"xl","aria-label":"Delete filter",onClick:props.onDelete,children:(0,import_jsx_runtime145.jsx)(IconX,{style:{width:"70%",height:"70%"},stroke:1.5})})})]})}var import_core202=require("@mantine/core"),import_react98=require("react");var import_jsx_runtime146=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react98.useState)(props.defaultValue??"");if(!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime146.jsx)(import_core202.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime146.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime146.jsxs)(import_core202.Grid,{children:[(0,import_jsx_runtime146.jsx)(import_core202.Grid.Col,{span:10,children:(0,import_jsx_runtime146.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime146.jsx)(import_core202.Grid.Col,{span:2,children:(0,import_jsx_runtime146.jsx)(import_core202.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core203=require("@medplum/core");var import_jsx_runtime147=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core203.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core203.Operator.EQUALS||filter.operator===import_core203.Operator.NOT_EQUALS))return(0,import_jsx_runtime147.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core203.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core203.SearchParameterType.DATETIME)return(0,import_jsx_runtime147.jsx)(import_jsx_runtime147.Fragment,{children:(0,import_core203.formatDateTime)(filter.value)})}return(0,import_jsx_runtime147.jsx)(import_jsx_runtime147.Fragment,{children:filter.value})}var import_core204=require("@mantine/core"),import_core205=require("@medplum/core");var import_jsx_runtime148=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_runtime148.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime148.jsx)(import_core204.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime148.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime148.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime148.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime148.jsx)(TextFilterSubMenu,{...props});case"token":return(0,import_jsx_runtime148.jsx)(TokenFilterSubMenu,{...props});case"uri":return(0,import_jsx_runtime148.jsx)(UriFilterSubMenu,{...props});default:return(0,import_jsx_runtime148.jsxs)(import_jsx_runtime148.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNext24HoursFilter(props.search,code)),children:"Next 24 Hours"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.TEXT),children:"Text contains..."}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function UriFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime148.jsxs)(import_core204.Menu.Dropdown,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core205.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime148.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime148.jsxs)(import_jsx_runtime148.Fragment,{children:[(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Divider,{}),(0,import_jsx_runtime148.jsx)(import_core204.Menu.Item,{leftSection:(0,import_jsx_runtime148.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}function getPaginationControlProps(controlName){switch(controlName){case"next":return{"aria-label":"Next page"};case"previous":return{"aria-label":"Previous page"};case"first":return{"aria-label":"First page"};case"last":return{"aria-label":"Last page"};default:return{}}}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core206=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_core206.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core206.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core206.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_core206.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime149=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change");__publicField(this,"definition");this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load");__publicField(this,"response");this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click");__publicField(this,"resource");__publicField(this,"browserEvent");this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=(0,import_react_hooks58.useMedplum)(),[outcome,setOutcome]=(0,import_react99.useState)(),{search,onLoad}=props,[memoizedSearch,setMemoizedSearch]=(0,import_react99.useState)(search);(0,import_core208.deepEquals)(search,memoizedSearch)||setMemoizedSearch(search);let[state,setState]=(0,import_react99.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react99.useRef)(state);(0,import_react99.useLayoutEffect)(()=>{stateRef.current=state});let total=memoizedSearch.total??"accurate",loadResults=(0,import_react99.useCallback)(options=>{setOutcome(void 0),medplum.requestSchema(memoizedSearch.resourceType).then(()=>medplum.search(memoizedSearch.resourceType,(0,import_core208.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_core208.normalizeOperationOutcome)(reason))})},[medplum,memoizedSearch,total,onLoad]),refreshResults=(0,import_react99.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react99.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(){if(!state.searchResponse?.entry||state.searchResponse.entry.length===0)return!1;for(let e of state.searchResponse.entry)if(e.resource?.id&&!state.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=isAuxClick(e);!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if(outcome)return(0,import_jsx_runtime149.jsx)(OperationOutcomeAlert,{outcome});if(!(0,import_core208.isDataTypeLoaded)(memoizedSearch.resourceType))return(0,import_jsx_runtime149.jsx)(import_core207.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime149.jsx)(import_core207.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_runtime149.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime149.jsxs)(import_core207.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime149.jsxs)(import_core207.Group,{gap:2,children:[(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Fields"}),(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0,dialogOpenTime:Date.now()}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0,dialogOpenTime:Date.now()}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime149.jsx)(import_core207.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime149.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime149.jsxs)(import_core207.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime149.jsxs)(import_core207.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_runtime149.jsx)(import_core207.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime149.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime149.jsxs)(import_core207.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime149.jsxs)(import_core207.Table.Thead,{children:[(0,import_jsx_runtime149.jsxs)(import_core207.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime149.jsx)(import_core207.Table.Th,{children:(0,import_jsx_runtime149.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_runtime149.jsx)(import_core207.Table.Th,{children:(0,import_jsx_runtime149.jsxs)(import_core207.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime149.jsx)(import_core207.Menu.Target,{children:(0,import_jsx_runtime149.jsx)(import_core207.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime149.jsxs)(import_core207.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime149.jsx)(import_core207.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime149.jsx)(import_core207.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime149.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime149.jsx)(SearchPopupMenu,{search:memoizedSearch,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter,dialogOpenTime:Date.now()})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime149.jsxs)(import_core207.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime149.jsx)(import_core207.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime149.jsx)(import_core207.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime149.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:memoizedSearch.filters})},field.name))]})]}),(0,import_jsx_runtime149.jsx)(import_core207.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime149.jsxs)(import_core207.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_runtime149.jsx)(import_core207.Table.Td,{children:(0,import_jsx_runtime149.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_runtime149.jsx)(import_core207.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),!resources?.length&&(0,import_jsx_runtime149.jsx)(Container,{children:(0,import_jsx_runtime149.jsx)(import_core207.Center,{style:{height:150},children:(0,import_jsx_runtime149.jsx)(import_core207.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime149.jsx)(import_core207.Center,{m:"md",p:"md",children:(0,import_jsx_runtime149.jsx)(import_core207.Pagination,{value:getPage(memoizedSearch),total:getTotalPages(memoizedSearch,lastResult),onChange:newPage=>emitSearchChange(setPage(memoizedSearch,newPage)),getControlProps:getPaginationControlProps})}),(0,import_jsx_runtime149.jsx)(SearchFieldEditor,{search:memoizedSearch,visible:state.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}},`search-field-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime149.jsx)(SearchFilterEditor,{search:memoizedSearch,visible:state.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}},`search-filter-editor-${state.dialogOpenTime}`),(0,import_jsx_runtime149.jsx)(SearchExportDialog,{visible:state.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}},`search-export-dialog-${state.dialogOpenTime}`),(0,import_jsx_runtime149.jsx)(SearchFilterValueDialog,{visible:state.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(memoizedSearch,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},`search-filter-dialog-${state.dialogOpenTime}`)]})}function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p=>p.code===f.code));return filters.length===0?(0,import_jsx_runtime149.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime149.jsx)(import_jsx_runtime149.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime149.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime149.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_core208.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core208.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_runtime150=require("react/jsx-runtime");function FhirPathTable(props){let medplum=(0,import_react_hooks59.useMedplum)(),[schemaLoaded,setSchemaLoaded]=(0,import_react100.useState)(!1),[outcome,setOutcome]=(0,import_react100.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react100.useState)(),[selected,setSelected]=(0,import_react100.useState)({});(0,import_react100.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core210.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selected};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=response?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=response?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selected[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_react100.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime150.jsx)(import_core209.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime150.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime150.jsxs)(import_core209.Table,{children:[(0,import_jsx_runtime150.jsx)(import_core209.Table.Thead,{children:(0,import_jsx_runtime150.jsxs)(import_core209.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime150.jsx)(import_core209.Table.Th,{children:(0,import_jsx_runtime150.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_runtime150.jsx)(import_core209.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime150.jsx)(import_core209.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime150.jsxs)(import_core209.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime150.jsx)(import_core209.Table.Td,{children:(0,import_jsx_runtime150.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_runtime150.jsx)(import_core209.Table.Td,{children:(0,import_jsx_runtime150.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime150.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime150.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime150.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime150.jsx)(import_core209.Button,{onClick:()=>props.onBulk(Object.keys(selected)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react100.memo)(FhirPathTable);var import_core211=require("@mantine/core");var InfoBar_default={root:"InfoBar_root",entry:"InfoBar_entry",key:"InfoBar_key",value:"InfoBar_value"};var import_jsx_runtime151=require("react/jsx-runtime");function InfoBar(props){return(0,import_jsx_runtime151.jsx)(import_core211.ScrollArea,{children:(0,import_jsx_runtime151.jsx)("div",{className:InfoBar_default.root,children:props.children})})}InfoBar.Entry=function(props){return(0,import_jsx_runtime151.jsx)("div",{className:InfoBar_default.entry,children:props.children})};InfoBar.Key=function(props){return(0,import_jsx_runtime151.jsx)("div",{className:InfoBar_default.key,children:props.children})};InfoBar.Value=function(props){return(0,import_jsx_runtime151.jsx)("div",{className:InfoBar_default.value,children:props.children})};var import_core212=require("@mantine/core"),import_core213=require("@medplum/core"),import_react_hooks60=require("@medplum/react-hooks"),import_react101=require("react");var LinkTabs_default={list:"LinkTabs_list",link:"LinkTabs_link"};var import_jsx_runtime152=require("react/jsx-runtime");function LinkTabs(props){let{baseUrl,tabs:tabDefinitions,children,...rest}=props,tabs=normalizeTabDefinitions(tabDefinitions),navigate=(0,import_react_hooks60.useMedplumNavigate)(),[currentTab,setCurrentTab]=(0,import_react101.useState)(()=>{let segment=import_core213.locationUtils.getPathname().split("/").pop();if(segment){let segmentLower=segment.toLowerCase(),matched=tabs.find(t=>t.value.split(/[?#]/)[0].toLowerCase()===segmentLower);if(matched)return matched.value}return tabs[0].value});function onTabChange(newTabName){newTabName=newTabName||tabs[0].value,setCurrentTab(newTabName),navigate(`${baseUrl}/${newTabName}`)}return(0,import_jsx_runtime152.jsxs)(import_core212.Tabs,{value:currentTab,onChange:onTabChange,...rest,children:[(0,import_jsx_runtime152.jsx)(import_core212.Tabs.List,{className:LinkTabs_default.list,children:tabs.map(t=>(0,import_jsx_runtime152.jsx)(import_core212.Tabs.Tab,{value:t.value,children:(0,import_jsx_runtime152.jsx)(import_core212.Anchor,{className:LinkTabs_default.link,href:`${baseUrl}/${t.value}`,onClick:onLinkClick,children:t.label})},t.value))}),children]})}function normalizeTabDefinitions(tabs){return tabs.map(t=>(0,import_core213.isString)(t)?{label:t,value:t.toLowerCase()}:t)}function onLinkClick(e){isAuxClick(e)||e.preventDefault()}var import_core216=require("@mantine/core"),import_react_hooks61=require("@medplum/react-hooks");var import_core214=require("@mantine/core"),import_core215=require("@medplum/core");var import_jsx_runtime153=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime153.jsx)(import_core214.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime153.jsxs)(import_core214.Group,{children:[group.measureScore&&(0,import_jsx_runtime153.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime153.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime153.jsxs)(import_jsx_runtime153.Fragment,{children:[(0,import_jsx_runtime153.jsx)(import_core214.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime153.jsx)(import_core214.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_core215.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core215.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime153.jsxs)(import_core214.Box,{children:[(0,import_jsx_runtime153.jsx)(import_core214.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime153.jsx)(import_core214.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime153.jsxs)(import_core214.Box,{children:[(0,import_jsx_runtime153.jsx)(import_core214.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime153.jsx)(import_core214.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime153.jsx)(import_core214.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime153.jsx)(import_core214.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime153.jsx)(import_core214.Flex,{justify:"center",children:(0,import_jsx_runtime153.jsxs)(import_core214.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_runtime153.jsx)(import_jsx_runtime153.Fragment,{children:unit==="%"?(0,import_jsx_runtime153.jsx)(import_core214.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime153.jsx)(import_core214.Flex,{justify:"center",children:(0,import_jsx_runtime153.jsx)(import_core214.Text,{fw:700,fz:18,children:(0,import_jsx_runtime153.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime153.jsx)(import_core214.Flex,{h:120,align:"center",children:(0,import_jsx_runtime153.jsx)(import_core214.Title,{order:3,children:(0,import_jsx_runtime153.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_runtime154=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=(0,import_react_hooks61.useResource)(props.measureReport),[measure]=(0,import_react_hooks61.useSearchOne)("Measure",{url:report?.measure});return report?(0,import_jsx_runtime154.jsxs)(import_core216.Box,{children:[measure&&(0,import_jsx_runtime154.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime154.jsx)(import_core216.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime154.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core217=require("@mantine/core"),import_react_hooks62=require("@medplum/react-hooks"),import_jsx_runtime155=require("react/jsx-runtime");function NotificationIcon(props){let{resourceType,countCriteria,subscriptionCriteria}=props,unreadCount=(0,import_react_hooks62.useNotificationCount)({resourceType,countCriteria,subscriptionCriteria}),result=props.iconComponent;return props.onClick&&(result=(0,import_jsx_runtime155.jsx)(import_core217.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":props.label,onClick:props.onClick,children:result})),props.tooltip&&(result=(0,import_jsx_runtime155.jsx)(import_core217.Tooltip,{label:props.tooltip,children:result})),unreadCount>0&&(result=(0,import_jsx_runtime155.jsx)(import_core217.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:result})),result}var import_core218=require("@mantine/core"),import_notifications10=require("@mantine/notifications"),import_core219=require("@medplum/core"),import_react_hooks63=require("@medplum/react-hooks");var import_react102=require("react");var import_jsx_runtime156=require("react/jsx-runtime"),NOTIFICATION_ID="patient-accounts",NOTIFICATION_TITLE="Patient Accounts",ACCOUNT_TARGET_TYPES=["Organization","HealthcareService","CareTeam"];function PatientAccountsForm(props){let{patient}=props,medplum=(0,import_react_hooks63.useMedplum)(),isAdmin=medplum.isProjectAdmin()||medplum.isSuperAdmin(),originalAccounts=(0,import_react102.useMemo)(()=>(0,import_core219.extractAccountReferences)(patient.meta)??[],[patient.meta]),[pendingAccounts,setPendingAccounts]=(0,import_react102.useState)(originalAccounts),[confirmModalOpen,setConfirmModalOpen]=(0,import_react102.useState)(!1),[propagate,setPropagate]=(0,import_react102.useState)(!0),[saving,setSaving]=(0,import_react102.useState)(!1),changes=(0,import_react102.useMemo)(()=>{let result=[];for(let account of pendingAccounts)originalAccounts.some(o=>o.reference===account.reference)||result.push({reference:account,type:"addition"});for(let account of originalAccounts)pendingAccounts.some(p=>p.reference===account.reference)||result.push({reference:account,type:"removal"});return result},[originalAccounts,pendingAccounts]),hasChanges=changes.length>0,handleAddAccount=(0,import_react102.useCallback)(value=>{value?.reference&&(pendingAccounts.some(a=>a.reference===value.reference)||setPendingAccounts(prev=>[...prev,value]))},[pendingAccounts]),handleRemoveAccount=(0,import_react102.useCallback)(referenceString=>{setPendingAccounts(prev=>prev.filter(a=>a.reference!==referenceString))},[]),handleSave=(0,import_react102.useCallback)(async()=>{let patientId=patient.id;if(!patientId){import_notifications10.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:"Cannot update accounts: Patient resource has no ID.",icon:(0,import_jsx_runtime156.jsx)(IconX,{size:"1rem"}),autoClose:!1,withCloseButton:!0});return}setSaving(!0),setConfirmModalOpen(!1);let url=medplum.fhirUrl("Patient",patientId,"$set-accounts"),parameters={resourceType:"Parameters",parameter:[...pendingAccounts.map(account=>({name:"accounts",valueReference:{reference:account.reference}})),{name:"propagate",valueBoolean:propagate}]};import_notifications10.notifications.show({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,loading:!0,message:propagate?"Saving account changes and propagating to compartment...":"Saving account changes...",autoClose:!1,withCloseButton:!1});try{let headers={};propagate&&(headers.Prefer="respond-async"),await medplum.post(url,parameters,void 0,{headers}),medplum.invalidateUrl(medplum.fhirUrl("Patient",patientId)),import_notifications10.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"green",message:propagate?"Account changes saved. Compartment updates are being applied.":"Account changes saved.",icon:(0,import_jsx_runtime156.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0}),props.onSaved?.()}catch(err){import_notifications10.notifications.update({id:NOTIFICATION_ID,title:NOTIFICATION_TITLE,color:"red",message:(0,import_core219.normalizeErrorString)(err),icon:(0,import_jsx_runtime156.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}finally{setSaving(!1)}},[medplum,patient,pendingAccounts,propagate,props]);return isAdmin?(0,import_jsx_runtime156.jsxs)(import_jsx_runtime156.Fragment,{children:[(0,import_jsx_runtime156.jsxs)(import_core218.Stack,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Title,{order:3,children:"Current Accounts"}),pendingAccounts.length===0?(0,import_jsx_runtime156.jsx)(import_core218.Text,{c:"dimmed",children:"No accounts assigned to this patient."}):(0,import_jsx_runtime156.jsxs)(import_core218.Table,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Table.Thead,{children:(0,import_jsx_runtime156.jsxs)(import_core218.Table.Tr,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Table.Th,{children:"Type"}),(0,import_jsx_runtime156.jsx)(import_core218.Table.Th,{children:"Account"}),(0,import_jsx_runtime156.jsx)(import_core218.Table.Th,{})]})}),(0,import_jsx_runtime156.jsx)(import_core218.Table.Tbody,{children:pendingAccounts.map(account=>(0,import_jsx_runtime156.jsxs)(import_core218.Table.Tr,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Table.Td,{children:(0,import_jsx_runtime156.jsx)(AccountTypeBadge,{reference:account})}),(0,import_jsx_runtime156.jsx)(import_core218.Table.Td,{children:(0,import_jsx_runtime156.jsx)(ResourceBadge,{value:account,link:!0})}),(0,import_jsx_runtime156.jsx)(import_core218.Table.Td,{children:(0,import_jsx_runtime156.jsx)(import_core218.ActionIcon,{variant:"subtle",color:"red","aria-label":`Remove ${account.reference}`,onClick:()=>handleRemoveAccount(account.reference),children:(0,import_jsx_runtime156.jsx)(IconX,{size:16})})})]},account.reference))})]}),(0,import_jsx_runtime156.jsx)(import_core218.Divider,{}),(0,import_jsx_runtime156.jsx)(import_core218.Title,{order:4,children:"Add Account"}),(0,import_jsx_runtime156.jsx)(ReferenceInput,{name:"newAccount",placeholder:"Search for Organization, HealthcareService, or CareTeam...",targetTypes:ACCOUNT_TARGET_TYPES,onChange:value=>{value&&handleAddAccount(value)}}),hasChanges&&(0,import_jsx_runtime156.jsxs)(import_jsx_runtime156.Fragment,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Divider,{}),(0,import_jsx_runtime156.jsx)(import_core218.Title,{order:4,children:"Pending Changes"}),(0,import_jsx_runtime156.jsx)(import_core218.Stack,{gap:"xs",children:changes.map(change=>(0,import_jsx_runtime156.jsxs)(import_core218.Group,{gap:"xs",children:[change.type==="addition"?(0,import_jsx_runtime156.jsx)(import_core218.Badge,{color:"green",variant:"light",leftSection:(0,import_jsx_runtime156.jsx)(IconPlus,{size:12}),children:"Add"}):(0,import_jsx_runtime156.jsx)(import_core218.Badge,{color:"red",variant:"light",leftSection:(0,import_jsx_runtime156.jsx)(IconMinus,{size:12}),children:"Remove"}),(0,import_jsx_runtime156.jsx)(ResourceBadge,{value:change.reference,link:!0})]},`${change.type}-${change.reference.reference}`))})]}),(0,import_jsx_runtime156.jsx)(import_core218.Box,{children:(0,import_jsx_runtime156.jsx)(import_core218.Button,{disabled:!hasChanges||saving,onClick:()=>setConfirmModalOpen(!0),children:"Save Changes"})})]}),(0,import_jsx_runtime156.jsx)(import_core218.Modal,{opened:confirmModalOpen,onClose:()=>setConfirmModalOpen(!1),title:"Confirm Account Changes",size:"md",keepMounted:!0,children:(0,import_jsx_runtime156.jsxs)(import_core218.Stack,{children:[(0,import_jsx_runtime156.jsxs)(import_core218.Text,{children:["The following changes will be applied to Patient"," ",(0,import_jsx_runtime156.jsxs)("strong",{children:[patient.name?.[0]?.given?.join(" ")," ",patient.name?.[0]?.family]}),":"]}),changes.filter(c=>c.type==="addition").length>0&&(0,import_jsx_runtime156.jsxs)(import_core218.Box,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Text,{fw:600,c:"green",children:"Adding:"}),(0,import_jsx_runtime156.jsx)(import_core218.Stack,{gap:"xs",mt:"xs",children:changes.filter(c=>c.type==="addition").map(c=>(0,import_jsx_runtime156.jsxs)(import_core218.Group,{gap:"xs",children:[(0,import_jsx_runtime156.jsx)(IconPlus,{size:14,color:"green"}),(0,import_jsx_runtime156.jsx)(ResourceBadge,{value:c.reference})]},c.reference.reference))})]}),changes.filter(c=>c.type==="removal").length>0&&(0,import_jsx_runtime156.jsxs)(import_core218.Box,{children:[(0,import_jsx_runtime156.jsx)(import_core218.Text,{fw:600,c:"red",children:"Removing:"}),(0,import_jsx_runtime156.jsx)(import_core218.Stack,{gap:"xs",mt:"xs",children:changes.filter(c=>c.type==="removal").map(c=>(0,import_jsx_runtime156.jsxs)(import_core218.Group,{gap:"xs",children:[(0,import_jsx_runtime156.jsx)(IconMinus,{size:14,color:"red"}),(0,import_jsx_runtime156.jsx)(ResourceBadge,{value:c.reference})]},c.reference.reference))})]}),(0,import_jsx_runtime156.jsx)(import_core218.Checkbox,{label:"Propagate changes to all resources in this patient's compartment",checked:propagate,onChange:event=>setPropagate(event.currentTarget.checked)}),(0,import_jsx_runtime156.jsxs)(import_core218.Group,{justify:"right",mt:"md",children:[(0,import_jsx_runtime156.jsx)(import_core218.Button,{variant:"default",onClick:()=>setConfirmModalOpen(!1),children:"Cancel"}),(0,import_jsx_runtime156.jsx)(import_core218.Button,{onClick:handleSave,loading:saving,children:"Confirm"})]})]})})]}):(0,import_jsx_runtime156.jsx)(import_core218.Alert,{color:"blue",title:"Admin access required",children:"You need project admin access to manage patient account assignments."})}function AccountTypeBadge({reference}){let type=reference.reference?.split("/")[0]??"Unknown";return(0,import_jsx_runtime156.jsx)(import_core218.Badge,{variant:"light",color:{Organization:"blue",HealthcareService:"teal",CareTeam:"violet"}[type]??"gray",size:"sm",children:type})}var import_core220=require("@mantine/core"),import_notifications11=require("@mantine/notifications"),import_core221=require("@medplum/core"),import_react_hooks64=require("@medplum/react-hooks");var import_react103=require("react");var import_jsx_runtime157=require("react/jsx-runtime"),NOTIFICATION_ID2="patient-export",NOTIFICATION_TITLE2="Patient Export",formats={everything:{operation:"$everything",extension:"json",contentType:import_core221.ContentType.FHIR_JSON},summary:{operation:"$summary",extension:"json",contentType:import_core221.ContentType.FHIR_JSON},ccda:{operation:"$ccda-export",extension:"xml",contentType:import_core221.ContentType.CDA_XML},ccdaReferral:{operation:"$ccda-export",type:"referral",extension:"xml",contentType:import_core221.ContentType.CDA_XML}};function PatientExportForm(props){let medplum=(0,import_react_hooks64.useMedplum)(),{patient}=props,handleSubmit=(0,import_react103.useCallback)(async data2=>{let patientId=(0,import_core221.resolveId)(patient),format=data2.format,{operation,type,contentType,extension}=formats[format],url=medplum.fhirUrl("Patient",patientId,operation),params={};type&&(params.type=type),data2.author&&(params.author={reference:data2.author}),data2.authoredOn&&(params.authoredOn=convertLocalToIso(data2.authoredOn)),data2.startDate&&(params.start=data2.startDate),data2.endDate&&(params.end=data2.endDate),import_notifications11.notifications.show({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,loading:!0,message:"Exporting...",autoClose:!1,withCloseButton:!1});try{let response=await medplum.post(url,params,void 0,{cache:"no-cache",headers:{Accept:contentType}}),fileName=`Patient-export-${patientId}-${new Date().toISOString().replaceAll(":","-")}.${extension}`;saveData(response,fileName,contentType),import_notifications11.notifications.update({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,color:"green",message:"Done",icon:(0,import_jsx_runtime157.jsx)(IconCheck,{size:"1rem"}),loading:!1,autoClose:!0,withCloseButton:!0})}catch(err){import_notifications11.notifications.update({id:NOTIFICATION_ID2,title:NOTIFICATION_TITLE2,color:"red",message:(0,import_core221.normalizeErrorString)(err),icon:(0,import_jsx_runtime157.jsx)(IconX,{size:"1rem"}),loading:!1,autoClose:!1,withCloseButton:!0})}},[medplum,patient]);return(0,import_jsx_runtime157.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime157.jsxs)(import_core220.Stack,{children:[(0,import_jsx_runtime157.jsx)(FormSection,{title:"Export Format",description:"Required",withAsterisk:!0,children:(0,import_jsx_runtime157.jsx)(import_core220.SegmentedControl,{name:"format",data:[{label:"FHIR Everything",value:"everything"},{label:"Patient Summary",value:"summary"},{label:"C-CDA",value:"ccda"},{label:"C-CDA Referral",value:"ccdaReferral"}],fullWidth:!0})}),(0,import_jsx_runtime157.jsx)(FormSection,{title:"Author",description:"Optional author for composition. Default value is current user.",children:(0,import_jsx_runtime157.jsx)(ReferenceInput,{name:"author",placeholder:"Author",targetTypes:["Organization","Practitioner","PractitionerRole"]})}),(0,import_jsx_runtime157.jsx)(FormSection,{title:"Authored On",description:"Optional date for composition authored on. Default value is current date.",children:(0,import_jsx_runtime157.jsx)(DateTimeInput,{name:"authoredOn",placeholder:"Authored on"})}),(0,import_jsx_runtime157.jsx)(FormSection,{title:"Start Date",description:"The start date of care. If no start date is provided, all records prior to the end date are in scope.",children:(0,import_jsx_runtime157.jsx)(DateTimeInput,{name:"startDate",placeholder:"Start date"})}),(0,import_jsx_runtime157.jsx)(FormSection,{title:"End Date",description:"The end date of care. If no end date is provided, all records subsequent to the start date are in scope.",children:(0,import_jsx_runtime157.jsx)(DateTimeInput,{name:"endDate",placeholder:"End date"})}),(0,import_jsx_runtime157.jsx)(import_core220.Group,{justify:"right",children:(0,import_jsx_runtime157.jsx)(SubmitButton,{children:"Request Export"})})]})})}function saveData(data2,fileName,contentType){let content=typeof data2=="string"?data2:JSON.stringify(data2,null,2),blob=new Blob([content],{type:contentType}),url=window.URL.createObjectURL(blob),a=document.createElement("a");document.body.appendChild(a),a.style.display="none",a.href=url,a.download=fileName,a.click(),window.URL.revokeObjectURL(url)}var import_core222=require("@medplum/core"),import_react_hooks65=require("@medplum/react-hooks");function getDefaultColor(patient){if(patient.gender==="male")return"blue";if(patient.gender==="female")return"pink"}var import_jsx_runtime158=require("react/jsx-runtime");function PatientHeader(props){let patient=(0,import_react_hooks65.useResource)(props.patient);return patient?(0,import_jsx_runtime158.jsxs)(InfoBar,{children:[(0,import_jsx_runtime158.jsx)(ResourceAvatar,{value:patient,size:"lg",color:getDefaultColor(patient)}),(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:"Name"}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:(0,import_jsx_runtime158.jsx)(MedplumLink,{to:patient,fw:500,children:patient.name?(0,import_jsx_runtime158.jsx)(HumanNameDisplay,{value:patient.name[0],options:{use:!1}}):"[blank]"})})]}),patient.birthDate&&(0,import_jsx_runtime158.jsxs)(import_jsx_runtime158.Fragment,{children:[(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:"DoB"}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:patient.birthDate})]}),(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:"Age"}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:(0,import_core222.calculateAgeString)(patient.birthDate)})]})]}),patient.gender&&(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:"Gender"}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:patient.gender})]}),patient.address&&(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:"State"}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:patient.address[0]?.state})]}),patient.identifier?.map(identifier=>(0,import_jsx_runtime158.jsxs)(InfoBar.Entry,{children:[(0,import_jsx_runtime158.jsx)(InfoBar.Key,{children:identifier?.system}),(0,import_jsx_runtime158.jsx)(InfoBar.Value,{children:identifier?.value})]},`${identifier?.system}-${identifier?.value}`))]}):null}var import_core223=require("@mantine/core"),import_notifications12=require("@mantine/notifications"),import_core224=require("@medplum/core"),import_react104=require("react");var PharmacyDialog_default={pharmacyItem:"PharmacyDialog_pharmacyItem",pharmacyItemSelected:"PharmacyDialog_pharmacyItemSelected"};var import_jsx_runtime159=require("react/jsx-runtime");function getPharmacyKey(pharmacy,index){return pharmacy.identifier?.[0]?.value||`pharmacy-${index}`}function SearchForm({onSearch,searching}){return(0,import_jsx_runtime159.jsx)("form",{onSubmit:e=>{e.preventDefault();let formData=new FormData(e.currentTarget);onSearch(formData)},children:(0,import_jsx_runtime159.jsxs)(import_core223.Stack,{gap:"md",children:[(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"name",label:"Pharmacy Name",placeholder:"Enter pharmacy name (min 3 chars)"}),(0,import_jsx_runtime159.jsxs)(import_core223.Group,{grow:!0,children:[(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"city",label:"City",placeholder:"City (min 3 chars)"}),(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"state",label:"State",placeholder:"State (min 3 chars)"})]}),(0,import_jsx_runtime159.jsxs)(import_core223.Group,{grow:!0,children:[(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"zip",label:"Zip Code",placeholder:"Zip code (min 3 chars)"}),(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"phoneOrFax",label:"Phone or Fax",placeholder:"Phone or fax number"})]}),(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"address",label:"Address",placeholder:"Street address (min 3 chars)"}),(0,import_jsx_runtime159.jsx)(import_core223.TextInput,{name:"ncpdpID",label:"NCPDP ID",placeholder:"National Council for Prescription Drug Programs ID"}),(0,import_jsx_runtime159.jsx)(import_core223.Button,{type:"submit",loading:searching,children:"Search"})]})})}function PharmacyItem({pharmacy,pharmacyKey,isSelected,onSelect}){return(0,import_jsx_runtime159.jsx)(import_core223.Box,{p:"sm",className:isSelected?PharmacyDialog_default.pharmacyItemSelected:PharmacyDialog_default.pharmacyItem,onClick:onSelect,children:(0,import_jsx_runtime159.jsx)(import_core223.Radio,{value:pharmacyKey,label:(0,import_jsx_runtime159.jsxs)(import_core223.Box,{children:[(0,import_jsx_runtime159.jsx)(import_core223.Text,{fw:500,size:"sm",children:pharmacy.name}),pharmacy.address?.[0]&&(0,import_jsx_runtime159.jsx)(import_core223.Text,{size:"xs",c:"dimmed",children:(0,import_core224.formatAddress)(pharmacy.address[0])}),pharmacy.telecom?.find(t=>t.system==="phone")&&(0,import_jsx_runtime159.jsxs)(import_core223.Text,{size:"xs",c:"dimmed",children:["Phone: ",pharmacy.telecom.find(t=>t.system==="phone")?.value]}),pharmacy.telecom?.find(t=>t.system==="fax")&&(0,import_jsx_runtime159.jsxs)(import_core223.Text,{size:"xs",c:"dimmed",children:["Fax: ",pharmacy.telecom.find(t=>t.system==="fax")?.value]})]})})},pharmacyKey)}function SearchResults({searchResults,selectedPharmacy,onSelectPharmacy,setAsPrimary,onSetAsPrimary,onAddFavorite,onClose,adding}){return(0,import_jsx_runtime159.jsxs)(import_core223.Box,{mt:"xl",children:[(0,import_jsx_runtime159.jsxs)(import_core223.Text,{fw:600,mb:"md",children:["Search Results (",searchResults.length,")"]}),(0,import_jsx_runtime159.jsx)(import_core223.Radio.Group,{value:selectedPharmacy?getPharmacyKey(selectedPharmacy,searchResults.indexOf(selectedPharmacy)):"",onChange:value=>{let selected=searchResults.find((p,i)=>getPharmacyKey(p,i)===value);selected&&onSelectPharmacy(selected)},children:(0,import_jsx_runtime159.jsx)(import_core223.Stack,{gap:"sm",children:searchResults.map((pharmacy,index)=>{let pharmacyKey=getPharmacyKey(pharmacy,index),isSelected=selectedPharmacy?getPharmacyKey(selectedPharmacy,searchResults.indexOf(selectedPharmacy))===pharmacyKey:!1;return(0,import_jsx_runtime159.jsx)(PharmacyItem,{pharmacy,pharmacyKey,isSelected,onSelect:()=>onSelectPharmacy(pharmacy)},pharmacyKey)})})}),(0,import_jsx_runtime159.jsxs)(import_core223.Flex,{mt:"lg",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime159.jsx)(import_core223.Checkbox,{label:"Set as primary pharmacy",checked:setAsPrimary,onChange:e=>onSetAsPrimary(e.currentTarget.checked)}),(0,import_jsx_runtime159.jsxs)(import_core223.Group,{children:[(0,import_jsx_runtime159.jsx)(import_core223.Button,{variant:"subtle",onClick:onClose,children:"Cancel"}),(0,import_jsx_runtime159.jsx)(import_core223.Button,{onClick:onAddFavorite,disabled:!selectedPharmacy,loading:adding,children:"Add to Favorites"})]})]})]})}function PharmacyDialog(props){let{patient,onSubmit,onClose,onSearch,onAddToFavorites}=props,[searchResults,setSearchResults]=(0,import_react104.useState)([]),[searching,setSearching]=(0,import_react104.useState)(!1),[selectedPharmacy,setSelectedPharmacy]=(0,import_react104.useState)(),[setAsPrimary,setSetAsPrimary]=(0,import_react104.useState)(!1),[adding,setAdding]=(0,import_react104.useState)(!1),handleSearch=(0,import_react104.useCallback)(async formData=>{let searchParams={name:formData.get("name")||void 0,city:formData.get("city")||void 0,state:formData.get("state")||void 0,zip:formData.get("zip")||void 0,address:formData.get("address")||void 0,phoneOrFax:formData.get("phoneOrFax")||void 0,ncpdpID:formData.get("ncpdpID")||void 0},cleanParams=Object.fromEntries(Object.entries(searchParams).filter(([_,v])=>typeof v=="string"&&v.trim()!==""));if(Object.keys(cleanParams).length===0){(0,import_notifications12.showNotification)({color:"yellow",title:"Search Required",message:"Please enter at least one search criterion"});return}setSearching(!0),setSelectedPharmacy(void 0);try{let results=await onSearch(cleanParams);setSearchResults(results),results.length===0&&(0,import_notifications12.showNotification)({color:"blue",title:"No Results",message:"No pharmacies found matching your search criteria"})}catch(error){(0,import_notifications12.showNotification)({color:"red",title:"Search Error",message:(0,import_core224.normalizeErrorString)(error)})}finally{setSearching(!1)}},[onSearch]),handleAddFavorite=(0,import_react104.useCallback)(async()=>{if(!(!selectedPharmacy||!patient.id)){setAdding(!0);try{let response=await onAddToFavorites({patientId:patient.id,pharmacy:selectedPharmacy,setAsPrimary});response.success?((0,import_notifications12.showNotification)({color:"green",title:"Success",message:response.message}),onSubmit(response.organization||selectedPharmacy)):(0,import_notifications12.showNotification)({color:"red",title:"Error",message:response.message})}catch(error){(0,import_notifications12.showNotification)({color:"red",title:"Error",message:(0,import_core224.normalizeErrorString)(error)})}finally{setAdding(!1)}}},[selectedPharmacy,patient.id,setAsPrimary,onAddToFavorites,onSubmit]);return(0,import_jsx_runtime159.jsxs)(import_core223.Box,{children:[(0,import_jsx_runtime159.jsx)(SearchForm,{onSearch:formData=>handleSearch(formData).catch(console.error),searching}),searching&&(0,import_jsx_runtime159.jsx)(import_core223.Flex,{justify:"center",mt:"xl",children:(0,import_jsx_runtime159.jsx)(import_core223.Loader,{})}),searchResults.length>0&&!searching&&(0,import_jsx_runtime159.jsx)(SearchResults,{searchResults,selectedPharmacy,onSelectPharmacy:setSelectedPharmacy,setAsPrimary,onSetAsPrimary:setSetAsPrimary,onAddFavorite:handleAddFavorite,onClose,adding})]})}var import_core225=require("@mantine/core"),import_core226=require("@medplum/core");var import_jsx_runtime160=require("react/jsx-runtime");function summaryResourceListSection(options){return{key:options.key,title:options.title,searches:[{key:options.key,resourceType:options.search.resourceType,patientParam:options.search.patientParam,query:options.search.query}],component:context=>(0,import_jsx_runtime160.jsx)(ResourceListDisplay,{options,resources:context.results[options.key]??[],context})}}function ResourceListDisplay(props){let{options,context}=props,resources=[...props.resources];return options.filter&&(resources=resources.filter(options.filter)),options.sort&&resources.sort(options.sort),(0,import_jsx_runtime160.jsx)(CollapsibleSection,{title:options.title,onAdd:options.onAdd,children:resources.length>0?(0,import_jsx_runtime160.jsx)(import_core225.Flex,{direction:"column",gap:8,children:resources.map(resource=>{let displayString=options.getDisplayString?options.getDisplayString(resource):(0,import_core226.getDisplayString)(resource),status=options.getStatus?.(resource),secondaryText=options.getSecondaryText?.(resource);return(0,import_jsx_runtime160.jsx)(SummaryItem,{onClick:()=>context.onClickResource?.(resource),children:(0,import_jsx_runtime160.jsxs)(import_core225.Box,{children:[(0,import_jsx_runtime160.jsx)(import_core225.Text,{fw:500,className:SummaryItem_default.itemText,children:displayString}),(status||secondaryText)&&(0,import_jsx_runtime160.jsxs)(import_core225.Group,{mt:2,gap:4,children:[status&&(0,import_jsx_runtime160.jsx)(StatusBadge,{color:status.color,variant:"light",status:status.label}),secondaryText&&(0,import_jsx_runtime160.jsx)(import_core225.Text,{size:"xs",fw:500,c:"dimmed",children:secondaryText})]})]})},resource.id)})}):(0,import_jsx_runtime160.jsx)(import_core225.Text,{children:"(none)"})})}var import_core227=require("@medplum/core"),import_react105=require("react");var import_jsx_runtime161=require("react/jsx-runtime");function PatientTimeline(props){let{patient,...rest}=props,loadTimelineResources=(0,import_react105.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("ClinicalImpression",{subject:ref,_count}),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_runtime161.jsx)(ResourceTimeline,{value:patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core227.createReference)(resource),sender:(0,import_core227.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core227.createReference)(resource),operator:(0,import_core227.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core228=require("@mantine/core"),import_core229=require("@medplum/core"),import_react_hooks66=require("@medplum/react-hooks");var import_react106=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing"};var import_jsx_runtime162=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=(0,import_react_hooks66.useMedplum)(),defaultValue2=(0,import_react_hooks66.useResource)(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react106.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react106.useState)(),[hoverKey,setHoverKey]=(0,import_react106.useState)(),[value,setValue]=(0,import_react106.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}if((0,import_react106.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react106.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(prevValue=>({...prevValue,[property]:newValue}))}return(0,import_jsx_runtime162.jsx)("div",{children:(0,import_jsx_runtime162.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime162.jsx)(import_core228.TextInput,{label:"Plan Title",py:"md",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime162.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),(0,import_jsx_runtime162.jsx)(SubmitButton,{children:"Save"})]})})}function ActionArrayBuilder(props){function changeAction(changedAction){props.onChange(props.actions.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...props.actions,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(props.actions.filter(i=>i!==removedAction))}return(0,import_jsx_runtime162.jsxs)(import_core228.Stack,{gap:"md",className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime162.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_runtime162.jsx)("div",{children:(0,import_jsx_runtime162.jsx)(import_core228.Button,{variant:"outline",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}return(0,import_jsx_runtime162.jsx)("div",{onClick,onMouseOver:onHover,onFocus:onHover,children:(0,import_jsx_runtime162.jsx)(ActionEditor,{action,onChange:props.onChange,selectedKey:props.selectedKey,hoverKey:props.hoverKey,onRemove:props.onRemove})})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react106.useState)(),medplum=(0,import_react_hooks66.useMedplum)(),[loading,setLoading]=(0,import_react106.useState)(!1),[resource,setResource]=(0,import_react106.useState)(),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_react106.useEffect)(()=>{(async()=>{if(!action.definitionCanonical)return;setLoading(!0);let resource2=await medplum.readCanonical(["Questionnaire","ActivityDefinition"],action.definitionCanonical);setActionType(getInitialActionType(resource2)),setResource(resource2),setLoading(!1)})().catch(console.error)},[action.definitionCanonical,medplum]),loading?(0,import_jsx_runtime162.jsx)(import_core228.Loader,{}):(0,import_jsx_runtime162.jsxs)(import_core228.Paper,{"data-testid":action.id,className,p:0,radius:"sm",withBorder:!0,children:[(0,import_jsx_runtime162.jsxs)(import_core228.Flex,{w:"100%",p:"xs",bg:"gray.0",gap:"md",align:"center",justify:"space-between",children:[(0,import_jsx_runtime162.jsx)(import_core228.TextInput,{w:"100%",name:`actionTitle-${action.id}`,defaultValue:action.title,placeholder:"Title",onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime162.jsx)(import_core228.CloseButton,{"data-testid":"close-button",onClick:props.onRemove})]}),editing&&(0,import_jsx_runtime162.jsxs)(import_core228.Stack,{gap:"xl",p:"md",children:[(0,import_jsx_runtime162.jsx)(import_core228.Box,{children:(0,import_jsx_runtime162.jsx)(import_core228.TextInput,{label:"Task Description",placeholder:"Enter task description",name:`actionDescription-${action.id}`,defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)})}),(0,import_jsx_runtime162.jsx)(import_core228.Box,{children:(0,import_jsx_runtime162.jsx)(import_core228.NativeSelect,{label:"Type of Action",value:actionType,onChange:e=>{let value=e.currentTarget.value==="standard"?void 0:e.currentTarget.value;setActionType(value),props.onChange({...props.action,definitionCanonical:value==="standard"?void 0:props.action.definitionCanonical})},data:[{value:"standard",label:"Standard task"},{value:"questionnaire",label:"Task with Questionnaire"},{value:"activitydefinition",label:"Task with Activity Definition"}]})}),actionType==="questionnaire"&&(0,import_jsx_runtime162.jsxs)(import_core228.Stack,{gap:0,children:[(0,import_jsx_runtime162.jsxs)(import_core228.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime162.jsx)(import_core228.Text,{fw:600,children:"Select questionnaire"}),(0,import_jsx_runtime162.jsx)(import_core228.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime162.jsxs)(import_core228.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_runtime162.jsx)(import_core228.Anchor,{href:"/Questionnaire",target:"_blank",c:"blue",children:"questionnaires list"})]}),(0,import_jsx_runtime162.jsx)(ActionResourceTypeBuilder,{resource,resourceType:"Questionnaire",action,onChange:props.onChange,placeholder:"Search for questionnaire"})]}),actionType==="activitydefinition"&&(0,import_jsx_runtime162.jsxs)(import_core228.Stack,{gap:0,children:[(0,import_jsx_runtime162.jsxs)(import_core228.Group,{gap:0,mb:"xs",children:[(0,import_jsx_runtime162.jsx)(import_core228.Text,{fw:600,children:"Select activity definition"}),(0,import_jsx_runtime162.jsx)(import_core228.Text,{c:"red",children:"*"})]}),(0,import_jsx_runtime162.jsxs)(import_core228.Text,{size:"sm",c:"dimmed",mb:"sm",children:["ActivityDefinition.kind resource to be shown in the task in Encounter view. You can create new one from"," ",(0,import_jsx_runtime162.jsx)(import_core228.Anchor,{href:"/ActivityDefinition",target:"_blank",c:"blue",children:"activity definitions list"})]}),(0,import_jsx_runtime162.jsx)(ActionResourceTypeBuilder,{resource,resourceType:"ActivityDefinition",action,onChange:props.onChange,placeholder:"Search for activity definition"})]})]})]})}function ActionResourceTypeBuilder(props){let{id}=props.action,{resource}=props;return(0,import_jsx_runtime162.jsx)(ResourceInput,{name:id,placeholder:props.placeholder,resourceType:props.resourceType,defaultValue:resource,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:"url"in newValue?newValue.url:void 0,definitionUri:"url"in newValue?void 0:(0,import_core229.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function getInitialActionType(resource){return resource===void 0?"standard":resource.resourceType.toLowerCase()}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=Number.parseInt(existing.substring(3),10);Number.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_core230=require("@mantine/core"),import_core231=require("@medplum/core"),import_react_hooks67=require("@medplum/react-hooks");var import_react107=require("react");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_runtime163=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=(0,import_react_hooks67.useMedplum)(),defaultValue2=(0,import_react_hooks67.useResource)(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react107.useState)(!1),[value,setValue]=(0,import_react107.useState)(),[selectedKey,setSelectedKey]=(0,import_react107.useState)(),[hoverKey,setHoverKey]=(0,import_react107.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react107.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react107.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=(questionnaire2,disableSubmit)=>{setValue(questionnaire2),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire2)};return!schemaLoaded||!value?null:(0,import_jsx_runtime163.jsx)("div",{children:(0,import_jsx_runtime163.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime163.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime163.jsx)(SubmitButton,{children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource4=(0,import_core231.isResource)(props.item),isContainer=isResource4||item.type===import_react_hooks67.QuestionnaireItemType.group,linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react107.useRef)(props.item);(0,import_react107.useLayoutEffect)(()=>{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_runtime163.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime163.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[isResource4&&(0,import_jsx_runtime163.jsx)(import_core230.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource4&&(0,import_jsx_runtime163.jsx)(import_core230.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime163.jsx)(ReferenceProfiles,{item,onChange:updateItem}),(0,import_react_hooks67.isChoiceQuestion)(item)&&(0,import_jsx_runtime163.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[resource.title&&(0,import_jsx_runtime163.jsx)(import_core230.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime163.jsx)("div",{className:QuestionnaireBuilder_default.preserveBreaks,children:item.text}),!isContainer&&(0,import_jsx_runtime163.jsx)(QuestionnaireFormItem,{item,index:0,required:!1,responseItem:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime163.jsx)("div",{children:(0,import_jsx_runtime163.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_runtime163.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[(0,import_jsx_runtime163.jsx)(import_core230.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime163.jsx)(import_core230.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_runtime163.jsx)("div",{children:linkId})}),!isResource4&&(0,import_jsx_runtime163.jsx)(import_core230.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime163.jsxs)(import_core230.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime163.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime163.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime163.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId2(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId2(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource4&&(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource4&&(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core231.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime163.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime163.jsx)(import_core230.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime163.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime163.jsxs)(import_core230.Box,{display:"flex",children:[(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId2()}]})},children:"Add choice"}),(0,import_jsx_runtime163.jsx)(import_core230.Space,{w:"lg"}),(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime163.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime163.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime163.jsx)("div",{children:(0,import_jsx_runtime163.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_runtime163.jsx)("div",{children:(0,import_jsx_runtime163.jsx)(import_core230.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=(0,import_react_hooks67.getQuestionnaireItemReferenceTargetTypes)(props.item)??[];return(0,import_jsx_runtime163.jsxs)(import_jsx_runtime163.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime163.jsxs)(import_core230.Group,{children:[(0,import_jsx_runtime163.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime163.jsx)(import_core230.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange((0,import_react_hooks67.setQuestionnaireItemReferenceTargetTypes)(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId2=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId2(){return"id-"+nextId2++}function ensureQuestionnaireKeys(questionnaire2){return{...questionnaire2,id:questionnaire2.id||generateId2(),item:ensureQuestionnaireItemKeys(questionnaire2.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId2=Math.max(nextId2,Number.parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,Number.parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId2(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId2()}))}function createPage(){return{id:generateId2(),linkId:generateLinkId("s"),type:"group",text:"New Page",extension:[{url:import_react_hooks67.QUESTIONNAIRE_ITEM_CONTROL_URL,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_core234=require("@mantine/core"),import_react_hooks68=require("@medplum/react-hooks");var import_core232=require("@mantine/core"),import_core233=require("@medplum/core"),import_react108=require("react");var import_jsx_runtime164=require("react/jsx-runtime");function QuestionnaireResponseItemDisplay(props){let{item}=props,{text:title,answer,item:nestedAnswers}=item,renderContent=(0,import_react108.useMemo)(()=>answer&&answer.length>0?(0,import_jsx_runtime164.jsx)(import_jsx_runtime164.Fragment,{children:answer.map((ans,index)=>(0,import_jsx_runtime164.jsx)(AnswerDisplay,{answer:ans},`answer-${index}`))}):nestedAnswers&&nestedAnswers.length>0?(0,import_jsx_runtime164.jsx)(import_jsx_runtime164.Fragment,{children:nestedAnswers.map((nestedAnswer,index)=>(0,import_jsx_runtime164.jsx)(QuestionnaireResponseItemDisplay,{item:nestedAnswer},`nested-${nestedAnswer.id??index}`))}):(0,import_jsx_runtime164.jsx)(import_core232.Text,{c:"dimmed",children:"No answer"}),[answer,nestedAnswers]);return(0,import_jsx_runtime164.jsxs)(import_core232.Stack,{gap:0,pb:"xs",children:[(0,import_jsx_runtime164.jsx)(import_core232.Text,{size:"lg",fw:600,id:item.id?`question-${item.id}`:void 0,component:"h3",children:title}),renderContent]})}function AnswerDisplay({answer}){if(!answer)return(0,import_jsx_runtime164.jsx)(import_core232.Text,{c:"dimmed",children:"Invalid answer"});let validEntries=Object.entries(answer).filter(([,value2])=>value2!=null);if(validEntries.length===0)return(0,import_jsx_runtime164.jsx)(import_core232.Text,{c:"dimmed",children:"No valid answer data"});let[key,value]=validEntries[0];switch(key){case"valueInteger":return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:value});case"valueQuantity":return(0,import_jsx_runtime164.jsx)(QuantityDisplay,{value});case"valueString":return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:value});case"valueCoding":return(0,import_jsx_runtime164.jsx)(CodeableConceptDisplay,{value:{coding:[value]}});case"valueRange":return(0,import_jsx_runtime164.jsx)(RangeDisplay,{value});case"valueDateTime":return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:(0,import_core233.formatDate)(value)});case"valueBoolean":return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:value?"True":"False"});case"valueReference":return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:value.display??value.reference});default:return(0,import_jsx_runtime164.jsx)(import_core232.Text,{children:value.toString()})}}var import_jsx_runtime165=require("react/jsx-runtime");function QuestionnaireResponseDisplay(props){let questionnaireResponse=(0,import_react_hooks68.useResource)(props.questionnaireResponse);return(0,import_jsx_runtime165.jsx)(import_core234.Stack,{gap:0,children:questionnaireResponse?.item?.map((item,index)=>(0,import_jsx_runtime165.jsx)(QuestionnaireResponseItemDisplay,{item},`item-${item.id??index}`))})}var import_core235=require("@mantine/core"),import_core236=require("@medplum/core");var import_react109=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime166=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_react109.useState)([]),[groupId,setGroupId]=(0,import_react109.useState)(1),[intervalId,setIntervalId]=(0,import_react109.useState)(1);return(0,import_react109.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime166.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime166.jsx)(import_core235.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime166.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime166.jsx)(import_core235.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_runtime166.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime166.jsx)(import_core235.Group,{justify:"flex-end",children:(0,import_jsx_runtime166.jsx)(SubmitButton,{children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g=>g.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g=>g.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime166.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime166.jsxs)(import_core235.Stack,{gap:"lg",children:[(0,import_jsx_runtime166.jsx)(import_core235.Group,{justify:"flex-end",children:(0,import_jsx_runtime166.jsx)(import_core235.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_runtime166.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime166.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime166.jsx)(import_core235.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime166.jsxs)(import_core235.Stack,{gap:"xs",children:[(0,import_jsx_runtime166.jsxs)(import_core235.Group,{children:[(0,import_jsx_runtime166.jsx)(import_core235.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_runtime166.jsx)(import_core235.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_runtime166.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime166.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_runtime166.jsx)(import_core235.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_runtime166.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props,age=intervalGroup.filters.age??{},ageWithDefaults={low:age.low?.unit?age.low:{...age.low,unit:"years",system:"http://unitsofmeasure.org"},high:age.high?.unit?age.high:{...age.high,unit:"years",system:"http://unitsofmeasure.org"}};return(0,import_jsx_runtime166.jsxs)(import_core235.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime166.jsx)(import_core235.Group,{children:(0,import_jsx_runtime166.jsx)(import_core235.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_runtime166.jsxs)(import_core235.Group,{gap:"xs",children:[(0,import_jsx_runtime166.jsx)(import_core235.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime166.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime166.jsx)(RangeInput,{path:"",name:`age-${intervalGroup.id}`,defaultValue:ageWithDefaults,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime166.jsx)(import_core235.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_runtime166.jsx)(import_core235.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||[],nextId3=Math.max(...intervals.map(interval=>{let existingNum=Number.parseInt(interval.id?.substring(3)||"",10);return Number.isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId3)||(nextId3=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId3++}`}))},setIntervalId(nextId3),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_core236.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core236.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_core236.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_core237=require("@mantine/core"),import_core238=require("@medplum/core"),import_react_hooks69=require("@medplum/react-hooks");var import_react110=require("react");var import_jsx_runtime167=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=(0,import_react_hooks69.useMedplum)(),requestGroup=(0,import_react_hooks69.useResource)(props.value),[startedLoading,setStartedLoading]=(0,import_react110.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react110.useState)();if((0,import_react110.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_runtime167.jsx)(import_core237.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_runtime167.jsxs)(import_react110.Fragment,{children:[(0,import_jsx_runtime167.jsx)(import_core237.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime167.jsx)(IconCheckbox,{}):(0,import_jsx_runtime167.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime167.jsxs)(import_core237.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime167.jsx)(import_core237.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime167.jsx)("div",{children:action.description}),(0,import_jsx_runtime167.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime167.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core238.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime167.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime167.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime167.jsxs)(import_core237.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime167.jsx)(import_core237.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime167.jsx)(import_core237.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_core238.getReferenceString)(entry.resource))return entry.resource}}var import_react_hooks70=require("@medplum/react-hooks"),import_react111=require("react");var import_core239=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=Math.trunc(size/2),diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k=-d;k<=d;k+=2){let kmiddle=middle+k,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k===-d||k!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N&&j<M&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N&&j>=M)return diagonal[kmiddle]}diagonal[middle+d-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=(history.entry??[]).filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:(0,import_core239.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b)=>a.meta.lastUpdated.localeCompare(b.meta.lastUpdated));if(!versions.length)return[];let table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k=0;k<revision.revised.lines.length;k++)table.splice(position+k,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime168=require("react/jsx-runtime");function ResourceBlame(props){let medplum=(0,import_react_hooks70.useMedplum)(),[value,setValue]=(0,import_react111.useState)(props.history);if((0,import_react111.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_runtime168.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime168.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime168.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime168.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime168.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime168.jsxs)(import_jsx_runtime168.Fragment,{children:[(0,import_jsx_runtime168.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime168.jsx)(ResourceName,{value:row.meta.author,link:!0,fz:"xs"})}),(0,import_jsx_runtime168.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime168.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),fz:"xs",children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime168.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime168.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime168.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core240=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime169=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_core240.stringify)(originalResource,!0).match(/[^\r\n]+/g)??["{","}"],revised=(0,import_core240.stringify)(revisedResource,!0).match(/[^\r\n]+/g)??["{","}"],deltas=diff(original,revised);return(0,import_jsx_runtime169.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime169.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime169.jsxs)(import_jsx_runtime169.Fragment,{children:["...",(0,import_jsx_runtime169.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime169.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
110
+ `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime169.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
111
+ `)}),"...",(0,import_jsx_runtime169.jsx)("br",{})]})}var import_core241=require("@mantine/core"),import_core242=require("@medplum/core"),import_react_hooks71=require("@medplum/react-hooks");var import_react112=require("react");var ResourceForm_default={splitButton:"ResourceForm_splitButton",menuControl:"ResourceForm_menuControl"};var import_jsx_runtime170=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=(0,import_react_hooks71.useMedplum)(),defaultValue2=(0,import_react_hooks71.useResource)(props.defaultValue),resourceType=defaultValue2?.resourceType,[schemaLoaded,setSchemaLoaded]=(0,import_react112.useState)(!1),[value,setValue]=(0,import_react112.useState)(),accessPolicy=medplum.getAccessPolicy(),theme=(0,import_core241.useMantineTheme)();(0,import_react112.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core242.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(!0);let modifiedDefaultValue=(0,import_core242.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_react112.useMemo)(()=>defaultValue2&&(0,import_core242.satisfiedAccessPolicy)(defaultValue2,import_core242.AccessPolicyInteraction.READ,accessPolicy),[accessPolicy,defaultValue2]),canWrite=(0,import_react112.useMemo)(()=>medplum.isSuperAdmin()||!accessPolicy||!(0,import_core242.isPopulated)(value?.resourceType)?!0:(0,import_core242.canWriteResourceType)(accessPolicy,value?.resourceType),[medplum,accessPolicy,value?.resourceType]);return!schemaLoaded||!value?(0,import_jsx_runtime170.jsx)("div",{children:"Loading..."}):canWrite?(0,import_jsx_runtime170.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime170.jsxs)(import_core241.Stack,{mb:"xl",children:[(0,import_jsx_runtime170.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime170.jsx)(import_core241.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime170.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime170.jsx)(import_core241.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime170.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:resourceType,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl,accessPolicyResource}),(0,import_jsx_runtime170.jsxs)(import_core241.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",gap:0,children:[(0,import_jsx_runtime170.jsx)(import_core241.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_runtime170.jsxs)(import_core241.Menu,{transitionProps:{transition:"pop"},position:"bottom-end",withinPortal:!0,children:[(0,import_jsx_runtime170.jsx)(import_core241.Menu.Target,{children:(0,import_jsx_runtime170.jsx)(import_core241.ActionIcon,{variant:"filled",color:theme.primaryColor,size:36,className:ResourceForm_default.menuControl,"aria-label":"More actions",children:(0,import_jsx_runtime170.jsx)(IconChevronDown,{size:14,stroke:1.5})})}),(0,import_jsx_runtime170.jsxs)(import_core241.Menu.Dropdown,{children:[props.onPatch&&(0,import_jsx_runtime170.jsx)(import_core241.Menu.Item,{leftSection:(0,import_jsx_runtime170.jsx)(IconEdit,{size:14,stroke:1.5}),onClick:()=>{props.onPatch(value)},children:"Patch"}),props.onDelete&&(0,import_jsx_runtime170.jsx)(import_core241.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime170.jsx)(IconTrash,{size:14,stroke:1.5,color:"red"}),onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})]})]}):(0,import_jsx_runtime170.jsxs)(import_core241.Alert,{color:"red",title:"Permission denied",icon:(0,import_jsx_runtime170.jsx)(IconAlertCircle,{}),children:["Your access level prevents you from editing and creating ",value.resourceType," resources."]})}var import_core243=require("@mantine/core"),import_core244=require("@medplum/core"),import_react_hooks72=require("@medplum/react-hooks"),import_react113=require("react");var import_jsx_runtime171=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=(0,import_react_hooks72.useMedplum)(),[value,setValue]=(0,import_react113.useState)(props.history);return(0,import_react113.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_runtime171.jsxs)(import_core243.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime171.jsx)(import_core243.Table.Thead,{children:(0,import_jsx_runtime171.jsxs)(import_core243.Table.Tr,{children:[(0,import_jsx_runtime171.jsx)(import_core243.Table.Th,{children:"Author"}),(0,import_jsx_runtime171.jsx)(import_core243.Table.Th,{children:"Date"}),(0,import_jsx_runtime171.jsx)(import_core243.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime171.jsx)(import_core243.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime171.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime171.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime171.jsxs)(import_core243.Table.Tr,{children:[(0,import_jsx_runtime171.jsx)(import_core243.Table.Td,{children:(0,import_jsx_runtime171.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime171.jsx)(import_core243.Table.Td,{children:(0,import_core244.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime171.jsx)(import_core243.Table.Td,{children:(0,import_jsx_runtime171.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime171.jsx)(import_core243.Table.Tr,{children:(0,import_jsx_runtime171.jsx)(import_core243.Table.Td,{colSpan:3,children:(0,import_core244.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core245=require("@mantine/core"),import_notifications13=require("@mantine/notifications"),import_core246=require("@medplum/core"),import_react_hooks73=require("@medplum/react-hooks"),import_react114=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime172=require("react/jsx-runtime");function BaseScheduler(props){let[month,setMonth]=(0,import_react114.useState)(getStartMonth),[date,setDate]=(0,import_react114.useState)(),[options,setOptions]=(0,import_react114.useState)(),[selectedOption,setSelectedOption]=(0,import_react114.useState)(),{fetchOptions,onSelectOption}=props;(0,import_react114.useEffect)(()=>{let active=!0;async function doSearch(){let start=getStart2(month),end=getEnd2(month),options2=await fetchOptions({start,end});active&&setOptions(options2)}return doSearch().catch(console.error),()=>{active=!1}},[fetchOptions,month]);let handleSelectOption=(0,import_react114.useCallback)(option=>{setSelectedOption(option),onSelectOption?.(...option)},[onSelectOption]),filteredOptions=(0,import_react114.useMemo)(()=>{if(!date||!options)return[];let start=date.getTime(),end=start+1440*60*1e3,seen=new Set;return options.filter(([_,optionDate])=>{let optionTime=optionDate.getTime();return seen.has(optionTime)?!1:(seen.add(optionTime),start<=optionTime&&optionTime<end)})},[date,options]);return options?(0,import_jsx_runtime172.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime172.jsxs)("div",{className:Scheduler_default.info,children:[props.actor&&(0,import_jsx_runtime172.jsx)(ResourceAvatar,{value:props.actor,size:"xl"}),props.actor&&(0,import_jsx_runtime172.jsx)(import_core245.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime172.jsx)(ResourceName,{value:props.actor})}),(0,import_jsx_runtime172.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime172.jsx)("p",{children:date.toLocaleDateString()}),selectedOption&&(0,import_jsx_runtime172.jsx)("p",{children:formatTime(selectedOption[1])})]}),(0,import_jsx_runtime172.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime172.jsxs)("div",{children:[(0,import_jsx_runtime172.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime172.jsx)(CalendarDateInput,{availableDates:options.map(opt=>opt[1]),onChangeMonth:setMonth,onClick:setDate})]}),date&&!selectedOption&&(0,import_jsx_runtime172.jsxs)("div",{children:[(0,import_jsx_runtime172.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime172.jsx)(import_core245.Stack,{children:filteredOptions.map(option=>(0,import_jsx_runtime172.jsx)("div",{children:(0,import_jsx_runtime172.jsx)(import_core245.Button,{variant:"outline",style:{width:150},onClick:()=>handleSelectOption(option),children:formatTime(option[1])})},option[1].toISOString()))})]}),props.children]})]}):(0,import_jsx_runtime172.jsx)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:(0,import_jsx_runtime172.jsx)(import_core245.Loader,{})})}function onlyPractitioner(schedule){let refs=schedule.actor.filter(ref=>(0,import_core246.isReference)(ref,"Practitioner"));if(refs.length===1)return refs[0]}function Scheduler(props){let medplum=(0,import_react_hooks73.useMedplum)(),{fetchSlots,schedule}=props,[actor,setActor]=(0,import_react114.useState)(),fetchOptions=(0,import_react114.useCallback)(async period=>{if(fetchSlots)return(await fetchSlots(period)).map(slot=>[slot,new Date(slot.start)]);let scheduleRefs=(0,import_core246.arrayify)(schedule??[]).map(import_core246.getReferenceString).filter(import_core246.isDefined),slotSearchParams=new URLSearchParams([["_count","720"],["schedule",scheduleRefs.join(",")],["start","gt"+period.start],["start","lt"+period.end]]);return(await medplum.searchResources("Slot",slotSearchParams)).map(slot=>[slot,new Date(slot.start)])},[medplum,fetchSlots,schedule]);return(0,import_react114.useEffect)(()=>{let schedules=(0,import_core246.arrayify)(props.schedule);if(schedules?.length!==1)return;let schedule2=schedules[0];(0,import_core246.isResource)(schedule2)?setActor(onlyPractitioner(schedule2)):medplum.readReference(schedule2).then(schedule3=>{setActor(onlyPractitioner(schedule3))}).catch(error=>{(0,import_notifications13.showNotification)({color:"red",title:"Error",message:(0,import_core246.normalizeErrorString)(error)})})},[medplum,props.schedule]),(0,import_jsx_runtime172.jsx)(BaseScheduler,{fetchOptions,onSelectOption:props.onSelectSlot,actor,children:props.children})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+744*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_core247=require("@medplum/core");var import_jsx_runtime173=require("react/jsx-runtime");function ServiceRequestTimeline(props){let{serviceRequest,...rest}=props;return(0,import_jsx_runtime173.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_core247.createReference)(resource)],subject:resource.subject,sender:(0,import_core247.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core247.createReference)(resource)],subject:resource.subject,operator:(0,import_core247.createReference)(operator),issued:new Date().toISOString(),content}),...rest})}var import_core248=require("@mantine/core"),import_notifications14=require("@mantine/notifications"),import_core249=require("@medplum/core"),import_react_hooks74=require("@medplum/react-hooks"),import_jsx_runtime174=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=(0,import_react_hooks74.useMedplum)(),{client,patient,encounter,children,...rest}=props,patientResource=(0,import_react_hooks74.useResource)(patient),encounterResource=(0,import_react_hooks74.useResource)(encounter);function launchApp(){let patientRef=patient,encounterRef=encounter;if(client.launchIdentifierSystems?.length){let patientIdentifierConfig=client.launchIdentifierSystems.find(config=>config.resourceType==="Patient");if(patientRef&&patientResource&&patientIdentifierConfig?.system){let identifier=patientResource.identifier?.find(i=>i.system===patientIdentifierConfig.system);identifier&&(patientRef={...patient,identifier})}let encounterIdentifierConfig=client.launchIdentifierSystems.find(config=>config.resourceType==="Encounter");if(encounterRef&&encounterResource&&encounterIdentifierConfig?.system){let identifier=encounterResource.identifier?.find(i=>i.system===encounterIdentifierConfig.system);identifier&&(encounterRef={...encounter,identifier})}}medplum.createResource({resourceType:"SmartAppLaunch",patient:patientRef,encounter:encounterRef,fhirContext:props.fhirContext}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",(0,import_core249.ensureTrailingSlash)(medplum.fhirUrl().toString())),url.searchParams.set("launch",result.id),window.open(url.toString(),"_blank")}).catch(err=>(0,import_notifications14.showNotification)({color:"red",message:(0,import_core249.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime174.jsx)(import_core248.Anchor,{onClick:()=>launchApp(),...rest,children})}
112
112
  /*! Bundled license information:
113
113
 
114
114
  @tabler/icons-react/dist/esm/defaultAttributes.mjs:
@@ -179,7 +179,7 @@
179
179
  @tabler/icons-react/dist/esm/icons/IconX.mjs:
180
180
  @tabler/icons-react/dist/esm/tabler-icons-react.mjs:
181
181
  (**
182
- * @license @tabler/icons-react v3.41.1 - MIT
182
+ * @license @tabler/icons-react v3.44.0 - MIT
183
183
  *
184
184
  * This source code is licensed under the MIT license.
185
185
  * See the LICENSE file in the root directory of this source tree.