@medplum/react 3.1.5 → 3.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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 __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};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_pointer=__commonJS({"../../node_modules/rfc6902/pointer.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;function unescape(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function escape(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(unescape);if(tokens[0]!=="")throw new Error("Invalid JSON Pointer: ".concat(path));return new Pointer2(tokens)},Pointer2.prototype.toString=function(){return this.tokens.map(escape).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}();exports.Pointer=Pointer}});var require_util=__commonJS({"../../node_modules/rfc6902/util.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.clone=exports.objectType=exports.hasOwnProperty=void 0;exports.hasOwnProperty=Object.prototype.hasOwnProperty;function objectType(object){return object===void 0?"undefined":object===null?"null":Array.isArray(object)?"array":typeof object}exports.objectType=objectType;function isNonPrimitive(value){return value!=null&&typeof value=="object"}function clone(source){if(!isNonPrimitive(source))return source;if(source.constructor==Array){for(var length_1=source.length,arrayTarget=new Array(length_1),i=0;i<length_1;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}exports.clone=clone}});var require_diff=__commonJS({"../../node_modules/rfc6902/diff.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.diffAny=exports.diffObjects=exports.diffArrays=exports.intersection=exports.subtract=exports.isDestructive=void 0;var util_1=require_util();function isDestructive(_a){var op=_a.op;return op==="remove"||op==="replace"||op==="copy"||op==="move"}exports.isDestructive=isDestructive;function subtract(minuend,subtrahend){var obj={};for(var add_key in minuend)util_1.hasOwnProperty.call(minuend,add_key)&&minuend[add_key]!==void 0&&(obj[add_key]=1);for(var del_key in subtrahend)util_1.hasOwnProperty.call(subtrahend,del_key)&&subtrahend[del_key]!==void 0&&delete obj[del_key];return Object.keys(obj)}exports.subtract=subtract;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)}exports.intersection=intersection;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 memo3={"0,0":{operations:[],cost:0}};function dist(i,j){var memo_key="".concat(i,",").concat(j),memoized=memo3[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(a2,b2){return a2.cost-b2.cost})[0];memoized=best}memo3[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}exports.diffArrays=diffArrays;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]})}),intersection([input,output]).forEach(function(key){operations.push.apply(operations,diff2(input[key],output[key],ptr.add(key)))}),operations}exports.diffObjects=diffObjects;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}]}exports.diffAny=diffAny}});var require_patch=__commonJS({"../../node_modules/rfc6902/patch.js"(exports){"use strict";var __extends=exports&&exports.__extends||function(){var extendStatics=function(d,b2){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d2,b3){d2.__proto__=b3}||function(d2,b3){for(var p in b3)Object.prototype.hasOwnProperty.call(b3,p)&&(d2[p]=b3[p])},extendStatics(d,b2)};return function(d,b2){if(typeof b2!="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics(d,b2);function __(){this.constructor=d}d.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:!0});exports.apply=exports.InvalidOperationError=exports.test=exports.copy=exports.move=exports.replace=exports.remove=exports.add=exports.TestError=exports.MissingError=void 0;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){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)(operation.value)),null)}exports.add=add;function remove(object,operation){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)}exports.remove=remove;function replace(object,operation){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}exports.replace=replace;function move(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_remove(from_endpoint.parent,from_endpoint.key),_add(endpoint.parent,endpoint.key,from_endpoint.value),null)}exports.move=move;function copy(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_add(endpoint.parent,endpoint.key,(0,util_1.clone)(from_endpoint.value)),null)}exports.copy=copy;function test(object,operation){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return(0,diff_1.diffAny)(endpoint.value,operation.value,new pointer_1.Pointer).length?new TestError(endpoint.value,operation.value):null}exports.test=test;var InvalidOperationError=function(_super){__extends(InvalidOperationError2,_super);function InvalidOperationError2(operation){var _this=_super.call(this,"Invalid operation: ".concat(operation.op))||this;return _this.operation=operation,_this.name="InvalidOperationError",_this}return InvalidOperationError2}(Error);exports.InvalidOperationError=InvalidOperationError;function apply(object,operation){switch(operation.op){case"add":return add(object,operation);case"remove":return remove(object,operation);case"replace":return replace(object,operation);case"move":return move(object,operation);case"copy":return copy(object,operation);case"test":return test(object,operation)}return new InvalidOperationError(operation)}exports.apply=apply}});var require_rfc6902=__commonJS({"../../node_modules/rfc6902/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.createTests=exports.createPatch=exports.applyPatch=exports.Pointer=void 0;var pointer_1=require_pointer();Object.defineProperty(exports,"Pointer",{enumerable:!0,get:function(){return pointer_1.Pointer}});var patch_1=require_patch(),diff_1=require_diff();function applyPatch(object,patch){return patch.map(function(operation){return(0,patch_1.apply)(object,operation)})}exports.applyPatch=applyPatch;function wrapVoidableDiff(diff2){function wrappedDiff(input,output,ptr){var custom_patch=diff2(input,output,ptr);return Array.isArray(custom_patch)?custom_patch:(0,diff_1.diffAny)(input,output,ptr,wrappedDiff)}return wrappedDiff}function createPatch2(input,output,diff2){var ptr=new pointer_1.Pointer;return(diff2?wrapVoidableDiff(diff2):diff_1.diffAny)(input,output,ptr)}exports.createPatch=createPatch2;function createTest(input,path){var endpoint=pointer_1.Pointer.fromJSON(path).evaluate(input);if(endpoint!==void 0)return{op:"test",path,value:endpoint.value}}function createTests(input,patch){var tests=new Array;return patch.filter(diff_1.isDestructive).forEach(function(operation){var pathTest=createTest(input,operation.path);if(pathTest&&tests.push(pathTest),"from"in operation){var fromTest=createTest(input,operation.from);fromTest&&tests.push(fromTest)}}),tests}exports.createTests=createTests}});var src_exports={};__export(src_exports,{AddressDisplay:()=>AddressDisplay,AddressInput:()=>AddressInput,AnnotationInput:()=>AnnotationInput,AppShell:()=>AppShell,AsyncAutocomplete:()=>AsyncAutocomplete,AttachmentArrayDisplay:()=>AttachmentArrayDisplay,AttachmentArrayInput:()=>AttachmentArrayInput,AttachmentButton:()=>AttachmentButton,AttachmentDisplay:()=>AttachmentDisplay,AttachmentInput:()=>AttachmentInput,BackboneElementDisplay:()=>BackboneElementDisplay,BackboneElementInput:()=>BackboneElementInput,BaseChat:()=>BaseChat,CalendarInput:()=>CalendarInput,ChatModal:()=>ChatModal,CheckboxFormSection:()=>CheckboxFormSection,CodeInput:()=>CodeInput,CodeableConceptDisplay:()=>CodeableConceptDisplay,CodeableConceptInput:()=>CodeableConceptInput,CodingDisplay:()=>CodingDisplay,CodingInput:()=>CodingInput,ContactDetailDisplay:()=>ContactDetailDisplay,ContactDetailInput:()=>ContactDetailInput,ContactPointDisplay:()=>ContactPointDisplay,ContactPointInput:()=>ContactPointInput,Container:()=>Container,DateTimeInput:()=>DateTimeInput,DefaultResourceTimeline:()=>DefaultResourceTimeline,DescriptionList:()=>DescriptionList,DescriptionListEntry:()=>DescriptionListEntry,DiagnosticReportDisplay:()=>DiagnosticReportDisplay,Document:()=>Document,ElementDefinitionInputSelector:()=>ElementDefinitionInputSelector,ElementDefinitionTypeInput:()=>ElementDefinitionTypeInput,EncounterTimeline:()=>EncounterTimeline,ErrorBoundary:()=>ErrorBoundary,FhirPathTable:()=>FhirPathTable,Form:()=>Form,FormSection:()=>FormSection,Header:()=>Header,HumanNameDisplay:()=>HumanNameDisplay,HumanNameInput:()=>HumanNameInput,IdentifierDisplay:()=>IdentifierDisplay,IdentifierInput:()=>IdentifierInput,Loading:()=>Loading,Logo:()=>Logo,MeasureReportDisplay:()=>MeasureReportDisplay,MedplumLink:()=>MedplumLink,MedplumProvider:()=>ee,MemoizedFhirPathTable:()=>MemoizedFhirPathTable,MemoizedSearchControl:()=>MemoizedSearchControl,MoneyDisplay:()=>MoneyDisplay,MoneyInput:()=>MoneyInput,Navbar:()=>Navbar,NoteDisplay:()=>NoteDisplay,NotificationIcon:()=>NotificationIcon,ObservationTable:()=>ObservationTable,OperationOutcomeAlert:()=>OperationOutcomeAlert,Panel:()=>Panel,PatientSummary:()=>PatientSummary,PatientTimeline:()=>PatientTimeline,PlanDefinitionBuilder:()=>PlanDefinitionBuilder,QuantityDisplay:()=>QuantityDisplay,QuantityInput:()=>QuantityInput,QuestionnaireBuilder:()=>QuestionnaireBuilder,QuestionnaireForm:()=>QuestionnaireForm,QuestionnaireItemType:()=>QuestionnaireItemType,RangeDisplay:()=>RangeDisplay,RangeInput:()=>RangeInput,ReferenceDisplay:()=>ReferenceDisplay,ReferenceInput:()=>ReferenceInput,ReferenceRangeEditor:()=>ReferenceRangeEditor,ReferenceRangeGroupEditor:()=>ReferenceRangeGroupEditor,RegisterForm:()=>RegisterForm,RequestGroupDisplay:()=>RequestGroupDisplay,ResourceArrayDisplay:()=>ResourceArrayDisplay,ResourceArrayInput:()=>ResourceArrayInput,ResourceAvatar:()=>ResourceAvatar,ResourceBadge:()=>ResourceBadge,ResourceBlame:()=>ResourceBlame,ResourceDiff:()=>ResourceDiff,ResourceForm:()=>ResourceForm,ResourceHistoryTable:()=>ResourceHistoryTable,ResourceInput:()=>ResourceInput,ResourceName:()=>ResourceName,ResourcePropertyDisplay:()=>ResourcePropertyDisplay,ResourcePropertyInput:()=>ResourcePropertyInput,ResourceTable:()=>ResourceTable,ResourceTimeline:()=>ResourceTimeline,Scheduler:()=>Scheduler,SearchChangeEvent:()=>SearchChangeEvent,SearchClickEvent:()=>SearchClickEvent,SearchControl:()=>SearchControl,SearchFieldEditor:()=>SearchFieldEditor,SearchFilterEditor:()=>SearchFilterEditor,SearchLoadEvent:()=>SearchLoadEvent,ServiceRequestTimeline:()=>ServiceRequestTimeline,SignInForm:()=>SignInForm,SmartAppLaunchLink:()=>SmartAppLaunchLink,StatusBadge:()=>StatusBadge,ThreadChat:()=>ThreadChat,Timeline:()=>Timeline,TimelineItem:()=>TimelineItem,TimingInput:()=>TimingInput,ValueSetAutocomplete:()=>ValueSetAutocomplete,addDateFilterBetween:()=>addDateFilterBetween,addField:()=>addField,addFilter:()=>addFilter,addLastMonthFilter:()=>addLastMonthFilter,addMissingFilter:()=>addMissingFilter,addNextMonthFilter:()=>addNextMonthFilter,addThisMonthFilter:()=>addThisMonthFilter,addTodayFilter:()=>addTodayFilter,addTomorrowFilter:()=>addTomorrowFilter,addYearToDateFilter:()=>addYearToDateFilter,addYesterdayFilter:()=>addYesterdayFilter,buildFieldNameString:()=>buildFieldNameString,buildInitialResponse:()=>buildInitialResponse,buildInitialResponseItem:()=>buildInitialResponseItem,clearFilters:()=>clearFilters,clearFiltersOnField:()=>clearFiltersOnField,convertIsoToLocal:()=>convertIsoToLocal,convertLocalToIso:()=>convertLocalToIso,createScriptTag:()=>createScriptTag,deleteFilter:()=>deleteFilter,formatReferenceString:()=>formatReferenceString,getErrorsForInput:()=>getErrorsForInput,getFieldDefinitions:()=>getFieldDefinitions,getIssuesForExpression:()=>getIssuesForExpression,getNewMultiSelectValues:()=>getNewMultiSelectValues,getNumberOfPages:()=>getNumberOfPages,getOpString:()=>getOpString,getQuestionnaireItemReferenceFilter:()=>getQuestionnaireItemReferenceFilter,getQuestionnaireItemReferenceTargetTypes:()=>getQuestionnaireItemReferenceTargetTypes,getRecaptcha:()=>getRecaptcha,getSearchOperators:()=>getSearchOperators,getSortField:()=>getSortField,getValuePath:()=>getValuePath,initRecaptcha:()=>initRecaptcha,isChoiceQuestion:()=>isChoiceQuestion,isQuestionEnabled:()=>isQuestionEnabled,isSortDescending:()=>isSortDescending,isSupportedProfileStructureDefinition:()=>isSupportedProfileStructureDefinition,parseForm:()=>parseForm,reactContext:()=>R,renderValue:()=>renderValue,setFilters:()=>setFilters,setOffset:()=>setOffset,setPage:()=>setPage,setPropertyValue:()=>setPropertyValue,setQuestionnaireItemReferenceTargetTypes:()=>setQuestionnaireItemReferenceTargetTypes,setSort:()=>setSort,sortByDateAndPriority:()=>sortByDateAndPriority,toggleSort:()=>toggleSort,useCachedBinaryUrl:()=>oe,useMedplum:()=>a,useMedplumContext:()=>x,useMedplumNavigate:()=>V,useMedplumProfile:()=>W,usePrevious:()=>se,useResource:()=>pe,useSearch:()=>Me,useSearchOne:()=>Ce,useSearchResources:()=>Ee,useSubscription:()=>Oe});module.exports=__toCommonJS(src_exports);var import_react=require("react"),import_react2=require("react"),import_jsx_runtime=require("react/jsx-runtime"),import_react3=require("react"),import_react4=require("react"),import_core=require("@medplum/core"),import_react5=require("react"),import_core2=require("@medplum/core"),import_react6=require("react"),import_react7=require("react"),R=(0,import_react2.createContext)(void 0);function x(){return(0,import_react2.useContext)(R)}function a(){return x().medplum}function V(){return x().navigate}function W(){return x().profile}function ee(e){let t=e.medplum,n=e.navigate??I,[o,u]=(0,import_react.useState)({profile:t.getProfile(),loading:!t.isInitialized});(0,import_react.useEffect)(()=>{t&&(t.isInitialized||(u(r2=>({...r2,loading:!0})),t.getInitPromise().then(()=>u(r2=>({...r2,loading:!1}))).catch(console.error)))},[t,t.isInitialized]),(0,import_react.useEffect)(()=>{function r2(){u({...o,profile:t.getProfile()})}return t.addEventListener("change",r2),()=>t.removeEventListener("change",r2)},[t,o]);let i=(0,import_react.useMemo)(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return(0,import_jsx_runtime.jsx)(R.Provider,{value:i,children:e.children})}function I(e){window.location.assign(e)}var C=new Map,oe=e=>(0,import_react3.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let o=n.get("Expires");if(!o||o.length>13)return e;let u=C.get(t);if(u){let r2=new URLSearchParams(new URL(u).search).get("Expires");if(r2&&parseInt(r2,10)*1e3-5e3>Date.now())return u}return C.set(t,e),e},[e]);function se(e){let t=(0,import_react4.useRef)();return(0,import_react4.useEffect)(()=>{t.current=e}),t.current}function pe(e,t){let n=a(),[o,u]=(0,import_react5.useState)(S(n,e)),i=(0,import_react5.useCallback)(r2=>{(0,import_core.deepEquals)(r2,o)||u(r2)},[o,u]);return(0,import_react5.useEffect)(()=>{i(S(n,e))},[n,e,i]),(0,import_react5.useEffect)(()=>{let r2=!0;return(0,import_core.isReference)(e)&&n.readReference(e).then(s=>{r2&&i(s)}).catch(s=>{r2&&(i(void 0),t&&t((0,import_core.normalizeOperationOutcome)(s)))}),()=>r2=!1},[n,o,e,i,t]),o}function S(e,t){if(t){if((0,import_core.isResource)(t))return t;if((0,import_core.isReference)(t))return e.getCachedReference(t)}}function Me(e,t){return g("search",e,t)}function Ce(e,t){return g("searchOne",e,t)}function Ee(e,t){return g("searchResources",e,t)}function g(e,t,n){let o=a(),[u,i]=(0,import_react6.useState)(),[r2,s]=(0,import_react6.useState)(!1),[d,c]=(0,import_react6.useState)(),[p,h]=(0,import_react6.useState)();return(0,import_react6.useEffect)(()=>{let T=o.fhirSearchUrl(t,n).toString();T!==u&&(i(T),o[e](t,n).then(l=>{s(!1),c(l),h(import_core2.allOk)}).catch(l=>{s(!1),c(void 0),h((0,import_core2.normalizeOperationOutcome)(l))}))},[o,e,t,n,u]),[d,r2,p]}var G=3e3;function Oe(e,t){let n=a(),[o,u]=(0,import_react7.useState)(),i=(0,import_react7.useRef)(!1),r2=(0,import_react7.useRef)(),s=(0,import_react7.useRef)(),d=(0,import_react7.useRef)();d.current=t,(0,import_react7.useEffect)(()=>(r2.current&&(clearTimeout(r2.current),r2.current=void 0),s.current!==e&&u(n.subscribeToCriteria(e)),s.current=e,()=>{r2.current=setTimeout(()=>{u(void 0),n.unsubscribeFromCriteria(e)},G)}),[n,e]);let c=(0,import_react7.useCallback)(p=>{d.current?.(p.payload)},[]);(0,import_react7.useEffect)(()=>o?(i.current||(o.addEventListener("message",c),i.current=!0),()=>{i.current=!1,o.removeEventListener("message",c)}):()=>{},[o,c])}var import_core3=require("@medplum/core"),import_jsx_runtime2=require("react/jsx-runtime");function AddressDisplay(props){let address=props.value;return address?(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_core3.formatAddress)(address)}):null}var import_core4=require("@mantine/core"),import_react8=require("react"),import_jsx_runtime3=require("react/jsx-runtime");function getLine(address,index){return address.line&&address.line.length>index?address.line[index]:""}function setLine(address,index,str){let line=address.line||[];for(;line.length<=index;)line.push("");return line[index]=str,{...address,line}}function AddressInput(props){let[value,setValue]=(0,import_react8.useState)(props.defaultValue||{}),valueRef=(0,import_react8.useRef)();valueRef.current=value;function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...valueRef.current,use})}function setType(type){setValueWrapper({...valueRef.current,type})}function setLine1(line1){setValueWrapper(setLine(valueRef.current||{},0,line1))}function setLine2(line2){setValueWrapper(setLine(valueRef.current||{},1,line2))}function setCity(city){setValueWrapper({...valueRef.current,city})}function setState(state){setValueWrapper({...valueRef.current,state})}function setPostalCode(postalCode){setValueWrapper({...valueRef.current,postalCode})}return(0,import_jsx_runtime3.jsxs)(import_core4.Group,{gap:"xs",wrap:"nowrap",grow:!0,children:[(0,import_jsx_runtime3.jsx)(import_core4.NativeSelect,{"data-testid":"address-use",defaultValue:value.use,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","billing"]}),(0,import_jsx_runtime3.jsx)(import_core4.NativeSelect,{"data-testid":"address-type",defaultValue:value.type,onChange:e=>setType(e.currentTarget.value),data:["","postal","physical","both"]}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Line 1",defaultValue:getLine(value,0),onChange:e=>setLine1(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Line 2",defaultValue:getLine(value,1),onChange:e=>setLine2(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"City",defaultValue:value.city,onChange:e=>setCity(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"State",defaultValue:value.state,onChange:e=>setState(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Postal Code",defaultValue:value.postalCode,onChange:e=>setPostalCode(e.currentTarget.value)})]})}var import_core5=require("@mantine/core"),import_core6=require("@medplum/core");var import_react9=require("react"),import_jsx_runtime4=require("react/jsx-runtime");function AnnotationInput(props){let author=W(),[value,setValue]=(0,import_react9.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_runtime4.jsx)(import_core5.TextInput,{name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}var import_core27=require("@mantine/core"),import_notifications3=require("@mantine/notifications");var import_react19=require("react");var import_core7=require("@mantine/core"),import_core8=require("@medplum/core");var import_react10=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_react10.forwardRef)(({color="currentColor",size=24,stroke=2,className,children,...rest},ref)=>(0,import_react10.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},[...iconNode.map(([tag,attrs])=>(0,import_react10.createElement)(tag,attrs)),...Array.isArray(children)?children:[children]]));return Component2.displayName=`${iconNamePascal}`,Component2};var IconAdjustmentsHorizontal=createReactComponent("outline","adjustments-horizontal","IconAdjustmentsHorizontal",[["path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-0"}],["path",{d:"M4 6l8 0",key:"svg-1"}],["path",{d:"M16 6l4 0",key:"svg-2"}],["path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-3"}],["path",{d:"M4 12l2 0",key:"svg-4"}],["path",{d:"M10 12l10 0",key:"svg-5"}],["path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-6"}],["path",{d:"M4 18l11 0",key:"svg-7"}],["path",{d:"M19 18l1 0",key:"svg-8"}]]);var IconAlertCircle=createReactComponent("outline","alert-circle","IconAlertCircle",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 8v4",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]]);var IconArrowDown=createReactComponent("outline","arrow-down","IconArrowDown",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 13l-6 6",key:"svg-1"}],["path",{d:"M6 13l6 6",key:"svg-2"}]]);var IconArrowRight=createReactComponent("outline","arrow-right","IconArrowRight",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]]);var IconArrowUp=createReactComponent("outline","arrow-up","IconArrowUp",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 11l-6 -6",key:"svg-1"}],["path",{d:"M6 11l6 -6",key:"svg-2"}]]);var IconBleachOff=createReactComponent("outline","bleach-off","IconBleachOff",[["path",{d:"M5 19h14m1.986 -1.977a2 2 0 0 0 -.146 -.773l-7.1 -12.25a2 2 0 0 0 -3.5 0l-.815 1.405m-1.488 2.568l-4.797 8.277a2 2 0 0 0 1.75 2.75",key:"svg-0"}],["path",{d:"M3 3l18 18",key:"svg-1"}]]);var IconBleach=createReactComponent("outline","bleach","IconBleach",[["path",{d:"M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75",key:"svg-0"}]]);var IconBoxMultiple=createReactComponent("outline","box-multiple","IconBoxMultiple",[["path",{d:"M7 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M17 17v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2",key:"svg-1"}]]);var IconBracketsContain=createReactComponent("outline","brackets-contain","IconBracketsContain",[["path",{d:"M7 4h-4v16h4",key:"svg-0"}],["path",{d:"M17 4h4v16h-4",key:"svg-1"}],["path",{d:"M8 16h.01",key:"svg-2"}],["path",{d:"M12 16h.01",key:"svg-3"}],["path",{d:"M16 16h.01",key:"svg-4"}]]);var IconBucketOff=createReactComponent("outline","bucket-off","IconBucketOff",[["path",{d:"M5.029 5.036c-.655 .58 -1.029 1.25 -1.029 1.964c0 2.033 3.033 3.712 6.96 3.967m3.788 -.21c3.064 -.559 5.252 -2.029 5.252 -3.757c0 -2.21 -3.582 -4 -8 -4c-1.605 0 -3.1 .236 -4.352 .643",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.1 -.3 .252 -.812 .457 -1.535m.862 -3.146c.262 -.975 .735 -2.76 1.418 -5.354a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]]);var IconBucket=createReactComponent("outline","bucket","IconBucket",[["path",{d:"M12 7m-8 0a8 4 0 1 0 16 0a8 4 0 1 0 -16 0",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.333 -1 1.246 -4.345 2.737 -10.035a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}]]);var IconCalendar=createReactComponent("outline","calendar","IconCalendar",[["path",{d:"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z",key:"svg-0"}],["path",{d:"M16 3v4",key:"svg-1"}],["path",{d:"M8 3v4",key:"svg-2"}],["path",{d:"M4 11h16",key:"svg-3"}],["path",{d:"M11 15h1",key:"svg-4"}],["path",{d:"M12 15v3",key:"svg-5"}]]);var IconCheck=createReactComponent("outline","check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]);var IconCheckbox=createReactComponent("outline","checkbox","IconCheckbox",[["path",{d:"M9 11l3 3l8 -8",key:"svg-0"}],["path",{d:"M20 12v6a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h9",key:"svg-1"}]]);var IconChevronDown=createReactComponent("outline","chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]);var IconChevronUp=createReactComponent("outline","chevron-up","IconChevronUp",[["path",{d:"M6 15l6 -6l6 6",key:"svg-0"}]]);var IconCircleMinus=createReactComponent("outline","circle-minus","IconCircleMinus",[["path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l6 0",key:"svg-1"}]]);var IconCirclePlus=createReactComponent("outline","circle-plus","IconCirclePlus",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M9 12h6",key:"svg-1"}],["path",{d:"M12 9v6",key:"svg-2"}]]);var IconCloudUpload=createReactComponent("outline","cloud-upload","IconCloudUpload",[["path",{d:"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1",key:"svg-0"}],["path",{d:"M9 15l3 -3l3 3",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}]]);var IconColumns=createReactComponent("outline","columns","IconColumns",[["path",{d:"M4 6l5.5 0",key:"svg-0"}],["path",{d:"M4 10l5.5 0",key:"svg-1"}],["path",{d:"M4 14l5.5 0",key:"svg-2"}],["path",{d:"M4 18l5.5 0",key:"svg-3"}],["path",{d:"M14.5 6l5.5 0",key:"svg-4"}],["path",{d:"M14.5 10l5.5 0",key:"svg-5"}],["path",{d:"M14.5 14l5.5 0",key:"svg-6"}],["path",{d:"M14.5 18l5.5 0",key:"svg-7"}]]);var IconCopy=createReactComponent("outline","copy","IconCopy",[["path",{d:"M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z",key:"svg-0"}],["path",{d:"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1",key:"svg-1"}]]);var IconCurrencyDollar=createReactComponent("outline","currency-dollar","IconCurrencyDollar",[["path",{d:"M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2",key:"svg-0"}],["path",{d:"M12 3v3m0 12v3",key:"svg-1"}]]);var IconDots=createReactComponent("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);var IconEdit=createReactComponent("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);var IconEqualNot=createReactComponent("outline","equal-not","IconEqualNot",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}],["path",{d:"M5 19l14 -14",key:"svg-2"}]]);var IconEqual=createReactComponent("outline","equal","IconEqual",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]]);var IconFileAlert=createReactComponent("outline","file-alert","IconFileAlert",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 17l.01 0",key:"svg-2"}],["path",{d:"M12 11l0 3",key:"svg-3"}]]);var IconFilePlus=createReactComponent("outline","file-plus","IconFilePlus",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 11l0 6",key:"svg-2"}],["path",{d:"M9 14l6 0",key:"svg-3"}]]);var IconFilter=createReactComponent("outline","filter","IconFilter",[["path",{d:"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z",key:"svg-0"}]]);var IconGenderFemale=createReactComponent("outline","gender-female","IconGenderFemale",[["path",{d:"M12 9m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-0"}],["path",{d:"M12 14v7",key:"svg-1"}],["path",{d:"M9 18h6",key:"svg-2"}]]);var IconListDetails=createReactComponent("outline","list-details","IconListDetails",[["path",{d:"M13 5h8",key:"svg-0"}],["path",{d:"M13 9h5",key:"svg-1"}],["path",{d:"M13 15h8",key:"svg-2"}],["path",{d:"M13 19h5",key:"svg-3"}],["path",{d:"M3 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-4"}],["path",{d:"M3 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-5"}]]);var IconLogout=createReactComponent("outline","logout","IconLogout",[["path",{d:"M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M9 12h12l-3 -3",key:"svg-1"}],["path",{d:"M18 15l3 -3",key:"svg-2"}]]);var IconMathGreater=createReactComponent("outline","math-greater","IconMathGreater",[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]]);var IconMathLower=createReactComponent("outline","math-lower","IconMathLower",[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]]);var IconMessage=createReactComponent("outline","message","IconMessage",[["path",{d:"M8 9h8",key:"svg-0"}],["path",{d:"M8 13h6",key:"svg-1"}],["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z",key:"svg-2"}]]);var IconPin=createReactComponent("outline","pin","IconPin",[["path",{d:"M15 4.5l-4 4l-4 1.5l-1.5 1.5l7 7l1.5 -1.5l1.5 -4l4 -4",key:"svg-0"}],["path",{d:"M9 15l-4.5 4.5",key:"svg-1"}],["path",{d:"M14.5 4l5.5 5.5",key:"svg-2"}]]);var IconPinnedOff=createReactComponent("outline","pinned-off","IconPinnedOff",[["path",{d:"M3 3l18 18",key:"svg-0"}],["path",{d:"M15 4.5l-3.249 3.249m-2.57 1.433l-2.181 .818l-1.5 1.5l7 7l1.5 -1.5l.82 -2.186m1.43 -2.563l3.25 -3.251",key:"svg-1"}],["path",{d:"M9 15l-4.5 4.5",key:"svg-2"}],["path",{d:"M14.5 4l5.5 5.5",key:"svg-3"}]]);var IconPlus=createReactComponent("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);var IconRefresh=createReactComponent("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);var IconSearch=createReactComponent("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);var IconSettings=createReactComponent("outline","settings","IconSettings",[["path",{d:"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z",key:"svg-0"}],["path",{d:"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-1"}]]);var IconSortAscending=createReactComponent("outline","sort-ascending","IconSortAscending",[["path",{d:"M4 6l7 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l9 0",key:"svg-2"}],["path",{d:"M15 9l3 -3l3 3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSortDescending=createReactComponent("outline","sort-descending","IconSortDescending",[["path",{d:"M4 6l9 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l7 0",key:"svg-2"}],["path",{d:"M15 15l3 3l3 -3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSquare=createReactComponent("outline","square","IconSquare",[["path",{d:"M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z",key:"svg-0"}]]);var IconStethoscope=createReactComponent("outline","stethoscope","IconStethoscope",[["path",{d:"M6 4h-1a2 2 0 0 0 -2 2v3.5h0a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1",key:"svg-0"}],["path",{d:"M8 15a6 6 0 1 0 12 0v-3",key:"svg-1"}],["path",{d:"M11 3v2",key:"svg-2"}],["path",{d:"M6 3v2",key:"svg-3"}],["path",{d:"M20 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-4"}]]);var IconSwitchHorizontal=createReactComponent("outline","switch-horizontal","IconSwitchHorizontal",[["path",{d:"M16 3l4 4l-4 4",key:"svg-0"}],["path",{d:"M10 7l10 0",key:"svg-1"}],["path",{d:"M8 13l-4 4l4 4",key:"svg-2"}],["path",{d:"M4 17l9 0",key:"svg-3"}]]);var IconTableExport=createReactComponent("outline","table-export","IconTableExport",[["path",{d:"M12.5 21h-7.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5",key:"svg-0"}],["path",{d:"M3 10h18",key:"svg-1"}],["path",{d:"M10 3v18",key:"svg-2"}],["path",{d:"M16 19h6",key:"svg-3"}],["path",{d:"M19 16l3 3l-3 3",key:"svg-4"}]]);var IconTrash=createReactComponent("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);var IconUserSquare=createReactComponent("outline","user-square","IconUserSquare",[["path",{d:"M9 10a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M6 21v-1a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v1",key:"svg-1"}],["path",{d:"M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z",key:"svg-2"}]]);var IconX=createReactComponent("outline","x","IconX",[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]]);var import_react11=require("react"),import_jsx_runtime5=require("react/jsx-runtime"),ErrorBoundary=class extends import_react11.Component{constructor(props){super(props),this.state={lastLocation:window.location.toString()}}static getDerivedStateFromError(error){return{error,lastLocation:window.location.toString()}}componentDidUpdate(_prevProps,_prevState){window.location.toString()!==this.state.lastLocation&&this.setState({lastLocation:window.location.toString(),error:void 0})}shouldComponentUpdate(nextProps,nextState){return!!(this.props.children!==nextProps.children||nextState.error&&!this.state.error||this.state.lastLocation!==window.location.toString())}componentDidCatch(error,errorInfo){console.error("Uncaught error:",error,errorInfo)}render(){return this.state.error?(0,import_jsx_runtime5.jsx)(import_core7.Alert,{icon:(0,import_jsx_runtime5.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_runtime6=require("react/jsx-runtime");function Loading(){return(0,import_jsx_runtime6.jsx)(import_core9.Center,{style:{width:"100%",height:"100vh"},children:(0,import_jsx_runtime6.jsx)(import_core9.Loader,{})})}var AppShell_default={main:"AppShell_main"};var import_core21=require("@mantine/core"),import_core22=require("@medplum/core");function r(e){var t,f2,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]&&(f2=r(e[t]))&&(n&&(n+=" "),n+=f2)}else for(f2 in e)e[f2]&&(n&&(n+=" "),n+=f2);return n}function clsx(){for(var e,t,f2=0,n="",o=arguments.length;f2<o;f2++)(e=arguments[f2])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;var import_react14=require("react");var import_core12=require("@mantine/core"),import_core13=require("@medplum/core");var import_core10=require("@mantine/core"),import_core11=require("@medplum/core");function killEvent(e){e.preventDefault(),e.stopPropagation()}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"}var import_jsx_runtime7=require("react/jsx-runtime");function MedplumLink(props){let navigate=V(),{to,suffix,label,onClick,children,...rest}=props,href=getHref(to);return suffix&&(href+="/"+suffix),(0,import_jsx_runtime7.jsx)(import_core10.Anchor,{href,"aria-label":label,onClick:e=>{killEvent(e),onClick?onClick(e):to&&navigate(href)},...rest,children})}function getHref(to){if(to){if(typeof to=="string")return getStringHref(to);if((0,import_core11.isResource)(to))return getResourceHref(to);if((0,import_core11.isReference)(to))return getReferenceHref(to)}return"#"}function getStringHref(to){return to.startsWith("http://")||to.startsWith("https://")||to.startsWith("/")?to:"/"+to}function getResourceHref(to){return`/${to.resourceType}/${to.id}`}function getReferenceHref(to){return`/${to.reference}`}function getInitials(input){let words=input.split(" ").filter(Boolean);return words.length>1?words[0][0]+words[words.length-1][0]:words.length===1?words[0][0]:""}var import_jsx_runtime8=require("react/jsx-runtime");function ResourceAvatar(props){let resource=pe(props.value),text=resource?(0,import_core13.getDisplayString)(resource):props.alt??"",initials=getInitials(text),uncachedImageUrl=(resource&&(0,import_core13.getImageSrc)(resource))??props.src,imageUrl=oe(uncachedImageUrl??void 0),radius=props.radius??"xl",avatarProps={...props,value:void 0,link:void 0};return props.link?(0,import_jsx_runtime8.jsx)(MedplumLink,{to:resource,children:(0,import_jsx_runtime8.jsx)(import_core12.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}):(0,import_jsx_runtime8.jsx)(import_core12.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName",userActive:"Header_userActive"};var import_core15=require("@mantine/core"),import_core16=require("@medplum/core");var import_core14=require("@medplum/core"),import_jsx_runtime9=require("react/jsx-runtime");function HumanNameDisplay(props){let name=props.value;return name?(0,import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment,{children:(0,import_core14.formatHumanName)(name,props.options)}):null}var import_jsx_runtime10=require("react/jsx-runtime");function HeaderDropdown(props){let context=x(),{medplum,profile,navigate}=context,logins=medplum.getLogins(),{colorScheme,setColorScheme}=(0,import_core15.useMantineColorScheme)();return(0,import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment,{children:[(0,import_jsx_runtime10.jsxs)(import_core15.Stack,{align:"center",p:"xl",children:[(0,import_jsx_runtime10.jsx)(ResourceAvatar,{size:"xl",radius:100,value:context.profile}),(0,import_jsx_runtime10.jsx)(HumanNameDisplay,{value:context.profile?.name?.[0]}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),logins.map(login=>login.profile.reference!==(0,import_core16.getReferenceString)(context.profile)&&(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>window.location.reload()).catch(console.log)},children:(0,import_jsx_runtime10.jsxs)(import_core15.Group,{children:[(0,import_jsx_runtime10.jsx)(import_core15.Avatar,{radius:"xl"}),(0,import_jsx_runtime10.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime10.jsx)(import_core15.Text,{size:"sm",fw:500,children:login.profile.display}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),(0,import_jsx_runtime10.jsx)(import_core15.Group,{justify:"center",children:(0,import_jsx_runtime10.jsx)(import_core15.SegmentedControl,{size:"xs",value:colorScheme,onChange:newValue=>setColorScheme(newValue),data:[{label:"Light",value:"light"},{label:"Dark",value:"dark"},{label:"Auto",value:"auto"}]})}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Add another account"}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${(0,import_core16.getReferenceString)(profile)}`),children:"Account settings"}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconLogout,{size:14,stroke:1.5}),onClick:async()=>{await medplum.signOut(),navigate("/signin")},children:"Sign out"}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{size:"xs",c:"dimmed",ta:"center",children:props.version})]})}var import_core19=require("@medplum/core");var import_react13=require("react");var import_core17=require("@mantine/core"),import_notifications=require("@mantine/notifications"),import_core18=require("@medplum/core"),import_react12=require("react");var import_jsx_runtime11=require("react/jsx-runtime");function AsyncAutocomplete(props){let combobox=(0,import_core17.useCombobox)({onDropdownClose:()=>combobox.resetSelectedOption(),onDropdownOpen:()=>combobox.updateSelectedOptionIndex("active")}),{name,label,description,error,defaultValue:defaultValue2,toOption:toOption4,loadOptions,itemComponent,onChange,onCreate,creatable,clearable,required,placeholder,leftSection,maxValues,optionsDropdownMaxHeight=320,...rest}=props,defaultItems=toDefaultItems(defaultValue2),[search,setSearch]=(0,import_react12.useState)(""),[timer,setTimer]=(0,import_react12.useState)(),[abortController,setAbortController]=(0,import_react12.useState)(),[autoSubmit,setAutoSubmit]=(0,import_react12.useState)(),[selected,setSelected]=(0,import_react12.useState)(defaultItems.map(toOption4)),[options,setOptions]=(0,import_react12.useState)([]),ItemComponent4=itemComponent??DefaultItemComponent,searchRef=(0,import_react12.useRef)();searchRef.current=search;let lastLoadOptionsRef=(0,import_react12.useRef)(),lastValueRef=(0,import_react12.useRef)(),timerRef=(0,import_react12.useRef)();timerRef.current=timer;let abortControllerRef=(0,import_react12.useRef)();abortControllerRef.current=abortController;let autoSubmitRef=(0,import_react12.useRef)();autoSubmitRef.current=autoSubmit;let optionsRef=(0,import_react12.useRef)();optionsRef.current=options;let handleTimer=(0,import_react12.useCallback)(()=>{if(setTimer(void 0),searchRef.current===lastValueRef.current&&loadOptions===lastLoadOptionsRef.current)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)),setAbortController(void 0),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_core18.normalizeErrorString)(err)})})},[combobox,loadOptions,onChange,toOption4]),handleSearchChange=(0,import_react12.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_react12.useCallback)(newValue=>{let result=[],newSelected=[...selected],option=options?.find(option2=>option2.value===newValue),item=option?.resource;if(!item&&creatable!==!1&&onCreate&&(item=onCreate(newValue),option=toOption4(item)),item&&result.push(item),option&&newSelected.push(option),maxValues!==void 0)for(;newSelected.length>maxValues;)newSelected.shift();onChange(result),setSelected(newSelected)},[creatable,options,selected,maxValues,onChange,onCreate,toOption4]),handleValueSelect=val=>{setSearch(""),setOptions([]),combobox.closeDropdown(),lastValueRef.current=void 0,addSelected(val==="$create"?search:val)},handleValueRemove=(0,import_react12.useCallback)(item=>{let newSelected=selected.filter(v2=>v2.value!==item.value);onChange(newSelected.map(v2=>v2.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=(0,import_react12.useCallback)(e=>{e.key==="Enter"?!timer&&!abortController?(killEvent(e),options&&options.length>0&&(setOptions(options.slice(0,1)),addSelected(options[0].value))):setAutoSubmit(!0):e.key==="Backspace"&&search.length===0&&(killEvent(e),handleValueRemove(selected[selected.length-1]))},[search,selected,options,timer,abortController,addSelected,handleValueRemove]);(0,import_react12.useEffect)(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=clearable&&selected.length>0&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.ClearButton,{title:"Clear all",size:16,onClear:()=>{setSearch(""),setSelected([]),onChange([]),combobox.closeDropdown()}});return(0,import_jsx_runtime11.jsxs)(import_core17.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[(0,import_jsx_runtime11.jsx)(import_core17.Combobox.DropdownTarget,{children:(0,import_jsx_runtime11.jsx)(import_core17.PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?(0,import_jsx_runtime11.jsx)(import_core17.Loader,{size:16}):clearButton,required,children:(0,import_jsx_runtime11.jsxs)(import_core17.Pill.Group,{children:[selected.map(item=>(0,import_jsx_runtime11.jsx)(import_core17.Pill,{withRemoveButton:!0,onRemove:()=>handleValueRemove(item),children:item.label},item.value)),(maxValues===void 0||maxValues===0||selected.length<maxValues)&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.EventsTarget,{children:(0,import_jsx_runtime11.jsx)(import_core17.PillsInput.Field,{role:"searchbox",name,value:search,placeholder,onFocus:handleSearchChange,onBlur:()=>combobox.closeDropdown(),onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Dropdown,{children:(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Options,{children:(0,import_jsx_runtime11.jsxs)(import_core17.ScrollAreaAutosize,{type:"scroll",mah:optionsDropdownMaxHeight,children:[options.map(item=>(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Option,{value:item.value,active:selected.includes(item),children:(0,import_jsx_runtime11.jsx)(ItemComponent4,{...item})},item.value)),creatable&&search.trim().length>0&&(0,import_jsx_runtime11.jsxs)(import_core17.Combobox.Option,{value:"$create",children:["+ Create ",search]}),!creatable&&search.trim().length>0&&options.length===0&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Empty,{children:"Nothing found"})]})})})]})}function toDefaultItems(defaultValue2){return defaultValue2?Array.isArray(defaultValue2)?defaultValue2:[defaultValue2]:[]}function DefaultItemComponent(props){return(0,import_jsx_runtime11.jsx)(import_core17.Group,{gap:"sm",children:(0,import_jsx_runtime11.jsx)("span",{children:props.label})})}var HeaderSearchInput_default={searchInput:"HeaderSearchInput_searchInput"};var import_core20=require("@mantine/core");var import_jsx_runtime12=require("react/jsx-runtime");function toOption(resource){return{value:resource.id,label:(0,import_core19.getDisplayString)(resource),resource}}function HeaderSearchInput(props){let navigate=V(),medplum=a(),loadData=(0,import_react13.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_react13.useCallback)(item=>{item.length>0&&navigate(`/${(0,import_core19.getReferenceString)(item[0])}`)},[navigate]);return(0,import_jsx_runtime12.jsx)(AsyncAutocomplete,{size:"sm",radius:"md",className:HeaderSearchInput_default.searchInput,leftSection:(0,import_jsx_runtime12.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_react13.forwardRef)(({resource,...others},ref)=>{let helpText;return resource.resourceType==="Patient"?helpText=resource.birthDate:resource.resourceType==="ServiceRequest"&&(helpText=resource.subject?.display),(0,import_jsx_runtime12.jsx)("div",{ref,...others,children:(0,import_jsx_runtime12.jsxs)(import_core20.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime12.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime12.jsxs)("div",{children:[(0,import_jsx_runtime12.jsx)(import_core20.Text,{children:(0,import_core19.getDisplayString)(resource)}),(0,import_jsx_runtime12.jsx)(import_core20.Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return(0,import_core19.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 __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};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_pointer=__commonJS({"../../node_modules/rfc6902/pointer.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.Pointer=void 0;function unescape(token){return token.replace(/~1/g,"/").replace(/~0/g,"~")}function escape(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(unescape);if(tokens[0]!=="")throw new Error("Invalid JSON Pointer: ".concat(path));return new Pointer2(tokens)},Pointer2.prototype.toString=function(){return this.tokens.map(escape).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}();exports.Pointer=Pointer}});var require_util=__commonJS({"../../node_modules/rfc6902/util.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.clone=exports.objectType=exports.hasOwnProperty=void 0;exports.hasOwnProperty=Object.prototype.hasOwnProperty;function objectType(object){return object===void 0?"undefined":object===null?"null":Array.isArray(object)?"array":typeof object}exports.objectType=objectType;function isNonPrimitive(value){return value!=null&&typeof value=="object"}function clone(source){if(!isNonPrimitive(source))return source;if(source.constructor==Array){for(var length_1=source.length,arrayTarget=new Array(length_1),i=0;i<length_1;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}exports.clone=clone}});var require_diff=__commonJS({"../../node_modules/rfc6902/diff.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.diffAny=exports.diffObjects=exports.diffArrays=exports.intersection=exports.subtract=exports.isDestructive=void 0;var util_1=require_util();function isDestructive(_a){var op=_a.op;return op==="remove"||op==="replace"||op==="copy"||op==="move"}exports.isDestructive=isDestructive;function subtract(minuend,subtrahend){var obj={};for(var add_key in minuend)util_1.hasOwnProperty.call(minuend,add_key)&&minuend[add_key]!==void 0&&(obj[add_key]=1);for(var del_key in subtrahend)util_1.hasOwnProperty.call(subtrahend,del_key)&&subtrahend[del_key]!==void 0&&delete obj[del_key];return Object.keys(obj)}exports.subtract=subtract;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)}exports.intersection=intersection;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 memo3={"0,0":{operations:[],cost:0}};function dist(i,j){var memo_key="".concat(i,",").concat(j),memoized=memo3[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(a2,b2){return a2.cost-b2.cost})[0];memoized=best}memo3[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}exports.diffArrays=diffArrays;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]})}),intersection([input,output]).forEach(function(key){operations.push.apply(operations,diff2(input[key],output[key],ptr.add(key)))}),operations}exports.diffObjects=diffObjects;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}]}exports.diffAny=diffAny}});var require_patch=__commonJS({"../../node_modules/rfc6902/patch.js"(exports){"use strict";var __extends=exports&&exports.__extends||function(){var extendStatics=function(d,b2){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d2,b3){d2.__proto__=b3}||function(d2,b3){for(var p in b3)Object.prototype.hasOwnProperty.call(b3,p)&&(d2[p]=b3[p])},extendStatics(d,b2)};return function(d,b2){if(typeof b2!="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics(d,b2);function __(){this.constructor=d}d.prototype=b2===null?Object.create(b2):(__.prototype=b2.prototype,new __)}}();Object.defineProperty(exports,"__esModule",{value:!0});exports.apply=exports.InvalidOperationError=exports.test=exports.copy=exports.move=exports.replace=exports.remove=exports.add=exports.TestError=exports.MissingError=void 0;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){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)(operation.value)),null)}exports.add=add;function remove(object,operation){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)}exports.remove=remove;function replace(object,operation){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}exports.replace=replace;function move(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_remove(from_endpoint.parent,from_endpoint.key),_add(endpoint.parent,endpoint.key,from_endpoint.value),null)}exports.move=move;function copy(object,operation){var from_endpoint=pointer_1.Pointer.fromJSON(operation.from).evaluate(object);if(from_endpoint.value===void 0)return new MissingError(operation.from);var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return endpoint.parent===void 0?new MissingError(operation.path):(_add(endpoint.parent,endpoint.key,(0,util_1.clone)(from_endpoint.value)),null)}exports.copy=copy;function test(object,operation){var endpoint=pointer_1.Pointer.fromJSON(operation.path).evaluate(object);return(0,diff_1.diffAny)(endpoint.value,operation.value,new pointer_1.Pointer).length?new TestError(endpoint.value,operation.value):null}exports.test=test;var InvalidOperationError=function(_super){__extends(InvalidOperationError2,_super);function InvalidOperationError2(operation){var _this=_super.call(this,"Invalid operation: ".concat(operation.op))||this;return _this.operation=operation,_this.name="InvalidOperationError",_this}return InvalidOperationError2}(Error);exports.InvalidOperationError=InvalidOperationError;function apply(object,operation){switch(operation.op){case"add":return add(object,operation);case"remove":return remove(object,operation);case"replace":return replace(object,operation);case"move":return move(object,operation);case"copy":return copy(object,operation);case"test":return test(object,operation)}return new InvalidOperationError(operation)}exports.apply=apply}});var require_rfc6902=__commonJS({"../../node_modules/rfc6902/index.js"(exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.createTests=exports.createPatch=exports.applyPatch=exports.Pointer=void 0;var pointer_1=require_pointer();Object.defineProperty(exports,"Pointer",{enumerable:!0,get:function(){return pointer_1.Pointer}});var patch_1=require_patch(),diff_1=require_diff();function applyPatch(object,patch){return patch.map(function(operation){return(0,patch_1.apply)(object,operation)})}exports.applyPatch=applyPatch;function wrapVoidableDiff(diff2){function wrappedDiff(input,output,ptr){var custom_patch=diff2(input,output,ptr);return Array.isArray(custom_patch)?custom_patch:(0,diff_1.diffAny)(input,output,ptr,wrappedDiff)}return wrappedDiff}function createPatch2(input,output,diff2){var ptr=new pointer_1.Pointer;return(diff2?wrapVoidableDiff(diff2):diff_1.diffAny)(input,output,ptr)}exports.createPatch=createPatch2;function createTest(input,path){var endpoint=pointer_1.Pointer.fromJSON(path).evaluate(input);if(endpoint!==void 0)return{op:"test",path,value:endpoint.value}}function createTests(input,patch){var tests=new Array;return patch.filter(diff_1.isDestructive).forEach(function(operation){var pathTest=createTest(input,operation.path);if(pathTest&&tests.push(pathTest),"from"in operation){var fromTest=createTest(input,operation.from);fromTest&&tests.push(fromTest)}}),tests}exports.createTests=createTests}});var src_exports={};__export(src_exports,{AddressDisplay:()=>AddressDisplay,AddressInput:()=>AddressInput,AnnotationInput:()=>AnnotationInput,AppShell:()=>AppShell,AsyncAutocomplete:()=>AsyncAutocomplete,AttachmentArrayDisplay:()=>AttachmentArrayDisplay,AttachmentArrayInput:()=>AttachmentArrayInput,AttachmentButton:()=>AttachmentButton,AttachmentDisplay:()=>AttachmentDisplay,AttachmentInput:()=>AttachmentInput,BackboneElementDisplay:()=>BackboneElementDisplay,BackboneElementInput:()=>BackboneElementInput,BaseChat:()=>BaseChat,CalendarInput:()=>CalendarInput,ChatModal:()=>ChatModal,CheckboxFormSection:()=>CheckboxFormSection,CodeInput:()=>CodeInput,CodeableConceptDisplay:()=>CodeableConceptDisplay,CodeableConceptInput:()=>CodeableConceptInput,CodingDisplay:()=>CodingDisplay,CodingInput:()=>CodingInput,ContactDetailDisplay:()=>ContactDetailDisplay,ContactDetailInput:()=>ContactDetailInput,ContactPointDisplay:()=>ContactPointDisplay,ContactPointInput:()=>ContactPointInput,Container:()=>Container,DateTimeInput:()=>DateTimeInput,DefaultResourceTimeline:()=>DefaultResourceTimeline,DescriptionList:()=>DescriptionList,DescriptionListEntry:()=>DescriptionListEntry,DiagnosticReportDisplay:()=>DiagnosticReportDisplay,Document:()=>Document,ElementDefinitionInputSelector:()=>ElementDefinitionInputSelector,ElementDefinitionTypeInput:()=>ElementDefinitionTypeInput,EncounterTimeline:()=>EncounterTimeline,ErrorBoundary:()=>ErrorBoundary,FhirPathTable:()=>FhirPathTable,Form:()=>Form,FormSection:()=>FormSection,Header:()=>Header,HumanNameDisplay:()=>HumanNameDisplay,HumanNameInput:()=>HumanNameInput,IdentifierDisplay:()=>IdentifierDisplay,IdentifierInput:()=>IdentifierInput,Loading:()=>Loading,Logo:()=>Logo,MeasureReportDisplay:()=>MeasureReportDisplay,MedplumLink:()=>MedplumLink,MedplumProvider:()=>ee,MemoizedFhirPathTable:()=>MemoizedFhirPathTable,MemoizedSearchControl:()=>MemoizedSearchControl,MoneyDisplay:()=>MoneyDisplay,MoneyInput:()=>MoneyInput,Navbar:()=>Navbar,NoteDisplay:()=>NoteDisplay,NotificationIcon:()=>NotificationIcon,ObservationTable:()=>ObservationTable,OperationOutcomeAlert:()=>OperationOutcomeAlert,Panel:()=>Panel,PatientSummary:()=>PatientSummary,PatientTimeline:()=>PatientTimeline,PlanDefinitionBuilder:()=>PlanDefinitionBuilder,QuantityDisplay:()=>QuantityDisplay,QuantityInput:()=>QuantityInput,QuestionnaireBuilder:()=>QuestionnaireBuilder,QuestionnaireForm:()=>QuestionnaireForm,QuestionnaireItemType:()=>QuestionnaireItemType,RangeDisplay:()=>RangeDisplay,RangeInput:()=>RangeInput,ReferenceDisplay:()=>ReferenceDisplay,ReferenceInput:()=>ReferenceInput,ReferenceRangeEditor:()=>ReferenceRangeEditor,ReferenceRangeGroupEditor:()=>ReferenceRangeGroupEditor,RegisterForm:()=>RegisterForm,RequestGroupDisplay:()=>RequestGroupDisplay,ResourceArrayDisplay:()=>ResourceArrayDisplay,ResourceArrayInput:()=>ResourceArrayInput,ResourceAvatar:()=>ResourceAvatar,ResourceBadge:()=>ResourceBadge,ResourceBlame:()=>ResourceBlame,ResourceDiff:()=>ResourceDiff,ResourceForm:()=>ResourceForm,ResourceHistoryTable:()=>ResourceHistoryTable,ResourceInput:()=>ResourceInput,ResourceName:()=>ResourceName,ResourcePropertyDisplay:()=>ResourcePropertyDisplay,ResourcePropertyInput:()=>ResourcePropertyInput,ResourceTable:()=>ResourceTable,ResourceTimeline:()=>ResourceTimeline,Scheduler:()=>Scheduler,SearchChangeEvent:()=>SearchChangeEvent,SearchClickEvent:()=>SearchClickEvent,SearchControl:()=>SearchControl,SearchFieldEditor:()=>SearchFieldEditor,SearchFilterEditor:()=>SearchFilterEditor,SearchLoadEvent:()=>SearchLoadEvent,ServiceRequestTimeline:()=>ServiceRequestTimeline,SignInForm:()=>SignInForm,SmartAppLaunchLink:()=>SmartAppLaunchLink,StatusBadge:()=>StatusBadge,ThreadChat:()=>ThreadChat,Timeline:()=>Timeline,TimelineItem:()=>TimelineItem,TimingInput:()=>TimingInput,ValueSetAutocomplete:()=>ValueSetAutocomplete,addDateFilterBetween:()=>addDateFilterBetween,addField:()=>addField,addFilter:()=>addFilter,addLastMonthFilter:()=>addLastMonthFilter,addMissingFilter:()=>addMissingFilter,addNextMonthFilter:()=>addNextMonthFilter,addThisMonthFilter:()=>addThisMonthFilter,addTodayFilter:()=>addTodayFilter,addTomorrowFilter:()=>addTomorrowFilter,addYearToDateFilter:()=>addYearToDateFilter,addYesterdayFilter:()=>addYesterdayFilter,buildFieldNameString:()=>buildFieldNameString,buildInitialResponse:()=>buildInitialResponse,buildInitialResponseItem:()=>buildInitialResponseItem,clearFilters:()=>clearFilters,clearFiltersOnField:()=>clearFiltersOnField,convertIsoToLocal:()=>convertIsoToLocal,convertLocalToIso:()=>convertLocalToIso,createScriptTag:()=>createScriptTag,deleteFilter:()=>deleteFilter,formatReferenceString:()=>formatReferenceString,getErrorsForInput:()=>getErrorsForInput,getFieldDefinitions:()=>getFieldDefinitions,getIssuesForExpression:()=>getIssuesForExpression,getNewMultiSelectValues:()=>getNewMultiSelectValues,getNumberOfPages:()=>getNumberOfPages,getOpString:()=>getOpString,getQuestionnaireItemReferenceFilter:()=>getQuestionnaireItemReferenceFilter,getQuestionnaireItemReferenceTargetTypes:()=>getQuestionnaireItemReferenceTargetTypes,getRecaptcha:()=>getRecaptcha,getSearchOperators:()=>getSearchOperators,getSortField:()=>getSortField,getValuePath:()=>getValuePath,initRecaptcha:()=>initRecaptcha,isChoiceQuestion:()=>isChoiceQuestion,isQuestionEnabled:()=>isQuestionEnabled,isSortDescending:()=>isSortDescending,isSupportedProfileStructureDefinition:()=>isSupportedProfileStructureDefinition,parseForm:()=>parseForm,reactContext:()=>R,renderValue:()=>renderValue,setFilters:()=>setFilters,setOffset:()=>setOffset,setPage:()=>setPage,setPropertyValue:()=>setPropertyValue,setQuestionnaireItemReferenceTargetTypes:()=>setQuestionnaireItemReferenceTargetTypes,setSort:()=>setSort,sortByDateAndPriority:()=>sortByDateAndPriority,toggleSort:()=>toggleSort,useCachedBinaryUrl:()=>oe,useMedplum:()=>a,useMedplumContext:()=>x,useMedplumNavigate:()=>V,useMedplumProfile:()=>W,usePrevious:()=>se,useResource:()=>pe,useSearch:()=>Me,useSearchOne:()=>Ce,useSearchResources:()=>Ee,useSubscription:()=>Oe});module.exports=__toCommonJS(src_exports);var import_react=require("react"),import_react2=require("react"),import_jsx_runtime=require("react/jsx-runtime"),import_react3=require("react"),import_react4=require("react"),import_core=require("@medplum/core"),import_react5=require("react"),import_core2=require("@medplum/core"),import_react6=require("react"),import_react7=require("react"),R=(0,import_react2.createContext)(void 0);function x(){return(0,import_react2.useContext)(R)}function a(){return x().medplum}function V(){return x().navigate}function W(){return x().profile}function ee(e){let t=e.medplum,n=e.navigate??I,[o,u]=(0,import_react.useState)({profile:t.getProfile(),loading:!t.isInitialized});(0,import_react.useEffect)(()=>{t&&(t.isInitialized||(u(r2=>({...r2,loading:!0})),t.getInitPromise().then(()=>u(r2=>({...r2,loading:!1}))).catch(console.error)))},[t,t.isInitialized]),(0,import_react.useEffect)(()=>{function r2(){u({...o,profile:t.getProfile()})}return t.addEventListener("change",r2),()=>t.removeEventListener("change",r2)},[t,o]);let i=(0,import_react.useMemo)(()=>({...o,medplum:t,navigate:n}),[o,t,n]);return(0,import_jsx_runtime.jsx)(R.Provider,{value:i,children:e.children})}function I(e){window.location.assign(e)}var C=new Map,oe=e=>(0,import_react3.useMemo)(()=>{if(!e)return;let t=e.split("?")[0];if(!t)return e;let n;try{n=new URLSearchParams(new URL(e).search)}catch{return e}if(!n.has("Key-Pair-Id")||!n.has("Signature"))return e;let o=n.get("Expires");if(!o||o.length>13)return e;let u=C.get(t);if(u){let r2=new URLSearchParams(new URL(u).search).get("Expires");if(r2&&parseInt(r2,10)*1e3-5e3>Date.now())return u}return C.set(t,e),e},[e]);function se(e){let t=(0,import_react4.useRef)();return(0,import_react4.useEffect)(()=>{t.current=e}),t.current}function pe(e,t){let n=a(),[o,u]=(0,import_react5.useState)(S(n,e)),i=(0,import_react5.useCallback)(r2=>{(0,import_core.deepEquals)(r2,o)||u(r2)},[o,u]);return(0,import_react5.useEffect)(()=>{i(S(n,e))},[n,e,i]),(0,import_react5.useEffect)(()=>{let r2=!0;return(0,import_core.isReference)(e)&&n.readReference(e).then(s=>{r2&&i(s)}).catch(s=>{r2&&(i(void 0),t&&t((0,import_core.normalizeOperationOutcome)(s)))}),()=>r2=!1},[n,o,e,i,t]),o}function S(e,t){if(t){if((0,import_core.isResource)(t))return t;if((0,import_core.isReference)(t))return e.getCachedReference(t)}}function Me(e,t){return g("search",e,t)}function Ce(e,t){return g("searchOne",e,t)}function Ee(e,t){return g("searchResources",e,t)}function g(e,t,n){let o=a(),[u,i]=(0,import_react6.useState)(),[r2,s]=(0,import_react6.useState)(!1),[d,c]=(0,import_react6.useState)(),[p,h]=(0,import_react6.useState)();return(0,import_react6.useEffect)(()=>{let T=o.fhirSearchUrl(t,n).toString();T!==u&&(i(T),o[e](t,n).then(l=>{s(!1),c(l),h(import_core2.allOk)}).catch(l=>{s(!1),c(void 0),h((0,import_core2.normalizeOperationOutcome)(l))}))},[o,e,t,n,u]),[d,r2,p]}var G=3e3;function Oe(e,t){let n=a(),[o,u]=(0,import_react7.useState)(),i=(0,import_react7.useRef)(!1),r2=(0,import_react7.useRef)(),s=(0,import_react7.useRef)(),d=(0,import_react7.useRef)();d.current=t,(0,import_react7.useEffect)(()=>(r2.current&&(clearTimeout(r2.current),r2.current=void 0),s.current!==e&&u(n.subscribeToCriteria(e)),s.current=e,()=>{r2.current=setTimeout(()=>{u(void 0),n.unsubscribeFromCriteria(e)},G)}),[n,e]);let c=(0,import_react7.useCallback)(p=>{d.current?.(p.payload)},[]);(0,import_react7.useEffect)(()=>o?(i.current||(o.addEventListener("message",c),i.current=!0),()=>{i.current=!1,o.removeEventListener("message",c)}):()=>{},[o,c])}var import_core3=require("@medplum/core"),import_jsx_runtime2=require("react/jsx-runtime");function AddressDisplay(props){let address=props.value;return address?(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_core3.formatAddress)(address)}):null}var import_core4=require("@mantine/core"),import_react8=require("react"),import_jsx_runtime3=require("react/jsx-runtime");function getLine(address,index){return address.line&&address.line.length>index?address.line[index]:""}function setLine(address,index,str){let line=address.line||[];for(;line.length<=index;)line.push("");return line[index]=str,{...address,line}}function AddressInput(props){let[value,setValue]=(0,import_react8.useState)(props.defaultValue||{}),valueRef=(0,import_react8.useRef)();valueRef.current=value;function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}function setUse(use){setValueWrapper({...valueRef.current,use})}function setType(type){setValueWrapper({...valueRef.current,type})}function setLine1(line1){setValueWrapper(setLine(valueRef.current||{},0,line1))}function setLine2(line2){setValueWrapper(setLine(valueRef.current||{},1,line2))}function setCity(city){setValueWrapper({...valueRef.current,city})}function setState(state){setValueWrapper({...valueRef.current,state})}function setPostalCode(postalCode){setValueWrapper({...valueRef.current,postalCode})}return(0,import_jsx_runtime3.jsxs)(import_core4.Group,{gap:"xs",wrap:"nowrap",grow:!0,children:[(0,import_jsx_runtime3.jsx)(import_core4.NativeSelect,{"data-testid":"address-use",defaultValue:value.use,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","billing"]}),(0,import_jsx_runtime3.jsx)(import_core4.NativeSelect,{"data-testid":"address-type",defaultValue:value.type,onChange:e=>setType(e.currentTarget.value),data:["","postal","physical","both"]}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Line 1",defaultValue:getLine(value,0),onChange:e=>setLine1(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Line 2",defaultValue:getLine(value,1),onChange:e=>setLine2(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"City",defaultValue:value.city,onChange:e=>setCity(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"State",defaultValue:value.state,onChange:e=>setState(e.currentTarget.value)}),(0,import_jsx_runtime3.jsx)(import_core4.TextInput,{placeholder:"Postal Code",defaultValue:value.postalCode,onChange:e=>setPostalCode(e.currentTarget.value)})]})}var import_core5=require("@mantine/core"),import_core6=require("@medplum/core");var import_react9=require("react"),import_jsx_runtime4=require("react/jsx-runtime");function AnnotationInput(props){let author=W(),[value,setValue]=(0,import_react9.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_runtime4.jsx)(import_core5.TextInput,{name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}var import_core27=require("@mantine/core"),import_notifications3=require("@mantine/notifications");var import_react19=require("react");var import_core7=require("@mantine/core"),import_core8=require("@medplum/core");var import_react10=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_react10.forwardRef)(({color="currentColor",size=24,stroke=2,className,children,...rest},ref)=>(0,import_react10.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},[...iconNode.map(([tag,attrs])=>(0,import_react10.createElement)(tag,attrs)),...Array.isArray(children)?children:[children]]));return Component2.displayName=`${iconNamePascal}`,Component2};var IconAdjustmentsHorizontal=createReactComponent("outline","adjustments-horizontal","IconAdjustmentsHorizontal",[["path",{d:"M14 6m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-0"}],["path",{d:"M4 6l8 0",key:"svg-1"}],["path",{d:"M16 6l4 0",key:"svg-2"}],["path",{d:"M8 12m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-3"}],["path",{d:"M4 12l2 0",key:"svg-4"}],["path",{d:"M10 12l10 0",key:"svg-5"}],["path",{d:"M17 18m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-6"}],["path",{d:"M4 18l11 0",key:"svg-7"}],["path",{d:"M19 18l1 0",key:"svg-8"}]]);var IconAlertCircle=createReactComponent("outline","alert-circle","IconAlertCircle",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M12 8v4",key:"svg-1"}],["path",{d:"M12 16h.01",key:"svg-2"}]]);var IconArrowDown=createReactComponent("outline","arrow-down","IconArrowDown",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 13l-6 6",key:"svg-1"}],["path",{d:"M6 13l6 6",key:"svg-2"}]]);var IconArrowRight=createReactComponent("outline","arrow-right","IconArrowRight",[["path",{d:"M5 12l14 0",key:"svg-0"}],["path",{d:"M13 18l6 -6",key:"svg-1"}],["path",{d:"M13 6l6 6",key:"svg-2"}]]);var IconArrowUp=createReactComponent("outline","arrow-up","IconArrowUp",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M18 11l-6 -6",key:"svg-1"}],["path",{d:"M6 11l6 -6",key:"svg-2"}]]);var IconBleachOff=createReactComponent("outline","bleach-off","IconBleachOff",[["path",{d:"M5 19h14m1.986 -1.977a2 2 0 0 0 -.146 -.773l-7.1 -12.25a2 2 0 0 0 -3.5 0l-.815 1.405m-1.488 2.568l-4.797 8.277a2 2 0 0 0 1.75 2.75",key:"svg-0"}],["path",{d:"M3 3l18 18",key:"svg-1"}]]);var IconBleach=createReactComponent("outline","bleach","IconBleach",[["path",{d:"M5 19h14a2 2 0 0 0 1.84 -2.75l-7.1 -12.25a2 2 0 0 0 -3.5 0l-7.1 12.25a2 2 0 0 0 1.75 2.75",key:"svg-0"}]]);var IconBoxMultiple=createReactComponent("outline","box-multiple","IconBoxMultiple",[["path",{d:"M7 3m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z",key:"svg-0"}],["path",{d:"M17 17v2a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2",key:"svg-1"}]]);var IconBracketsContain=createReactComponent("outline","brackets-contain","IconBracketsContain",[["path",{d:"M7 4h-4v16h4",key:"svg-0"}],["path",{d:"M17 4h4v16h-4",key:"svg-1"}],["path",{d:"M8 16h.01",key:"svg-2"}],["path",{d:"M12 16h.01",key:"svg-3"}],["path",{d:"M16 16h.01",key:"svg-4"}]]);var IconBucketOff=createReactComponent("outline","bucket-off","IconBucketOff",[["path",{d:"M5.029 5.036c-.655 .58 -1.029 1.25 -1.029 1.964c0 2.033 3.033 3.712 6.96 3.967m3.788 -.21c3.064 -.559 5.252 -2.029 5.252 -3.757c0 -2.21 -3.582 -4 -8 -4c-1.605 0 -3.1 .236 -4.352 .643",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.1 -.3 .252 -.812 .457 -1.535m.862 -3.146c.262 -.975 .735 -2.76 1.418 -5.354a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}],["path",{d:"M3 3l18 18",key:"svg-2"}]]);var IconBucket=createReactComponent("outline","bucket","IconBucket",[["path",{d:"M12 7m-8 0a8 4 0 1 0 16 0a8 4 0 1 0 -16 0",key:"svg-0"}],["path",{d:"M4 7c0 .664 .088 1.324 .263 1.965l2.737 10.035c.5 1.5 2.239 2 5 2s4.5 -.5 5 -2c.333 -1 1.246 -4.345 2.737 -10.035a7.45 7.45 0 0 0 .263 -1.965",key:"svg-1"}]]);var IconCalendar=createReactComponent("outline","calendar","IconCalendar",[["path",{d:"M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z",key:"svg-0"}],["path",{d:"M16 3v4",key:"svg-1"}],["path",{d:"M8 3v4",key:"svg-2"}],["path",{d:"M4 11h16",key:"svg-3"}],["path",{d:"M11 15h1",key:"svg-4"}],["path",{d:"M12 15v3",key:"svg-5"}]]);var IconCheck=createReactComponent("outline","check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]);var IconCheckbox=createReactComponent("outline","checkbox","IconCheckbox",[["path",{d:"M9 11l3 3l8 -8",key:"svg-0"}],["path",{d:"M20 12v6a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2h9",key:"svg-1"}]]);var IconChevronDown=createReactComponent("outline","chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]);var IconChevronUp=createReactComponent("outline","chevron-up","IconChevronUp",[["path",{d:"M6 15l6 -6l6 6",key:"svg-0"}]]);var IconCircleMinus=createReactComponent("outline","circle-minus","IconCircleMinus",[["path",{d:"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0",key:"svg-0"}],["path",{d:"M9 12l6 0",key:"svg-1"}]]);var IconCirclePlus=createReactComponent("outline","circle-plus","IconCirclePlus",[["path",{d:"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0",key:"svg-0"}],["path",{d:"M9 12h6",key:"svg-1"}],["path",{d:"M12 9v6",key:"svg-2"}]]);var IconCloudUpload=createReactComponent("outline","cloud-upload","IconCloudUpload",[["path",{d:"M7 18a4.6 4.4 0 0 1 0 -9a5 4.5 0 0 1 11 2h1a3.5 3.5 0 0 1 0 7h-1",key:"svg-0"}],["path",{d:"M9 15l3 -3l3 3",key:"svg-1"}],["path",{d:"M12 12l0 9",key:"svg-2"}]]);var IconColumns=createReactComponent("outline","columns","IconColumns",[["path",{d:"M4 6l5.5 0",key:"svg-0"}],["path",{d:"M4 10l5.5 0",key:"svg-1"}],["path",{d:"M4 14l5.5 0",key:"svg-2"}],["path",{d:"M4 18l5.5 0",key:"svg-3"}],["path",{d:"M14.5 6l5.5 0",key:"svg-4"}],["path",{d:"M14.5 10l5.5 0",key:"svg-5"}],["path",{d:"M14.5 14l5.5 0",key:"svg-6"}],["path",{d:"M14.5 18l5.5 0",key:"svg-7"}]]);var IconCopy=createReactComponent("outline","copy","IconCopy",[["path",{d:"M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z",key:"svg-0"}],["path",{d:"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1",key:"svg-1"}]]);var IconCurrencyDollar=createReactComponent("outline","currency-dollar","IconCurrencyDollar",[["path",{d:"M16.7 8a3 3 0 0 0 -2.7 -2h-4a3 3 0 0 0 0 6h4a3 3 0 0 1 0 6h-4a3 3 0 0 1 -2.7 -2",key:"svg-0"}],["path",{d:"M12 3v3m0 12v3",key:"svg-1"}]]);var IconDots=createReactComponent("outline","dots","IconDots",[["path",{d:"M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-0"}],["path",{d:"M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-2"}]]);var IconEdit=createReactComponent("outline","edit","IconEdit",[["path",{d:"M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1",key:"svg-0"}],["path",{d:"M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z",key:"svg-1"}],["path",{d:"M16 5l3 3",key:"svg-2"}]]);var IconEqualNot=createReactComponent("outline","equal-not","IconEqualNot",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}],["path",{d:"M5 19l14 -14",key:"svg-2"}]]);var IconEqual=createReactComponent("outline","equal","IconEqual",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]]);var IconFileAlert=createReactComponent("outline","file-alert","IconFileAlert",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 17l.01 0",key:"svg-2"}],["path",{d:"M12 11l0 3",key:"svg-3"}]]);var IconFilePlus=createReactComponent("outline","file-plus","IconFilePlus",[["path",{d:"M14 3v4a1 1 0 0 0 1 1h4",key:"svg-0"}],["path",{d:"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z",key:"svg-1"}],["path",{d:"M12 11l0 6",key:"svg-2"}],["path",{d:"M9 14l6 0",key:"svg-3"}]]);var IconFilter=createReactComponent("outline","filter","IconFilter",[["path",{d:"M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z",key:"svg-0"}]]);var IconGenderFemale=createReactComponent("outline","gender-female","IconGenderFemale",[["path",{d:"M12 9m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-0"}],["path",{d:"M12 14v7",key:"svg-1"}],["path",{d:"M9 18h6",key:"svg-2"}]]);var IconGenderMale=createReactComponent("outline","gender-male","IconGenderMale",[["path",{d:"M10 14m-5 0a5 5 0 1 0 10 0a5 5 0 1 0 -10 0",key:"svg-0"}],["path",{d:"M19 5l-5.4 5.4",key:"svg-1"}],["path",{d:"M19 5h-5",key:"svg-2"}],["path",{d:"M19 5v5",key:"svg-3"}]]);var IconListDetails=createReactComponent("outline","list-details","IconListDetails",[["path",{d:"M13 5h8",key:"svg-0"}],["path",{d:"M13 9h5",key:"svg-1"}],["path",{d:"M13 15h8",key:"svg-2"}],["path",{d:"M13 19h5",key:"svg-3"}],["path",{d:"M3 4m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-4"}],["path",{d:"M3 14m0 1a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1z",key:"svg-5"}]]);var IconLogout=createReactComponent("outline","logout","IconLogout",[["path",{d:"M14 8v-2a2 2 0 0 0 -2 -2h-7a2 2 0 0 0 -2 2v12a2 2 0 0 0 2 2h7a2 2 0 0 0 2 -2v-2",key:"svg-0"}],["path",{d:"M9 12h12l-3 -3",key:"svg-1"}],["path",{d:"M18 15l3 -3",key:"svg-2"}]]);var IconMathGreater=createReactComponent("outline","math-greater","IconMathGreater",[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]]);var IconMathLower=createReactComponent("outline","math-lower","IconMathLower",[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]]);var IconMessage=createReactComponent("outline","message","IconMessage",[["path",{d:"M8 9h8",key:"svg-0"}],["path",{d:"M8 13h6",key:"svg-1"}],["path",{d:"M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12z",key:"svg-2"}]]);var IconPin=createReactComponent("outline","pin","IconPin",[["path",{d:"M15 4.5l-4 4l-4 1.5l-1.5 1.5l7 7l1.5 -1.5l1.5 -4l4 -4",key:"svg-0"}],["path",{d:"M9 15l-4.5 4.5",key:"svg-1"}],["path",{d:"M14.5 4l5.5 5.5",key:"svg-2"}]]);var IconPinnedOff=createReactComponent("outline","pinned-off","IconPinnedOff",[["path",{d:"M3 3l18 18",key:"svg-0"}],["path",{d:"M15 4.5l-3.249 3.249m-2.57 1.433l-2.181 .818l-1.5 1.5l7 7l1.5 -1.5l.82 -2.186m1.43 -2.563l3.25 -3.251",key:"svg-1"}],["path",{d:"M9 15l-4.5 4.5",key:"svg-2"}],["path",{d:"M14.5 4l5.5 5.5",key:"svg-3"}]]);var IconPlus=createReactComponent("outline","plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);var IconRefresh=createReactComponent("outline","refresh","IconRefresh",[["path",{d:"M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4",key:"svg-0"}],["path",{d:"M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4",key:"svg-1"}]]);var IconSearch=createReactComponent("outline","search","IconSearch",[["path",{d:"M10 10m-7 0a7 7 0 1 0 14 0a7 7 0 1 0 -14 0",key:"svg-0"}],["path",{d:"M21 21l-6 -6",key:"svg-1"}]]);var IconSettings=createReactComponent("outline","settings","IconSettings",[["path",{d:"M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z",key:"svg-0"}],["path",{d:"M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-1"}]]);var IconSortAscending=createReactComponent("outline","sort-ascending","IconSortAscending",[["path",{d:"M4 6l7 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l9 0",key:"svg-2"}],["path",{d:"M15 9l3 -3l3 3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSortDescending=createReactComponent("outline","sort-descending","IconSortDescending",[["path",{d:"M4 6l9 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l7 0",key:"svg-2"}],["path",{d:"M15 15l3 3l3 -3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]]);var IconSquare=createReactComponent("outline","square","IconSquare",[["path",{d:"M3 3m0 2a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2z",key:"svg-0"}]]);var IconStethoscope=createReactComponent("outline","stethoscope","IconStethoscope",[["path",{d:"M6 4h-1a2 2 0 0 0 -2 2v3.5h0a5.5 5.5 0 0 0 11 0v-3.5a2 2 0 0 0 -2 -2h-1",key:"svg-0"}],["path",{d:"M8 15a6 6 0 1 0 12 0v-3",key:"svg-1"}],["path",{d:"M11 3v2",key:"svg-2"}],["path",{d:"M6 3v2",key:"svg-3"}],["path",{d:"M20 10m-2 0a2 2 0 1 0 4 0a2 2 0 1 0 -4 0",key:"svg-4"}]]);var IconSwitchHorizontal=createReactComponent("outline","switch-horizontal","IconSwitchHorizontal",[["path",{d:"M16 3l4 4l-4 4",key:"svg-0"}],["path",{d:"M10 7l10 0",key:"svg-1"}],["path",{d:"M8 13l-4 4l4 4",key:"svg-2"}],["path",{d:"M4 17l9 0",key:"svg-3"}]]);var IconTableExport=createReactComponent("outline","table-export","IconTableExport",[["path",{d:"M12.5 21h-7.5a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v7.5",key:"svg-0"}],["path",{d:"M3 10h18",key:"svg-1"}],["path",{d:"M10 3v18",key:"svg-2"}],["path",{d:"M16 19h6",key:"svg-3"}],["path",{d:"M19 16l3 3l-3 3",key:"svg-4"}]]);var IconTrash=createReactComponent("outline","trash","IconTrash",[["path",{d:"M4 7l16 0",key:"svg-0"}],["path",{d:"M10 11l0 6",key:"svg-1"}],["path",{d:"M14 11l0 6",key:"svg-2"}],["path",{d:"M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12",key:"svg-3"}],["path",{d:"M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3",key:"svg-4"}]]);var IconUserSquare=createReactComponent("outline","user-square","IconUserSquare",[["path",{d:"M9 10a3 3 0 1 0 6 0a3 3 0 0 0 -6 0",key:"svg-0"}],["path",{d:"M6 21v-1a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v1",key:"svg-1"}],["path",{d:"M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z",key:"svg-2"}]]);var IconX=createReactComponent("outline","x","IconX",[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]]);var import_react11=require("react"),import_jsx_runtime5=require("react/jsx-runtime"),ErrorBoundary=class extends import_react11.Component{constructor(props){super(props),this.state={lastLocation:window.location.toString()}}static getDerivedStateFromError(error){return{error,lastLocation:window.location.toString()}}componentDidUpdate(_prevProps,_prevState){window.location.toString()!==this.state.lastLocation&&this.setState({lastLocation:window.location.toString(),error:void 0})}shouldComponentUpdate(nextProps,nextState){return!!(this.props.children!==nextProps.children||nextState.error&&!this.state.error||this.state.lastLocation!==window.location.toString())}componentDidCatch(error,errorInfo){console.error("Uncaught error:",error,errorInfo)}render(){return this.state.error?(0,import_jsx_runtime5.jsx)(import_core7.Alert,{icon:(0,import_jsx_runtime5.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_runtime6=require("react/jsx-runtime");function Loading(){return(0,import_jsx_runtime6.jsx)(import_core9.Center,{style:{width:"100%",height:"100vh"},children:(0,import_jsx_runtime6.jsx)(import_core9.Loader,{})})}var AppShell_default={main:"AppShell_main"};var import_core21=require("@mantine/core"),import_core22=require("@medplum/core");function r(e){var t,f2,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]&&(f2=r(e[t]))&&(n&&(n+=" "),n+=f2)}else for(f2 in e)e[f2]&&(n&&(n+=" "),n+=f2);return n}function clsx(){for(var e,t,f2=0,n="",o=arguments.length;f2<o;f2++)(e=arguments[f2])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;var import_react14=require("react");var import_core12=require("@mantine/core"),import_core13=require("@medplum/core");var import_core10=require("@mantine/core"),import_core11=require("@medplum/core");function killEvent(e){e.preventDefault(),e.stopPropagation()}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"}var import_jsx_runtime7=require("react/jsx-runtime");function MedplumLink(props){let navigate=V(),{to,suffix,label,onClick,children,...rest}=props,href=getHref(to);return suffix&&(href+="/"+suffix),(0,import_jsx_runtime7.jsx)(import_core10.Anchor,{href,"aria-label":label,onClick:e=>{killEvent(e),onClick?onClick(e):to&&navigate(href)},...rest,children})}function getHref(to){if(to){if(typeof to=="string")return getStringHref(to);if((0,import_core11.isResource)(to))return getResourceHref(to);if((0,import_core11.isReference)(to))return getReferenceHref(to)}return"#"}function getStringHref(to){return to.startsWith("http://")||to.startsWith("https://")||to.startsWith("/")?to:"/"+to}function getResourceHref(to){return`/${to.resourceType}/${to.id}`}function getReferenceHref(to){return`/${to.reference}`}function getInitials(input){let words=input.split(" ").filter(Boolean);return words.length>1?words[0][0]+words[words.length-1][0]:words.length===1?words[0][0]:""}var import_jsx_runtime8=require("react/jsx-runtime");function ResourceAvatar(props){let resource=pe(props.value),text=resource?(0,import_core13.getDisplayString)(resource):props.alt??"",initials=getInitials(text),uncachedImageUrl=(resource&&(0,import_core13.getImageSrc)(resource))??props.src,imageUrl=oe(uncachedImageUrl??void 0),radius=props.radius??"xl",avatarProps={...props,value:void 0,link:void 0};return props.link?(0,import_jsx_runtime8.jsx)(MedplumLink,{to:resource,children:(0,import_jsx_runtime8.jsx)(import_core12.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}):(0,import_jsx_runtime8.jsx)(import_core12.Avatar,{src:imageUrl,alt:text,radius,...avatarProps,children:initials})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName",userActive:"Header_userActive"};var import_core15=require("@mantine/core"),import_core16=require("@medplum/core");var import_core14=require("@medplum/core"),import_jsx_runtime9=require("react/jsx-runtime");function HumanNameDisplay(props){let name=props.value;return name?(0,import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment,{children:(0,import_core14.formatHumanName)(name,props.options)}):null}var import_jsx_runtime10=require("react/jsx-runtime");function HeaderDropdown(props){let context=x(),{medplum,profile,navigate}=context,logins=medplum.getLogins(),{colorScheme,setColorScheme}=(0,import_core15.useMantineColorScheme)();return(0,import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment,{children:[(0,import_jsx_runtime10.jsxs)(import_core15.Stack,{align:"center",p:"xl",children:[(0,import_jsx_runtime10.jsx)(ResourceAvatar,{size:"xl",radius:100,value:context.profile}),(0,import_jsx_runtime10.jsx)(HumanNameDisplay,{value:context.profile?.name?.[0]}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),logins.map(login=>login.profile.reference!==(0,import_core16.getReferenceString)(context.profile)&&(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>window.location.reload()).catch(console.log)},children:(0,import_jsx_runtime10.jsxs)(import_core15.Group,{children:[(0,import_jsx_runtime10.jsx)(import_core15.Avatar,{radius:"xl"}),(0,import_jsx_runtime10.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime10.jsx)(import_core15.Text,{size:"sm",fw:500,children:login.profile.display}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),(0,import_jsx_runtime10.jsx)(import_core15.Group,{justify:"center",children:(0,import_jsx_runtime10.jsx)(import_core15.SegmentedControl,{size:"xs",value:colorScheme,onChange:newValue=>setColorScheme(newValue),data:[{label:"Light",value:"light"},{label:"Dark",value:"dark"},{label:"Auto",value:"auto"}]})}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Divider,{}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Add another account"}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${(0,import_core16.getReferenceString)(profile)}`),children:"Account settings"}),(0,import_jsx_runtime10.jsx)(import_core15.Menu.Item,{leftSection:(0,import_jsx_runtime10.jsx)(IconLogout,{size:14,stroke:1.5}),onClick:async()=>{await medplum.signOut(),navigate("/signin")},children:"Sign out"}),(0,import_jsx_runtime10.jsx)(import_core15.Text,{size:"xs",c:"dimmed",ta:"center",children:props.version})]})}var import_core19=require("@medplum/core");var import_react13=require("react");var import_core17=require("@mantine/core"),import_notifications=require("@mantine/notifications"),import_core18=require("@medplum/core"),import_react12=require("react");var import_jsx_runtime11=require("react/jsx-runtime");function AsyncAutocomplete(props){let combobox=(0,import_core17.useCombobox)({onDropdownClose:()=>combobox.resetSelectedOption(),onDropdownOpen:()=>combobox.updateSelectedOptionIndex("active")}),{name,label,description,error,defaultValue:defaultValue2,toOption:toOption4,loadOptions,itemComponent,onChange,onCreate,creatable,clearable,required,placeholder,leftSection,maxValues,optionsDropdownMaxHeight=320,...rest}=props,defaultItems=toDefaultItems(defaultValue2),[search,setSearch]=(0,import_react12.useState)(""),[timer,setTimer]=(0,import_react12.useState)(),[abortController,setAbortController]=(0,import_react12.useState)(),[autoSubmit,setAutoSubmit]=(0,import_react12.useState)(),[selected,setSelected]=(0,import_react12.useState)(defaultItems.map(toOption4)),[options,setOptions]=(0,import_react12.useState)([]),ItemComponent4=itemComponent??DefaultItemComponent,searchRef=(0,import_react12.useRef)();searchRef.current=search;let lastLoadOptionsRef=(0,import_react12.useRef)(),lastValueRef=(0,import_react12.useRef)(),timerRef=(0,import_react12.useRef)();timerRef.current=timer;let abortControllerRef=(0,import_react12.useRef)();abortControllerRef.current=abortController;let autoSubmitRef=(0,import_react12.useRef)();autoSubmitRef.current=autoSubmit;let optionsRef=(0,import_react12.useRef)();optionsRef.current=options;let handleTimer=(0,import_react12.useCallback)(()=>{if(setTimer(void 0),searchRef.current===lastValueRef.current&&loadOptions===lastLoadOptionsRef.current)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)),setAbortController(void 0),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_core18.normalizeErrorString)(err)})})},[combobox,loadOptions,onChange,toOption4]),handleSearchChange=(0,import_react12.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_react12.useCallback)(newValue=>{let result=[],newSelected=[...selected],option=options?.find(option2=>option2.value===newValue),item=option?.resource;if(!item&&creatable!==!1&&onCreate&&(item=onCreate(newValue),option=toOption4(item)),item&&result.push(item),option&&newSelected.push(option),maxValues!==void 0)for(;newSelected.length>maxValues;)newSelected.shift();onChange(result),setSelected(newSelected)},[creatable,options,selected,maxValues,onChange,onCreate,toOption4]),handleValueSelect=val=>{setSearch(""),setOptions([]),combobox.closeDropdown(),lastValueRef.current=void 0,addSelected(val==="$create"?search:val)},handleValueRemove=(0,import_react12.useCallback)(item=>{let newSelected=selected.filter(v2=>v2.value!==item.value);onChange(newSelected.map(v2=>v2.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=(0,import_react12.useCallback)(e=>{e.key==="Enter"?!timer&&!abortController?(killEvent(e),options&&options.length>0&&(setOptions(options.slice(0,1)),addSelected(options[0].value))):setAutoSubmit(!0):e.key==="Backspace"&&search.length===0&&(killEvent(e),handleValueRemove(selected[selected.length-1]))},[search,selected,options,timer,abortController,addSelected,handleValueRemove]);(0,import_react12.useEffect)(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=clearable&&selected.length>0&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.ClearButton,{title:"Clear all",size:16,onClear:()=>{setSearch(""),setSelected([]),onChange([]),combobox.closeDropdown()}});return(0,import_jsx_runtime11.jsxs)(import_core17.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[(0,import_jsx_runtime11.jsx)(import_core17.Combobox.DropdownTarget,{children:(0,import_jsx_runtime11.jsx)(import_core17.PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?(0,import_jsx_runtime11.jsx)(import_core17.Loader,{size:16}):clearButton,required,children:(0,import_jsx_runtime11.jsxs)(import_core17.Pill.Group,{children:[selected.map(item=>(0,import_jsx_runtime11.jsx)(import_core17.Pill,{withRemoveButton:!0,onRemove:()=>handleValueRemove(item),children:item.label},item.value)),(maxValues===void 0||maxValues===0||selected.length<maxValues)&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.EventsTarget,{children:(0,import_jsx_runtime11.jsx)(import_core17.PillsInput.Field,{role:"searchbox",name,value:search,placeholder,onFocus:handleSearchChange,onBlur:()=>combobox.closeDropdown(),onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Dropdown,{children:(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Options,{children:(0,import_jsx_runtime11.jsxs)(import_core17.ScrollAreaAutosize,{type:"scroll",mah:optionsDropdownMaxHeight,children:[options.map(item=>(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Option,{value:item.value,active:selected.includes(item),children:(0,import_jsx_runtime11.jsx)(ItemComponent4,{...item})},item.value)),creatable&&search.trim().length>0&&(0,import_jsx_runtime11.jsxs)(import_core17.Combobox.Option,{value:"$create",children:["+ Create ",search]}),!creatable&&search.trim().length>0&&options.length===0&&(0,import_jsx_runtime11.jsx)(import_core17.Combobox.Empty,{children:"Nothing found"})]})})})]})}function toDefaultItems(defaultValue2){return defaultValue2?Array.isArray(defaultValue2)?defaultValue2:[defaultValue2]:[]}function DefaultItemComponent(props){return(0,import_jsx_runtime11.jsx)(import_core17.Group,{gap:"sm",children:(0,import_jsx_runtime11.jsx)("span",{children:props.label})})}var HeaderSearchInput_default={searchInput:"HeaderSearchInput_searchInput"};var import_core20=require("@mantine/core");var import_jsx_runtime12=require("react/jsx-runtime");function toOption(resource){return{value:resource.id,label:(0,import_core19.getDisplayString)(resource),resource}}function HeaderSearchInput(props){let navigate=V(),medplum=a(),loadData=(0,import_react13.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_react13.useCallback)(item=>{item.length>0&&navigate(`/${(0,import_core19.getReferenceString)(item[0])}`)},[navigate]);return(0,import_jsx_runtime12.jsx)(AsyncAutocomplete,{size:"sm",radius:"md",className:HeaderSearchInput_default.searchInput,leftSection:(0,import_jsx_runtime12.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_react13.forwardRef)(({resource,...others},ref)=>{let helpText;return resource.resourceType==="Patient"?helpText=resource.birthDate:resource.resourceType==="ServiceRequest"&&(helpText=resource.subject?.display),(0,import_jsx_runtime12.jsx)("div",{ref,...others,children:(0,import_jsx_runtime12.jsxs)(import_core20.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime12.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime12.jsxs)("div",{children:[(0,import_jsx_runtime12.jsx)(import_core20.Text,{children:(0,import_core19.getDisplayString)(resource)}),(0,import_jsx_runtime12.jsx)(import_core20.Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return(0,import_core19.isUUID)(input)?`{
2
2
  Patients1: PatientList(_id: ${escaped}, _count: 1) {
3
3
  resourceType
4
4
  id
@@ -61,21 +61,21 @@
61
61
  display
62
62
  }
63
63
  }
64
- }`.replace(/\s+/g," ")}function getResourcesFromResponse(response,query){let resources=[];return response.data.Patients1&&resources.push(...response.data.Patients1),response.data.Patients2&&resources.push(...response.data.Patients2),response.data.ServiceRequestList&&resources.push(...response.data.ServiceRequestList),sortByRelevance(dedupeResources(resources),query).slice(0,5)}function dedupeResources(resources){let ids=new Set,result=[];for(let resource of resources)ids.has(resource.id)||(ids.add(resource.id),result.push(resource));return result}function sortByRelevance(resources,query){return resources.sort((a2,b2)=>getResourceScore(b2,query)-getResourceScore(a2,query))}function getResourceScore(resource,query){let bestScore=0;if(resource.identifier)for(let identifier of resource.identifier)bestScore=Math.max(bestScore,getStringScore(identifier.value,query));if(resource.resourceType==="Patient"&&resource.name)for(let name of resource.name)bestScore=Math.max(bestScore,getStringScore((0,import_core19.formatHumanName)(name),query));return bestScore}function getStringScore(str,query){if(!str)return 0;let index=str.toLowerCase().indexOf(query.toLowerCase());return index<0?0:100-index}var import_jsx_runtime13=require("react/jsx-runtime");function Header(props){let profile=W(),[userMenuOpened,setUserMenuOpened]=(0,import_react14.useState)(!1);return(0,import_jsx_runtime13.jsx)(import_core21.AppShell.Header,{p:8,style:{zIndex:101},children:(0,import_jsx_runtime13.jsxs)(import_core21.Group,{justify:"space-between",children:[(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:"xs",children:[(0,import_jsx_runtime13.jsx)(import_core21.UnstyledButton,{className:Header_default.logoButton,onClick:props.navbarToggle,children:props.logo}),!props.headerSearchDisabled&&(0,import_jsx_runtime13.jsx)(HeaderSearchInput,{pathname:props.pathname,searchParams:props.searchParams})]}),(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:"lg",pr:"sm",children:[props.notifications,(0,import_jsx_runtime13.jsxs)(import_core21.Menu,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime13.jsx)(import_core21.Menu.Target,{children:(0,import_jsx_runtime13.jsx)(import_core21.UnstyledButton,{className:clsx_default(Header_default.user,{[Header_default.userActive]:userMenuOpened}),onClick:()=>setUserMenuOpened(o=>!o),children:(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:7,children:[(0,import_jsx_runtime13.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime13.jsx)(import_core21.Text,{size:"sm",className:Header_default.userName,children:(0,import_core22.formatHumanName)(profile?.name?.[0])}),(0,import_jsx_runtime13.jsx)(IconChevronDown,{size:12,stroke:1.5})]})})}),(0,import_jsx_runtime13.jsx)(import_core21.Menu.Dropdown,{children:(0,import_jsx_runtime13.jsx)(HeaderDropdown,{version:props.version})})]})]})]})})}var import_core26=require("@mantine/core");var import_react18=require("react");var import_core23=require("@mantine/core"),import_notifications2=require("@mantine/notifications"),import_core24=require("@medplum/core");function parseForm(form){let result={};for(let element of Array.from(form.elements))element instanceof HTMLInputElement?parseInputElement(result,element):element instanceof HTMLTextAreaElement?result[element.name]=element.value:element instanceof HTMLSelectElement&&parseSelectElement(result,element);return result}function parseInputElement(result,el){el.disabled||(el.type==="checkbox"||el.type==="radio")&&!el.checked||(result[el.name]=el.value)}function parseSelectElement(result,el){result[el.name]=el.value}var import_jsx_runtime14=require("react/jsx-runtime");function Form(props){return(0,import_jsx_runtime14.jsx)("form",{style:props.style,"data-testid":props.testid,onSubmit:e=>{e.preventDefault();let formData=parseForm(e.target);props.onSubmit&&props.onSubmit(formData)},children:props.children})}var import_jsx_runtime15=require("react/jsx-runtime");function BookmarkDialog(props){let medplum=a(),config=medplum.getUserConfiguration();function submitHandler(formData){let{menuname,bookmarkname:name}=formData,target=`${props.pathname}?${props.searchParams.toString()}`,newConfig=(0,import_core24.deepClone)(config);newConfig.menu?.find(({title})=>title===menuname)?.link?.push({name,target}),medplum.updateResource(newConfig).then(res=>{config.menu=res.menu,medplum.dispatchEvent({type:"change"}),(0,import_notifications2.showNotification)({color:"green",message:"Success"}),props.onOk()}).catch(err=>{(0,import_notifications2.showNotification)({color:"red",message:(0,import_core24.normalizeErrorString)(err)})})}return(0,import_jsx_runtime15.jsx)(import_core23.Modal,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime15.jsx)(Form,{onSubmit:submitHandler,children:(0,import_jsx_runtime15.jsxs)(import_core23.Stack,{children:[(0,import_jsx_runtime15.jsx)(SelectMenu,{config}),(0,import_jsx_runtime15.jsx)(import_core23.TextInput,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),(0,import_jsx_runtime15.jsx)(import_core23.Group,{justify:"flex-end",children:(0,import_jsx_runtime15.jsx)(import_core23.Button,{mt:"sm",type:"submit",children:"OK"})})]})})})}function SelectMenu(props){function userConfigToMenu(config){return config?.menu?.map(menu=>menu.title)}let menus=userConfigToMenu(props.config);return(0,import_jsx_runtime15.jsx)(import_core23.NativeSelect,{name:"menuname",defaultValue:menus[0],label:"Select Menu Option",data:menus,withAsterisk:!0})}var import_react17=require("react");var import_react16=require("react");var import_core25=require("@mantine/core");var import_react15=require("react");var import_jsx_runtime16=require("react/jsx-runtime");function toKey(element){return typeof element.code=="string"?element.code:JSON.stringify(element)}function getDisplay(item){return typeof item.display=="string"?item.display:toKey(item)}function toOption2(element){return{value:toKey(element),label:getDisplay(element),resource:element}}function createValue(input){return{code:input,display:input}}function ValueSetAutocomplete(props){let medplum=a(),{binding,creatable,clearable,expandParams,withHelpText,...rest}=props,loadValues=(0,import_react15.useCallback)(async(input,signal)=>{if(!binding)return[];let valueSetElements=(await medplum.valueSetExpand({...expandParams,url:binding,filter:input},{signal})).expansion?.contains,newData=[];for(let valueSetElement of valueSetElements)valueSetElement.code&&!newData.some(item=>item.code===valueSetElement.code)&&newData.push(valueSetElement);return newData},[medplum,expandParams,binding]);return(0,import_jsx_runtime16.jsx)(AsyncAutocomplete,{...rest,creatable:creatable??!0,clearable:clearable??!0,toOption:toOption2,loadOptions:loadValues,onCreate:createValue,itemComponent:withHelpText?ItemComponent2:void 0})}var ItemComponent2=(0,import_react15.forwardRef)(({label,resource,...others},ref)=>(0,import_jsx_runtime16.jsx)("div",{ref,...others,children:(0,import_jsx_runtime16.jsx)(import_core25.Group,{wrap:"nowrap",children:(0,import_jsx_runtime16.jsxs)("div",{children:[(0,import_jsx_runtime16.jsx)(import_core25.Text,{children:label}),(0,import_jsx_runtime16.jsx)(import_core25.Text,{size:"xs",c:"dimmed",children:`${resource.system}#${resource.code}`})]})})}));var import_jsx_runtime17=require("react/jsx-runtime");function CodeInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react16.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newCode=valueSetElementToCode(newValue);setValue(newCode),onChange&&onChange(newCode)}return(0,import_jsx_runtime17.jsx)(ValueSetAutocomplete,{defaultValue:codeToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeToValueSetElement(code){return code?{code}:void 0}function valueSetElementToCode(element){return element?.code}var import_jsx_runtime18=require("react/jsx-runtime");function ResourceTypeInput(props){let[resourceType,setResourceType]=(0,import_react17.useState)(props.defaultValue),onChange=props.onChange,setResourceTypeWrapper=(0,import_react17.useCallback)(newResourceType=>{setResourceType(newResourceType),onChange&&onChange(newResourceType)},[onChange]);return(0,import_jsx_runtime18.jsx)(CodeInput,{"data-autofocus":props.autoFocus,"data-testid":props.testId,defaultValue:resourceType,onChange:setResourceTypeWrapper,name:props.name,placeholder:props.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxValues:props.maxValues??1,clearable:!1,withHelpText:!1})}var Navbar_default={menuTitle:"Navbar_menuTitle",link:"Navbar_link",linkActive:"Navbar_linkActive"};var import_jsx_runtime19=require("react/jsx-runtime");function Navbar(props){let navigate=V(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react18.useState)(!1);function onLinkClick(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}return(0,import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core26.AppShell.Navbar,{children:(0,import_jsx_runtime19.jsxs)(import_core26.ScrollArea,{p:"xs",children:[!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime19.jsx)(import_core26.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime19.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),(0,import_jsx_runtime19.jsxs)(import_core26.AppShell.Section,{grow:!0,children:[props.menus?.map(menu=>(0,import_jsx_runtime19.jsxs)(import_react18.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core26.Text,{className:Navbar_default.menuTitle,children:menu.title}),menu.links?.map(link=>(0,import_jsx_runtime19.jsxs)(NavbarLink,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick(e,link.href),children:[(0,import_jsx_runtime19.jsx)(NavLinkIcon,{to:link.href,icon:link.icon}),(0,import_jsx_runtime19.jsx)("span",{children:link.label})]},link.href))]},`menu-${menu.title}`)),props.displayAddBookmark&&(0,import_jsx_runtime19.jsx)(import_core26.Button,{variant:"subtle",size:"xs",mt:"xl",leftSection:(0,import_jsx_runtime19.jsx)(IconPlus,{size:"0.75rem"}),onClick:()=>setBookmarkDialogVisible(!0),children:"Add Bookmark"})]})]})}),props.pathname&&props.searchParams&&(0,import_jsx_runtime19.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLink(props){return(0,import_jsx_runtime19.jsx)(MedplumLink,{onClick:props.onClick,to:props.to,className:clsx_default(Navbar_default.link,{[Navbar_default.linkActive]:props.active}),children:props.children})}function NavLinkIcon(props){return props.icon?props.icon:(0,import_jsx_runtime19.jsx)(import_core26.Space,{w:30})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&&currentSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime20=require("react/jsx-runtime");function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react19.useState)(localStorage.navbarOpen==="true"),medplum=a(),profile=W();(0,import_react19.useEffect)(()=>{function eventListener(){(0,import_notifications3.showNotification)({color:"red",message:"No connection to server",autoClose:!1})}return medplum.addEventListener("offline",eventListener),()=>medplum.removeEventListener("offline",eventListener)},[medplum]);function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}return medplum.isLoading()?(0,import_jsx_runtime20.jsx)(Loading,{}):(0,import_jsx_runtime20.jsxs)(import_core27.AppShell,{header:{height:60},navbar:{width:250,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},padding:0,children:[profile&&(0,import_jsx_runtime20.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarToggle:toggleNavbar,notifications:props.notifications}),profile&&navbarOpen?(0,import_jsx_runtime20.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled}):void 0,(0,import_jsx_runtime20.jsx)(import_core27.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime20.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime20.jsx)(import_react19.Suspense,{fallback:(0,import_jsx_runtime20.jsx)(Loading,{}),children:props.children})})})]})}var import_core28=require("@mantine/core");var import_jsx_runtime21=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=oe(uncachedUrl);return url?(0,import_jsx_runtime21.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime21.jsx)("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime21.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime21.jsx)("source",{type:contentType,src:url})}),contentType==="application/pdf"&&(0,import_jsx_runtime21.jsx)("div",{"data-testid":"attachment-pdf",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime21.jsx)("iframe",{width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),(0,import_jsx_runtime21.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime21.jsx)(import_core28.Anchor,{href:url,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:getDownloadName(title),children:title||"Download"})})]}):null}function getDownloadName(title){return title?.includes(".")?title:void 0}var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime22=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime22.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment,{children:[(0,import_jsx_runtime22.jsx)("dt",{children:props.term}),(0,import_jsx_runtime22.jsx)("dd",{children:props.children})]})}var import_core29=require("@medplum/core"),import_jsx_runtime23=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v2,index)=>(0,import_jsx_runtime23.jsx)("div",{children:(0,import_jsx_runtime23.jsx)(AttachmentDisplay,{value:v2,maxWidth:props.maxWidth})},"attatchment-"+index)),content;if(props.includeDescriptionListEntry){if(props.property===void 0)throw new Error("props.property is required when includeDescriptionListEntry is true");if(!(0,import_core29.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime23.jsx)(DescriptionListEntry,{term:(0,import_core29.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment,{children:attachmentElements});return content}var import_core31=require("@mantine/core");var import_react21=require("react");var import_core30=require("@medplum/core");var import_react20=require("react");var import_jsx_runtime24=require("react/jsx-runtime");function AttachmentButton(props){let medplum=a(),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_core30.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment,{children:[(0,import_jsx_runtime24.jsx)("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:fileInputRef,onChange:e=>onFileChange(e)}),props.children({onClick})]})}var import_jsx_runtime25=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react21.useState)(props.defaultValue??[]),valuesRef=(0,import_react21.useRef)();valuesRef.current=values;function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime25.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime25.jsxs)("colgroup",{children:[(0,import_jsx_runtime25.jsx)("col",{width:"97%"}),(0,import_jsx_runtime25.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime25.jsxs)("tbody",{children:[values.map((v2,index)=>(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentDisplay,{value:v2,maxWidth:200})}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{title:"Remove",variant:"subtle",size:"sm",color:"gray",onClick:e=>{killEvent(e);let copy=values.slice();copy.splice(index,1),setValuesWrapper(copy)},children:(0,import_jsx_runtime25.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentButton,{onUpload:attachment=>{setValuesWrapper([...valuesRef.current,attachment])},children:props2=>(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:"green",children:(0,import_jsx_runtime25.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core32=require("@mantine/core"),import_react22=require("react");var import_jsx_runtime26=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_runtime26.jsxs)(import_jsx_runtime26.Fragment,{children:[(0,import_jsx_runtime26.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime26.jsx)(import_core32.Button,{onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime26.jsx)(AttachmentButton,{securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime26.jsx)(import_core32.Button,{...props2,children:"Upload..."})})}var import_core47=require("@medplum/core");var DEFAULT_IGNORED_PROPERTIES=["meta","implicitRules","contained","extension","modifierExtension"],DEFAULT_IGNORED_NON_NESTED_PROPERTIES=["language","text"];var import_core45=require("@mantine/core"),import_core46=require("@medplum/core");var import_core33=require("@medplum/core"),import_jsx_runtime27=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime27.jsx)(import_jsx_runtime27.Fragment,{children:(0,import_core33.formatCodeableConcept)(props.value)})}var import_core34=require("@medplum/core"),import_jsx_runtime28=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment,{children:(0,import_core34.formatCoding)(props.value)})}var import_jsx_runtime29=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_runtime29.jsx)(import_jsx_runtime29.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime30=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime30.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_jsx_runtime31=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime31.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core35=require("@medplum/core"),import_jsx_runtime32=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment,{children:(0,import_core35.formatMoney)(props.value)})}var import_core36=require("@medplum/core"),import_jsx_runtime33=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment,{children:(0,import_core36.formatQuantity)(props.value)})}var import_core37=require("@medplum/core"),import_jsx_runtime34=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime34.jsx)(import_jsx_runtime34.Fragment,{children:(0,import_core37.formatRange)(props.value)})}var import_jsx_runtime35=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment,{children:[(0,import_jsx_runtime35.jsx)(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",(0,import_jsx_runtime35.jsx)(QuantityDisplay,{value:value.denominator})]}):null}var import_core38=require("@medplum/core");var import_jsx_runtime36=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core38.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime36.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment,{children:displayString})}var import_core42=require("@medplum/core");var import_react25=require("react");var import_core39=require("@medplum/core"),import_react23=require("react");var ElementsContext=(0,import_react23.createContext)({path:"",profileUrl:void 0,elements:Object.create(null),elementsByPath:Object.create(null),debugMode:!1});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_core39.isPopulated)(element.type)||element.max===0||element.path.toLowerCase().endsWith("extension.url")&&element.fixed||EXTENSION_KEYS.includes(key)&&!(0,import_core39.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_core40=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core40.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_core40.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_core40.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core40.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl?promises.push(medplum.requestProfileSchema(profileUrl)):promises.push(Promise.resolve([]))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core40.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core41=require("@medplum/core"),import_react24=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime37.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime38=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react24.useContext)(ElementsContext),contextValue=(0,import_react24.useMemo)(()=>{if((0,import_core41.isPopulated)(sliceElements))return(0,import_core41.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_runtime38.jsx)(import_jsx_runtime38.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime38.jsx)("div",{children:(0,import_jsx_runtime38.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_runtime39=require("react/jsx-runtime");function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=a(),values=(0,import_react25.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react25.useState)(!0),[slices,setSlices]=(0,import_react25.useState)([]),[slicedValues,setSlicedValues]=(0,import_react25.useState)(()=>[values]),ctx=(0,import_react25.useContext)(ElementsContext);if((0,import_react25.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(values,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime39.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_runtime39.jsx)("div",{children:(0,import_jsx_runtime39.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_core42.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime39.jsx)(DescriptionListEntry,{term:(0,import_core42.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime39.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_runtime39.jsx)(DescriptionListEntry,{term:(0,import_core42.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent]})}var import_core44=require("@medplum/core");var import_react26=require("react");var import_core43=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core43.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_core43.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_runtime40=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=a(),ctx=(0,import_react26.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react26.useState)((0,import_core44.getDataType)("Extension")),profileUrl=(0,import_react26.useMemo)(()=>{if((0,import_core44.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react26.useState)(profileUrl!==void 0);if((0,import_react26.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core44.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core44.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime40.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_runtime40.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime40.jsx)(BackboneElementDisplay,{path:props.path,value:{type:typeSchema.name,value:props.value},compact:props.compact,ignoreMissingValues:props.ignoreMissingValues,link:props.link,profileUrl})}var import_jsx_runtime41=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime41.jsxs)(import_core45.Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!(0,import_core46.isEmpty)(value)&&(0,import_jsx_runtime41.jsx)(import_core45.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime41.jsx)(import_core45.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime41.jsx)(import_core45.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime41.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime41.jsx)(IconCopy,{size:"1rem"})})})})]});let isArrayElement=!!props.arrayElement;if(property?.max&&property.max>1&&!isArrayElement)return propertyType===import_core46.PropertyType.Attachment?(0,import_jsx_runtime41.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime41.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core46.PropertyType.boolean:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core46.PropertyType.SystemString:case import_core46.PropertyType.string:return(0,import_jsx_runtime41.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core46.PropertyType.code:case import_core46.PropertyType.date:case import_core46.PropertyType.decimal:case import_core46.PropertyType.id:case import_core46.PropertyType.integer:case import_core46.PropertyType.positiveInt:case import_core46.PropertyType.unsignedInt:case import_core46.PropertyType.uri:case import_core46.PropertyType.url:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value});case import_core46.PropertyType.canonical:return(0,import_jsx_runtime41.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core46.PropertyType.dateTime:case import_core46.PropertyType.instant:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatDateTime)(value)});case import_core46.PropertyType.markdown:return(0,import_jsx_runtime41.jsx)("pre",{children:value});case import_core46.PropertyType.Address:return(0,import_jsx_runtime41.jsx)(AddressDisplay,{value});case import_core46.PropertyType.Annotation:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value?.text});case import_core46.PropertyType.Attachment:return(0,import_jsx_runtime41.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core46.PropertyType.CodeableConcept:return(0,import_jsx_runtime41.jsx)(CodeableConceptDisplay,{value});case import_core46.PropertyType.Coding:return(0,import_jsx_runtime41.jsx)(CodingDisplay,{value});case import_core46.PropertyType.ContactDetail:return(0,import_jsx_runtime41.jsx)(ContactDetailDisplay,{value});case import_core46.PropertyType.ContactPoint:return(0,import_jsx_runtime41.jsx)(ContactPointDisplay,{value});case import_core46.PropertyType.HumanName:return(0,import_jsx_runtime41.jsx)(HumanNameDisplay,{value});case import_core46.PropertyType.Identifier:return(0,import_jsx_runtime41.jsx)(IdentifierDisplay,{value});case import_core46.PropertyType.Money:return(0,import_jsx_runtime41.jsx)(MoneyDisplay,{value});case import_core46.PropertyType.Period:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatPeriod)(value)});case import_core46.PropertyType.Quantity:case import_core46.PropertyType.Duration:return(0,import_jsx_runtime41.jsx)(QuantityDisplay,{value});case import_core46.PropertyType.Range:return(0,import_jsx_runtime41.jsx)(RangeDisplay,{value});case import_core46.PropertyType.Ratio:return(0,import_jsx_runtime41.jsx)(RatioDisplay,{value});case import_core46.PropertyType.Reference:return(0,import_jsx_runtime41.jsx)(ReferenceDisplay,{value,link:props.link});case import_core46.PropertyType.Timing:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatTiming)(value)});case import_core46.PropertyType.Dosage:case import_core46.PropertyType.UsageContext:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core46.PropertyType.Extension:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}var import_react27=require("react");var import_jsx_runtime42=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_react27.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react27.useMemo)(()=>(0,import_core47.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react27.useMemo)(()=>{if(typeSchema)return(0,import_core47.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);if((0,import_core47.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime42.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_runtime42.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime42.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core47.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_core47.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime42.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_runtime42.jsx)(DescriptionListEntry,{term:(0,import_core47.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core80=require("@medplum/core"),import_react50=require("react");var import_core78=require("@mantine/core"),import_core79=require("@medplum/core"),import_react49=require("react");var import_core48=require("@mantine/core"),import_react28=require("react");var import_jsx_runtime43=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react28.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,(0,import_jsx_runtime43.jsxs)(import_core48.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime43.jsx)("div",{children:props.children}),(0,import_jsx_runtime43.jsx)("div",{children:(0,import_jsx_runtime43.jsx)(import_core48.Input.Wrapper,{id:props.htmlFor,label,description:props.description,withAsterisk:props.withAsterisk,children:null})})]})}var import_core49=require("@mantine/core"),import_react29=require("react");function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
64
+ }`.replace(/\s+/g," ")}function getResourcesFromResponse(response,query){let resources=[];return response.data.Patients1&&resources.push(...response.data.Patients1),response.data.Patients2&&resources.push(...response.data.Patients2),response.data.ServiceRequestList&&resources.push(...response.data.ServiceRequestList),sortByRelevance(dedupeResources(resources),query).slice(0,5)}function dedupeResources(resources){let ids=new Set,result=[];for(let resource of resources)ids.has(resource.id)||(ids.add(resource.id),result.push(resource));return result}function sortByRelevance(resources,query){return resources.sort((a2,b2)=>getResourceScore(b2,query)-getResourceScore(a2,query))}function getResourceScore(resource,query){let bestScore=0;if(resource.identifier)for(let identifier of resource.identifier)bestScore=Math.max(bestScore,getStringScore(identifier.value,query));if(resource.resourceType==="Patient"&&resource.name)for(let name of resource.name)bestScore=Math.max(bestScore,getStringScore((0,import_core19.formatHumanName)(name),query));return bestScore}function getStringScore(str,query){if(!str)return 0;let index=str.toLowerCase().indexOf(query.toLowerCase());return index<0?0:100-index}var import_jsx_runtime13=require("react/jsx-runtime");function Header(props){let profile=W(),[userMenuOpened,setUserMenuOpened]=(0,import_react14.useState)(!1);return(0,import_jsx_runtime13.jsx)(import_core21.AppShell.Header,{p:8,style:{zIndex:101},children:(0,import_jsx_runtime13.jsxs)(import_core21.Group,{justify:"space-between",children:[(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:"xs",children:[(0,import_jsx_runtime13.jsx)(import_core21.UnstyledButton,{className:Header_default.logoButton,onClick:props.navbarToggle,children:props.logo}),!props.headerSearchDisabled&&(0,import_jsx_runtime13.jsx)(HeaderSearchInput,{pathname:props.pathname,searchParams:props.searchParams})]}),(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:"lg",pr:"sm",children:[props.notifications,(0,import_jsx_runtime13.jsxs)(import_core21.Menu,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[(0,import_jsx_runtime13.jsx)(import_core21.Menu.Target,{children:(0,import_jsx_runtime13.jsx)(import_core21.UnstyledButton,{className:clsx_default(Header_default.user,{[Header_default.userActive]:userMenuOpened}),onClick:()=>setUserMenuOpened(o=>!o),children:(0,import_jsx_runtime13.jsxs)(import_core21.Group,{gap:7,children:[(0,import_jsx_runtime13.jsx)(ResourceAvatar,{value:profile,radius:"xl",size:24}),(0,import_jsx_runtime13.jsx)(import_core21.Text,{size:"sm",className:Header_default.userName,children:(0,import_core22.formatHumanName)(profile?.name?.[0])}),(0,import_jsx_runtime13.jsx)(IconChevronDown,{size:12,stroke:1.5})]})})}),(0,import_jsx_runtime13.jsx)(import_core21.Menu.Dropdown,{children:(0,import_jsx_runtime13.jsx)(HeaderDropdown,{version:props.version})})]})]})]})})}var import_core26=require("@mantine/core");var import_react18=require("react");var import_core23=require("@mantine/core"),import_notifications2=require("@mantine/notifications"),import_core24=require("@medplum/core");function parseForm(form){let result={};for(let element of Array.from(form.elements))element instanceof HTMLInputElement?parseInputElement(result,element):element instanceof HTMLTextAreaElement?result[element.name]=element.value:element instanceof HTMLSelectElement&&parseSelectElement(result,element);return result}function parseInputElement(result,el){el.disabled||(el.type==="checkbox"||el.type==="radio")&&!el.checked||(result[el.name]=el.value)}function parseSelectElement(result,el){result[el.name]=el.value}var import_jsx_runtime14=require("react/jsx-runtime");function Form(props){return(0,import_jsx_runtime14.jsx)("form",{style:props.style,"data-testid":props.testid,onSubmit:e=>{e.preventDefault();let formData=parseForm(e.target);props.onSubmit&&props.onSubmit(formData)},children:props.children})}var import_jsx_runtime15=require("react/jsx-runtime");function BookmarkDialog(props){let medplum=a(),config=medplum.getUserConfiguration();function submitHandler(formData){let{menuname,bookmarkname:name}=formData,target=`${props.pathname}?${props.searchParams.toString()}`,newConfig=(0,import_core24.deepClone)(config);newConfig.menu?.find(({title})=>title===menuname)?.link?.push({name,target}),medplum.updateResource(newConfig).then(res=>{config.menu=res.menu,medplum.dispatchEvent({type:"change"}),(0,import_notifications2.showNotification)({color:"green",message:"Success"}),props.onOk()}).catch(err=>{(0,import_notifications2.showNotification)({color:"red",message:(0,import_core24.normalizeErrorString)(err)})})}return(0,import_jsx_runtime15.jsx)(import_core23.Modal,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime15.jsx)(Form,{onSubmit:submitHandler,children:(0,import_jsx_runtime15.jsxs)(import_core23.Stack,{children:[(0,import_jsx_runtime15.jsx)(SelectMenu,{config}),(0,import_jsx_runtime15.jsx)(import_core23.TextInput,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),(0,import_jsx_runtime15.jsx)(import_core23.Group,{justify:"flex-end",children:(0,import_jsx_runtime15.jsx)(import_core23.Button,{mt:"sm",type:"submit",children:"OK"})})]})})})}function SelectMenu(props){function userConfigToMenu(config){return config?.menu?.map(menu=>menu.title)}let menus=userConfigToMenu(props.config);return(0,import_jsx_runtime15.jsx)(import_core23.NativeSelect,{name:"menuname",defaultValue:menus[0],label:"Select Menu Option",data:menus,withAsterisk:!0})}var import_react17=require("react");var import_react16=require("react");var import_core25=require("@mantine/core");var import_react15=require("react");var import_jsx_runtime16=require("react/jsx-runtime");function toKey(element){return typeof element.code=="string"?element.code:JSON.stringify(element)}function getDisplay(item){return typeof item.display=="string"?item.display:toKey(item)}function toOption2(element){return{value:toKey(element),label:getDisplay(element),resource:element}}function createValue(input){return{code:input,display:input}}function ValueSetAutocomplete(props){let medplum=a(),{binding,creatable,clearable,expandParams,withHelpText,...rest}=props,loadValues=(0,import_react15.useCallback)(async(input,signal)=>{if(!binding)return[];let valueSetElements=(await medplum.valueSetExpand({...expandParams,url:binding,filter:input},{signal})).expansion?.contains,newData=[];for(let valueSetElement of valueSetElements)valueSetElement.code&&!newData.some(item=>item.code===valueSetElement.code)&&newData.push(valueSetElement);return newData},[medplum,expandParams,binding]);return(0,import_jsx_runtime16.jsx)(AsyncAutocomplete,{...rest,creatable:creatable??!0,clearable:clearable??!0,toOption:toOption2,loadOptions:loadValues,onCreate:createValue,itemComponent:withHelpText?ItemComponent2:void 0})}var ItemComponent2=(0,import_react15.forwardRef)(({label,resource,...others},ref)=>(0,import_jsx_runtime16.jsx)("div",{ref,...others,children:(0,import_jsx_runtime16.jsx)(import_core25.Group,{wrap:"nowrap",children:(0,import_jsx_runtime16.jsxs)("div",{children:[(0,import_jsx_runtime16.jsx)(import_core25.Text,{children:label}),(0,import_jsx_runtime16.jsx)(import_core25.Text,{size:"xs",c:"dimmed",children:`${resource.system}#${resource.code}`})]})})}));var import_jsx_runtime17=require("react/jsx-runtime");function CodeInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react16.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newCode=valueSetElementToCode(newValue);setValue(newCode),onChange&&onChange(newCode)}return(0,import_jsx_runtime17.jsx)(ValueSetAutocomplete,{defaultValue:codeToValueSetElement(value),onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codeToValueSetElement(code){return code?{code}:void 0}function valueSetElementToCode(element){return element?.code}var import_jsx_runtime18=require("react/jsx-runtime");function ResourceTypeInput(props){let[resourceType,setResourceType]=(0,import_react17.useState)(props.defaultValue),onChange=props.onChange,setResourceTypeWrapper=(0,import_react17.useCallback)(newResourceType=>{setResourceType(newResourceType),onChange&&onChange(newResourceType)},[onChange]);return(0,import_jsx_runtime18.jsx)(CodeInput,{"data-autofocus":props.autoFocus,"data-testid":props.testId,defaultValue:resourceType,onChange:setResourceTypeWrapper,name:props.name,placeholder:props.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxValues:props.maxValues??1,clearable:!1,withHelpText:!1})}var Navbar_default={menuTitle:"Navbar_menuTitle",link:"Navbar_link",linkActive:"Navbar_linkActive"};var import_jsx_runtime19=require("react/jsx-runtime");function Navbar(props){let navigate=V(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[bookmarkDialogVisible,setBookmarkDialogVisible]=(0,import_react18.useState)(!1);function onLinkClick(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}return(0,import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core26.AppShell.Navbar,{children:(0,import_jsx_runtime19.jsxs)(import_core26.ScrollArea,{p:"xs",children:[!props.resourceTypeSearchDisabled&&(0,import_jsx_runtime19.jsx)(import_core26.AppShell.Section,{mb:"sm",children:(0,import_jsx_runtime19.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",maxValues:0,onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),(0,import_jsx_runtime19.jsxs)(import_core26.AppShell.Section,{grow:!0,children:[props.menus?.map(menu=>(0,import_jsx_runtime19.jsxs)(import_react18.Fragment,{children:[(0,import_jsx_runtime19.jsx)(import_core26.Text,{className:Navbar_default.menuTitle,children:menu.title}),menu.links?.map(link=>(0,import_jsx_runtime19.jsxs)(NavbarLink,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick(e,link.href),children:[(0,import_jsx_runtime19.jsx)(NavLinkIcon,{to:link.href,icon:link.icon}),(0,import_jsx_runtime19.jsx)("span",{children:link.label})]},link.href))]},`menu-${menu.title}`)),props.displayAddBookmark&&(0,import_jsx_runtime19.jsx)(import_core26.Button,{variant:"subtle",size:"xs",mt:"xl",leftSection:(0,import_jsx_runtime19.jsx)(IconPlus,{size:"0.75rem"}),onClick:()=>setBookmarkDialogVisible(!0),children:"Add Bookmark"})]})]})}),props.pathname&&props.searchParams&&(0,import_jsx_runtime19.jsx)(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLink(props){return(0,import_jsx_runtime19.jsx)(MedplumLink,{onClick:props.onClick,to:props.to,className:clsx_default(Navbar_default.link,{[Navbar_default.linkActive]:props.active}),children:props.children})}function NavLinkIcon(props){return props.icon?props.icon:(0,import_jsx_runtime19.jsx)(import_core26.Space,{w:30})}function getActiveLink(currentPathname,currentSearchParams,menus){if(!currentPathname||!currentSearchParams||!menus)return;let bestLink,bestScore=0;for(let menu of menus)if(menu.links)for(let link of menu.links){let score=getLinkScore(currentPathname,currentSearchParams,link.href);score>bestScore&&(bestScore=score,bestLink=link)}return bestLink}function getLinkScore(currentPathname,currentSearchParams,linkHref){let linkUrl=new URL(linkHref,"https://example.com");if(currentPathname!==linkUrl.pathname)return 0;let ignoredParams=["_count","_offset"];for(let[key,value]of linkUrl.searchParams.entries())if(!ignoredParams.includes(key)&&currentSearchParams.get(key)!==value)return 0;let count=1;for(let[key,value]of currentSearchParams.entries())ignoredParams.includes(key)||linkUrl.searchParams.get(key)===value&&count++;return count}var import_jsx_runtime20=require("react/jsx-runtime");function AppShell(props){let[navbarOpen,setNavbarOpen]=(0,import_react19.useState)(localStorage.navbarOpen==="true"),medplum=a(),profile=W();(0,import_react19.useEffect)(()=>{function eventListener(){(0,import_notifications3.showNotification)({color:"red",message:"No connection to server",autoClose:!1})}return medplum.addEventListener("offline",eventListener),()=>medplum.removeEventListener("offline",eventListener)},[medplum]);function setNavbarOpenWrapper(open){localStorage.navbarOpen=open.toString(),setNavbarOpen(open)}function closeNavbar(){setNavbarOpenWrapper(!1)}function toggleNavbar(){setNavbarOpenWrapper(!navbarOpen)}return medplum.isLoading()?(0,import_jsx_runtime20.jsx)(Loading,{}):(0,import_jsx_runtime20.jsxs)(import_core27.AppShell,{header:{height:60},navbar:{width:250,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},padding:0,children:[profile&&(0,import_jsx_runtime20.jsx)(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarToggle:toggleNavbar,notifications:props.notifications}),profile&&navbarOpen?(0,import_jsx_runtime20.jsx)(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled}):void 0,(0,import_jsx_runtime20.jsx)(import_core27.AppShell.Main,{className:AppShell_default.main,children:(0,import_jsx_runtime20.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime20.jsx)(import_react19.Suspense,{fallback:(0,import_jsx_runtime20.jsx)(Loading,{}),children:props.children})})})]})}var import_core28=require("@mantine/core");var import_jsx_runtime21=require("react/jsx-runtime");function AttachmentDisplay(props){let{contentType,url:uncachedUrl,title}=props.value??{},url=oe(uncachedUrl);return url?(0,import_jsx_runtime21.jsxs)("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&(0,import_jsx_runtime21.jsx)("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&(0,import_jsx_runtime21.jsx)("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:(0,import_jsx_runtime21.jsx)("source",{type:contentType,src:url})}),contentType==="application/pdf"&&(0,import_jsx_runtime21.jsx)("div",{"data-testid":"attachment-pdf",style:{maxWidth:props.maxWidth,minHeight:400},children:(0,import_jsx_runtime21.jsx)("iframe",{width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),(0,import_jsx_runtime21.jsx)("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:(0,import_jsx_runtime21.jsx)(import_core28.Anchor,{href:uncachedUrl,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:getDownloadName(title),children:title||"Download"})})]}):null}function getDownloadName(title){return title?.includes(".")?title:void 0}var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};var import_jsx_runtime22=require("react/jsx-runtime");function DescriptionList(props){let{children,compact}=props;return(0,import_jsx_runtime22.jsx)("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return(0,import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment,{children:[(0,import_jsx_runtime22.jsx)("dt",{children:props.term}),(0,import_jsx_runtime22.jsx)("dd",{children:props.children})]})}var import_core29=require("@medplum/core"),import_jsx_runtime23=require("react/jsx-runtime");function AttachmentArrayDisplay(props){let attachmentElements=props.values?.map((v2,index)=>(0,import_jsx_runtime23.jsx)("div",{children:(0,import_jsx_runtime23.jsx)(AttachmentDisplay,{value:v2,maxWidth:props.maxWidth})},"attatchment-"+index)),content;if(props.includeDescriptionListEntry){if(props.property===void 0)throw new Error("props.property is required when includeDescriptionListEntry is true");if(!(0,import_core29.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();content=(0,import_jsx_runtime23.jsx)(DescriptionListEntry,{term:(0,import_core29.getPathDisplayName)(key),children:attachmentElements})}else content=(0,import_jsx_runtime23.jsx)(import_jsx_runtime23.Fragment,{children:attachmentElements});return content}var import_core31=require("@mantine/core");var import_react21=require("react");var import_core30=require("@medplum/core");var import_react20=require("react");var import_jsx_runtime24=require("react/jsx-runtime");function AttachmentButton(props){let medplum=a(),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_core30.normalizeOperationOutcome)(err))}))}return(0,import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment,{children:[(0,import_jsx_runtime24.jsx)("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:fileInputRef,onChange:e=>onFileChange(e)}),props.children({onClick})]})}var import_jsx_runtime25=require("react/jsx-runtime");function AttachmentArrayInput(props){let[values,setValues]=(0,import_react21.useState)(props.defaultValue??[]),valuesRef=(0,import_react21.useRef)();valuesRef.current=values;function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return(0,import_jsx_runtime25.jsxs)("table",{style:{width:"100%"},children:[(0,import_jsx_runtime25.jsxs)("colgroup",{children:[(0,import_jsx_runtime25.jsx)("col",{width:"97%"}),(0,import_jsx_runtime25.jsx)("col",{width:"3%"})]}),(0,import_jsx_runtime25.jsxs)("tbody",{children:[values.map((v2,index)=>(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentDisplay,{value:v2,maxWidth:200})}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{title:"Remove",variant:"subtle",size:"sm",color:"gray",onClick:e=>{killEvent(e);let copy=values.slice();copy.splice(index,1),setValuesWrapper(copy)},children:(0,import_jsx_runtime25.jsx)(IconCircleMinus,{})})})]},`${index}-${values.length}`)),(0,import_jsx_runtime25.jsxs)("tr",{children:[(0,import_jsx_runtime25.jsx)("td",{}),(0,import_jsx_runtime25.jsx)("td",{children:(0,import_jsx_runtime25.jsx)(AttachmentButton,{onUpload:attachment=>{setValuesWrapper([...valuesRef.current,attachment])},children:props2=>(0,import_jsx_runtime25.jsx)(import_core31.ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:"green",children:(0,import_jsx_runtime25.jsx)(IconCloudUpload,{})})})})]})]})]})}var import_core32=require("@mantine/core"),import_react22=require("react");var import_jsx_runtime26=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_runtime26.jsxs)(import_jsx_runtime26.Fragment,{children:[(0,import_jsx_runtime26.jsx)(AttachmentDisplay,{value,maxWidth:200}),(0,import_jsx_runtime26.jsx)(import_core32.Button,{onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):(0,import_jsx_runtime26.jsx)(AttachmentButton,{securityContext:props.securityContext,onUpload:setValueWrapper,children:props2=>(0,import_jsx_runtime26.jsx)(import_core32.Button,{...props2,children:"Upload..."})})}var import_core47=require("@medplum/core");var DEFAULT_IGNORED_PROPERTIES=["meta","implicitRules","contained","extension","modifierExtension"],DEFAULT_IGNORED_NON_NESTED_PROPERTIES=["language","text"];var import_core45=require("@mantine/core"),import_core46=require("@medplum/core");var import_core33=require("@medplum/core"),import_jsx_runtime27=require("react/jsx-runtime");function CodeableConceptDisplay(props){return(0,import_jsx_runtime27.jsx)(import_jsx_runtime27.Fragment,{children:(0,import_core33.formatCodeableConcept)(props.value)})}var import_core34=require("@medplum/core"),import_jsx_runtime28=require("react/jsx-runtime");function CodingDisplay(props){return(0,import_jsx_runtime28.jsx)(import_jsx_runtime28.Fragment,{children:(0,import_core34.formatCoding)(props.value)})}var import_jsx_runtime29=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_runtime29.jsx)(import_jsx_runtime29.Fragment,{children:builder.join("").trim()})}var import_jsx_runtime30=require("react/jsx-runtime");function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?(0,import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>(0,import_jsx_runtime30.jsx)(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}var import_jsx_runtime31=require("react/jsx-runtime");function IdentifierDisplay(props){return(0,import_jsx_runtime31.jsxs)("div",{children:[props.value?.system,": ",props.value?.value]})}var import_core35=require("@medplum/core"),import_jsx_runtime32=require("react/jsx-runtime");function MoneyDisplay(props){return(0,import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment,{children:(0,import_core35.formatMoney)(props.value)})}var import_core36=require("@medplum/core"),import_jsx_runtime33=require("react/jsx-runtime");function QuantityDisplay(props){return(0,import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment,{children:(0,import_core36.formatQuantity)(props.value)})}var import_core37=require("@medplum/core"),import_jsx_runtime34=require("react/jsx-runtime");function RangeDisplay(props){return(0,import_jsx_runtime34.jsx)(import_jsx_runtime34.Fragment,{children:(0,import_core37.formatRange)(props.value)})}var import_jsx_runtime35=require("react/jsx-runtime");function RatioDisplay(props){let value=props.value;return value?(0,import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment,{children:[(0,import_jsx_runtime35.jsx)(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",(0,import_jsx_runtime35.jsx)(QuantityDisplay,{value:value.denominator})]}):null}var import_core38=require("@medplum/core");var import_jsx_runtime36=require("react/jsx-runtime");function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||(0,import_core38.stringify)(props.value);return props.link!==!1&&props.value.reference?(0,import_jsx_runtime36.jsx)(MedplumLink,{to:props.value,children:displayString}):(0,import_jsx_runtime36.jsx)(import_jsx_runtime36.Fragment,{children:displayString})}var import_core42=require("@medplum/core");var import_react25=require("react");var import_core39=require("@medplum/core"),import_react23=require("react");var ElementsContext=(0,import_react23.createContext)({path:"",profileUrl:void 0,elements:Object.create(null),elementsByPath:Object.create(null),debugMode:!1});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_core39.isPopulated)(element.type)||element.max===0||element.path.toLowerCase().endsWith("extension.url")&&element.fixed||EXTENSION_KEYS.includes(key)&&!(0,import_core39.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_core40=require("@medplum/core");function assignValuesIntoSlices(values,slices,slicing,profileUrl){if(!(0,import_core40.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_core40.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_core40.isSliceDefinitionWithTypes)(slice)){console.debug("Unsupported slice definition",slice);continue}let profileUrl;(0,import_core40.isPopulated)(slice.elements)||(profileUrl=slice.type[0]?.profile?.[0]),supportedSlices.push(slice),profileUrls.push(profileUrl),profileUrl?promises.push(medplum.requestProfileSchema(profileUrl)):promises.push(Promise.resolve([]))}Promise.all(promises).then(()=>{for(let i=0;i<supportedSlices.length;i++){let slice=supportedSlices[i],profileUrl=profileUrls[i];if(profileUrl){let typeSchema=(0,import_core40.tryGetProfile)(profileUrl);slice.typeSchema=typeSchema}}resolve(supportedSlices)}).catch(reject)})}var import_core41=require("@medplum/core"),import_react24=require("react");var import_jsx_runtime37=require("react/jsx-runtime");function maybeWrapWithContext(ContextProvider,contextValue,contents){return contextValue!==void 0?(0,import_jsx_runtime37.jsx)(ContextProvider,{value:contextValue,children:contents}):contents}var import_jsx_runtime38=require("react/jsx-runtime");function SliceDisplay(props){let{slice,property}=props,sliceElements=slice.typeSchema?.elements??slice.elements,parentContext=(0,import_react24.useContext)(ElementsContext),contextValue=(0,import_react24.useMemo)(()=>{if((0,import_core41.isPopulated)(sliceElements))return(0,import_core41.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_runtime38.jsx)(import_jsx_runtime38.Fragment,{children:props.value.map((value,valueIndex)=>(0,import_jsx_runtime38.jsx)("div",{children:(0,import_jsx_runtime38.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_runtime39=require("react/jsx-runtime");function ResourceArrayDisplay(props){let{property,propertyType}=props,medplum=a(),values=(0,import_react25.useMemo)(()=>Array.isArray(props.values)?props.values:[],[props.values]),[loading,setLoading]=(0,import_react25.useState)(!0),[slices,setSlices]=(0,import_react25.useState)([]),[slicedValues,setSlicedValues]=(0,import_react25.useState)(()=>[values]),ctx=(0,import_react25.useContext)(ElementsContext);if((0,import_react25.useEffect)(()=>{prepareSlices({medplum,property}).then(slices2=>{setSlices(slices2);let slicedValues2=assignValuesIntoSlices(values,slices2,property.slicing,ctx.profileUrl);setSlicedValues(slicedValues2),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property,ctx.profileUrl,setSlicedValues,values]),loading)return(0,import_jsx_runtime39.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_runtime39.jsx)("div",{children:(0,import_jsx_runtime39.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_core42.isPopulated)(props.path))throw new Error("props.path is required when includeDescriptionListEntry is true");let key=props.path.split(".").pop();nonSliceContent=(0,import_jsx_runtime39.jsx)(DescriptionListEntry,{term:(0,import_core42.getPathDisplayName)(key),children:nonSliceElements})}else nonSliceContent=(0,import_jsx_runtime39.jsx)(import_jsx_runtime39.Fragment,{children:nonSliceElements})}return(0,import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment,{children:[slices.map((slice,sliceIndex)=>{if(!props.path)throw Error(`Displaying a resource property with slices of type ${props.propertyType} requires path`);let sliceDisplay=(0,import_jsx_runtime39.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_runtime39.jsx)(DescriptionListEntry,{term:(0,import_core42.getPathDisplayName)(slice.name),children:sliceDisplay},slice.name)),sliceDisplay}),nonSliceContent]})}var import_core44=require("@medplum/core");var import_react26=require("react");var import_core43=require("@medplum/core");function getValueAndType(context,path,profileUrl){let typedResult=(0,import_core43.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_core43.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_runtime40=require("react/jsx-runtime");function ExtensionDisplay(props){let{elementDefinitionType}=props,medplum=a(),ctx=(0,import_react26.useContext)(ElementsContext),[typeSchema,setTypeSchema]=(0,import_react26.useState)((0,import_core44.getDataType)("Extension")),profileUrl=(0,import_react26.useMemo)(()=>{if((0,import_core44.isPopulated)(elementDefinitionType?.profile))return elementDefinitionType.profile[0]},[elementDefinitionType]),[loadingProfile,setLoadingProfile]=(0,import_react26.useState)(profileUrl!==void 0);if((0,import_react26.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core44.tryGetProfile)(profileUrl);setLoadingProfile(!1),profile&&setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core44.isProfileLoaded)(profileUrl)))return(0,import_jsx_runtime40.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_runtime40.jsx)(ResourcePropertyDisplay,{propertyType,value:propertyValue})}return(0,import_jsx_runtime40.jsx)(BackboneElementDisplay,{path:props.path,value:{type:typeSchema.name,value:props.value},compact:props.compact,ignoreMissingValues:props.ignoreMissingValues,link:props.link,profileUrl})}var import_jsx_runtime41=require("react/jsx-runtime");function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return(0,import_jsx_runtime41.jsxs)(import_core45.Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!(0,import_core46.isEmpty)(value)&&(0,import_jsx_runtime41.jsx)(import_core45.CopyButton,{value,timeout:2e3,children:({copied,copy})=>(0,import_jsx_runtime41.jsx)(import_core45.Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:(0,import_jsx_runtime41.jsx)(import_core45.ActionIcon,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?(0,import_jsx_runtime41.jsx)(IconCheck,{size:"1rem"}):(0,import_jsx_runtime41.jsx)(IconCopy,{size:"1rem"})})})})]});if(property&&(property.isArray||property.max>1)&&!props.arrayElement)return propertyType===import_core46.PropertyType.Attachment?(0,import_jsx_runtime41.jsx)(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,property,path:props.path}):(0,import_jsx_runtime41.jsx)(ResourceArrayDisplay,{path:props.path,property,propertyType,values:value,includeDescriptionListEntry:props.includeArrayDescriptionListEntry,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case import_core46.PropertyType.boolean:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value===void 0?"":(!!value).toString()});case import_core46.PropertyType.SystemString:case import_core46.PropertyType.string:return(0,import_jsx_runtime41.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:value});case import_core46.PropertyType.code:case import_core46.PropertyType.date:case import_core46.PropertyType.decimal:case import_core46.PropertyType.id:case import_core46.PropertyType.integer:case import_core46.PropertyType.positiveInt:case import_core46.PropertyType.unsignedInt:case import_core46.PropertyType.uri:case import_core46.PropertyType.url:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value});case import_core46.PropertyType.canonical:return(0,import_jsx_runtime41.jsx)(ReferenceDisplay,{value:{reference:value},link:props.link});case import_core46.PropertyType.dateTime:case import_core46.PropertyType.instant:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatDateTime)(value)});case import_core46.PropertyType.markdown:return(0,import_jsx_runtime41.jsx)("pre",{children:value});case import_core46.PropertyType.Address:return(0,import_jsx_runtime41.jsx)(AddressDisplay,{value});case import_core46.PropertyType.Annotation:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:value?.text});case import_core46.PropertyType.Attachment:return(0,import_jsx_runtime41.jsx)(AttachmentDisplay,{value,maxWidth:props.maxWidth});case import_core46.PropertyType.CodeableConcept:return(0,import_jsx_runtime41.jsx)(CodeableConceptDisplay,{value});case import_core46.PropertyType.Coding:return(0,import_jsx_runtime41.jsx)(CodingDisplay,{value});case import_core46.PropertyType.ContactDetail:return(0,import_jsx_runtime41.jsx)(ContactDetailDisplay,{value});case import_core46.PropertyType.ContactPoint:return(0,import_jsx_runtime41.jsx)(ContactPointDisplay,{value});case import_core46.PropertyType.HumanName:return(0,import_jsx_runtime41.jsx)(HumanNameDisplay,{value});case import_core46.PropertyType.Identifier:return(0,import_jsx_runtime41.jsx)(IdentifierDisplay,{value});case import_core46.PropertyType.Money:return(0,import_jsx_runtime41.jsx)(MoneyDisplay,{value});case import_core46.PropertyType.Period:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatPeriod)(value)});case import_core46.PropertyType.Quantity:case import_core46.PropertyType.Duration:return(0,import_jsx_runtime41.jsx)(QuantityDisplay,{value});case import_core46.PropertyType.Range:return(0,import_jsx_runtime41.jsx)(RangeDisplay,{value});case import_core46.PropertyType.Ratio:return(0,import_jsx_runtime41.jsx)(RatioDisplay,{value});case import_core46.PropertyType.Reference:return(0,import_jsx_runtime41.jsx)(ReferenceDisplay,{value,link:props.link});case import_core46.PropertyType.Timing:return(0,import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment,{children:(0,import_core46.formatTiming)(value)});case import_core46.PropertyType.Dosage:case import_core46.PropertyType.UsageContext:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(BackboneElementDisplay,{path:props.path,value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});case import_core46.PropertyType.Extension:if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(ExtensionDisplay,{path:props.path,value,compact:!0,ignoreMissingValues:props.ignoreMissingValues,elementDefinitionType:props.elementDefinitionType});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);if(!props.path)throw Error(`Displaying property of type ${props.propertyType} requires path`);return(0,import_jsx_runtime41.jsx)(BackboneElementDisplay,{path:props.path,value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}var import_react27=require("react");var import_jsx_runtime42=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_react27.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react27.useMemo)(()=>(0,import_core47.tryGetDataType)(typeName,profileUrl),[profileUrl,typeName]),newElementsContext=(0,import_react27.useMemo)(()=>{if(typeSchema)return(0,import_core47.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);if((0,import_core47.isEmpty)(value))return null;if(!typeSchema)return(0,import_jsx_runtime42.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_runtime42.jsx)("div",{children:value.name});let elementsContext=newElementsContext??parentElementsContext;return maybeWrapWithContext(ElementsContext.Provider,newElementsContext,(0,import_jsx_runtime42.jsx)(DescriptionList,{compact:props.compact,children:Object.entries(elementsContext.elements).map(([key,property])=>{if(EXTENSION_KEYS2.includes(key)&&(0,import_core47.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_core47.isEmpty)(propertyValue)||props.path.endsWith(".extension")&&(key==="url"||key==="id"))return null;let isArrayProperty=property.max>1||property.isArray,resourcePropertyDisplay=(0,import_jsx_runtime42.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_runtime42.jsx)(DescriptionListEntry,{term:(0,import_core47.getPathDisplayName)(key),children:resourcePropertyDisplay},key)})}))}var import_core80=require("@medplum/core"),import_react50=require("react");var import_core78=require("@mantine/core"),import_core79=require("@medplum/core"),import_react49=require("react");var import_core48=require("@mantine/core"),import_react28=require("react");var import_jsx_runtime43=require("react/jsx-runtime");function CheckboxFormSection(props){let{debugMode}=(0,import_react28.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,(0,import_jsx_runtime43.jsxs)(import_core48.Group,{wrap:"nowrap","data-testid":props.testId,children:[(0,import_jsx_runtime43.jsx)("div",{children:props.children}),(0,import_jsx_runtime43.jsx)("div",{children:(0,import_jsx_runtime43.jsx)(import_core48.Input.Wrapper,{id:props.htmlFor,label,description:props.description,withAsterisk:props.withAsterisk,children:null})})]})}var import_core49=require("@mantine/core"),import_react29=require("react");function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
65
65
  `)}function getIssuesForExpression(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))}var ARRAY_INDEX_REGEX=/\[\d+\]/;function isExpressionMatch(expr1,expr2){let isExpr1Indexed=typeof expr1=="string"&&ARRAY_INDEX_REGEX.test(expr1),isExpr2Indexed=typeof expr2=="string"&&ARRAY_INDEX_REGEX.test(expr2);if(isExpr1Indexed!==isExpr2Indexed&&(expr1=expr1?.replace(ARRAY_INDEX_REGEX,""),expr2=expr2?.replace(ARRAY_INDEX_REGEX,"")),expr1===expr2)return!0;if(!expr1||!expr2)return!1;let dot1=expr1.indexOf(".");if(dot1>=0&&expr1.substring(dot1+1)===expr2)return!0;let dot2=expr2.indexOf(".");return dot2>=0&&expr2.substring(dot2+1)===expr1}var import_jsx_runtime44=require("react/jsx-runtime");function FormSection(props){let{debugMode}=(0,import_react29.useContext)(ElementsContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,(0,import_jsx_runtime44.jsx)(import_core49.Input.Wrapper,{id:props.htmlFor,label,description:props.description,withAsterisk:props.withAsterisk,error:getErrorsForInput(props.outcome,props.errorExpression??props.htmlFor),"data-testid":props.testId,children:props.children})}var import_core50=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_core50.capitalize)(type.code));compoundKey in obj&&delete obj[compoundKey]}return obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!(0,import_core50.isEmpty)(profile.url)&&!(0,import_core50.isEmpty)(profile.name)}var import_core76=require("@mantine/core"),import_core77=require("@medplum/core"),import_react48=require("react");var import_react30=require("react");var import_jsx_runtime45=require("react/jsx-runtime");function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,outcome:_outcome,path:_path,valuePath:_valuePath,...rest}=props,[value,setValue]=(0,import_react30.useState)(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime45.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_react31=require("react");var import_jsx_runtime46=require("react/jsx-runtime");function CodingInput(props){let{defaultValue:defaultValue2,onChange,withHelpText,...rest}=props,[value,setValue]=(0,import_react31.useState)(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return(0,import_jsx_runtime46.jsx)(ValueSetAutocomplete,{defaultValue:value&&codingToValueSetElement(value),maxValues:1,onChange:handleChange,withHelpText:withHelpText??!0,...rest})}function codingToValueSetElement(coding){return{system:coding.system,code:coding.code,display:coding.display}}function valueSetElementToCoding(element){return{system:element.system,code:element.code,display:element.display}}var import_core52=require("@mantine/core"),import_react33=require("react");var import_core51=require("@mantine/core"),import_react32=require("react");var import_jsx_runtime47=require("react/jsx-runtime");function ContactPointInput(props){let{path,outcome}=props,{elementsByPath}=(0,import_react32.useContext)(ElementsContext),[contactPoint,setContactPoint]=(0,import_react32.useState)(props.defaultValue),ref=(0,import_react32.useRef)();ref.current=contactPoint;let[systemElement,useElement,valueElement]=(0,import_react32.useMemo)(()=>["system","use","value"].map(field=>elementsByPath[path+"."+field]),[elementsByPath,path]);function setContactPointWrapper(newValue){newValue&&Object.keys(newValue).length===0&&(newValue=void 0),setContactPoint(newValue),props.onChange&&props.onChange(newValue)}function setSystem(system){let newValue={...ref.current,system};system||delete newValue.system,setContactPointWrapper(newValue)}function setUse(use){let newValue={...ref.current,use};use||delete newValue.use,setContactPointWrapper(newValue)}function setValue(value){let newValue={...ref.current,value};value||delete newValue.value,setContactPointWrapper(newValue)}let errorPath=props.valuePath??path;return(0,import_jsx_runtime47.jsxs)(import_core51.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime47.jsx)(import_core51.NativeSelect,{"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_runtime47.jsx)(import_core51.NativeSelect,{"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_runtime47.jsx)(import_core51.TextInput,{placeholder:"Value",defaultValue:contactPoint?.value,required:(valueElement?.min??0)>0,onChange:e=>setValue(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".value")})]})}var import_jsx_runtime48=require("react/jsx-runtime");function ContactDetailInput(props){let[contactPoint,setContactDetail]=(0,import_react33.useState)(props.defaultValue),ref=(0,import_react33.useRef)();ref.current=contactPoint;function setContactDetailWrapper(newValue){setContactDetail(newValue),props.onChange&&props.onChange(newValue)}function setName(name){let newValue={...ref.current,name};name||delete newValue.name,setContactDetailWrapper(newValue)}function setTelecom(telecom){let newValue={...ref.current,telecom:telecom&&[telecom]};telecom||delete newValue.telecom,setContactDetailWrapper(newValue)}return(0,import_jsx_runtime48.jsxs)(import_core52.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime48.jsx)(import_core52.TextInput,{"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactPoint?.name,onChange:e=>setName(e.currentTarget.value)}),(0,import_jsx_runtime48.jsx)(ContactPointInput,{name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactPoint?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}var import_core54=require("@mantine/core");var import_core53=require("@medplum/core");function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return(0,import_core53.isValidDate)(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return(0,import_core53.isValidDate)(date)?date.toISOString():""}var import_jsx_runtime49=require("react/jsx-runtime");function DateTimeInput(props){return(0,import_jsx_runtime49.jsx)(import_core54.TextInput,{id:props.name,name:props.name,label:props.label,"data-autofocus":props.autoFocus,"data-testid":props.name,placeholder:props.placeholder,required:props.required,type:getInputType(),defaultValue:convertIsoToLocal(props.defaultValue),autoFocus:props.autoFocus,error:getErrorsForInput(props.outcome,props.name),onChange:e=>{if(props.onChange){let newValue=e.currentTarget.value;props.onChange(convertLocalToIso(newValue))}}})}function getInputType(){return"datetime-local"}var import_core55=require("@medplum/core");var import_react34=require("react");var import_jsx_runtime50=require("react/jsx-runtime");function ExtensionInput(props){let{propertyType}=props,medplum=a(),[typeSchema,setTypeSchema]=(0,import_react34.useState)(),profileUrl=(0,import_react34.useMemo)(()=>{if((0,import_core55.isPopulated)(propertyType.profile))return propertyType.profile[0]},[propertyType]),[loadingProfile,setLoadingProfile]=(0,import_react34.useState)(profileUrl!==void 0);return(0,import_react34.useEffect)(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=(0,import_core55.tryGetProfile)(profileUrl);setLoadingProfile(!1),setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]),profileUrl&&(loadingProfile||!(0,import_core55.isProfileLoaded)(profileUrl))?(0,import_jsx_runtime50.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime50.jsx)(BackboneElementInput,{profileUrl,path:props.path,typeName:typeSchema?.name??"Extension",defaultValue:props.defaultValue,onChange:props.onChange})}var import_core56=require("@mantine/core"),import_react35=require("react");var import_jsx_runtime51=require("react/jsx-runtime");function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=(0,import_react35.useState)(props.defaultValue);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_runtime51.jsxs)(import_core56.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime51.jsx)(import_core56.NativeSelect,{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_runtime51.jsx)(import_core56.TextInput,{placeholder:"Prefix",name:props.name+"-prefix",defaultValue:value?.prefix?.join(" "),onChange:e=>setPrefix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".prefix")}),(0,import_jsx_runtime51.jsx)(import_core56.TextInput,{placeholder:"Given",name:props.name+"-given",defaultValue:value?.given?.join(" "),onChange:e=>setGiven(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".given")}),(0,import_jsx_runtime51.jsx)(import_core56.TextInput,{name:props.name+"-family",placeholder:"Family",defaultValue:value?.family,onChange:e=>setFamily(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".family")}),(0,import_jsx_runtime51.jsx)(import_core56.TextInput,{placeholder:"Suffix",name:props.name+"-suffix",defaultValue:value?.suffix?.join(" "),onChange:e=>setSuffix(e.currentTarget.value),error:getErrorsForInput(outcome,errorPath+".suffix")})]})}var import_core57=require("@mantine/core"),import_react36=require("react");var import_jsx_runtime52=require("react/jsx-runtime");function IdentifierInput(props){let[value,setValue]=(0,import_react36.useState)(props.defaultValue),{elementsByPath}=(0,import_react36.useContext)(ElementsContext),[systemElement,valueElement]=(0,import_react36.useMemo)(()=>["system","value"].map(field=>elementsByPath[props.path+"."+field]),[elementsByPath,props.path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}let errorPath=props.valuePath??props.path;return(0,import_jsx_runtime52.jsxs)(import_core57.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime52.jsx)(import_core57.TextInput,{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_runtime52.jsx)(import_core57.TextInput,{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_core58=require("@mantine/core");var import_react37=require("react"),import_jsx_runtime53=require("react/jsx-runtime"),data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=(0,import_react37.useState)(props.defaultValue),setValueWrapper=(0,import_react37.useCallback)(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=(0,import_react37.useCallback)(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=(0,import_react37.useCallback)(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=(0,import_jsx_runtime53.jsx)(import_core58.NativeSelect,{defaultValue:value?.currency,data,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:handleCurrencyChange});return(0,import_jsx_runtime53.jsx)(import_core58.TextInput,{type:"number",name:props.name,label:props.label,placeholder:props.placeholder??"Value",defaultValue:value?.value?.toString()??"USD",leftSection:(0,import_jsx_runtime53.jsx)(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}var import_core59=require("@mantine/core"),import_react38=require("react");var import_jsx_runtime54=require("react/jsx-runtime");function PeriodInput(props){let[value,setValue]=(0,import_react38.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime54.jsxs)(import_core59.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime54.jsx)(DateTimeInput,{name:props.name+".start",placeholder:"Start",defaultValue:value?.start,onChange:newValue=>setValueWrapper({...value,start:newValue})}),(0,import_jsx_runtime54.jsx)(DateTimeInput,{name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}var import_core60=require("@mantine/core"),import_react39=require("react"),import_jsx_runtime55=require("react/jsx-runtime");function QuantityInput(props){let[value,setValue]=(0,import_react39.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime55.jsxs)(import_core60.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime55.jsx)(import_core60.NativeSelect,{style:{width:80},"data-testid":props.name+"-comparator",defaultValue:value?.comparator,data:["","<","<=",">=",">"],onChange:e=>setValueWrapper({...value,comparator:e.currentTarget.value})}),(0,import_jsx_runtime55.jsx)(import_core60.TextInput,{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_runtime55.jsx)(import_core60.TextInput,{placeholder:"Unit","data-testid":props.name+"-unit",defaultValue:value?.unit,onChange:e=>setValueWrapper({...value,unit:e.currentTarget.value})})]})}function tryParseNumber(str){if(str)return parseFloat(str)}var import_core61=require("@mantine/core"),import_react40=require("react");var import_jsx_runtime56=require("react/jsx-runtime");function RangeInput(props){let[value,setValue]=(0,import_react40.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime56.jsxs)(import_core61.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime56.jsx)(QuantityInput,{name:props.name+"-low",defaultValue:value?.low,onChange:v2=>setValueWrapper({...value,low:v2})}),(0,import_jsx_runtime56.jsx)(QuantityInput,{name:props.name+"-high",defaultValue:value?.high,onChange:v2=>setValueWrapper({...value,high:v2})})]})}var import_core62=require("@mantine/core"),import_react41=require("react");var import_jsx_runtime57=require("react/jsx-runtime");function RatioInput(props){let[value,setValue]=(0,import_react41.useState)(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return(0,import_jsx_runtime57.jsxs)(import_core62.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime57.jsx)(QuantityInput,{name:props.name+"-numerator",defaultValue:value?.numerator,onChange:v2=>setValueWrapper({...value,numerator:v2})}),(0,import_jsx_runtime57.jsx)(QuantityInput,{name:props.name+"-denominator",defaultValue:value?.denominator,onChange:v2=>setValueWrapper({...value,denominator:v2})})]})}var import_core65=require("@mantine/core"),import_core66=require("@medplum/core");var import_react43=require("react");var import_core63=require("@mantine/core"),import_core64=require("@medplum/core");var import_react42=require("react");var import_jsx_runtime58=require("react/jsx-runtime"),SEARCH_CODES={Device:"device-name",Observation:"code",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","RiskEvidenceSynthesis","SearchParameter","StructureDefinition","StructureMap","TerminologyCapabilities","TestScript","UserConfiguration","ValueSet"];function toOption3(resource){return{value:(0,import_core64.getReferenceString)(resource),label:(0,import_core64.getDisplayString)(resource),resource}}function ResourceInput(props){let medplum=a(),{resourceType,searchCriteria}=props,[outcome,setOutcome]=(0,import_react42.useState)(),defaultValue2=pe(props.defaultValue,setOutcome),onChange=props.onChange,loadValues=(0,import_react42.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_react42.useCallback)(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return(0,import_core64.isPopulated)(props.defaultValue)&&!outcome&&!defaultValue2?null:(0,import_jsx_runtime58.jsx)(AsyncAutocomplete,{name:props.name,required:props.required,itemComponent:ItemComponent3,defaultValue:defaultValue2,placeholder:props.placeholder,maxValues:1,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var ItemComponent3=(0,import_react42.forwardRef)(({label,resource,...others},ref)=>(0,import_jsx_runtime58.jsx)("div",{ref,...others,children:(0,import_jsx_runtime58.jsxs)(import_core63.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime58.jsx)(ResourceAvatar,{value:resource}),(0,import_jsx_runtime58.jsxs)("div",{children:[(0,import_jsx_runtime58.jsx)(import_core63.Text,{children:label}),(0,import_jsx_runtime58.jsx)(import_core63.Text,{size:"xs",c:"dimmed",children:resource.birthDate})]})]})}));function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}var import_jsx_runtime59=require("react/jsx-runtime");function ReferenceInput(props){let{onChange}=props,medplum=a(),[value,setValue]=(0,import_react43.useState)(props.defaultValue),[targetTypes,setTargetTypes]=(0,import_react43.useState)(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=(0,import_react43.useState)(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=(0,import_react43.useRef)(new import_core66.LRUCache),searchCriteria=(0,import_react43.useMemo)(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);(0,import_react43.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_core66.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_core66.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_react43.useCallback)(item=>{let newValue=item?(0,import_core66.createReference)(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=(0,import_react43.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_runtime59.jsxs)(import_core65.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&(0,import_jsx_runtime59.jsx)(import_core65.NativeSelect,{"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_runtime59.jsx)(ResourceTypeInput,{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_runtime59.jsx)(ResourceInput,{resourceType:targetType?.resourceType,name:props.name+"-id",required:props.required,placeholder:props.placeholder,defaultValue:value,searchCriteria,onChange:setValueHelper})]})}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_core66.tryGetProfile)(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
66
66
  StructureDefinitionList(url: "${profileUrl}", _sort: "_lastUpdated", _count: 1) {
67
67
  type,
68
68
  name,
69
69
  title,
70
70
  }
71
- }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core66.isEmpty)(targetType.resourceType)}var import_core71=require("@mantine/core"),import_core72=require("@medplum/core");var import_react45=require("react");var import_core69=require("@mantine/core"),import_core70=require("@medplum/core"),import_react44=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core67=require("@mantine/core");var import_jsx_runtime60=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime60.jsx)(import_core67.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime60.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime60.jsx)(import_core67.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime60.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core68=require("@mantine/core");var import_jsx_runtime61=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime61.jsx)(import_core68.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime61.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime62=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react44.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react44.useContext)(ElementsContext),contextValue=(0,import_react44.useMemo)(()=>{if((0,import_core70.isPopulated)(sliceElements))return(0,import_core70.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_core70.isEmpty)(slice.elements),propertyDisplayName=(0,import_core70.getPropertyDisplayName)(slice.name);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime62.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,children:(0,import_jsx_runtime62.jsxs)(import_core69.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime62.jsxs)(import_core69.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime62.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime62.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})}),values.length>slice.min&&(0,import_jsx_runtime62.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),values.length<slice.max&&(0,import_jsx_runtime62.jsx)(import_core69.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime62.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_jsx_runtime63=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=a(),[loading,setLoading]=(0,import_react45.useState)(!0),[slices,setSlices]=(0,import_react45.useState)([]),[defaultValue2]=(0,import_react45.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react45.useState)(()=>[defaultValue2]),ctx=(0,import_react45.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react45.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_runtime63.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core72.getPathDisplayName)(property.path);return(0,import_jsx_runtime63.jsxs)(import_core71.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[slices.map((slice,sliceIndex)=>(0,import_jsx_runtime63.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_runtime63.jsxs)(import_core71.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime63.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime63.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})}),(0,import_jsx_runtime63.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime63.jsx)(import_core71.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime63.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_core73=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react46=require("react"),import_jsx_runtime64=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react46.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react46.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime64.jsxs)(import_core73.Flex,{gap:"xs",children:[(0,import_jsx_runtime64.jsx)(import_core73.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime64.jsx)(import_core73.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime64.jsx)(IconCopy,{})})]})}var import_core74=require("@mantine/core"),import_core75=require("@medplum/core"),import_react47=require("react");var import_jsx_runtime65=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react47.useState)(props.defaultValue),[open,setOpen]=(0,import_react47.useState)(!1),valueRef=(0,import_react47.useRef)();return valueRef.current=value,(0,import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment,{children:[(0,import_jsx_runtime65.jsxs)(import_core74.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)("span",{children:(0,import_core75.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime65.jsx)(import_core74.Button,{onClick:()=>setOpen(!0),children:"Edit"})]}),(0,import_jsx_runtime65.jsx)(TimingEditorDialog,{visible:open,defaultValue:valueRef.current,onOk:newValue=>{props.onChange&&props.onChange(newValue),setValue(newValue),setOpen(!1)},onCancel:()=>setOpen(!1)})]})}var defaultValue={repeat:{period:1,periodUnit:"d"}};function TimingEditorDialog(props){let[value,setValue]=(0,import_react47.useState)(props.defaultValue||defaultValue),valueRef=(0,import_react47.useRef)();valueRef.current=value;function setStart(newStart){setValue({...valueRef.current,event:[newStart]})}function setRepeat(repeat){setValue({...valueRef.current,repeat})}function setPeriod(newPeriod){setRepeat({...valueRef.current?.repeat,period:newPeriod})}function setPeriodUnit(newPeriodUnit){setRepeat({...valueRef.current?.repeat,periodUnit:newPeriodUnit})}function setDaysOfWeek(newDaysOfWeek){setRepeat({...valueRef.current?.repeat,dayOfWeek:newDaysOfWeek})}return(0,import_jsx_runtime65.jsx)(import_core74.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime65.jsxs)(import_core74.Stack,{children:[(0,import_jsx_runtime65.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime65.jsx)(DateTimeInput,{name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime65.jsx)(import_core74.Switch,{label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment,{children:[(0,import_jsx_runtime65.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime65.jsxs)(import_core74.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)(import_core74.TextInput,{type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime65.jsx)(import_core74.NativeSelect,{id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.currentTarget.value),data:[{label:"second",value:"s"},{label:"minute",value:"min"},{label:"hour",value:"h"},{label:"day",value:"d"},{label:"week",value:"wk"},{label:"month",value:"mo"},{label:"year",value:"a"}]})]})}),value.repeat.periodUnit==="wk"&&(0,import_jsx_runtime65.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime65.jsx)(import_core74.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime65.jsx)(import_core74.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime65.jsx)(import_core74.Chip,{value:day,size:"xs",radius:"xl",children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime65.jsx)(import_core74.Group,{justify:"flex-end",children:(0,import_jsx_runtime65.jsx)(import_core74.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime66=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_core77.PropertyType.Attachment)return(0,import_jsx_runtime66.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange});let indent=propertyTypes[0]?.code!==import_core77.PropertyType.Extension;return(0,import_jsx_runtime66.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_runtime66.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime66.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core77.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})}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_react48.useState)(initialPropertyType);return(0,import_jsx_runtime66.jsxs)(import_core76.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime66.jsx)(import_core76.NativeSelect,{style:{width:"200px"},defaultValue:selectedType.code,"data-testid":props.name&&props.name+"-selector",onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),(0,import_jsx_runtime66.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_core77.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path,valuePath:props.valuePath})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path,valuePath}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react48.useContext)(ElementsContext),defaultValue2=(0,import_react48.useMemo)(()=>{if(!(0,import_core77.isComplexTypeCode)(propertyType)||!(0,import_core77.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core77.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core77.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core77.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core77.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime66.jsx)("div",{children:"Property type not specified "});function getComplexInputProps(){return{name,defaultValue:defaultValue2,onChange,outcome,path,valuePath}}function getPrimitiveInputProps(){let error=getErrorsForInput(props.outcome,valuePath??path);return{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,error}}switch(propertyType){case import_core77.PropertyType.SystemString:case import_core77.PropertyType.canonical:case import_core77.PropertyType.string:case import_core77.PropertyType.time:case import_core77.PropertyType.uri:case import_core77.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime66.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.date:return(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.dateTime:case import_core77.PropertyType.instant:return(0,import_jsx_runtime66.jsx)(DateTimeInput,{name,defaultValue:defaultValue2,onChange,outcome});case import_core77.PropertyType.decimal:case import_core77.PropertyType.integer:case import_core77.PropertyType.positiveInt:case import_core77.PropertyType.unsignedInt:return(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core77.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core77.PropertyType.code:return(0,import_jsx_runtime66.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet});case import_core77.PropertyType.boolean:return(0,import_jsx_runtime66.jsx)(import_core76.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core77.PropertyType.base64Binary:case import_core77.PropertyType.markdown:return(0,import_jsx_runtime66.jsx)(import_core76.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core77.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.Address:return(0,import_jsx_runtime66.jsx)(AddressInput,{...getComplexInputProps()});case import_core77.PropertyType.Annotation:return(0,import_jsx_runtime66.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core77.PropertyType.Attachment:return(0,import_jsx_runtime66.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core77.PropertyType.CodeableConcept:return(0,import_jsx_runtime66.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core77.PropertyType.Coding:return(0,import_jsx_runtime66.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core77.PropertyType.ContactDetail:return(0,import_jsx_runtime66.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core77.PropertyType.ContactPoint:return(0,import_jsx_runtime66.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core77.PropertyType.Extension:return(0,import_jsx_runtime66.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core77.PropertyType.HumanName:return(0,import_jsx_runtime66.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core77.PropertyType.Identifier:return(0,import_jsx_runtime66.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core77.PropertyType.Money:return(0,import_jsx_runtime66.jsx)(MoneyInput,{...getComplexInputProps()});case import_core77.PropertyType.Period:return(0,import_jsx_runtime66.jsx)(PeriodInput,{...getComplexInputProps()});case import_core77.PropertyType.Duration:case import_core77.PropertyType.Quantity:return(0,import_jsx_runtime66.jsx)(QuantityInput,{...getComplexInputProps()});case import_core77.PropertyType.Range:return(0,import_jsx_runtime66.jsx)(RangeInput,{...getComplexInputProps()});case import_core77.PropertyType.Ratio:return(0,import_jsx_runtime66.jsx)(RatioInput,{...getComplexInputProps()});case import_core77.PropertyType.Reference:return(0,import_jsx_runtime66.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core77.PropertyType.Timing:return(0,import_jsx_runtime66.jsx)(TimingInput,{...getComplexInputProps()});case import_core77.PropertyType.Dosage:case import_core77.PropertyType.UsageContext:default:return(0,import_jsx_runtime66.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core77.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_runtime67=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react49.useState)(props.defaultValue??{}),elementsContext=(0,import_react49.useContext)(ElementsContext),elementsToRender=(0,import_react49.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_runtime67.jsx)(import_core78.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_runtime67.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_runtime67.jsx)(CheckboxFormSection,{title:(0,import_core79.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,children:resourcePropertyInput},key):(0,import_jsx_runtime67.jsx)(FormSection,{title:(0,import_core79.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,children:resourcePropertyInput},key)})})}var import_jsx_runtime68=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react50.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react50.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react50.useMemo)(()=>(0,import_core80.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react50.useMemo)(()=>{if(typeSchema)return(0,import_core80.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime68.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime68.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core81=require("@mantine/core"),import_react51=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_runtime69=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react51.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_react51.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime69.jsxs)("div",{children:[(0,import_jsx_runtime69.jsxs)(import_core81.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime69.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime69.jsxs)(import_core81.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime69.jsx)(import_core81.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime69.jsx)(import_core81.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime69.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime69.jsx)("thead",{children:(0,import_jsx_runtime69.jsxs)("tr",{children:[(0,import_jsx_runtime69.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime69.jsx)("th",{children:"MON"}),(0,import_jsx_runtime69.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime69.jsx)("th",{children:"WED"}),(0,import_jsx_runtime69.jsx)("th",{children:"THU"}),(0,import_jsx_runtime69.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime69.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime69.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime69.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime69.jsx)("td",{children:day&&(0,import_jsx_runtime69.jsx)(import_core81.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_core82=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime70=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime70.jsx)(import_core82.Container,{className:Container_default.root,...others,children})}var import_core96=require("@mantine/core"),import_notifications5=require("@mantine/notifications"),import_core97=require("@medplum/core");var import_react56=require("react");var import_core88=require("@mantine/core"),import_core89=require("@medplum/core");var import_react53=require("react");var import_core83=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime71=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime71.jsx)(import_core83.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime71.jsx)(import_core83.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_core86=require("@mantine/core");var import_core84=require("@mantine/core"),import_core85=require("@medplum/core");var import_react52=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react52.useState)(),resource=pe(value,setOutcome),text;if(outcome&&!(0,import_core85.isOk)(outcome))text=`[${(0,import_core85.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core85.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime72.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime72.jsx)(import_core84.Text,{component:"span",...rest,children:text})}var import_jsx_runtime73=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime73.jsxs)(import_core86.Group,{gap:"xs",children:[(0,import_jsx_runtime73.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime73.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core87=require("@mantine/core"),import_jsx_runtime74=require("react/jsx-runtime"),statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red",connected:"green",disconnected:"red"};function StatusBadge(props){return(0,import_jsx_runtime74.jsx)(import_core87.Badge,{color:statusToColor[props.status],children:props.status})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime75=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=a(),diagnosticReport=pe(props.value),[specimens,setSpecimens]=(0,import_react53.useState)();if((0,import_react53.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_runtime75.jsxs)(import_core88.Stack,{children:[(0,import_jsx_runtime75.jsx)(import_core88.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime75.jsx)(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime75.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime75.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return(0,import_jsx_runtime75.jsxs)(import_core88.Group,{mt:"md",gap:30,children:[value.subject&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime75.jsx)(import_core88.Text,{children:(0,import_core89.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime75.jsx)(import_core88.Text,{children:(0,import_core89.capitalize)(value.status)})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime75.jsxs)(import_core88.Stack,{gap:"xs",children:[(0,import_jsx_runtime75.jsx)(import_core88.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime75.jsx)(import_core88.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime75.jsx)(import_core88.List.Item,{ml:"sm",children:(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:20,children:[(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:5,children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{fw:500,children:"Collected:"})," ",(0,import_core89.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:5,children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{fw:500,children:"Received:"})," ",(0,import_core89.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime75.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime75.jsx)("thead",{children:(0,import_jsx_runtime75.jsxs)("tr",{children:[(0,import_jsx_runtime75.jsx)("th",{children:"Test"}),(0,import_jsx_runtime75.jsx)("th",{children:"Value"}),(0,import_jsx_runtime75.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime75.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime75.jsx)("th",{children:"Category"}),(0,import_jsx_runtime75.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime75.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime75.jsx)("tbody",{children:(0,import_jsx_runtime75.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime75.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core89.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=pe(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment,{children:[(0,import_jsx_runtime75.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime75.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime75.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime75.jsx)("td",{children:(0,import_jsx_runtime75.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime75.jsx)("td",{children:(0,import_jsx_runtime75.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime75.jsx)("div",{children:(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core89.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime75.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime75.jsx)("td",{children:observation.status&&(0,import_jsx_runtime75.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime75.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime75.jsx)("tr",{children:(0,import_jsx_runtime75.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime75.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:(0,import_core89.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:range.text}):(0,import_jsx_runtime75.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_core90=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime76=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime76.jsx)(import_core90.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_core91=require("@mantine/core"),import_core92=require("@medplum/core");var import_react54=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime77=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=a(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react54.useState)(!1);(0,import_react54.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react54.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core92.toTypedValue)(original)],typedRevised=[(0,import_core92.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_core92.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core92.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core92.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_runtime77.jsxs)(import_core91.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Thead,{children:(0,import_jsx_runtime77.jsxs)(import_core91.Table.Tr,{children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{children:"Before"}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Tbody,{children:diffTable.map(row=>(0,import_jsx_runtime77.jsxs)(import_core91.Table.Tr,{children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{children:row.name}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{className:ResourceDiffTable_default.removed,children:row.originalValue&&(0,import_jsx_runtime77.jsx)(ResourcePropertyDisplay,{path:row.path,property:row.property,propertyType:row.originalValue.type,value:row.originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{className:ResourceDiffTable_default.added,children:row.revisedValue&&(0,import_jsx_runtime77.jsx)(ResourcePropertyDisplay,{path:row.path,property:row.property,propertyType:row.revisedValue.type,value:row.revisedValue.value,ignoreMissingValues:!0})})]},row.key))})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){return(0,import_core92.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}function touchUpValue(property,input){return input&&{type:Array.isArray(input)?input[0].type:input.type,value:fixArray(input,!!property?.isArray)}}function fixArray(input,isArray){let inputValue=(0,import_core92.arrayify)(input).flatMap(v2=>v2.value);return isArray?inputValue:inputValue[0]}var import_react55=require("react");var import_core93=require("@medplum/core"),import_jsx_runtime78=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=a(),value=pe(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react55.useState)();return(0,import_react55.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core93.tryGetProfile)(profileUrl);profile?setSchemaLoaded(profile.name):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(schemaName)}).catch(console.error)}},[medplum,profileUrl,value]),!schemaLoaded||!value?null:(0,import_jsx_runtime78.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:schemaLoaded,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues})}var import_core94=require("@mantine/core"),import_core95=require("@medplum/core");var import_jsx_runtime79=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime79.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_runtime79.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime79.jsxs)(import_core94.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime79.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime79.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime79.jsx)(import_core94.Text,{size:"sm",children:(0,import_jsx_runtime79.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime79.jsxs)(import_core94.Text,{size:"xs",children:[(0,import_jsx_runtime79.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core95.formatDateTime)(dateTime)}),(0,import_jsx_runtime79.jsx)(import_core94.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime79.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime79.jsxs)(import_core94.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime79.jsx)(import_core94.Menu.Target,{children:(0,import_jsx_runtime79.jsx)(import_core94.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core95.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime79.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime79.jsxs)(ErrorBoundary,{children:[padding&&(0,import_jsx_runtime79.jsx)("div",{style:{padding:"0 16px 16px 16px"},children:props.children}),!padding&&(0,import_jsx_runtime79.jsx)(import_jsx_runtime79.Fragment,{children:props.children})]})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a2,b2)=>{let priority1=getPriorityScore(a2,timelineResource),priority2=getPriorityScore(b2,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a2,timelineResource)-getTime(b2,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a2,b2){return!!b2&&a2.resourceType===b2.resourceType&&a2.id===b2.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime80=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=a(),navigate=V(),sender=medplum.getProfile(),inputRef=(0,import_react56.useRef)(null),resource=pe(props.value),[history,setHistory]=(0,import_react56.useState)(),[items,setItems]=(0,import_react56.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react56.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react56.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react56.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_react56.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react56.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_react56.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_notifications5.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime80.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core97.normalizeErrorString)(reason),icon:(0,import_jsx_runtime80.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function setPriority(communication,priority){return medplum.updateResource({...communication,priority})}function onPin(communication){setPriority(communication,"stat").then(loadTimeline).catch(console.error)}function onUnpin(communication){setPriority(communication,"routine").then(loadTimeline).catch(console.error)}function onDetails(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}`)}function onEdit(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`)}function onDelete(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`)}function onVersionDetails(version){navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`)}function onUploadStart(){(0,import_notifications5.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications5.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core97.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime80.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime80.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime80.jsx)(Panel,{children:(0,import_jsx_runtime80.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime80.jsxs)(import_core96.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime80.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime80.jsx)(import_core96.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime80.jsx)(import_core96.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime80.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime80.jsx)(AttachmentButton,{securityContext:(0,import_core97.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime80.jsx)(import_core96.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime80.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime80.jsx)(HistoryTimelineItem,{history,resource:item,onDetails:onVersionDetails},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime80.jsx)(AuditEventTimelineItem,{resource:item,onDetails},key);case"Communication":return(0,import_jsx_runtime80.jsx)(CommunicationTimelineItem,{resource:item,onPin:item.priority!=="stat"?onPin:void 0,onUnpin:item.priority==="stat"?onUnpin:void 0,onDetails,onEdit,onDelete},key);case"DiagnosticReport":return(0,import_jsx_runtime80.jsx)(DiagnosticReportTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);case"Media":return(0,import_jsx_runtime80.jsx)(MediaTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);default:return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime80.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime80.jsx)(import_core96.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime80.jsx)(import_core96.Loader,{})})}function TimelineItemPopupMenu(props){return(0,import_jsx_runtime80.jsxs)(import_core96.Menu.Dropdown,{children:[(0,import_jsx_runtime80.jsx)(import_core96.Menu.Label,{children:"Resource"}),props.onPin&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconPin,{size:14}),onClick:()=>props.onPin(props.resource),"aria-label":`Pin ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Pin"}),props.onUnpin&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconPinnedOff,{size:14}),onClick:()=>props.onUnpin(props.resource),"aria-label":`Unpin ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Unpin"}),props.onDetails&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconListDetails,{size:14}),onClick:()=>props.onDetails(props.resource),"aria-label":`Details ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Details"}),props.onEdit&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconEdit,{size:14}),onClick:()=>props.onEdit(props.resource),"aria-label":`Edit ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Edit"}),props.onDelete&&(0,import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment,{children:[(0,import_jsx_runtime80.jsx)(import_core96.Menu.Divider,{}),(0,import_jsx_runtime80.jsx)(import_core96.Menu.Label,{children:"Danger zone"}),(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime80.jsx)(IconTrash,{size:14}),onClick:()=>props.onDelete(props.resource),"aria-label":`Delete ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Delete"})]})]})}function HistoryTimelineItem(props){let previous=getPrevious(props.history,props.resource);return previous?(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime80.jsxs)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:[(0,import_jsx_runtime80.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime80.jsx)(ResourceTable,{value:props.resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function getPrevious(history,version){let entries=history.entry,index=entries.findIndex(entry=>entry.resource?.meta?.versionId===version.meta?.versionId);if(!(index>=entries.length-1))return entries[index+1].resource}function CommunicationTimelineItem(props){let className=!props.resource.priority||props.resource.priority==="routine"?void 0:ResourceTimeline_default.pinnedComment;return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.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_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(import_core96.ScrollArea,{children:(0,import_jsx_runtime80.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.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_runtime81=require("react/jsx-runtime");function DefaultResourceTimeline(props){return(0,import_jsx_runtime81.jsx)(ResourceTimeline,{value:props.resource,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`;return Promise.allSettled([medplum.readHistory(resourceType,id),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count:100})])}})}var import_jsx_runtime82=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime82.jsx)(Container,{children:(0,import_jsx_runtime82.jsx)(Panel,{...others,children})})}var import_core98=require("@medplum/core");var import_jsx_runtime83=require("react/jsx-runtime");function EncounterTimeline(props){return(0,import_jsx_runtime83.jsx)(ResourceTimeline,{value:props.encounter,loadTimelineResources:async(medplum,_resourceType,id)=>Promise.allSettled([medplum.readHistory("Encounter",id),medplum.search("Communication","encounter=Encounter/"+id),medplum.search("Media","encounter=Encounter/"+id)]),createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",encounter:(0,import_core98.createReference)(resource),subject:resource.subject,sender:(0,import_core98.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core98.createReference)(resource),subject:resource.subject,operator:(0,import_core98.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core115=require("@mantine/core"),import_core116=require("@medplum/core");var import_react61=require("react");var import_core99=require("@medplum/core");var import_jsx_runtime84=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core99.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_runtime84.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core113=require("@mantine/core"),import_core114=require("@medplum/core");var import_react60=require("react");var import_core100=require("@mantine/core"),import_jsx_runtime85=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime85.jsxs)(import_core100.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime85.jsxs)(import_core100.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime85.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime85.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime85.jsx)(import_core100.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime85.jsx)(import_core100.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core102=require("@mantine/core"),import_core103=require("@medplum/core"),import_react57=require("react");var import_core101=require("@medplum/core");var import_jsx_runtime86=require("react/jsx-runtime"),searchParamToOperators={string:[import_core101.Operator.EQUALS,import_core101.Operator.NOT,import_core101.Operator.CONTAINS,import_core101.Operator.EXACT],fulltext:[import_core101.Operator.EQUALS,import_core101.Operator.NOT,import_core101.Operator.CONTAINS,import_core101.Operator.EXACT],token:[import_core101.Operator.EQUALS,import_core101.Operator.NOT],reference:[import_core101.Operator.EQUALS,import_core101.Operator.NOT],numeric:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS],date:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS,import_core101.Operator.STARTS_AFTER,import_core101.Operator.ENDS_BEFORE,import_core101.Operator.APPROXIMATELY],datetime:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS,import_core101.Operator.STARTS_AFTER,import_core101.Operator.ENDS_BEFORE,import_core101.Operator.APPROXIMATELY]},operatorNames={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",identifier:"identifier",iterate:"iterate"};function setFilters(definition,filters){return{...definition,filters,offset:0,name:void 0}}function clearFilters(definition){return setFilters(definition,[])}function clearFiltersOnField(definition,code){return setFilters(definition,(definition.filters??[]).filter(f2=>f2.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core101.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core101.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_core101.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_core101.DEFAULT_SEARCH_COUNT,newOffset=(page-1)*count;return setOffset(definition,newOffset)}function setSort(definition,sort,desc){return sort===getSortField(definition)&&desc!==void 0&&desc===isSortDescending(definition)?definition:{...definition,sortRules:[{code:sort,descending:!!desc}],name:void 0}}function toggleSort(definition,key){let desc=!1;return getSortField(definition)===key&&(desc=!isSortDescending(definition)),setSort(definition,key,desc)}function getSortField(definition){let sortRules=definition.sortRules;if(!sortRules||sortRules.length===0)return;let field=sortRules[0].code;return field.startsWith("-")?field.substr(1):field}function isSortDescending(definition){let sortRules=definition.sortRules;return!sortRules||sortRules.length===0?!1:!!sortRules[0].descending}function getSearchOperators(searchParam){return searchParamToOperators[searchParam.type]}function getOpString(op){return operatorNames[op]??""}function buildFieldNameString(key){let tmp=key;return tmp.includes(".")&&(tmp=tmp.split(".").pop()),tmp==="versionId"?"Version ID":(tmp=tmp.replace("[x]",""),tmp=tmp.replace(/([A-Z])/g," $1"),tmp=tmp.replace(/[-_]/g," "),tmp=tmp.replace(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core101.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?resource.id:key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core101.formatDateTime)(resource.meta?.lastUpdated):field.elementDefinition&&`${resource.resourceType}.${field.name}`===field.elementDefinition.path?renderPropertyValue(resource,field.elementDefinition):field.searchParams&&field.searchParams.length===1&&field.name===field.searchParams[0].code?renderSearchParameterValue(resource,field.searchParams[0]):null}function renderPropertyValue(resource,elementDefinition){let path=elementDefinition.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[value,propertyType]=getValueAndType({type:resource.resourceType,value:resource},path);return value?(0,import_jsx_runtime86.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core101.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:value.map((v2,index)=>(0,import_jsx_runtime86.jsx)(ResourcePropertyDisplay,{propertyType:v2.type,value:v2.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime87=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react57.useRef)(!1),[state,setState]=(0,import_react57.useState)({search:JSON.parse((0,import_core103.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react57.useState)(!1);(0,import_react57.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react57.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core103.getDataType)(resourceType),searchParams=(0,import_core103.getSearchParameters)(resourceType);return(0,import_core103.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);if(!props.visible)return null;function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime87.jsx)(import_core102.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_runtime87.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime87.jsxs)(import_core102.Stack,{children:[(0,import_jsx_runtime87.jsx)(import_core102.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_runtime87.jsx)(import_core102.Group,{justify:"flex-end",children:(0,import_jsx_runtime87.jsx)(import_core102.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_core107=require("@mantine/core"),import_core108=require("@medplum/core"),import_react58=require("react");var import_core104=require("@medplum/core");var import_jsx_runtime88=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core104.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core104.Operator.EQUALS||filter.operator===import_core104.Operator.NOT_EQUALS))return(0,import_jsx_runtime88.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core104.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core104.SearchParameterType.DATETIME)return(0,import_jsx_runtime88.jsx)(import_jsx_runtime88.Fragment,{children:(0,import_core104.formatDateTime)(filter.value)})}return(0,import_jsx_runtime88.jsx)(import_jsx_runtime88.Fragment,{children:filter.value})}var import_core105=require("@mantine/core"),import_core106=require("@medplum/core");var import_jsx_runtime89=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core106.getSearchParameterDetails)(props.resourceType,props.searchParam),name="filter-value";switch(details.type){case import_core106.SearchParameterType.REFERENCE:return(0,import_jsx_runtime89.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_core106.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.DATE:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.DATETIME:return(0,import_jsx_runtime89.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core106.SearchParameterType.NUMBER:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.QUANTITY:return(0,import_jsx_runtime89.jsx)(QuantityInput,{name,defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime89.jsx)(import_core105.TextInput,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value),placeholder:"Search value"})}}function tryParseQuantity(value){if(value){let[valueString,systemString,unitString]=value.split("|");if(valueString)return{value:parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime90=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react58.useState)(JSON.parse((0,import_core108.stringify)(props.search))),[editingIndex,setEditingIndex]=(0,import_react58.useState)(-1),searchRef=(0,import_react58.useRef)(search);searchRef.current=search,(0,import_react58.useEffect)(()=>{setSearch(JSON.parse((0,import_core108.stringify)(props.search)))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}if(!props.visible)return null;let resourceType=props.search.resourceType,searchParams=(0,import_core108.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime90.jsxs)(import_core107.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime90.jsx)("div",{children:(0,import_jsx_runtime90.jsxs)("table",{children:[(0,import_jsx_runtime90.jsxs)("colgroup",{children:[(0,import_jsx_runtime90.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:120}})]}),(0,import_jsx_runtime90.jsx)("thead",{children:(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("th",{children:"Field"}),(0,import_jsx_runtime90.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime90.jsx)("th",{children:"Value"}),(0,import_jsx_runtime90.jsx)("th",{children:"Actions"})]})}),(0,import_jsx_runtime90.jsxs)("tbody",{children:[filters.map((filter,index)=>index===editingIndex?(0,import_jsx_runtime90.jsx)(FilterRowInput,{resourceType,searchParams,defaultValue:filter,okText:"Save",onOk:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters)),setEditingIndex(-1)},onCancel:()=>setEditingIndex(-1)},`filter-${filter.code}-${filter.operator}-${filter.value}-input`):(0,import_jsx_runtime90.jsx)(FilterRowDisplay,{resourceType,filter,onEdit:()=>setEditingIndex(index),onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${filter.code}-${filter.operator}-${filter.value}-display`)),(0,import_jsx_runtime90.jsx)(FilterRowInput,{resourceType,searchParams,okText:"Add",onOk:onAddFilter})]})]})}),(0,import_jsx_runtime90.jsx)(import_core107.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime90.jsx)(import_core107.Button,{onClick:()=>props.onOk(searchRef.current),children:"OK"})})]})}function FilterRowDisplay(props){let{filter}=props;return(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("td",{children:buildFieldNameString(filter.code)}),(0,import_jsx_runtime90.jsx)("td",{children:getOpString(filter.operator)}),(0,import_jsx_runtime90.jsx)("td",{children:(0,import_jsx_runtime90.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})}),(0,import_jsx_runtime90.jsxs)("td",{children:[(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onEdit,children:"Edit"}),(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onDelete,children:"Delete"})]})]})}function FilterRowInput(props){let[value,setValue]=(0,import_react58.useState)(props.defaultValue??{}),valueRef=(0,import_react58.useRef)(value);valueRef.current=value;function setFilterCode(newCode){setValue({...valueRef.current,code:newCode})}function setFilterOperator(newOperator){setValue({...valueRef.current,operator:newOperator})}function setFilterValue(newFilterValue){setValue({...valueRef.current,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("td",{children:(0,import_jsx_runtime90.jsx)(import_core107.NativeSelect,{"data-testid":"filter-field",defaultValue:valueRef.current.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime90.jsx)("td",{children:operators&&(0,import_jsx_runtime90.jsx)(import_core107.NativeSelect,{"data-testid":"filter-operation",defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),(0,import_jsx_runtime90.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime90.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),(0,import_jsx_runtime90.jsxs)("td",{children:[value.code&&value.operator&&(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:()=>{props.onOk(valueRef.current),setValue({})},children:props.okText}),props.onCancel&&(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onCancel,children:"Cancel"})]})]})}var import_core109=require("@mantine/core"),import_react59=require("react");var import_jsx_runtime91=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react59.useState)(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime91.jsx)(import_core109.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime91.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime91.jsxs)(import_core109.Grid,{children:[(0,import_jsx_runtime91.jsx)(import_core109.Grid.Col,{span:10,children:(0,import_jsx_runtime91.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime91.jsx)(import_core109.Grid.Col,{span:2,children:(0,import_jsx_runtime91.jsx)(import_core109.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core110=require("@mantine/core"),import_core111=require("@medplum/core");var import_jsx_runtime92=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_runtime92.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime92.jsx)(import_core110.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime92.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime92.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime92.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime92.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime92.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core112=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_core112.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core112.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core112.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_core112.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime93=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change"),this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load"),this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click"),this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=a(),[loadingSchema,setLoadingSchema]=(0,import_react60.useState)(),[outcome,setOutcome]=(0,import_react60.useState)(),{search,onLoad}=props,[state,setState]=(0,import_react60.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react60.useRef)(state);stateRef.current=state;let total=search.total??"accurate",loadResults=(0,import_react60.useCallback)(options=>{setOutcome(void 0),medplum.search(search.resourceType,(0,import_core114.formatSearchQuery)({...search,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(reason)})},[medplum,search,total,onLoad]),refreshResults=(0,import_react60.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react60.useEffect)(()=>{loadResults()},[loadResults]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...stateRef.current.selected};checked?newSelected[id]=!0:delete newSelected[id],setState({...stateRef.current,selected:newSelected})}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},searchResponse=stateRef.current.searchResponse;checked&&searchResponse?.entry&&searchResponse.entry.forEach(entry=>{entry.resource?.id&&(newSelected[entry.resource.id]=!0)}),setState({...stateRef.current,selected:newSelected})}function isAllSelected(){let state2=stateRef.current;if(!state2.searchResponse?.entry||state2.searchResponse.entry.length===0)return!1;for(let e of state2.searchResponse.entry)if(e.resource?.id&&!state2.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=e.button===1||e.ctrlKey||e.metaKey;!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if((0,import_react60.useEffect)(()=>{setLoadingSchema(props.search.resourceType),medplum.requestSchema(props.search.resourceType).catch(console.error).finally(()=>setLoadingSchema(void 0))},[medplum,props.search.resourceType]),!(0,import_core114.isDataTypeLoaded)(props.search.resourceType)||loadingSchema===props.search.resourceType)return(0,import_jsx_runtime93.jsx)(import_core113.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime93.jsx)(import_core113.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(search),resourceType=search.resourceType,lastResult=state.searchResponse,resources=lastResult?.entry?.map(e=>e.resource),buttonVariant="subtle",buttonColor="gray",iconSize=16,isMobile=window.innerWidth<768;return(0,import_jsx_runtime93.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime93.jsxs)(import_core113.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime93.jsxs)(import_core113.Group,{gap:2,children:[(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime93.jsxs)(import_core113.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime93.jsxs)(import_core113.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(search,lastResult).toLocaleString(),"-",getEnd(search,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${search.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime93.jsx)(import_core113.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime93.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime93.jsxs)(import_core113.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime93.jsxs)(import_core113.Table.Thead,{children:[(0,import_jsx_runtime93.jsxs)(import_core113.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{children:(0,import_jsx_runtime93.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_runtime93.jsx)(import_core113.Table.Th,{children:(0,import_jsx_runtime93.jsxs)(import_core113.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime93.jsx)(import_core113.Menu.Target,{children:(0,import_jsx_runtime93.jsx)(import_core113.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime93.jsxs)(import_core113.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime93.jsx)(import_core113.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime93.jsx)(import_core113.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime93.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime93.jsx)(SearchPopupMenu,{search:props.search,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime93.jsxs)(import_core113.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime93.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:props.search.filters})},field.name))]})]}),(0,import_jsx_runtime93.jsx)(import_core113.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime93.jsxs)(import_core113.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_runtime93.jsx)(import_core113.Table.Td,{children:(0,import_jsx_runtime93.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_runtime93.jsx)(import_core113.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),resources?.length===0&&(0,import_jsx_runtime93.jsx)(Container,{children:(0,import_jsx_runtime93.jsx)(import_core113.Center,{style:{height:150},children:(0,import_jsx_runtime93.jsx)(import_core113.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime93.jsx)(import_core113.Center,{m:"md",p:"md",children:(0,import_jsx_runtime93.jsx)(import_core113.Pagination,{value:getPage(search),total:getTotalPages(search,lastResult),onChange:newPage=>emitSearchChange(setPage(search,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),outcome&&(0,import_jsx_runtime93.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime93.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),(0,import_jsx_runtime93.jsx)(SearchFieldEditor,{search:props.search,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchFilterEditor,{search:props.search,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchFilterValueDialog,{visible:stateRef.current.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(props.search,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},state.filterDialogSearchParam?.code)]})}var MemoizedSearchControl=(0,import_react60.memo)(SearchControl);function FilterDescription(props){let filters=(props.filters??[]).filter(f2=>props.searchParams.find(p=>p.code===f2.code));return filters.length===0?(0,import_jsx_runtime93.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime93.jsx)(import_jsx_runtime93.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime93.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime93.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_core114.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core114.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_runtime94=require("react/jsx-runtime");function FhirPathTable(props){let medplum=a(),[schemaLoaded,setSchemaLoaded]=(0,import_react61.useState)(!1),[outcome,setOutcome]=(0,import_react61.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react61.useState)(),[selected,setSelected]=(0,import_react61.useState)({}),responseRef=(0,import_react61.useRef)();responseRef.current=response;let selectedRef=(0,import_react61.useRef)({});selectedRef.current=selected,(0,import_react61.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core116.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selectedRef.current};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=responseRef.current?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=responseRef.current?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selectedRef.current[resource.id])return!1;return!0}function handleRowClick(e,resource){isCheckboxCell(e.target)||(killEvent(e),e.button!==1&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),e.button===1&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e)))}if((0,import_react61.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime94.jsx)(import_core115.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime94.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime94.jsxs)(import_core115.Table,{children:[(0,import_jsx_runtime94.jsx)(import_core115.Table.Thead,{children:(0,import_jsx_runtime94.jsxs)(import_core115.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime94.jsx)(import_core115.Table.Th,{children:(0,import_jsx_runtime94.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_runtime94.jsx)(import_core115.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime94.jsx)(import_core115.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime94.jsxs)(import_core115.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime94.jsx)(import_core115.Table.Td,{children:(0,import_jsx_runtime94.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_runtime94.jsx)(import_core115.Table.Td,{children:(0,import_jsx_runtime94.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime94.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime94.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime94.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime94.jsx)(import_core115.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react61.memo)(FhirPathTable);var import_jsx_runtime95=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime95.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:props.size,height:props.size},children:[(0,import_jsx_runtime95.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#946af9",d:"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#7857c5",d:"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}var import_core119=require("@mantine/core");var import_core117=require("@mantine/core"),import_core118=require("@medplum/core");var import_jsx_runtime96=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime96.jsx)(import_core117.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime96.jsxs)(import_core117.Group,{children:[group.measureScore&&(0,import_jsx_runtime96.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime96.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime96.jsx)(import_core117.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_core118.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core118.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime96.jsxs)(import_core117.Box,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime96.jsxs)(import_core117.Box,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime96.jsx)(import_core117.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime96.jsx)(import_core117.Flex,{justify:"center",children:(0,import_jsx_runtime96.jsxs)(import_core117.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_runtime96.jsx)(import_jsx_runtime96.Fragment,{children:unit==="%"?(0,import_jsx_runtime96.jsx)(import_core117.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime96.jsx)(import_core117.Flex,{justify:"center",children:(0,import_jsx_runtime96.jsx)(import_core117.Text,{fw:700,fz:18,children:(0,import_jsx_runtime96.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime96.jsx)(import_core117.Flex,{h:120,align:"center",children:(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:(0,import_jsx_runtime96.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_runtime97=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=pe(props.measureReport),[measure]=Ce("Measure",{url:report?.measure});return report?(0,import_jsx_runtime97.jsxs)(import_core119.Box,{children:[measure&&(0,import_jsx_runtime97.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime97.jsx)(import_core119.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime97.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core120=require("@mantine/core");var import_react62=require("react"),import_jsx_runtime98=require("react/jsx-runtime");function NotificationIcon(props){let medplum=a(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react62.useState)(0),updateCount=(0,import_react62.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react62.useEffect)(()=>{updateCount("default")},[updateCount]),Oe(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime98.jsx)(import_core120.Tooltip,{label,children:(0,import_jsx_runtime98.jsx)(import_core120.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime98.jsx)(import_core120.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core121=require("@mantine/core"),import_core122=require("@medplum/core");var import_jsx_runtime99=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime99.jsx)(import_core121.Alert,{icon:(0,import_jsx_runtime99.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime99.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core122.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core138=require("@mantine/core"),import_core139=require("@medplum/core");var import_react71=require("react");var import_core127=require("@mantine/core"),import_hooks2=require("@mantine/hooks");var import_react64=require("react");var import_core123=require("@mantine/core"),import_core124=require("@medplum/core"),import_react63=require("react");var import_jsx_runtime100=require("react/jsx-runtime");function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react63.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react63.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react63.useCallback)(formData=>{onSubmit({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core124.createReference)(patient),encounter:encounter?(0,import_core124.createReference)(encounter):void 0,code,clinicalStatus,onsetDateTime:formData.onsetDateTime?formData.onsetDateTime:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0})},[patient,encounter,allergy,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime100.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime100.jsxs)(import_core123.Stack,{children:[(0,import_jsx_runtime100.jsx)(CodeableConceptInput,{name:"allergy",label:"Code",path:"AllergyIntolerance.code","data-autofocus":!0,binding:"http://hl7.org/fhir/us/core/ValueSet/us-core-allergy-substance",defaultValue:allergy?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime100.jsx)(import_core123.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime100.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:"http://hl7.org/fhir/ValueSet/allergyintolerance-clinical",defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime100.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime100.jsx)(import_core123.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime100.jsx)(import_core123.Button,{type:"submit",children:"Save"})})]})},allergy?.id)}var import_core125=require("@mantine/core"),import_core126=require("@medplum/core");var import_jsx_runtime101=require("react/jsx-runtime");function ConceptBadge(props){let{resource,onEdit}=props,rightSection;return onEdit&&(rightSection=(0,import_jsx_runtime101.jsx)(IconEdit,{"aria-label":`Edit ${(0,import_core126.getDisplayString)(resource)}`,size:12,onClick:e=>{killEvent(e),onEdit(resource)}})),(0,import_jsx_runtime101.jsx)(MedplumLink,{to:resource,children:(0,import_jsx_runtime101.jsx)(import_core125.Badge,{variant:"light",maw:"100%",rightSection,children:(0,import_core126.getDisplayString)(resource)})},resource.id)}var import_jsx_runtime102=require("react/jsx-runtime");function Allergies(props){let medplum=a(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react64.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks2.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react64.useState)(),handleSubmit=(0,import_react64.useCallback)(async allergy=>{if(allergy.id){let updatedAllergy=await medplum.updateResource(allergy);setAllergies(allergies.map(a2=>a2.id===updatedAllergy.id?updatedAllergy:a2))}else{let newAllergy=await medplum.createResource(allergy);setAllergies([...allergies,newAllergy])}setEditAllergy(void 0),close()},[medplum,allergies,close]);return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[(0,import_jsx_runtime102.jsxs)(import_core127.Group,{justify:"space-between",children:[(0,import_jsx_runtime102.jsx)(import_core127.Text,{fz:"md",fw:700,children:"Allergies"}),(0,import_jsx_runtime102.jsx)(import_core127.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),allergies.length>0?(0,import_jsx_runtime102.jsx)(import_core127.Box,{children:allergies.map(allergy=>(0,import_jsx_runtime102.jsx)(ConceptBadge,{resource:allergy,onEdit:a2=>{setEditAllergy(a2),open()}},allergy.id))}):(0,import_jsx_runtime102.jsx)(import_core127.Text,{children:"(none)"}),(0,import_jsx_runtime102.jsx)(import_core127.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime102.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}var import_core130=require("@mantine/core"),import_hooks3=require("@mantine/hooks");var import_react66=require("react");var import_core128=require("@mantine/core"),import_core129=require("@medplum/core"),import_react65=require("react");var import_jsx_runtime103=require("react/jsx-runtime");function MedicationDialog(props){let{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react65.useState)(),handleSubmit=(0,import_react65.useCallback)(formData=>{let status=formData.status;onSubmit({...medication,resourceType:"MedicationRequest",status,intent:"order",encounter:encounter?(0,import_core129.createReference)(encounter):void 0,medicationCodeableConcept:code,subject:(0,import_core129.createReference)(patient)})},[patient,encounter,medication,code,onSubmit]);return(0,import_jsx_runtime103.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime103.jsxs)(import_core128.Stack,{h:275,children:[(0,import_jsx_runtime103.jsx)(CodeableConceptInput,{name:"request",path:"MedicationRequest.medication[x]","data-autofocus":!0,binding:"https://app.medplum.com/ValueSet/16d6f7b7-7eeb-4d0e-a83b-83be082aa10b",defaultValue:medication?.medicationCodeableConcept,onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime103.jsxs)(import_core128.Radio.Group,{mt:32,name:"status",label:"Request Status",required:!0,children:[(0,import_jsx_runtime103.jsx)(import_core128.Radio,{value:"active",label:"active",my:"xs"},"active"),(0,import_jsx_runtime103.jsx)(import_core128.Radio,{value:"stopped",label:"stopped",my:"xs"},"stopped")]}),(0,import_jsx_runtime103.jsx)(import_core128.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime103.jsx)(import_core128.Button,{type:"submit",children:"Save"})})]})})}var import_jsx_runtime104=require("react/jsx-runtime");function Medications(props){let medplum=a(),[medicationRequests,setMedicationRequests]=(0,import_react66.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react66.useState)(),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),handleSubmit=(0,import_react66.useCallback)(async medication=>{if(medication.id){let updatedMedication=await medplum.updateResource(medication);setMedicationRequests(medicationRequests.map(m2=>m2.id===updatedMedication.id?updatedMedication:m2))}else{let newMedication=await medplum.createResource(medication);setMedicationRequests([newMedication,...medicationRequests])}setEditMedication(void 0),close()},[medplum,medicationRequests,close]);return(0,import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment,{children:[(0,import_jsx_runtime104.jsxs)(import_core130.Group,{justify:"space-between",children:[(0,import_jsx_runtime104.jsx)(import_core130.Text,{fz:"md",fw:700,children:"Medications"}),(0,import_jsx_runtime104.jsx)(import_core130.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),medicationRequests.length>0?(0,import_jsx_runtime104.jsx)(import_core130.Box,{children:medicationRequests.map(request=>(0,import_jsx_runtime104.jsx)(ConceptBadge,{resource:request,onEdit:mr=>{setEditMedication(mr),open()}},request.id))}):(0,import_jsx_runtime104.jsx)(import_core130.Text,{children:"(none)"}),(0,import_jsx_runtime104.jsx)(import_core130.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime104.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}var import_core133=require("@mantine/core"),import_hooks4=require("@mantine/hooks");var import_react68=require("react");var import_core131=require("@mantine/core"),import_core132=require("@medplum/core"),import_react67=require("react");var import_jsx_runtime105=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react67.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react67.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react67.useCallback)(formData=>{onSubmit({...condition,resourceType:"Condition",subject:(0,import_core132.createReference)(patient),encounter:encounter?(0,import_core132.createReference)(encounter):void 0,code,clinicalStatus,onsetDateTime:formData.onsetDateTime?formData.onsetDateTime:void 0})},[patient,encounter,condition,code,clinicalStatus,onSubmit]);return(0,import_jsx_runtime105.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime105.jsxs)(import_core131.Stack,{children:[(0,import_jsx_runtime105.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:"http://hl7.org/fhir/ValueSet/condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime105.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:"http://hl7.org/fhir/ValueSet/Condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime105.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime105.jsx)(import_core131.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime105.jsx)(import_core131.Button,{type:"submit",children:"Save"})})]})},condition?.id)}var import_jsx_runtime106=require("react/jsx-runtime");function ProblemList(props){let medplum=a(),{patient,encounter}=props,[problems,setProblems]=(0,import_react68.useState)(props.problems),[editCondition,setEditCondition]=(0,import_react68.useState)(),[opened,{open,close}]=(0,import_hooks4.useDisclosure)(!1),handleSubmit=(0,import_react68.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([...problems,newCondition])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime106.jsxs)(import_jsx_runtime106.Fragment,{children:[(0,import_jsx_runtime106.jsxs)(import_core133.Group,{justify:"space-between",children:[(0,import_jsx_runtime106.jsx)(import_core133.Text,{fz:"md",fw:700,children:"Problem List"}),(0,import_jsx_runtime106.jsx)(import_core133.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),problems.length>0?(0,import_jsx_runtime106.jsx)(import_core133.Grid,{gutter:"xs",children:problems.map(problem=>(0,import_jsx_runtime106.jsxs)(import_react68.Fragment,{children:[(0,import_jsx_runtime106.jsx)(import_core133.Grid.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),(0,import_jsx_runtime106.jsx)(import_core133.Grid.Col,{span:10,children:(0,import_jsx_runtime106.jsx)(ConceptBadge,{resource:problem,onEdit:p=>{setEditCondition(p),open()}},problem.id)})]},problem.id))}):(0,import_jsx_runtime106.jsx)(import_core133.Text,{children:"(none)"}),(0,import_jsx_runtime106.jsx)(import_core133.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime106.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var import_core134=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core135=require("@medplum/core");var import_react69=require("react");var import_jsx_runtime107=require("react/jsx-runtime"),smokingStatusOptions={266919005:"Never smoked tobacco",266927001:"Tobacco smoking consumption unknown","428041000124106":"Occasional tobacco smoker","428061000124105":"Light tobacco smoker","428071000124103":"Heavy tobacco smoker",449868002:"Smokes tobacco daily",77176002:"Smoker",8517006:"Ex-smoker"};function SmokingStatus(props){let medplum=a(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=(0,import_react69.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react69.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core135.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_core135.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core135.createReference)(patient),encounter:encounter?(0,import_core135.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core135.SNOMED,version:import_core135.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsxs)(import_core134.Group,{justify:"space-between",children:[(0,import_jsx_runtime107.jsx)(import_core134.Text,{fz:"md",fw:700,children:"Smoking Status"}),(0,import_jsx_runtime107.jsx)(import_core134.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime107.jsx)(import_core134.Box,{children:(0,import_jsx_runtime107.jsx)(import_core134.Badge,{variant:"light",children:(0,import_jsx_runtime107.jsx)(CodeableConceptDisplay,{value:smokingStatus.valueCodeableConcept})})}):(0,import_jsx_runtime107.jsx)(import_core134.Text,{children:"(none)"}),(0,import_jsx_runtime107.jsx)(import_core134.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime107.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime107.jsxs)(import_core134.Stack,{children:[(0,import_jsx_runtime107.jsx)(import_core134.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime107.jsx)(import_core134.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime107.jsx)(import_core134.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime107.jsx)(import_core134.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core137=require("@mantine/core"),import_hooks6=require("@mantine/hooks");var import_react70=require("react");var import_core136=require("@medplum/core");function getObservationValue(observations,code){return observations.find(o=>o.code?.coding?.[0].code===code)?.valueQuantity}function getCompoundObservationValue(observations,code,innerCode){return observations.find(o=>o.code?.coding?.[0].code===code)?.component?.find(c=>c.code?.coding?.[0].code===innerCode)?.valueQuantity}function createObservation(patient,encounter,code,title,valueQuantity){if(isValidNumber(valueQuantity.value))return{...createBaseObservation(patient,encounter,code,title),valueQuantity}}function createCompoundObservation(patient,encounter,code,title,components){let component=components.filter(c=>isValidNumber(c.valueQuantity?.value));if(component.length!==0)return{...createBaseObservation(patient,encounter,code,title),component}}function createBaseObservation(patient,encounter,code,title){return{resourceType:"Observation",status:"preliminary",subject:(0,import_core136.createReference)(patient),encounter:encounter?(0,import_core136.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_core136.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core136.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime108=require("react/jsx-runtime"),LOINC_CODES={bloodPressure:{code:"85354-9",title:"Blood Pressure",unit:"mm[Hg]"},heartRate:{code:"8867-4",title:"Heart Rate",unit:"/min"},bodyTemperature:{code:"8310-5",title:"Body Temperature",unit:"Cel"},respiratoryRate:{code:"9279-1",title:"Respiratory Rate",unit:"/min"},height:{code:"8302-2",title:"height",unit:"cm"},weight:{code:"29463-7",title:"weight",unit:"kg"},bmi:{code:"39156-5",title:"BMI",unit:"kg/m2"},oxygen:{code:"2708-6",title:"Oxygen",unit:"%"},headCircumference:{code:"9843-4",title:"Head Circumference",unit:"cm"}},SYSTOLIC="8480-6",DIASTOLIC="8462-4";function Vitals(props){let medplum=a(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react70.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react70.useCallback)(formData=>{let newObservations=Object.entries(LOINC_CODES).map(([name,meta])=>name==="bloodPressure"?createCompoundObservation(patient,encounter,meta.code,meta.title,[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.diastolic),"mm[Hg]")}]):createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[name]),meta.unit))).filter(Boolean);Promise.all(newObservations.map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment,{children:[(0,import_jsx_runtime108.jsxs)(import_core137.Group,{justify:"space-between",children:[(0,import_jsx_runtime108.jsx)(import_core137.Text,{fz:"md",fw:700,children:"Vitals"}),(0,import_jsx_runtime108.jsx)(import_core137.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Grid,{children:[(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,SYSTOLIC)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,DIASTOLIC)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.heartRate.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bodyTemperature.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.respiratoryRate.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.height.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.weight.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bmi.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.oxygen.code)})}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),(0,import_jsx_runtime108.jsx)(import_core137.Grid.Col,{span:3,children:(0,import_jsx_runtime108.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.headCircumference.code)})})]}),(0,import_jsx_runtime108.jsx)(import_core137.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime108.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime108.jsxs)(import_core137.Stack,{children:[(0,import_jsx_runtime108.jsxs)(import_core137.Group,{grow:!0,children:[(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"diastolic",label:"BP Dias"})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Group,{grow:!0,children:[(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"heartRate",label:"HR"}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"bodyTemperature",label:"Temp"})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Group,{grow:!0,children:[(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"respiratoryRate",label:"RR"}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"height",label:"height"})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Group,{grow:!0,children:[(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"weight",label:"Wt"}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"bmi",label:"BMI"})]}),(0,import_jsx_runtime108.jsxs)(import_core137.Group,{grow:!0,children:[(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"oxygen",label:"O2"}),(0,import_jsx_runtime108.jsx)(import_core137.TextInput,{name:"headCircumference",label:"HC"})]}),(0,import_jsx_runtime108.jsx)(import_core137.Textarea,{name:"notes",label:"Notes"})]}),(0,import_jsx_runtime108.jsx)(import_core137.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime108.jsx)(import_core137.Button,{type:"submit",children:"Save"})})]})})]})}var import_jsx_runtime109=require("react/jsx-runtime");function PatientSummary(props){let medplum=a(),{patient:propsPatient,background,...rest}=props,[patient,setPatient]=(0,import_react71.useState)(),[allergies,setAllergies]=(0,import_react71.useState)(),[problems,setProblems]=(0,import_react71.useState)(),[smokingStatus,setSmokingStatus]=(0,import_react71.useState)(),[vitals,setVitals]=(0,import_react71.useState)(),[medicationRequest,setMedicationRequest]=(0,import_react71.useState)();return(0,import_react71.useEffect)(()=>{let id=(0,import_core139.resolveId)(propsPatient),ref=`Patient/${id}`,searchMeta={_count:100,_sort:"-_lastUpdated"};Promise.all([medplum.readResource("Patient",id),medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta})]).then(results=>{setPatient(results[0]),setAllergies(results[1]),setProblems(results[2]),setMedicationRequest(results[3]);let observations=results[4];setSmokingStatus(observations.find(obs=>obs.code?.coding?.[0].code==="72166-2")),setVitals(observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"))}).catch(console.error)},[medplum,propsPatient]),patient?(0,import_jsx_runtime109.jsxs)(import_core138.Card,{...rest,children:[(0,import_jsx_runtime109.jsx)(import_core138.Card.Section,{h:100,style:{background}}),(0,import_jsx_runtime109.jsx)(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),(0,import_jsx_runtime109.jsx)(import_core138.Text,{ta:"center",fz:"lg",fw:500,children:(0,import_core139.formatHumanName)(patient.name?.[0])}),(0,import_jsx_runtime109.jsxs)(import_core138.Text,{ta:"center",fz:"xs",color:"dimmed",children:[patient.birthDate," (",(0,import_core139.calculateAgeString)(patient.birthDate),")"]}),(0,import_jsx_runtime109.jsx)(import_core138.Paper,{withBorder:!0,p:"md",my:"md",children:(0,import_jsx_runtime109.jsxs)(import_core138.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsxs)(import_core138.Flex,{justify:"center",align:"center",direction:"column",gap:0,maw:"33%",children:[(0,import_jsx_runtime109.jsx)(IconUserSquare,{size:24,color:"gray"}),(0,import_jsx_runtime109.jsx)(import_core138.Text,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),(0,import_jsx_runtime109.jsxs)(import_core138.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime109.jsx)(IconStethoscope,{size:24,color:"gray"}),(0,import_jsx_runtime109.jsx)(import_core138.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),(0,import_jsx_runtime109.jsxs)(import_core138.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime109.jsx)(IconGenderFemale,{size:24,color:"gray"}),(0,import_jsx_runtime109.jsx)(import_core138.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),(0,import_jsx_runtime109.jsxs)(import_core138.Stack,{gap:"xs",children:[(0,import_jsx_runtime109.jsx)(import_core138.Anchor,{href:"#",children:"No upcoming appointments"}),(0,import_jsx_runtime109.jsx)(import_core138.Anchor,{href:"#",children:"No documented visits"}),(0,import_jsx_runtime109.jsx)(import_core138.Divider,{}),(0,import_jsx_runtime109.jsx)(Allergies,{patient,allergies}),(0,import_jsx_runtime109.jsx)(import_core138.Divider,{}),(0,import_jsx_runtime109.jsx)(ProblemList,{patient,problems}),(0,import_jsx_runtime109.jsx)(import_core138.Divider,{}),(0,import_jsx_runtime109.jsx)(Medications,{patient,medicationRequests:medicationRequest}),(0,import_jsx_runtime109.jsx)(import_core138.Divider,{}),(0,import_jsx_runtime109.jsx)(SmokingStatus,{patient,smokingStatus}),(0,import_jsx_runtime109.jsx)(import_core138.Divider,{}),(0,import_jsx_runtime109.jsx)(Vitals,{patient,vitals})]})]}):null}var import_core140=require("@medplum/core"),import_react72=require("react");var import_jsx_runtime110=require("react/jsx-runtime");function PatientTimeline(props){let loadTimelineResources=(0,import_react72.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("Communication",{subject:ref,_count}),medplum.search("Device",{patient:ref,_count}),medplum.search("DeviceRequest",{patient:ref,_count}),medplum.search("DiagnosticReport",{subject:ref,_count}),medplum.search("Media",{subject:ref,_count}),medplum.search("ServiceRequest",{subject:ref,_count}),medplum.search("Task",{subject:ref,_count})])},[]);return(0,import_jsx_runtime110.jsx)(ResourceTimeline,{value:props.patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core140.createReference)(resource),sender:(0,import_core140.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core140.createReference)(resource),operator:(0,import_core140.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core141=require("@mantine/core"),import_core142=require("@medplum/core");var import_react73=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing",bottomActions:"PlanDefinitionBuilder_bottomActions"};var import_jsx_runtime111=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=a(),defaultValue2=pe(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react73.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react73.useState)(),[hoverKey,setHoverKey]=(0,import_react73.useState)(),[value,setValue]=(0,import_react73.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react73.useRef)();if(valueRef.current=value,(0,import_react73.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react73.useEffect)(()=>(setValue(ensurePlanDefinitionKeys(defaultValue2??{resourceType:"PlanDefinition",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]),!schemaLoaded||!value)return null;function changeProperty(property,newValue){setValue({...valueRef.current,[property]:newValue})}return(0,import_jsx_runtime111.jsx)("div",{children:(0,import_jsx_runtime111.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime111.jsx)(import_core141.TextInput,{label:"Plan Title",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime111.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x2=>changeProperty("action",x2)}),(0,import_jsx_runtime111.jsx)(import_core141.Button,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react73.useRef)();actionsRef.current=props.actions;function changeAction(changedAction){props.onChange(actionsRef.current.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...actionsRef.current,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(actionsRef.current.filter(i=>i!==removedAction))}return(0,import_jsx_runtime111.jsxs)("div",{className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime111.jsx)("div",{children:(0,import_jsx_runtime111.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_runtime111.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime111.jsx)(import_core141.Anchor,{href:"#",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.editing]:editing,[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime111.jsxs)("div",{"data-testid":action.id,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[editing?(0,import_jsx_runtime111.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove}):(0,import_jsx_runtime111.jsx)(ActionDisplay,{action,actionType}),(0,import_jsx_runtime111.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime111.jsx)(import_core141.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove()},children:"Remove"})})]})}var timingProperty={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(t=>({code:t}))};function ActionDisplay(props){let{action,actionType}=props,[propertyValue,propertyType]=getActionTiming(action);return(0,import_jsx_runtime111.jsxs)("div",{children:[(0,import_jsx_runtime111.jsxs)("div",{children:[action.title||"Untitled"," ",actionType&&`(${actionType})`]}),action.definitionCanonical&&(0,import_jsx_runtime111.jsx)("div",{children:(0,import_jsx_runtime111.jsx)(ReferenceDisplay,{value:{reference:action.definitionCanonical}})}),propertyValue&&(0,import_jsx_runtime111.jsx)("div",{children:(0,import_jsx_runtime111.jsx)(ResourcePropertyDisplay,{property:timingProperty,propertyType,value:propertyValue})})]})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react73.useState)(props.actionType);function changeProperty(property,value){props.onChange({...action,[property]:value})}return(0,import_jsx_runtime111.jsxs)(import_core141.Stack,{gap:"xl",children:[(0,import_jsx_runtime111.jsx)(import_core141.TextInput,{name:`actionTitle-${action.id}`,label:"Title",defaultValue:action.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime111.jsx)(import_core141.TextInput,{name:`actionDescription-${action.id}`,label:"Description",defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)}),(0,import_jsx_runtime111.jsx)(import_core141.NativeSelect,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${action.id}`,defaultValue:actionType,onChange:e=>setActionType(e.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),action.action&&action.action.length>0&&(0,import_jsx_runtime111.jsx)(ActionArrayBuilder,{actions:action.action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:x2=>changeProperty("action",x2)}),(()=>{switch(actionType){case"appointment":return(0,import_jsx_runtime111.jsx)(ActionResourceTypeBuilder,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action,onChange:props.onChange});case"lab":return(0,import_jsx_runtime111.jsx)(ActionResourceTypeBuilder,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action,onChange:props.onChange});case"questionnaire":return(0,import_jsx_runtime111.jsx)(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action,onChange:props.onChange});case"task":return(0,import_jsx_runtime111.jsx)(ActionResourceTypeBuilder,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action,onChange:props.onChange});default:return null}})(),(0,import_jsx_runtime111.jsx)(FormSection,{title:"Timing",description:"When the action should take place.",children:(0,import_jsx_runtime111.jsx)(ActionTimingInput,{name:"timing-"+action.id,action,onChange:props.onChange})})]})}function ActionResourceTypeBuilder(props){let{id,definitionCanonical}=props.action,reference=definitionCanonical?.startsWith(props.resourceType+"/")?{reference:definitionCanonical}:void 0;return(0,import_jsx_runtime111.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core142.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function ActionTimingInput(props){let value=props.action,key="timing",[propertyValue,propertyType]=getActionTiming(value);return(0,import_jsx_runtime111.jsx)(ResourcePropertyInput,{property:timingProperty,name:"timing[x]",path:"PlanDefinition.timing[x]",defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{props.onChange(setPropertyValue(value,key,propName??key,timingProperty,newValue))},outcome:void 0})}function getInitialActionType(action){if(action.definitionCanonical?.startsWith("Schedule"))return"appointment";if(action.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(action.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function getActionTiming(action){return getValueAndType({type:"PlanDefinitionAction",value:action},"timing")}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=parseInt(existing.substring(3),10);isNaN(existingNum)||(nextId=Math.max(nextId,existingNum+1))}return existing}return"id-"+nextId++}function ensurePlanDefinitionKeys(planDefinition){return{...planDefinition,action:ensurePlanDefinitionActionKeys(planDefinition.action)}}function ensurePlanDefinitionActionKeys(actions){if(actions)return actions.map(action=>({...action,id:generateId(action.id),action:ensurePlanDefinitionActionKeys(action.action)}))}var import_core146=require("@mantine/core"),import_core147=require("@medplum/core");var import_react76=require("react");var import_core144=require("@mantine/core"),import_core145=require("@medplum/core"),import_react75=require("react");var import_core143=require("@medplum/core"),QuestionnaireItemType=(QuestionnaireItemType2=>(QuestionnaireItemType2.group="group",QuestionnaireItemType2.display="display",QuestionnaireItemType2.question="question",QuestionnaireItemType2.boolean="boolean",QuestionnaireItemType2.decimal="decimal",QuestionnaireItemType2.integer="integer",QuestionnaireItemType2.date="date",QuestionnaireItemType2.dateTime="dateTime",QuestionnaireItemType2.time="time",QuestionnaireItemType2.string="string",QuestionnaireItemType2.text="text",QuestionnaireItemType2.url="url",QuestionnaireItemType2.choice="choice",QuestionnaireItemType2.openChoice="open-choice",QuestionnaireItemType2.attachment="attachment",QuestionnaireItemType2.reference="reference",QuestionnaireItemType2.quantity="quantity",QuestionnaireItemType2))(QuestionnaireItemType||{});function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,responseItems){if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(responseItems,enableWhen.question);if(enableWhen.operator==="exists"&&!enableWhen.answerBoolean&&!actualAnswers?.length){if(enableBehavior==="any")return!0;continue}let{anyMatch,allMatch}=checkAnswers(enableWhen,actualAnswers,enableBehavior);if(enableBehavior==="any"&&anyMatch)return!0;if(enableBehavior==="all"&&!allMatch)return!1}return enableBehavior!=="any"}function getNewMultiSelectValues(selected,propertyName,item){return selected.map(o=>{let option=item.answerOption?.find(option2=>(0,import_core143.formatCoding)(option2.valueCoding)===o||option2[propertyName]===o),optionValue=(0,import_core143.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");return{[propertyName]:optionValue?.value}})}function getByLinkId(responseItems,linkId){if(responseItems)for(let response of responseItems){if(response.linkId===linkId)return response.answer;if(response.item){let nestedAnswer=getByLinkId(response.item,linkId);if(nestedAnswer)return nestedAnswer}}}function evaluateMatch(actualAnswer,expectedAnswer,operator){if(operator==="exists")return!!actualAnswer===expectedAnswer.value;if(actualAnswer){let fhirPathOperator=operator==="="||operator==="!="?operator?.replace("=","~"):operator,[{value}]=(0,import_core143.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=(0,import_core143.getTypedPropertyValue)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer[x]"),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=(0,import_core143.getTypedPropertyValue)({type:"QuestionnaireResponseItemAnswer",value:actualAnswerValue},"value[x]"),{operator}=enableWhen;if(evaluateMatch(actualAnswer,expectedAnswer,operator)?anyMatch=!0:allMatch=!1,enableBehavior==="any"&&anyMatch)break}return{anyMatch,allMatch}}function getQuestionnaireItemReferenceTargetTypes(item){let extension=(0,import_core143.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(extension){if(extension.valueCode!==void 0)return[extension.valueCode];if(extension.valueCodeableConcept)return extension.valueCodeableConcept?.coding?.map(c=>c.code)}}function setQuestionnaireItemReferenceTargetTypes(item,targetTypes){let result=(0,import_core143.deepClone)(item),extension=(0,import_core143.getExtension)(result,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!targetTypes||targetTypes.length===0?(extension&&(result.extension=result.extension?.filter(e=>e!==extension)),result):(extension||(result.extension||(result.extension=[]),extension={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},result.extension.push(extension)),targetTypes.length===1?(extension.valueCode=targetTypes[0],delete extension.valueCodeableConcept):(extension.valueCodeableConcept={coding:targetTypes.map(t=>({code:t}))},delete extension.valueCode),result)}function getQuestionnaireItemReferenceFilter(item,subject,encounter){let extension=(0,import_core143.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter");if(!extension?.valueString)return;let filter=extension.valueString;subject?.reference&&(filter=filter.replaceAll("$subj",subject.reference)),encounter?.reference&&(filter=filter.replaceAll("$encounter",encounter.reference));let result={},parts=filter.split("&");for(let part of parts){let[key,value]=(0,import_core143.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:(0,import_core143.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item),status:"in-progress"}}function buildInitialResponseItems(items){return items?.map(buildInitialResponseItem)??[]}function buildInitialResponseItem(item){return{id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item),answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function formatReferenceString(typedValue){return typedValue.value.display||typedValue.value.reference||(0,import_core143.stringify)(typedValue.value)}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core143.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}var import_react74=require("react"),QuestionnaireFormContext=(0,import_react74.createContext)({});var import_jsx_runtime112=require("react/jsx-runtime");function QuestionnaireFormItem(props){let context=(0,import_react75.useContext)(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a2,idx)=>idx===props.index?newResponseAnswer:a2)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value");switch(type){case"display":return(0,import_jsx_runtime112.jsx)("p",{children:props.item.text},props.item.linkId);case"boolean":return(0,import_jsx_runtime112.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime112.jsx)(import_core144.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);case"decimal":return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{type:"number",step:"any",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{type:"number",step:1,id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{type:"date",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return(0,import_jsx_runtime112.jsx)(DateTimeInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{type:"time",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return(0,import_jsx_runtime112.jsx)(import_core144.Textarea,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return(0,import_jsx_runtime112.jsx)(import_core144.Group,{py:4,children:(0,import_jsx_runtime112.jsx)(AttachmentInput,{name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return(0,import_jsx_runtime112.jsx)(ReferenceInput,{name,required:item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});case"quantity":return(0,import_jsx_runtime112.jsx)(QuantityInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});case"choice":case"open-choice":return isDropDownChoice(item)&&!item.answerValueSet?(0,import_jsx_runtime112.jsx)(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):(0,import_jsx_runtime112.jsx)(QuestionnaireChoiceSetInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});default:return null}}function QuestionnaireChoiceDropDownInput(props){let{name,item,initial,response}=props;if(!item.answerOption?.length)return(0,import_jsx_runtime112.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),data2=[""];for(let option of item.answerOption){let optionValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");data2.push(typedValueToString(optionValue))}let defaultValue2=getCurrentAnswer(response)??initialValue;if(item.repeats){let{propertyName,data:data3}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime112.jsx)(import_core144.MultiSelect,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[typedValueToString(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return(0,import_jsx_runtime112.jsx)(import_core144.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core145.capitalize)(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core145.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?(0,import_jsx_runtime112.jsx)(NoAnswerDisplay,{}):item.answerValueSet?(0,import_jsx_runtime112.jsx)(CodingInput,{name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code}),creatable:item.type==="open-choice"}):(0,import_jsx_runtime112.jsx)(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core145.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),options=[],defaultValue2;if(item.answerOption)for(let i=0;i<item.answerOption.length;i++){let option=item.answerOption[i],optionName=`${name}-option-${i}`,optionValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");optionValue?.value&&(initialValue&&(0,import_core145.stringify)(optionValue)===(0,import_core145.stringify)(initialValue)&&(defaultValue2=optionName),options.push([optionName,optionValue]))}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);return(0,import_jsx_runtime112.jsx)(import_core144.Radio.Group,{name,value:answerLinkId??defaultValue2,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core145.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>(0,import_jsx_runtime112.jsx)(import_core144.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime112.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return(0,import_jsx_runtime112.jsx)(import_core144.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getItemValue(answer){return(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswer",value:answer},"value")}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a2=>getItemValue(a2)).map(type=>(0,import_core145.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core145.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function typedValueToString(typedValue){if(typedValue)return typedValue.type==="CodeableConcept"?(0,import_core145.formatCodeableConcept)(typedValue.value):typedValue.type==="Coding"?(0,import_core145.formatCoding)(typedValue.value):typedValue.type==="Reference"?formatReferenceString(typedValue):typedValue.value.toString()}function isDropDownChoice(item){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core145.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(a2=>({value:getValueAndLabel(a2,propertyName),label:getValueAndLabel(a2,propertyName)}));return{propertyName,data:data2}}function getValueAndLabel(option,propertyName){return(0,import_core145.formatCoding)(option.valueCoding)||option[propertyName]?.toString()}var QuestionnaireBuilder_default={section:"QuestionnaireBuilder_section",hovering:"QuestionnaireBuilder_hovering",editing:"QuestionnaireBuilder_editing",questionBody:"QuestionnaireBuilder_questionBody",topActions:"QuestionnaireBuilder_topActions",bottomActions:"QuestionnaireBuilder_bottomActions",movementActions:"QuestionnaireBuilder_movementActions",movementIcons:"QuestionnaireBuilder_movementIcons",columnAlignment:"QuestionnaireBuilder_columnAlignment",linkIdInput:"QuestionnaireBuilder_linkIdInput",typeSelect:"QuestionnaireBuilder_typeSelect"};var import_jsx_runtime113=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=a(),defaultValue2=pe(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react76.useState)(!1),[value,setValue]=(0,import_react76.useState)(),[selectedKey,setSelectedKey]=(0,import_react76.useState)(),[hoverKey,setHoverKey]=(0,import_react76.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react76.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react76.useEffect)(()=>(setValue(ensureQuestionnaireKeys(defaultValue2??{resourceType:"Questionnaire",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]);let handleChange=(questionnaire,disableSubmit)=>{setValue(questionnaire),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire)};return!schemaLoaded||!value?null:(0,import_jsx_runtime113.jsx)("div",{children:(0,import_jsx_runtime113.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime113.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime113.jsx)(import_core146.Button,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core147.isResource)(props.item),isContainer=isResource2||item.type==="group",linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react76.useRef)();itemRef.current=props.item;function onClick(e){killEvent(e),props.setSelectedKey(props.item.id)}function onHover(e){killEvent(e),props.setHoverKey(props.item.id)}function changeItem(changedItem){let curr=itemRef.current;props.onChange({...curr,item:curr.item?.map(i=>i.id===changedItem.id?changedItem:i)})}function addItem(addedItem,disableSubmit){props.onChange({...props.item,item:[...props.item.item??[],addedItem]},disableSubmit)}function removeItem(removedItem){props.onChange({...props.item,item:props.item.item?.filter(i=>i!==removedItem)})}function changeProperty(property,value){props.onChange({...itemRef.current,[property]:value})}function updateItem(updatedItem){props.onChange({...props.item,...updatedItem})}function toggleRepeatable(item2){props.onChange({...props.item,item:props.item.item?.map(i=>i===item2?{...i,repeats:!i.repeats}:i)})}function moveItem(itemIndex,delta){let updatedItems=reorderItems(props.item.item,itemIndex,delta);props.onChange({...props.item,item:updatedItems})}let className=clsx_default(QuestionnaireBuilder_default.section,{[QuestionnaireBuilder_default.editing]:editing,[QuestionnaireBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime113.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime113.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[isResource2&&(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime113.jsx)(import_core146.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime113.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime113.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[resource.title&&(0,import_jsx_runtime113.jsx)(import_core146.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime113.jsx)("div",{children:item.text}),!isContainer&&(0,import_jsx_runtime113.jsx)(QuestionnaireFormItem,{item,index:0,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime113.jsx)("div",{children:(0,import_jsx_runtime113.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_runtime113.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime113.jsx)(import_core146.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_runtime113.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime113.jsx)(import_core146.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime113.jsxs)(import_core146.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime113.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime113.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime113.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core147.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime113.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime113.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime113.jsxs)(import_core146.Box,{display:"flex",children:[(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime113.jsx)(import_core146.Space,{w:"lg"}),(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime113.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime113.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime113.jsx)("div",{children:(0,import_jsx_runtime113.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_runtime113.jsx)("div",{children:(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:props.options.filter(o=>o.id!==option.id)})},children:"Remove"})})]},option.id)})})}function ReferenceProfiles(props){let targetTypes=getQuestionnaireItemReferenceTargetTypes(props.item)??[];return(0,import_jsx_runtime113.jsxs)(import_jsx_runtime113.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime113.jsxs)(import_core146.Group,{children:[(0,import_jsx_runtime113.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime113.jsx)(import_core146.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId3=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId3(){return"id-"+nextId3++}function ensureQuestionnaireKeys(questionnaire){return{...questionnaire,id:questionnaire.id||generateId3(),item:ensureQuestionnaireItemKeys(questionnaire.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId3=Math.max(nextId3,parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId3(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId3()}))}function createPage(){return{id:generateId3(),linkId:generateLinkId("s"),type:"group",text:"New Page",extension:[{url:"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",valueCodeableConcept:{coding:[{system:"http://hl7.org/fhir/questionnaire-item-control",code:"page"}]}}]}}function reorderItems(items,itemIndex,delta){let currentItems=items??[],newIndex=itemIndex+delta;if(newIndex<0||newIndex>=currentItems.length)return currentItems;let updatedItems=[...currentItems];return[updatedItems[itemIndex],updatedItems[newIndex]]=[updatedItems[newIndex],updatedItems[itemIndex]],updatedItems}var import_core151=require("@mantine/core"),import_core152=require("@medplum/core");var import_react79=require("react");var import_core150=require("@mantine/core");var import_core148=require("@mantine/core"),import_react77=require("react");var import_jsx_runtime114=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react77.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return(0,import_jsx_runtime114.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!=="choice"&&item.type!=="open-choice";return item.type==="boolean"?(0,import_jsx_runtime114.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime114.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_2,index)=>(0,import_jsx_runtime114.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type==="choice"||item.type==="open-choice")return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core149=require("@mantine/core"),import_react78=require("react");var import_jsx_runtime115=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react78.useState)(props.response);if(responses.length===0)return null;function handleRepeatableGroup(newResponseItems,index){let newResponses=responses.map((responses2,idx)=>idx===index?newResponseItems[0]:responses2);setResponses(newResponses),props.onChange(newResponses)}function insertNewGroup(){let newResponse=buildInitialResponseItem(props.item);setResponses([...responses,newResponse])}return(0,import_jsx_runtime115.jsxs)(import_jsx_runtime115.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime115.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime115.jsx)(import_core149.Anchor,{onClick:insertNewGroup,children:`Add Group: ${props.item.text}`})]})}function QuestionnaireGroup(props){let{response,checkForQuestionEnabled,onChange}=props;function onSetGroup(newResponseItem){let mergedResponse=response.item?.map(current=>newResponseItem.find(newResponse2=>newResponse2.id===current.id)??current)?.concat(newResponseItem.slice(1)),groupResponse={...response,item:mergedResponse};onChange([groupResponse])}return props.checkForQuestionEnabled(props.item)?(0,import_jsx_runtime115.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime115.jsx)(import_core149.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime115.jsx)(import_core149.Stack,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?(0,import_jsx_runtime115.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime115.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime115.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime116=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type==="group"?(0,import_jsx_runtime116.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime116.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime116.jsx)(import_core150.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime116.jsxs)(import_jsx_runtime116.Fragment,{children:[renderPages&&(0,import_jsx_runtime116.jsx)(import_core150.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime116.jsx)(import_core150.Stack,{children:form}),(0,import_jsx_runtime116.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep,prevStep,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.activePage>0,showNextButton=props.activePage<props.numberOfPages-1,showSubmitButton=props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime116.jsxs)(import_core150.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime116.jsx)(import_core150.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime116.jsx)(import_core150.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime116.jsx)(import_core150.Button,{type:"submit",children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime117=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=a(),source=medplum.getProfile(),[schemaLoaded,setSchemaLoaded]=(0,import_react79.useState)(!1),questionnaire=pe(props.questionnaire),[response,setResponse]=(0,import_react79.useState)(),[activePage,setActivePage]=(0,import_react79.useState)(0);(0,import_react79.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>medplum.requestSchema("QuestionnaireResponse")).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react79.useEffect)(()=>{setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)},[questionnaire]);function setItems(newResponseItems){let currentItems=response?.item??[],newResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems])};setResponse(newResponse)}function checkForQuestionEnabled(item){return isQuestionEnabled(item,response?.item??[])}if(!schemaLoaded||!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime117.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime117.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>{props.onSubmit&&response&&props.onSubmit({...response,questionnaire:(0,import_core152.getReferenceString)(questionnaire),subject:props.subject,source:(0,import_core152.createReference)(source),authored:new Date().toISOString(),status:"completed"})},children:[questionnaire.title&&(0,import_jsx_runtime117.jsx)(import_core151.Title,{children:questionnaire.title}),(0,import_jsx_runtime117.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:numberOfPages>1,activePage,numberOfPages,submitButtonText:props.submitButtonText,checkForQuestionEnabled,nextStep,prevStep})]})})}function mergeIndividualItems(prevItem,newItem){let mergedNestedItems=mergeItems(prevItem.item??[],newItem.item??[]);return{...newItem,item:mergedNestedItems.length>0?mergedNestedItems:void 0,answer:newItem.answer&&newItem.answer.length>0?newItem.answer:prevItem.answer}}function mergeItems(prevItems,newItems){let result=[],usedIds=new Set;for(let prevItem of prevItems){let itemId=prevItem.id,newItem=newItems.find(item=>item.id===itemId);newItem?(result.push(mergeIndividualItems(prevItem,newItem)),usedIds.add(newItem.id)):result.push(prevItem)}for(let newItem of newItems)usedIds.has(newItem.id)||result.push(newItem);return result}var import_core153=require("@mantine/core"),import_core154=require("@medplum/core");var import_react80=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime118=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_react80.useState)([]),[groupId,setGroupId]=(0,import_react80.useState)(1),[intervalId,setIntervalId]=(0,import_react80.useState)(1);return(0,import_react80.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime118.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime118.jsx)(import_core153.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime118.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime118.jsx)(import_core153.Group,{justify:"flex-end",children:(0,import_jsx_runtime118.jsx)(import_core153.Button,{type:"submit",children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g2=>g2.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g2=>g2.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g2=>g2.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime118.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime118.jsxs)(import_core153.Stack,{gap:"lg",children:[(0,import_jsx_runtime118.jsx)(import_core153.Group,{justify:"flex-end",children:(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime118.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime118.jsx)(import_core153.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime118.jsxs)(import_core153.Stack,{gap:"xs",children:[(0,import_jsx_runtime118.jsxs)(import_core153.Group,{children:[(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsx)(import_core153.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_runtime118.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime118.jsx)(RangeInput,{onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props;intervalGroup.filters.age||(intervalGroup.filters.age={});for(let key of["low","high"])intervalGroup.filters.age[key]?.unit||(intervalGroup.filters.age[key]={...intervalGroup.filters.age[key],unit:"years",system:"http://unitsofmeasure.org"});return(0,import_jsx_runtime118.jsxs)(import_core153.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime118.jsx)(import_core153.Group,{children:(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsxs)(import_core153.Group,{gap:"xs",children:[(0,import_jsx_runtime118.jsx)(import_core153.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime118.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime118.jsx)(RangeInput,{name:`age-${intervalGroup.id}`,defaultValue:intervalGroup.filters.age,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime118.jsx)(import_core153.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_runtime118.jsx)(import_core153.NativeSelect,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f2=>[f2,interval[f2]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core154.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core154.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_core154.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_core155=require("@mantine/core"),import_core156=require("@medplum/core");var import_react81=require("react");var import_jsx_runtime119=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=a(),requestGroup=pe(props.value),[startedLoading,setStartedLoading]=(0,import_react81.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react81.useState)();if((0,import_react81.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_runtime119.jsx)(import_core155.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_runtime119.jsxs)(import_react81.Fragment,{children:[(0,import_jsx_runtime119.jsx)(import_core155.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime119.jsx)(IconCheckbox,{}):(0,import_jsx_runtime119.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime119.jsxs)(import_core155.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime119.jsx)(import_core155.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime119.jsx)("div",{children:action.description}),(0,import_jsx_runtime119.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime119.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core156.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime119.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime119.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime119.jsxs)(import_core155.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime119.jsx)(import_core155.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime119.jsx)(import_core155.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_core156.getReferenceString)(entry.resource))return entry.resource}}var import_react82=require("react");var import_core157=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N2=orig.length,M2=rev.length,MAX=N2+M2+1,size=1+2*MAX,middle=size/2|0,diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k2=-d;k2<=d;k2+=2){let kmiddle=middle+k2,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k2===-d||k2!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k2,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N2&&j<M2&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N2&&j>=M2)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_core157.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a2,b2)=>a2.meta.lastUpdated.localeCompare(b2.meta.lastUpdated)),table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k2=0;k2<revision.revised.lines.length;k2++)table.splice(position+k2,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k2],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime120=require("react/jsx-runtime");function ResourceBlame(props){let medplum=a(),[value,setValue]=(0,import_react82.useState)(props.history);if((0,import_react82.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_runtime120.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime120.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime120.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime120.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime120.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime120.jsxs)(import_jsx_runtime120.Fragment,{children:[(0,import_jsx_runtime120.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime120.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime120.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime120.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime120.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime120.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime120.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core158=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime121=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_core158.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core158.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime121.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime121.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment,{children:["...",(0,import_jsx_runtime121.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime121.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
72
- `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime121.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
73
- `)}),"...",(0,import_jsx_runtime121.jsx)("br",{})]})}var import_core159=require("@mantine/core"),import_core160=require("@medplum/core");var import_react83=require("react");var import_jsx_runtime122=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=a(),defaultValue2=pe(props.defaultValue),[schemaLoaded,setSchemaLoaded]=(0,import_react83.useState)(),[value,setValue]=(0,import_react83.useState)();return(0,import_react83.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core160.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(profile.name);let modifiedDefaultValue=(0,import_core160.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else{let schemaName=props.schemaName??defaultValue2?.resourceType;medplum.requestSchema(schemaName).then(()=>{setValue(defaultValue2),setSchemaLoaded(schemaName)}).catch(console.log)}},[medplum,defaultValue2,props.schemaName,props.profileUrl]),!schemaLoaded||!value?(0,import_jsx_runtime122.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime122.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime122.jsxs)(import_core159.Stack,{mb:"xl",children:[(0,import_jsx_runtime122.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime122.jsx)(import_core159.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime122.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime122.jsx)(import_core159.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime122.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:schemaLoaded,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl}),(0,import_jsx_runtime122.jsxs)(import_core159.Group,{justify:"flex-end",mt:"xl",children:[(0,import_jsx_runtime122.jsx)(import_core159.Button,{type:"submit",children:"OK"}),props.onDelete&&(0,import_jsx_runtime122.jsx)(import_core159.Button,{variant:"outline",color:"red",type:"button",onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})}var import_core161=require("@mantine/core"),import_core162=require("@medplum/core");var import_react84=require("react");var import_jsx_runtime123=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=a(),[value,setValue]=(0,import_react84.useState)(props.history);return(0,import_react84.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_runtime123.jsxs)(import_core161.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime123.jsx)(import_core161.Table.Thead,{children:(0,import_jsx_runtime123.jsxs)(import_core161.Table.Tr,{children:[(0,import_jsx_runtime123.jsx)(import_core161.Table.Th,{children:"Author"}),(0,import_jsx_runtime123.jsx)(import_core161.Table.Th,{children:"Date"}),(0,import_jsx_runtime123.jsx)(import_core161.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime123.jsx)(import_core161.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime123.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime123.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime123.jsxs)(import_core161.Table.Tr,{children:[(0,import_jsx_runtime123.jsx)(import_core161.Table.Td,{children:(0,import_jsx_runtime123.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime123.jsx)(import_core161.Table.Td,{children:(0,import_core162.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime123.jsx)(import_core161.Table.Td,{children:(0,import_jsx_runtime123.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime123.jsx)(import_core161.Table.Tr,{children:(0,import_jsx_runtime123.jsx)(import_core161.Table.Td,{colSpan:3,children:(0,import_core162.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core163=require("@mantine/core"),import_core164=require("@medplum/core");var import_react85=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime124=require("react/jsx-runtime");function Scheduler(props){let schedule=pe(props.schedule),questionnaire=pe(props.questionnaire),[month,setMonth]=(0,import_react85.useState)(getStartMonth()),[date,setDate]=(0,import_react85.useState)(),[slot,setSlot]=(0,import_react85.useState)(),[response,setResponse]=(0,import_react85.useState)(),[slots]=Ee("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core164.isReference)(props.schedule)?props.schedule.reference:(0,import_core164.getReferenceString)(props.schedule)],["start","gt"+getStart2(month)],["start","lt"+getEnd2(month)]]));if(!schedule||!slots||!questionnaire)return null;let actor=schedule.actor?.[0];return(0,import_jsx_runtime124.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime124.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime124.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime124.jsx)(import_core163.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime124.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime124.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime124.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime124.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime124.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime124.jsxs)("div",{children:[(0,import_jsx_runtime124.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime124.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime124.jsxs)("div",{children:[(0,import_jsx_runtime124.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime124.jsx)(import_core163.Stack,{children:slots.map(s=>{let slotStart=new Date(s.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()<date.getTime()+24*3600*1e3&&(0,import_jsx_runtime124.jsx)("div",{children:(0,import_jsx_runtime124.jsx)(import_core163.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime124.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime124.jsxs)("div",{children:[(0,import_jsx_runtime124.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime124.jsx)("p",{children:"Check your email for a calendar invite."})]})]})]})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+31*24*60*60*1e3)}function formatSlotInstant(time){let date=new Date(Math.max(Date.now(),time));return date.setHours(0,0,0,0),date.toISOString()}function formatTime(date){return date.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var import_core165=require("@medplum/core");var import_jsx_runtime125=require("react/jsx-runtime");function ServiceRequestTimeline(props){return(0,import_jsx_runtime125.jsx)(ResourceTimeline,{value:props.serviceRequest,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("ServiceRequest",id),medplum.search("Communication",{"based-on":ref,_count}),medplum.search("DiagnosticReport",{"based-on":ref,_count}),medplum.search("Media",{"based-on":ref,_count}),medplum.search("DocumentReference",{related:ref,_count}),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count})])},createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",basedOn:[(0,import_core165.createReference)(resource)],subject:resource.subject,sender:(0,import_core165.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core165.createReference)(resource)],subject:resource.subject,operator:(0,import_core165.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core166=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core167=require("@medplum/core");var import_jsx_runtime126=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=a(),{client,patient,encounter,children,...rest}=props;function launchApp(){medplum.createResource({resourceType:"SmartAppLaunch",patient,encounter}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",medplum.getBaseUrl()+"fhir/R4"),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core167.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime126.jsx)(import_core166.Anchor,{onClick:()=>launchApp(),...rest,children})}var import_core172=require("@medplum/core");var import_react89=require("react");var import_core168=require("@mantine/core"),import_core169=require("@medplum/core");var import_react86=require("react");var import_jsx_runtime127=require("react/jsx-runtime");function NewProjectForm(props){let medplum=a(),[outcome,setOutcome]=(0,import_react86.useState)();return(0,import_jsx_runtime127.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core169.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime127.jsxs)(import_core168.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime127.jsx)(Logo,{size:32}),(0,import_jsx_runtime127.jsx)(import_core168.Title,{children:"Create project"})]}),(0,import_jsx_runtime127.jsxs)(import_core168.Stack,{gap:"xl",children:[(0,import_jsx_runtime127.jsx)(import_core168.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime127.jsxs)(import_core168.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime127.jsx)(import_core168.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime127.jsx)(import_core168.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime127.jsx)(import_core168.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime127.jsx)(import_core168.Button,{type:"submit",children:"Create project"})})]})}var import_core170=require("@mantine/core"),import_core171=require("@medplum/core");var import_react88=require("react");var import_react87=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_runtime128=require("react/jsx-runtime");function GoogleButton(props){let medplum=a(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react87.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react87.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react87.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react87.useState)(!1);return(0,import_react87.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initialized||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),setInitialized(!0)),parentRef.current&&!buttonRendered&&(google.accounts.id.renderButton(parentRef.current,{}),setButtonRendered(!0))},[medplum,googleClientId,initialized,scriptLoaded,parentRef,buttonRendered,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime128.jsx)("div",{ref:parentRef}):null}function getGoogleClientId(clientId){if(clientId)return clientId;if(typeof window<"u"){let origin=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime129=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=a(),[outcome,setOutcome]=(0,import_react88.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react88.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime129.jsxs)(Form,{onSubmit:async formData=>{try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core171.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime129.jsx)(import_core170.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime129.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime129.jsxs)(import_jsx_runtime129.Fragment,{children:[(0,import_jsx_runtime129.jsx)(import_core170.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime129.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_core171.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime129.jsx)(import_core170.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime129.jsxs)(import_core170.Stack,{gap:"xl",children:[(0,import_jsx_runtime129.jsx)(import_core170.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime129.jsx)(import_core170.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime129.jsx)(import_core170.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime129.jsx)(import_core170.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime129.jsxs)(import_core170.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime129.jsx)(import_core170.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime129.jsx)(import_core170.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime129.jsxs)(import_core170.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime129.jsx)(import_core170.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime129.jsx)(import_core170.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime129.jsxs)(import_core170.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime129.jsx)(import_core170.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime129.jsx)(import_core170.Button,{type:"submit",children:"Create account"})]})]})}var import_jsx_runtime130=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=a(),[login,setLogin]=(0,import_react89.useState)(),[outcome,setOutcome]=(0,import_react89.useState)();(0,import_react89.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core172.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code?medplum.processCode(response.code).then(()=>onSuccess()).catch(console.log):response.login&&setLogin(response.login)}return(0,import_jsx_runtime130.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime130.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime130.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime130.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications7=require("@mantine/notifications"),import_core180=require("@medplum/core");var import_react93=require("react");var import_core173=require("@mantine/core"),import_core174=require("@medplum/core");var import_react90=require("react");var import_jsx_runtime131=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react90.useState)();return email?(0,import_jsx_runtime131.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime131.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=a(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react90.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react90.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),window.location.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react90.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_react90.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core174.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime131.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime131.jsx)(import_core173.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime131.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime131.jsxs)(import_jsx_runtime131.Fragment,{children:[(0,import_jsx_runtime131.jsx)(import_core173.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime131.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime131.jsx)(import_core173.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime131.jsx)(import_core173.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime131.jsxs)(import_core173.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime131.jsx)("div",{children:onRegister&&(0,import_jsx_runtime131.jsx)(import_core173.Anchor,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime131.jsx)(import_core173.Button,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=a(),[outcome,setOutcome]=(0,import_react90.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react90.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core174.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime131.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime131.jsx)(import_core173.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime131.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime131.jsx)(import_core173.Stack,{gap:"xl",children:(0,import_jsx_runtime131.jsx)(import_core173.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime131.jsxs)(import_core173.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime131.jsx)(import_core173.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime131.jsx)(import_core173.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime131.jsx)(import_core173.Button,{type:"submit",children:"Sign in"})]})]})}var import_core175=require("@mantine/core"),import_core176=require("@medplum/core");var import_react91=require("react");var import_jsx_runtime132=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=a(),combobox=(0,import_core175.useCombobox)(),[search,setSearch]=(0,import_react91.useState)(""),[outcome,setOutcome]=(0,import_react91.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core176.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime132.jsx)(import_core175.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime132.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime132.jsxs)(import_core175.Stack,{children:[(0,import_jsx_runtime132.jsxs)(import_core175.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime132.jsx)(Logo,{size:32}),(0,import_jsx_runtime132.jsx)(import_core175.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime132.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime132.jsxs)(import_core175.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime132.jsx)(import_core175.Combobox.EventsTarget,{children:(0,import_jsx_runtime132.jsx)(import_core175.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime132.jsx)("div",{children:(0,import_jsx_runtime132.jsx)(import_core175.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime132.jsx)(import_core175.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime132.jsxs)(import_core175.Group,{children:[(0,import_jsx_runtime132.jsx)(import_core175.Avatar,{radius:"xl"}),(0,import_jsx_runtime132.jsxs)("div",{children:[(0,import_jsx_runtime132.jsx)(import_core175.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime132.jsx)(import_core175.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core177=require("@mantine/core");var import_jsx_runtime133=require("react/jsx-runtime");function ChooseScopeForm(props){let medplum=a();return(0,import_jsx_runtime133.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_runtime133.jsxs)(import_core177.Stack,{children:[(0,import_jsx_runtime133.jsxs)(import_core177.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime133.jsx)(Logo,{size:32}),(0,import_jsx_runtime133.jsx)(import_core177.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime133.jsx)(import_core177.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>(0,import_jsx_runtime133.jsx)(import_core177.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName))}),(0,import_jsx_runtime133.jsx)(import_core177.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime133.jsx)(import_core177.Button,{type:"submit",children:"Set scope"})})]})})}var import_core178=require("@mantine/core"),import_core179=require("@medplum/core");var import_react92=require("react");var import_jsx_runtime134=require("react/jsx-runtime");function MfaForm(props){let medplum=a(),[errorMessage,setErrorMessage]=(0,import_react92.useState)();return(0,import_jsx_runtime134.jsx)(Form,{onSubmit:formData=>{setErrorMessage(void 0),medplum.post("auth/mfa/verify",{login:props.login,token:formData.token}).then(props.handleAuthResponse).catch(err=>setErrorMessage((0,import_core179.normalizeErrorString)(err)))},children:(0,import_jsx_runtime134.jsxs)(import_core178.Stack,{children:[(0,import_jsx_runtime134.jsxs)(import_core178.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime134.jsx)(Logo,{size:32}),(0,import_jsx_runtime134.jsx)(import_core178.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime134.jsx)(import_core178.Alert,{icon:(0,import_jsx_runtime134.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime134.jsx)(import_core178.Stack,{children:(0,import_jsx_runtime134.jsx)(import_core178.TextInput,{name:"token",label:"MFA code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime134.jsx)(import_core178.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime134.jsx)(import_core178.Button,{type:"submit",children:"Submit code"})})]})})}var import_jsx_runtime135=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=a(),[login,setLogin]=(0,import_react93.useState)(),loginRequested=(0,import_react93.useRef)(!1),[mfaRequired,setAuthenticatorRequired]=(0,import_react93.useState)(!1),[memberships,setMemberships]=(0,import_react93.useState)(),handleCode=(0,import_react93.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core180.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react93.useCallback)(response=>{setAuthenticatorRequired(!!response.mfaRequired),response.login&&setLogin(response.login),response.memberships&&setMemberships(response.memberships),response.code&&(chooseScopes?setMemberships(void 0):handleCode(response.code))},[chooseScopes,handleCode]),handleScopeResponse=(0,import_react93.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react93.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core180.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime135.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime135.jsx)(MfaForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime135.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime135.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime135.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime135.jsx)("div",{children:"Success"}):(0,import_jsx_runtime135.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core181=require("@mantine/core"),import_hooks7=require("@mantine/hooks"),import_notifications8=require("@mantine/notifications"),import_core182=require("@medplum/core");var import_react94=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleName:"BaseChat_chatBubbleName",chatBubbleNameRight:"BaseChat_chatBubbleNameRight"};var import_jsx_runtime136=require("react/jsx-runtime");function parseSentTime(communication){let sentTime=new Date(communication.sent??0),sentTimeMins=sentTime.getMinutes().toString();return`${sentTime.getHours()}:${sentTimeMins.length===1?"0":""}${sentTimeMins}`}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a2,b2)=>a2.sent.localeCompare(b2.sent)),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,inputDisabled,...paperProps}=props,medplum=a(),inputRef=(0,import_react94.useRef)(null),scrollAreaRef=(0,import_react94.useRef)(null),[profile,setProfile]=(0,import_react94.useState)(medplum.getProfile()),profileRefStr=(0,import_react94.useMemo)(()=>profile?(0,import_core182.getReferenceString)(medplum.getProfile()):"",[profile,medplum]);Oe(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),onMessageReceived&&(0,import_core182.getReferenceString)(communication.sender)!==profileRefStr&&onMessageReceived(communication)});let sendMessageInternal=(0,import_react94.useCallback)(formData=>{inputDisabled||(inputRef.current&&(inputRef.current.value=""),sendMessage(formData.message),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage]);(0,import_react94.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks7.useResizeObserver)(),communicationsRef=(0,import_react94.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react94.useRef)(communications),scrollToBottomRef=(0,import_react94.useRef)(!0),searchMessages=(0,import_react94.useCallback)(async()=>{let searchParams=new URLSearchParams(query);searchParams.append("_sort","-sent");let searchResult=await medplum.searchResources("Communication",searchParams,{cache:"no-cache"});upsertCommunications(communicationsRef.current,searchResult,setCommunications)},[medplum,setCommunications,query]);(0,import_react94.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications8.showNotification)({color:"red",message:(0,import_core182.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react94.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react94.useEffect)(()=>{scrollToBottomRef.current&&scrollAreaRef.current?.scrollTo&&(scrollAreaRef.current.scrollTo({top:scrollAreaRef.current.scrollHeight,behavior:"smooth"}),scrollToBottomRef.current=!1)});let myLastDeliveredId=(0,import_react94.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_runtime136.jsxs)(import_core181.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[(0,import_jsx_runtime136.jsx)(import_core181.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime136.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:(0,import_jsx_runtime136.jsx)(import_core181.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:communications.map((c,i)=>{let prevCommunication=i>0?communications[i-1]:void 0,prevCommTime=prevCommunication?parseSentTime(prevCommunication):void 0,currCommTime=parseSentTime(c);return(0,import_jsx_runtime136.jsxs)(import_core181.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime136.jsx)("div",{style:{textAlign:"center"},children:currCommTime}),c.sender?.reference===profileRefStr?(0,import_jsx_runtime136.jsxs)(import_core181.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime136.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered:!!c.received&&c.id===myLastDeliveredId}),(0,import_jsx_runtime136.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender})]}):(0,import_jsx_runtime136.jsxs)(import_core181.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime136.jsx)(ResourceAvatar,{radius:"xl",value:c.sender}),(0,import_jsx_runtime136.jsx)(ChatBubble,{alignment:"left",communication:c})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})})}),(0,import_jsx_runtime136.jsx)("div",{className:BaseChat_default.chatInputContainer,children:(0,import_jsx_runtime136.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime136.jsx)(import_core181.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",rightSectionWidth:42,disabled:inputDisabled,rightSection:inputDisabled?void 0:(0,import_jsx_runtime136.jsx)(import_core181.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime136.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,content=communication.payload?.[0]?.contentString||"",seenTime=new Date(communication.received??-1),senderResource=pe(communication.sender);return(0,import_jsx_runtime136.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime136.jsx)("div",{className:clsx_default(BaseChat_default.chatBubbleName,alignment==="right"&&BaseChat_default.chatBubbleNameRight),"aria-label":"Sender name",children:senderResource?(0,import_core182.getDisplayString)(senderResource):"[Unknown sender]"}),(0,import_jsx_runtime136.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime136.jsx)("div",{className:BaseChat_default.chatBubble,children:content})}),showDelivered&&(0,import_jsx_runtime136.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}var import_core183=require("@mantine/core");var import_react95=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime137=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=W(),[opened,setOpened]=(0,import_react95.useState)(open??!1);return(0,import_react95.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime137.jsxs)(import_jsx_runtime137.Fragment,{children:[opened&&(0,import_jsx_runtime137.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime137.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime137.jsx)(import_core183.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime137.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime137.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime137.jsx)(import_core183.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime137.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core184=require("@medplum/core");var import_react96=require("react");var import_jsx_runtime138=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled}=props,medplum=a(),profile=W(),prevThreadId=se(thread?.id),[communications,setCommunications]=(0,import_react96.useState)([]),profileRef=(0,import_react96.useMemo)(()=>profile?(0,import_core184.createReference)(profile):void 0,[profile]),threadRef=(0,import_react96.useMemo)(()=>(0,import_core184.createReference)(thread),[thread]);(0,import_react96.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react96.useCallback)(message=>{let profileRefStr=profileRef?(0,import_core184.getReferenceString)(profileRef):void 0;profileRefStr&&medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core184.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload:[{contentString:message}],partOf:[threadRef]}).then(communication=>{setCommunications([...communications,communication]),onMessageSent?.(communication)}).catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react96.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_runtime138.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core184.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled}):null}
71
+ }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&(0,import_core66.isEmpty)(targetType.resourceType)}var import_core71=require("@mantine/core"),import_core72=require("@medplum/core");var import_react45=require("react");var import_core69=require("@mantine/core"),import_core70=require("@medplum/core"),import_react44=require("react");var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};var import_core67=require("@mantine/core");var import_jsx_runtime60=require("react/jsx-runtime");function ArrayAddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?(0,import_jsx_runtime60.jsx)(import_core67.Button,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:(0,import_jsx_runtime60.jsx)(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):(0,import_jsx_runtime60.jsx)(import_core67.ActionIcon,{title:text,color:"green.6","data-testid":testId,onClick,children:(0,import_jsx_runtime60.jsx)(IconCirclePlus,{size:"1.25rem"})})}var import_core68=require("@mantine/core");var import_jsx_runtime61=require("react/jsx-runtime");function ArrayRemoveButton({propertyDisplayName,onClick,testId}){return(0,import_jsx_runtime61.jsx)(import_core68.ActionIcon,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,variant:"subtle",onClick,children:(0,import_jsx_runtime61.jsx)(IconCircleMinus,{size:"1.25rem"})})}var import_jsx_runtime62=require("react/jsx-runtime");function SliceInput(props){let{slice,property}=props,[values,setValues]=(0,import_react44.useState)(props.defaultValue),sliceElements=slice.typeSchema?.elements??slice.elements,parentElementsContextValue=(0,import_react44.useContext)(ElementsContext),contextValue=(0,import_react44.useMemo)(()=>{if((0,import_core70.isPopulated)(sliceElements))return(0,import_core70.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_core70.isEmpty)(slice.elements),propertyDisplayName=(0,import_core70.getPropertyDisplayName)(slice.name);return maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime62.jsx)(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,children:(0,import_jsx_runtime62.jsxs)(import_core69.Stack,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>(0,import_jsx_runtime62.jsxs)(import_core69.Group,{wrap:"nowrap",children:[(0,import_jsx_runtime62.jsx)("div",{style:{flexGrow:1},"data-testid":props.testId&&`${props.testId}-elements-${valueIndex}`,children:(0,import_jsx_runtime62.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})}),values.length>slice.min&&(0,import_jsx_runtime62.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:props.testId&&`${props.testId}-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newValues=[...values];newValues.splice(valueIndex,1),setValuesWrapper(newValues)}})]},`${valueIndex}-${values.length}`)),values.length<slice.max&&(0,import_jsx_runtime62.jsx)(import_core69.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime62.jsx)(ArrayAddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})}))}function getValuePath(elementPath,valuePath,arrayIndex){return valuePath===void 0?elementPath:arrayIndex===void 0?valuePath:`${valuePath}[${arrayIndex}]`}var import_jsx_runtime63=require("react/jsx-runtime");function ResourceArrayInput(props){let{property}=props,medplum=a(),[loading,setLoading]=(0,import_react45.useState)(!0),[slices,setSlices]=(0,import_react45.useState)([]),[defaultValue2]=(0,import_react45.useState)(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=(0,import_react45.useState)(()=>[defaultValue2]),ctx=(0,import_react45.useContext)(ElementsContext),propertyTypeCode=property.type[0]?.code;(0,import_react45.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_runtime63.jsx)("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=(0,import_core72.getPathDisplayName)(property.path);return(0,import_jsx_runtime63.jsxs)(import_core71.Stack,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[slices.map((slice,sliceIndex)=>(0,import_jsx_runtime63.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_runtime63.jsxs)(import_core71.Group,{wrap:"nowrap",style:{flexGrow:1},children:[(0,import_jsx_runtime63.jsx)("div",{style:{flexGrow:1},children:(0,import_jsx_runtime63.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})}),(0,import_jsx_runtime63.jsx)(ArrayRemoveButton,{propertyDisplayName,testId:`nonsliced-remove-${valueIndex}`,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.splice(valueIndex,1),setValuesWrapper(newNonSliceValues,nonSliceIndex)}})]},`${valueIndex}-${nonSliceValues.length}`)),showNonSliceValues&&slicedValues.flat().length<property.max&&(0,import_jsx_runtime63.jsx)(import_core71.Group,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:(0,import_jsx_runtime63.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_core73=require("@mantine/core"),import_hooks=require("@mantine/hooks"),import_notifications4=require("@mantine/notifications");var import_react46=require("react"),import_jsx_runtime64=require("react/jsx-runtime");function SensitiveTextarea(props){let[revealed,setRevealed]=(0,import_react46.useState)(!1),clipboard=(0,import_hooks.useClipboard)(),ref=(0,import_react46.useRef)(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),(0,import_jsx_runtime64.jsxs)(import_core73.Flex,{gap:"xs",children:[(0,import_jsx_runtime64.jsx)(import_core73.Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),(0,import_jsx_runtime64.jsx)(import_core73.ActionIcon,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),(0,import_notifications4.showNotification)({color:"green",message:"Copied"})},children:(0,import_jsx_runtime64.jsx)(IconCopy,{})})]})}var import_core74=require("@mantine/core"),import_core75=require("@medplum/core"),import_react47=require("react");var import_jsx_runtime65=require("react/jsx-runtime"),daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=(0,import_react47.useState)(props.defaultValue),[open,setOpen]=(0,import_react47.useState)(!1),valueRef=(0,import_react47.useRef)();return valueRef.current=value,(0,import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment,{children:[(0,import_jsx_runtime65.jsxs)(import_core74.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)("span",{children:(0,import_core75.formatTiming)(valueRef.current)||"No repeat"}),(0,import_jsx_runtime65.jsx)(import_core74.Button,{onClick:()=>setOpen(!0),children:"Edit"})]}),(0,import_jsx_runtime65.jsx)(TimingEditorDialog,{visible:open,defaultValue:valueRef.current,onOk:newValue=>{props.onChange&&props.onChange(newValue),setValue(newValue),setOpen(!1)},onCancel:()=>setOpen(!1)})]})}var defaultValue={repeat:{period:1,periodUnit:"d"}};function TimingEditorDialog(props){let[value,setValue]=(0,import_react47.useState)(props.defaultValue||defaultValue),valueRef=(0,import_react47.useRef)();valueRef.current=value;function setStart(newStart){setValue({...valueRef.current,event:[newStart]})}function setRepeat(repeat){setValue({...valueRef.current,repeat})}function setPeriod(newPeriod){setRepeat({...valueRef.current?.repeat,period:newPeriod})}function setPeriodUnit(newPeriodUnit){setRepeat({...valueRef.current?.repeat,periodUnit:newPeriodUnit})}function setDaysOfWeek(newDaysOfWeek){setRepeat({...valueRef.current?.repeat,dayOfWeek:newDaysOfWeek})}return(0,import_jsx_runtime65.jsx)(import_core74.Modal,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:(0,import_jsx_runtime65.jsxs)(import_core74.Stack,{children:[(0,import_jsx_runtime65.jsx)(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:(0,import_jsx_runtime65.jsx)(DateTimeInput,{name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),(0,import_jsx_runtime65.jsx)(import_core74.Switch,{label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&(0,import_jsx_runtime65.jsxs)(import_jsx_runtime65.Fragment,{children:[(0,import_jsx_runtime65.jsx)(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:(0,import_jsx_runtime65.jsxs)(import_core74.Group,{gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime65.jsx)(import_core74.TextInput,{type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:value.repeat.period||1,onChange:e=>setPeriod(parseInt(e.currentTarget.value,10)||1)}),(0,import_jsx_runtime65.jsx)(import_core74.NativeSelect,{id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:value.repeat.periodUnit,onChange:e=>setPeriodUnit(e.currentTarget.value),data:[{label:"second",value:"s"},{label:"minute",value:"min"},{label:"hour",value:"h"},{label:"day",value:"d"},{label:"week",value:"wk"},{label:"month",value:"mo"},{label:"year",value:"a"}]})]})}),value.repeat.periodUnit==="wk"&&(0,import_jsx_runtime65.jsx)(FormSection,{title:"Repeat on",children:(0,import_jsx_runtime65.jsx)(import_core74.Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:(0,import_jsx_runtime65.jsx)(import_core74.Group,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>(0,import_jsx_runtime65.jsx)(import_core74.Chip,{value:day,size:"xs",radius:"xl",children:day.charAt(0).toUpperCase()},day))})})})]}),(0,import_jsx_runtime65.jsx)(import_core74.Group,{justify:"flex-end",children:(0,import_jsx_runtime65.jsx)(import_core74.Button,{onClick:()=>props.onOk(value),children:"OK"})})]})})}var import_jsx_runtime66=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_core77.PropertyType.Attachment)return(0,import_jsx_runtime66.jsx)(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange});let indent=propertyTypes[0]?.code!==import_core77.PropertyType.Extension;return(0,import_jsx_runtime66.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_runtime66.jsx)(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):(0,import_jsx_runtime66.jsx)(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",(0,import_core77.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})}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_react48.useState)(initialPropertyType);return(0,import_jsx_runtime66.jsxs)(import_core76.Group,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[(0,import_jsx_runtime66.jsx)(import_core76.NativeSelect,{style:{width:"200px"},defaultValue:selectedType.code,"data-testid":props.name&&props.name+"-selector",onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),(0,import_jsx_runtime66.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_core77.capitalize)(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path,valuePath:props.valuePath})]})}function ElementDefinitionTypeInput(props){let{name,onChange,outcome,binding,path,valuePath}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code,elementsContext=(0,import_react48.useContext)(ElementsContext),defaultValue2=(0,import_react48.useMemo)(()=>{if(!(0,import_core77.isComplexTypeCode)(propertyType)||!(0,import_core77.isEmpty)(props.defaultValue))return props.defaultValue;let withDefaults=Object.create(null);if(elementsContext.path===props.path)(0,import_core77.applyDefaultValuesToElement)(withDefaults,elementsContext.elements);else{let key=(0,import_core77.getPathDifference)(elementsContext.path,props.path);if(key===void 0)return props.defaultValue;(0,import_core77.applyDefaultValuesToElement)(withDefaults,elementsContext.elements,key)}return(0,import_core77.isPopulated)(withDefaults)?withDefaults:props.defaultValue},[propertyType,elementsContext.path,elementsContext.elements,props.path,props.defaultValue]);if(!propertyType)return(0,import_jsx_runtime66.jsx)("div",{children:"Property type not specified "});function getComplexInputProps(){return{name,defaultValue:defaultValue2,onChange,outcome,path,valuePath}}function getPrimitiveInputProps(){let error=getErrorsForInput(props.outcome,valuePath??path);return{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,error}}switch(propertyType){case import_core77.PropertyType.SystemString:case import_core77.PropertyType.canonical:case import_core77.PropertyType.string:case import_core77.PropertyType.time:case import_core77.PropertyType.uri:case import_core77.PropertyType.url:return props.path==="Project.secret.value[x]"?(0,import_jsx_runtime66.jsx)(SensitiveTextarea,{...getPrimitiveInputProps(),onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)}}):(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.date:return(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),type:"date",onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.dateTime:case import_core77.PropertyType.instant:return(0,import_jsx_runtime66.jsx)(DateTimeInput,{name,defaultValue:defaultValue2,onChange,outcome});case import_core77.PropertyType.decimal:case import_core77.PropertyType.integer:case import_core77.PropertyType.positiveInt:case import_core77.PropertyType.unsignedInt:return(0,import_jsx_runtime66.jsx)(import_core76.TextInput,{...getPrimitiveInputProps(),type:"number",step:propertyType===import_core77.PropertyType.decimal?"any":"1",onChange:e=>{if(onChange){let num=e.currentTarget.valueAsNumber;onChange(Number.isNaN(num)?void 0:num)}}});case import_core77.PropertyType.code:return(0,import_jsx_runtime66.jsx)(CodeInput,{...getPrimitiveInputProps(),error:void 0,onChange,binding:binding?.valueSet});case import_core77.PropertyType.boolean:return(0,import_jsx_runtime66.jsx)(import_core76.Checkbox,{...getPrimitiveInputProps(),defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case import_core77.PropertyType.base64Binary:case import_core77.PropertyType.markdown:return(0,import_jsx_runtime66.jsx)(import_core76.Textarea,{...getPrimitiveInputProps(),spellCheck:propertyType!==import_core77.PropertyType.base64Binary,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case import_core77.PropertyType.Address:return(0,import_jsx_runtime66.jsx)(AddressInput,{...getComplexInputProps()});case import_core77.PropertyType.Annotation:return(0,import_jsx_runtime66.jsx)(AnnotationInput,{...getComplexInputProps()});case import_core77.PropertyType.Attachment:return(0,import_jsx_runtime66.jsx)(AttachmentInput,{...getComplexInputProps()});case import_core77.PropertyType.CodeableConcept:return(0,import_jsx_runtime66.jsx)(CodeableConceptInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core77.PropertyType.Coding:return(0,import_jsx_runtime66.jsx)(CodingInput,{binding:binding?.valueSet,...getComplexInputProps()});case import_core77.PropertyType.ContactDetail:return(0,import_jsx_runtime66.jsx)(ContactDetailInput,{...getComplexInputProps()});case import_core77.PropertyType.ContactPoint:return(0,import_jsx_runtime66.jsx)(ContactPointInput,{...getComplexInputProps()});case import_core77.PropertyType.Extension:return(0,import_jsx_runtime66.jsx)(ExtensionInput,{...getComplexInputProps(),propertyType:props.elementDefinitionType});case import_core77.PropertyType.HumanName:return(0,import_jsx_runtime66.jsx)(HumanNameInput,{...getComplexInputProps()});case import_core77.PropertyType.Identifier:return(0,import_jsx_runtime66.jsx)(IdentifierInput,{...getComplexInputProps()});case import_core77.PropertyType.Money:return(0,import_jsx_runtime66.jsx)(MoneyInput,{...getComplexInputProps()});case import_core77.PropertyType.Period:return(0,import_jsx_runtime66.jsx)(PeriodInput,{...getComplexInputProps()});case import_core77.PropertyType.Duration:case import_core77.PropertyType.Quantity:return(0,import_jsx_runtime66.jsx)(QuantityInput,{...getComplexInputProps()});case import_core77.PropertyType.Range:return(0,import_jsx_runtime66.jsx)(RangeInput,{...getComplexInputProps()});case import_core77.PropertyType.Ratio:return(0,import_jsx_runtime66.jsx)(RatioInput,{...getComplexInputProps()});case import_core77.PropertyType.Reference:return(0,import_jsx_runtime66.jsx)(ReferenceInput,{...getComplexInputProps(),targetTypes:getTargetTypes(props.elementDefinitionType)});case import_core77.PropertyType.Timing:return(0,import_jsx_runtime66.jsx)(TimingInput,{...getComplexInputProps()});case import_core77.PropertyType.Dosage:case import_core77.PropertyType.UsageContext:default:return(0,import_jsx_runtime66.jsx)(BackboneElementInput,{...getComplexInputProps(),typeName:propertyType})}}var RESOURCE_TYPE_URL_PREFIXES=[`${import_core77.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_runtime67=require("react/jsx-runtime");function ElementsInput(props){let[value,setValue]=(0,import_react49.useState)(props.defaultValue??{}),elementsContext=(0,import_react49.useContext)(ElementsContext),elementsToRender=(0,import_react49.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_runtime67.jsx)(import_core78.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_runtime67.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_runtime67.jsx)(CheckboxFormSection,{title:(0,import_core79.getPathDisplayName)(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,children:resourcePropertyInput},key):(0,import_jsx_runtime67.jsx)(FormSection,{title:(0,import_core79.getPathDisplayName)(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,errorExpression:valuePath,children:resourcePropertyInput},key)})})}var import_jsx_runtime68=require("react/jsx-runtime");function BackboneElementInput(props){let[defaultValue2]=(0,import_react50.useState)(()=>props.defaultValue??{}),parentElementsContext=(0,import_react50.useContext)(ElementsContext),profileUrl=props.profileUrl??parentElementsContext?.profileUrl,typeSchema=(0,import_react50.useMemo)(()=>(0,import_core80.tryGetDataType)(props.typeName,profileUrl),[props.typeName,profileUrl]),type=typeSchema?.type??props.typeName,contextValue=(0,import_react50.useMemo)(()=>{if(typeSchema)return(0,import_core80.buildElementsContext)({parentContext:parentElementsContext,elements:typeSchema.elements,path:props.path,profileUrl:typeSchema.url})},[typeSchema,props.path,parentElementsContext]);return typeSchema?maybeWrapWithContext(ElementsContext.Provider,contextValue,(0,import_jsx_runtime68.jsx)(ElementsInput,{path:props.path,valuePath:props.valuePath,type,defaultValue:defaultValue2,onChange:props.onChange,outcome:props.outcome})):(0,import_jsx_runtime68.jsxs)("div",{children:[type,"\xA0not implemented"]})}var import_core81=require("@mantine/core"),import_react51=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_runtime69=require("react/jsx-runtime");function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=(0,import_react51.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_react51.useMemo)(()=>buildGrid(month,props.slots),[month,props.slots]);return(0,import_jsx_runtime69.jsxs)("div",{children:[(0,import_jsx_runtime69.jsxs)(import_core81.Group,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[(0,import_jsx_runtime69.jsx)("p",{style:{flex:1},children:getMonthString(month)}),(0,import_jsx_runtime69.jsxs)(import_core81.Group,{justify:"flex-end",gap:"xs",children:[(0,import_jsx_runtime69.jsx)(import_core81.Button,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),(0,import_jsx_runtime69.jsx)(import_core81.Button,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),(0,import_jsx_runtime69.jsxs)("table",{className:CalendarInput_default.table,children:[(0,import_jsx_runtime69.jsx)("thead",{children:(0,import_jsx_runtime69.jsxs)("tr",{children:[(0,import_jsx_runtime69.jsx)("th",{children:"SUN"}),(0,import_jsx_runtime69.jsx)("th",{children:"MON"}),(0,import_jsx_runtime69.jsx)("th",{children:"TUE"}),(0,import_jsx_runtime69.jsx)("th",{children:"WED"}),(0,import_jsx_runtime69.jsx)("th",{children:"THU"}),(0,import_jsx_runtime69.jsx)("th",{children:"FRI"}),(0,import_jsx_runtime69.jsx)("th",{children:"SAT"})]})}),(0,import_jsx_runtime69.jsx)("tbody",{children:grid.map((week,weekIndex)=>(0,import_jsx_runtime69.jsx)("tr",{children:week.map((day,dayIndex)=>(0,import_jsx_runtime69.jsx)("td",{children:day&&(0,import_jsx_runtime69.jsx)(import_core81.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_core82=require("@mantine/core");var Container_default={root:"Container_root"};var import_jsx_runtime70=require("react/jsx-runtime");function Container(props){let{children,...others}=props;return(0,import_jsx_runtime70.jsx)(import_core82.Container,{className:Container_default.root,...others,children})}var import_core96=require("@mantine/core"),import_notifications5=require("@mantine/notifications"),import_core97=require("@medplum/core");var import_react56=require("react");var import_core88=require("@mantine/core"),import_core89=require("@medplum/core");var import_react53=require("react");var import_core83=require("@mantine/core");var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};var import_jsx_runtime71=require("react/jsx-runtime");function NoteDisplay({value}){return value?(0,import_jsx_runtime71.jsx)(import_core83.Stack,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&(0,import_jsx_runtime71.jsx)(import_core83.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_core86=require("@mantine/core");var import_core84=require("@mantine/core"),import_core85=require("@medplum/core");var import_react52=require("react");var import_jsx_runtime72=require("react/jsx-runtime");function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=(0,import_react52.useState)(),resource=pe(value,setOutcome),text;if(outcome&&!(0,import_core85.isOk)(outcome))text=`[${(0,import_core85.normalizeErrorString)(outcome)}]`;else if(resource)text=(0,import_core85.getDisplayString)(resource);else return null;return link?(0,import_jsx_runtime72.jsx)(MedplumLink,{to:value,...rest,children:text}):(0,import_jsx_runtime72.jsx)(import_core84.Text,{component:"span",...rest,children:text})}var import_jsx_runtime73=require("react/jsx-runtime");function ResourceBadge(props){return(0,import_jsx_runtime73.jsxs)(import_core86.Group,{gap:"xs",children:[(0,import_jsx_runtime73.jsx)(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),(0,import_jsx_runtime73.jsx)(ResourceName,{value:props.value,link:props.link})]})}var import_core87=require("@mantine/core"),import_jsx_runtime74=require("react/jsx-runtime"),statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red",connected:"green",disconnected:"red"};function StatusBadge(props){return(0,import_jsx_runtime74.jsx)(import_core87.Badge,{color:statusToColor[props.status],children:props.status})}var DiagnosticReportDisplay_default={table:"DiagnosticReportDisplay_table",criticalRow:"DiagnosticReportDisplay_criticalRow",noteBody:"DiagnosticReportDisplay_noteBody",noteCite:"DiagnosticReportDisplay_noteCite",noteRoot:"DiagnosticReportDisplay_noteRoot"};var import_jsx_runtime75=require("react/jsx-runtime");DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=a(),diagnosticReport=pe(props.value),[specimens,setSpecimens]=(0,import_react53.useState)();if((0,import_react53.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_runtime75.jsxs)(import_core88.Stack,{children:[(0,import_jsx_runtime75.jsx)(import_core88.Title,{children:"Diagnostic Report"}),(0,import_jsx_runtime75.jsx)(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&(0,import_jsx_runtime75.jsx)(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&(0,import_jsx_runtime75.jsx)(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return(0,import_jsx_runtime75.jsxs)(import_core88.Group,{mt:"md",gap:30,children:[value.subject&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),(0,import_jsx_runtime75.jsx)(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),(0,import_jsx_runtime75.jsx)(import_core88.Text,{children:(0,import_core89.formatDateTime)(value.issued)})]}),value.status&&(0,import_jsx_runtime75.jsxs)("div",{children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),(0,import_jsx_runtime75.jsx)(import_core88.Text,{children:(0,import_core89.capitalize)(value.status)})]})]})}function SpecimenInfo(specimens){return(0,import_jsx_runtime75.jsxs)(import_core88.Stack,{gap:"xs",children:[(0,import_jsx_runtime75.jsx)(import_core88.Title,{order:2,size:"h6",children:"Specimens"}),(0,import_jsx_runtime75.jsx)(import_core88.List,{type:"ordered",children:specimens?.map(specimen=>(0,import_jsx_runtime75.jsx)(import_core88.List.Item,{ml:"sm",children:(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:20,children:[(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:5,children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{fw:500,children:"Collected:"})," ",(0,import_core89.formatDateTime)(specimen.collection?.collectedDateTime)]}),(0,import_jsx_runtime75.jsxs)(import_core88.Group,{gap:5,children:[(0,import_jsx_runtime75.jsx)(import_core88.Text,{fw:500,children:"Received:"})," ",(0,import_core89.formatDateTime)(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return(0,import_jsx_runtime75.jsxs)("table",{className:DiagnosticReportDisplay_default.table,children:[(0,import_jsx_runtime75.jsx)("thead",{children:(0,import_jsx_runtime75.jsxs)("tr",{children:[(0,import_jsx_runtime75.jsx)("th",{children:"Test"}),(0,import_jsx_runtime75.jsx)("th",{children:"Value"}),(0,import_jsx_runtime75.jsx)("th",{children:"Reference Range"}),(0,import_jsx_runtime75.jsx)("th",{children:"Interpretation"}),(0,import_jsx_runtime75.jsx)("th",{children:"Category"}),(0,import_jsx_runtime75.jsx)("th",{children:"Performer"}),(0,import_jsx_runtime75.jsx)("th",{children:"Status"})]})}),(0,import_jsx_runtime75.jsx)("tbody",{children:(0,import_jsx_runtime75.jsx)(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:props.value?.map(observation=>(0,import_jsx_runtime75.jsx)(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${(0,import_core89.isReference)(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=pe(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return(0,import_jsx_runtime75.jsxs)(import_jsx_runtime75.Fragment,{children:[(0,import_jsx_runtime75.jsxs)("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[(0,import_jsx_runtime75.jsx)("td",{rowSpan:displayNotes?2:1,children:(0,import_jsx_runtime75.jsx)(MedplumLink,{to:observation,children:(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:observation.code})})}),(0,import_jsx_runtime75.jsx)("td",{children:(0,import_jsx_runtime75.jsx)(ObservationValueDisplay,{value:observation})}),(0,import_jsx_runtime75.jsx)("td",{children:(0,import_jsx_runtime75.jsx)(ReferenceRangeDisplay,{value:observation.referenceRange})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.interpretation&&observation.interpretation.length>0&&(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:observation.interpretation[0]})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.category&&observation.category.length>0&&(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:observation.category.map(concept=>(0,import_jsx_runtime75.jsx)("div",{children:(0,import_jsx_runtime75.jsx)(CodeableConceptDisplay,{value:concept})},`category-${(0,import_core89.formatCodeableConcept)(concept)}`))})}),(0,import_jsx_runtime75.jsx)("td",{children:observation.performer?.map(performer=>(0,import_jsx_runtime75.jsx)(ReferenceDisplay,{value:performer},performer.reference))}),(0,import_jsx_runtime75.jsx)("td",{children:observation.status&&(0,import_jsx_runtime75.jsx)(StatusBadge,{status:observation.status})})]}),observation.hasMember&&(0,import_jsx_runtime75.jsx)(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&(0,import_jsx_runtime75.jsx)("tr",{children:(0,import_jsx_runtime75.jsx)("td",{colSpan:6,children:(0,import_jsx_runtime75.jsx)(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:(0,import_core89.formatObservationValue)(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?(0,import_jsx_runtime75.jsx)(import_jsx_runtime75.Fragment,{children:range.text}):(0,import_jsx_runtime75.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_core90=require("@mantine/core");var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};var import_jsx_runtime76=require("react/jsx-runtime");function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{maxWidth:width}:void 0;return(0,import_jsx_runtime76.jsx)(import_core90.Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}var import_core91=require("@mantine/core"),import_core92=require("@medplum/core");var import_react54=require("react"),import_rfc6902=__toESM(require_rfc6902(),1);var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};var import_jsx_runtime77=require("react/jsx-runtime");function ResourceDiffTable(props){let medplum=a(),{original,revised}=props,[schemaLoaded,setSchemaLoaded]=(0,import_react54.useState)(!1);(0,import_react54.useEffect)(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]);let diffTable=(0,import_react54.useMemo)(()=>{if(!schemaLoaded)return null;let typedOriginal=[(0,import_core92.toTypedValue)(original)],typedRevised=[(0,import_core92.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_core92.evalFhirPathTyped)(fhirPath,typedOriginal),revisedValue=op.op==="remove"?void 0:(0,import_core92.evalFhirPathTyped)(fhirPath,typedRevised);result.push({key:`op-${op.op}-${op.path}`,name:`${(0,import_core92.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_runtime77.jsxs)(import_core91.Table,{className:ResourceDiffTable_default.root,children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Thead,{children:(0,import_jsx_runtime77.jsxs)(import_core91.Table.Tr,{children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{children:"Before"}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Th,{children:"After"})]})}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Tbody,{children:diffTable.map(row=>(0,import_jsx_runtime77.jsxs)(import_core91.Table.Tr,{children:[(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{children:row.name}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{className:ResourceDiffTable_default.removed,children:row.originalValue&&(0,import_jsx_runtime77.jsx)(ResourcePropertyDisplay,{path:row.path,property:row.property,propertyType:row.originalValue.type,value:row.originalValue.value,ignoreMissingValues:!0})}),(0,import_jsx_runtime77.jsx)(import_core91.Table.Td,{className:ResourceDiffTable_default.added,children:row.revisedValue&&(0,import_jsx_runtime77.jsx)(ResourcePropertyDisplay,{path:row.path,property:row.property,propertyType:row.revisedValue.type,value:row.revisedValue.value,ignoreMissingValues:!0})})]},row.key))})]}):null}function mergePatchOperations(patch){let result=[];for(let patchOperation of patch){let{op,path}=patchOperation;if(path.startsWith("/meta/author")||path.startsWith("/meta/compartment")||path.startsWith("/meta/lastUpdated")||path.startsWith("/meta/versionId"))continue;let count=patch.filter(el=>el.op===op&&el.path===path).length,resultOperation={op,path};count>1&&(op==="add"||op==="remove")&&/\/[0-9-]+$/.test(path)&&(resultOperation.op="replace",resultOperation.path=path.replace(/\/[^/]+$/,"")),result.some(el=>el.op===resultOperation.op&&el.path===resultOperation.path)||result.push(resultOperation)}return result}function jsonPathToFhirPath(path){let parts=path.split("/").filter(Boolean),result="";for(let i=0;i<parts.length;i++){let part=parts[i];part==="-"?result+=".last()":/^\d+$/.test(part)?result+=`[${part}]`:(i>0&&(result+="."),result+=part)}return result.endsWith(".url")&&(result=result.replace(/\.url$/,"")),result}function tryGetElementDefinition(resourceType,fhirPath){return(0,import_core92.getSearchParameterDetails)(resourceType,{resourceType:"SearchParameter",base:[resourceType],code:resourceType+"."+fhirPath,expression:resourceType+"."+fhirPath})?.elementDefinitions?.[0]}function touchUpValue(property,input){return input&&{type:Array.isArray(input)?input[0].type:input.type,value:fixArray(input,!!property?.isArray)}}function fixArray(input,isArray){let inputValue=(0,import_core92.arrayify)(input).flatMap(v2=>v2.value);return isArray?inputValue:inputValue[0]}var import_react55=require("react");var import_core93=require("@medplum/core"),import_jsx_runtime78=require("react/jsx-runtime");function ResourceTable(props){let{profileUrl}=props,medplum=a(),value=pe(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react55.useState)();return(0,import_react55.useEffect)(()=>{if(value)if(profileUrl)medplum.requestProfileSchema(profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core93.tryGetProfile)(profileUrl);profile?setSchemaLoaded(profile.name):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(schemaName)}).catch(console.error)}},[medplum,profileUrl,value]),!schemaLoaded||!value?null:(0,import_jsx_runtime78.jsx)(BackboneElementDisplay,{path:value.resourceType,value:{type:schemaLoaded,value:props.forceUseInput?props.value:value},profileUrl,ignoreMissingValues:props.ignoreMissingValues})}var import_core94=require("@mantine/core"),import_core95=require("@medplum/core");var Timeline_default={item:"Timeline_item",itemPadding:"Timeline_itemPadding"};var import_jsx_runtime79=require("react/jsx-runtime");function Timeline(props){return(0,import_jsx_runtime79.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_runtime79.jsxs)(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[(0,import_jsx_runtime79.jsxs)(import_core94.Group,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[(0,import_jsx_runtime79.jsx)(ResourceAvatar,{value:author,link:!0,size:"md"}),(0,import_jsx_runtime79.jsxs)("div",{style:{flex:1},children:[(0,import_jsx_runtime79.jsx)(import_core94.Text,{size:"sm",children:(0,import_jsx_runtime79.jsx)(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),(0,import_jsx_runtime79.jsxs)(import_core94.Text,{size:"xs",children:[(0,import_jsx_runtime79.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:(0,import_core95.formatDateTime)(dateTime)}),(0,import_jsx_runtime79.jsx)(import_core94.Text,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),(0,import_jsx_runtime79.jsx)(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&(0,import_jsx_runtime79.jsxs)(import_core94.Menu,{position:"bottom-end",shadow:"md",width:200,children:[(0,import_jsx_runtime79.jsx)(import_core94.Menu.Target,{children:(0,import_jsx_runtime79.jsx)(import_core94.ActionIcon,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${(0,import_core95.getReferenceString)(props.resource)}`,children:(0,import_jsx_runtime79.jsx)(IconDots,{})})}),popupMenuItems]})]}),(0,import_jsx_runtime79.jsx)(ErrorBoundary,{children:(0,import_jsx_runtime79.jsx)("div",{className:clsx_default(Timeline_default.item,{[Timeline_default.itemPadding]:padding}),children:props.children})})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a2,b2)=>{let priority1=getPriorityScore(a2,timelineResource),priority2=getPriorityScore(b2,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a2,timelineResource)-getTime(b2,timelineResource)})}function getPriorityScore(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){let priority=resource.priority;if(typeof priority=="string")return{stat:4,asap:3,urgent:2}[priority]??0}return 0}function getTime(resource,timelineResource){if(!isSameResourceType(resource,timelineResource)){if(resource.resourceType==="Communication"&&resource.sent)return new Date(resource.sent).getTime();if((resource.resourceType==="DiagnosticReport"||resource.resourceType==="Media"||resource.resourceType==="Observation")&&resource.issued)return new Date(resource.issued).getTime();if(resource.resourceType==="DocumentReference"&&resource.date)return new Date(resource.date).getTime()}let dateTime=resource.meta?.lastUpdated;return dateTime?new Date(dateTime).getTime():0}function isSameResourceType(a2,b2){return!!b2&&a2.resourceType===b2.resourceType&&a2.id===b2.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};var import_jsx_runtime80=require("react/jsx-runtime");function ResourceTimeline(props){let medplum=a(),navigate=V(),sender=medplum.getProfile(),inputRef=(0,import_react56.useRef)(null),resource=pe(props.value),[history,setHistory]=(0,import_react56.useState)(),[items,setItems]=(0,import_react56.useState)([]),loadTimelineResources=props.loadTimelineResources,itemsRef=(0,import_react56.useRef)(items);itemsRef.current=items;let sortAndSetItems=(0,import_react56.useCallback)(newItems=>{sortByDateAndPriority(newItems,resource),newItems.reverse(),setItems(newItems)},[resource]),handleBatchResponse=(0,import_react56.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_react56.useCallback)(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=(0,import_react56.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_react56.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_notifications5.updateNotification)({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:(0,import_jsx_runtime80.jsx)(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core97.normalizeErrorString)(reason),icon:(0,import_jsx_runtime80.jsx)(IconFileAlert,{size:16}),autoClose:2e3}))}function setPriority(communication,priority){return medplum.updateResource({...communication,priority})}function onPin(communication){setPriority(communication,"stat").then(loadTimeline).catch(console.error)}function onUnpin(communication){setPriority(communication,"routine").then(loadTimeline).catch(console.error)}function onDetails(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}`)}function onEdit(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`)}function onDelete(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`)}function onVersionDetails(version){navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`)}function onUploadStart(){(0,import_notifications5.showNotification)({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){(0,import_notifications5.updateNotification)({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){(0,import_notifications5.updateNotification)({id:"upload-notification",color:"red",title:"Upload error",message:(0,import_core97.normalizeErrorString)(outcome),icon:(0,import_jsx_runtime80.jsx)(IconFileAlert,{size:16}),autoClose:2e3})}return resource?(0,import_jsx_runtime80.jsxs)(Timeline,{children:[props.createCommunication&&(0,import_jsx_runtime80.jsx)(Panel,{children:(0,import_jsx_runtime80.jsx)(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:(0,import_jsx_runtime80.jsxs)(import_core96.Group,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[(0,import_jsx_runtime80.jsx)(ResourceAvatar,{value:sender}),(0,import_jsx_runtime80.jsx)(import_core96.TextInput,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),(0,import_jsx_runtime80.jsx)(import_core96.ActionIcon,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime80.jsx)(IconMessage,{size:16})}),(0,import_jsx_runtime80.jsx)(AttachmentButton,{securityContext:(0,import_core97.createReference)(resource),onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>(0,import_jsx_runtime80.jsx)(import_core96.ActionIcon,{...props2,radius:"xl",color:"blue",variant:"filled",children:(0,import_jsx_runtime80.jsx)(IconCloudUpload,{size:16})})})]})})}),items.map(item=>{if(!item)return null;let key=`${item.resourceType}/${item.id}/${item.meta?.versionId}`;if(item.resourceType===resource.resourceType&&item.id===resource.id)return(0,import_jsx_runtime80.jsx)(HistoryTimelineItem,{history,resource:item,onDetails:onVersionDetails},key);switch(item.resourceType){case"AuditEvent":return(0,import_jsx_runtime80.jsx)(AuditEventTimelineItem,{resource:item,onDetails},key);case"Communication":return(0,import_jsx_runtime80.jsx)(CommunicationTimelineItem,{resource:item,onPin:item.priority!=="stat"?onPin:void 0,onUnpin:item.priority==="stat"?onUnpin:void 0,onDetails,onEdit,onDelete},key);case"DiagnosticReport":return(0,import_jsx_runtime80.jsx)(DiagnosticReportTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);case"Media":return(0,import_jsx_runtime80.jsx)(MediaTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);default:return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:item,padding:!0,children:(0,import_jsx_runtime80.jsx)(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):(0,import_jsx_runtime80.jsx)(import_core96.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime80.jsx)(import_core96.Loader,{})})}function TimelineItemPopupMenu(props){return(0,import_jsx_runtime80.jsxs)(import_core96.Menu.Dropdown,{children:[(0,import_jsx_runtime80.jsx)(import_core96.Menu.Label,{children:"Resource"}),props.onPin&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconPin,{size:14}),onClick:()=>props.onPin(props.resource),"aria-label":`Pin ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Pin"}),props.onUnpin&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconPinnedOff,{size:14}),onClick:()=>props.onUnpin(props.resource),"aria-label":`Unpin ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Unpin"}),props.onDetails&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconListDetails,{size:14}),onClick:()=>props.onDetails(props.resource),"aria-label":`Details ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Details"}),props.onEdit&&(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{leftSection:(0,import_jsx_runtime80.jsx)(IconEdit,{size:14}),onClick:()=>props.onEdit(props.resource),"aria-label":`Edit ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Edit"}),props.onDelete&&(0,import_jsx_runtime80.jsxs)(import_jsx_runtime80.Fragment,{children:[(0,import_jsx_runtime80.jsx)(import_core96.Menu.Divider,{}),(0,import_jsx_runtime80.jsx)(import_core96.Menu.Label,{children:"Danger zone"}),(0,import_jsx_runtime80.jsx)(import_core96.Menu.Item,{color:"red",leftSection:(0,import_jsx_runtime80.jsx)(IconTrash,{size:14}),onClick:()=>props.onDelete(props.resource),"aria-label":`Delete ${(0,import_core97.getReferenceString)(props.resource)}`,children:"Delete"})]})]})}function HistoryTimelineItem(props){let previous=getPrevious(props.history,props.resource);return previous?(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(ResourceDiffTable,{original:previous,revised:props.resource})}):(0,import_jsx_runtime80.jsxs)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:[(0,import_jsx_runtime80.jsx)("h3",{children:"Created"}),(0,import_jsx_runtime80.jsx)(ResourceTable,{value:props.resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function getPrevious(history,version){let entries=history.entry,index=entries.findIndex(entry=>entry.resource?.meta?.versionId===version.meta?.versionId);if(!(index>=entries.length-1))return entries[index+1].resource}function CommunicationTimelineItem(props){let className=!props.resource.priority||props.resource.priority==="routine"?void 0:ResourceTimeline_default.pinnedComment;return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.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_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.jsx)(import_core96.ScrollArea,{children:(0,import_jsx_runtime80.jsx)("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return(0,import_jsx_runtime80.jsx)(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:(0,import_jsx_runtime80.jsx)(TimelineItemPopupMenu,{...props}),children:(0,import_jsx_runtime80.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_runtime81=require("react/jsx-runtime");function DefaultResourceTimeline(props){return(0,import_jsx_runtime81.jsx)(ResourceTimeline,{value:props.resource,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`;return Promise.allSettled([medplum.readHistory(resourceType,id),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count:100})])}})}var import_jsx_runtime82=require("react/jsx-runtime");function Document(props){let{children,...others}=props;return(0,import_jsx_runtime82.jsx)(Container,{children:(0,import_jsx_runtime82.jsx)(Panel,{...others,children})})}var import_core98=require("@medplum/core");var import_jsx_runtime83=require("react/jsx-runtime");function EncounterTimeline(props){return(0,import_jsx_runtime83.jsx)(ResourceTimeline,{value:props.encounter,loadTimelineResources:async(medplum,_resourceType,id)=>Promise.allSettled([medplum.readHistory("Encounter",id),medplum.search("Communication","encounter=Encounter/"+id),medplum.search("Media","encounter=Encounter/"+id)]),createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",encounter:(0,import_core98.createReference)(resource),subject:resource.subject,sender:(0,import_core98.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:(0,import_core98.createReference)(resource),subject:resource.subject,operator:(0,import_core98.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core115=require("@mantine/core"),import_core116=require("@medplum/core");var import_react61=require("react");var import_core99=require("@medplum/core");var import_jsx_runtime84=require("react/jsx-runtime");function FhirPathDisplay(props){let value;try{value=(0,import_core99.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_runtime84.jsx)(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}var import_core113=require("@mantine/core"),import_core114=require("@medplum/core");var import_react60=require("react");var import_core100=require("@mantine/core"),import_jsx_runtime85=require("react/jsx-runtime");function SearchExportDialog(props){return(0,import_jsx_runtime85.jsxs)(import_core100.Modal,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime85.jsxs)(import_core100.Box,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&(0,import_jsx_runtime85.jsx)(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&(0,import_jsx_runtime85.jsx)(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),(0,import_jsx_runtime85.jsx)(import_core100.Text,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return(0,import_jsx_runtime85.jsx)(import_core100.Button,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}var import_core102=require("@mantine/core"),import_core103=require("@medplum/core"),import_react57=require("react");var import_core101=require("@medplum/core");var import_jsx_runtime86=require("react/jsx-runtime"),searchParamToOperators={string:[import_core101.Operator.EQUALS,import_core101.Operator.NOT,import_core101.Operator.CONTAINS,import_core101.Operator.EXACT],fulltext:[import_core101.Operator.EQUALS,import_core101.Operator.NOT,import_core101.Operator.CONTAINS,import_core101.Operator.EXACT],token:[import_core101.Operator.EQUALS,import_core101.Operator.NOT],reference:[import_core101.Operator.EQUALS,import_core101.Operator.NOT],numeric:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS],quantity:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS],date:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS,import_core101.Operator.STARTS_AFTER,import_core101.Operator.ENDS_BEFORE,import_core101.Operator.APPROXIMATELY],datetime:[import_core101.Operator.EQUALS,import_core101.Operator.NOT_EQUALS,import_core101.Operator.GREATER_THAN,import_core101.Operator.LESS_THAN,import_core101.Operator.GREATER_THAN_OR_EQUALS,import_core101.Operator.LESS_THAN_OR_EQUALS,import_core101.Operator.STARTS_AFTER,import_core101.Operator.ENDS_BEFORE,import_core101.Operator.APPROXIMATELY]},operatorNames={eq:"equals",ne:"not equals",gt:"greater than",lt:"less than",ge:"greater than or equals",le:"less than or equals",sa:"starts after",eb:"ends before",ap:"approximately",contains:"contains",exact:"exact",text:"text",not:"not",above:"above",below:"below",in:"in","not-in":"not in","of-type":"of type",missing:"missing",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(f2=>f2.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,import_core101.Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,import_core101.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_core101.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_core101.DEFAULT_SEARCH_COUNT,newOffset=(page-1)*count;return setOffset(definition,newOffset)}function setSort(definition,sort,desc){return sort===getSortField(definition)&&desc!==void 0&&desc===isSortDescending(definition)?definition:{...definition,sortRules:[{code:sort,descending:!!desc}],name:void 0}}function toggleSort(definition,key){let desc=!1;return getSortField(definition)===key&&(desc=!isSortDescending(definition)),setSort(definition,key,desc)}function getSortField(definition){let sortRules=definition.sortRules;if(!sortRules||sortRules.length===0)return;let field=sortRules[0].code;return field.startsWith("-")?field.substr(1):field}function isSortDescending(definition){let sortRules=definition.sortRules;return!sortRules||sortRules.length===0?!1:!!sortRules[0].descending}function getSearchOperators(searchParam){return searchParamToOperators[searchParam.type]}function getOpString(op){return operatorNames[op]??""}function buildFieldNameString(key){let tmp=key;return tmp.includes(".")&&(tmp=tmp.split(".").pop()),tmp==="versionId"?"Version ID":(tmp=tmp.replace("[x]",""),tmp=tmp.replace(/([A-Z])/g," $1"),tmp=tmp.replace(/[-_]/g," "),tmp=tmp.replace(/\s+/g," "),tmp=tmp.trim(),tmp.toLowerCase()==="id"?"ID":tmp.split(/\s/).map(import_core101.capitalize).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?resource.id:key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?(0,import_core101.formatDateTime)(resource.meta?.lastUpdated):field.elementDefinition&&`${resource.resourceType}.${field.name}`===field.elementDefinition.path?renderPropertyValue(resource,field.elementDefinition):field.searchParams&&field.searchParams.length===1&&field.name===field.searchParams[0].code?renderSearchParameterValue(resource,field.searchParams[0]):null}function renderPropertyValue(resource,elementDefinition){let path=elementDefinition.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[value,propertyType]=getValueAndType({type:resource.resourceType,value:resource},path);return value?(0,import_jsx_runtime86.jsx)(ResourcePropertyDisplay,{path:elementDefinition.path,property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=(0,import_core101.evalFhirPathTyped)(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:(0,import_jsx_runtime86.jsx)(import_jsx_runtime86.Fragment,{children:value.map((v2,index)=>(0,import_jsx_runtime86.jsx)(ResourcePropertyDisplay,{propertyType:v2.type,value:v2.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}var import_jsx_runtime87=require("react/jsx-runtime");function SearchFieldEditor(props){let wasDropdownOpen=(0,import_react57.useRef)(!1),[state,setState]=(0,import_react57.useState)({search:JSON.parse((0,import_core103.stringify)(props.search))}),[isDropdownOpen,setIsDropdownOpen]=(0,import_react57.useState)(!1);(0,import_react57.useEffect)(()=>{setState({search:props.search})},[props.search]);let allFields=(0,import_react57.useMemo)(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=(0,import_core103.getDataType)(resourceType),searchParams=(0,import_core103.getSearchParameters)(resourceType);return(0,import_core103.sortStringArray)(getFieldsList(typeSchema,searchParams)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);if(!props.visible)return null;function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return(0,import_jsx_runtime87.jsx)(import_core102.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_runtime87.jsx)("div",{"data-testid":"overlay-child"})},children:(0,import_jsx_runtime87.jsxs)(import_core102.Stack,{children:[(0,import_jsx_runtime87.jsx)(import_core102.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_runtime87.jsx)(import_core102.Group,{justify:"flex-end",children:(0,import_jsx_runtime87.jsx)(import_core102.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_core107=require("@mantine/core"),import_core108=require("@medplum/core"),import_react58=require("react");var import_core104=require("@medplum/core");var import_jsx_runtime88=require("react/jsx-runtime");function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=import_core104.globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===import_core104.Operator.EQUALS||filter.operator===import_core104.Operator.NOT_EQUALS))return(0,import_jsx_runtime88.jsx)(ResourceName,{value:{reference:filter.value}});let searchParamDetails=(0,import_core104.getSearchParameterDetails)(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===import_core104.SearchParameterType.DATETIME)return(0,import_jsx_runtime88.jsx)(import_jsx_runtime88.Fragment,{children:(0,import_core104.formatDateTime)(filter.value)})}return(0,import_jsx_runtime88.jsx)(import_jsx_runtime88.Fragment,{children:filter.value})}var import_core105=require("@mantine/core"),import_core106=require("@medplum/core");var import_jsx_runtime89=require("react/jsx-runtime");function SearchFilterValueInput(props){let details=(0,import_core106.getSearchParameterDetails)(props.resourceType,props.searchParam),name="filter-value";switch(details.type){case import_core106.SearchParameterType.REFERENCE:return(0,import_jsx_runtime89.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_core106.SearchParameterType.BOOLEAN:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.DATE:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.DATETIME:return(0,import_jsx_runtime89.jsx)(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case import_core106.SearchParameterType.NUMBER:return(0,import_jsx_runtime89.jsx)(import_core105.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_core106.SearchParameterType.QUANTITY:return(0,import_jsx_runtime89.jsx)(QuantityInput,{name,defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return(0,import_jsx_runtime89.jsx)(import_core105.TextInput,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value),placeholder:"Search value"})}}function tryParseQuantity(value){if(value){let[valueString,systemString,unitString]=value.split("|");if(valueString)return{value:parseFloat(valueString),system:systemString,unit:unitString}}}var import_jsx_runtime90=require("react/jsx-runtime");function SearchFilterEditor(props){let[search,setSearch]=(0,import_react58.useState)(JSON.parse((0,import_core108.stringify)(props.search))),[editingIndex,setEditingIndex]=(0,import_react58.useState)(-1),searchRef=(0,import_react58.useRef)(search);searchRef.current=search,(0,import_react58.useEffect)(()=>{setSearch(JSON.parse((0,import_core108.stringify)(props.search)))},[props.search]);function onAddFilter(filter){setSearch(addFilter(searchRef.current,filter.code,filter.operator,filter.value))}if(!props.visible)return null;let resourceType=props.search.resourceType,searchParams=(0,import_core108.getSearchParameters)(resourceType)??{},filters=search.filters||[];return(0,import_jsx_runtime90.jsxs)(import_core107.Modal,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:[(0,import_jsx_runtime90.jsx)("div",{children:(0,import_jsx_runtime90.jsxs)("table",{children:[(0,import_jsx_runtime90.jsxs)("colgroup",{children:[(0,import_jsx_runtime90.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:200}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:380}}),(0,import_jsx_runtime90.jsx)("col",{style:{width:120}})]}),(0,import_jsx_runtime90.jsx)("thead",{children:(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("th",{children:"Field"}),(0,import_jsx_runtime90.jsx)("th",{children:"Operation"}),(0,import_jsx_runtime90.jsx)("th",{children:"Value"}),(0,import_jsx_runtime90.jsx)("th",{children:"Actions"})]})}),(0,import_jsx_runtime90.jsxs)("tbody",{children:[filters.map((filter,index)=>index===editingIndex?(0,import_jsx_runtime90.jsx)(FilterRowInput,{resourceType,searchParams,defaultValue:filter,okText:"Save",onOk:newFilter=>{let newFilters=[...filters];newFilters[index]=newFilter,setSearch(setFilters(searchRef.current,newFilters)),setEditingIndex(-1)},onCancel:()=>setEditingIndex(-1)},`filter-${filter.code}-${filter.operator}-${filter.value}-input`):(0,import_jsx_runtime90.jsx)(FilterRowDisplay,{resourceType,filter,onEdit:()=>setEditingIndex(index),onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${filter.code}-${filter.operator}-${filter.value}-display`)),(0,import_jsx_runtime90.jsx)(FilterRowInput,{resourceType,searchParams,okText:"Add",onOk:onAddFilter})]})]})}),(0,import_jsx_runtime90.jsx)(import_core107.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime90.jsx)(import_core107.Button,{onClick:()=>props.onOk(searchRef.current),children:"OK"})})]})}function FilterRowDisplay(props){let{filter}=props;return(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("td",{children:buildFieldNameString(filter.code)}),(0,import_jsx_runtime90.jsx)("td",{children:getOpString(filter.operator)}),(0,import_jsx_runtime90.jsx)("td",{children:(0,import_jsx_runtime90.jsx)(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})}),(0,import_jsx_runtime90.jsxs)("td",{children:[(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onEdit,children:"Edit"}),(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onDelete,children:"Delete"})]})]})}function FilterRowInput(props){let[value,setValue]=(0,import_react58.useState)(props.defaultValue??{}),valueRef=(0,import_react58.useRef)(value);valueRef.current=value;function setFilterCode(newCode){setValue({...valueRef.current,code:newCode})}function setFilterOperator(newOperator){setValue({...valueRef.current,operator:newOperator})}function setFilterValue(newFilterValue){setValue({...valueRef.current,value:newFilterValue})}let searchParam=props.searchParams[value.code],operators=searchParam&&getSearchOperators(searchParam);return(0,import_jsx_runtime90.jsxs)("tr",{children:[(0,import_jsx_runtime90.jsx)("td",{children:(0,import_jsx_runtime90.jsx)(import_core107.NativeSelect,{"data-testid":"filter-field",defaultValue:valueRef.current.code,onChange:e=>setFilterCode(e.currentTarget.value),data:["",...Object.keys(props.searchParams).map(param=>({value:param,label:buildFieldNameString(param)}))]})}),(0,import_jsx_runtime90.jsx)("td",{children:operators&&(0,import_jsx_runtime90.jsx)(import_core107.NativeSelect,{"data-testid":"filter-operation",defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),(0,import_jsx_runtime90.jsx)("td",{children:searchParam&&value.operator&&(0,import_jsx_runtime90.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),(0,import_jsx_runtime90.jsxs)("td",{children:[value.code&&value.operator&&(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:()=>{props.onOk(valueRef.current),setValue({})},children:props.okText}),props.onCancel&&(0,import_jsx_runtime90.jsx)(import_core107.Button,{size:"compact-md",variant:"outline",onClick:props.onCancel,children:"Cancel"})]})]})}var import_core109=require("@mantine/core"),import_react59=require("react");var import_jsx_runtime91=require("react/jsx-runtime");function SearchFilterValueDialog(props){let[value,setValue]=(0,import_react59.useState)(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return(0,import_jsx_runtime91.jsx)(import_core109.Modal,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:(0,import_jsx_runtime91.jsx)(Form,{onSubmit:onOk,children:(0,import_jsx_runtime91.jsxs)(import_core109.Grid,{children:[(0,import_jsx_runtime91.jsx)(import_core109.Grid.Col,{span:10,children:(0,import_jsx_runtime91.jsx)(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),(0,import_jsx_runtime91.jsx)(import_core109.Grid.Col,{span:2,children:(0,import_jsx_runtime91.jsx)(import_core109.Button,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}var import_core110=require("@mantine/core"),import_core111=require("@medplum/core");var import_jsx_runtime92=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_runtime92.jsx)(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):(0,import_jsx_runtime92.jsx)(import_core110.Menu.Dropdown,{children:props.searchParams.map(searchParam=>(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return(0,import_jsx_runtime92.jsx)(DateFilterSubMenu,{...props});case"number":case"quantity":return(0,import_jsx_runtime92.jsx)(NumericFilterSubMenu,{...props});case"reference":return(0,import_jsx_runtime92.jsx)(ReferenceFilterSubMenu,{...props});case"string":return(0,import_jsx_runtime92.jsx)(TextFilterSubMenu,{...props});case"token":case"uri":return(0,import_jsx_runtime92.jsx)(TokenFilterSubMenu,{...props});default:return(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.ENDS_BEFORE),children:"Before..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.STARTS_AFTER),children:"After..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Between..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT_EQUALS),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.GREATER_THAN),children:"Greater than..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.LESS_THAN),children:"Less than..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.CONTAINS),children:"Contains..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Does not contain..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function TokenFilterSubMenu(props){let{searchParam}=props;return(0,import_jsx_runtime92.jsxs)(import_core110.Menu.Dropdown,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.EQUALS),children:"Equals..."}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,import_core111.Operator.NOT),children:"Does not equal..."}),(0,import_jsx_runtime92.jsx)(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:[(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Divider,{}),(0,import_jsx_runtime92.jsx)(import_core110.Menu.Item,{leftSection:(0,import_jsx_runtime92.jsx)(IconX,{size:14}),onClick:()=>props.onClear(searchParam),children:"Clear filters"})]})}var SearchControl_default={root:"SearchControl_root",table:"SearchControl_table",tr:"SearchControl_tr",th:"SearchControl_th",control:"SearchControl_control",icon:"SearchControl_icon"};var import_core112=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_core112.getElementDefinition)(resourceType,name),exactSearchParam=(0,import_core112.getSearchParameter)(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=(0,import_core112.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_core112.getSearchParameterDetails)(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}var import_jsx_runtime93=require("react/jsx-runtime"),SearchChangeEvent=class extends Event{constructor(definition){super("change"),this.definition=definition}},SearchLoadEvent=class extends Event{constructor(response){super("load"),this.response=response}},SearchClickEvent=class extends Event{constructor(resource,browserEvent){super("click"),this.resource=resource,this.browserEvent=browserEvent}};function SearchControl(props){let medplum=a(),[loadingSchema,setLoadingSchema]=(0,import_react60.useState)(),[outcome,setOutcome]=(0,import_react60.useState)(),{search,onLoad}=props,[state,setState]=(0,import_react60.useState)({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=(0,import_react60.useRef)(state);stateRef.current=state;let total=search.total??"accurate",loadResults=(0,import_react60.useCallback)(options=>{setOutcome(void 0),medplum.search(search.resourceType,(0,import_core114.formatSearchQuery)({...search,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(reason)})},[medplum,search,total,onLoad]),refreshResults=(0,import_react60.useCallback)(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);(0,import_react60.useEffect)(()=>{loadResults()},[loadResults]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...stateRef.current.selected};checked?newSelected[id]=!0:delete newSelected[id],setState({...stateRef.current,selected:newSelected})}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},searchResponse=stateRef.current.searchResponse;checked&&searchResponse?.entry&&searchResponse.entry.forEach(entry=>{entry.resource?.id&&(newSelected[entry.resource.id]=!0)}),setState({...stateRef.current,selected:newSelected})}function isAllSelected(){let state2=stateRef.current;if(!state2.searchResponse?.entry||state2.searchResponse.entry.length===0)return!1;for(let e of state2.searchResponse.entry)if(e.resource?.id&&!state2.selected[e.resource.id])return!1;return!0}function emitSearchChange(newSearch){props.onChange&&props.onChange(new SearchChangeEvent(newSearch))}function handleRowClick(e,resource){if(isCheckboxCell(e.target)||e.button===2)return;killEvent(e);let isAux=e.button===1||e.ctrlKey||e.metaKey;!isAux&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),isAux&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e))}function isExportPassed(){return!!(props.onExport??props.onExportCsv??props.onExportTransactionBundle)}if((0,import_react60.useEffect)(()=>{setLoadingSchema(props.search.resourceType),medplum.requestSchema(props.search.resourceType).catch(console.error).finally(()=>setLoadingSchema(void 0))},[medplum,props.search.resourceType]),!(0,import_core114.isDataTypeLoaded)(props.search.resourceType)||loadingSchema===props.search.resourceType)return(0,import_jsx_runtime93.jsx)(import_core113.Center,{style:{width:"100%",height:"100%"},children:(0,import_jsx_runtime93.jsx)(import_core113.Loader,{})});let checkboxColumn=props.checkboxesEnabled,fields=getFieldDefinitions(search),resourceType=search.resourceType,lastResult=state.searchResponse,resources=lastResult?.entry?.map(e=>e.resource),buttonVariant="subtle",buttonColor="gray",iconSize=16,isMobile=window.innerWidth<768;return(0,import_jsx_runtime93.jsxs)("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&(0,import_jsx_runtime93.jsxs)(import_core113.Group,{justify:"space-between",mb:"xl",children:[(0,import_jsx_runtime93.jsxs)(import_core113.Group,{gap:2,children:[(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&(0,import_jsx_runtime93.jsx)(import_core113.Button,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:(0,import_jsx_runtime93.jsx)(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),(0,import_jsx_runtime93.jsxs)(import_core113.Group,{gap:2,children:[lastResult&&(0,import_jsx_runtime93.jsxs)(import_core113.Text,{size:"xs",c:"dimmed","data-testid":"count-display",children:[getStart(search,lastResult).toLocaleString(),"-",getEnd(search,lastResult).toLocaleString(),lastResult.total!==void 0&&` of ${search.total==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),(0,import_jsx_runtime93.jsx)(import_core113.ActionIcon,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:(0,import_jsx_runtime93.jsx)(IconRefresh,{size:iconSize})})]})]}),(0,import_jsx_runtime93.jsxs)(import_core113.Table,{className:SearchControl_default.table,children:[(0,import_jsx_runtime93.jsxs)(import_core113.Table.Thead,{children:[(0,import_jsx_runtime93.jsxs)(import_core113.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{children:(0,import_jsx_runtime93.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_runtime93.jsx)(import_core113.Table.Th,{children:(0,import_jsx_runtime93.jsxs)(import_core113.Menu,{shadow:"md",width:240,position:"bottom-end",children:[(0,import_jsx_runtime93.jsx)(import_core113.Menu.Target,{children:(0,import_jsx_runtime93.jsx)(import_core113.UnstyledButton,{className:SearchControl_default.control,p:2,children:(0,import_jsx_runtime93.jsxs)(import_core113.Group,{justify:"space-between",wrap:"nowrap",children:[(0,import_jsx_runtime93.jsx)(import_core113.Text,{fw:500,children:buildFieldNameString(field.name)}),(0,import_jsx_runtime93.jsx)(import_core113.Center,{className:SearchControl_default.icon,children:(0,import_jsx_runtime93.jsx)(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),(0,import_jsx_runtime93.jsx)(SearchPopupMenu,{search:props.search,searchParams:field.searchParams,onPrompt:(searchParam,filter)=>{setState({...stateRef.current,filterDialogVisible:!0,filterDialogSearchParam:searchParam,filterDialogFilter:filter})},onChange:result=>{emitSearchChange(result)}})]})},field.name))]}),!props.hideFilters&&(0,import_jsx_runtime93.jsxs)(import_core113.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{}),fields.map(field=>(0,import_jsx_runtime93.jsx)(import_core113.Table.Th,{children:field.searchParams&&(0,import_jsx_runtime93.jsx)(FilterDescription,{resourceType,searchParams:field.searchParams,filters:props.search.filters})},field.name))]})]}),(0,import_jsx_runtime93.jsx)(import_core113.Table.Tbody,{children:resources?.map(resource=>resource&&(0,import_jsx_runtime93.jsxs)(import_core113.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_runtime93.jsx)(import_core113.Table.Td,{children:(0,import_jsx_runtime93.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_runtime93.jsx)(import_core113.Table.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),resources?.length===0&&(0,import_jsx_runtime93.jsx)(Container,{children:(0,import_jsx_runtime93.jsx)(import_core113.Center,{style:{height:150},children:(0,import_jsx_runtime93.jsx)(import_core113.Text,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult&&(0,import_jsx_runtime93.jsx)(import_core113.Center,{m:"md",p:"md",children:(0,import_jsx_runtime93.jsx)(import_core113.Pagination,{value:getPage(search),total:getTotalPages(search,lastResult),onChange:newPage=>emitSearchChange(setPage(search,newPage)),getControlProps:control=>{switch(control){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),outcome&&(0,import_jsx_runtime93.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime93.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),(0,import_jsx_runtime93.jsx)(SearchFieldEditor,{search:props.search,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchFilterEditor,{search:props.search,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),(0,import_jsx_runtime93.jsx)(SearchFilterValueDialog,{visible:stateRef.current.filterDialogVisible,title:state.filterDialogSearchParam?.code?buildFieldNameString(state.filterDialogSearchParam.code):"",resourceType,searchParam:state.filterDialogSearchParam,filter:state.filterDialogFilter,defaultValue:"",onOk:filter=>{emitSearchChange(addFilter(props.search,filter.code,filter.operator,filter.value)),setState({...stateRef.current,filterDialogVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterDialogVisible:!1})}},state.filterDialogSearchParam?.code)]})}var MemoizedSearchControl=(0,import_react60.memo)(SearchControl);function FilterDescription(props){let filters=(props.filters??[]).filter(f2=>props.searchParams.find(p=>p.code===f2.code));return filters.length===0?(0,import_jsx_runtime93.jsx)("span",{children:"no filters"}):(0,import_jsx_runtime93.jsx)(import_jsx_runtime93.Fragment,{children:filters.map(filter=>(0,import_jsx_runtime93.jsxs)("div",{children:[getOpString(filter.operator),"\xA0",(0,import_jsx_runtime93.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_core114.DEFAULT_SEARCH_COUNT))+1}function getTotalPages(search,lastResult){let pageSize=search.count??import_core114.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_runtime94=require("react/jsx-runtime");function FhirPathTable(props){let medplum=a(),[schemaLoaded,setSchemaLoaded]=(0,import_react61.useState)(!1),[outcome,setOutcome]=(0,import_react61.useState)(),{query,fields}=props,[response,setResponse]=(0,import_react61.useState)(),[selected,setSelected]=(0,import_react61.useState)({}),responseRef=(0,import_react61.useRef)();responseRef.current=response;let selectedRef=(0,import_react61.useRef)({});selectedRef.current=selected,(0,import_react61.useEffect)(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome((0,import_core116.normalizeOperationOutcome)(err)))},[medplum,query]);function handleSingleCheckboxClick(e,id){e.stopPropagation();let checked=e.target.checked,newSelected={...selectedRef.current};checked?newSelected[id]=!0:delete newSelected[id],setSelected(newSelected)}function handleAllCheckboxClick(e){e.stopPropagation();let checked=e.target.checked,newSelected={},resources=responseRef.current?.data.ResourceList;checked&&resources&&resources.forEach(resource=>{resource.id&&(newSelected[resource.id]=!0)}),setSelected(newSelected)}function isAllSelected(){let resources=responseRef.current?.data.ResourceList;if(!resources||resources.length===0)return!1;for(let resource of resources)if(resource.id&&!selectedRef.current[resource.id])return!1;return!0}function handleRowClick(e,resource){isCheckboxCell(e.target)||(killEvent(e),e.button!==1&&props.onClick&&props.onClick(new SearchClickEvent(resource,e)),e.button===1&&props.onAuxClick&&props.onAuxClick(new SearchClickEvent(resource,e)))}if((0,import_react61.useEffect)(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return(0,import_jsx_runtime94.jsx)(import_core115.Loader,{});let checkboxColumn=props.checkboxesEnabled;return(0,import_jsx_runtime94.jsxs)("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[(0,import_jsx_runtime94.jsxs)(import_core115.Table,{children:[(0,import_jsx_runtime94.jsx)(import_core115.Table.Thead,{children:(0,import_jsx_runtime94.jsxs)(import_core115.Table.Tr,{children:[checkboxColumn&&(0,import_jsx_runtime94.jsx)(import_core115.Table.Th,{children:(0,import_jsx_runtime94.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_runtime94.jsx)(import_core115.Table.Th,{children:field.name},field.name))]})}),(0,import_jsx_runtime94.jsx)(import_core115.Table.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&(0,import_jsx_runtime94.jsxs)(import_core115.Table.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&(0,import_jsx_runtime94.jsx)(import_core115.Table.Td,{children:(0,import_jsx_runtime94.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_runtime94.jsx)(import_core115.Table.Td,{children:(0,import_jsx_runtime94.jsx)(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&(0,import_jsx_runtime94.jsx)("div",{"data-testid":"empty-search",children:"No results"}),outcome&&(0,import_jsx_runtime94.jsx)("div",{"data-testid":"search-error",children:(0,import_jsx_runtime94.jsx)("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&(0,import_jsx_runtime94.jsx)(import_core115.Button,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=(0,import_react61.memo)(FhirPathTable);var import_jsx_runtime95=require("react/jsx-runtime");function Logo(props){return(0,import_jsx_runtime95.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:props.size,height:props.size},children:[(0,import_jsx_runtime95.jsx)("title",{children:"Medplum Logo"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#946af9",d:"M311 63c-17 0-33 4-48 11-16-7-32-11-49-11-87 0-158 96-158 214s71 214 158 214c17 0 33-4 49-11 15 7 31 11 48 11 87 0 158-96 158-214S398 63 311 63z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#7857c5",d:"M231 489l-17 2c-87 0-158-96-158-214S127 63 214 63l17 1c-39 12-70 102-70 213s31 201 70 212z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),(0,import_jsx_runtime95.jsx)("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}var import_core119=require("@mantine/core");var import_core117=require("@mantine/core"),import_core118=require("@medplum/core");var import_jsx_runtime96=require("react/jsx-runtime");function MeasureReportGroupDisplay(props){let{group}=props;return(0,import_jsx_runtime96.jsx)(import_core117.Paper,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:(0,import_jsx_runtime96.jsxs)(import_core117.Group,{children:[group.measureScore&&(0,import_jsx_runtime96.jsx)(MeasureScore,{group}),!group.measureScore&&(0,import_jsx_runtime96.jsx)(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return(0,import_jsx_runtime96.jsxs)(import_jsx_runtime96.Fragment,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Text,{fz:"md",fw:500,mb:8,children:measure.title}),(0,import_jsx_runtime96.jsx)(import_core117.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_core118.formatCodeableConcept)(p.code)==="numerator"),denominator=populations?.find(p=>(0,import_core118.formatCodeableConcept)(p.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return(0,import_jsx_runtime96.jsxs)(import_core117.Box,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:"Not Applicable"}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return(0,import_jsx_runtime96.jsxs)(import_core117.Box,{children:[(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:"Insufficient Data"}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Numerator: ${numeratorCount}`}),(0,import_jsx_runtime96.jsx)(import_core117.Text,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return(0,import_jsx_runtime96.jsx)(import_core117.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:(0,import_jsx_runtime96.jsx)(import_core117.Flex,{justify:"center",children:(0,import_jsx_runtime96.jsxs)(import_core117.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_runtime96.jsx)(import_jsx_runtime96.Fragment,{children:unit==="%"?(0,import_jsx_runtime96.jsx)(import_core117.RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:(0,import_jsx_runtime96.jsx)(import_core117.Flex,{justify:"center",children:(0,import_jsx_runtime96.jsx)(import_core117.Text,{fw:700,fz:18,children:(0,import_jsx_runtime96.jsx)(QuantityDisplay,{value:group.measureScore})})})}):(0,import_jsx_runtime96.jsx)(import_core117.Flex,{h:120,align:"center",children:(0,import_jsx_runtime96.jsx)(import_core117.Title,{order:3,children:(0,import_jsx_runtime96.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_runtime97=require("react/jsx-runtime");function MeasureReportDisplay(props){let report=pe(props.measureReport),[measure]=Ce("Measure",{url:report?.measure});return report?(0,import_jsx_runtime97.jsxs)(import_core119.Box,{children:[measure&&(0,import_jsx_runtime97.jsx)(MeasureTitle,{measure}),(0,import_jsx_runtime97.jsx)(import_core119.SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>(0,import_jsx_runtime97.jsx)(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}var import_core120=require("@mantine/core");var import_react62=require("react"),import_jsx_runtime98=require("react/jsx-runtime");function NotificationIcon(props){let medplum=a(),{label,resourceType,countCriteria,subscriptionCriteria,onClick}=props,[unreadCount,setUnreadCount]=(0,import_react62.useState)(0),updateCount=(0,import_react62.useCallback)(cache=>{medplum.search(resourceType,countCriteria,{cache}).then(result=>setUnreadCount(result.total)).catch(console.error)},[medplum,resourceType,countCriteria]);(0,import_react62.useEffect)(()=>{updateCount("default")},[updateCount]),Oe(subscriptionCriteria,()=>{updateCount("reload")});let icon=(0,import_jsx_runtime98.jsx)(import_core120.Tooltip,{label,children:(0,import_jsx_runtime98.jsx)(import_core120.ActionIcon,{variant:"subtle",color:"gray",size:"lg","aria-label":label,onClick,children:props.iconComponent})});return unreadCount>0?(0,import_jsx_runtime98.jsx)(import_core120.Indicator,{inline:!0,label:unreadCount.toLocaleString(),size:16,offset:2,position:"bottom-end",color:"red",children:icon}):icon}var import_core121=require("@mantine/core"),import_core122=require("@medplum/core");var import_jsx_runtime99=require("react/jsx-runtime");function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:(0,import_jsx_runtime99.jsx)(import_core121.Alert,{icon:(0,import_jsx_runtime99.jsx)(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>(0,import_jsx_runtime99.jsx)("div",{"data-testid":"text-field-error",children:(0,import_core122.operationOutcomeIssueToString)(issue)},issue.details?.text))})}var import_core140=require("@mantine/core"),import_core141=require("@medplum/core");var import_react72=require("react");var import_core127=require("@mantine/core"),import_hooks2=require("@mantine/hooks");var import_react64=require("react");var import_core123=require("@mantine/core"),import_core124=require("@medplum/core"),import_react63=require("react");var import_jsx_runtime100=require("react/jsx-runtime"),HTTP="http://",PATIENT_ALLERGY_PROFILE=import_core124.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-allergyintolerance";function AllergyDialog(props){let{patient,encounter,allergy,onSubmit}=props,[code,setCode]=(0,import_react63.useState)(allergy?.code),[clinicalStatus,setClinicalStatus]=(0,import_react63.useState)(allergy?.clinicalStatus),handleSubmit=(0,import_react63.useCallback)(formData=>{onSubmit((0,import_core124.addProfileToResource)({...allergy,resourceType:"AllergyIntolerance",patient:(0,import_core124.createReference)(patient),encounter:encounter?(0,import_core124.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_runtime100.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime100.jsxs)(import_core123.Stack,{children:[(0,import_jsx_runtime100.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",defaultValue:allergy?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime100.jsx)(import_core123.TextInput,{name:"reaction",label:"Reaction",defaultValue:allergy?.reaction?.[0]?.manifestation?.[0]?.text}),(0,import_jsx_runtime100.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Clinical Status",path:"AllergyIntolerance.clinicalStatus",binding:import_core124.HTTP_HL7_ORG+"/fhir/ValueSet/allergyintolerance-clinical",defaultValue:allergy?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime100.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Onset",defaultValue:allergy?.recordedDate}),(0,import_jsx_runtime100.jsx)(import_core123.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime100.jsx)(import_core123.Button,{type:"submit",children:"Save"})})]})},allergy?.id)}var import_core125=require("@mantine/core"),import_core126=require("@medplum/core");var import_jsx_runtime101=require("react/jsx-runtime");function ConceptBadge(props){let{resource,onEdit}=props,rightSection;return onEdit&&(rightSection=(0,import_jsx_runtime101.jsx)(IconEdit,{"aria-label":`Edit ${(0,import_core126.getDisplayString)(resource)}`,size:12,onClick:e=>{killEvent(e),onEdit(resource)}})),(0,import_jsx_runtime101.jsx)(MedplumLink,{to:resource,children:(0,import_jsx_runtime101.jsx)(import_core125.Badge,{variant:"light",maw:"100%",rightSection,children:(0,import_core126.getDisplayString)(resource)})},resource.id)}var import_jsx_runtime102=require("react/jsx-runtime");function Allergies(props){let medplum=a(),{patient,encounter}=props,[allergies,setAllergies]=(0,import_react64.useState)(props.allergies),[opened,{open,close}]=(0,import_hooks2.useDisclosure)(!1),[editAllergy,setEditAllergy]=(0,import_react64.useState)(),handleSubmit=(0,import_react64.useCallback)(async allergy=>{if(allergy.id){let updatedAllergy=await medplum.updateResource(allergy);setAllergies(allergies.map(a2=>a2.id===updatedAllergy.id?updatedAllergy:a2))}else{let newAllergy=await medplum.createResource(allergy);setAllergies([...allergies,newAllergy])}setEditAllergy(void 0),close()},[medplum,allergies,close]);return(0,import_jsx_runtime102.jsxs)(import_jsx_runtime102.Fragment,{children:[(0,import_jsx_runtime102.jsxs)(import_core127.Group,{justify:"space-between",children:[(0,import_jsx_runtime102.jsx)(import_core127.Text,{fz:"md",fw:700,children:"Allergies"}),(0,import_jsx_runtime102.jsx)(import_core127.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditAllergy(void 0),open()},children:"+ Add"})]}),allergies.length>0?(0,import_jsx_runtime102.jsx)(import_core127.Box,{children:allergies.map(allergy=>(0,import_jsx_runtime102.jsx)(ConceptBadge,{resource:allergy,onEdit:a2=>{setEditAllergy(a2),open()}},allergy.id))}):(0,import_jsx_runtime102.jsx)(import_core127.Text,{children:"(none)"}),(0,import_jsx_runtime102.jsx)(import_core127.Modal,{opened,onClose:close,title:editAllergy?"Edit Allergy":"Add Allergy",children:(0,import_jsx_runtime102.jsx)(AllergyDialog,{patient,encounter,allergy:editAllergy,onSubmit:handleSubmit})})]})}var import_core130=require("@mantine/core"),import_hooks3=require("@mantine/hooks");var import_react66=require("react");var import_core128=require("@mantine/core"),import_core129=require("@medplum/core"),import_react65=require("react");var import_jsx_runtime103=require("react/jsx-runtime"),HTTP2="http://",statusValues=["active","stopped","on-hold","cancelled","completed","entered-in-error","draft","unknown"];function MedicationDialog(props){let me=W(),{patient,encounter,medication,onSubmit}=props,[code,setCode]=(0,import_react65.useState)(medication?.medicationCodeableConcept),handleSubmit=(0,import_react65.useCallback)(formData=>{if(!me)throw new Error("Not signed in");onSubmit((0,import_core129.addProfileToResource)({...medication,resourceType:"MedicationRequest",status:formData.status,intent:medication?.intent??"order",encounter:medication?.encounter??(encounter&&(0,import_core129.createReference)(encounter)),requester:medication?.requester??(0,import_core129.createReference)(me),medicationCodeableConcept:code,subject:(0,import_core129.createReference)(patient)},import_core129.HTTP_HL7_ORG+"/fhir/us/core/StructureDefinition/us-core-medicationrequest"))},[me,onSubmit,medication,encounter,code,patient]);return me?(0,import_jsx_runtime103.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime103.jsxs)(import_core128.Stack,{children:[(0,import_jsx_runtime103.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",defaultValue:medication?.medicationCodeableConcept,onChange:request=>setCode(request),outcome:void 0}),(0,import_jsx_runtime103.jsx)(import_core128.Radio.Group,{name:"status",label:"Request Status",required:!0,defaultValue:medication?.status,children:statusValues.map(sv=>(0,import_jsx_runtime103.jsx)(import_core128.Radio,{value:sv,label:sv,my:"xs",required:!0},sv))}),(0,import_jsx_runtime103.jsx)(import_core128.Group,{justify:"flex-end",gap:4,children:(0,import_jsx_runtime103.jsx)(import_core128.Button,{type:"submit",children:"Save"})})]})}):(0,import_jsx_runtime103.jsx)(import_core128.Alert,{color:"red",children:"Not signed in"})}var import_jsx_runtime104=require("react/jsx-runtime");function Medications(props){let medplum=a(),[medicationRequests,setMedicationRequests]=(0,import_react66.useState)(props.medicationRequests),[editMedication,setEditMedication]=(0,import_react66.useState)(),[opened,{open,close}]=(0,import_hooks3.useDisclosure)(!1),handleSubmit=(0,import_react66.useCallback)(async medication=>{if(medication.id){let updatedMedication=await medplum.updateResource(medication);setMedicationRequests(medicationRequests.map(m2=>m2.id===updatedMedication.id?updatedMedication:m2))}else{let newMedication=await medplum.createResource(medication);setMedicationRequests([newMedication,...medicationRequests])}setEditMedication(void 0),close()},[medplum,medicationRequests,close]);return(0,import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment,{children:[(0,import_jsx_runtime104.jsxs)(import_core130.Group,{justify:"space-between",children:[(0,import_jsx_runtime104.jsx)(import_core130.Text,{fz:"md",fw:700,children:"Medications"}),(0,import_jsx_runtime104.jsx)(import_core130.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditMedication(void 0),open()},children:"+ Add"})]}),medicationRequests.length>0?(0,import_jsx_runtime104.jsx)(import_core130.Box,{children:medicationRequests.map(request=>(0,import_jsx_runtime104.jsx)(ConceptBadge,{resource:request,onEdit:mr=>{setEditMedication(mr),open()}},request.id))}):(0,import_jsx_runtime104.jsx)(import_core130.Text,{children:"(none)"}),(0,import_jsx_runtime104.jsx)(import_core130.Modal,{opened,onClose:close,title:editMedication?"Edit Medication":"Add Medication",children:(0,import_jsx_runtime104.jsx)(MedicationDialog,{patient:props.patient,encounter:props.encounter,medication:editMedication,onSubmit:handleSubmit})})]})}var import_core133=require("@mantine/core"),import_hooks4=require("@mantine/hooks");var import_react68=require("react");var import_core131=require("@mantine/core"),import_core132=require("@medplum/core"),import_react67=require("react");var import_jsx_runtime105=require("react/jsx-runtime");function ConditionDialog(props){let{patient,encounter,condition,onSubmit}=props,[code,setCode]=(0,import_react67.useState)(condition?.code),[clinicalStatus,setClinicalStatus]=(0,import_react67.useState)(condition?.clinicalStatus),handleSubmit=(0,import_react67.useCallback)(formData=>{let updatedCondition=(0,import_core132.addProfileToResource)({...condition,resourceType:"Condition",category:[{coding:[{system:import_core132.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/condition-category",code:"problem-list-item",display:"Problem List Item"}],text:"Problem List Item"}],subject:(0,import_core132.createReference)(patient),encounter:encounter&&(0,import_core132.createReference)(encounter),code,clinicalStatus,onsetDateTime:formData.onsetDateTime?convertLocalToIso(formData.onsetDateTime):void 0},import_core132.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_runtime105.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime105.jsxs)(import_core131.Stack,{children:[(0,import_jsx_runtime105.jsx)(CodeableConceptInput,{name:"code",label:"Problem",path:"Condition.code","data-autofocus":!0,binding:import_core132.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-condition-code",defaultValue:condition?.code,onChange:code2=>setCode(code2),outcome:void 0}),(0,import_jsx_runtime105.jsx)(CodeableConceptInput,{name:"clinicalStatus",label:"Status",path:"Condition.clinicalStatus",binding:import_core132.HTTP_HL7_ORG+"/fhir/ValueSet/condition-clinical",defaultValue:condition?.clinicalStatus,onChange:clinicalStatus2=>setClinicalStatus(clinicalStatus2),outcome:void 0}),(0,import_jsx_runtime105.jsx)(DateTimeInput,{name:"onsetDateTime",label:"Dx Date",defaultValue:condition?.onsetDateTime,required:!0}),(0,import_jsx_runtime105.jsx)(import_core131.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime105.jsx)(import_core131.Button,{type:"submit",children:"Save"})})]})},condition?.id)}var import_jsx_runtime106=require("react/jsx-runtime");function ProblemList(props){let medplum=a(),{patient,encounter}=props,[problems,setProblems]=(0,import_react68.useState)(props.problems),[editCondition,setEditCondition]=(0,import_react68.useState)(),[opened,{open,close}]=(0,import_hooks4.useDisclosure)(!1),handleSubmit=(0,import_react68.useCallback)(async condition=>{if(condition.id){let updatedCondition=await medplum.updateResource(condition);setProblems(problems.map(p=>p.id===updatedCondition.id?updatedCondition:p))}else{let newCondition=await medplum.createResource(condition);setProblems([...problems,newCondition])}setEditCondition(void 0),close()},[medplum,problems,close]);return(0,import_jsx_runtime106.jsxs)(import_jsx_runtime106.Fragment,{children:[(0,import_jsx_runtime106.jsxs)(import_core133.Group,{justify:"space-between",children:[(0,import_jsx_runtime106.jsx)(import_core133.Text,{fz:"md",fw:700,children:"Problem List"}),(0,import_jsx_runtime106.jsx)(import_core133.Anchor,{component:"button",onClick:e=>{killEvent(e),setEditCondition(void 0),open()},children:"+ Add"})]}),problems.length>0?(0,import_jsx_runtime106.jsx)(import_core133.Grid,{gutter:"xs",children:problems.map(problem=>(0,import_jsx_runtime106.jsxs)(import_react68.Fragment,{children:[(0,import_jsx_runtime106.jsx)(import_core133.Grid.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),(0,import_jsx_runtime106.jsx)(import_core133.Grid.Col,{span:10,children:(0,import_jsx_runtime106.jsx)(ConceptBadge,{resource:problem,onEdit:c=>{setEditCondition(c),open()}},problem.id)})]},problem.id))}):(0,import_jsx_runtime106.jsx)(import_core133.Text,{children:"(none)"}),(0,import_jsx_runtime106.jsx)(import_core133.Modal,{opened,onClose:close,title:editCondition?"Edit Problem":"Add Problem",children:(0,import_jsx_runtime106.jsx)(ConditionDialog,{patient,encounter,condition:editCondition,onSubmit:handleSubmit})})]})}var import_core134=require("@mantine/core"),import_hooks5=require("@mantine/hooks"),import_core135=require("@medplum/core");var import_react69=require("react");var import_jsx_runtime107=require("react/jsx-runtime"),NULLFLAVOR=import_core135.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_core135.SNOMED,20430005:import_core135.SNOMED,42035005:import_core135.SNOMED,OTH:NULLFLAVOR,UNK:NULLFLAVOR,ASKU:NULLFLAVOR};function SexualOrientation(props){let medplum=a(),{patient,encounter}=props,[sexualOrientation,setSexualOrientation]=(0,import_react69.useState)(props.sexualOrientation),[opened,{open,close}]=(0,import_hooks5.useDisclosure)(!1),handleSubmit=(0,import_react69.useCallback)(formData=>{let code=formData.sexualOrientation;medplum.createResource({resourceType:"Observation",meta:{profile:[import_core135.HTTP_HL7_ORG+"/fhir/us/core/ValueSet/us-core-sexual-orientation"]},status:"final",category:[{coding:[{system:import_core135.HTTP_TERMINOLOGY_HL7_ORG+"/CodeSystem/observation-category",code:"social-history",display:"Social History"}],text:"Social History"}],code:{coding:[{system:import_core135.LOINC,code:"76690-7",display:"Sexual orientation"}],text:"Sexual orientation"},subject:(0,import_core135.createReference)(patient),encounter:encounter?(0,import_core135.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_runtime107.jsxs)(import_jsx_runtime107.Fragment,{children:[(0,import_jsx_runtime107.jsxs)(import_core134.Group,{justify:"space-between",children:[(0,import_jsx_runtime107.jsx)(import_core134.Text,{fz:"md",fw:700,children:"Sexual Orientation"}),(0,import_jsx_runtime107.jsx)(import_core134.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),sexualOrientation?.valueCodeableConcept?(0,import_jsx_runtime107.jsx)(import_core134.Box,{children:(0,import_jsx_runtime107.jsx)(import_core134.Badge,{variant:"light",children:(0,import_jsx_runtime107.jsx)(CodeableConceptDisplay,{value:sexualOrientation.valueCodeableConcept})})}):(0,import_jsx_runtime107.jsx)(import_core134.Text,{children:"(none)"}),(0,import_jsx_runtime107.jsx)(import_core134.Modal,{opened,onClose:close,title:"Set Sexual Orientation",children:(0,import_jsx_runtime107.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime107.jsxs)(import_core134.Stack,{children:[(0,import_jsx_runtime107.jsx)(import_core134.Radio.Group,{name:"sexualOrientation",label:"Sexual Orientation",required:!0,children:Object.entries(CodesToText).map(([code,text])=>(0,import_jsx_runtime107.jsx)(import_core134.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime107.jsx)(import_core134.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime107.jsx)(import_core134.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core136=require("@mantine/core"),import_hooks6=require("@mantine/hooks"),import_core137=require("@medplum/core");var import_react70=require("react");var import_jsx_runtime108=require("react/jsx-runtime"),smokingStatusOptions={266919005:"Never smoked tobacco",266927001:"Tobacco smoking consumption unknown","428041000124106":"Occasional tobacco smoker","428061000124105":"Light tobacco smoker","428071000124103":"Heavy tobacco smoker",449868002:"Smokes tobacco daily",77176002:"Smoker",8517006:"Ex-smoker"};function SmokingStatus(props){let medplum=a(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=(0,import_react70.useState)(props.smokingStatus),[opened,{open,close}]=(0,import_hooks6.useDisclosure)(!1),handleSubmit=(0,import_react70.useCallback)(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[import_core137.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_core137.LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:(0,import_core137.createReference)(patient),encounter:encounter?(0,import_core137.createReference)(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:import_core137.SNOMED,version:import_core137.SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,patient,encounter,close]);return(0,import_jsx_runtime108.jsxs)(import_jsx_runtime108.Fragment,{children:[(0,import_jsx_runtime108.jsxs)(import_core136.Group,{justify:"space-between",children:[(0,import_jsx_runtime108.jsx)(import_core136.Text,{fz:"md",fw:700,children:"Smoking Status"}),(0,import_jsx_runtime108.jsx)(import_core136.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?(0,import_jsx_runtime108.jsx)(import_core136.Box,{children:(0,import_jsx_runtime108.jsx)(import_core136.Badge,{variant:"light",children:(0,import_jsx_runtime108.jsx)(CodeableConceptDisplay,{value:smokingStatus.valueCodeableConcept})})}):(0,import_jsx_runtime108.jsx)(import_core136.Text,{children:"(none)"}),(0,import_jsx_runtime108.jsx)(import_core136.Modal,{opened,onClose:close,title:"Set Smoking Status",children:(0,import_jsx_runtime108.jsx)(Form,{onSubmit:handleSubmit,children:(0,import_jsx_runtime108.jsxs)(import_core136.Stack,{children:[(0,import_jsx_runtime108.jsx)(import_core136.Radio.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>(0,import_jsx_runtime108.jsx)(import_core136.Radio,{value:code,label:text,my:"xs"},code))}),(0,import_jsx_runtime108.jsx)(import_core136.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime108.jsx)(import_core136.Button,{type:"submit",children:"Save"})})]})})})]})}var import_core139=require("@mantine/core"),import_hooks7=require("@mantine/hooks");var import_react71=require("react");var import_core138=require("@medplum/core");function getObservationValue(observations,code){return observations.find(o=>o.code?.coding?.[0].code===code)?.valueQuantity}function getCompoundObservationValue(observations,code,innerCode){return observations.find(o=>o.code?.coding?.[0].code===code)?.component?.find(c=>c.code?.coding?.[0].code===innerCode)?.valueQuantity}function createObservation(patient,encounter,code,title,valueQuantity){if(isValidNumber(valueQuantity.value))return{...createBaseObservation(patient,encounter,code,title),valueQuantity}}function createCompoundObservation(patient,encounter,code,title,components){let component=components.filter(c=>isValidNumber(c.valueQuantity?.value));if(component.length!==0)return{...createBaseObservation(patient,encounter,code,title),component}}function createBaseObservation(patient,encounter,code,title){return{resourceType:"Observation",status:"preliminary",subject:(0,import_core138.createReference)(patient),encounter:encounter?(0,import_core138.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_core138.LOINC}],text:display}}function createQuantity(value,unit){return{value,system:import_core138.UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}var import_jsx_runtime109=require("react/jsx-runtime"),LOINC_CODES={bloodPressure:{code:"85354-9",title:"Blood Pressure",unit:"mm[Hg]"},heartRate:{code:"8867-4",title:"Heart Rate",unit:"/min"},bodyTemperature:{code:"8310-5",title:"Body Temperature",unit:"Cel"},respiratoryRate:{code:"9279-1",title:"Respiratory Rate",unit:"/min"},height:{code:"8302-2",title:"height",unit:"cm"},weight:{code:"29463-7",title:"weight",unit:"kg"},bmi:{code:"39156-5",title:"BMI",unit:"kg/m2"},oxygen:{code:"2708-6",title:"Oxygen",unit:"%"},headCircumference:{code:"9843-4",title:"Head Circumference",unit:"cm"}},SYSTOLIC="8480-6",DIASTOLIC="8462-4";function Vitals(props){let medplum=a(),{patient,encounter}=props,[vitals,setVitals]=(0,import_react71.useState)(props.vitals),[opened,{open,close}]=(0,import_hooks7.useDisclosure)(!1),handleSubmit=(0,import_react71.useCallback)(formData=>{let newObservations=Object.entries(LOINC_CODES).map(([name,meta])=>name==="bloodPressure"?createCompoundObservation(patient,encounter,meta.code,meta.title,[{code:createLoincCode(SYSTOLIC,"Systolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.systolic),"mm[Hg]")},{code:createLoincCode(DIASTOLIC,"Diastolic blood pressure"),valueQuantity:createQuantity(parseFloat(formData.diastolic),"mm[Hg]")}]):createObservation(patient,encounter,meta.code,meta.title,createQuantity(parseFloat(formData[name]),meta.unit))).filter(Boolean);Promise.all(newObservations.map(obs=>medplum.createResource(obs))).then(newVitals=>setVitals([...newVitals,...vitals])).catch(console.error),close()},[medplum,patient,encounter,vitals,close]);return(0,import_jsx_runtime109.jsxs)(import_jsx_runtime109.Fragment,{children:[(0,import_jsx_runtime109.jsxs)(import_core139.Group,{justify:"space-between",children:[(0,import_jsx_runtime109.jsx)(import_core139.Text,{fz:"md",fw:700,children:"Vitals"}),(0,import_jsx_runtime109.jsx)(import_core139.Anchor,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),(0,import_jsx_runtime109.jsxs)(import_core139.Grid,{children:[(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,SYSTOLIC)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,DIASTOLIC)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.heartRate.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bodyTemperature.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.respiratoryRate.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.height.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.weight.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bmi.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.oxygen.code)})}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),(0,import_jsx_runtime109.jsx)(import_core139.Grid.Col,{span:3,children:(0,import_jsx_runtime109.jsx)(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.headCircumference.code)})})]}),(0,import_jsx_runtime109.jsx)(import_core139.Modal,{opened,onClose:close,title:"Add Vitals",children:(0,import_jsx_runtime109.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime109.jsxs)(import_core139.Stack,{children:[(0,import_jsx_runtime109.jsxs)(import_core139.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"diastolic",label:"BP Dias"})]}),(0,import_jsx_runtime109.jsxs)(import_core139.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"heartRate",label:"HR"}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"bodyTemperature",label:"Temp"})]}),(0,import_jsx_runtime109.jsxs)(import_core139.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"respiratoryRate",label:"RR"}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"height",label:"height"})]}),(0,import_jsx_runtime109.jsxs)(import_core139.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"weight",label:"Wt"}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"bmi",label:"BMI"})]}),(0,import_jsx_runtime109.jsxs)(import_core139.Group,{grow:!0,children:[(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"oxygen",label:"O2"}),(0,import_jsx_runtime109.jsx)(import_core139.TextInput,{name:"headCircumference",label:"HC"})]}),(0,import_jsx_runtime109.jsx)(import_core139.Textarea,{name:"notes",label:"Notes"})]}),(0,import_jsx_runtime109.jsx)(import_core139.Group,{justify:"flex-end",gap:4,mt:"md",children:(0,import_jsx_runtime109.jsx)(import_core139.Button,{type:"submit",children:"Save"})})]})})]})}var import_jsx_runtime110=require("react/jsx-runtime");function getGenderIcon(patient){switch(patient?.gender){case"female":return IconGenderFemale;case"male":return IconGenderMale;default:return}}function pluralize(count,singular,plural){return count===0?`No ${plural}`:count===1?`1 ${singular}`:`${count} ${plural}`}function PatientSummary(props){let medplum=a(),{patient:propsPatient,background,appointmentsUrl:propsAppointmentsUrl,encountersUrl:propsEncountersUrl,...cardProps}=props,patient=pe(propsPatient),[medicalData,setMedicalData]=(0,import_react72.useState)(),appointmentsUrl="appointmentsUrl"in props?propsAppointmentsUrl:"#",encountersUrl="encountersUrl"in props?propsEncountersUrl:"#";(0,import_react72.useEffect)(()=>{let ref=`Patient/${(0,import_core141.resolveId)(propsPatient)}`,searchMeta={_count:100,_sort:"-_lastUpdated"},today=new Date().toISOString().substring(0,10);Promise.all([medplum.searchResources("AllergyIntolerance",{patient:ref,...searchMeta}),medplum.searchResources("Condition",{patient:ref,...searchMeta}),medplum.searchResources("MedicationRequest",{subject:ref,...searchMeta}),medplum.searchResources("Observation",{subject:ref,...searchMeta}),medplum.searchResources("Appointment",{patient:ref,date:`ge${today}`,status:"proposed,pending,booked",...searchMeta}),medplum.searchResources("Encounter",{subject:ref,date:`le${today}`,status:"finished",...searchMeta})]).then(results=>{let observations=results[3];setMedicalData({allergies:results[0],problems:results[1],medicationRequests:results[2],sexualOrientation:observations.find(obs=>obs.code?.coding?.[0].code==="76690-7"),smokingStatus:observations.find(obs=>obs.code?.coding?.[0].code==="72166-2"),vitals:observations.filter(obs=>obs.category?.[0]?.coding?.[0].code==="vital-signs"),appointments:results[4],encounters:results[5]})}).catch(console.error)},[medplum,propsPatient]);let links=(0,import_react72.useMemo)(()=>{let appointmentsLink=appointmentsUrl===void 0?void 0:(0,import_jsx_runtime110.jsx)(MedplumLink,{to:appointmentsUrl,children:pluralize(medicalData?.appointments?.length,"upcoming appointment","upcoming appointments")},"appt"),encountersLink=encountersUrl===void 0?void 0:(0,import_jsx_runtime110.jsx)(MedplumLink,{to:encountersUrl,children:pluralize(medicalData?.encounters?.length,"documented visit","documented visits")},"enc");return[appointmentsLink,encountersLink].filter(Boolean)},[appointmentsUrl,medicalData?.appointments?.length,medicalData?.encounters?.length,encountersUrl]);if(!patient)return null;let GenderIconComponent=getGenderIcon(patient);return(0,import_jsx_runtime110.jsxs)(import_core140.Card,{...cardProps,children:[(0,import_jsx_runtime110.jsx)(import_core140.Card.Section,{h:100,style:{background}}),(0,import_jsx_runtime110.jsx)(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),(0,import_jsx_runtime110.jsx)(import_core140.Text,{ta:"center",fz:"lg",fw:500,children:(0,import_core141.formatHumanName)(patient.name?.[0])}),patient.birthDate&&(0,import_jsx_runtime110.jsxs)(import_core140.Text,{ta:"center",fz:"xs",c:"dimmed",children:[patient.birthDate," (",(0,import_core141.calculateAgeString)(patient.birthDate),")"]}),(0,import_jsx_runtime110.jsx)(import_core140.Paper,{withBorder:!0,p:"md",my:"md",children:(0,import_jsx_runtime110.jsxs)(import_core140.Group,{wrap:"nowrap",justify:"space-evenly",children:[(0,import_jsx_runtime110.jsxs)(import_core140.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime110.jsx)(IconUserSquare,{size:24,color:"gray"}),(0,import_jsx_runtime110.jsx)(import_core140.Text,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),(0,import_jsx_runtime110.jsxs)(import_core140.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime110.jsx)(IconStethoscope,{size:24,color:"gray"}),(0,import_jsx_runtime110.jsx)(import_core140.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),GenderIconComponent&&(0,import_jsx_runtime110.jsxs)(import_core140.Flex,{justify:"center",align:"center",direction:"column",gap:0,children:[(0,import_jsx_runtime110.jsx)(GenderIconComponent,{size:24,color:"gray"}),(0,import_jsx_runtime110.jsx)(import_core140.Text,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),(0,import_jsx_runtime110.jsxs)(import_core140.Stack,{gap:"xs",children:[links.length>0&&(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[links,(0,import_jsx_runtime110.jsx)(import_core140.Divider,{})]}),medicalData&&(0,import_jsx_runtime110.jsxs)(import_jsx_runtime110.Fragment,{children:[(0,import_jsx_runtime110.jsx)(Allergies,{patient,allergies:medicalData.allergies}),(0,import_jsx_runtime110.jsx)(import_core140.Divider,{}),(0,import_jsx_runtime110.jsx)(ProblemList,{patient,problems:medicalData.problems}),(0,import_jsx_runtime110.jsx)(import_core140.Divider,{}),(0,import_jsx_runtime110.jsx)(Medications,{patient,medicationRequests:medicalData.medicationRequests}),(0,import_jsx_runtime110.jsx)(import_core140.Divider,{}),(0,import_jsx_runtime110.jsx)(SexualOrientation,{patient,sexualOrientation:medicalData.sexualOrientation}),(0,import_jsx_runtime110.jsx)(import_core140.Divider,{}),(0,import_jsx_runtime110.jsx)(SmokingStatus,{patient,smokingStatus:medicalData.smokingStatus}),(0,import_jsx_runtime110.jsx)(import_core140.Divider,{}),(0,import_jsx_runtime110.jsx)(Vitals,{patient,vitals:medicalData.vitals})]})]})]})}var import_core142=require("@medplum/core"),import_react73=require("react");var import_jsx_runtime111=require("react/jsx-runtime");function PatientTimeline(props){let loadTimelineResources=(0,import_react73.useCallback)((medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("Patient",id),medplum.search("Communication",{subject:ref,_count}),medplum.search("Device",{patient:ref,_count}),medplum.search("DeviceRequest",{patient:ref,_count}),medplum.search("DiagnosticReport",{subject:ref,_count}),medplum.search("Media",{subject:ref,_count}),medplum.search("ServiceRequest",{subject:ref,_count}),medplum.search("Task",{subject:ref,_count})])},[]);return(0,import_jsx_runtime111.jsx)(ResourceTimeline,{value:props.patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:(0,import_core142.createReference)(resource),sender:(0,import_core142.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:(0,import_core142.createReference)(resource),operator:(0,import_core142.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core143=require("@mantine/core"),import_core144=require("@medplum/core");var import_react74=require("react");var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing",bottomActions:"PlanDefinitionBuilder_bottomActions"};var import_jsx_runtime112=require("react/jsx-runtime");function PlanDefinitionBuilder(props){let medplum=a(),defaultValue2=pe(props.value),[schemaLoaded,setSchemaLoaded]=(0,import_react74.useState)(!1),[selectedKey,setSelectedKey]=(0,import_react74.useState)(),[hoverKey,setHoverKey]=(0,import_react74.useState)(),[value,setValue]=(0,import_react74.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=(0,import_react74.useRef)();if(valueRef.current=value,(0,import_react74.useEffect)(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react74.useEffect)(()=>(setValue(ensurePlanDefinitionKeys(defaultValue2??{resourceType:"PlanDefinition",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]),!schemaLoaded||!value)return null;function changeProperty(property,newValue){setValue({...valueRef.current,[property]:newValue})}return(0,import_jsx_runtime112.jsx)("div",{children:(0,import_jsx_runtime112.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime112.jsx)(import_core143.TextInput,{label:"Plan Title",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime112.jsx)(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x2=>changeProperty("action",x2)}),(0,import_jsx_runtime112.jsx)(import_core143.Button,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=(0,import_react74.useRef)();actionsRef.current=props.actions;function changeAction(changedAction){props.onChange(actionsRef.current.map(i=>i.id===changedAction.id?changedAction:i))}function addAction(addedAction){props.onChange([...actionsRef.current,addedAction]),props.setSelectedKey(addedAction.id)}function removeAction(removedAction){props.onChange(actionsRef.current.filter(i=>i!==removedAction))}return(0,import_jsx_runtime112.jsxs)("div",{className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>(0,import_jsx_runtime112.jsx)("div",{children:(0,import_jsx_runtime112.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_runtime112.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime112.jsx)(import_core143.Anchor,{href:"#",onClick:e=>{killEvent(e),addAction({id:generateId()})},children:"Add action"})})]})}function ActionBuilder(props){let{action}=props,actionType=getInitialActionType(action),editing=props.selectedKey===props.action.id,hovering=props.hoverKey===props.action.id;function onClick(e){e.stopPropagation(),props.setSelectedKey(props.action.id)}function onHover(e){killEvent(e),props.setHoverKey(props.action.id)}let className=clsx_default(PlanDefinitionBuilder_default.section,{[PlanDefinitionBuilder_default.editing]:editing,[PlanDefinitionBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime112.jsxs)("div",{"data-testid":action.id,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[editing?(0,import_jsx_runtime112.jsx)(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove}):(0,import_jsx_runtime112.jsx)(ActionDisplay,{action,actionType}),(0,import_jsx_runtime112.jsx)("div",{className:PlanDefinitionBuilder_default.bottomActions,children:(0,import_jsx_runtime112.jsx)(import_core143.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove()},children:"Remove"})})]})}var timingProperty={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(t=>({code:t}))};function ActionDisplay(props){let{action,actionType}=props,[propertyValue,propertyType]=getActionTiming(action);return(0,import_jsx_runtime112.jsxs)("div",{children:[(0,import_jsx_runtime112.jsxs)("div",{children:[action.title||"Untitled"," ",actionType&&`(${actionType})`]}),action.definitionCanonical&&(0,import_jsx_runtime112.jsx)("div",{children:(0,import_jsx_runtime112.jsx)(ReferenceDisplay,{value:{reference:action.definitionCanonical}})}),propertyValue&&(0,import_jsx_runtime112.jsx)("div",{children:(0,import_jsx_runtime112.jsx)(ResourcePropertyDisplay,{property:timingProperty,propertyType,value:propertyValue})})]})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=(0,import_react74.useState)(props.actionType);function changeProperty(property,value){props.onChange({...action,[property]:value})}return(0,import_jsx_runtime112.jsxs)(import_core143.Stack,{gap:"xl",children:[(0,import_jsx_runtime112.jsx)(import_core143.TextInput,{name:`actionTitle-${action.id}`,label:"Title",defaultValue:action.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),(0,import_jsx_runtime112.jsx)(import_core143.TextInput,{name:`actionDescription-${action.id}`,label:"Description",defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)}),(0,import_jsx_runtime112.jsx)(import_core143.NativeSelect,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${action.id}`,defaultValue:actionType,onChange:e=>setActionType(e.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),action.action&&action.action.length>0&&(0,import_jsx_runtime112.jsx)(ActionArrayBuilder,{actions:action.action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:x2=>changeProperty("action",x2)}),(()=>{switch(actionType){case"appointment":return(0,import_jsx_runtime112.jsx)(ActionResourceTypeBuilder,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action,onChange:props.onChange});case"lab":return(0,import_jsx_runtime112.jsx)(ActionResourceTypeBuilder,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action,onChange:props.onChange});case"questionnaire":return(0,import_jsx_runtime112.jsx)(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action,onChange:props.onChange});case"task":return(0,import_jsx_runtime112.jsx)(ActionResourceTypeBuilder,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action,onChange:props.onChange});default:return null}})(),(0,import_jsx_runtime112.jsx)(FormSection,{title:"Timing",description:"When the action should take place.",children:(0,import_jsx_runtime112.jsx)(ActionTimingInput,{name:"timing-"+action.id,action,onChange:props.onChange})})]})}function ActionResourceTypeBuilder(props){let{id,definitionCanonical}=props.action,reference=definitionCanonical?.startsWith(props.resourceType+"/")?{reference:definitionCanonical}:void 0;return(0,import_jsx_runtime112.jsx)(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:(0,import_core144.getReferenceString)(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function ActionTimingInput(props){let value=props.action,key="timing",[propertyValue,propertyType]=getActionTiming(value);return(0,import_jsx_runtime112.jsx)(ResourcePropertyInput,{property:timingProperty,name:"timing[x]",path:"PlanDefinition.timing[x]",defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{props.onChange(setPropertyValue(value,key,propName??key,timingProperty,newValue))},outcome:void 0})}function getInitialActionType(action){if(action.definitionCanonical?.startsWith("Schedule"))return"appointment";if(action.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(action.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function getActionTiming(action){return getValueAndType({type:"PlanDefinitionAction",value:action},"timing")}var nextId=1;function generateId(existing){if(existing){if(existing.startsWith("id-")){let existingNum=parseInt(existing.substring(3),10);isNaN(existingNum)||(nextId=Math.max(nextId,existingNum+1))}return existing}return"id-"+nextId++}function ensurePlanDefinitionKeys(planDefinition){return{...planDefinition,action:ensurePlanDefinitionActionKeys(planDefinition.action)}}function ensurePlanDefinitionActionKeys(actions){if(actions)return actions.map(action=>({...action,id:generateId(action.id),action:ensurePlanDefinitionActionKeys(action.action)}))}var import_core148=require("@mantine/core"),import_core149=require("@medplum/core");var import_react77=require("react");var import_core146=require("@mantine/core"),import_core147=require("@medplum/core"),import_react76=require("react");var import_core145=require("@medplum/core"),QuestionnaireItemType=(QuestionnaireItemType2=>(QuestionnaireItemType2.group="group",QuestionnaireItemType2.display="display",QuestionnaireItemType2.question="question",QuestionnaireItemType2.boolean="boolean",QuestionnaireItemType2.decimal="decimal",QuestionnaireItemType2.integer="integer",QuestionnaireItemType2.date="date",QuestionnaireItemType2.dateTime="dateTime",QuestionnaireItemType2.time="time",QuestionnaireItemType2.string="string",QuestionnaireItemType2.text="text",QuestionnaireItemType2.url="url",QuestionnaireItemType2.choice="choice",QuestionnaireItemType2.openChoice="open-choice",QuestionnaireItemType2.attachment="attachment",QuestionnaireItemType2.reference="reference",QuestionnaireItemType2.quantity="quantity",QuestionnaireItemType2))(QuestionnaireItemType||{});function isChoiceQuestion(item){return item.type==="choice"||item.type==="open-choice"}function isQuestionEnabled(item,responseItems){if(!item.enableWhen)return!0;let enableBehavior=item.enableBehavior??"any";for(let enableWhen of item.enableWhen){let actualAnswers=getByLinkId(responseItems,enableWhen.question);if(enableWhen.operator==="exists"&&!enableWhen.answerBoolean&&!actualAnswers?.length){if(enableBehavior==="any")return!0;continue}let{anyMatch,allMatch}=checkAnswers(enableWhen,actualAnswers,enableBehavior);if(enableBehavior==="any"&&anyMatch)return!0;if(enableBehavior==="all"&&!allMatch)return!1}return enableBehavior!=="any"}function getNewMultiSelectValues(selected,propertyName,item){return selected.map(o=>{let option=item.answerOption?.find(option2=>(0,import_core145.formatCoding)(option2.valueCoding)===o||option2[propertyName]===o),optionValue=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");return{[propertyName]:optionValue?.value}})}function getByLinkId(responseItems,linkId){if(responseItems)for(let response of responseItems){if(response.linkId===linkId)return response.answer;if(response.item){let nestedAnswer=getByLinkId(response.item,linkId);if(nestedAnswer)return nestedAnswer}}}function evaluateMatch(actualAnswer,expectedAnswer,operator){if(operator==="exists")return!!actualAnswer===expectedAnswer.value;if(actualAnswer){let fhirPathOperator=operator==="="||operator==="!="?operator?.replace("=","~"):operator,[{value}]=(0,import_core145.evalFhirPathTyped)(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer[x]"),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=(0,import_core145.getTypedPropertyValue)({type:"QuestionnaireResponseItemAnswer",value:actualAnswerValue},"value[x]"),{operator}=enableWhen;if(evaluateMatch(actualAnswer,expectedAnswer,operator)?anyMatch=!0:allMatch=!1,enableBehavior==="any"&&anyMatch)break}return{anyMatch,allMatch}}function getQuestionnaireItemReferenceTargetTypes(item){let extension=(0,import_core145.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(extension){if(extension.valueCode!==void 0)return[extension.valueCode];if(extension.valueCodeableConcept)return extension.valueCodeableConcept?.coding?.map(c=>c.code)}}function setQuestionnaireItemReferenceTargetTypes(item,targetTypes){let result=(0,import_core145.deepClone)(item),extension=(0,import_core145.getExtension)(result,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!targetTypes||targetTypes.length===0?(extension&&(result.extension=result.extension?.filter(e=>e!==extension)),result):(extension||(result.extension||(result.extension=[]),extension={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},result.extension.push(extension)),targetTypes.length===1?(extension.valueCode=targetTypes[0],delete extension.valueCodeableConcept):(extension.valueCodeableConcept={coding:targetTypes.map(t=>({code:t}))},delete extension.valueCode),result)}function getQuestionnaireItemReferenceFilter(item,subject,encounter){let extension=(0,import_core145.getExtension)(item,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter");if(!extension?.valueString)return;let filter=extension.valueString;subject?.reference&&(filter=filter.replaceAll("$subj",subject.reference)),encounter?.reference&&(filter=filter.replaceAll("$encounter",encounter.reference));let result={},parts=filter.split("&");for(let part of parts){let[key,value]=(0,import_core145.splitN)(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:(0,import_core145.getReferenceString)(questionnaire),item:buildInitialResponseItems(questionnaire.item),status:"in-progress"}}function buildInitialResponseItems(items){return items?.map(buildInitialResponseItem)??[]}function buildInitialResponseItem(item){return{id:generateId2(),linkId:item.linkId,text:item.text,item:buildInitialResponseItems(item.item),answer:item.initial?.map(buildInitialResponseAnswer)??[]}}var nextId2=1;function generateId2(){return"id-"+nextId2++}function buildInitialResponseAnswer(answer){return{...answer}}function formatReferenceString(typedValue){return typedValue.value.display||typedValue.value.reference||(0,import_core145.stringify)(typedValue.value)}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&(0,import_core145.getExtension)(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}var import_react75=require("react"),QuestionnaireFormContext=(0,import_react75.createContext)({});var import_jsx_runtime113=require("react/jsx-runtime");function QuestionnaireFormItem(props){let context=(0,import_react76.useContext)(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a2,idx)=>idx===props.index?newResponseAnswer:a2)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value");switch(type){case"display":return(0,import_jsx_runtime113.jsx)("p",{children:props.item.text},props.item.linkId);case"boolean":return(0,import_jsx_runtime113.jsx)(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:(0,import_jsx_runtime113.jsx)(import_core146.Checkbox,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);case"decimal":return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{type:"number",step:"any",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{type:"number",step:1,id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{type:"date",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return(0,import_jsx_runtime113.jsx)(DateTimeInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{type:"time",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return(0,import_jsx_runtime113.jsx)(import_core146.Textarea,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return(0,import_jsx_runtime113.jsx)(import_core146.Group,{py:4,children:(0,import_jsx_runtime113.jsx)(AttachmentInput,{name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return(0,import_jsx_runtime113.jsx)(ReferenceInput,{name,required:item.required,targetTypes:getQuestionnaireItemReferenceTargetTypes(item),searchCriteria:getQuestionnaireItemReferenceFilter(item,context.subject,context.encounter),defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueReference:newValue})});case"quantity":return(0,import_jsx_runtime113.jsx)(QuantityInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueQuantity:newValue}),disableWheel:!0});case"choice":case"open-choice":return isDropDownChoice(item)&&!item.answerValueSet?(0,import_jsx_runtime113.jsx)(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):(0,import_jsx_runtime113.jsx)(QuestionnaireChoiceSetInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)});default:return null}}function QuestionnaireChoiceDropDownInput(props){let{name,item,initial,response}=props;if(!item.answerOption?.length)return(0,import_jsx_runtime113.jsx)(NoAnswerDisplay,{});let initialValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),data2=[""];for(let option of item.answerOption){let optionValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");data2.push(typedValueToString(optionValue))}let defaultValue2=getCurrentAnswer(response)??initialValue;if(item.repeats){let{propertyName,data:data3}=formatSelectData(props.item),currentAnswer=getCurrentMultiSelectAnswer(response);return(0,import_jsx_runtime113.jsx)(import_core146.MultiSelect,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[typedValueToString(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return(0,import_jsx_runtime113.jsx)(import_core146.NativeSelect,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core147.capitalize)(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:(0,import_core147.formatCoding)(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?(0,import_jsx_runtime113.jsx)(NoAnswerDisplay,{}):item.answerValueSet?(0,import_jsx_runtime113.jsx)(CodingInput,{name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code}),creatable:item.type==="open-choice"}):(0,import_jsx_runtime113.jsx)(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=(0,import_core147.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),initialValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemInitial",value:initial},"value"),options=[],defaultValue2;if(item.answerOption)for(let i=0;i<item.answerOption.length;i++){let option=item.answerOption[i],optionName=`${name}-option-${i}`,optionValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value");optionValue?.value&&(initialValue&&(0,import_core147.stringify)(optionValue)===(0,import_core147.stringify)(initialValue)&&(defaultValue2=optionName),options.push([optionName,optionValue]))}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);return(0,import_jsx_runtime113.jsx)(import_core146.Radio.Group,{name,value:answerLinkId??defaultValue2,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+(0,import_core147.capitalize)(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>(0,import_jsx_runtime113.jsx)(import_core146.Radio,{id:optionName,value:optionName,py:4,label:(0,import_jsx_runtime113.jsx)(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return(0,import_jsx_runtime113.jsx)(import_core146.TextInput,{disabled:!0,placeholder:"No Answers Defined"})}function getItemValue(answer){return(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemAnswer",value:answer},"value")}function getCurrentAnswer(response,index=0){let results=response.answer;return getItemValue(results?.[index]??{})}function getCurrentMultiSelectAnswer(response){let results=response.answer;return results?results.map(a2=>getItemValue(a2)).map(type=>(0,import_core147.formatCoding)(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>(0,import_core147.deepEquals)(option[1].value,defaultAnswer?.value))?.[0]}function typedValueToString(typedValue){if(typedValue)return typedValue.type==="CodeableConcept"?(0,import_core147.formatCodeableConcept)(typedValue.value):typedValue.type==="Coding"?(0,import_core147.formatCoding)(typedValue.value):typedValue.type==="Reference"?formatReferenceString(typedValue):typedValue.value.toString()}function isDropDownChoice(item){return!!item.extension?.some(e=>e.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&e.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function formatSelectData(item){if(item.answerOption?.length===0)return{propertyName:"",data:[]};let option=item.answerOption[0],optionValue=(0,import_core147.getTypedPropertyValue)({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+(0,import_core147.capitalize)(optionValue.type),data2=(item.answerOption??[]).map(a2=>({value:getValueAndLabel(a2,propertyName),label:getValueAndLabel(a2,propertyName)}));return{propertyName,data:data2}}function getValueAndLabel(option,propertyName){return(0,import_core147.formatCoding)(option.valueCoding)||option[propertyName]?.toString()}var QuestionnaireBuilder_default={section:"QuestionnaireBuilder_section",hovering:"QuestionnaireBuilder_hovering",editing:"QuestionnaireBuilder_editing",questionBody:"QuestionnaireBuilder_questionBody",topActions:"QuestionnaireBuilder_topActions",bottomActions:"QuestionnaireBuilder_bottomActions",movementActions:"QuestionnaireBuilder_movementActions",movementIcons:"QuestionnaireBuilder_movementIcons",columnAlignment:"QuestionnaireBuilder_columnAlignment",linkIdInput:"QuestionnaireBuilder_linkIdInput",typeSelect:"QuestionnaireBuilder_typeSelect"};var import_jsx_runtime114=require("react/jsx-runtime");function QuestionnaireBuilder(props){let medplum=a(),defaultValue2=pe(props.questionnaire),[schemaLoaded,setSchemaLoaded]=(0,import_react77.useState)(!1),[value,setValue]=(0,import_react77.useState)(),[selectedKey,setSelectedKey]=(0,import_react77.useState)(),[hoverKey,setHoverKey]=(0,import_react77.useState)();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}(0,import_react77.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react77.useEffect)(()=>(setValue(ensureQuestionnaireKeys(defaultValue2??{resourceType:"Questionnaire",status:"active"})),document.addEventListener("mouseover",handleDocumentMouseOver),document.addEventListener("click",handleDocumentClick),()=>{document.removeEventListener("mouseover",handleDocumentMouseOver),document.removeEventListener("click",handleDocumentClick)}),[defaultValue2]);let handleChange=(questionnaire,disableSubmit)=>{setValue(questionnaire),props.autoSave&&!disableSubmit&&props.onSubmit&&props.onSubmit(questionnaire)};return!schemaLoaded||!value?null:(0,import_jsx_runtime114.jsx)("div",{children:(0,import_jsx_runtime114.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[(0,import_jsx_runtime114.jsx)(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),(0,import_jsx_runtime114.jsx)(import_core148.Button,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=(0,import_core149.isResource)(props.item),isContainer=isResource2||item.type==="group",linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=(0,import_react77.useRef)();itemRef.current=props.item;function onClick(e){killEvent(e),props.setSelectedKey(props.item.id)}function onHover(e){killEvent(e),props.setHoverKey(props.item.id)}function changeItem(changedItem){let curr=itemRef.current;props.onChange({...curr,item:curr.item?.map(i=>i.id===changedItem.id?changedItem:i)})}function addItem(addedItem,disableSubmit){props.onChange({...props.item,item:[...props.item.item??[],addedItem]},disableSubmit)}function removeItem(removedItem){props.onChange({...props.item,item:props.item.item?.filter(i=>i!==removedItem)})}function changeProperty(property,value){props.onChange({...itemRef.current,[property]:value})}function updateItem(updatedItem){props.onChange({...props.item,...updatedItem})}function toggleRepeatable(item2){props.onChange({...props.item,item:props.item.item?.map(i=>i===item2?{...i,repeats:!i.repeats}:i)})}function moveItem(itemIndex,delta){let updatedItems=reorderItems(props.item.item,itemIndex,delta);props.onChange({...props.item,item:updatedItems})}let className=clsx_default(QuestionnaireBuilder_default.section,{[QuestionnaireBuilder_default.editing]:editing,[QuestionnaireBuilder_default.hovering]:hovering&&!editing});return(0,import_jsx_runtime114.jsxs)("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[(0,import_jsx_runtime114.jsx)("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[isResource2&&(0,import_jsx_runtime114.jsx)(import_core148.TextInput,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&(0,import_jsx_runtime114.jsx)(import_core148.Textarea,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&(0,import_jsx_runtime114.jsx)(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&(0,import_jsx_runtime114.jsx)(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[resource.title&&(0,import_jsx_runtime114.jsx)(import_core148.Title,{children:resource.title}),item.text&&(0,import_jsx_runtime114.jsx)("div",{children:item.text}),!isContainer&&(0,import_jsx_runtime114.jsx)(QuestionnaireFormItem,{item,index:0,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>(0,import_jsx_runtime114.jsx)("div",{children:(0,import_jsx_runtime114.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_runtime114.jsx)("div",{className:QuestionnaireBuilder_default.topActions,children:editing?(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(import_core148.TextInput,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&(0,import_jsx_runtime114.jsx)(import_core148.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_runtime114.jsx)("div",{children:linkId})}),!isResource2&&(0,import_jsx_runtime114.jsx)(import_core148.Box,{className:QuestionnaireBuilder_default.movementActions,children:(0,import_jsx_runtime114.jsxs)(import_core148.Box,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:(0,import_jsx_runtime114.jsx)(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:(0,import_jsx_runtime114.jsx)(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),(0,import_jsx_runtime114.jsxs)("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=(0,import_core149.getElementDefinition)("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return(0,import_jsx_runtime114.jsxs)("div",{children:[props.item.answerValueSet!==void 0?(0,import_jsx_runtime114.jsx)(import_core148.TextInput,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):(0,import_jsx_runtime114.jsx)(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),(0,import_jsx_runtime114.jsxs)(import_core148.Box,{display:"flex",children:[(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),(0,import_jsx_runtime114.jsx)(import_core148.Space,{w:"lg"}),(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return(0,import_jsx_runtime114.jsx)("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return(0,import_jsx_runtime114.jsxs)("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[(0,import_jsx_runtime114.jsx)("div",{children:(0,import_jsx_runtime114.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_runtime114.jsx)("div",{children:(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:props.options.filter(o=>o.id!==option.id)})},children:"Remove"})})]},option.id)})})}function ReferenceProfiles(props){let targetTypes=getQuestionnaireItemReferenceTargetTypes(props.item)??[];return(0,import_jsx_runtime114.jsxs)(import_jsx_runtime114.Fragment,{children:[targetTypes.map((targetType,index)=>(0,import_jsx_runtime114.jsxs)(import_core148.Group,{children:[(0,import_jsx_runtime114.jsx)(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),(0,import_jsx_runtime114.jsx)(import_core148.Anchor,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,[...targetTypes,""]))},children:"Add Resource Type"})]})}var nextLinkId=1,nextId3=1;function generateLinkId(prefix){return prefix+nextLinkId++}function generateId3(){return"id-"+nextId3++}function ensureQuestionnaireKeys(questionnaire){return{...questionnaire,id:questionnaire.id||generateId3(),item:ensureQuestionnaireItemKeys(questionnaire.item)}}function ensureQuestionnaireItemKeys(items){if(items)return items.forEach(item=>{item.id?.match(/^id-\d+$/)&&(nextId3=Math.max(nextId3,parseInt(item.id.substring(3),10)+1)),item.linkId?.match(/^q\d+$/)&&(nextLinkId=Math.max(nextLinkId,parseInt(item.linkId.substring(1),10)+1))}),items.map(item=>({...item,id:item.id||generateId3(),item:ensureQuestionnaireItemKeys(item.item),answerOption:ensureQuestionnaireOptionKeys(item.answerOption)}))}function ensureQuestionnaireOptionKeys(options){if(options)return options.map(option=>({...option,id:option.id||generateId3()}))}function createPage(){return{id:generateId3(),linkId:generateLinkId("s"),type:"group",text:"New Page",extension:[{url:"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl",valueCodeableConcept:{coding:[{system:"http://hl7.org/fhir/questionnaire-item-control",code:"page"}]}}]}}function reorderItems(items,itemIndex,delta){let currentItems=items??[],newIndex=itemIndex+delta;if(newIndex<0||newIndex>=currentItems.length)return currentItems;let updatedItems=[...currentItems];return[updatedItems[itemIndex],updatedItems[newIndex]]=[updatedItems[newIndex],updatedItems[itemIndex]],updatedItems}var import_core153=require("@mantine/core"),import_core154=require("@medplum/core");var import_react80=require("react");var import_core152=require("@mantine/core");var import_core150=require("@mantine/core"),import_react78=require("react");var import_jsx_runtime115=require("react/jsx-runtime");function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=(0,import_react78.useState)(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return(0,import_jsx_runtime115.jsx)("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!=="choice"&&item.type!=="open-choice";return item.type==="boolean"?(0,import_jsx_runtime115.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):(0,import_jsx_runtime115.jsxs)(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_2,index)=>(0,import_jsx_runtime115.jsx)(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&(0,import_jsx_runtime115.jsx)(import_core150.Anchor,{onClick:()=>setNumber(n=>n+1),children:"Add Item"})]},props.item.linkId)}function getNumberOfRepeats(item,response){if(item.type==="choice"||item.type==="open-choice")return 1;let answers=response.answer;return answers?.length?answers.length:1}var import_core151=require("@mantine/core"),import_react79=require("react");var import_jsx_runtime116=require("react/jsx-runtime");function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=(0,import_react79.useState)(props.response);if(responses.length===0)return null;function handleRepeatableGroup(newResponseItems,index){let newResponses=responses.map((responses2,idx)=>idx===index?newResponseItems[0]:responses2);setResponses(newResponses),props.onChange(newResponses)}function insertNewGroup(){let newResponse=buildInitialResponseItem(props.item);setResponses([...responses,newResponse])}return(0,import_jsx_runtime116.jsxs)(import_jsx_runtime116.Fragment,{children:[responses.map((response,idx)=>(0,import_jsx_runtime116.jsx)(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&(0,import_jsx_runtime116.jsx)(import_core151.Anchor,{onClick:insertNewGroup,children:`Add Group: ${props.item.text}`})]})}function QuestionnaireGroup(props){let{response,checkForQuestionEnabled,onChange}=props;function onSetGroup(newResponseItem){let mergedResponse=response.item?.map(current=>newResponseItem.find(newResponse2=>newResponse2.id===current.id)??current)?.concat(newResponseItem.slice(1)),groupResponse={...response,item:mergedResponse};onChange([groupResponse])}return props.checkForQuestionEnabled(props.item)?(0,import_jsx_runtime116.jsxs)("div",{children:[props.item.text&&(0,import_jsx_runtime116.jsx)(import_core151.Title,{order:3,mb:"md",children:props.item.text}),(0,import_jsx_runtime116.jsx)(import_core151.Stack,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?(0,import_jsx_runtime116.jsx)(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):(0,import_jsx_runtime116.jsx)(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):(0,import_jsx_runtime116.jsx)(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}var import_jsx_runtime117=require("react/jsx-runtime");function QuestionnairePageSequence(props){let{items,response,activePage,onChange,nextStep,prevStep,numberOfPages,renderPages,submitButtonText,checkForQuestionEnabled}=props,form=items.map(item=>{let itemResponse=response?.item?.filter(i=>i.linkId===item.linkId)??[],repeatedItem=item.type==="group"?(0,import_jsx_runtime117.jsx)(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):(0,import_jsx_runtime117.jsx)(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?(0,import_jsx_runtime117.jsx)(import_core152.Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return(0,import_jsx_runtime117.jsxs)(import_jsx_runtime117.Fragment,{children:[renderPages&&(0,import_jsx_runtime117.jsx)(import_core152.Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&(0,import_jsx_runtime117.jsx)(import_core152.Stack,{children:form}),(0,import_jsx_runtime117.jsx)(ButtonGroup,{activePage:activePage??0,numberOfPages,nextStep,prevStep,submitButtonText})]})}function ButtonGroup(props){let showBackButton=props.activePage>0,showNextButton=props.activePage<props.numberOfPages-1,showSubmitButton=props.activePage===props.numberOfPages-1;return(0,import_jsx_runtime117.jsxs)(import_core152.Group,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&(0,import_jsx_runtime117.jsx)(import_core152.Button,{onClick:props.prevStep,children:"Back"}),showNextButton&&(0,import_jsx_runtime117.jsx)(import_core152.Button,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&(0,import_jsx_runtime117.jsx)(import_core152.Button,{type:"submit",children:props.submitButtonText??"Submit"})]})}var import_jsx_runtime118=require("react/jsx-runtime");function QuestionnaireForm(props){let medplum=a(),source=medplum.getProfile(),[schemaLoaded,setSchemaLoaded]=(0,import_react80.useState)(!1),questionnaire=pe(props.questionnaire),[response,setResponse]=(0,import_react80.useState)(),[activePage,setActivePage]=(0,import_react80.useState)(0);(0,import_react80.useEffect)(()=>{medplum.requestSchema("Questionnaire").then(()=>medplum.requestSchema("QuestionnaireResponse")).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),(0,import_react80.useEffect)(()=>{setResponse(questionnaire?buildInitialResponse(questionnaire):void 0)},[questionnaire]);function setItems(newResponseItems){let currentItems=response?.item??[],newResponse={resourceType:"QuestionnaireResponse",status:"in-progress",item:mergeItems(currentItems,Array.isArray(newResponseItems)?newResponseItems:[newResponseItems])};setResponse(newResponse)}function checkForQuestionEnabled(item){return isQuestionEnabled(item,response?.item??[])}if(!schemaLoaded||!questionnaire||!response)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return(0,import_jsx_runtime118.jsx)(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:(0,import_jsx_runtime118.jsxs)(Form,{testid:"questionnaire-form",onSubmit:()=>{props.onSubmit&&response&&props.onSubmit({...response,questionnaire:(0,import_core154.getReferenceString)(questionnaire),subject:props.subject,source:(0,import_core154.createReference)(source),authored:new Date().toISOString(),status:"completed"})},children:[questionnaire.title&&(0,import_jsx_runtime118.jsx)(import_core153.Title,{children:questionnaire.title}),(0,import_jsx_runtime118.jsx)(QuestionnairePageSequence,{items:questionnaire.item??[],response,onChange:setItems,renderPages:numberOfPages>1,activePage,numberOfPages,submitButtonText:props.submitButtonText,checkForQuestionEnabled,nextStep,prevStep})]})})}function mergeIndividualItems(prevItem,newItem){let mergedNestedItems=mergeItems(prevItem.item??[],newItem.item??[]);return{...newItem,item:mergedNestedItems.length>0?mergedNestedItems:void 0,answer:newItem.answer&&newItem.answer.length>0?newItem.answer:prevItem.answer}}function mergeItems(prevItems,newItems){let result=[],usedIds=new Set;for(let prevItem of prevItems){let itemId=prevItem.id,newItem=newItems.find(item=>item.id===itemId);newItem?(result.push(mergeIndividualItems(prevItem,newItem)),usedIds.add(newItem.id)):result.push(prevItem)}for(let newItem of newItems)usedIds.has(newItem.id)||result.push(newItem);return result}var import_core155=require("@mantine/core"),import_core156=require("@medplum/core");var import_react81=require("react");var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};var import_jsx_runtime119=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_react81.useState)([]),[groupId,setGroupId]=(0,import_react81.useState)(1),[intervalId,setIntervalId]=(0,import_react81.useState)(1);return(0,import_react81.useEffect)(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),(0,import_jsx_runtime119.jsxs)(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[(0,import_jsx_runtime119.jsx)(import_core155.Stack,{children:intervalGroups.map(intervalGroup=>(0,import_jsx_runtime119.jsx)(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsx)(IconCirclePlus,{})}),(0,import_jsx_runtime119.jsx)(import_core155.Group,{justify:"flex-end",children:(0,import_jsx_runtime119.jsx)(import_core155.Button,{type:"submit",children:"Save"})})]});function submitDefinition(){let qualifiedInterval=intervalGroups.flatMap(group=>group.intervals).filter(interval=>!isEmptyInterval(interval));props.onSubmit({...defaultDefinition,qualifiedInterval})}function addGroup(addedGroup){setIntervalGroups(currentGroups=>[...currentGroups,addedGroup])}function removeGroup(removedGroup){setIntervalGroups(currentGroups=>currentGroups.filter(group=>group.id!==removedGroup.id))}function changeInterval(groupId2,changedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g2=>g2.id===groupId2),index=currentGroup?.intervals.findIndex(interval=>interval.id===changedInterval.id);return index!==void 0&&currentGroup?.intervals[index]&&(currentGroup.intervals[index]=changedInterval),groups})}function addInterval(groupId2,addedInterval){addedInterval.id===void 0&&(addedInterval.id=`id-${intervalId}`,setIntervalId(id=>id+1)),setIntervalGroups(groups=>{groups=[...groups];let currentGroupIndex=groups.findIndex(g2=>g2.id===groupId2);if(currentGroupIndex!==-1){let currentGroup={...groups[currentGroupIndex]};addedInterval={...addedInterval,...currentGroup.filters},currentGroup.intervals=[...currentGroup.intervals,addedInterval],groups[currentGroupIndex]=currentGroup}return groups})}function removeInterval(groupId2,removedInterval){setIntervalGroups(groups=>{groups=[...groups];let currentGroup=groups.find(g2=>g2.id===groupId2);return currentGroup&&(currentGroup.intervals=currentGroup.intervals.filter(interval=>interval.id!==removedInterval.id)),groups})}}function ReferenceRangeGroupEditor(props){let{intervalGroup,unit}=props;return(0,import_jsx_runtime119.jsx)(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:(0,import_jsx_runtime119.jsxs)(import_core155.Stack,{gap:"lg",children:[(0,import_jsx_runtime119.jsx)(import_core155.Group,{justify:"flex-end",children:(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsx)(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),(0,import_jsx_runtime119.jsx)(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),(0,import_jsx_runtime119.jsx)(import_core155.Divider,{}),intervalGroup.intervals.map(interval=>(0,import_jsx_runtime119.jsxs)(import_core155.Stack,{gap:"xs",children:[(0,import_jsx_runtime119.jsxs)(import_core155.Group,{children:[(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsx)(import_core155.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_runtime119.jsx)(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),(0,import_jsx_runtime119.jsx)(RangeInput,{onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsx)(IconCirclePlus,{})})]})})}function ReferenceRangeGroupFilters(props){let{intervalGroup,onChange}=props;intervalGroup.filters.age||(intervalGroup.filters.age={});for(let key of["low","high"])intervalGroup.filters.age[key]?.unit||(intervalGroup.filters.age[key]={...intervalGroup.filters.age[key],unit:"years",system:"http://unitsofmeasure.org"});return(0,import_jsx_runtime119.jsxs)(import_core155.Stack,{style:{maxWidth:"50%"},children:[(0,import_jsx_runtime119.jsx)(import_core155.Group,{children:(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsxs)(import_core155.Group,{gap:"xs",children:[(0,import_jsx_runtime119.jsx)(import_core155.Text,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),(0,import_jsx_runtime119.jsx)("div",{id:`div-age-${intervalGroup.id}`,children:(0,import_jsx_runtime119.jsx)(RangeInput,{name:`age-${intervalGroup.id}`,defaultValue:intervalGroup.filters.age,onChange:ageRange=>{for(let interval of intervalGroup.intervals)onChange(intervalGroup.id,{...interval,age:ageRange})}},`age-${intervalGroup.id}`)})]}),(0,import_jsx_runtime119.jsx)(import_core155.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_runtime119.jsx)(import_core155.NativeSelect,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f2=>[f2,interval[f2]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${(0,import_core156.formatRange)(interval.age)}`,`gestationalAge=${(0,import_core156.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_core156.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_core157=require("@mantine/core"),import_core158=require("@medplum/core");var import_react82=require("react");var import_jsx_runtime120=require("react/jsx-runtime");function RequestGroupDisplay(props){let medplum=a(),requestGroup=pe(props.value),[startedLoading,setStartedLoading]=(0,import_react82.useState)(!1),[responseBundle,setResponseBundle]=(0,import_react82.useState)();if((0,import_react82.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_runtime120.jsx)(import_core157.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_runtime120.jsxs)(import_react82.Fragment,{children:[(0,import_jsx_runtime120.jsx)(import_core157.Grid.Col,{span:1,p:"md",children:task?.status==="completed"?(0,import_jsx_runtime120.jsx)(IconCheckbox,{}):(0,import_jsx_runtime120.jsx)(IconSquare,{color:"gray"})}),(0,import_jsx_runtime120.jsxs)(import_core157.Grid.Col,{span:9,p:"xs",children:[(0,import_jsx_runtime120.jsx)(import_core157.Text,{fw:500,children:action.title}),action.description&&(0,import_jsx_runtime120.jsx)("div",{children:action.description}),(0,import_jsx_runtime120.jsxs)("div",{children:["Last edited by\xA0",(0,import_jsx_runtime120.jsx)(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",(0,import_core158.formatDateTime)(task?.meta?.lastUpdated)]}),(0,import_jsx_runtime120.jsxs)("div",{children:["Status: ",(0,import_jsx_runtime120.jsx)(StatusBadge,{status:task?.status||"unknown"})]})]}),(0,import_jsx_runtime120.jsxs)(import_core157.Grid.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&(0,import_jsx_runtime120.jsx)(import_core157.Button,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&(0,import_jsx_runtime120.jsx)(import_core157.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_core158.getReferenceString)(entry.resource))return entry.resource}}var import_react83=require("react");var import_core159=require("@medplum/core");function diff(original,revised){let path=buildPath(original,revised);return buildRevisions(path,original,revised)}function buildPath(orig,rev){let N2=orig.length,M2=rev.length,MAX=N2+M2+1,size=1+2*MAX,middle=size/2|0,diagonal=new Array(size);diagonal[middle+1]={i:0,j:-1,prev:void 0,snake:!0};for(let d=0;d<MAX;d++){for(let k2=-d;k2<=d;k2+=2){let kmiddle=middle+k2,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k2===-d||k2!==d&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j=i-k2,node={i,j,prev:previousSnake(prev),snake:!1};for(;i<N2&&j<M2&&orig[i]===rev[j];)i++,j++;if(i>node.i&&(node={i,j,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N2&&j>=M2)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_core159.stringify)(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a2,b2)=>a2.meta.lastUpdated.localeCompare(b2.meta.lastUpdated)),table=versions[0].lines.map(line=>({id:versions[0].meta.versionId,meta:versions[0].meta,value:line,span:1}));return compareVersions(table,versions),combineSpans(table),table}function compareVersions(table,versions){for(let i=1;i<versions.length;i++){let revisions=diff(versions[i-1].lines,versions[i].lines);for(let revision of revisions){let position=revision.original.position,oldLines=revision.original.lines,newLines=revision.revised.lines;if((revision.type==="delete"||revision.type==="change")&&table.splice(position,oldLines.length),revision.type==="insert"||revision.type==="change")for(let k2=0;k2<revision.revised.lines.length;k2++)table.splice(position+k2,0,{id:versions[i].meta.versionId,meta:versions[i].meta,value:newLines[k2],span:1})}}}function combineSpans(table){let start=0;for(;start<table.length;){let curr=start;for(;curr<table.length&&table[curr].id===table[start].id;)table[curr].span=-1,curr++;table[start].span=curr-start,start=curr}}var ResourceBlame_default={container:"ResourceBlame_container",root:"ResourceBlame_root",startRow:"ResourceBlame_startRow",normalRow:"ResourceBlame_normalRow",author:"ResourceBlame_author",dateTime:"ResourceBlame_dateTime",lineNumber:"ResourceBlame_lineNumber",line:"ResourceBlame_line",pre:"ResourceBlame_pre"};function getVersionUrl(resource,versionId){return`/${resource.resourceType}/${resource.id}/_history/${versionId}`}function getTimeString(lastUpdated){let seconds=Math.floor((Date.now()-Date.parse(lastUpdated))/1e3),years=Math.floor(seconds/31536e3);if(years>0)return pluralizeTime(years,"year");let months=Math.floor(seconds/2592e3);if(months>0)return pluralizeTime(months,"month");let days=Math.floor(seconds/86400);if(days>0)return pluralizeTime(days,"day");let hours=Math.floor(seconds/3600);if(hours>0)return pluralizeTime(hours,"hour");let minutes=Math.floor(seconds/60);return minutes>0?pluralizeTime(minutes,"minute"):pluralizeTime(seconds,"second")}function pluralizeTime(count,noun){return`${count} ${count===1?noun:noun+"s"} ago`}var import_jsx_runtime121=require("react/jsx-runtime");function ResourceBlame(props){let medplum=a(),[value,setValue]=(0,import_react83.useState)(props.history);if((0,import_react83.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_runtime121.jsx)("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return(0,import_jsx_runtime121.jsx)("div",{className:ResourceBlame_default.container,children:(0,import_jsx_runtime121.jsx)("table",{className:ResourceBlame_default.root,children:(0,import_jsx_runtime121.jsx)("tbody",{children:table.map((row,index)=>(0,import_jsx_runtime121.jsxs)("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&(0,import_jsx_runtime121.jsxs)(import_jsx_runtime121.Fragment,{children:[(0,import_jsx_runtime121.jsx)("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:(0,import_jsx_runtime121.jsx)(ResourceBadge,{value:row.meta.author,link:!0})}),(0,import_jsx_runtime121.jsx)("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:(0,import_jsx_runtime121.jsx)(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),(0,import_jsx_runtime121.jsx)("td",{className:ResourceBlame_default.lineNumber,children:index+1}),(0,import_jsx_runtime121.jsx)("td",{className:ResourceBlame_default.line,children:(0,import_jsx_runtime121.jsx)("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}var import_core160=require("@medplum/core");var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};var import_jsx_runtime122=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_core160.stringify)(originalResource,!0).match(/[^\r\n]+/g),revised=(0,import_core160.stringify)(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return(0,import_jsx_runtime122.jsx)("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>(0,import_jsx_runtime122.jsx)(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return(0,import_jsx_runtime122.jsxs)(import_jsx_runtime122.Fragment,{children:["...",(0,import_jsx_runtime122.jsx)("br",{}),props.delta.original.lines.length>0&&(0,import_jsx_runtime122.jsx)("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
72
+ `)}),props.delta.revised.lines.length>0&&(0,import_jsx_runtime122.jsx)("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
73
+ `)}),"...",(0,import_jsx_runtime122.jsx)("br",{})]})}var import_core161=require("@mantine/core"),import_core162=require("@medplum/core");var import_react84=require("react");var import_jsx_runtime123=require("react/jsx-runtime");function ResourceForm(props){let{outcome}=props,medplum=a(),defaultValue2=pe(props.defaultValue),[schemaLoaded,setSchemaLoaded]=(0,import_react84.useState)(),[value,setValue]=(0,import_react84.useState)();return(0,import_react84.useEffect)(()=>{if(defaultValue2)if(props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl,{expandProfile:!0}).then(()=>{let profile=(0,import_core162.tryGetProfile)(profileUrl);if(profile){setSchemaLoaded(profile.name);let modifiedDefaultValue=(0,import_core162.applyDefaultValuesToResource)(defaultValue2,profile);setValue(modifiedDefaultValue)}else console.error(`Schema not found for ${profileUrl}`)}).catch(reason=>{console.error("Error in requestProfileSchema",reason)})}else{let schemaName=props.schemaName??defaultValue2?.resourceType;medplum.requestSchema(schemaName).then(()=>{setValue(defaultValue2),setSchemaLoaded(schemaName)}).catch(console.log)}},[medplum,defaultValue2,props.schemaName,props.profileUrl]),!schemaLoaded||!value?(0,import_jsx_runtime123.jsx)("div",{children:"Loading..."}):(0,import_jsx_runtime123.jsxs)("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[(0,import_jsx_runtime123.jsxs)(import_core161.Stack,{mb:"xl",children:[(0,import_jsx_runtime123.jsx)(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:(0,import_jsx_runtime123.jsx)(import_core161.TextInput,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),(0,import_jsx_runtime123.jsx)(FormSection,{title:"ID",htmlFor:"id",outcome,children:(0,import_jsx_runtime123.jsx)(import_core161.TextInput,{name:"id",defaultValue:value.id,disabled:!0})})]}),(0,import_jsx_runtime123.jsx)(BackboneElementInput,{path:value.resourceType,valuePath:value.resourceType,typeName:schemaLoaded,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl}),(0,import_jsx_runtime123.jsxs)(import_core161.Group,{justify:"flex-end",mt:"xl",children:[(0,import_jsx_runtime123.jsx)(import_core161.Button,{type:"submit",children:"OK"}),props.onDelete&&(0,import_jsx_runtime123.jsx)(import_core161.Button,{variant:"outline",color:"red",type:"button",onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})}var import_core163=require("@mantine/core"),import_core164=require("@medplum/core");var import_react85=require("react");var import_jsx_runtime124=require("react/jsx-runtime");function ResourceHistoryTable(props){let medplum=a(),[value,setValue]=(0,import_react85.useState)(props.history);return(0,import_react85.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_runtime124.jsxs)(import_core163.Table,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[(0,import_jsx_runtime124.jsx)(import_core163.Table.Thead,{children:(0,import_jsx_runtime124.jsxs)(import_core163.Table.Tr,{children:[(0,import_jsx_runtime124.jsx)(import_core163.Table.Th,{children:"Author"}),(0,import_jsx_runtime124.jsx)(import_core163.Table.Th,{children:"Date"}),(0,import_jsx_runtime124.jsx)(import_core163.Table.Th,{children:"Version"})]})}),(0,import_jsx_runtime124.jsx)(import_core163.Table.Tbody,{children:value.entry?.map((entry,index)=>(0,import_jsx_runtime124.jsx)(HistoryRow,{entry},"entry-"+index))})]}):(0,import_jsx_runtime124.jsx)("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?(0,import_jsx_runtime124.jsxs)(import_core163.Table.Tr,{children:[(0,import_jsx_runtime124.jsx)(import_core163.Table.Td,{children:(0,import_jsx_runtime124.jsx)(ResourceBadge,{value:resource.meta?.author,link:!0})}),(0,import_jsx_runtime124.jsx)(import_core163.Table.Td,{children:(0,import_core164.formatDateTime)(resource.meta?.lastUpdated)}),(0,import_jsx_runtime124.jsx)(import_core163.Table.Td,{children:(0,import_jsx_runtime124.jsx)(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):(0,import_jsx_runtime124.jsx)(import_core163.Table.Tr,{children:(0,import_jsx_runtime124.jsx)(import_core163.Table.Td,{colSpan:3,children:(0,import_core164.normalizeErrorString)(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}var import_core165=require("@mantine/core"),import_core166=require("@medplum/core");var import_react86=require("react");var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};var import_jsx_runtime125=require("react/jsx-runtime");function Scheduler(props){let schedule=pe(props.schedule),questionnaire=pe(props.questionnaire),[month,setMonth]=(0,import_react86.useState)(getStartMonth()),[date,setDate]=(0,import_react86.useState)(),[slot,setSlot]=(0,import_react86.useState)(),[response,setResponse]=(0,import_react86.useState)(),[slots]=Ee("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",(0,import_core166.isReference)(props.schedule)?props.schedule.reference:(0,import_core166.getReferenceString)(props.schedule)],["start","gt"+getStart2(month)],["start","lt"+getEnd2(month)]]));if(!schedule||!slots||!questionnaire)return null;let actor=schedule.actor?.[0];return(0,import_jsx_runtime125.jsxs)("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[(0,import_jsx_runtime125.jsxs)("div",{className:Scheduler_default.info,children:[actor&&(0,import_jsx_runtime125.jsx)(ResourceAvatar,{value:actor,size:"xl"}),actor&&(0,import_jsx_runtime125.jsx)(import_core165.Text,{size:"xl",fw:500,children:(0,import_jsx_runtime125.jsx)(ResourceName,{value:actor})}),(0,import_jsx_runtime125.jsx)("p",{children:"1 hour"}),date&&(0,import_jsx_runtime125.jsx)("p",{children:date.toLocaleDateString()}),slot&&(0,import_jsx_runtime125.jsx)("p",{children:formatTime(new Date(slot.start))})]}),(0,import_jsx_runtime125.jsxs)("div",{className:Scheduler_default.selection,children:[!date&&(0,import_jsx_runtime125.jsxs)("div",{children:[(0,import_jsx_runtime125.jsx)("h3",{children:"Select date"}),(0,import_jsx_runtime125.jsx)(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&(0,import_jsx_runtime125.jsxs)("div",{children:[(0,import_jsx_runtime125.jsx)("h3",{children:"Select time"}),(0,import_jsx_runtime125.jsx)(import_core165.Stack,{children:slots.map(s=>{let slotStart=new Date(s.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()<date.getTime()+24*3600*1e3&&(0,import_jsx_runtime125.jsx)("div",{children:(0,import_jsx_runtime125.jsx)(import_core165.Button,{variant:"outline",style:{width:150},onClick:()=>setSlot(s),children:formatTime(slotStart)})},s.id)})})]}),date&&slot&&!response&&(0,import_jsx_runtime125.jsx)(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&(0,import_jsx_runtime125.jsxs)("div",{children:[(0,import_jsx_runtime125.jsx)("h3",{children:"You're all set!"}),(0,import_jsx_runtime125.jsx)("p",{children:"Check your email for a calendar invite."})]})]})]})}function getStart2(month){return formatSlotInstant(month.getTime())}function getEnd2(month){return formatSlotInstant(month.getTime()+31*24*60*60*1e3)}function formatSlotInstant(time){let date=new Date(Math.max(Date.now(),time));return date.setHours(0,0,0,0),date.toISOString()}function formatTime(date){return date.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}var import_core167=require("@medplum/core");var import_jsx_runtime126=require("react/jsx-runtime");function ServiceRequestTimeline(props){return(0,import_jsx_runtime126.jsx)(ResourceTimeline,{value:props.serviceRequest,loadTimelineResources:async(medplum,resourceType,id)=>{let ref=`${resourceType}/${id}`,_count=100;return Promise.allSettled([medplum.readHistory("ServiceRequest",id),medplum.search("Communication",{"based-on":ref,_count}),medplum.search("DiagnosticReport",{"based-on":ref,_count}),medplum.search("Media",{"based-on":ref,_count}),medplum.search("DocumentReference",{related:ref,_count}),medplum.search("Task",{_filter:`based-on eq ${ref} or focus eq ${ref} or subject eq ${ref}`,_count})])},createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",basedOn:[(0,import_core167.createReference)(resource)],subject:resource.subject,sender:(0,import_core167.createReference)(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[(0,import_core167.createReference)(resource)],subject:resource.subject,operator:(0,import_core167.createReference)(operator),issued:new Date().toISOString(),content})})}var import_core168=require("@mantine/core"),import_notifications6=require("@mantine/notifications"),import_core169=require("@medplum/core");var import_jsx_runtime127=require("react/jsx-runtime");function SmartAppLaunchLink(props){let medplum=a(),{client,patient,encounter,children,...rest}=props;function launchApp(){medplum.createResource({resourceType:"SmartAppLaunch",patient,encounter}).then(result=>{let url=new URL(client.launchUri);url.searchParams.set("iss",medplum.getBaseUrl()+"fhir/R4"),url.searchParams.set("launch",result.id),window.location.assign(url.toString())}).catch(err=>(0,import_notifications6.showNotification)({color:"red",message:(0,import_core169.normalizeErrorString)(err),autoClose:!1}))}return(0,import_jsx_runtime127.jsx)(import_core168.Anchor,{onClick:()=>launchApp(),...rest,children})}var import_core174=require("@medplum/core");var import_react90=require("react");var import_core170=require("@mantine/core"),import_core171=require("@medplum/core");var import_react87=require("react");var import_jsx_runtime128=require("react/jsx-runtime");function NewProjectForm(props){let medplum=a(),[outcome,setOutcome]=(0,import_react87.useState)();return(0,import_jsx_runtime128.jsxs)(Form,{onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome((0,import_core171.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime128.jsxs)(import_core170.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime128.jsx)(Logo,{size:32}),(0,import_jsx_runtime128.jsx)(import_core170.Title,{children:"Create project"})]}),(0,import_jsx_runtime128.jsxs)(import_core170.Stack,{gap:"xl",children:[(0,import_jsx_runtime128.jsx)(import_core170.TextInput,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime128.jsxs)(import_core170.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime128.jsx)(import_core170.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime128.jsx)(import_core170.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),(0,import_jsx_runtime128.jsx)(import_core170.Group,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:(0,import_jsx_runtime128.jsx)(import_core170.Button,{type:"submit",children:"Create project"})})]})}var import_core172=require("@mantine/core"),import_core173=require("@medplum/core");var import_react89=require("react");var import_react88=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_runtime129=require("react/jsx-runtime");function GoogleButton(props){let medplum=a(),{googleClientId,handleGoogleCredential}=props,parentRef=(0,import_react88.useRef)(null),[scriptLoaded,setScriptLoaded]=(0,import_react88.useState)(typeof google<"u"),[initialized,setInitialized]=(0,import_react88.useState)(!1),[buttonRendered,setButtonRendered]=(0,import_react88.useState)(!1);return(0,import_react88.useEffect)(()=>{if(typeof google>"u"){createScriptTag("https://accounts.google.com/gsi/client",()=>setScriptLoaded(!0));return}initialized||(google.accounts.id.initialize({client_id:googleClientId,callback:handleGoogleCredential}),setInitialized(!0)),parentRef.current&&!buttonRendered&&(google.accounts.id.renderButton(parentRef.current,{}),setButtonRendered(!0))},[medplum,googleClientId,initialized,scriptLoaded,parentRef,buttonRendered,handleGoogleCredential]),googleClientId?(0,import_jsx_runtime129.jsx)("div",{ref:parentRef}):null}function getGoogleClientId(clientId){if(clientId)return clientId;if(typeof window<"u"){let origin=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(origin))return"__GOOGLE_CLIENT_ID__"}}function initRecaptcha(siteKey){typeof grecaptcha>"u"&&createScriptTag("https://www.google.com/recaptcha/api.js?render="+siteKey)}function getRecaptcha(siteKey){return new Promise((resolve,reject)=>{grecaptcha.ready(async()=>{try{resolve(await grecaptcha.execute(siteKey,{action:"submit"}))}catch(err){reject(err)}})})}var import_jsx_runtime130=require("react/jsx-runtime");function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=a(),[outcome,setOutcome]=(0,import_react89.useState)(),issues=getIssuesForExpression(outcome,void 0);return(0,import_react89.useEffect)(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),(0,import_jsx_runtime130.jsxs)(Form,{onSubmit:async formData=>{try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome((0,import_core173.normalizeOperationOutcome)(err))}},children:[(0,import_jsx_runtime130.jsx)(import_core172.Center,{style:{flexDirection:"column"},children:props.children}),(0,import_jsx_runtime130.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime130.jsxs)(import_jsx_runtime130.Fragment,{children:[(0,import_jsx_runtime130.jsx)(import_core172.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime130.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_core173.normalizeOperationOutcome)(err))}}})}),(0,import_jsx_runtime130.jsx)(import_core172.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),(0,import_jsx_runtime130.jsxs)(import_core172.Stack,{gap:"xl",children:[(0,import_jsx_runtime130.jsx)(import_core172.TextInput,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),(0,import_jsx_runtime130.jsx)(import_core172.TextInput,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),(0,import_jsx_runtime130.jsx)(import_core172.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime130.jsx)(import_core172.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),(0,import_jsx_runtime130.jsxs)(import_core172.Text,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",(0,import_jsx_runtime130.jsx)(import_core172.Anchor,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime130.jsx)(import_core172.Anchor,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),(0,import_jsx_runtime130.jsxs)(import_core172.Text,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",(0,import_jsx_runtime130.jsx)(import_core172.Anchor,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",(0,import_jsx_runtime130.jsx)(import_core172.Anchor,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),(0,import_jsx_runtime130.jsxs)(import_core172.Group,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[(0,import_jsx_runtime130.jsx)(import_core172.Checkbox,{name:"remember",label:"Remember me",size:"xs"}),(0,import_jsx_runtime130.jsx)(import_core172.Button,{type:"submit",children:"Create account"})]})]})}var import_jsx_runtime131=require("react/jsx-runtime");function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=a(),[login,setLogin]=(0,import_react90.useState)(),[outcome,setOutcome]=(0,import_react90.useState)();(0,import_react90.useEffect)(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome((0,import_core174.normalizeOperationOutcome)(err)))},[medplum,type,projectId,login,onSuccess]);function handleAuthResponse(response){response.code?medplum.processCode(response.code).then(()=>onSuccess()).catch(console.log):response.login&&setLogin(response.login)}return(0,import_jsx_runtime131.jsxs)(Document,{width:450,children:[outcome&&(0,import_jsx_runtime131.jsx)("pre",{children:JSON.stringify(outcome,null,2)}),!login&&(0,import_jsx_runtime131.jsx)(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&(0,import_jsx_runtime131.jsx)(NewProjectForm,{login,handleAuthResponse})]})}var import_notifications7=require("@mantine/notifications"),import_core182=require("@medplum/core");var import_react94=require("react");var import_core175=require("@mantine/core"),import_core176=require("@medplum/core");var import_react91=require("react");var import_jsx_runtime132=require("react/jsx-runtime");function AuthenticationForm(props){let[email,setEmail]=(0,import_react91.useState)();return email?(0,import_jsx_runtime132.jsx)(PasswordForm,{email,...props}):(0,import_jsx_runtime132.jsx)(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=a(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),[outcome,setOutcome]=(0,import_react91.useState)(),issues=getIssuesForExpression(outcome,void 0),isExternalAuth=(0,import_react91.useCallback)(async authMethod=>{if(!authMethod.authorizeUrl)return!1;let state=JSON.stringify({...await medplum.ensureCodeChallenge(baseLoginRequest),domain:authMethod.domain}),url=new URL(authMethod.authorizeUrl);return url.searchParams.set("state",state),window.location.assign(url.toString()),!0},[medplum,baseLoginRequest]),handleSubmit=(0,import_react91.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_react91.useCallback)(async response=>{try{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)}catch(err){setOutcome((0,import_core176.normalizeOperationOutcome)(err))}},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return(0,import_jsx_runtime132.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime132.jsx)(import_core175.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime132.jsx)(OperationOutcomeAlert,{issues}),googleClientId&&(0,import_jsx_runtime132.jsxs)(import_jsx_runtime132.Fragment,{children:[(0,import_jsx_runtime132.jsx)(import_core175.Group,{justify:"center",p:"xl",style:{height:70},children:(0,import_jsx_runtime132.jsx)(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&(0,import_jsx_runtime132.jsx)(import_core175.Divider,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&(0,import_jsx_runtime132.jsx)(import_core175.TextInput,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"email")}),(0,import_jsx_runtime132.jsxs)(import_core175.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[(0,import_jsx_runtime132.jsx)("div",{children:onRegister&&(0,import_jsx_runtime132.jsx)(import_core175.Anchor,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&(0,import_jsx_runtime132.jsx)(import_core175.Button,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=a(),[outcome,setOutcome]=(0,import_react91.useState)(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=(0,import_react91.useCallback)(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome((0,import_core176.normalizeOperationOutcome)(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return(0,import_jsx_runtime132.jsxs)(Form,{onSubmit:handleSubmit,children:[(0,import_jsx_runtime132.jsx)(import_core175.Center,{style:{flexDirection:"column"},children}),(0,import_jsx_runtime132.jsx)(OperationOutcomeAlert,{issues}),(0,import_jsx_runtime132.jsx)(import_core175.Stack,{gap:"xl",children:(0,import_jsx_runtime132.jsx)(import_core175.PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),(0,import_jsx_runtime132.jsxs)(import_core175.Group,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&(0,import_jsx_runtime132.jsx)(import_core175.Anchor,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),(0,import_jsx_runtime132.jsx)(import_core175.Checkbox,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),(0,import_jsx_runtime132.jsx)(import_core175.Button,{type:"submit",children:"Sign in"})]})]})}var import_core177=require("@mantine/core"),import_core178=require("@medplum/core");var import_react92=require("react");var import_jsx_runtime133=require("react/jsx-runtime");function ChooseProfileForm(props){let medplum=a(),combobox=(0,import_core177.useCombobox)(),[search,setSearch]=(0,import_react92.useState)(""),[outcome,setOutcome]=(0,import_react92.useState)();function filterDisplay(display){return!!display?.toLowerCase()?.includes(search.toLowerCase())}function filterMembership(membership){return filterDisplay(membership.profile?.display)||filterDisplay(membership.project?.display)}function handleValueSelect(membershipId){medplum.post("auth/profile",{login:props.login,profile:membershipId}).then(props.handleAuthResponse).catch(err=>setOutcome((0,import_core178.normalizeOperationOutcome)(err)))}let options=props.memberships.filter(filterMembership).slice(0,10).map(item=>(0,import_jsx_runtime133.jsx)(import_core177.Combobox.Option,{value:item.id,children:(0,import_jsx_runtime133.jsx)(SelectOption,{...item})},item.id));return(0,import_jsx_runtime133.jsxs)(import_core177.Stack,{children:[(0,import_jsx_runtime133.jsxs)(import_core177.Flex,{gap:"md",mb:"md",justify:"center",align:"center",direction:"column",wrap:"nowrap",children:[(0,import_jsx_runtime133.jsx)(Logo,{size:32}),(0,import_jsx_runtime133.jsx)(import_core177.Title,{order:3,children:"Choose profile"})]}),(0,import_jsx_runtime133.jsx)(OperationOutcomeAlert,{outcome}),(0,import_jsx_runtime133.jsxs)(import_core177.Combobox,{store:combobox,onOptionSubmit:handleValueSelect,children:[(0,import_jsx_runtime133.jsx)(import_core177.Combobox.EventsTarget,{children:(0,import_jsx_runtime133.jsx)(import_core177.TextInput,{placeholder:"Search",value:search,onChange:event=>{setSearch(event.currentTarget.value),combobox.updateSelectedOptionIndex()}})}),(0,import_jsx_runtime133.jsx)("div",{children:(0,import_jsx_runtime133.jsx)(import_core177.Combobox.Options,{children:options.length>0?options:(0,import_jsx_runtime133.jsx)(import_core177.Combobox.Empty,{children:"Nothing found..."})})})]})]})}function SelectOption(membership){return(0,import_jsx_runtime133.jsxs)(import_core177.Group,{children:[(0,import_jsx_runtime133.jsx)(import_core177.Avatar,{radius:"xl"}),(0,import_jsx_runtime133.jsxs)("div",{children:[(0,import_jsx_runtime133.jsx)(import_core177.Text,{fz:"sm",fw:500,children:membership.profile?.display}),(0,import_jsx_runtime133.jsx)(import_core177.Text,{fz:"xs",opacity:.6,children:membership.project?.display})]})]})}var import_core179=require("@mantine/core");var import_jsx_runtime134=require("react/jsx-runtime");function ChooseScopeForm(props){let medplum=a();return(0,import_jsx_runtime134.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_runtime134.jsxs)(import_core179.Stack,{children:[(0,import_jsx_runtime134.jsxs)(import_core179.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime134.jsx)(Logo,{size:32}),(0,import_jsx_runtime134.jsx)(import_core179.Title,{children:"Choose scope"})]}),(0,import_jsx_runtime134.jsx)(import_core179.Stack,{children:(props.scope??"openid").split(" ").map(scopeName=>(0,import_jsx_runtime134.jsx)(import_core179.Checkbox,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName))}),(0,import_jsx_runtime134.jsx)(import_core179.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime134.jsx)(import_core179.Button,{type:"submit",children:"Set scope"})})]})})}var import_core180=require("@mantine/core"),import_core181=require("@medplum/core");var import_react93=require("react");var import_jsx_runtime135=require("react/jsx-runtime");function MfaForm(props){let medplum=a(),[errorMessage,setErrorMessage]=(0,import_react93.useState)();return(0,import_jsx_runtime135.jsx)(Form,{onSubmit:formData=>{setErrorMessage(void 0),medplum.post("auth/mfa/verify",{login:props.login,token:formData.token}).then(props.handleAuthResponse).catch(err=>setErrorMessage((0,import_core181.normalizeErrorString)(err)))},children:(0,import_jsx_runtime135.jsxs)(import_core180.Stack,{children:[(0,import_jsx_runtime135.jsxs)(import_core180.Center,{style:{flexDirection:"column"},children:[(0,import_jsx_runtime135.jsx)(Logo,{size:32}),(0,import_jsx_runtime135.jsx)(import_core180.Title,{children:"Enter MFA code"})]}),errorMessage&&(0,import_jsx_runtime135.jsx)(import_core180.Alert,{icon:(0,import_jsx_runtime135.jsx)(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),(0,import_jsx_runtime135.jsx)(import_core180.Stack,{children:(0,import_jsx_runtime135.jsx)(import_core180.TextInput,{name:"token",label:"MFA code",required:!0,autoFocus:!0})}),(0,import_jsx_runtime135.jsx)(import_core180.Group,{justify:"flex-end",mt:"xl",children:(0,import_jsx_runtime135.jsx)(import_core180.Button,{type:"submit",children:"Submit code"})})]})})}var import_jsx_runtime136=require("react/jsx-runtime");function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=a(),[login,setLogin]=(0,import_react94.useState)(),loginRequested=(0,import_react94.useRef)(!1),[mfaRequired,setAuthenticatorRequired]=(0,import_react94.useState)(!1),[memberships,setMemberships]=(0,import_react94.useState)(),handleCode=(0,import_react94.useCallback)(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core182.normalizeErrorString)(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=(0,import_react94.useCallback)(response=>{setAuthenticatorRequired(!!response.mfaRequired),response.login&&setLogin(response.login),response.memberships&&setMemberships(response.memberships),response.code&&(chooseScopes?setMemberships(void 0):handleCode(response.code))},[chooseScopes,handleCode]),handleScopeResponse=(0,import_react94.useCallback)(response=>{handleCode(response.code)},[handleCode]);return(0,import_react94.useEffect)(()=>{loginCode&&!loginRequested.current&&!login&&(loginRequested.current=!0,medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>(0,import_notifications7.showNotification)({color:"red",message:(0,import_core182.normalizeErrorString)(err)})))},[medplum,loginCode,loginRequested,login,handleAuthResponse]),(0,import_jsx_runtime136.jsx)(Document,{width:450,px:"sm",py:"md",children:login?mfaRequired?(0,import_jsx_runtime136.jsx)(MfaForm,{login,handleAuthResponse}):memberships?(0,import_jsx_runtime136.jsx)(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?(0,import_jsx_runtime136.jsx)(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?(0,import_jsx_runtime136.jsx)(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):(0,import_jsx_runtime136.jsx)("div",{children:"Success"}):(0,import_jsx_runtime136.jsx)(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}var import_core183=require("@mantine/core"),import_hooks8=require("@mantine/hooks"),import_notifications8=require("@mantine/notifications"),import_core184=require("@medplum/core");var import_react95=require("react");var BaseChat_default={chatPaper:"BaseChat_chatPaper",chatTitle:"BaseChat_chatTitle",chatBody:"BaseChat_chatBody",chatScrollArea:"BaseChat_chatScrollArea",chatInputContainer:"BaseChat_chatInputContainer",chatBubbleOuterWrap:"BaseChat_chatBubbleOuterWrap",chatBubbleRightAlignedInnerWrap:"BaseChat_chatBubbleRightAlignedInnerWrap",chatBubbleLeftAlignedInnerWrap:"BaseChat_chatBubbleLeftAlignedInnerWrap",chatBubble:"BaseChat_chatBubble",chatBubbleName:"BaseChat_chatBubbleName",chatBubbleNameRight:"BaseChat_chatBubbleNameRight"};var import_jsx_runtime137=require("react/jsx-runtime");function parseSentTime(communication){let sentTime=new Date(communication.sent??0),sentTimeMins=sentTime.getMinutes().toString();return`${sentTime.getHours()}:${sentTimeMins.length===1?"0":""}${sentTimeMins}`}function upsertCommunications(communications,received,setCommunications){let newCommunications=[...communications],foundNew=!1;for(let comm of received){let existingIdx=newCommunications.findIndex(c=>c.id===comm.id);existingIdx!==-1?newCommunications[existingIdx]=comm:(newCommunications.push(comm),foundNew=!0)}foundNew&&newCommunications.sort((a2,b2)=>a2.sent.localeCompare(b2.sent)),setCommunications(newCommunications)}function BaseChat(props){let{title,communications,setCommunications,query,sendMessage,onMessageReceived,inputDisabled,...paperProps}=props,medplum=a(),inputRef=(0,import_react95.useRef)(null),scrollAreaRef=(0,import_react95.useRef)(null),[profile,setProfile]=(0,import_react95.useState)(medplum.getProfile()),profileRefStr=(0,import_react95.useMemo)(()=>profile?(0,import_core184.getReferenceString)(medplum.getProfile()):"",[profile,medplum]);Oe(`Communication?${query}`,bundle=>{let communication=bundle.entry?.[1]?.resource;upsertCommunications(communicationsRef.current,[communication],setCommunications),onMessageReceived&&(0,import_core184.getReferenceString)(communication.sender)!==profileRefStr&&onMessageReceived(communication)});let sendMessageInternal=(0,import_react95.useCallback)(formData=>{inputDisabled||(inputRef.current&&(inputRef.current.value=""),sendMessage(formData.message),scrollToBottomRef.current=!0)},[inputDisabled,sendMessage]);(0,import_react95.useEffect)(()=>{let latestProfile=medplum.getProfile();profile?.id!==latestProfile?.id&&(setProfile(latestProfile),setCommunications([]))});let[parentRef,parentRect]=(0,import_hooks8.useResizeObserver)(),communicationsRef=(0,import_react95.useRef)(communications);communicationsRef.current=communications;let prevCommunicationsRef=(0,import_react95.useRef)(communications),scrollToBottomRef=(0,import_react95.useRef)(!0),searchMessages=(0,import_react95.useCallback)(async()=>{let searchParams=new URLSearchParams(query);searchParams.append("_sort","-sent");let searchResult=await medplum.searchResources("Communication",searchParams,{cache:"no-cache"});upsertCommunications(communicationsRef.current,searchResult,setCommunications)},[medplum,setCommunications,query]);(0,import_react95.useEffect)(()=>{searchMessages().catch(err=>(0,import_notifications8.showNotification)({color:"red",message:(0,import_core184.normalizeErrorString)(err)}))},[searchMessages]),(0,import_react95.useEffect)(()=>{communications!==prevCommunicationsRef.current&&(scrollToBottomRef.current=!0),prevCommunicationsRef.current=communications},[communications]),(0,import_react95.useEffect)(()=>{scrollToBottomRef.current&&scrollAreaRef.current?.scrollTo&&(scrollAreaRef.current.scrollTo({top:scrollAreaRef.current.scrollHeight,behavior:"smooth"}),scrollToBottomRef.current=!1)});let myLastDeliveredId=(0,import_react95.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_runtime137.jsxs)(import_core183.Paper,{className:BaseChat_default.chatPaper,p:0,radius:"md",...paperProps,children:[(0,import_jsx_runtime137.jsx)(import_core183.Title,{order:2,className:BaseChat_default.chatTitle,children:title}),(0,import_jsx_runtime137.jsx)("div",{className:BaseChat_default.chatBody,ref:parentRef,children:(0,import_jsx_runtime137.jsx)(import_core183.ScrollArea,{viewportRef:scrollAreaRef,className:BaseChat_default.chatScrollArea,h:parentRect.height,children:communications.map((c,i)=>{let prevCommunication=i>0?communications[i-1]:void 0,prevCommTime=prevCommunication?parseSentTime(prevCommunication):void 0,currCommTime=parseSentTime(c);return(0,import_jsx_runtime137.jsxs)(import_core183.Stack,{align:"stretch",children:[(!prevCommTime||currCommTime!==prevCommTime)&&(0,import_jsx_runtime137.jsx)("div",{style:{textAlign:"center"},children:currCommTime}),c.sender?.reference===profileRefStr?(0,import_jsx_runtime137.jsxs)(import_core183.Group,{justify:"flex-end",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime137.jsx)(ChatBubble,{alignment:"right",communication:c,showDelivered:!!c.received&&c.id===myLastDeliveredId}),(0,import_jsx_runtime137.jsx)(ResourceAvatar,{radius:"xl",color:"orange",value:c.sender})]}):(0,import_jsx_runtime137.jsxs)(import_core183.Group,{justify:"flex-start",align:"flex-end",gap:"xs",mb:"sm",children:[(0,import_jsx_runtime137.jsx)(ResourceAvatar,{radius:"xl",value:c.sender}),(0,import_jsx_runtime137.jsx)(ChatBubble,{alignment:"left",communication:c})]})]},`${c.id}--${c.meta?.versionId??"no-version"}`)})})}),(0,import_jsx_runtime137.jsx)("div",{className:BaseChat_default.chatInputContainer,children:(0,import_jsx_runtime137.jsx)(Form,{onSubmit:sendMessageInternal,children:(0,import_jsx_runtime137.jsx)(import_core183.TextInput,{ref:inputRef,name:"message",placeholder:inputDisabled?"Replies are disabled":"Type a message...",radius:"xl",rightSectionWidth:42,disabled:inputDisabled,rightSection:inputDisabled?void 0:(0,import_jsx_runtime137.jsx)(import_core183.ActionIcon,{type:"submit",size:"1.5rem",radius:"xl",color:"blue",variant:"filled","aria-label":"Send message",children:(0,import_jsx_runtime137.jsx)(IconArrowRight,{size:"1rem",stroke:1.5})})})})})]}):null}function ChatBubble(props){let{communication,alignment,showDelivered}=props,content=communication.payload?.[0]?.contentString||"",seenTime=new Date(communication.received??-1),senderResource=pe(communication.sender);return(0,import_jsx_runtime137.jsxs)("div",{className:BaseChat_default.chatBubbleOuterWrap,children:[(0,import_jsx_runtime137.jsx)("div",{className:clsx_default(BaseChat_default.chatBubbleName,alignment==="right"&&BaseChat_default.chatBubbleNameRight),"aria-label":"Sender name",children:senderResource?(0,import_core184.getDisplayString)(senderResource):"[Unknown sender]"}),(0,import_jsx_runtime137.jsx)("div",{className:alignment==="left"?BaseChat_default.chatBubbleLeftAlignedInnerWrap:BaseChat_default.chatBubbleRightAlignedInnerWrap,children:(0,import_jsx_runtime137.jsx)("div",{className:BaseChat_default.chatBubble,children:content})}),showDelivered&&(0,import_jsx_runtime137.jsxs)("div",{style:{textAlign:"right"},children:["Delivered ",seenTime.getHours(),":",seenTime.getMinutes().toString().length===1?"0":"",seenTime.getMinutes()]})]})}var import_core185=require("@mantine/core");var import_react96=require("react");var ChatModal_default={iconContainer:"ChatModal_iconContainer",icon:"ChatModal_icon",chatModalContainer:"ChatModal_chatModalContainer"};var import_jsx_runtime138=require("react/jsx-runtime");function ChatModal(props){let{open,children}=props,profile=W(),[opened,setOpened]=(0,import_react96.useState)(open??!1);return(0,import_react96.useEffect)(()=>{setOpened(prevVal=>open??prevVal)},[open]),profile?(0,import_jsx_runtime138.jsxs)(import_jsx_runtime138.Fragment,{children:[opened&&(0,import_jsx_runtime138.jsx)("div",{className:ChatModal_default.chatModalContainer,children}),opened?(0,import_jsx_runtime138.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime138.jsx)(import_core185.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!1),"aria-label":"Close chat",children:(0,import_jsx_runtime138.jsx)(IconChevronDown,{size:"1.625rem"})})}):(0,import_jsx_runtime138.jsx)("div",{className:ChatModal_default.iconContainer,children:(0,import_jsx_runtime138.jsx)(import_core185.ActionIcon,{className:ChatModal_default.icon,color:"blue",size:"lg",radius:"xl",variant:"outline",onClick:()=>setOpened(!0),"aria-label":"Open chat",children:(0,import_jsx_runtime138.jsx)(IconChevronUp,{size:"1.625rem"})})})]}):null}var import_core186=require("@medplum/core");var import_react97=require("react");var import_jsx_runtime139=require("react/jsx-runtime");function ThreadChat(props){let{thread,title,onMessageSent,inputDisabled}=props,medplum=a(),profile=W(),prevThreadId=se(thread?.id),[communications,setCommunications]=(0,import_react97.useState)([]),profileRef=(0,import_react97.useMemo)(()=>profile?(0,import_core186.createReference)(profile):void 0,[profile]),threadRef=(0,import_react97.useMemo)(()=>(0,import_core186.createReference)(thread),[thread]);(0,import_react97.useEffect)(()=>{thread?.id!==prevThreadId&&setCommunications([])},[thread?.id,prevThreadId]);let sendMessage=(0,import_react97.useCallback)(message=>{let profileRefStr=profileRef?(0,import_core186.getReferenceString)(profileRef):void 0;profileRefStr&&medplum.createResource({resourceType:"Communication",status:"in-progress",sender:profileRef,recipient:thread.recipient?.filter(ref=>(0,import_core186.getReferenceString)(ref)!==profileRefStr)??[],sent:new Date().toISOString(),payload:[{contentString:message}],partOf:[threadRef]}).then(communication=>{setCommunications([...communications,communication]),onMessageSent?.(communication)}).catch(console.error)},[medplum,profileRef,thread,threadRef,communications,onMessageSent]),onMessageReceived=(0,import_react97.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_runtime139.jsx)(BaseChat,{title:title??(thread?.topic?(0,import_core186.formatCodeableConcept)(thread.topic):"[No thread title]"),communications,setCommunications,query:`part-of=Communication/${thread.id}`,sendMessage,onMessageReceived,inputDisabled}):null}
74
74
  /*! Bundled license information:
75
75
 
76
76
  @tabler/icons-react/dist/esm/defaultAttributes.mjs:
77
77
  (**
78
- * @license @tabler/icons-react v3.2.0 - MIT
78
+ * @license @tabler/icons-react v3.4.0 - MIT
79
79
  *
80
80
  * This source code is licensed under the MIT license.
81
81
  * See the LICENSE file in the root directory of this source tree.
@@ -83,7 +83,7 @@
83
83
 
84
84
  @tabler/icons-react/dist/esm/createReactComponent.mjs:
85
85
  (**
86
- * @license @tabler/icons-react v3.2.0 - MIT
86
+ * @license @tabler/icons-react v3.4.0 - MIT
87
87
  *
88
88
  * This source code is licensed under the MIT license.
89
89
  * See the LICENSE file in the root directory of this source tree.
@@ -91,7 +91,7 @@
91
91
 
92
92
  @tabler/icons-react/dist/esm/icons/IconAdjustmentsHorizontal.mjs:
93
93
  (**
94
- * @license @tabler/icons-react v3.2.0 - MIT
94
+ * @license @tabler/icons-react v3.4.0 - MIT
95
95
  *
96
96
  * This source code is licensed under the MIT license.
97
97
  * See the LICENSE file in the root directory of this source tree.
@@ -99,7 +99,7 @@
99
99
 
100
100
  @tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs:
101
101
  (**
102
- * @license @tabler/icons-react v3.2.0 - MIT
102
+ * @license @tabler/icons-react v3.4.0 - MIT
103
103
  *
104
104
  * This source code is licensed under the MIT license.
105
105
  * See the LICENSE file in the root directory of this source tree.
@@ -107,7 +107,7 @@
107
107
 
108
108
  @tabler/icons-react/dist/esm/icons/IconArrowDown.mjs:
109
109
  (**
110
- * @license @tabler/icons-react v3.2.0 - MIT
110
+ * @license @tabler/icons-react v3.4.0 - MIT
111
111
  *
112
112
  * This source code is licensed under the MIT license.
113
113
  * See the LICENSE file in the root directory of this source tree.
@@ -115,7 +115,7 @@
115
115
 
116
116
  @tabler/icons-react/dist/esm/icons/IconArrowRight.mjs:
117
117
  (**
118
- * @license @tabler/icons-react v3.2.0 - MIT
118
+ * @license @tabler/icons-react v3.4.0 - MIT
119
119
  *
120
120
  * This source code is licensed under the MIT license.
121
121
  * See the LICENSE file in the root directory of this source tree.
@@ -123,7 +123,7 @@
123
123
 
124
124
  @tabler/icons-react/dist/esm/icons/IconArrowUp.mjs:
125
125
  (**
126
- * @license @tabler/icons-react v3.2.0 - MIT
126
+ * @license @tabler/icons-react v3.4.0 - MIT
127
127
  *
128
128
  * This source code is licensed under the MIT license.
129
129
  * See the LICENSE file in the root directory of this source tree.
@@ -131,7 +131,7 @@
131
131
 
132
132
  @tabler/icons-react/dist/esm/icons/IconBleachOff.mjs:
133
133
  (**
134
- * @license @tabler/icons-react v3.2.0 - MIT
134
+ * @license @tabler/icons-react v3.4.0 - MIT
135
135
  *
136
136
  * This source code is licensed under the MIT license.
137
137
  * See the LICENSE file in the root directory of this source tree.
@@ -139,7 +139,7 @@
139
139
 
140
140
  @tabler/icons-react/dist/esm/icons/IconBleach.mjs:
141
141
  (**
142
- * @license @tabler/icons-react v3.2.0 - MIT
142
+ * @license @tabler/icons-react v3.4.0 - MIT
143
143
  *
144
144
  * This source code is licensed under the MIT license.
145
145
  * See the LICENSE file in the root directory of this source tree.
@@ -147,7 +147,7 @@
147
147
 
148
148
  @tabler/icons-react/dist/esm/icons/IconBoxMultiple.mjs:
149
149
  (**
150
- * @license @tabler/icons-react v3.2.0 - MIT
150
+ * @license @tabler/icons-react v3.4.0 - MIT
151
151
  *
152
152
  * This source code is licensed under the MIT license.
153
153
  * See the LICENSE file in the root directory of this source tree.
@@ -155,7 +155,7 @@
155
155
 
156
156
  @tabler/icons-react/dist/esm/icons/IconBracketsContain.mjs:
157
157
  (**
158
- * @license @tabler/icons-react v3.2.0 - MIT
158
+ * @license @tabler/icons-react v3.4.0 - MIT
159
159
  *
160
160
  * This source code is licensed under the MIT license.
161
161
  * See the LICENSE file in the root directory of this source tree.
@@ -163,7 +163,7 @@
163
163
 
164
164
  @tabler/icons-react/dist/esm/icons/IconBucketOff.mjs:
165
165
  (**
166
- * @license @tabler/icons-react v3.2.0 - MIT
166
+ * @license @tabler/icons-react v3.4.0 - MIT
167
167
  *
168
168
  * This source code is licensed under the MIT license.
169
169
  * See the LICENSE file in the root directory of this source tree.
@@ -171,7 +171,7 @@
171
171
 
172
172
  @tabler/icons-react/dist/esm/icons/IconBucket.mjs:
173
173
  (**
174
- * @license @tabler/icons-react v3.2.0 - MIT
174
+ * @license @tabler/icons-react v3.4.0 - MIT
175
175
  *
176
176
  * This source code is licensed under the MIT license.
177
177
  * See the LICENSE file in the root directory of this source tree.
@@ -179,7 +179,7 @@
179
179
 
180
180
  @tabler/icons-react/dist/esm/icons/IconCalendar.mjs:
181
181
  (**
182
- * @license @tabler/icons-react v3.2.0 - MIT
182
+ * @license @tabler/icons-react v3.4.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.
@@ -187,7 +187,7 @@
187
187
 
188
188
  @tabler/icons-react/dist/esm/icons/IconCheck.mjs:
189
189
  (**
190
- * @license @tabler/icons-react v3.2.0 - MIT
190
+ * @license @tabler/icons-react v3.4.0 - MIT
191
191
  *
192
192
  * This source code is licensed under the MIT license.
193
193
  * See the LICENSE file in the root directory of this source tree.
@@ -195,7 +195,7 @@
195
195
 
196
196
  @tabler/icons-react/dist/esm/icons/IconCheckbox.mjs:
197
197
  (**
198
- * @license @tabler/icons-react v3.2.0 - MIT
198
+ * @license @tabler/icons-react v3.4.0 - MIT
199
199
  *
200
200
  * This source code is licensed under the MIT license.
201
201
  * See the LICENSE file in the root directory of this source tree.
@@ -203,7 +203,7 @@
203
203
 
204
204
  @tabler/icons-react/dist/esm/icons/IconChevronDown.mjs:
205
205
  (**
206
- * @license @tabler/icons-react v3.2.0 - MIT
206
+ * @license @tabler/icons-react v3.4.0 - MIT
207
207
  *
208
208
  * This source code is licensed under the MIT license.
209
209
  * See the LICENSE file in the root directory of this source tree.
@@ -211,7 +211,7 @@
211
211
 
212
212
  @tabler/icons-react/dist/esm/icons/IconChevronUp.mjs:
213
213
  (**
214
- * @license @tabler/icons-react v3.2.0 - MIT
214
+ * @license @tabler/icons-react v3.4.0 - MIT
215
215
  *
216
216
  * This source code is licensed under the MIT license.
217
217
  * See the LICENSE file in the root directory of this source tree.
@@ -219,7 +219,7 @@
219
219
 
220
220
  @tabler/icons-react/dist/esm/icons/IconCircleMinus.mjs:
221
221
  (**
222
- * @license @tabler/icons-react v3.2.0 - MIT
222
+ * @license @tabler/icons-react v3.4.0 - MIT
223
223
  *
224
224
  * This source code is licensed under the MIT license.
225
225
  * See the LICENSE file in the root directory of this source tree.
@@ -227,7 +227,7 @@
227
227
 
228
228
  @tabler/icons-react/dist/esm/icons/IconCirclePlus.mjs:
229
229
  (**
230
- * @license @tabler/icons-react v3.2.0 - MIT
230
+ * @license @tabler/icons-react v3.4.0 - MIT
231
231
  *
232
232
  * This source code is licensed under the MIT license.
233
233
  * See the LICENSE file in the root directory of this source tree.
@@ -235,7 +235,7 @@
235
235
 
236
236
  @tabler/icons-react/dist/esm/icons/IconCloudUpload.mjs:
237
237
  (**
238
- * @license @tabler/icons-react v3.2.0 - MIT
238
+ * @license @tabler/icons-react v3.4.0 - MIT
239
239
  *
240
240
  * This source code is licensed under the MIT license.
241
241
  * See the LICENSE file in the root directory of this source tree.
@@ -243,7 +243,7 @@
243
243
 
244
244
  @tabler/icons-react/dist/esm/icons/IconColumns.mjs:
245
245
  (**
246
- * @license @tabler/icons-react v3.2.0 - MIT
246
+ * @license @tabler/icons-react v3.4.0 - MIT
247
247
  *
248
248
  * This source code is licensed under the MIT license.
249
249
  * See the LICENSE file in the root directory of this source tree.
@@ -251,7 +251,7 @@
251
251
 
252
252
  @tabler/icons-react/dist/esm/icons/IconCopy.mjs:
253
253
  (**
254
- * @license @tabler/icons-react v3.2.0 - MIT
254
+ * @license @tabler/icons-react v3.4.0 - MIT
255
255
  *
256
256
  * This source code is licensed under the MIT license.
257
257
  * See the LICENSE file in the root directory of this source tree.
@@ -259,7 +259,7 @@
259
259
 
260
260
  @tabler/icons-react/dist/esm/icons/IconCurrencyDollar.mjs:
261
261
  (**
262
- * @license @tabler/icons-react v3.2.0 - MIT
262
+ * @license @tabler/icons-react v3.4.0 - MIT
263
263
  *
264
264
  * This source code is licensed under the MIT license.
265
265
  * See the LICENSE file in the root directory of this source tree.
@@ -267,7 +267,7 @@
267
267
 
268
268
  @tabler/icons-react/dist/esm/icons/IconDots.mjs:
269
269
  (**
270
- * @license @tabler/icons-react v3.2.0 - MIT
270
+ * @license @tabler/icons-react v3.4.0 - MIT
271
271
  *
272
272
  * This source code is licensed under the MIT license.
273
273
  * See the LICENSE file in the root directory of this source tree.
@@ -275,7 +275,7 @@
275
275
 
276
276
  @tabler/icons-react/dist/esm/icons/IconEdit.mjs:
277
277
  (**
278
- * @license @tabler/icons-react v3.2.0 - MIT
278
+ * @license @tabler/icons-react v3.4.0 - MIT
279
279
  *
280
280
  * This source code is licensed under the MIT license.
281
281
  * See the LICENSE file in the root directory of this source tree.
@@ -283,7 +283,7 @@
283
283
 
284
284
  @tabler/icons-react/dist/esm/icons/IconEqualNot.mjs:
285
285
  (**
286
- * @license @tabler/icons-react v3.2.0 - MIT
286
+ * @license @tabler/icons-react v3.4.0 - MIT
287
287
  *
288
288
  * This source code is licensed under the MIT license.
289
289
  * See the LICENSE file in the root directory of this source tree.
@@ -291,7 +291,7 @@
291
291
 
292
292
  @tabler/icons-react/dist/esm/icons/IconEqual.mjs:
293
293
  (**
294
- * @license @tabler/icons-react v3.2.0 - MIT
294
+ * @license @tabler/icons-react v3.4.0 - MIT
295
295
  *
296
296
  * This source code is licensed under the MIT license.
297
297
  * See the LICENSE file in the root directory of this source tree.
@@ -299,7 +299,7 @@
299
299
 
300
300
  @tabler/icons-react/dist/esm/icons/IconFileAlert.mjs:
301
301
  (**
302
- * @license @tabler/icons-react v3.2.0 - MIT
302
+ * @license @tabler/icons-react v3.4.0 - MIT
303
303
  *
304
304
  * This source code is licensed under the MIT license.
305
305
  * See the LICENSE file in the root directory of this source tree.
@@ -307,7 +307,7 @@
307
307
 
308
308
  @tabler/icons-react/dist/esm/icons/IconFilePlus.mjs:
309
309
  (**
310
- * @license @tabler/icons-react v3.2.0 - MIT
310
+ * @license @tabler/icons-react v3.4.0 - MIT
311
311
  *
312
312
  * This source code is licensed under the MIT license.
313
313
  * See the LICENSE file in the root directory of this source tree.
@@ -315,7 +315,7 @@
315
315
 
316
316
  @tabler/icons-react/dist/esm/icons/IconFilter.mjs:
317
317
  (**
318
- * @license @tabler/icons-react v3.2.0 - MIT
318
+ * @license @tabler/icons-react v3.4.0 - MIT
319
319
  *
320
320
  * This source code is licensed under the MIT license.
321
321
  * See the LICENSE file in the root directory of this source tree.
@@ -323,7 +323,15 @@
323
323
 
324
324
  @tabler/icons-react/dist/esm/icons/IconGenderFemale.mjs:
325
325
  (**
326
- * @license @tabler/icons-react v3.2.0 - MIT
326
+ * @license @tabler/icons-react v3.4.0 - MIT
327
+ *
328
+ * This source code is licensed under the MIT license.
329
+ * See the LICENSE file in the root directory of this source tree.
330
+ *)
331
+
332
+ @tabler/icons-react/dist/esm/icons/IconGenderMale.mjs:
333
+ (**
334
+ * @license @tabler/icons-react v3.4.0 - MIT
327
335
  *
328
336
  * This source code is licensed under the MIT license.
329
337
  * See the LICENSE file in the root directory of this source tree.
@@ -331,7 +339,7 @@
331
339
 
332
340
  @tabler/icons-react/dist/esm/icons/IconListDetails.mjs:
333
341
  (**
334
- * @license @tabler/icons-react v3.2.0 - MIT
342
+ * @license @tabler/icons-react v3.4.0 - MIT
335
343
  *
336
344
  * This source code is licensed under the MIT license.
337
345
  * See the LICENSE file in the root directory of this source tree.
@@ -339,7 +347,7 @@
339
347
 
340
348
  @tabler/icons-react/dist/esm/icons/IconLogout.mjs:
341
349
  (**
342
- * @license @tabler/icons-react v3.2.0 - MIT
350
+ * @license @tabler/icons-react v3.4.0 - MIT
343
351
  *
344
352
  * This source code is licensed under the MIT license.
345
353
  * See the LICENSE file in the root directory of this source tree.
@@ -347,7 +355,7 @@
347
355
 
348
356
  @tabler/icons-react/dist/esm/icons/IconMathGreater.mjs:
349
357
  (**
350
- * @license @tabler/icons-react v3.2.0 - MIT
358
+ * @license @tabler/icons-react v3.4.0 - MIT
351
359
  *
352
360
  * This source code is licensed under the MIT license.
353
361
  * See the LICENSE file in the root directory of this source tree.
@@ -355,7 +363,7 @@
355
363
 
356
364
  @tabler/icons-react/dist/esm/icons/IconMathLower.mjs:
357
365
  (**
358
- * @license @tabler/icons-react v3.2.0 - MIT
366
+ * @license @tabler/icons-react v3.4.0 - MIT
359
367
  *
360
368
  * This source code is licensed under the MIT license.
361
369
  * See the LICENSE file in the root directory of this source tree.
@@ -363,7 +371,7 @@
363
371
 
364
372
  @tabler/icons-react/dist/esm/icons/IconMessage.mjs:
365
373
  (**
366
- * @license @tabler/icons-react v3.2.0 - MIT
374
+ * @license @tabler/icons-react v3.4.0 - MIT
367
375
  *
368
376
  * This source code is licensed under the MIT license.
369
377
  * See the LICENSE file in the root directory of this source tree.
@@ -371,7 +379,7 @@
371
379
 
372
380
  @tabler/icons-react/dist/esm/icons/IconPin.mjs:
373
381
  (**
374
- * @license @tabler/icons-react v3.2.0 - MIT
382
+ * @license @tabler/icons-react v3.4.0 - MIT
375
383
  *
376
384
  * This source code is licensed under the MIT license.
377
385
  * See the LICENSE file in the root directory of this source tree.
@@ -379,7 +387,7 @@
379
387
 
380
388
  @tabler/icons-react/dist/esm/icons/IconPinnedOff.mjs:
381
389
  (**
382
- * @license @tabler/icons-react v3.2.0 - MIT
390
+ * @license @tabler/icons-react v3.4.0 - MIT
383
391
  *
384
392
  * This source code is licensed under the MIT license.
385
393
  * See the LICENSE file in the root directory of this source tree.
@@ -387,7 +395,7 @@
387
395
 
388
396
  @tabler/icons-react/dist/esm/icons/IconPlus.mjs:
389
397
  (**
390
- * @license @tabler/icons-react v3.2.0 - MIT
398
+ * @license @tabler/icons-react v3.4.0 - MIT
391
399
  *
392
400
  * This source code is licensed under the MIT license.
393
401
  * See the LICENSE file in the root directory of this source tree.
@@ -395,7 +403,7 @@
395
403
 
396
404
  @tabler/icons-react/dist/esm/icons/IconRefresh.mjs:
397
405
  (**
398
- * @license @tabler/icons-react v3.2.0 - MIT
406
+ * @license @tabler/icons-react v3.4.0 - MIT
399
407
  *
400
408
  * This source code is licensed under the MIT license.
401
409
  * See the LICENSE file in the root directory of this source tree.
@@ -403,7 +411,7 @@
403
411
 
404
412
  @tabler/icons-react/dist/esm/icons/IconSearch.mjs:
405
413
  (**
406
- * @license @tabler/icons-react v3.2.0 - MIT
414
+ * @license @tabler/icons-react v3.4.0 - MIT
407
415
  *
408
416
  * This source code is licensed under the MIT license.
409
417
  * See the LICENSE file in the root directory of this source tree.
@@ -411,7 +419,7 @@
411
419
 
412
420
  @tabler/icons-react/dist/esm/icons/IconSettings.mjs:
413
421
  (**
414
- * @license @tabler/icons-react v3.2.0 - MIT
422
+ * @license @tabler/icons-react v3.4.0 - MIT
415
423
  *
416
424
  * This source code is licensed under the MIT license.
417
425
  * See the LICENSE file in the root directory of this source tree.
@@ -419,7 +427,7 @@
419
427
 
420
428
  @tabler/icons-react/dist/esm/icons/IconSortAscending.mjs:
421
429
  (**
422
- * @license @tabler/icons-react v3.2.0 - MIT
430
+ * @license @tabler/icons-react v3.4.0 - MIT
423
431
  *
424
432
  * This source code is licensed under the MIT license.
425
433
  * See the LICENSE file in the root directory of this source tree.
@@ -427,7 +435,7 @@
427
435
 
428
436
  @tabler/icons-react/dist/esm/icons/IconSortDescending.mjs:
429
437
  (**
430
- * @license @tabler/icons-react v3.2.0 - MIT
438
+ * @license @tabler/icons-react v3.4.0 - MIT
431
439
  *
432
440
  * This source code is licensed under the MIT license.
433
441
  * See the LICENSE file in the root directory of this source tree.
@@ -435,7 +443,7 @@
435
443
 
436
444
  @tabler/icons-react/dist/esm/icons/IconSquare.mjs:
437
445
  (**
438
- * @license @tabler/icons-react v3.2.0 - MIT
446
+ * @license @tabler/icons-react v3.4.0 - MIT
439
447
  *
440
448
  * This source code is licensed under the MIT license.
441
449
  * See the LICENSE file in the root directory of this source tree.
@@ -443,7 +451,7 @@
443
451
 
444
452
  @tabler/icons-react/dist/esm/icons/IconStethoscope.mjs:
445
453
  (**
446
- * @license @tabler/icons-react v3.2.0 - MIT
454
+ * @license @tabler/icons-react v3.4.0 - MIT
447
455
  *
448
456
  * This source code is licensed under the MIT license.
449
457
  * See the LICENSE file in the root directory of this source tree.
@@ -451,7 +459,7 @@
451
459
 
452
460
  @tabler/icons-react/dist/esm/icons/IconSwitchHorizontal.mjs:
453
461
  (**
454
- * @license @tabler/icons-react v3.2.0 - MIT
462
+ * @license @tabler/icons-react v3.4.0 - MIT
455
463
  *
456
464
  * This source code is licensed under the MIT license.
457
465
  * See the LICENSE file in the root directory of this source tree.
@@ -459,7 +467,7 @@
459
467
 
460
468
  @tabler/icons-react/dist/esm/icons/IconTableExport.mjs:
461
469
  (**
462
- * @license @tabler/icons-react v3.2.0 - MIT
470
+ * @license @tabler/icons-react v3.4.0 - MIT
463
471
  *
464
472
  * This source code is licensed under the MIT license.
465
473
  * See the LICENSE file in the root directory of this source tree.
@@ -467,7 +475,7 @@
467
475
 
468
476
  @tabler/icons-react/dist/esm/icons/IconTrash.mjs:
469
477
  (**
470
- * @license @tabler/icons-react v3.2.0 - MIT
478
+ * @license @tabler/icons-react v3.4.0 - MIT
471
479
  *
472
480
  * This source code is licensed under the MIT license.
473
481
  * See the LICENSE file in the root directory of this source tree.
@@ -475,7 +483,7 @@
475
483
 
476
484
  @tabler/icons-react/dist/esm/icons/IconUserSquare.mjs:
477
485
  (**
478
- * @license @tabler/icons-react v3.2.0 - MIT
486
+ * @license @tabler/icons-react v3.4.0 - MIT
479
487
  *
480
488
  * This source code is licensed under the MIT license.
481
489
  * See the LICENSE file in the root directory of this source tree.
@@ -483,7 +491,7 @@
483
491
 
484
492
  @tabler/icons-react/dist/esm/icons/IconX.mjs:
485
493
  (**
486
- * @license @tabler/icons-react v3.2.0 - MIT
494
+ * @license @tabler/icons-react v3.4.0 - MIT
487
495
  *
488
496
  * This source code is licensed under the MIT license.
489
497
  * See the LICENSE file in the root directory of this source tree.
@@ -491,7 +499,7 @@
491
499
 
492
500
  @tabler/icons-react/dist/esm/tabler-icons-react.mjs:
493
501
  (**
494
- * @license @tabler/icons-react v3.2.0 - MIT
502
+ * @license @tabler/icons-react v3.4.0 - MIT
495
503
  *
496
504
  * This source code is licensed under the MIT license.
497
505
  * See the LICENSE file in the root directory of this source tree.