@medplum/react 2.2.10 → 3.0.1

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,5 +1,5 @@
1
- var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDescriptor;var md=Object.getOwnPropertyNames;var pd=Object.getPrototypeOf,xd=Object.prototype.hasOwnProperty;var vt=(e,o)=>()=>(o||e((o={exports:{}}).exports,o),o.exports);var Id=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of md(o))!xd.call(e,a)&&a!==t&&zl(e,a,{get:()=>o[a],enumerable:!(r=dd(o,a))||r.enumerable});return e};var gd=(e,o,t)=>(t=e!=null?cd(pd(e)):{},Id(o||!e||!e.__esModule?zl(t,"default",{value:e,enumerable:!0}):t,e));var wn=vt(Nr=>{"use strict";Object.defineProperty(Nr,"__esModule",{value:!0});Nr.Pointer=void 0;function ey(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}function oy(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}var ty=function(){function e(o){o===void 0&&(o=[""]),this.tokens=o}return e.fromJSON=function(o){var t=o.split("/").map(ey);if(t[0]!=="")throw new Error("Invalid JSON Pointer: ".concat(o));return new e(t)},e.prototype.toString=function(){return this.tokens.map(oy).join("/")},e.prototype.evaluate=function(o){for(var t=null,r="",a=o,n=1,l=this.tokens.length;n<l;n++)t=a,r=this.tokens[n],!(r=="__proto__"||r=="constructor"||r=="prototype")&&(a=(t||{})[r]);return{parent:t,key:r,value:a}},e.prototype.get=function(o){return this.evaluate(o).value},e.prototype.set=function(o,t){var r=this.evaluate(o);r.parent&&(r.parent[r.key]=t)},e.prototype.push=function(o){this.tokens.push(o)},e.prototype.add=function(o){var t=this.tokens.concat(String(o));return new e(t)},e}();Nr.Pointer=ty});var En=vt(Ke=>{"use strict";Object.defineProperty(Ke,"__esModule",{value:!0});Ke.clone=Ke.objectType=Ke.hasOwnProperty=void 0;Ke.hasOwnProperty=Object.prototype.hasOwnProperty;function ry(e){return e===void 0?"undefined":e===null?"null":Array.isArray(e)?"array":typeof e}Ke.objectType=ry;function ay(e){return e!=null&&typeof e=="object"}function On(e){if(!ay(e))return e;if(e.constructor==Array){for(var o=e.length,t=new Array(o),r=0;r<o;r++)t[r]=On(e[r]);return t}if(e.constructor==Date){var a=new Date(+e);return a}var n={};for(var l in e)Ke.hasOwnProperty.call(e,l)&&(n[l]=On(e[l]));return n}Ke.clone=On});var Vn=vt(ve=>{"use strict";Object.defineProperty(ve,"__esModule",{value:!0});ve.diffAny=ve.diffObjects=ve.diffArrays=ve.intersection=ve.subtract=ve.isDestructive=void 0;var Ut=En();function ny(e){var o=e.op;return o==="remove"||o==="replace"||o==="copy"||o==="move"}ve.isDestructive=ny;function Nn(e,o){var t={};for(var r in e)Ut.hasOwnProperty.call(e,r)&&e[r]!==void 0&&(t[r]=1);for(var a in o)Ut.hasOwnProperty.call(o,a)&&o[a]!==void 0&&delete t[a];return Object.keys(t)}ve.subtract=Nn;function _s(e){for(var o=e.length,t={},r=0;r<o;r++){var a=e[r];for(var n in a)Ut.hasOwnProperty.call(a,n)&&a[n]!==void 0&&(t[n]=(t[n]||0)+1)}for(var n in t)t[n]<o&&delete t[n];return Object.keys(t)}ve.intersection=_s;function ly(e){return e.op==="add"}function fy(e){return e.op==="remove"}function Ln(e,o){return{operations:e.operations.concat(o),cost:e.cost+1}}function Ks(e,o,t,r){r===void 0&&(r=Vr);var a={"0,0":{operations:[],cost:0}};function n(u,c){var d="".concat(u,",").concat(c),m=a[d];if(m===void 0){if(u>0&&c>0&&!r(e[u-1],o[c-1],t.add(String(u-1))).length)m=n(u-1,c-1);else{var p=[];if(u>0){var x=n(u-1,c),C={op:"remove",index:u-1};p.push(Ln(x,C))}if(c>0){var y=n(u,c-1),v={op:"add",index:u-1,value:o[c-1]};p.push(Ln(y,v))}if(u>0&&c>0){var b=n(u-1,c-1),P={op:"replace",index:u-1,original:e[u-1],value:o[c-1]};p.push(Ln(b,P))}var h=p.sort(function(A,W){return A.cost-W.cost})[0];m=h}a[d]=m}return m}var l=isNaN(e.length)||e.length<=0?0:e.length,f=isNaN(o.length)||o.length<=0?0:o.length,i=n(l,f).operations,s=i.reduce(function(u,c){var d=u[0],m=u[1];if(ly(c)){var p=c.index+1+m,x=p<l+m?String(p):"-",C={op:c.op,path:t.add(x).toString(),value:c.value};return[d.concat(C),m+1]}else if(fy(c)){var C={op:c.op,path:t.add(String(c.index+m)).toString()};return[d.concat(C),m-1]}else{var y=t.add(String(c.index+m)),v=r(c.original,c.value,y);return[d.concat.apply(d,v),m]}},[[],0])[0];return s}ve.diffArrays=Ks;function Zs(e,o,t,r){r===void 0&&(r=Vr);var a=[];return Nn(e,o).forEach(function(n){a.push({op:"remove",path:t.add(n).toString()})}),Nn(o,e).forEach(function(n){a.push({op:"add",path:t.add(n).toString(),value:o[n]})}),_s([e,o]).forEach(function(n){a.push.apply(a,r(e[n],o[n],t.add(n)))}),a}ve.diffObjects=Zs;function Vr(e,o,t,r){if(r===void 0&&(r=Vr),e===o)return[];var a=(0,Ut.objectType)(e),n=(0,Ut.objectType)(o);return a=="array"&&n=="array"?Ks(e,o,t,r):a=="object"&&n=="object"?Zs(e,o,t,r):[{op:"replace",path:t.toString(),value:o}]}ve.diffAny=Vr});var fi=vt(Z=>{"use strict";var Hn=Z&&Z.__extends||function(){var e=function(o,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,a){r.__proto__=a}||function(r,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(r[n]=a[n])},e(o,t)};return function(o,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");e(o,t);function r(){this.constructor=o}o.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(Z,"__esModule",{value:!0});Z.apply=Z.InvalidOperationError=Z.test=Z.copy=Z.move=Z.replace=Z.remove=Z.add=Z.TestError=Z.MissingError=void 0;var Ze=wn(),qn=En(),sy=Vn(),Qe=function(e){Hn(o,e);function o(t){var r=e.call(this,"Value required at path: ".concat(t))||this;return r.path=t,r.name="MissingError",r}return o}(Error);Z.MissingError=Qe;var Ys=function(e){Hn(o,e);function o(t,r){var a=e.call(this,"Test failed: ".concat(t," != ").concat(r))||this;return a.actual=t,a.expected=r,a.name="TestError",a}return o}(Error);Z.TestError=Ys;function Gn(e,o,t){if(Array.isArray(e))if(o=="-")e.push(t);else{var r=parseInt(o,10);e.splice(r,0,t)}else e[o]=t}function js(e,o){if(Array.isArray(e)){var t=parseInt(o,10);e.splice(t,1)}else delete e[o]}function ei(e,o){var t=Ze.Pointer.fromJSON(o.path).evaluate(e);return t.parent===void 0?new Qe(o.path):(Gn(t.parent,t.key,(0,qn.clone)(o.value)),null)}Z.add=ei;function oi(e,o){var t=Ze.Pointer.fromJSON(o.path).evaluate(e);return t.value===void 0?new Qe(o.path):(js(t.parent,t.key),null)}Z.remove=oi;function ti(e,o){var t=Ze.Pointer.fromJSON(o.path).evaluate(e);if(t.parent===null)return new Qe(o.path);if(Array.isArray(t.parent)){if(parseInt(t.key,10)>=t.parent.length)return new Qe(o.path)}else if(t.value===void 0)return new Qe(o.path);return t.parent[t.key]=(0,qn.clone)(o.value),null}Z.replace=ti;function ri(e,o){var t=Ze.Pointer.fromJSON(o.from).evaluate(e);if(t.value===void 0)return new Qe(o.from);var r=Ze.Pointer.fromJSON(o.path).evaluate(e);return r.parent===void 0?new Qe(o.path):(js(t.parent,t.key),Gn(r.parent,r.key,t.value),null)}Z.move=ri;function ai(e,o){var t=Ze.Pointer.fromJSON(o.from).evaluate(e);if(t.value===void 0)return new Qe(o.from);var r=Ze.Pointer.fromJSON(o.path).evaluate(e);return r.parent===void 0?new Qe(o.path):(Gn(r.parent,r.key,(0,qn.clone)(t.value)),null)}Z.copy=ai;function ni(e,o){var t=Ze.Pointer.fromJSON(o.path).evaluate(e);return(0,sy.diffAny)(t.value,o.value,new Ze.Pointer).length?new Ys(t.value,o.value):null}Z.test=ni;var li=function(e){Hn(o,e);function o(t){var r=e.call(this,"Invalid operation: ".concat(t.op))||this;return r.operation=t,r.name="InvalidOperationError",r}return o}(Error);Z.InvalidOperationError=li;function iy(e,o){switch(o.op){case"add":return ei(e,o);case"remove":return oi(e,o);case"replace":return ti(e,o);case"move":return ri(e,o);case"copy":return ai(e,o);case"test":return ni(e,o)}return new li(o)}Z.apply=iy});var ii=vt(ze=>{"use strict";Object.defineProperty(ze,"__esModule",{value:!0});ze.createTests=ze.createPatch=ze.applyPatch=ze.Pointer=void 0;var Un=wn();Object.defineProperty(ze,"Pointer",{enumerable:!0,get:function(){return Un.Pointer}});var uy=fi(),Qn=Vn();function cy(e,o){return o.map(function(t){return(0,uy.apply)(e,t)})}ze.applyPatch=cy;function dy(e){function o(t,r,a){var n=e(t,r,a);return Array.isArray(n)?n:(0,Qn.diffAny)(t,r,a,o)}return o}function my(e,o,t){var r=new Un.Pointer;return(t?dy(t):Qn.diffAny)(e,o,r)}ze.createPatch=my;function si(e,o){var t=Un.Pointer.fromJSON(o).evaluate(e);if(t!==void 0)return{op:"test",path:o,value:t.value}}function py(e,o){var t=new Array;return o.filter(Qn.isDestructive).forEach(function(r){var a=si(e,r.path);if(a&&t.push(a),"from"in r){var n=si(e,r.from);n&&t.push(n)}}),t}ze.createTests=py});import{useEffect as Wl,useMemo as hd,useState as yd}from"react";import{createContext as vd,useContext as Sd}from"react";import{jsx as Cd}from"react/jsx-runtime";import{deepEquals as Rd,isReference as _l,isResource as Pd,normalizeOperationOutcome as Td}from"@medplum/core";import{useCallback as kd,useEffect as Xl,useState as Dd}from"react";import{allOk as Bd,normalizeOperationOutcome as Ad}from"@medplum/core";import{useEffect as Md,useState as ar}from"react";var $l=vd(void 0);function St(){return Sd($l)}function S(){return St().medplum}function no(){return St().navigate}function nr(){return St().profile}function CT(e){let o=e.medplum,t=e.navigate??bd,[r,a]=yd({profile:o.getProfile(),loading:!o.isInitialized});Wl(()=>{o&&(o.isInitialized||(a(l=>({...l,loading:!0})),o.getInitPromise().then(()=>a(l=>({...l,loading:!1}))).catch(console.error)))},[o,o.isInitialized]),Wl(()=>{function l(){a({...r,profile:o.getProfile()})}return o.addEventListener("change",l),()=>o.removeEventListener("change",l)},[o,r]);let n=hd(()=>({...r,medplum:o,navigate:t}),[r,o,t]);return Cd($l.Provider,{value:n,children:e.children})}function bd(e){window.location.assign(e)}function X(e,o){let t=S(),[r,a]=Dd(Jl(t,e)),n=kd(l=>{Rd(l,r)||a(l)},[r,a]);return Xl(()=>{n(Jl(t,e))},[t,e,n]),Xl(()=>{let l=!0;return _l(e)&&t.readReference(e).then(f=>{l&&n(f)}).catch(f=>{l&&(n(void 0),o&&o(Td(f)))}),()=>l=!1},[t,r,e,n,o]),r}function Jl(e,o){if(o){if(Pd(o))return o;if(_l(o))return e.getCachedReference(o)}}function kT(e,o){return Da("search",e,o)}function Kl(e,o){return Da("searchOne",e,o)}function Zl(e,o){return Da("searchResources",e,o)}function Da(e,o,t){let r=S(),[a,n]=ar(),[l,f]=ar(!1),[i,s]=ar(),[u,c]=ar();return Md(()=>{let d=r.fhirSearchUrl(o,t).toString();d!==a&&(n(d),r[e](o,t).then(m=>{f(!1),s(m),c(Bd)}).catch(m=>{f(!1),s(void 0),c(Ad(m))}))},[r,e,o,t,a,s]),[i,l,u]}import{formatAddress as Fd}from"@medplum/core";import{Fragment as wd,jsx as Od}from"react/jsx-runtime";function Yl(e){let o=e.value;return o?Od(wd,{children:Fd(o)}):null}import{Group as Ed,NativeSelect as jl,TextInput as Ct}from"@mantine/core";import{useRef as Ld,useState as Nd}from"react";import{jsx as ho,jsxs as Vd}from"react/jsx-runtime";function ef(e,o){return e.line&&e.line.length>o?e.line[o]:""}function of(e,o,t){let r=e.line||[];for(;r.length<=o;)r.push("");return r[o]=t,{...e,line:r}}function tf(e){let[o,t]=Nd(e.defaultValue||{}),r=Ld();r.current=o;function a(d){t(d),e.onChange&&e.onChange(d)}function n(d){a({...r.current,use:d})}function l(d){a({...r.current,type:d})}function f(d){a(of(r.current||{},0,d))}function i(d){a(of(r.current||{},1,d))}function s(d){a({...r.current,city:d})}function u(d){a({...r.current,state:d})}function c(d){a({...r.current,postalCode:d})}return Vd(Ed,{spacing:"xs",grow:!0,noWrap:!0,children:[ho(jl,{"data-testid":"address-use",defaultValue:o.use,onChange:d=>n(d.currentTarget.value),data:["","home","work","temp","old","billing"]}),ho(jl,{"data-testid":"address-type",defaultValue:o.type,onChange:d=>l(d.currentTarget.value),data:["","postal","physical","both"]}),ho(Ct,{placeholder:"Line 1",defaultValue:ef(o,0),onChange:d=>f(d.currentTarget.value)}),ho(Ct,{placeholder:"Line 2",defaultValue:ef(o,1),onChange:d=>i(d.currentTarget.value)}),ho(Ct,{placeholder:"City",defaultValue:o.city,onChange:d=>s(d.currentTarget.value)}),ho(Ct,{placeholder:"State",defaultValue:o.state,onChange:d=>u(d.currentTarget.value)}),ho(Ct,{placeholder:"Postal Code",defaultValue:o.postalCode,onChange:d=>c(d.currentTarget.value)})]})}import{TextInput as Hd}from"@mantine/core";import{createReference as qd}from"@medplum/core";import{useRef as Gd,useState as Ud}from"react";import{jsx as Qd}from"react/jsx-runtime";function rf(e){let o=nr(),[t,r]=Ud(e.defaultValue||{}),a=Gd();a.current=t;function n(l){let f=l?{text:l,authorReference:o&&qd(o),time:new Date().toISOString()}:{};r(f),e.onChange&&e.onChange(f)}return Qd(Hd,{name:e.name,placeholder:"Annotation text",defaultValue:t.text,onChange:l=>n(l.currentTarget.value)})}import{AppShell as Rp,useMantineTheme as Pp}from"@mantine/core";import{showNotification as Tp}from"@mantine/notifications";import{Suspense as kp,useEffect as Dp,useState as Bp}from"react";import{Alert as Kd}from"@mantine/core";import{normalizeErrorString as Zd}from"@medplum/core";import{forwardRef as zd,createElement as nf}from"react";import yo from"prop-types";var af={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"};var Wd=Object.defineProperty,Xd=Object.defineProperties,Jd=Object.getOwnPropertyDescriptors,lr=Object.getOwnPropertySymbols,sf=Object.prototype.hasOwnProperty,uf=Object.prototype.propertyIsEnumerable,lf=(e,o,t)=>o in e?Wd(e,o,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[o]=t,ff=(e,o)=>{for(var t in o||(o={}))sf.call(o,t)&&lf(e,t,o[t]);if(lr)for(var t of lr(o))uf.call(o,t)&&lf(e,t,o[t]);return e},$d=(e,o)=>Xd(e,Jd(o)),_d=(e,o)=>{var t={};for(var r in e)sf.call(e,r)&&o.indexOf(r)<0&&(t[r]=e[r]);if(e!=null&&lr)for(var r of lr(e))o.indexOf(r)<0&&uf.call(e,r)&&(t[r]=e[r]);return t},I=(e,o,t)=>{let r=zd((a,n)=>{var l=a,{color:f="currentColor",size:i=24,stroke:s=2,children:u}=l,c=_d(l,["color","size","stroke","children"]);return nf("svg",ff($d(ff({ref:n},af),{width:i,height:i,stroke:f,strokeWidth:s,className:`tabler-icon tabler-icon-${e}`}),c),[...t.map(([d,m])=>nf(d,m)),...u||[]])});return r.propTypes={color:yo.string,size:yo.oneOfType([yo.string,yo.number]),stroke:yo.oneOfType([yo.string,yo.number])},r.displayName=`${o}`,r};var Ba=I("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 vo=I("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 Aa=I("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 Ma=I("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 Fa=I("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 wa=I("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 Oa=I("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 Ea=I("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 La=I("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 Na=I("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 $e=I("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 bt=I("check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]);var Va=I("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 Ha=I("chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]);var lo=I("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 So=I("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 Rt=I("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 qa=I("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 Pt=I("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 Ga=I("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 Ua=I("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 Qa=I("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 Vo=I("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 Ho=I("equal","IconEqual",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]]);var fr=I("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 za=I("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 Wa=I("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 Xa=I("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 Ja=I("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 $a=I("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 sr=I("math-greater","IconMathGreater",[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]]);var ir=I("math-lower","IconMathLower",[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]]);var _a=I("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 Ka=I("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 Za=I("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 Ya=I("plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);var ja=I("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 en=I("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 qo=I("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 Tt=I("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 kt=I("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 on=I("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 tn=I("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 rn=I("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 an=I("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 Dt=I("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 nn=I("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 ln=I("x","IconX",[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]]);import{Component as Yd}from"react";import{jsx as cf}from"react/jsx-runtime";var Go=class extends Yd{constructor(o){super(o),this.state={lastLocation:window.location.toString()}}static getDerivedStateFromError(o){return{error:o,lastLocation:window.location.toString()}}componentDidUpdate(o,t){window.location.toString()!==this.state.lastLocation&&this.setState({lastLocation:window.location.toString(),error:void 0})}shouldComponentUpdate(o,t){return!!(this.props.children!==o.children||t.error&&!this.state.error||this.state.lastLocation!==window.location.toString())}componentDidCatch(o,t){console.error("Uncaught error:",o,t)}render(){return this.state.error?cf(Kd,{icon:cf(vo,{size:16}),title:"Something went wrong",color:"red",children:Zd(this.state.error)}):this.props.children}};import{Center as jd,Loader as em}from"@mantine/core";import{jsx as df}from"react/jsx-runtime";function fn(){return df(jd,{style:{width:"100%",height:"100vh"},children:df(em,{})})}import{Avatar as Om,createStyles as Em,Group as dr,Header as Lm,Menu as _e,Stack as Nm,Text as At,UnstyledButton as bf}from"@mantine/core";import{formatHumanName as Vm,getReferenceString as Rf}from"@medplum/core";import{useState as Hm}from"react";import{formatHumanName as om}from"@medplum/core";import{Fragment as tm,jsx as rm}from"react/jsx-runtime";function ur(e){let o=e.value;return o?rm(tm,{children:om(o,e.options)}):null}import{Avatar as pf}from"@mantine/core";import{getDisplayString as dm,getImageSrc as mm}from"@medplum/core";import{Anchor as am}from"@mantine/core";import{isReference as nm,isResource as lm}from"@medplum/core";function M(e){e.preventDefault(),e.stopPropagation()}function cr(e){if(mf(e))return!0;if(e instanceof HTMLTableCellElement){let o=e.children;if(o.length===1&&mf(o[0]))return!0}return!1}function mf(e){return e instanceof HTMLInputElement&&e.type==="checkbox"}import{jsx as cm}from"react/jsx-runtime";function le(e){let o=no(),{to:t,suffix:r,label:a,onClick:n,children:l,...f}=e,i=fm(t);return r&&(i+="/"+r),cm(am,{href:i,"aria-label":a,onClick:s=>{M(s),n?n(s):t&&o(i)},...f,children:l})}function fm(e){if(e){if(typeof e=="string")return sm(e);if(lm(e))return im(e);if(nm(e))return um(e)}return"#"}function sm(e){return e.startsWith("http://")||e.startsWith("https://")||e.startsWith("/")?e:"/"+e}function im(e){return`/${e.resourceType}/${e.id}`}function um(e){return`/${e.reference}`}import{jsx as sn}from"react/jsx-runtime";function fe(e){let o=X(e.value),t=o?dm(o):e.alt??"",r=(o&&mm(o))??e.src,a=e.radius??"xl",n={...e};return delete n.value,delete n.link,e.link?sn(le,{to:o,children:sn(pf,{src:r,alt:t,radius:a,...n})}):sn(pf,{src:r,alt:t,radius:a,...n})}import{createStyles as vm,Group as Sm,Text as If}from"@mantine/core";import{formatHumanName as Cm,getDisplayString as Sf,getReferenceString as bm,isUUID as Rm}from"@medplum/core";import{forwardRef as Pm,useCallback as gf}from"react";import{Loader as pm,MultiSelect as xm}from"@mantine/core";import{showNotification as Im}from"@mantine/notifications";import{normalizeErrorString as gm}from"@medplum/core";import{useCallback as Uo,useEffect as hm,useRef as Co,useState as Bt}from"react";import{jsx as xf}from"react/jsx-runtime";function Qo(e){let{defaultValue:o,toKey:t,toOption:r,loadOptions:a,onChange:n,onCreate:l,creatable:f,...i}=e,s=ym(o),u=Co(null),[c,d]=Bt(),[m,p]=Bt(),[x,C]=Bt(),[y,v]=Bt(s.map(r)),[b,P]=Bt([]),h=Co(),A=Co(),W=Co();W.current=c;let Y=Co();Y.current=m;let gt=Co();gt.current=x;let ke=Co();ke.current=b;let De=Uo(()=>{d(void 0);let ee=u.current?.value.trim()||"";if(ee===A.current&&a===h.current)return;A.current=ee,h.current=a;let ne=new AbortController;p(ne),a(ee,ne.signal).then(ue=>{ne.signal.aborted||(P(ue.map(r)),p(void 0),gt.current&&(ue.length>0&&n(ue.slice(0,1)),C(!1)))}).catch(ue=>{ne.signal.aborted||ue.message.includes("aborted")||Im({color:"red",message:gm(ue)})})},[a,n,r]),R=Uo(()=>{Y.current&&(Y.current.abort(),p(void 0)),W.current!==void 0&&window.clearTimeout(W.current);let ee=window.setTimeout(()=>De(),100);d(ee)},[De]),N=Uo(ee=>{let ne=[],ue=[];for(let ht of ee){let rr=ke.current?.find(ud=>ud.value===ht),yt=rr?.resource;!yt&&f!==!1&&l&&(yt=l(ht),rr=r(yt)),yt&&ne.push(yt),rr&&ue.push(rr)}n(ne),v(ue)},[f,n,l,r]),ao=Uo(ee=>{ee.key==="Enter"&&(!W.current&&!Y.current?(M(ee),ke.current&&ke.current.length>0&&(P(ke.current.slice(0,1)),N([ke.current[0].value]))):C(!0))},[N]),T=Uo(ee=>{let ne=r(l(ee));return P([...ke.current,ne]),ne},[l,P,r]),G=Uo((ee,ne)=>!ne,[]);return hm(()=>()=>{Y.current&&Y.current.abort()},[]),xf(xm,{...i,ref:u,defaultValue:s.map(t),searchable:!0,onKeyDown:ao,onSearchChange:R,data:[...y,...b],onFocus:De,onChange:N,onCreate:T,rightSectionWidth:40,rightSection:m?xf(pm,{size:16}):null,filter:G,creatable:!0,withinPortal:!0})}function ym(e){return e?Array.isArray(e)?e:[e]:[]}import{jsx as zo,jsxs as vf}from"react/jsx-runtime";var Tm=vm(()=>({searchInput:{input:{width:220,transition:"width 0.2s"},"input:focus":{width:400},"@media (max-width: 800px)":{input:{width:150},"input:focus":{width:150}}}}));function km(e){return e.id}function Dm(e){return{value:e.id,label:Sf(e),resource:e}}function Cf(e){let{classes:o}=Tm(),t=no(),r=S(),a=gf(async(l,f)=>{let i=Am(l),s={signal:f},u=await r.graphql(i,void 0,void 0,s);return Mm(u,l)},[r]),n=gf(l=>{l.length>0&&t(`/${bm(l[0])}`)},[t]);return zo(Qo,{size:"sm",radius:"md",className:o.searchInput,icon:zo(en,{size:16}),placeholder:"Search",itemComponent:Bm,toKey:km,toOption:Dm,onChange:n,loadOptions:a,maxSelectedValues:0,clearSearchOnChange:!0,clearable:!1},`${e.pathname}?${e.searchParams}`)}var Bm=Pm(({resource:e,...o},t)=>{let r;return e.resourceType==="Patient"?r=e.birthDate:e.resourceType==="ServiceRequest"&&(r=e.subject?.display),zo("div",{ref:t,...o,children:vf(Sm,{noWrap:!0,children:[zo(fe,{value:e}),vf("div",{children:[zo(If,{children:Sf(e)}),zo(If,{size:"xs",color:"dimmed",children:r})]})]})})});function Am(e){let o=JSON.stringify(e);return Rm(e)?`{
2
- Patients1: PatientList(_id: ${o}, _count: 1) {
1
+ 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 __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));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,l2=this.tokens.length;i<l2;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,j2){var memo_key="".concat(i,",").concat(j2),memoized=memo3[memo_key];if(memoized===void 0){if(i>0&&j2>0&&!diff2(input[i-1],output[j2-1],ptr.add(String(i-1))).length)memoized=dist(i-1,j2-1);else{var alternatives=[];if(i>0){var remove_base=dist(i-1,j2),remove_operation={op:"remove",index:i-1};alternatives.push(appendArrayOperation(remove_base,remove_operation))}if(j2>0){var add_base=dist(i,j2-1),add_operation={op:"add",index:i-1,value:output[j2-1]};alternatives.push(appendArrayOperation(add_base,add_operation))}if(i>0&&j2>0){var replace_base=dist(i-1,j2-1),replace_operation={op:"replace",index:i-1,original:input[i-1],value:output[j2-1]};alternatives.push(appendArrayOperation(replace_base,replace_operation))}var best=alternatives.sort(function(a,b2){return a.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(d2,b2){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d3,b3){d3.__proto__=b3}||function(d3,b3){for(var p2 in b3)Object.prototype.hasOwnProperty.call(b3,p2)&&(d3[p2]=b3[p2])},extendStatics(d2,b2)};return function(d2,b2){if(typeof b2!="function"&&b2!==null)throw new TypeError("Class extends value "+String(b2)+" is not a constructor or null");extendStatics(d2,b2);function __(){this.constructor=d2}d2.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}});import{useEffect as g,useMemo as v,useState as P}from"react";import{createContext as C,useContext as K}from"react";import{jsx as S}from"react/jsx-runtime";import{deepEquals as b,isReference as T,isResource as N,normalizeOperationOutcome as I}from"@medplum/core";import{useCallback as F,useEffect as h,useState as z}from"react";import{allOk as Q,normalizeOperationOutcome as L}from"@medplum/core";import{useEffect as k,useState as d}from"react";var p=C(void 0);function m(){return K(p)}function s(){return m().medplum}function B(){return m().navigate}function w(){return m().profile}function H(t){let e=t.medplum,o=t.navigate??E,[r2,i]=P({profile:e.getProfile(),loading:!e.isInitialized});g(()=>{e&&(e.isInitialized||(i(n=>({...n,loading:!0})),e.getInitPromise().then(()=>i(n=>({...n,loading:!1}))).catch(console.error)))},[e,e.isInitialized]),g(()=>{function n(){i({...r2,profile:e.getProfile()})}return e.addEventListener("change",n),()=>e.removeEventListener("change",n)},[e,r2]);let u=v(()=>({...r2,medplum:e,navigate:o}),[r2,e,o]);return S(p.Provider,{value:u,children:t.children})}function E(t){window.location.assign(t)}function j(t,e){let o=s(),[r2,i]=z(M(o,t)),u=F(n=>{b(n,r2)||i(n)},[r2,i]);return h(()=>{u(M(o,t))},[o,t,u]),h(()=>{let n=!0;return T(t)&&o.readReference(t).then(c=>{n&&u(c)}).catch(c=>{n&&(u(void 0),e&&e(I(c)))}),()=>n=!1},[o,r2,t,u,e]),r2}function M(t,e){if(e){if(N(e))return e;if(T(e))return t.getCachedReference(e)}}function ie(t,e){return l("search",t,e)}function ue(t,e){return l("searchOne",t,e)}function ce(t,e){return l("searchResources",t,e)}function l(t,e,o){let r2=s(),[i,u]=d(),[n,c]=d(!1),[y,a]=d(),[O,R]=d();return k(()=>{let x=r2.fhirSearchUrl(e,o).toString();x!==i&&(u(x),r2[t](e,o).then(f=>{c(!1),a(f),R(Q)}).catch(f=>{c(!1),a(void 0),R(L(f))}))},[r2,t,e,o,i,a]),[y,n,O]}import{formatAddress}from"@medplum/core";import{Fragment,jsx}from"react/jsx-runtime";function AddressDisplay(props){let address=props.value;return address?jsx(Fragment,{children:formatAddress(address)}):null}import{Group,NativeSelect,TextInput}from"@mantine/core";import{useRef,useState}from"react";import{jsx as jsx2,jsxs}from"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]=useState(props.defaultValue||{}),valueRef=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 jsxs(Group,{gap:"xs",wrap:"nowrap",grow:!0,children:[jsx2(NativeSelect,{"data-testid":"address-use",defaultValue:value.use,onChange:e=>setUse(e.currentTarget.value),data:["","home","work","temp","old","billing"]}),jsx2(NativeSelect,{"data-testid":"address-type",defaultValue:value.type,onChange:e=>setType(e.currentTarget.value),data:["","postal","physical","both"]}),jsx2(TextInput,{placeholder:"Line 1",defaultValue:getLine(value,0),onChange:e=>setLine1(e.currentTarget.value)}),jsx2(TextInput,{placeholder:"Line 2",defaultValue:getLine(value,1),onChange:e=>setLine2(e.currentTarget.value)}),jsx2(TextInput,{placeholder:"City",defaultValue:value.city,onChange:e=>setCity(e.currentTarget.value)}),jsx2(TextInput,{placeholder:"State",defaultValue:value.state,onChange:e=>setState(e.currentTarget.value)}),jsx2(TextInput,{placeholder:"Postal Code",defaultValue:value.postalCode,onChange:e=>setPostalCode(e.currentTarget.value)})]})}import{TextInput as TextInput2}from"@mantine/core";import{createReference}from"@medplum/core";import{useState as useState2}from"react";import{jsx as jsx3}from"react/jsx-runtime";function AnnotationInput(props){let author=w(),[value,setValue]=useState2(props.defaultValue||{});function setText(text){let newValue=text?{text,authorReference:author&&createReference(author),time:new Date().toISOString()}:{};setValue(newValue),props.onChange&&props.onChange(newValue)}return jsx3(TextInput2,{name:props.name,placeholder:"Annotation text",defaultValue:value.text,onChange:e=>setText(e.currentTarget.value)})}import{AppShell as MantineAppShell3}from"@mantine/core";import{showNotification as showNotification3}from"@mantine/notifications";import{Suspense,useEffect as useEffect2,useState as useState8}from"react";import{Alert}from"@mantine/core";import{normalizeErrorString}from"@medplum/core";import{forwardRef,createElement}from"react";import PropTypes from"prop-types";var defaultAttributes={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"};var __defProp2=Object.defineProperty,__defProps=Object.defineProperties,__getOwnPropDescs=Object.getOwnPropertyDescriptors,__getOwnPropSymbols=Object.getOwnPropertySymbols,__hasOwnProp2=Object.prototype.hasOwnProperty,__propIsEnum=Object.prototype.propertyIsEnumerable,__defNormalProp=(obj,key,value)=>key in obj?__defProp2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__spreadValues=(a,b2)=>{for(var prop in b2||(b2={}))__hasOwnProp2.call(b2,prop)&&__defNormalProp(a,prop,b2[prop]);if(__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(b2))__propIsEnum.call(b2,prop)&&__defNormalProp(a,prop,b2[prop]);return a},__spreadProps=(a,b2)=>__defProps(a,__getOwnPropDescs(b2)),__objRest=(source,exclude)=>{var target={};for(var prop in source)__hasOwnProp2.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(source!=null&&__getOwnPropSymbols)for(var prop of __getOwnPropSymbols(source))exclude.indexOf(prop)<0&&__propIsEnum.call(source,prop)&&(target[prop]=source[prop]);return target},createReactComponent=(iconName,iconNamePascal,iconNode)=>{let Component2=forwardRef((_a,ref)=>{var _b=_a,{color="currentColor",size=24,stroke=2,children}=_b,rest=__objRest(_b,["color","size","stroke","children"]);return createElement("svg",__spreadValues(__spreadProps(__spreadValues({ref},defaultAttributes),{width:size,height:size,stroke:color,strokeWidth:stroke,className:`tabler-icon tabler-icon-${iconName}`}),rest),[...iconNode.map(([tag,attrs])=>createElement(tag,attrs)),...children||[]])});return Component2.propTypes={color:PropTypes.string,size:PropTypes.oneOfType([PropTypes.string,PropTypes.number]),stroke:PropTypes.oneOfType([PropTypes.string,PropTypes.number])},Component2.displayName=`${iconNamePascal}`,Component2};var IconAdjustmentsHorizontal=createReactComponent("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("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("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 IconArrowUp=createReactComponent("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("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("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("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("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("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("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("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("check","IconCheck",[["path",{d:"M5 12l5 5l10 -10",key:"svg-0"}]]);var IconCheckbox=createReactComponent("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("chevron-down","IconChevronDown",[["path",{d:"M6 9l6 6l6 -6",key:"svg-0"}]]);var IconCircleMinus=createReactComponent("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("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("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("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("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("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("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("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("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("equal","IconEqual",[["path",{d:"M5 10h14",key:"svg-0"}],["path",{d:"M5 14h14",key:"svg-1"}]]);var IconFileAlert=createReactComponent("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("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("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("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("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("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("math-greater","IconMathGreater",[["path",{d:"M5 18l14 -6l-14 -6",key:"svg-0"}]]);var IconMathLower=createReactComponent("math-lower","IconMathLower",[["path",{d:"M19 18l-14 -6l14 -6",key:"svg-0"}]]);var IconMessage=createReactComponent("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("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("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("plus","IconPlus",[["path",{d:"M12 5l0 14",key:"svg-0"}],["path",{d:"M5 12l14 0",key:"svg-1"}]]);var IconRefresh=createReactComponent("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("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("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("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("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("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("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("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("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("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("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("x","IconX",[["path",{d:"M18 6l-12 12",key:"svg-0"}],["path",{d:"M6 6l12 12",key:"svg-1"}]]);import{Component}from"react";import{jsx as jsx4}from"react/jsx-runtime";var ErrorBoundary=class extends 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?jsx4(Alert,{icon:jsx4(IconAlertCircle,{size:16}),title:"Something went wrong",color:"red",children:normalizeErrorString(this.state.error)}):this.props.children}};import{Center,Loader}from"@mantine/core";import{jsx as jsx5}from"react/jsx-runtime";function Loading(){return jsx5(Center,{style:{width:"100%",height:"100vh"},children:jsx5(Loader,{})})}var AppShell_default={main:"AppShell_main"};import{Avatar as Avatar2,Group as Group4,AppShell as MantineAppShell,Menu,Stack,Text as Text2,UnstyledButton}from"@mantine/core";import{formatHumanName as formatHumanName3,getReferenceString as getReferenceString2}from"@medplum/core";function r(e){var t,f,n="";if(typeof e=="string"||typeof e=="number")n+=e;else if(typeof e=="object")if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}var clsx_default=clsx;import{useState as useState4}from"react";import{formatHumanName}from"@medplum/core";import{Fragment as Fragment2,jsx as jsx6}from"react/jsx-runtime";function HumanNameDisplay(props){let name=props.value;return name?jsx6(Fragment2,{children:formatHumanName(name,props.options)}):null}import{Avatar}from"@mantine/core";import{getDisplayString,getImageSrc}from"@medplum/core";import{Anchor}from"@mantine/core";import{isReference,isResource}from"@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"}import{jsx as jsx7}from"react/jsx-runtime";function MedplumLink(props){let navigate=B(),{to,suffix,label,onClick,children,...rest}=props,href=getHref(to);return suffix&&(href+="/"+suffix),jsx7(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(isResource(to))return getResourceHref(to);if(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}`}import{jsx as jsx8}from"react/jsx-runtime";function ResourceAvatar(props){let resource=j(props.value),text=resource?getDisplayString(resource):props.alt??"",imageUrl=(resource&&getImageSrc(resource))??props.src,radius=props.radius??"xl",avatarProps={...props};return delete avatarProps.value,delete avatarProps.link,props.link?jsx8(MedplumLink,{to:resource,children:jsx8(Avatar,{src:imageUrl,alt:text,radius,...avatarProps})}):jsx8(Avatar,{src:imageUrl,alt:text,radius,...avatarProps})}var Header_default={logoButton:"Header_logoButton",user:"Header_user",userName:"Header_userName",userActive:"Header_userActive"};import{formatHumanName as formatHumanName2,getDisplayString as getDisplayString2,getReferenceString,isUUID}from"@medplum/core";import{forwardRef as forwardRef2,useCallback as useCallback2}from"react";import{Combobox,Group as Group2,Loader as Loader2,Pill,PillsInput,useCombobox}from"@mantine/core";import{showNotification}from"@mantine/notifications";import{normalizeErrorString as normalizeErrorString2}from"@medplum/core";import{useCallback,useEffect,useRef as useRef2,useState as useState3}from"react";import{jsx as jsx9,jsxs as jsxs2}from"react/jsx-runtime";function AsyncAutocomplete(props){let combobox=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,...rest}=props,defaultItems=toDefaultItems(defaultValue2),[search,setSearch]=useState3(""),[timer,setTimer]=useState3(),[abortController,setAbortController]=useState3(),[autoSubmit,setAutoSubmit]=useState3(),[selected,setSelected]=useState3(defaultItems.map(toOption4)),[options,setOptions]=useState3([]),ItemComponent3=itemComponent??DefaultItemComponent,searchRef=useRef2();searchRef.current=search;let lastLoadOptionsRef=useRef2(),lastValueRef=useRef2(),timerRef=useRef2();timerRef.current=timer;let abortControllerRef=useRef2();abortControllerRef.current=abortController;let autoSubmitRef=useRef2();autoSubmitRef.current=autoSubmit;let optionsRef=useRef2();optionsRef.current=options;let handleTimer=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")||showNotification({color:"red",message:normalizeErrorString2(err)})})},[combobox,loadOptions,onChange,toOption4]),handleSearchChange=useCallback(e=>{options&&options.length>0&&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,handleTimer]),addSelected=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([]),lastValueRef.current=void 0,addSelected(val==="$create"?search:val)},handleValueRemove=useCallback(item=>{let newSelected=selected.filter(v2=>v2.value!==item.value);onChange(newSelected.map(v2=>v2.resource)),setSelected(newSelected)},[selected,onChange]),handleKeyDown=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]);useEffect(()=>()=>{abortControllerRef.current&&abortControllerRef.current.abort()},[]);let clearButton=clearable&&selected.length>0&&jsx9(Combobox.ClearButton,{title:"Clear all",size:16,onClear:()=>{setSearch(""),setSelected([]),onChange([])}});return jsxs2(Combobox,{store:combobox,onOptionSubmit:handleValueSelect,withinPortal:!0,shadow:"xl",...rest,children:[jsx9(Combobox.DropdownTarget,{children:jsx9(PillsInput,{label,description,error,className:props.className,leftSection,rightSection:abortController?jsx9(Loader2,{size:16}):clearButton,required,children:jsxs2(Pill.Group,{children:[selected.map(item=>jsx9(Pill,{withRemoveButton:!0,onRemove:()=>handleValueRemove(item),children:item.label},item.value)),jsx9(Combobox.EventsTarget,{children:jsx9(PillsInput.Field,{role:"searchbox",name,value:search,placeholder,onFocus:handleSearchChange,onBlur:()=>combobox.closeDropdown(),onKeyDown:handleKeyDown,onChange:handleSearchChange})})]})})}),jsx9(Combobox.Dropdown,{children:jsxs2(Combobox.Options,{children:[options.map(item=>jsx9(Combobox.Option,{value:item.value,active:selected.includes(item),children:jsx9(ItemComponent3,{...item})},item.value)),creatable&&search.trim().length>0&&jsxs2(Combobox.Option,{value:"$create",children:["+ Create ",search]}),!creatable&&search.trim().length>0&&options.length===0&&jsx9(Combobox.Empty,{children:"Nothing found"})]})})]})}function toDefaultItems(defaultValue2){return defaultValue2?Array.isArray(defaultValue2)?defaultValue2:[defaultValue2]:[]}function DefaultItemComponent(props){return jsx9(Group2,{gap:"sm",children:jsx9("span",{children:props.label})})}var HeaderSearchInput_default={searchInput:"HeaderSearchInput_searchInput"};import{Group as Group3,Text}from"@mantine/core";import{jsx as jsx10,jsxs as jsxs3}from"react/jsx-runtime";function toOption(resource){return{value:resource.id,label:getDisplayString2(resource),resource}}function HeaderSearchInput(props){let navigate=B(),medplum=s(),loadData=useCallback2(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=useCallback2(item=>{item.length>0&&navigate(`/${getReferenceString(item[0])}`)},[navigate]);return jsx10(AsyncAutocomplete,{size:"sm",radius:"md",className:HeaderSearchInput_default.searchInput,leftSection:jsx10(IconSearch,{size:16}),placeholder:"Search",itemComponent:ItemComponent,toOption,onChange:handleSelect,loadOptions:loadData,maxValues:0,clearable:!1},`${props.pathname}?${props.searchParams}`)}var ItemComponent=forwardRef2(({resource,...others},ref)=>{let helpText;return resource.resourceType==="Patient"?helpText=resource.birthDate:resource.resourceType==="ServiceRequest"&&(helpText=resource.subject?.display),jsx10("div",{ref,...others,children:jsxs3(Group3,{wrap:"nowrap",children:[jsx10(ResourceAvatar,{value:resource}),jsxs3("div",{children:[jsx10(Text,{children:getDisplayString2(resource)}),jsx10(Text,{size:"xs",c:"dimmed",children:helpText})]})]})})});function buildGraphQLQuery(input){let escaped=JSON.stringify(input);return isUUID(input)?`{
2
+ Patients1: PatientList(_id: ${escaped}, _count: 1) {
3
3
  resourceType
4
4
  id
5
5
  identifier {
@@ -12,7 +12,7 @@ var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDe
12
12
  }
13
13
  birthDate
14
14
  }
15
- ServiceRequestList(_id: ${o}, _count: 1) {
15
+ ServiceRequestList(_id: ${escaped}, _count: 1) {
16
16
  resourceType
17
17
  id
18
18
  identifier {
@@ -24,7 +24,7 @@ var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDe
24
24
  }
25
25
  }
26
26
  }`.replace(/\s+/g," "):`{
27
- Patients1: PatientList(name: ${o}, _count: 5) {
27
+ Patients1: PatientList(name: ${escaped}, _count: 5) {
28
28
  resourceType
29
29
  id
30
30
  identifier {
@@ -37,7 +37,7 @@ var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDe
37
37
  }
38
38
  birthDate
39
39
  }
40
- Patients2: PatientList(identifier: ${o}, _count: 5) {
40
+ Patients2: PatientList(identifier: ${escaped}, _count: 5) {
41
41
  resourceType
42
42
  id
43
43
  identifier {
@@ -50,7 +50,7 @@ var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDe
50
50
  }
51
51
  birthDate
52
52
  }
53
- ServiceRequestList(identifier: ${o}, _count: 5) {
53
+ ServiceRequestList(identifier: ${escaped}, _count: 5) {
54
54
  resourceType
55
55
  id
56
56
  identifier {
@@ -61,14 +61,14 @@ var cd=Object.create;var zl=Object.defineProperty;var dd=Object.getOwnPropertyDe
61
61
  display
62
62
  }
63
63
  }
64
- }`.replace(/\s+/g," ")}function Mm(e,o){let t=[];return e.data.Patients1&&t.push(...e.data.Patients1),e.data.Patients2&&t.push(...e.data.Patients2),e.data.ServiceRequestList&&t.push(...e.data.ServiceRequestList),wm(Fm(t),o).slice(0,5)}function Fm(e){let o=new Set,t=[];for(let r of e)o.has(r.id)||(o.add(r.id),t.push(r));return t}function wm(e,o){return e.sort((t,r)=>hf(r,o)-hf(t,o))}function hf(e,o){let t=0;if(e.identifier)for(let r of e.identifier)t=Math.max(t,yf(r.value,o));if(e.resourceType==="Patient"&&e.name)for(let r of e.name)t=Math.max(t,yf(Cm(r),o));return t}function yf(e,o){if(!e)return 0;let t=e.toLowerCase().indexOf(o.toLowerCase());return t<0?0:100-t}import{jsx as K,jsxs as fo}from"react/jsx-runtime";var qm=Em(e=>({logoButton:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},user:{padding:`${e.spacing.xs} ${e.spacing.sm}`,borderRadius:e.radius.sm,transition:"background-color 100ms ease","&:hover":{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}},userName:{fontWeight:500,lineHeight:1,marginRight:3,[e.fn.smallerThan("xs")]:{display:"none"}},userActive:{backgroundColor:e.fn.lighten(e.fn.variant({variant:"filled",color:e.primaryColor}).background,.8)}}));function Pf(e){let o=St(),{medplum:t,profile:r,navigate:a}=o,n=t.getLogins(),{classes:l,cx:f}=qm(),[i,s]=Hm(!1);return K(Lm,{height:60,p:8,style:{zIndex:101},children:fo(dr,{position:"apart",children:[fo(dr,{spacing:"xs",children:[K(bf,{className:l.logoButton,onClick:e.navbarToggle,children:e.logo}),!e.headerSearchDisabled&&K(Cf,{pathname:e.pathname,searchParams:e.searchParams})]}),fo(_e,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:i,onClose:()=>s(!1),children:[K(_e.Target,{children:K(bf,{className:f(l.user,{[l.userActive]:i}),onClick:()=>s(u=>!u),children:fo(dr,{spacing:7,children:[K(fe,{value:r,radius:"xl",size:24}),K(At,{size:"sm",className:l.userName,children:Vm(r?.name?.[0])}),K(Ha,{size:12,stroke:1.5})]})})}),fo(_e.Dropdown,{children:[fo(Nm,{align:"center",p:"xl",children:[K(fe,{size:"xl",radius:100,value:o.profile}),K(ur,{value:o.profile?.name?.[0]}),K(At,{color:"dimmed",size:"xs",children:t.getActiveLogin()?.project.display})]}),n.length>1&&K(_e.Divider,{}),n.map(u=>u.profile.reference!==Rf(o.profile)&&K(_e.Item,{onClick:()=>{t.setActiveLogin(u).then(()=>window.location.reload()).catch(console.log)},children:fo(dr,{children:[K(Om,{radius:"xl"}),fo("div",{style:{flex:1},children:[K(At,{size:"sm",weight:500,children:u.profile.display}),K(At,{color:"dimmed",size:"xs",children:u.project.display})]})]})},u.profile.reference)),K(_e.Divider,{}),K(_e.Item,{icon:K(rn,{size:14,stroke:1.5}),onClick:()=>a("/signin"),children:"Add another account"}),K(_e.Item,{icon:K(qo,{size:14,stroke:1.5}),onClick:()=>a(`/${Rf(r)}`),children:"Account settings"}),K(_e.Item,{icon:K($a,{size:14,stroke:1.5}),onClick:async()=>{await t.signOut(),a("/signin")},children:"Sign out"}),K(At,{size:"xs",color:"dimmed",align:"center",children:e.version})]})]})]})})}import{Button as dp,createStyles as mp,Navbar as cn,ScrollArea as pp,Space as xp,Text as Ip}from"@mantine/core";import{Fragment as gp,useState as hp}from"react";import{Button as zm,Group as Wm,Modal as Xm,NativeSelect as Jm,Stack as $m,TextInput as _m}from"@mantine/core";import{showNotification as kf}from"@mantine/notifications";import{deepClone as Km,normalizeErrorString as Zm}from"@medplum/core";function Tf(e){let o={};for(let t of Array.from(e.elements))t instanceof HTMLInputElement?Gm(o,t):t instanceof HTMLTextAreaElement?o[t.name]=t.value:t instanceof HTMLSelectElement&&Um(o,t);return o}function Gm(e,o){o.disabled||(o.type==="checkbox"||o.type==="radio")&&!o.checked||(e[o.name]=o.value)}function Um(e,o){e[o.name]=o.value}import{jsx as Qm}from"react/jsx-runtime";function H(e){return Qm("form",{style:e.style,"data-testid":e.testid,onSubmit:o=>{o.preventDefault();let t=Tf(o.target);e.onSubmit&&e.onSubmit(t)},children:e.children})}import{jsx as bo,jsxs as jm}from"react/jsx-runtime";function Df(e){let o=S(),t=o.getUserConfiguration();function r(a){let{menuname:n,bookmarkname:l}=a,f=`${e.pathname}?${e.searchParams.toString()}`,i=Km(t);i.menu?.find(({title:u})=>u===n)?.link?.push({name:l,target:f}),o.updateResource(i).then(u=>{t.menu=u.menu,o.dispatchEvent({type:"change"}),kf({color:"green",message:"Success"}),e.onOk()}).catch(u=>{kf({color:"red",message:Zm(u)})})}return bo(Xm,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel,children:bo(H,{onSubmit:r,children:jm($m,{children:[bo(Ym,{config:t}),bo(_m,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),bo(Wm,{position:"right",children:bo(zm,{mt:"sm",type:"submit",children:"OK"})})]})})})}function Ym(e){function o(r){return r?.menu?.map(a=>a.title)}let t=o(e.config);return bo(Jm,{name:"menuname",defaultValue:t[0],label:"Select Menu Option",data:t,withAsterisk:!0})}import{useCallback as ip,useState as up}from"react";import{useState as np}from"react";import{useCallback as ep}from"react";import{jsx as ap}from"react/jsx-runtime";function un(e){return typeof e.code=="string"?e.code:JSON.stringify(e)}function op(e){return typeof e.display=="string"?e.display:un(e)}function tp(e){return{value:un(e),label:op(e),resource:e}}function rp(e){return{code:e,display:e}}function Wo(e){let o=S(),{binding:t,creatable:r,clearable:a,expandParams:n,...l}=e,f=ep(async(i,s)=>{if(!t)return[];let c=(await o.valueSetExpand({...n,url:t,filter:i},{signal:s})).expansion?.contains,d=[];for(let m of c)m.code&&!d.some(p=>p.code===m.code)&&d.push(m);return d},[o,n,t]);return ap(Qo,{...l,creatable:r??!0,clearable:a??!0,toKey:un,toOption:tp,loadOptions:f,onCreate:rp,getCreateLabel:r===!1?void 0:i=>`+ Create ${i}`})}import{jsx as sp}from"react/jsx-runtime";function mr(e){let{defaultValue:o,onChange:t,...r}=e,[a,n]=np(o);function l(f){let i=f[0],s=fp(i);n(s),t&&t(s)}return sp(Wo,{defaultValue:lp(a),onChange:l,...r})}function lp(e){return e?{code:e}:void 0}function fp(e){return e?.code}import{jsx as cp}from"react/jsx-runtime";function Xo(e){let[o,t]=up(e.defaultValue),r=e.onChange,a=ip(n=>{t(n),r&&r(n)},[r]);return cp(mr,{"data-autofocus":e.autoFocus,"data-testid":e.testId,defaultValue:o,onChange:a,name:e.name,placeholder:e.placeholder,binding:"https://medplum.com/fhir/ValueSet/resource-types",creatable:!1,maxSelectedValues:0,clearSearchOnChange:!0,clearable:!1})}import{Fragment as bp,jsx as Le,jsxs as Mt}from"react/jsx-runtime";var Bf=mp(e=>({menuTitle:{margin:"20px 0 4px 6px",fontSize:"9px",fontWeight:"normal",textTransform:"uppercase",letterSpacing:"2px"},link:{...e.fn.focusStyles(),display:"flex",alignItems:"center",textDecoration:"none",fontSize:e.fontSizes.sm,color:e.colorScheme==="dark"?e.colors.dark[1]:e.colors.gray[7],padding:"8px 12px",borderRadius:e.radius.sm,fontWeight:500,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0],color:e.colorScheme==="dark"?e.white:e.black,textDecoration:"none","& svg":{color:e.colorScheme==="dark"?e.white:e.black}},"& svg":{color:e.colorScheme==="dark"?e.colors.dark[2]:e.colors.gray[6],marginRight:e.spacing.sm,strokeWidth:1.5,width:18,height:18}},linkActive:{"&, &:hover":{backgroundColor:e.fn.variant({variant:"light",color:e.primaryColor}).background,color:e.fn.variant({variant:"light",color:e.primaryColor}).color,"& svg":{color:e.fn.variant({variant:"light",color:e.primaryColor}).color}}}}));function Af(e){let{classes:o}=Bf(),t=no(),r=Sp(e.pathname,e.searchParams,e.menus),[a,n]=hp(!1);function l(i,s){i.stopPropagation(),i.preventDefault(),t(s),window.innerWidth<768&&e.closeNavbar()}function f(i){i&&t(`/${i}`)}return Mt(bp,{children:[Le(cn,{width:{sm:250},p:"xs",children:Mt(pp,{children:[!e.resourceTypeSearchDisabled&&Le(cn.Section,{mb:"sm",children:Le(Xo,{name:"resourceType",placeholder:"Resource Type",onChange:i=>f(i)},window.location.pathname)}),Mt(cn.Section,{grow:!0,children:[e.menus?.map(i=>Mt(gp,{children:[Le(Ip,{className:o.menuTitle,children:i.title}),i.links?.map(s=>Mt(yp,{to:s.href,active:s.href===r?.href,onClick:u=>l(u,s.href),children:[Le(vp,{to:s.href,icon:s.icon}),Le("span",{children:s.label})]},s.href))]},`menu-${i.title}`)),e.displayAddBookmark&&Le(dp,{variant:"subtle",size:"xs",mt:"xl",leftIcon:Le(Ya,{size:"0.75rem"}),onClick:()=>n(!0),children:"Add Bookmark"})]})]})}),e.pathname&&e.searchParams&&Le(Df,{pathname:e.pathname,searchParams:e.searchParams,visible:a,onOk:()=>n(!1),onCancel:()=>n(!1)})]})}function yp(e){let{classes:o,cx:t}=Bf();return Le(le,{onClick:e.onClick,to:e.to,className:t(o.link,{[o.linkActive]:e.active}),children:e.children})}function vp(e){return e.icon?e.icon:Le(xp,{w:30})}function Sp(e,o,t){if(!e||!o||!t)return;let r,a=0;for(let n of t)if(n.links)for(let l of n.links){let f=Cp(e,o,l.href);f>a&&(a=f,r=l)}return r}function Cp(e,o,t){let r=new URL(t,"https://example.com");if(e!==r.pathname)return 0;let a=["_count","_offset"];for(let[l,f]of r.searchParams.entries())if(!a.includes(l)&&o.get(l)!==f)return 0;let n=1;for(let[l,f]of o.entries())a.includes(l)||r.searchParams.get(l)===f&&n++;return n}import{jsx as Ro}from"react/jsx-runtime";function wM(e){let o=Pp(),[t,r]=Bp(localStorage.navbarOpen==="true"),a=S(),n=nr();Dp(()=>{function s(){Tp({color:"red",message:"No connection to server",autoClose:!1})}return a.addEventListener("offline",s),()=>a.removeEventListener("offline",s)},[a]);function l(s){localStorage.navbarOpen=s.toString(),r(s)}function f(){l(!1)}function i(){l(!t)}return a.isLoading()?Ro(fn,{}):Ro(Rp,{styles:{main:{background:o.colorScheme==="dark"?o.colors.dark[8]:o.colors.gray[0]}},padding:0,fixed:!0,header:n&&Ro(Pf,{pathname:e.pathname,searchParams:e.searchParams,headerSearchDisabled:e.headerSearchDisabled,logo:e.logo,version:e.version,navbarToggle:i}),navbar:n&&t?Ro(Af,{pathname:e.pathname,searchParams:e.searchParams,menus:e.menus,closeNavbar:f,displayAddBookmark:e.displayAddBookmark,resourceTypeSearchDisabled:e.resourceTypeSearchDisabled}):void 0,children:Ro(Go,{children:Ro(kp,{fallback:Ro(fn,{}),children:e.children})})})}import{Anchor as Ap}from"@mantine/core";import{jsx as Po,jsxs as Fp}from"react/jsx-runtime";function Ge(e){let{contentType:o,url:t,title:r}=e.value??{};return t?Fp("div",{"data-testid":"attachment-display",children:[o?.startsWith("image/")&&Po("img",{"data-testid":"attachment-image",style:{maxWidth:e.maxWidth},src:t,alt:r}),o?.startsWith("video/")&&Po("video",{"data-testid":"attachment-video",style:{maxWidth:e.maxWidth},controls:!0,children:Po("source",{type:o,src:t})}),o==="application/pdf"&&Po("div",{"data-testid":"attachment-pdf",style:{maxWidth:e.maxWidth,minHeight:400},children:Po("iframe",{width:"100%",height:"400",src:t+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),Po("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:Po(Ap,{href:t,"data-testid":"attachment-details",target:"_blank",rel:"noopener noreferrer",download:Mp(r),children:r||"Download"})})]}):null}function Mp(e){return e?.includes(".")?e:void 0}import{jsx as dn}from"react/jsx-runtime";function Mf(e){return dn("div",{children:e.values?.map((o,t)=>dn("div",{children:dn(Ge,{value:o,maxWidth:e.maxWidth})},"attatchment-"+t))})}import{ActionIcon as Ff}from"@mantine/core";import{useRef as Vp,useState as Hp}from"react";import{useRef as wp}from"react";import{normalizeOperationOutcome as Op}from"@medplum/core";import{Fragment as Lp,jsx as Ep,jsxs as Np}from"react/jsx-runtime";function Jo(e){let o=S(),t=wp(null);function r(l){M(l),t.current?.click()}function a(l){M(l);let f=l.target.files;f&&Array.from(f).forEach(n)}function n(l){if(!l||!l.name)return;e.onUploadStart&&e.onUploadStart();let i=l.name,s=l.type||"application/octet-stream";o.createBinary(l,i,s,e.onUploadProgress).then(u=>{e.onUpload({contentType:u.contentType,url:u.url,title:i})}).catch(u=>{e.onUploadError&&e.onUploadError(Op(u))})}return Np(Lp,{children:[Ep("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:t,onChange:l=>a(l)}),e.children({onClick:r})]})}import{jsx as Be,jsxs as Ft}from"react/jsx-runtime";function wf(e){let[o,t]=Hp(e.defaultValue??[]),r=Vp();r.current=o;function a(n){t(n),e.onChange&&e.onChange(n)}return Ft("table",{style:{width:"100%"},children:[Ft("colgroup",{children:[Be("col",{width:"97%"}),Be("col",{width:"3%"})]}),Ft("tbody",{children:[o.map((n,l)=>Ft("tr",{children:[Be("td",{children:Be(Ge,{value:n,maxWidth:200})}),Be("td",{children:Be(Ff,{title:"Remove",size:"sm",onClick:f=>{M(f);let i=o.slice();i.splice(l,1),a(i)},children:Be(lo,{})})})]},`${l}-${o.length}`)),Ft("tr",{children:[Be("td",{}),Be("td",{children:Be(Jo,{onUpload:n=>{a([...r.current,n])},children:n=>Be(Ff,{...n,title:"Add",size:"sm",color:"green",children:Be(Rt,{size:16})})})})]})]})]})}import{Button as Of}from"@mantine/core";import{useState as qp}from"react";import{Fragment as Gp,jsx as pr,jsxs as Up}from"react/jsx-runtime";function xr(e){let[o,t]=qp(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return o?Up(Gp,{children:[pr(Ge,{value:o,maxWidth:200}),pr(Of,{onClick:a=>{M(a),r(void 0)},children:"Remove"})]}):pr(Jo,{onUpload:r,children:a=>pr(Of,{...a,children:"Upload..."})})}import{getPathDisplayName as Bx,tryGetDataType as Ax}from"@medplum/core";var Ir=["meta","implicitRules","contained","extension","modifierExtension"],gr=["language","text"];import{createStyles as Qp}from"@mantine/core";import{Fragment as Wp,jsx as mn,jsxs as Xp}from"react/jsx-runtime";var zp=Qp(e=>({root:{display:"grid",gridTemplateColumns:"30% 70%",margin:0,"& > dt, & > dd":{padding:`${e.spacing.sm} ${e.spacing.sm}`,borderTop:`0.1px solid ${e.colors.gray[3]}`,margin:0}},compact:{gridTemplateColumns:"20% 80%","& > dt, & > dd":{padding:`0 ${e.spacing.xs} ${e.spacing.xs} 0`,border:0}}}));function Ef(e){let{children:o,compact:t}=e,{classes:r,cx:a}=zp();return mn("dl",{className:a(r.root,{[r.compact]:t}),children:o})}function Lf(e){return Xp(Wp,{children:[mn("dt",{children:e.term}),mn("dd",{children:e.children})]})}import{ActionIcon as hx,Box as yx,CopyButton as vx,Tooltip as Sx}from"@mantine/core";import{PropertyType as V,formatDateTime as Cx,formatPeriod as bx,formatTiming as Rx,isEmpty as Px}from"@medplum/core";import{formatCodeableConcept as Jp}from"@medplum/core";import{Fragment as $p,jsx as _p}from"react/jsx-runtime";function ye(e){return _p($p,{children:Jp(e.value)})}import{formatCoding as Kp}from"@medplum/core";import{Fragment as Zp,jsx as Yp}from"react/jsx-runtime";function Nf(e){return Yp(Zp,{children:Kp(e.value)})}import{Fragment as jp,jsx as ex}from"react/jsx-runtime";function hr(e){let o=e.value;if(!o)return null;let t=[];return o.value&&t.push(o.value),(o.use||o.system)&&(t.push(" ["),o.use&&t.push(o.use),o.use&&o.system&&t.push(" "),o.system&&t.push(o.system),t.push("]")),ex(jp,{children:t.join("").trim()})}import{Fragment as tx,jsx as ox,jsxs as rx}from"react/jsx-runtime";function Vf(e){let o=e.value;return o?rx(tx,{children:[o.name,o.name&&": ",o.telecom?.map(t=>ox(hr,{value:t},`telecom-${o.name}-${t.value}`))]}):null}import{jsxs as ax}from"react/jsx-runtime";function Hf(e){return ax("div",{children:[e.value?.system,": ",e.value?.value]})}import{formatMoney as nx}from"@medplum/core";import{Fragment as lx,jsx as fx}from"react/jsx-runtime";function qf(e){return fx(lx,{children:nx(e.value)})}import{formatQuantity as sx}from"@medplum/core";import{Fragment as ix,jsx as ux}from"react/jsx-runtime";function ae(e){return ux(ix,{children:sx(e.value)})}import{formatRange as cx}from"@medplum/core";import{Fragment as dx,jsx as mx}from"react/jsx-runtime";function yr(e){return mx(dx,{children:cx(e.value)})}import{Fragment as px,jsx as Gf,jsxs as xx}from"react/jsx-runtime";function Uf(e){let o=e.value;return o?xx(px,{children:[Gf(ae,{value:o.numerator}),"\xA0/\xA0",Gf(ae,{value:o.denominator})]}):null}import{stringify as Ix}from"@medplum/core";import{Fragment as gx,jsx as Qf}from"react/jsx-runtime";function To(e){if(!e.value)return null;let o=e.value.display||e.value.reference||Ix(e.value);return e.link!==!1&&e.value.reference?Qf(le,{to:e.value,children:o}):Qf(gx,{children:o})}import{Fragment as zf,jsx as vr}from"react/jsx-runtime";function Wf(e){let{property:o,values:t}=e,r=o.type[0].code;return e.values?vr(zf,{children:t.map((a,n)=>vr("div",{children:vr(ce,{arrayElement:!0,property:o,propertyType:r,value:a,ignoreMissingValues:e.ignoreMissingValues,link:e.link})},`${n}-${t.length}`))}):vr(zf,{})}import{Fragment as $o,jsx as U,jsxs as Tx}from"react/jsx-runtime";function ce(e){let{property:o,propertyType:t,value:r}=e;if(o?.path?.endsWith(".id"))return Tx(yx,{component:"div",sx:{display:"flex",gap:3,alignItems:"center"},children:[r,!Px(r)&&U(vx,{value:r,timeout:2e3,children:({copied:n,copy:l})=>U(Sx,{label:n?"Copied":"Copy",withArrow:!0,position:"right",children:U(hx,{color:n?"teal":"gray",onClick:l,children:n?U(bt,{size:"1rem"}):U(Pt,{size:"1rem"})})})})]});if(o?.max&&o.max>1&&!e.arrayElement)return t===V.Attachment?U(Mf,{values:r,maxWidth:e.maxWidth}):U(Wf,{property:o,values:r,ignoreMissingValues:e.ignoreMissingValues,link:e.link});switch(t){case V.boolean:return U($o,{children:r===void 0?"":(!!r).toString()});case V.SystemString:case V.string:return U("div",{style:{whiteSpace:"pre-wrap"},children:r});case V.code:case V.date:case V.decimal:case V.id:case V.integer:case V.positiveInt:case V.unsignedInt:case V.uri:case V.url:return U($o,{children:r});case V.canonical:return U(To,{value:{reference:r},link:e.link});case V.dateTime:case V.instant:return U($o,{children:Cx(r)});case V.markdown:return U("pre",{children:r});case V.Address:return U(Yl,{value:r});case V.Annotation:return U($o,{children:r?.text});case V.Attachment:return U(Ge,{value:r,maxWidth:e.maxWidth});case V.CodeableConcept:return U(ye,{value:r});case V.Coding:return U(Nf,{value:r});case V.ContactDetail:return U(Vf,{value:r});case V.ContactPoint:return U(hr,{value:r});case V.HumanName:return U(ur,{value:r});case V.Identifier:return U(Hf,{value:r});case V.Money:return U(qf,{value:r});case V.Period:return U($o,{children:bx(r)});case V.Quantity:case V.Duration:return U(ae,{value:r});case V.Range:return U(yr,{value:r});case V.Ratio:return U(Uf,{value:r});case V.Reference:return U(To,{value:r,link:e.link});case V.Timing:return U($o,{children:Rx(r)});case V.Dosage:case V.UsageContext:return U(wt,{value:{type:t,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues});default:if(!o)throw Error(`Displaying property of type ${e.propertyType} requires element schema`);return U(wt,{value:{type:o.type[0].code,value:r},compact:!0,ignoreMissingValues:e.ignoreMissingValues})}}import{getTypedPropertyValue as kx,getTypedPropertyValueWithSchema as Dx}from"@medplum/core";function so(e,o){let t=kx(e,o);return t?Array.isArray(t)?[t.map(r=>r.value),t[0].type]:[t.value,t.type]:[void 0,"undefined"]}function Xf(e,o,t){let r=Dx(e,o,t);return r?Array.isArray(r)?[r.map(a=>a.value),r[0].type]:[r.value,r.type]:[void 0,"undefined"]}import{jsx as Sr,jsxs as Mx}from"react/jsx-runtime";function wt(e){let o=e.value,t=o.value;if(!t)return null;let r=o.type,a=Ax(r);return a?typeof t=="object"&&"name"in t&&Object.keys(t).length===1&&typeof t.name=="string"?Sr("div",{children:t.name}):Sr(Ef,{compact:e.compact,children:Object.entries(a.elements).map(n=>{let[l,f]=n;if(Ir.includes(l)||gr.includes(l)&&f.path.split(".").length===2)return null;let[i,s]=so(o,l);return e.ignoreMissingValues&&(!i||Array.isArray(i)&&i.length===0)?null:Sr(Lf,{term:Bx(l),children:Sr(ce,{property:f,propertyType:s,value:i,ignoreMissingValues:e.ignoreMissingValues,link:e.link})},l)})}):Mx("div",{children:[r,"\xA0not implemented"]})}import{tryGetDataType as lh}from"@medplum/core";import{useContext as fh,useMemo as Ls,useState as sh}from"react";import{Stack as oh}from"@mantine/core";import{getPathDisplayName as Es,isPopulated as th}from"@medplum/core";import{useMemo as rh,useState as ah}from"react";import{Group as Ox,Input as Ex}from"@mantine/core";import{useContext as Lx}from"react";import Fx from"react";function wx(e,o){let t=e.lastIndexOf(o);if(t===-1)return["",e];let r=e.substring(0,t),a=e.substring(t+o.length);return[r,a]}var Ne=Fx.createContext({profileUrl:void 0,debugMode:!1,getModifiedNestedElement:()=>{}});function Jf(e,o,t){let r=Object.create(null);function a(l){return r[l]}let n=e?.elements;if(n){let l=new Set;for(let[f,i]of Object.entries(n)){let[s,u]=wx(f,".");l.has(s)&&(r[e.type+"."+f]=i),l.add(f)}}return{debugMode:t??!1,profileUrl:o,getModifiedNestedElement:a}}import{jsx as pn,jsxs as Nx}from"react/jsx-runtime";function Cr(e){let{debugMode:o}=Lx(Ne),t;return o&&e.fhirPath?t=`${e.title} - ${e.fhirPath}`:t=e.title,Nx(Ox,{noWrap:!0,"data-testid":e.testId,children:[pn("div",{children:e.children}),pn("div",{children:pn(Ex.Wrapper,{id:e.htmlFor,label:t,description:e.description,withAsterisk:e.withAsterisk,children:null})})]})}import{Input as Vx}from"@mantine/core";import{useContext as Hx}from"react";function Q(e,o){return e?.issue?.filter(t=>$f(t.expression?.[0],o))?.map(t=>t.details?.text)?.join(`
65
- `)}function br(e,o){return e?.issue?.filter(t=>$f(t.expression?.[0],o))}function $f(e,o){if(e===o)return!0;if(!e||!o)return!1;let t=e.indexOf(".");if(t>=0&&e.substring(t+1)===o)return!0;let r=o.indexOf(".");return r>=0&&o.substring(r+1)===e}import{jsx as qx}from"react/jsx-runtime";function pe(e){let{debugMode:o}=Hx(Ne),t;return o&&e.fhirPath?t=`${e.title} - ${e.fhirPath}`:t=e.title,qx(Vx.Wrapper,{id:e.htmlFor,label:t,description:e.description,withAsterisk:e.withAsterisk,error:Q(e.outcome,e.htmlFor),"data-testid":e.testId,children:e.children})}import{capitalize as Gx,isEmpty as _f}from"@medplum/core";function Ot(e,o,t,r,a){let n=r.type;if(n.length>1)for(let l of n){let f=o.replace("[x]",Gx(l.code));f in e&&delete e[f]}return e[t]=a,e}function $w(e){return!!e&&!_f(e.url)&&!_f(e.name)}import{Checkbox as Wg,Group as Xg,NativeSelect as Jg,Textarea as $g,TextInput as kn}from"@mantine/core";import{capitalize as Os,HTTP_HL7_ORG as _g,PropertyType as E}from"@medplum/core";import{useState as Kg}from"react";import{useState as Ux}from"react";import{jsx as Wx}from"react/jsx-runtime";function _o(e){let{defaultValue:o,onChange:t,...r}=e,[a,n]=Ux(o);function l(f){let i=zx(f);n(i),t&&t(i)}return Wx(Wo,{defaultValue:a&&Qx(a),onChange:l,...r})}function Qx(e){return e.coding?.map(o=>({system:o.system,code:o.code,display:o.display}))}function zx(e){if(e.length!==0)return{coding:e.map(o=>({system:o.system,code:o.code,display:o.display}))}}import{useState as Xx}from"react";import{jsx as _x}from"react/jsx-runtime";function Rr(e){let{defaultValue:o,onChange:t,...r}=e,[a,n]=Xx(o);function l(f){let i=f[0],s=i&&$x(i);n(s),t&&t(s)}return _x(Wo,{defaultValue:a&&Jx(a),maxSelectedValues:1,onChange:l,...r})}function Jx(e){return{system:e.system,code:e.code,display:e.display}}function $x(e){return{system:e.system,code:e.code,display:e.display}}import{Group as rI,TextInput as aI}from"@mantine/core";import{useRef as nI,useState as lI}from"react";import{Group as Kx,NativeSelect as Kf,TextInput as Zx}from"@mantine/core";import{useContext as Yx,useMemo as jx,useRef as eI,useState as oI}from"react";import{jsx as xn,jsxs as tI}from"react/jsx-runtime";function Pr(e){let{path:o,outcome:t}=e,{getModifiedNestedElement:r}=Yx(Ne),[a,n]=oI(e.defaultValue),l=eI();l.current=a;let[f,i,s]=jx(()=>["system","use","value"].map(p=>r(o+"."+p)),[r,o]);function u(p){p&&Object.keys(p).length===0&&(p=void 0),n(p),e.onChange&&e.onChange(p)}function c(p){let x={...l.current,system:p};p||delete x.system,u(x)}function d(p){let x={...l.current,use:p};p||delete x.use,u(x)}function m(p){let x={...l.current,value:p};p||delete x.value,u(x)}return tI(Kx,{spacing:"xs",grow:!0,noWrap:!0,align:"flex-start",children:[xn(Kf,{"data-testid":"system",defaultValue:a?.system,required:(f?.min??0)>0,onChange:p=>c(p.currentTarget.value),data:["","email","phone","fax","pager","sms","other"],error:Q(t,o+".system")}),xn(Kf,{"data-testid":"use",defaultValue:a?.use,required:(i?.min??0)>0,onChange:p=>d(p.currentTarget.value),data:["","home","work","temp","old","mobile"],error:Q(t,o+".use")}),xn(Zx,{placeholder:"Value",defaultValue:a?.value,required:(s?.min??0)>0,onChange:p=>m(p.currentTarget.value),error:Q(t,o+".value")})]})}import{jsx as Zf,jsxs as fI}from"react/jsx-runtime";function Yf(e){let[o,t]=lI(e.defaultValue),r=nI();r.current=o;function a(f){t(f),e.onChange&&e.onChange(f)}function n(f){let i={...r.current,name:f};f||delete i.name,a(i)}function l(f){let i={...r.current,telecom:f&&[f]};f||delete i.telecom,a(i)}return fI(rI,{spacing:"xs",grow:!0,noWrap:!0,children:[Zf(aI,{"data-testid":e.name+"-name",name:e.name+"-name",placeholder:"Name",style:{width:180},defaultValue:o?.name,onChange:f=>n(f.currentTarget.value)}),Zf(Pr,{name:e.name+"-telecom",path:e.path+".telecom",defaultValue:o?.telecom?.[0],onChange:l,outcome:e.outcome})]})}import{TextInput as sI}from"@mantine/core";import{isValidDate as jf}from"@medplum/core";function es(e){if(!e)return"";let o=new Date(e);return jf(o)?o.toLocaleDateString("sv")+"T"+o.toLocaleTimeString("sv"):""}function os(e){if(!e)return"";let o=new Date(e);return jf(o)?o.toISOString():""}import{jsx as uI}from"react/jsx-runtime";function Ve(e){return uI(sI,{id:e.name,name:e.name,"data-autofocus":e.autoFocus,"data-testid":e.name,placeholder:e.placeholder,required:e.required,type:iI(),defaultValue:es(e.defaultValue),autoFocus:e.autoFocus,error:Q(e.outcome,e.name),onChange:o=>{if(e.onChange){let t=o.currentTarget.value;e.onChange(os(t))}}})}function iI(){return"datetime-local"}import{JsonInput as cI}from"@mantine/core";import{stringify as dI,tryGetProfile as mI}from"@medplum/core";import{useEffect as pI,useMemo as xI,useState as ts}from"react";import{jsx as In,jsxs as rs}from"react/jsx-runtime";function as(e){let{propertyType:o}=e,t=S(),[r,a]=ts(!1),[n,l]=ts(),f=xI(()=>{if(!(!o.profile||o.profile.length===0))return o.profile[0]},[o]);pI(()=>{f&&(a(!0),t.requestProfileSchema(f).then(()=>{let s=mI(f);a(!1),l(s)}).catch(s=>{a(!1),console.warn(s)}))},[t,f]);function i(s){e.onChange&&(console.log("Extension",s),e.onChange(s))}return f?r?rs("div",{children:["Loading ",f,"..."]}):n?In(Ko,{profileUrl:f,typeName:n.name,defaultValue:e.defaultValue,onChange:i}):rs("div",{children:["StructureDefinition for ",f," not found"]}):In(II,{...e})}function II(e){return In(cI,{id:e.name,name:e.name,"data-testid":"extension-json-input",defaultValue:dI(e.defaultValue),deserialize:JSON.parse,onChange:o=>{e.onChange&&e.onChange(JSON.parse(o))}})}import{Group as gI,NativeSelect as hI,TextInput as Tr}from"@mantine/core";import{useState as yI}from"react";import{jsx as Et,jsxs as vI}from"react/jsx-runtime";function ns(e){let{outcome:o,path:t}=e,[r,a]=yI(e.defaultValue);function n(c){a(c),e.onChange&&e.onChange(c)}function l(c){n({...r,use:c||void 0})}function f(c){n({...r,prefix:c?c.split(" "):void 0})}function i(c){n({...r,given:c?c.split(" "):void 0})}function s(c){n({...r,family:c||void 0})}function u(c){n({...r,suffix:c?c.split(" "):void 0})}return vI(gI,{spacing:"xs",grow:!0,noWrap:!0,children:[Et(hI,{defaultValue:r?.use,name:e.name+"-use","data-testid":"use",onChange:c=>l(c.currentTarget.value),data:["","temp","old","usual","official","nickname","anonymous","maiden"],error:Q(o,t+".use")}),Et(Tr,{placeholder:"Prefix",name:e.name+"-prefix",defaultValue:r?.prefix?.join(" "),onChange:c=>f(c.currentTarget.value),error:Q(o,t+".prefix")}),Et(Tr,{placeholder:"Given",name:e.name+"-given",defaultValue:r?.given?.join(" "),onChange:c=>i(c.currentTarget.value),error:Q(o,t+".given")}),Et(Tr,{name:e.name+"-family",placeholder:"Family",defaultValue:r?.family,onChange:c=>s(c.currentTarget.value),error:Q(o,t+".family")}),Et(Tr,{placeholder:"Suffix",name:e.name+"-suffix",defaultValue:r?.suffix?.join(" "),onChange:c=>u(c.currentTarget.value),error:Q(o,t+".suffix")})]})}import{Group as SI,TextInput as ls}from"@mantine/core";import{useContext as CI,useMemo as bI,useState as RI}from"react";import{jsx as fs,jsxs as PI}from"react/jsx-runtime";function ss(e){let{path:o,outcome:t}=e,[r,a]=RI(e.defaultValue),{getModifiedNestedElement:n}=CI(Ne),[l,f]=bI(()=>["system","value"].map(s=>n(o+"."+s)),[n,o]);function i(s){a(s),e.onChange&&e.onChange(s)}return PI(SI,{spacing:"xs",grow:!0,noWrap:!0,align:"flex-start",children:[fs(ls,{placeholder:"System",required:(l?.min??0)>0,defaultValue:r?.system,onChange:s=>i({...r,system:s.currentTarget.value}),error:Q(t,o+".system")}),fs(ls,{placeholder:"Value",required:(f?.min??0)>0,defaultValue:r?.value,onChange:s=>i({...r,value:s.currentTarget.value}),error:Q(t,o+".value")})]})}import{NativeSelect as TI,TextInput as kI}from"@mantine/core";import{useCallback as gn,useState as DI}from"react";import{jsx as hn}from"react/jsx-runtime";var BI=["USD","EUR","CAD","GBP","AUD"];function is(e){let{onChange:o}=e,[t,r]=DI(e.defaultValue),a=gn(i=>{r(i),o&&o(i)},[o]),n=gn(i=>{a({...t,currency:i.currentTarget.value})},[t,a]),l=gn(i=>{a({...t,value:i.currentTarget.valueAsNumber})},[t,a]),f=hn(TI,{defaultValue:t?.currency,data:BI,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:n});return hn(kI,{type:"number",label:e.label,placeholder:e.placeholder??"Value",defaultValue:t?.value?.toString()??"USD",icon:hn(Ga,{size:14}),rightSection:f,rightSectionWidth:92,onChange:l})}import{Group as AI}from"@mantine/core";import{useState as MI}from"react";import{jsx as us,jsxs as FI}from"react/jsx-runtime";function cs(e){let[o,t]=MI(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return FI(AI,{spacing:"xs",grow:!0,noWrap:!0,children:[us(Ve,{name:e.name+".start",placeholder:"Start",defaultValue:o?.start,onChange:a=>r({...o,start:a})}),us(Ve,{name:e.name+".end",placeholder:"End",defaultValue:o?.end,onChange:a=>r({...o,end:a})})]})}import{Group as wI,NativeSelect as OI,TextInput as ds}from"@mantine/core";import{useState as EI}from"react";import{jsx as yn,jsxs as NI}from"react/jsx-runtime";function Ae(e){let[o,t]=EI(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return NI(wI,{spacing:"xs",grow:!0,noWrap:!0,children:[yn(OI,{style:{width:80},"data-testid":e.name+"-comparator",defaultValue:o?.comparator,data:["","<","<=",">=",">"],onChange:a=>r({...o,comparator:a.currentTarget.value})}),yn(ds,{id:e.name,name:e.name,required:e.required,"data-autofocus":e.autoFocus,"data-testid":e.name+"-value",type:"number",placeholder:"Value",defaultValue:o?.value,autoFocus:e.autoFocus,step:"any",onWheel:a=>{e.disableWheel&&a.currentTarget.blur()},onChange:a=>{r({...o,value:LI(a.currentTarget.value)})}}),yn(ds,{placeholder:"Unit","data-testid":e.name+"-unit",defaultValue:o?.unit,onChange:a=>r({...o,unit:a.currentTarget.value})})]})}function LI(e){if(e)return parseFloat(e)}import{Group as VI}from"@mantine/core";import{useState as HI}from"react";import{jsx as ms,jsxs as qI}from"react/jsx-runtime";function Lt(e){let[o,t]=HI(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return qI(VI,{spacing:"xs",grow:!0,noWrap:!0,children:[ms(Ae,{name:e.name+"-low",defaultValue:o?.low,onChange:a=>r({...o,low:a})}),ms(Ae,{name:e.name+"-high",defaultValue:o?.high,onChange:a=>r({...o,high:a})})]})}import{Group as GI}from"@mantine/core";import{useState as UI}from"react";import{jsx as ps,jsxs as QI}from"react/jsx-runtime";function xs(e){let[o,t]=UI(e.defaultValue);function r(a){t(a),e.onChange&&e.onChange(a)}return QI(GI,{spacing:"xs",grow:!0,noWrap:!0,children:[ps(Ae,{name:e.name+"-numerator",defaultValue:o?.numerator,onChange:a=>r({...o,numerator:a})}),ps(Ae,{name:e.name+"-denominator",defaultValue:o?.denominator,onChange:a=>r({...o,denominator:a})})]})}import{Group as jI,NativeSelect as eg}from"@mantine/core";import{LRUCache as og,ReadablePromise as tg,createReference as rg,isEmpty as ag,isPopulated as ng,tryGetProfile as lg}from"@medplum/core";import{useCallback as fg,useEffect as sg,useMemo as vs,useRef as ig,useState as vn}from"react";import{Group as zI,Text as Is}from"@mantine/core";import{getDisplayString as WI,getReferenceString as ys}from"@medplum/core";import{forwardRef as XI,useCallback as gs,useState as JI}from"react";import{jsx as Nt,jsxs as hs}from"react/jsx-runtime";var $I={Observation:"code",User:"email:contains"},_I=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","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 KI(e){return{value:ys(e),label:WI(e),resource:e}}function kr(e){let o=S(),{resourceType:t,searchCriteria:r}=e,[a,n]=JI(),l=X(e.defaultValue,n),f=e.onChange,i=gs(async(u,c)=>{let d=YI(t),m=new URLSearchParams({[d]:u??"",_count:"10",...r});return await o.searchResources(t,m,{signal:c})},[o,t,r]),s=gs(u=>{f&&f(u[0])},[f]);return e.defaultValue&&!a&&!l?null:Nt(Qo,{name:e.name,required:e.required,itemComponent:ZI,defaultValue:l,placeholder:e.placeholder,maxSelectedValues:1,toKey:ys,toOption:KI,loadOptions:i,onChange:s,clearable:!0})}var ZI=XI(({label:e,resource:o,...t},r)=>Nt("div",{ref:r,...t,children:hs(zI,{noWrap:!0,children:[Nt(fe,{value:o}),hs("div",{children:[Nt(Is,{children:e}),Nt(Is,{size:"xs",color:"dimmed",children:o.birthDate})]})]})}));function YI(e){return $I[e]??(_I.includes(e)?"name":"_id")}import{jsx as Sn,jsxs as pg}from"react/jsx-runtime";function Zo(e){let{onChange:o}=e,t=S(),[r,a]=vn(e.defaultValue),[n,l]=vn(()=>ug(e.targetTypes)),[f,i]=vn(()=>cg(e.defaultValue,n)),s=ig(new og),u=vs(()=>f?.type==="profile"?{...e.searchCriteria,_profile:f.value}:e.searchCriteria,[e.searchCriteria,f]);sg(()=>{let m=!1,p=n?.map(x=>{if(!mg(x))return Promise.resolve(x);m=!0;let C=x.value,y=s.current.get(C);if(y)return y;let v=dg(t,x.value).then(P=>{let h={...x};return P?ng(P.type)?(h.resourceType=P.type,h.name=P.name,h.title=P.title):(console.error(`StructureDefinition.type missing for ${x.value}`),h.error="StructureDefinition.type missing"):(console.error(`StructureDefinition not found for ${x.value}`),h.error="StructureDefinition not found"),h}).catch(P=>(console.error(P),{...x,error:P})),b=new tg(v);return s.current.set(C,b),b});!p||!m||Promise.all(p).then(x=>{if(l(x),!f)return;let C=x.findIndex(y=>y.value===f.value||y.resourceType===f.resourceType);if(C===-1){console.debug(`defaultValue had unexpected resourceType: ${f.resourceType}`);return}i(x[C])}).catch(console.error)},[t,f,n]);let c=fg(m=>{let p=m?rg(m):void 0;a(p),o&&o(p)},[o]),d=vs(()=>n?n.map(m=>({value:m.value,label:m.type==="profile"?m.title??m.name??m.resourceType??m.value:m.value})):[],[n]);return pg(jI,{spacing:"xs",grow:!0,noWrap:!0,children:[n&&n.length>1&&Sn(eg,{"data-autofocus":e.autoFocus,"data-testid":"reference-input-resource-type-select",defaultValue:f?.resourceType,autoFocus:e.autoFocus,onChange:m=>{let p=m.currentTarget.value,x=n.find(C=>C.value===p);i(x)},data:d}),!n&&Sn(Xo,{autoFocus:e.autoFocus,testId:"reference-input-resource-type-input",defaultValue:f?.resourceType,onChange:m=>{i(m?{type:"resourceType",value:m,resourceType:m}:void 0)},name:e.name+"-resourceType",placeholder:"Resource Type"}),Sn(kr,{resourceType:f?.resourceType,name:e.name+"-id",required:e.required,placeholder:e.placeholder,defaultValue:r,searchCriteria:u,onChange:c})]})}function ug(e){if(!e||e.length===0||e.length===1&&e[0]==="Resource")return;let o=[];for(let t of e)t.includes("/")?o.push({type:"profile",value:t}):o.push({type:"resourceType",value:t,resourceType:t});return o}function cg(e,o){let t=e?.reference?.split("/")[0];if(t){let r=o?.find(a=>a.resourceType===t);return r||{type:"resourceType",value:t,resourceType:t}}if(o&&o.length>0)return o[0]}async function dg(e,o){let t=lg(o);if(t)return{type:t.type,name:t.name,title:t.title};let r=`{
66
- StructureDefinitionList(url: "${o}", _sort: "_lastUpdated", _count: 1) {
64
+ }`.replace(/\s+/g," ")}function getResourcesFromResponse(response,query){let resources=[];return response.data.Patients1&&resources.push(...response.data.Patients1),response.data.Patients2&&resources.push(...response.data.Patients2),response.data.ServiceRequestList&&resources.push(...response.data.ServiceRequestList),sortByRelevance(dedupeResources(resources),query).slice(0,5)}function dedupeResources(resources){let ids=new Set,result=[];for(let resource of resources)ids.has(resource.id)||(ids.add(resource.id),result.push(resource));return result}function sortByRelevance(resources,query){return resources.sort((a,b2)=>getResourceScore(b2,query)-getResourceScore(a,query))}function getResourceScore(resource,query){let bestScore=0;if(resource.identifier)for(let identifier of resource.identifier)bestScore=Math.max(bestScore,getStringScore(identifier.value,query));if(resource.resourceType==="Patient"&&resource.name)for(let name of resource.name)bestScore=Math.max(bestScore,getStringScore(formatHumanName2(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}import{jsx as jsx11,jsxs as jsxs4}from"react/jsx-runtime";function Header(props){let context=m(),{medplum,profile,navigate}=context,logins=medplum.getLogins(),[userMenuOpened,setUserMenuOpened]=useState4(!1);return jsx11(MantineAppShell.Header,{p:8,style:{zIndex:101},children:jsxs4(Group4,{justify:"space-between",children:[jsxs4(Group4,{gap:"xs",children:[jsx11(UnstyledButton,{className:Header_default.logoButton,onClick:props.navbarToggle,children:props.logo}),!props.headerSearchDisabled&&jsx11(HeaderSearchInput,{pathname:props.pathname,searchParams:props.searchParams})]}),jsxs4(Menu,{width:260,shadow:"xl",position:"bottom-end",transitionProps:{transition:"pop-top-right"},opened:userMenuOpened,onClose:()=>setUserMenuOpened(!1),children:[jsx11(Menu.Target,{children:jsx11(UnstyledButton,{className:clsx_default(Header_default.user,{[Header_default.userActive]:userMenuOpened}),onClick:()=>setUserMenuOpened(o=>!o),children:jsxs4(Group4,{gap:7,children:[jsx11(ResourceAvatar,{value:profile,radius:"xl",size:24}),jsx11(Text2,{size:"sm",className:Header_default.userName,children:formatHumanName3(profile?.name?.[0])}),jsx11(IconChevronDown,{size:12,stroke:1.5})]})})}),jsxs4(Menu.Dropdown,{children:[jsxs4(Stack,{align:"center",p:"xl",children:[jsx11(ResourceAvatar,{size:"xl",radius:100,value:context.profile}),jsx11(HumanNameDisplay,{value:context.profile?.name?.[0]}),jsx11(Text2,{c:"dimmed",size:"xs",children:medplum.getActiveLogin()?.project.display})]}),logins.length>1&&jsx11(Menu.Divider,{}),logins.map(login=>login.profile.reference!==getReferenceString2(context.profile)&&jsx11(Menu.Item,{onClick:()=>{medplum.setActiveLogin(login).then(()=>window.location.reload()).catch(console.log)},children:jsxs4(Group4,{children:[jsx11(Avatar2,{radius:"xl"}),jsxs4("div",{style:{flex:1},children:[jsx11(Text2,{size:"sm",fw:500,children:login.profile.display}),jsx11(Text2,{c:"dimmed",size:"xs",children:login.project.display})]})]})},login.profile.reference)),jsx11(Menu.Divider,{}),jsx11(Menu.Item,{leftSection:jsx11(IconSwitchHorizontal,{size:14,stroke:1.5}),onClick:()=>navigate("/signin"),children:"Add another account"}),jsx11(Menu.Item,{leftSection:jsx11(IconSettings,{size:14,stroke:1.5}),onClick:()=>navigate(`/${getReferenceString2(profile)}`),children:"Account settings"}),jsx11(Menu.Item,{leftSection:jsx11(IconLogout,{size:14,stroke:1.5}),onClick:async()=>{await medplum.signOut(),navigate("/signin")},children:"Sign out"}),jsx11(Text2,{size:"xs",c:"dimmed",ta:"center",children:props.version})]})]})]})})}import{Button as Button2,AppShell as MantineAppShell2,ScrollArea,Space,Text as Text3}from"@mantine/core";import{Fragment as Fragment3,useState as useState7}from"react";import{Button,Group as Group5,Modal,NativeSelect as NativeSelect2,Stack as Stack2,TextInput as TextInput3}from"@mantine/core";import{showNotification as showNotification2}from"@mantine/notifications";import{deepClone,normalizeErrorString as normalizeErrorString3}from"@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}import{jsx as jsx12}from"react/jsx-runtime";function Form(props){return jsx12("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})}import{jsx as jsx13,jsxs as jsxs5}from"react/jsx-runtime";function BookmarkDialog(props){let medplum=s(),config=medplum.getUserConfiguration();function submitHandler(formData){let{menuname,bookmarkname:name}=formData,target=`${props.pathname}?${props.searchParams.toString()}`,newConfig=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"}),showNotification2({color:"green",message:"Success"}),props.onOk()}).catch(err=>{showNotification2({color:"red",message:normalizeErrorString3(err)})})}return jsx13(Modal,{title:"Add Bookmark",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:jsx13(Form,{onSubmit:submitHandler,children:jsxs5(Stack2,{children:[jsx13(SelectMenu,{config}),jsx13(TextInput3,{label:"Bookmark Name",type:"text",name:"bookmarkname",placeholder:"Bookmark Name",withAsterisk:!0}),jsx13(Group5,{justify:"flex-end",children:jsx13(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 jsx13(NativeSelect2,{name:"menuname",defaultValue:menus[0],label:"Select Menu Option",data:menus,withAsterisk:!0})}import{useCallback as useCallback4,useState as useState6}from"react";import{useState as useState5}from"react";import{useCallback as useCallback3}from"react";import{jsx as jsx14}from"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=s(),{binding,creatable,clearable,expandParams,...rest}=props,loadValues=useCallback3(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 jsx14(AsyncAutocomplete,{...rest,creatable:creatable??!0,clearable:clearable??!0,toOption:toOption2,loadOptions:loadValues,onCreate:createValue})}import{jsx as jsx15}from"react/jsx-runtime";function CodeInput(props){let{defaultValue:defaultValue2,onChange,...rest}=props,[value,setValue]=useState5(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newCode=valueSetElementToCode(newValue);setValue(newCode),onChange&&onChange(newCode)}return jsx15(ValueSetAutocomplete,{defaultValue:codeToValueSetElement(value),onChange:handleChange,...rest})}function codeToValueSetElement(code){return code?{code}:void 0}function valueSetElementToCode(element){return element?.code}import{jsx as jsx16}from"react/jsx-runtime";function ResourceTypeInput(props){let[resourceType,setResourceType]=useState6(props.defaultValue),onChange=props.onChange,setResourceTypeWrapper=useCallback4(newResourceType=>{setResourceType(newResourceType),onChange&&onChange(newResourceType)},[onChange]);return jsx16(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:0,clearable:!1})}var Navbar_default={menuTitle:"Navbar_menuTitle",link:"Navbar_link",linkActive:"Navbar_linkActive"};import{Fragment as Fragment4,jsx as jsx17,jsxs as jsxs6}from"react/jsx-runtime";function Navbar(props){let navigate=B(),activeLink=getActiveLink(props.pathname,props.searchParams,props.menus),[bookmarkDialogVisible,setBookmarkDialogVisible]=useState7(!1);function onLinkClick(e,to){e.stopPropagation(),e.preventDefault(),navigate(to),window.innerWidth<768&&props.closeNavbar()}function navigateResourceType(resourceType){resourceType&&navigate(`/${resourceType}`)}return jsxs6(Fragment4,{children:[jsx17(MantineAppShell2.Navbar,{children:jsxs6(ScrollArea,{p:"xs",children:[!props.resourceTypeSearchDisabled&&jsx17(MantineAppShell2.Section,{mb:"sm",children:jsx17(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",onChange:newValue=>navigateResourceType(newValue)},window.location.pathname)}),jsxs6(MantineAppShell2.Section,{grow:!0,children:[props.menus?.map(menu=>jsxs6(Fragment3,{children:[jsx17(Text3,{className:Navbar_default.menuTitle,children:menu.title}),menu.links?.map(link=>jsxs6(NavbarLink,{to:link.href,active:link.href===activeLink?.href,onClick:e=>onLinkClick(e,link.href),children:[jsx17(NavLinkIcon,{to:link.href,icon:link.icon}),jsx17("span",{children:link.label})]},link.href))]},`menu-${menu.title}`)),props.displayAddBookmark&&jsx17(Button2,{variant:"subtle",size:"xs",mt:"xl",leftSection:jsx17(IconPlus,{size:"0.75rem"}),onClick:()=>setBookmarkDialogVisible(!0),children:"Add Bookmark"})]})]})}),props.pathname&&props.searchParams&&jsx17(BookmarkDialog,{pathname:props.pathname,searchParams:props.searchParams,visible:bookmarkDialogVisible,onOk:()=>setBookmarkDialogVisible(!1),onCancel:()=>setBookmarkDialogVisible(!1)})]})}function NavbarLink(props){return jsx17(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:jsx17(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}import{jsx as jsx18,jsxs as jsxs7}from"react/jsx-runtime";function AppShell(props){let[navbarOpen,setNavbarOpen]=useState8(localStorage.navbarOpen==="true"),medplum=s(),profile=w();useEffect2(()=>{function eventListener(){showNotification3({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()?jsx18(Loading,{}):jsxs7(MantineAppShell3,{header:{height:60},navbar:{width:250,breakpoint:"sm",collapsed:{desktop:!profile||!navbarOpen,mobile:!profile||!navbarOpen}},padding:0,children:[profile&&jsx18(Header,{pathname:props.pathname,searchParams:props.searchParams,headerSearchDisabled:props.headerSearchDisabled,logo:props.logo,version:props.version,navbarToggle:toggleNavbar}),profile&&navbarOpen?jsx18(Navbar,{pathname:props.pathname,searchParams:props.searchParams,menus:props.menus,closeNavbar,displayAddBookmark:props.displayAddBookmark,resourceTypeSearchDisabled:props.resourceTypeSearchDisabled}):void 0,jsx18(MantineAppShell3.Main,{className:AppShell_default.main,children:jsx18(ErrorBoundary,{children:jsx18(Suspense,{fallback:jsx18(Loading,{}),children:props.children})})})]})}import{Anchor as Anchor2}from"@mantine/core";import{jsx as jsx19,jsxs as jsxs8}from"react/jsx-runtime";function AttachmentDisplay(props){let{contentType,url,title}=props.value??{};return url?jsxs8("div",{"data-testid":"attachment-display",children:[contentType?.startsWith("image/")&&jsx19("img",{"data-testid":"attachment-image",style:{maxWidth:props.maxWidth},src:url,alt:title}),contentType?.startsWith("video/")&&jsx19("video",{"data-testid":"attachment-video",style:{maxWidth:props.maxWidth},controls:!0,children:jsx19("source",{type:contentType,src:url})}),contentType==="application/pdf"&&jsx19("div",{"data-testid":"attachment-pdf",style:{maxWidth:props.maxWidth,minHeight:400},children:jsx19("iframe",{width:"100%",height:"400",src:url+"#navpanes=0",allowFullScreen:!0,frameBorder:0,seamless:!0})}),jsx19("div",{"data-testid":"download-link",style:{padding:"2px 16px 16px 16px"},children:jsx19(Anchor2,{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}import{jsx as jsx20}from"react/jsx-runtime";function AttachmentArrayDisplay(props){return jsx20("div",{children:props.values?.map((v2,index)=>jsx20("div",{children:jsx20(AttachmentDisplay,{value:v2,maxWidth:props.maxWidth})},"attatchment-"+index))})}import{ActionIcon}from"@mantine/core";import{useRef as useRef4,useState as useState9}from"react";import{normalizeOperationOutcome}from"@medplum/core";import{useRef as useRef3}from"react";import{Fragment as Fragment5,jsx as jsx21,jsxs as jsxs9}from"react/jsx-runtime";function AttachmentButton(props){let medplum=s(),fileInputRef=useRef3(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){if(!file||!file.name)return;props.onUploadStart&&props.onUploadStart();let filename=file.name,contentType=file.type||"application/octet-stream";medplum.createBinary(file,filename,contentType,props.onUploadProgress).then(binary=>{props.onUpload({contentType:binary.contentType,url:binary.url,title:filename})}).catch(err=>{props.onUploadError&&props.onUploadError(normalizeOperationOutcome(err))})}return jsxs9(Fragment5,{children:[jsx21("input",{type:"file","data-testid":"upload-file-input",style:{display:"none"},ref:fileInputRef,onChange:e=>onFileChange(e)}),props.children({onClick})]})}import{jsx as jsx22,jsxs as jsxs10}from"react/jsx-runtime";function AttachmentArrayInput(props){let[values,setValues]=useState9(props.defaultValue??[]),valuesRef=useRef4();valuesRef.current=values;function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}return jsxs10("table",{style:{width:"100%"},children:[jsxs10("colgroup",{children:[jsx22("col",{width:"97%"}),jsx22("col",{width:"3%"})]}),jsxs10("tbody",{children:[values.map((v2,index)=>jsxs10("tr",{children:[jsx22("td",{children:jsx22(AttachmentDisplay,{value:v2,maxWidth:200})}),jsx22("td",{children:jsx22(ActionIcon,{title:"Remove",variant:"subtle",size:"sm",color:"gray",onClick:e=>{killEvent(e);let copy=values.slice();copy.splice(index,1),setValuesWrapper(copy)},children:jsx22(IconCircleMinus,{})})})]},`${index}-${values.length}`)),jsxs10("tr",{children:[jsx22("td",{}),jsx22("td",{children:jsx22(AttachmentButton,{onUpload:attachment=>{setValuesWrapper([...valuesRef.current,attachment])},children:props2=>jsx22(ActionIcon,{...props2,title:"Add",variant:"subtle",size:"sm",color:"green",children:jsx22(IconCloudUpload,{})})})})]})]})]})}import{Button as Button3}from"@mantine/core";import{useState as useState10}from"react";import{Fragment as Fragment6,jsx as jsx23,jsxs as jsxs11}from"react/jsx-runtime";function AttachmentInput(props){let[value,setValue]=useState10(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return value?jsxs11(Fragment6,{children:[jsx23(AttachmentDisplay,{value,maxWidth:200}),jsx23(Button3,{onClick:e=>{killEvent(e),setValueWrapper(void 0)},children:"Remove"})]}):jsx23(AttachmentButton,{onUpload:setValueWrapper,children:props2=>jsx23(Button3,{...props2,children:"Upload..."})})}import{getPathDisplayName,tryGetDataType}from"@medplum/core";var DEFAULT_IGNORED_PROPERTIES=["meta","implicitRules","contained","extension","modifierExtension"],DEFAULT_IGNORED_NON_NESTED_PROPERTIES=["language","text"];var DescriptionList_default={root:"DescriptionList_root",compact:"DescriptionList_compact"};import{Fragment as Fragment7,jsx as jsx24,jsxs as jsxs12}from"react/jsx-runtime";function DescriptionList(props){let{children,compact}=props;return jsx24("dl",{className:clsx_default(DescriptionList_default.root,{[DescriptionList_default.compact]:compact}),children})}function DescriptionListEntry(props){return jsxs12(Fragment7,{children:[jsx24("dt",{children:props.term}),jsx24("dd",{children:props.children})]})}import{ActionIcon as ActionIcon2,Box,CopyButton,Tooltip}from"@mantine/core";import{PropertyType,formatDateTime,formatPeriod,formatTiming,isEmpty}from"@medplum/core";import{formatCodeableConcept}from"@medplum/core";import{Fragment as Fragment8,jsx as jsx25}from"react/jsx-runtime";function CodeableConceptDisplay(props){return jsx25(Fragment8,{children:formatCodeableConcept(props.value)})}import{formatCoding}from"@medplum/core";import{Fragment as Fragment9,jsx as jsx26}from"react/jsx-runtime";function CodingDisplay(props){return jsx26(Fragment9,{children:formatCoding(props.value)})}import{Fragment as Fragment10,jsx as jsx27}from"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("]")),jsx27(Fragment10,{children:builder.join("").trim()})}import{Fragment as Fragment11,jsx as jsx28,jsxs as jsxs13}from"react/jsx-runtime";function ContactDetailDisplay(props){let contactDetail=props.value;return contactDetail?jsxs13(Fragment11,{children:[contactDetail.name,contactDetail.name&&": ",contactDetail.telecom?.map(telecom=>jsx28(ContactPointDisplay,{value:telecom},`telecom-${contactDetail.name}-${telecom.value}`))]}):null}import{jsxs as jsxs14}from"react/jsx-runtime";function IdentifierDisplay(props){return jsxs14("div",{children:[props.value?.system,": ",props.value?.value]})}import{formatMoney}from"@medplum/core";import{Fragment as Fragment12,jsx as jsx29}from"react/jsx-runtime";function MoneyDisplay(props){return jsx29(Fragment12,{children:formatMoney(props.value)})}import{formatQuantity}from"@medplum/core";import{Fragment as Fragment13,jsx as jsx30}from"react/jsx-runtime";function QuantityDisplay(props){return jsx30(Fragment13,{children:formatQuantity(props.value)})}import{formatRange}from"@medplum/core";import{Fragment as Fragment14,jsx as jsx31}from"react/jsx-runtime";function RangeDisplay(props){return jsx31(Fragment14,{children:formatRange(props.value)})}import{Fragment as Fragment15,jsx as jsx32,jsxs as jsxs15}from"react/jsx-runtime";function RatioDisplay(props){let value=props.value;return value?jsxs15(Fragment15,{children:[jsx32(QuantityDisplay,{value:value.numerator}),"\xA0/\xA0",jsx32(QuantityDisplay,{value:value.denominator})]}):null}import{stringify}from"@medplum/core";import{Fragment as Fragment16,jsx as jsx33}from"react/jsx-runtime";function ReferenceDisplay(props){if(!props.value)return null;let displayString=props.value.display||props.value.reference||stringify(props.value);return props.link!==!1&&props.value.reference?jsx33(MedplumLink,{to:props.value,children:displayString}):jsx33(Fragment16,{children:displayString})}import{Fragment as Fragment17,jsx as jsx34}from"react/jsx-runtime";function ResourceArrayDisplay(props){let{property,values}=props,propertyType=property.type[0].code;return props.values?jsx34(Fragment17,{children:values.map((v2,index)=>jsx34("div",{children:jsx34(ResourcePropertyDisplay,{arrayElement:!0,property,propertyType,value:v2,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},`${index}-${values.length}`))}):jsx34(Fragment17,{})}import{Fragment as Fragment18,jsx as jsx35,jsxs as jsxs16}from"react/jsx-runtime";function ResourcePropertyDisplay(props){let{property,propertyType,value}=props;if(property?.path?.endsWith(".id"))return jsxs16(Box,{component:"div",style:{display:"flex",gap:3,alignItems:"center"},children:[value,!isEmpty(value)&&jsx35(CopyButton,{value,timeout:2e3,children:({copied,copy})=>jsx35(Tooltip,{label:copied?"Copied":"Copy",withArrow:!0,position:"right",children:jsx35(ActionIcon2,{variant:"subtle",color:copied?"teal":"gray",onClick:copy,children:copied?jsx35(IconCheck,{size:"1rem"}):jsx35(IconCopy,{size:"1rem"})})})})]});if(property?.max&&property.max>1&&!props.arrayElement)return propertyType===PropertyType.Attachment?jsx35(AttachmentArrayDisplay,{values:value,maxWidth:props.maxWidth}):jsx35(ResourceArrayDisplay,{property,values:value,ignoreMissingValues:props.ignoreMissingValues,link:props.link});switch(propertyType){case PropertyType.boolean:return jsx35(Fragment18,{children:value===void 0?"":(!!value).toString()});case PropertyType.SystemString:case PropertyType.string:return jsx35("div",{style:{whiteSpace:"pre-wrap"},children:value});case PropertyType.code:case PropertyType.date:case PropertyType.decimal:case PropertyType.id:case PropertyType.integer:case PropertyType.positiveInt:case PropertyType.unsignedInt:case PropertyType.uri:case PropertyType.url:return jsx35(Fragment18,{children:value});case PropertyType.canonical:return jsx35(ReferenceDisplay,{value:{reference:value},link:props.link});case PropertyType.dateTime:case PropertyType.instant:return jsx35(Fragment18,{children:formatDateTime(value)});case PropertyType.markdown:return jsx35("pre",{children:value});case PropertyType.Address:return jsx35(AddressDisplay,{value});case PropertyType.Annotation:return jsx35(Fragment18,{children:value?.text});case PropertyType.Attachment:return jsx35(AttachmentDisplay,{value,maxWidth:props.maxWidth});case PropertyType.CodeableConcept:return jsx35(CodeableConceptDisplay,{value});case PropertyType.Coding:return jsx35(CodingDisplay,{value});case PropertyType.ContactDetail:return jsx35(ContactDetailDisplay,{value});case PropertyType.ContactPoint:return jsx35(ContactPointDisplay,{value});case PropertyType.HumanName:return jsx35(HumanNameDisplay,{value});case PropertyType.Identifier:return jsx35(IdentifierDisplay,{value});case PropertyType.Money:return jsx35(MoneyDisplay,{value});case PropertyType.Period:return jsx35(Fragment18,{children:formatPeriod(value)});case PropertyType.Quantity:case PropertyType.Duration:return jsx35(QuantityDisplay,{value});case PropertyType.Range:return jsx35(RangeDisplay,{value});case PropertyType.Ratio:return jsx35(RatioDisplay,{value});case PropertyType.Reference:return jsx35(ReferenceDisplay,{value,link:props.link});case PropertyType.Timing:return jsx35(Fragment18,{children:formatTiming(value)});case PropertyType.Dosage:case PropertyType.UsageContext:return jsx35(BackboneElementDisplay,{value:{type:propertyType,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues});default:if(!property)throw Error(`Displaying property of type ${props.propertyType} requires element schema`);return jsx35(BackboneElementDisplay,{value:{type:property.type[0].code,value},compact:!0,ignoreMissingValues:props.ignoreMissingValues})}}import{getTypedPropertyValue,getTypedPropertyValueWithSchema}from"@medplum/core";function getValueAndType(context,path){let typedResult=getTypedPropertyValue(context,path);return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}function getValueAndTypeFromElement(value,path,element){let typedResult=getTypedPropertyValueWithSchema(value,path,element);return typedResult?Array.isArray(typedResult)?[typedResult.map(e=>e.value),typedResult[0].type]:[typedResult.value,typedResult.type]:[void 0,"undefined"]}import{jsx as jsx36,jsxs as jsxs17}from"react/jsx-runtime";function BackboneElementDisplay(props){let typedValue=props.value,value=typedValue.value;if(!value)return null;let typeName=typedValue.type,typeSchema=tryGetDataType(typeName);return typeSchema?typeof value=="object"&&"name"in value&&Object.keys(value).length===1&&typeof value.name=="string"?jsx36("div",{children:value.name}):jsx36(DescriptionList,{compact:props.compact,children:Object.entries(typeSchema.elements).map(entry=>{let[key,property]=entry;if(DEFAULT_IGNORED_PROPERTIES.includes(key)||DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&property.path.split(".").length===2)return null;let[propertyValue,propertyType]=getValueAndType(typedValue,key);return props.ignoreMissingValues&&(!propertyValue||Array.isArray(propertyValue)&&propertyValue.length===0)?null:jsx36(DescriptionListEntry,{term:getPathDisplayName(key),children:jsx36(ResourcePropertyDisplay,{property,propertyType,value:propertyValue,ignoreMissingValues:props.ignoreMissingValues,link:props.link})},key)})}):jsxs17("div",{children:[typeName,"\xA0not implemented"]})}import{tryGetDataType as tryGetDataType2}from"@medplum/core";import{useContext as useContext5,useMemo as useMemo6,useState as useState30}from"react";import{Stack as Stack5}from"@mantine/core";import{getPathDisplayName as getPathDisplayName3,isPopulated as isPopulated3}from"@medplum/core";import{useMemo as useMemo5,useState as useState29}from"react";import{Group as Group6,Input}from"@mantine/core";import{useContext}from"react";import React from"react";function splitOnceRight(str,delim){let delimIndex=str.lastIndexOf(delim);if(delimIndex===-1)return["",str];let beginning=str.substring(0,delimIndex),last=str.substring(delimIndex+delim.length);return[beginning,last]}var BackboneElementContext=React.createContext({profileUrl:void 0,debugMode:!1,getModifiedNestedElement:()=>{}});function buildBackboneElementContext(typeSchema,profileUrl,debugMode){let nestedPaths=Object.create(null);function getModifiedNestedElement(nestedElementPath){return nestedPaths[nestedElementPath]}let elements=typeSchema?.elements;if(elements){let seenKeys=new Set;for(let[key,property]of Object.entries(elements)){let[beginning,_last]=splitOnceRight(key,".");seenKeys.has(beginning)&&(nestedPaths[typeSchema.type+"."+key]=property),seenKeys.add(key)}}return{debugMode:debugMode??!1,profileUrl,getModifiedNestedElement}}import{jsx as jsx37,jsxs as jsxs18}from"react/jsx-runtime";function CheckboxFormSection(props){let{debugMode}=useContext(BackboneElementContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,jsxs18(Group6,{wrap:"nowrap","data-testid":props.testId,children:[jsx37("div",{children:props.children}),jsx37("div",{children:jsx37(Input.Wrapper,{id:props.htmlFor,label,description:props.description,withAsterisk:props.withAsterisk,children:null})})]})}import{Input as Input2}from"@mantine/core";import{useContext as useContext2}from"react";function getErrorsForInput(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))?.map(issue=>issue.details?.text)?.join(`
65
+ `)}function getIssuesForExpression(outcome,expression){return outcome?.issue?.filter(issue=>isExpressionMatch(issue.expression?.[0],expression))}function isExpressionMatch(expr1,expr2){if(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}import{jsx as jsx38}from"react/jsx-runtime";function FormSection(props){let{debugMode}=useContext2(BackboneElementContext),label;return debugMode&&props.fhirPath?label=`${props.title} - ${props.fhirPath}`:label=props.title,jsx38(Input2.Wrapper,{id:props.htmlFor,label,description:props.description,withAsterisk:props.withAsterisk,error:getErrorsForInput(props.outcome,props.htmlFor),"data-testid":props.testId,children:props.children})}import{capitalize,isEmpty as isEmpty2}from"@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]",capitalize(type.code));compoundKey in obj&&delete obj[compoundKey]}return obj[propName]=value,obj}function isSupportedProfileStructureDefinition(profile){return!!profile&&!isEmpty2(profile.url)&&!isEmpty2(profile.name)}import{Checkbox,Group as Group19,NativeSelect as NativeSelect9,Textarea as Textarea2,TextInput as TextInput12}from"@mantine/core";import{capitalize as capitalize2,HTTP_HL7_ORG,PropertyType as PropertyType2}from"@medplum/core";import{useState as useState28}from"react";import{useState as useState11}from"react";import{jsx as jsx39}from"react/jsx-runtime";function CodeableConceptInput(props){let{defaultValue:defaultValue2,onChange,...rest}=props,[value,setValue]=useState11(defaultValue2);function handleChange(newValues){let newConcept=valueSetElementToCodeableConcept(newValues);setValue(newConcept),onChange&&onChange(newConcept)}return jsx39(ValueSetAutocomplete,{defaultValue:value&&codeableConceptToValueSetElement(value),onChange:handleChange,...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}))}}import{useState as useState12}from"react";import{jsx as jsx40}from"react/jsx-runtime";function CodingInput(props){let{defaultValue:defaultValue2,onChange,...rest}=props,[value,setValue]=useState12(defaultValue2);function handleChange(newValues){let newValue=newValues[0],newConcept=newValue&&valueSetElementToCoding(newValue);setValue(newConcept),onChange&&onChange(newConcept)}return jsx40(ValueSetAutocomplete,{defaultValue:value&&codingToValueSetElement(value),maxValues:1,onChange:handleChange,...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}}import{Group as Group8,TextInput as TextInput5}from"@mantine/core";import{useRef as useRef6,useState as useState14}from"react";import{Group as Group7,NativeSelect as NativeSelect3,TextInput as TextInput4}from"@mantine/core";import{useContext as useContext3,useMemo,useRef as useRef5,useState as useState13}from"react";import{jsx as jsx41,jsxs as jsxs19}from"react/jsx-runtime";function ContactPointInput(props){let{path,outcome}=props,{getModifiedNestedElement}=useContext3(BackboneElementContext),[contactPoint,setContactPoint]=useState13(props.defaultValue),ref=useRef5();ref.current=contactPoint;let[systemElement,useElement,valueElement]=useMemo(()=>["system","use","value"].map(field=>getModifiedNestedElement(path+"."+field)),[getModifiedNestedElement,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)}return jsxs19(Group7,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[jsx41(NativeSelect3,{"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,path+".system")}),jsx41(NativeSelect3,{"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,path+".use")}),jsx41(TextInput4,{placeholder:"Value",defaultValue:contactPoint?.value,required:(valueElement?.min??0)>0,onChange:e=>setValue(e.currentTarget.value),error:getErrorsForInput(outcome,path+".value")})]})}import{jsx as jsx42,jsxs as jsxs20}from"react/jsx-runtime";function ContactDetailInput(props){let[contactPoint,setContactDetail]=useState14(props.defaultValue),ref=useRef6();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 jsxs20(Group8,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx42(TextInput5,{"data-testid":props.name+"-name",name:props.name+"-name",placeholder:"Name",style:{width:180},defaultValue:contactPoint?.name,onChange:e=>setName(e.currentTarget.value)}),jsx42(ContactPointInput,{name:props.name+"-telecom",path:props.path+".telecom",defaultValue:contactPoint?.telecom?.[0],onChange:setTelecom,outcome:props.outcome})]})}import{TextInput as TextInput6}from"@mantine/core";import{isValidDate}from"@medplum/core";function convertIsoToLocal(isoString){if(!isoString)return"";let date=new Date(isoString);return isValidDate(date)?date.toLocaleDateString("sv")+"T"+date.toLocaleTimeString("sv"):""}function convertLocalToIso(localString){if(!localString)return"";let date=new Date(localString);return isValidDate(date)?date.toISOString():""}import{jsx as jsx43}from"react/jsx-runtime";function DateTimeInput(props){return jsx43(TextInput6,{id:props.name,name:props.name,"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"}import{JsonInput}from"@mantine/core";import{stringify as stringify2,tryGetProfile,isProfileLoaded}from"@medplum/core";import{useEffect as useEffect3,useMemo as useMemo2,useState as useState15}from"react";import{jsx as jsx44,jsxs as jsxs21}from"react/jsx-runtime";function ExtensionInput(props){let{propertyType}=props,medplum=s(),[loadingProfile,setLoadingProfile]=useState15(!1),[typeSchema,setTypeSchema]=useState15(),profileUrl=useMemo2(()=>{if(!(!propertyType.profile||propertyType.profile.length===0))return propertyType.profile[0]},[propertyType]);useEffect3(()=>{profileUrl&&(setLoadingProfile(!0),medplum.requestProfileSchema(profileUrl).then(()=>{let profile=tryGetProfile(profileUrl);setLoadingProfile(!1),setTypeSchema(profile)}).catch(reason=>{setLoadingProfile(!1),console.warn(reason)}))},[medplum,profileUrl]);function onChange(newValue){props.onChange&&(console.log("Extension",newValue),props.onChange(newValue))}return profileUrl?profileUrl&&(loadingProfile||!isProfileLoaded(profileUrl))?jsx44("div",{children:"Loading..."}):typeSchema?jsx44(BackboneElementInput,{profileUrl,typeName:typeSchema.name,defaultValue:props.defaultValue,onChange}):jsxs21("div",{children:["StructureDefinition for ",profileUrl," not found"]}):jsx44(ExtensionJsonInput,{...props})}function ExtensionJsonInput(props){return jsx44(JsonInput,{id:props.name,name:props.name,"data-testid":"extension-json-input",defaultValue:stringify2(props.defaultValue),deserialize:JSON.parse,onChange:newValue=>{props.onChange&&props.onChange(JSON.parse(newValue))}})}import{Group as Group9,NativeSelect as NativeSelect4,TextInput as TextInput7}from"@mantine/core";import{useState as useState16}from"react";import{jsx as jsx45,jsxs as jsxs22}from"react/jsx-runtime";function HumanNameInput(props){let{outcome,path}=props,[value,setValue]=useState16(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})}return jsxs22(Group9,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx45(NativeSelect4,{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,path+".use")}),jsx45(TextInput7,{placeholder:"Prefix",name:props.name+"-prefix",defaultValue:value?.prefix?.join(" "),onChange:e=>setPrefix(e.currentTarget.value),error:getErrorsForInput(outcome,path+".prefix")}),jsx45(TextInput7,{placeholder:"Given",name:props.name+"-given",defaultValue:value?.given?.join(" "),onChange:e=>setGiven(e.currentTarget.value),error:getErrorsForInput(outcome,path+".given")}),jsx45(TextInput7,{name:props.name+"-family",placeholder:"Family",defaultValue:value?.family,onChange:e=>setFamily(e.currentTarget.value),error:getErrorsForInput(outcome,path+".family")}),jsx45(TextInput7,{placeholder:"Suffix",name:props.name+"-suffix",defaultValue:value?.suffix?.join(" "),onChange:e=>setSuffix(e.currentTarget.value),error:getErrorsForInput(outcome,path+".suffix")})]})}import{Group as Group10,TextInput as TextInput8}from"@mantine/core";import{useContext as useContext4,useMemo as useMemo3,useState as useState17}from"react";import{jsx as jsx46,jsxs as jsxs23}from"react/jsx-runtime";function IdentifierInput(props){let{path,outcome}=props,[value,setValue]=useState17(props.defaultValue),{getModifiedNestedElement}=useContext4(BackboneElementContext),[systemElement,valueElement]=useMemo3(()=>["system","value"].map(field=>getModifiedNestedElement(path+"."+field)),[getModifiedNestedElement,path]);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsxs23(Group10,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[jsx46(TextInput8,{placeholder:"System",required:(systemElement?.min??0)>0,defaultValue:value?.system,onChange:e=>setValueWrapper({...value,system:e.currentTarget.value}),error:getErrorsForInput(outcome,path+".system")}),jsx46(TextInput8,{placeholder:"Value",required:(valueElement?.min??0)>0,defaultValue:value?.value,onChange:e=>setValueWrapper({...value,value:e.currentTarget.value}),error:getErrorsForInput(outcome,path+".value")})]})}import{NativeSelect as NativeSelect5,TextInput as TextInput9}from"@mantine/core";import{useCallback as useCallback5,useState as useState18}from"react";import{jsx as jsx47}from"react/jsx-runtime";var data=["USD","EUR","CAD","GBP","AUD"];function MoneyInput(props){let{onChange}=props,[value,setValue]=useState18(props.defaultValue),setValueWrapper=useCallback5(newValue=>{setValue(newValue),onChange&&onChange(newValue)},[onChange]),handleCurrencyChange=useCallback5(e=>{setValueWrapper({...value,currency:e.currentTarget.value})},[value,setValueWrapper]),handleValueChange=useCallback5(e=>{setValueWrapper({...value,value:e.currentTarget.valueAsNumber})},[value,setValueWrapper]),select=jsx47(NativeSelect5,{defaultValue:value?.currency,data,styles:{input:{fontWeight:500,borderTopLeftRadius:0,borderBottomLeftRadius:0,width:92}},onChange:handleCurrencyChange});return jsx47(TextInput9,{type:"number",label:props.label,placeholder:props.placeholder??"Value",defaultValue:value?.value?.toString()??"USD",leftSection:jsx47(IconCurrencyDollar,{size:14}),rightSection:select,rightSectionWidth:92,onChange:handleValueChange})}import{Group as Group11}from"@mantine/core";import{useState as useState19}from"react";import{jsx as jsx48,jsxs as jsxs24}from"react/jsx-runtime";function PeriodInput(props){let[value,setValue]=useState19(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsxs24(Group11,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx48(DateTimeInput,{name:props.name+".start",placeholder:"Start",defaultValue:value?.start,onChange:newValue=>setValueWrapper({...value,start:newValue})}),jsx48(DateTimeInput,{name:props.name+".end",placeholder:"End",defaultValue:value?.end,onChange:newValue=>setValueWrapper({...value,end:newValue})})]})}import{Group as Group12,NativeSelect as NativeSelect6,TextInput as TextInput10}from"@mantine/core";import{useState as useState20}from"react";import{jsx as jsx49,jsxs as jsxs25}from"react/jsx-runtime";function QuantityInput(props){let[value,setValue]=useState20(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsxs25(Group12,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx49(NativeSelect6,{style:{width:80},"data-testid":props.name+"-comparator",defaultValue:value?.comparator,data:["","<","<=",">=",">"],onChange:e=>setValueWrapper({...value,comparator:e.currentTarget.value})}),jsx49(TextInput10,{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)})}}),jsx49(TextInput10,{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)}import{Group as Group13}from"@mantine/core";import{useState as useState21}from"react";import{jsx as jsx50,jsxs as jsxs26}from"react/jsx-runtime";function RangeInput(props){let[value,setValue]=useState21(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsxs26(Group13,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx50(QuantityInput,{name:props.name+"-low",defaultValue:value?.low,onChange:v2=>setValueWrapper({...value,low:v2})}),jsx50(QuantityInput,{name:props.name+"-high",defaultValue:value?.high,onChange:v2=>setValueWrapper({...value,high:v2})})]})}import{Group as Group14}from"@mantine/core";import{useState as useState22}from"react";import{jsx as jsx51,jsxs as jsxs27}from"react/jsx-runtime";function RatioInput(props){let[value,setValue]=useState22(props.defaultValue);function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsxs27(Group14,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx51(QuantityInput,{name:props.name+"-numerator",defaultValue:value?.numerator,onChange:v2=>setValueWrapper({...value,numerator:v2})}),jsx51(QuantityInput,{name:props.name+"-denominator",defaultValue:value?.denominator,onChange:v2=>setValueWrapper({...value,denominator:v2})})]})}import{Group as Group16,NativeSelect as NativeSelect7}from"@mantine/core";import{LRUCache,ReadablePromise,createReference as createReference2,isEmpty as isEmpty3,isPopulated,tryGetProfile as tryGetProfile2}from"@medplum/core";import{useCallback as useCallback7,useEffect as useEffect4,useMemo as useMemo4,useRef as useRef7,useState as useState24}from"react";import{getDisplayString as getDisplayString3,getReferenceString as getReferenceString3}from"@medplum/core";import{forwardRef as forwardRef3,useCallback as useCallback6,useState as useState23}from"react";import{Group as Group15,Text as Text4}from"@mantine/core";import{jsx as jsx52,jsxs as jsxs28}from"react/jsx-runtime";var SEARCH_CODES={Observation:"code",User:"email:contains"},NAME_RESOURCE_TYPES=["AccessPolicy","Account","ActivityDefinition","Bot","CapabilityStatement","ClientApplication","CodeSystem","CompartmentDefinition","ConceptMap","EffectEvidenceSynthesis","Endpoint","EventDefinition","Evidence","EvidenceVariable","ExampleScenario","GraphDefinition","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:getReferenceString3(resource),label:getDisplayString3(resource),resource}}function ResourceInput(props){let medplum=s(),{resourceType,searchCriteria}=props,[outcome,setOutcome]=useState23(),defaultValue2=j(props.defaultValue,setOutcome),onChange=props.onChange,loadValues=useCallback6(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=useCallback6(newResources=>{onChange&&onChange(newResources[0])},[onChange]);return props.defaultValue&&!outcome&&!defaultValue2?null:jsx52(AsyncAutocomplete,{name:props.name,required:props.required,itemComponent:ItemComponent2,defaultValue:defaultValue2,placeholder:props.placeholder,maxValues:1,toOption:toOption3,loadOptions:loadValues,onChange:handleChange,clearable:!0})}var ItemComponent2=forwardRef3(({label,resource,...others},ref)=>jsx52("div",{ref,...others,children:jsxs28(Group15,{wrap:"nowrap",children:[jsx52(ResourceAvatar,{value:resource}),jsxs28("div",{children:[jsx52(Text4,{children:label}),jsx52(Text4,{size:"xs",c:"dimmed",children:resource.birthDate})]})]})}));function getSearchParamForResourceType(resourceType){return SEARCH_CODES[resourceType]??(NAME_RESOURCE_TYPES.includes(resourceType)?"name":"_id")}import{jsx as jsx53,jsxs as jsxs29}from"react/jsx-runtime";function ReferenceInput(props){let{onChange}=props,medplum=s(),[value,setValue]=useState24(props.defaultValue),[targetTypes,setTargetTypes]=useState24(()=>createTargetTypes(props.targetTypes)),[targetType,setTargetType]=useState24(()=>getInitialTargetType(props.defaultValue,targetTypes)),promiseCache=useRef7(new LRUCache),searchCriteria=useMemo4(()=>targetType?.type==="profile"?{...props.searchCriteria,_profile:targetType.value}:props.searchCriteria,[props.searchCriteria,targetType]);useEffect4(()=>{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?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 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=useCallback7(item=>{let newValue=item?createReference2(item):void 0;setValue(newValue),onChange&&onChange(newValue)},[onChange]),typeSelectOptions=useMemo4(()=>targetTypes?targetTypes.map(tt=>({value:tt.value,label:tt.type==="profile"?tt.title??tt.name??tt.resourceType??tt.value:tt.value})):[],[targetTypes]);return jsxs29(Group16,{gap:"xs",grow:!0,wrap:"nowrap",children:[targetTypes&&targetTypes.length>1&&jsx53(NativeSelect7,{"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&&jsx53(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"}),jsx53(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=tryGetProfile2(profileUrl);if(profile)return{type:profile.type,name:profile.name,title:profile.title};let query=`{
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 e.graphql(r)).data.StructureDefinitionList[0]}function mg(e){return e.type==="profile"&&!e?.error&&ag(e.resourceType)}import{ActionIcon as Cs,Button as Cg,Group as Dr,Stack as bn,createStyles as bg}from"@mantine/core";import{getPathDisplayName as Rg,getPropertyDisplayName as Pg,isEmpty as Rn,tryGetProfile as Tg}from"@medplum/core";import{useEffect as kg,useState as Vt}from"react";import{arrayify as xg,getElementDefinitionFromElements as Ig,getTypedPropertyValueWithSchema as gg,isPopulated as hg,matchDiscriminant as yg}from"@medplum/core";function vg(e,o,t){for(let r of[t.elements,t.typeSchema?.elements]){let a;if(hg(r)){let n=Ig(r,o.path);n&&(a=gg(e.value,o.path,n))}if(a)return xg(a)?.some(n=>yg(n,o,t,r))??!1}return!1}function Sg(e,o,t){if(e)for(let r of o){let a={value:e,type:r.typeSchema?.name??r.type[0].code};if(t.every(n=>vg(a,n,r)))return r.name}}function Cn(e,o,t){if(!t||t.slices.length===0)return[e];let r=new Array(o.length+1);for(let a=0;a<r.length;a++)r[a]=[];for(let a of e){let n=Sg(a,o,t.discriminator),l=n?o.findIndex(f=>f.name===n):-1;l===-1&&(l=o.length),r[l].push(a)}for(let a=0;a<o.length;a++)r[a].length===0&&r[a].push(void 0);return r}function Ss(e){return e.type!==void 0&&e.type.length>0}import{jsx as oe,jsxs as Br}from"react/jsx-runtime";var bs=bg(e=>({indented:{marginTop:"0.5rem",borderLeft:`3px solid ${e.colors.gray[4]}`,padding:"0.5rem 0 0.5rem 0.5rem"}}));function Rs(e){let{property:o}=e,t=S(),[r,a]=Vt(!0),[n,l]=Vt([]),[f]=Vt(()=>Array.isArray(e.defaultValue)?e.defaultValue:[]),[i,s]=Vt([[]]),{classes:u}=bs(),c=o.type[0]?.code;kg(()=>{if(!o.slicing){let P=[];l(P);let h=Cn(f,P,o.slicing);s(h),a(!1);return}let y=[],v=[],b=[];for(let P of o.slicing.slices){if(!Ss(P))continue;let h=P.type[0],A;Rn(P.elements)&&h.profile&&(A=h.profile[0]),y.push(P),v.push(A),A?b.push(t.requestProfileSchema(A)):b.push(Promise.resolve())}Promise.all(b).then(()=>{for(let h=0;h<y.length;h++){let A=y[h],W=v[h];if(W){let Y=Tg(W);A.typeSchema=Y}}l(y);let P=Cn(f,y,o.slicing);s(P),a(!1)}).catch(P=>{console.error(P),a(!1)})},[t,o.slicing,c,f]);function d(y,v){let b=[...i];if(b[v]=y,s(b),e.onChange){let P=b.flat().filter(h=>h!==void 0);e.onChange(P)}}if(r)return oe("div",{children:"Loading..."});let m=n.length,p=i[m],x=!(e.hideNonSliceValues??(c==="Extension"&&n.length>0)),C=Rg(o.path);return Br(bn,{className:e.indent?u.indented:void 0,children:[n.map((y,v)=>oe(Dg,{slice:y,property:o,defaultValue:i[v],onChange:b=>{d(b,v)},testId:`slice-${y.name}`},y.name)),x&&p.map((y,v)=>Br(Dr,{noWrap:!0,style:{flexGrow:1},children:[oe("div",{style:{flexGrow:1},children:oe(io,{arrayElement:!0,property:e.property,name:e.name+"."+v,defaultValue:y,onChange:b=>{let P=[...p];P[v]=b,d(P,m)},defaultPropertyType:void 0,outcome:e.outcome})}),oe(Ts,{propertyDisplayName:C,testId:`nonsliced-remove-${v}`,onClick:b=>{M(b);let P=[...p];P.splice(v,1),d(P,m)}})]},`${v}-${p.length}`)),x&&i.flat().length<o.max&&oe(Dr,{noWrap:!0,style:{justifyContent:"flex-start"},children:oe(Ps,{propertyDisplayName:C,onClick:y=>{M(y);let v=[...p];v.push(void 0),d(v,m)},testId:"nonsliced-add"})})]})}function Dg(e){let{slice:o,property:t}=e,[r,a]=Vt(()=>e.defaultValue.map(u=>u??{})),{classes:n}=bs();function l(u){a(u),e.onChange&&e.onChange(u)}let f=o.min>0,i=Rn(o.elements),s=Pg(o.name);return oe(pe,{title:s,description:o.definition,withAsterisk:f,fhirPath:`${t.path}:${o.name}`,testId:e.testId,children:Br(bn,{className:i?n.indented:void 0,children:[r.map((u,c)=>Br(Dr,{noWrap:!0,children:[oe("div",{style:{flexGrow:1},children:oe(bn,{children:Rn(o.elements)?oe(Ar,{elementDefinitionType:o.type[0],name:o.name,defaultValue:u,onChange:d=>{let m=[...r];m[c]=d,l(m)},outcome:void 0,min:o.min,max:o.max,binding:void 0,path:o.path}):oe(Mr,{type:o.type[0].code,elements:o.elements,defaultValue:u,outcome:e.outcome,onChange:d=>{let m=[...r];m[c]=d,l(m)},testId:e.testId&&`${e.testId}-elements-${c}`})})}),r.length>o.min&&oe(Ts,{propertyDisplayName:s,testId:e.testId&&`${e.testId}-remove-${c}`,onClick:d=>{M(d);let m=[...r];m.splice(c,1),l(m)}})]},`${c}-${r.length}`)),r.length<o.max&&oe(Dr,{noWrap:!0,style:{justifyContent:"flex-start"},children:oe(Ps,{propertyDisplayName:s,onClick:u=>{M(u);let c=[...r,void 0];l(c)},testId:e.testId&&`${e.testId}-add`})})]})})}function Ps({propertyDisplayName:e,onClick:o,testId:t}){let r=e?`Add ${e}`:"Add";return e?oe(Cg,{title:r,size:"sm",color:"green.6",variant:"subtle","data-testid":t,leftIcon:oe(So,{size:"1.25rem"}),onClick:o,children:r}):oe(Cs,{title:r,color:"green.6","data-testid":t,onClick:o,children:oe(So,{size:"1.25rem"})})}function Ts({propertyDisplayName:e,onClick:o,testId:t}){return oe(Cs,{title:e?`Remove ${e}`:"Remove",color:"red.5","data-testid":t,onClick:o,children:oe(lo,{size:"1.25rem"})})}import{ActionIcon as Bg,Flex as Ag,Textarea as Mg}from"@mantine/core";import{useClipboard as Fg}from"@mantine/hooks";import{showNotification as wg}from"@mantine/notifications";import{useRef as Og,useState as Eg}from"react";import{jsx as Pn,jsxs as Lg}from"react/jsx-runtime";function ks(e){let[o,t]=Eg(!1),r=Fg(),a=Og(null),n={...e.styles};return o||(n.input||(n.input={}),n.input.WebkitTextSecurity="disc"),Lg(Ag,{gap:"xs",children:[Pn(Mg,{...e,styles:{...n,root:{...n.root??{},flexGrow:1}},ref:a,autosize:!0,minRows:1,onFocus:()=>t(!0),onBlur:()=>t(!1)}),Pn(Bg,{title:"Copy secret",onClick:()=>{r.copy(a.current?.value),wg({color:"green",message:"Copied"})},children:Pn(Pt,{})})]})}import{Button as As,Chip as Ds,Group as Fr,Modal as Ng,NativeSelect as Vg,Stack as Hg,Switch as qg,TextInput as Gg}from"@mantine/core";import{formatTiming as Ug}from"@medplum/core";import{useRef as Ms,useState as Tn}from"react";import{Fragment as ws,jsx as de,jsxs as Ht}from"react/jsx-runtime";var Qg=["sun","mon","tue","wed","thu","fri","sat"];function Fs(e){let[o,t]=Tn(e.defaultValue),[r,a]=Tn(!1),n=Ms();return n.current=o,Ht(ws,{children:[Ht(Fr,{spacing:"xs",grow:!0,noWrap:!0,children:[de("span",{children:Ug(n.current)||"No repeat"}),de(As,{onClick:()=>a(!0),children:"Edit"})]}),de(zg,{visible:r,defaultValue:n.current,onOk:l=>{e.onChange&&e.onChange(l),t(l),a(!1)},onCancel:()=>a(!1)})]})}var Bs={repeat:{period:1,periodUnit:"d"}};function zg(e){let[o,t]=Tn(e.defaultValue||Bs),r=Ms();r.current=o;function a(s){t({...r.current,event:[s]})}function n(s){t({...r.current,repeat:s})}function l(s){n({...r.current?.repeat,period:s})}function f(s){n({...r.current?.repeat,periodUnit:s})}function i(s){n({...r.current?.repeat,dayOfWeek:s})}return de(Ng,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:()=>e.onCancel(),children:Ht(Hg,{children:[de(pe,{title:"Starts on",htmlFor:"timing-dialog-start",children:de(Ve,{name:"timing-dialog-start",onChange:s=>a(s)})}),de(qg,{label:"Repeat",checked:!!o.repeat,onChange:s=>n(s.currentTarget.checked?Bs.repeat:void 0)}),o.repeat&&Ht(ws,{children:[de(pe,{title:"Repeat every",htmlFor:"timing-dialog-period",children:Ht(Fr,{spacing:"xs",grow:!0,noWrap:!0,children:[de(Gg,{type:"number",step:1,id:"timing-dialog-period",name:"timing-dialog-period",defaultValue:o.repeat.period||1,onChange:s=>l(parseInt(s.currentTarget.value,10)||1)}),de(Vg,{id:"timing-dialog-periodUnit",name:"timing-dialog-periodUnit",defaultValue:o.repeat.periodUnit,onChange:s=>f(s.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"}]})]})}),o.repeat.periodUnit==="wk"&&de(pe,{title:"Repeat on",children:de(Ds.Group,{multiple:!0,onChange:i,children:de(Fr,{position:"apart",mt:"md",spacing:"xs",children:Qg.map(s=>de(Ds,{value:s,size:"xs",radius:"xl",children:s.charAt(0).toUpperCase()},s))})})})]}),de(Fr,{position:"right",children:de(As,{onClick:()=>e.onOk(o),children:"OK"})})]})})}import{jsx as q,jsxs as eh}from"react/jsx-runtime";function io(e){let{property:o,name:t,defaultValue:r,onChange:a}=e,n=e.defaultPropertyType&&e.defaultPropertyType!=="undefined"?e.defaultPropertyType:o.type[0].code,l=o.type;if((o.isArray||o.max>1)&&!e.arrayElement){if(n===E.Attachment)return q(wf,{name:t,defaultValue:r,onChange:a});let f=l[0]?.code!==E.Extension;return q(Rs,{property:o,name:t,defaultValue:r,indent:f,onChange:a,outcome:e.outcome})}return l.length>1?q(Zg,{elementDefinitionTypes:l,...e}):q(Ar,{name:t,defaultValue:r,onChange:f=>{if(e.onChange){let i=e.name.replace("[x]",Os(l[0].code));e.onChange(f,i)}},outcome:e.outcome,elementDefinitionType:l[0],min:o.min,max:o.min,binding:o.binding,path:o.path})}function Zg(e){let o=e.elementDefinitionTypes,t;e.defaultPropertyType&&(t=o.find(n=>n.code===e.defaultPropertyType)),t||(t=o[0]);let[r,a]=Kg(t);return eh(Xg,{spacing:"xs",grow:!0,noWrap:!0,align:"flex-start",children:[q(Jg,{style:{width:"200px"},defaultValue:r.code,onChange:n=>{a(o.find(l=>l.code===n.currentTarget.value))},data:o.map(n=>({value:n.code,label:n.code}))}),q(Ar,{name:e.name,defaultValue:e.defaultValue,outcome:e.outcome,elementDefinitionType:r,onChange:n=>{e.onChange&&e.onChange(n,e.name.replace("[x]",Os(r.code)))},min:e.property.min,max:e.property.max,binding:e.property.binding,path:e.property.path})]})}function Ar(e){let{name:o,defaultValue:t,onChange:r,outcome:a,binding:n,path:l}=e,f=e.min!==void 0&&e.min>0,i=e.elementDefinitionType.code;if(!i)return q("div",{children:"Property type not specified "});let s={name:o,defaultValue:t,onChange:r,outcome:a,path:l};switch(i){case E.SystemString:case E.canonical:case E.string:case E.time:case E.uri:case E.url:return e.path==="Project.secret.value[x]"?q(ks,{id:o,name:o,"data-testid":o,defaultValue:t,required:f,onChange:u=>{e.onChange&&e.onChange(u.currentTarget.value)},error:Q(e.outcome,o)}):q(kn,{id:o,name:o,"data-testid":o,defaultValue:t,required:f,onChange:u=>{r&&r(u.currentTarget.value)},error:Q(a,o)});case E.date:return q(kn,{type:"date",id:o,name:o,"data-testid":o,defaultValue:t,required:f,onChange:u=>{r&&r(u.currentTarget.value)},error:Q(a,o)});case E.dateTime:case E.instant:return q(Ve,{name:o,defaultValue:t,onChange:r,outcome:a});case E.decimal:case E.integer:case E.positiveInt:case E.unsignedInt:return q(kn,{type:"number",step:i===E.decimal?"any":"1",id:o,name:o,"data-testid":o,defaultValue:t,required:f,onChange:u=>{r&&r(u.currentTarget.valueAsNumber)}});case E.code:return q(mr,{...s,binding:n?.valueSet});case E.boolean:return q(Wg,{id:o,name:o,"data-testid":o,defaultChecked:!!t,onChange:u=>{r&&r(u.currentTarget.checked)}});case E.base64Binary:case E.markdown:return q($g,{id:o,spellCheck:i!==E.base64Binary,name:o,"data-testid":o,defaultValue:t,required:f,onChange:u=>{r&&r(u.currentTarget.value)}});case E.Address:return q(tf,{...s});case E.Annotation:return q(rf,{...s});case E.Attachment:return q(xr,{...s});case E.CodeableConcept:return q(_o,{binding:n?.valueSet,...s});case E.Coding:return q(Rr,{binding:n?.valueSet,...s});case E.ContactDetail:return q(Yf,{...s});case E.ContactPoint:return q(Pr,{...s});case E.Extension:return q(as,{...s,propertyType:e.elementDefinitionType});case E.HumanName:return q(ns,{...s});case E.Identifier:return q(ss,{...s});case E.Money:return q(is,{...s});case E.Period:return q(cs,{...s});case E.Duration:case E.Quantity:return q(Ae,{...s});case E.Range:return q(Lt,{...s});case E.Ratio:return q(xs,{...s});case E.Reference:return q(Zo,{...s,targetTypes:jg(e.elementDefinitionType)});case E.Timing:return q(Fs,{...s});case E.Dosage:case E.UsageContext:default:return q(Ko,{typeName:i,defaultValue:t,onChange:r,outcome:a})}}var Yg=[`${_g}/fhir/StructureDefinition/`,"https://medplum.com/fhir/StructureDefinition/"];function jg(e){return e?.targetProfile?.map(o=>{let t=Yg.find(r=>o.startsWith(r));return t?o.slice(t.length):o})}import{jsx as wr}from"react/jsx-runtime";var Dn=new Set(["extension","modifierExtension"]),nh=new Set(["id",...Ir].filter(e=>!Dn.has(e)));function Mr(e){let{elements:o}=e,[t,r]=ah(e.defaultValue??{}),a=rh(()=>{let l=Object.create(null);for(let[f,i]of Object.entries(o))i.fixed&&(l[f]=i);return l},[o]);function n(l){for(let[f,i]of Object.entries(a))Ot(l,f,f,i,i.fixed.value);r(l),e.onChange&&e.onChange(l)}return wr(oh,{style:{flexGrow:1},"data-testid":e.testId,children:Object.entries(o).map(([l,f])=>{if(!f.type||f.max===0||l==="url"&&f.fixed||Dn.has(l)&&!th(f.slicing?.slices))return null;if(nh.has(l))return null;if(gr.includes(l)&&f.path.split(".").length===2||l.includes("."))return null;let[i,s]=Xf(t,l,f),u=f.min!==void 0&&f.min>0,c=wr(io,{property:f,name:l,defaultValue:i,defaultPropertyType:s,onChange:(d,m)=>{n(Ot({...t},l,m??l,f,d))},arrayElement:void 0,outcome:e.outcome},l);return e.type==="Extension"||Dn.has(l)?c:f.type.length===1&&f.type[0].code==="boolean"?wr(Cr,{title:Es(l),description:f.description,htmlFor:l,fhirPath:f.path,withAsterisk:u,children:c},l):wr(pe,{title:Es(l),description:f.description,withAsterisk:u,htmlFor:l,outcome:e.outcome,fhirPath:f.path,children:c},l)})})}import{jsx as Ns,jsxs as ih}from"react/jsx-runtime";function Ko(e){let{typeName:o}=e,[t,r]=sh(e.defaultValue??{}),a=fh(Ne),n=e.profileUrl??a.profileUrl,l=Ls(()=>lh(o,n),[o,n]),f=Ls(()=>Jf(l,n),[l,n]);if(!l)return ih("div",{children:[o,"\xA0not implemented"]});function i(s){r(s),e.onChange&&e.onChange(s)}return Ns(Ne.Provider,{value:f,children:Ns(Mr,{type:l.type,elements:l.elements,defaultValue:t,onChange:i,outcome:e.outcome})})}import{Button as Bn,createStyles as uh,Group as Hs}from"@mantine/core";import{useMemo as ch,useState as dh}from"react";function Vs(e){return e.toLocaleString("default",{month:"long"})+" "+e.getFullYear()}function Or(){let e=new Date;return e.setDate(1),e.setHours(0,0,0,0),e}import{jsx as xe,jsxs as qt}from"react/jsx-runtime";var mh=uh(e=>({table:{width:350,"& th":{fontWeight:"normal",fontSize:11,padding:8,textAlign:"center"},"& td":{padding:"2px 4px"},"& td button":{width:44,height:44,color:e.colors[e.primaryColor][5],fontSize:16,fontWeight:500,textAlign:"center",padding:0,backgroundColor:e.colors[e.primaryColor][0],border:0,borderRadius:"50%",cursor:"pointer"},"& td button:hover":{backgroundColor:e.colors[e.primaryColor][1]},"& td button:disabled":{backgroundColor:"transparent",cursor:"default",color:e.colors.gray[4],fontWeight:"normal"}}}));function qs(e){let{classes:o}=mh(),{onChangeMonth:t,onClick:r}=e,[a,n]=dh(Or);function l(i){n(s=>{let u=new Date(s.getTime());return u.setMonth(s.getMonth()+i),t(u),u})}let f=ch(()=>ph(a,e.slots),[a,e.slots]);return qt("div",{children:[qt(Hs,{position:"apart",spacing:"xs",grow:!0,noWrap:!0,children:[xe("p",{style:{flex:1},children:Vs(a)}),qt(Hs,{position:"right",spacing:"xs",children:[xe(Bn,{variant:"outline","aria-label":"Previous month",onClick:()=>l(-1),children:"<"}),xe(Bn,{variant:"outline","aria-label":"Next month",onClick:()=>l(1),children:">"})]})]}),qt("table",{className:o.table,children:[xe("thead",{children:qt("tr",{children:[xe("th",{children:"SUN"}),xe("th",{children:"MON"}),xe("th",{children:"TUE"}),xe("th",{children:"WED"}),xe("th",{children:"THU"}),xe("th",{children:"FRI"}),xe("th",{children:"SAT"})]})}),xe("tbody",{children:f.map((i,s)=>xe("tr",{children:i.map((u,c)=>xe("td",{children:u&&xe(Bn,{disabled:!u.available,onClick:()=>r(u.date),children:u.date.getDate()})},"day-"+c))},"week-"+s))})]})]})}function ph(e,o){let t=new Date(e.getFullYear(),e.getMonth()),r=[],a=[];for(let n=0;n<t.getDay();n++)a.push(void 0);for(;t.getMonth()===e.getMonth();)a.push({date:new Date(t.getTime()),available:xh(t,o)}),t.getDay()===6&&(r.push(a),a=[]),t.setDate(t.getDate()+1);if(t.getDay()!==0){for(let n=t.getDay();n<7;n++)a.push(void 0);r.push(a)}return r}function xh(e,o){for(let t of o){let r=new Date(t.start);if(r.getFullYear()===e.getFullYear()&&r.getMonth()===e.getMonth()&&r.getDate()===e.getDate())return!0}return!1}import{Container as Ih,createStyles as gh}from"@mantine/core";import{jsx as yh}from"react/jsx-runtime";var hh=gh(()=>({root:{"@media (max-width: 800px)":{paddingLeft:4,paddingRight:4}}}));function uo(e){let{children:o,...t}=e,{classes:r}=hh();return yh(Ih,{className:r.root,...t,children:o})}import{ActionIcon as Si,Center as Ay,createStyles as My,Group as Fy,Loader as wy,Menu as je,ScrollArea as Oy,TextInput as Ey}from"@mantine/core";import{showNotification as Ly,updateNotification as qr}from"@mantine/notifications";import{getReferenceString as Qt,normalizeErrorString as Ci}from"@medplum/core";import{useCallback as Gr,useEffect as Ny,useRef as bi,useState as Ri}from"react";import{createStyles as Oh,Group as Lr,List as zs,Stack as Ws,Text as Me,Title as Xs}from"@mantine/core";import{capitalize as Eh,formatCodeableConcept as Lh,formatDateTime as Mn,formatObservationValue as Nh,isReference as Vh}from"@medplum/core";import{useEffect as Hh,useState as qh}from"react";import{Blockquote as vh,createStyles as Sh,Stack as Ch}from"@mantine/core";import{jsx as Gs}from"react/jsx-runtime";var bh=Sh(e=>({noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));function An({value:e}){let{classes:o}=bh();return e?Gs(Ch,{justify:"flex-start",spacing:"xs",children:e.map(t=>t.text&&Gs(vh,{classNames:{cite:o.noteCite,body:o.noteBody,root:o.noteRoot},cite:t.authorReference?.display||t.authorString,icon:null,children:t.text},`note-${t.text}`))}):null}import{Group as Bh}from"@mantine/core";import{Text as Rh}from"@mantine/core";import{getDisplayString as Ph,isOk as Th,normalizeErrorString as kh}from"@medplum/core";import{useState as Dh}from"react";import{jsx as Us}from"react/jsx-runtime";function Ue(e){let{value:o,link:t,...r}=e,[a,n]=Dh(),l=X(o,n),f;if(a&&!Th(a))f=`[${kh(a)}]`;else if(l)f=Ph(l);else return null;return t?Us(le,{to:o,...r,children:f}):Us(Rh,{component:"span",...r,children:f})}import{jsx as Qs,jsxs as Ah}from"react/jsx-runtime";function co(e){return Ah(Bh,{spacing:"xs",children:[Qs(fe,{size:24,radius:12,value:e.value,link:e.link}),Qs(Ue,{value:e.value,link:e.link})]})}import{Badge as Mh}from"@mantine/core";import{jsx as wh}from"react/jsx-runtime";var Fh={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"};function Er(e){return wh(Mh,{color:Fh[e.status],children:e.status})}import{Fragment as Gt,jsx as k,jsxs as Ie}from"react/jsx-runtime";var Js=Oh(e=>({table:{border:`0.1px solid ${e.colors.gray[5]}`,borderCollapse:"collapse","& td, & th":{border:`0.1px solid ${e.colors.gray[5]}`,padding:4}},criticalRow:{background:e.colorScheme==="dark"?e.colors.red[7]:e.colors.red[1],border:`0.1px solid ${e.colors.red[5]}`,color:e.colors.red[5],fontWeight:500,"& td":{border:`0.1px solid ${e.colors.red[5]}`}},noteBody:{fontSize:e.fontSizes.sm},noteCite:{fontSize:e.fontSizes.xs,marginBlockStart:3},noteRoot:{padding:5}}));Fn.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function Fn(e){let o=S(),t=X(e.value),[r,a]=qh();if(Hh(()=>{t?.specimen&&Promise.allSettled(t.specimen.map(l=>o.readReference(l))).then(l=>l.filter(f=>f.status==="fulfilled").map(f=>f.value)).then(a).catch(console.error)},[o,t]),!t)return null;let n=r?.flatMap(l=>l.note||[])||[];if(t.presentedForm&&t.presentedForm.length>0){let l=t.presentedForm[0];l.contentType?.startsWith("text/plain")&&l.data&&n.push({text:window.atob(l.data)})}return Ie(Ws,{children:[k(Xs,{children:"Diagnostic Report"}),k(Gh,{value:t}),r&&!e.hideSpecimenInfo&&Uh(r),t.result&&k(Qh,{hideObservationNotes:e.hideObservationNotes,value:t.result}),n.length>0&&k(An,{value:n})]})}function Gh({value:e}){return Ie(Lr,{mt:"md",spacing:30,children:[e.subject&&Ie("div",{children:[k(Me,{size:"xs",transform:"uppercase",color:"dimmed",children:"Subject"}),k(Me,{children:k(co,{value:e.subject,link:!0})})]}),e.resultsInterpreter?.map(o=>Ie("div",{children:[k(Me,{size:"xs",transform:"uppercase",color:"dimmed",children:"Interpreter"}),k(Me,{children:k(co,{value:o,link:!0})})]},o.reference)),e.performer?.map(o=>Ie("div",{children:[k(Me,{size:"xs",transform:"uppercase",color:"dimmed",children:"Performer"}),k(Me,{children:k(co,{value:o,link:!0})})]},o.reference)),e.issued&&Ie("div",{children:[k(Me,{size:"xs",transform:"uppercase",color:"dimmed",children:"Issued"}),k(Me,{children:Mn(e.issued)})]}),e.status&&Ie("div",{children:[k(Me,{size:"xs",transform:"uppercase",color:"dimmed",children:"Status"}),k(Me,{children:Eh(e.status)})]})]})}function Uh(e){return Ie(Ws,{spacing:"xs",children:[k(Xs,{order:2,size:"h6",children:"Specimens"}),k(zs,{type:"ordered",children:e?.map(o=>k(zs.Item,{ml:"sm",children:Ie(Lr,{spacing:20,children:[Ie(Lr,{spacing:5,children:[k(Me,{fw:500,children:"Collected:"})," ",Mn(o.collection?.collectedDateTime)]}),Ie(Lr,{spacing:5,children:[k(Me,{fw:500,children:"Received:"})," ",Mn(o.receivedTime)]})]})},`specimen-${o.id}`))})]})}function Qh(e){let{classes:o}=Js();return Ie("table",{className:o.table,children:[k("thead",{children:Ie("tr",{children:[k("th",{children:"Test"}),k("th",{children:"Value"}),k("th",{children:"Reference Range"}),k("th",{children:"Interpretation"}),k("th",{children:"Category"}),k("th",{children:"Performer"}),k("th",{children:"Status"})]})}),k("tbody",{children:k($s,{value:e.value,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes})})]})}function $s(e){return k(Gt,{children:e.value?.map(o=>k(zh,{value:o,ancestorIds:e.ancestorIds,hideObservationNotes:e.hideObservationNotes},`obs-${Vh(o)?o.reference:o.id}`))})}function zh(e){let{classes:o,cx:t}=Js(),r=X(e.value);if(!r||e.ancestorIds?.includes(r.id))return null;let a=!e.hideObservationNotes&&r.note,n=Jh(r);return Ie(Gt,{children:[Ie("tr",{className:t({[o.criticalRow]:n}),children:[k("td",{rowSpan:a?2:1,children:k(le,{to:r,children:k(ye,{value:r.code})})}),k("td",{children:k(Wh,{value:r})}),k("td",{children:k(Xh,{value:r.referenceRange})}),k("td",{children:r.interpretation&&r.interpretation.length>0&&k(ye,{value:r.interpretation[0]})}),k("td",{children:r.category&&r.category.length>0&&k(Gt,{children:r.category.map(l=>k("div",{children:k(ye,{value:l})},`category-${Lh(l)}`))})}),k("td",{children:r.performer?.map(l=>k(To,{value:l},l.reference))}),k("td",{children:r.status&&k(Er,{status:r.status})})]}),r.hasMember&&k($s,{value:r.hasMember,ancestorIds:e.ancestorIds?[...e.ancestorIds,r.id]:[r.id],hideObservationNotes:e.hideObservationNotes}),a&&k("tr",{children:k("td",{colSpan:6,children:k(An,{value:r.note})})})]})}function Wh(e){let o=e.value;return k(Gt,{children:Nh(o)})}function Xh(e){let o=e.value&&e.value.length>0&&e.value[0];return o?o.text?k(Gt,{children:o.text}):k(yr,{value:o}):null}function Jh(e){let o=e.interpretation?.[0]?.coding?.[0]?.code;return o==="AA"||o==="LL"||o==="HH"||o==="A"}import{createStyles as $h,Paper as _h,useComponentDefaultProps as Kh}from"@mantine/core";import{jsx as jh}from"react/jsx-runtime";var Zh=$h((e,{width:o,fill:t})=>({paper:{maxWidth:o,margin:`${e.spacing.xl} auto`,padding:t?0:e.spacing.md,"@media (max-width: 800px)":{padding:t?0:8},"& img":{width:"100%",maxWidth:"100%"},"& video":{width:"100%",maxWidth:"100%"}}})),Yh={shadow:"xs",radius:"md",withBorder:!0};function Yo(e){let{className:o,children:t,width:r,fill:a,unstyled:n,...l}=Kh("Panel",Yh,e),{classes:f,cx:i}=Zh({width:r,fill:a},{name:"Panel",unstyled:n});return jh(_h,{className:i(f.paper,o),...l,children:t})}import{createStyles as xy}from"@mantine/core";import{capitalize as Iy,evalFhirPathTyped as ui,getSearchParameterDetails as gy,toTypedValue as ci}from"@medplum/core";var mi=gd(ii(),1);import{useEffect as hy,useState as yy}from"react";import{jsx as Ye,jsxs as Hr}from"react/jsx-runtime";var vy=xy(e=>({root:{borderCollapse:"collapse",width:"100%","& tr":{borderTop:`0.1px solid ${e.colors.gray[3]}`},"& th, & td":{padding:`${e.spacing.sm} ${e.spacing.sm}`,verticalAlign:"top"}},removed:{color:e.colors.red[7],fontFamily:"monospace",textDecoration:"line-through",whiteSpace:"pre-wrap"},added:{color:e.colors.green[7],fontFamily:"monospace",whiteSpace:"pre-wrap"}}));function pi(e){let{classes:o}=vy(),t=S(),[r,a]=yy(!1);if(hy(()=>{t.requestSchema(e.original.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.original.resourceType]),!r)return null;let n=(0,mi.createPatch)(e.original,e.revised),l=[ci(e.original)],f=[ci(e.revised)];return Hr("table",{className:o.root,children:[Ye("thead",{children:Hr("tr",{children:[Ye("th",{}),Ye("th",{children:"Before"}),Ye("th",{children:"After"})]})}),Ye("tbody",{children:n.map(i=>{if(i.path.startsWith("/meta"))return null;let s=i.path,u=Sy(s),d=gy(e.original.resourceType,{resourceType:"SearchParameter",base:[e.original.resourceType],code:e.original.resourceType+"."+u,expression:e.original.resourceType+"."+u})?.elementDefinitions?.[0],m=!!d?.isArray,p=i.op==="add"?void 0:ui(u,l)?.[0],x=i.op==="remove"?void 0:ui(u,f)?.[0];return Hr("tr",{children:[Hr("td",{children:[Iy(i.op)," ",u]}),Ye("td",{className:o.removed,children:p&&Ye(ce,{property:d,propertyType:p.type,value:di(p.value,m),ignoreMissingValues:!0})}),Ye("td",{className:o.added,children:x&&Ye(ce,{property:d,propertyType:x.type,value:di(x.value,m),ignoreMissingValues:!0})})]},`op-${i.op}-${i.path}`)})})]})}function Sy(e){let o=e.split("/").filter(Boolean),t="";for(let r=0;r<o.length;r++){let a=o[r];a==="-"?t+=".last()":/^\d+$/.test(a)?t+=`[${a}]`:(r>0&&(t+="."),t+=a)}return t}function di(e,o){return Array.isArray(e)&&!o?e[0]:!Array.isArray(e)&&o?[e]:e}import{useEffect as Cy,useState as by}from"react";import{jsx as Ry}from"react/jsx-runtime";function zn(e){let o=S(),t=X(e.value),[r,a]=by(!1);return Cy(()=>{t&&o.requestSchema(t.resourceType).then(()=>a(!0)).catch(console.log)},[o,t]),!r||!t?null:Ry(wt,{value:{type:t.resourceType,value:e.forceUseInput?e.value:t},ignoreMissingValues:e.ignoreMissingValues})}import{ActionIcon as Py,Group as Ty,Menu as xi,Text as Wn}from"@mantine/core";import{formatDateTime as ky,getReferenceString as Dy}from"@medplum/core";import{Fragment as By,jsx as Fe,jsxs as jo}from"react/jsx-runtime";function Ii(e){return Fe(uo,{children:e.children})}function mo(e){let{resource:o,profile:t,padding:r,popupMenuItems:a,...n}=e,l=t??o.meta?.author,f=e.dateTime??o.meta?.lastUpdated;return jo(Yo,{"data-testid":"timeline-item",fill:!0,...n,children:[jo(Ty,{position:"apart",spacing:8,mx:"xs",my:"sm",children:[Fe(fe,{value:l,link:!0,size:"md"}),jo("div",{style:{flex:1},children:[Fe(Wn,{size:"sm",children:Fe(Ue,{color:"dark",weight:500,value:l,link:!0})}),jo(Wn,{size:"xs",children:[Fe(le,{color:"dimmed",to:e.resource,children:ky(f)}),Fe(Wn,{component:"span",color:"dimmed",mx:8,children:"\xB7"}),Fe(le,{color:"dimmed",to:e.resource,children:e.resource.resourceType})]})]}),a&&jo(xi,{position:"bottom-end",shadow:"md",width:200,children:[Fe(xi.Target,{children:Fe(Py,{radius:"xl","aria-label":`Actions for ${Dy(e.resource)}`,children:Fe(Ua,{})})}),a]})]}),jo(Go,{children:[r&&Fe("div",{style:{padding:"0 16px 16px 16px"},children:e.children}),!r&&Fe(By,{children:e.children})]})]})}function yi(e,o){e.sort((t,r)=>{let a=gi(t,o),n=gi(r,o);return a>n?1:a<n?-1:hi(t,o)-hi(r,o)})}function gi(e,o){if(!vi(e,o)){let t=e.priority;if(typeof t=="string")return{stat:4,asap:3,urgent:2}[t]??0}return 0}function hi(e,o){if(!vi(e,o)){if(e.resourceType==="Communication"&&e.sent)return new Date(e.sent).getTime();if((e.resourceType==="DiagnosticReport"||e.resourceType==="Media"||e.resourceType==="Observation")&&e.issued)return new Date(e.issued).getTime();if(e.resourceType==="DocumentReference"&&e.date)return new Date(e.date).getTime()}let t=e.meta?.lastUpdated;return t?new Date(t).getTime():0}function vi(e,o){return!!o&&e.resourceType===o.resourceType&&e.id===o.id}import{Fragment as Xy,jsx as D,jsxs as zt}from"react/jsx-runtime";var Vy=My(e=>({pinnedComment:{backgroundColor:e.colors.blue[0]}}));function po(e){let o=S(),t=no(),r=o.getProfile(),a=bi(null),n=X(e.value),[l,f]=Ri(),[i,s]=Ri([]),u=e.loadTimelineResources,c=bi(i);c.current=i;let d=Gr(R=>{yi(R,n),R.reverse(),s(R)},[n]),m=Gr(R=>{let N=[];for(let ao of R){if(ao.status!=="fulfilled")continue;let T=ao.value;if(T.type==="history"&&f(T),T.entry)for(let G of T.entry)N.push(G.resource)}d(N)},[d]),p=Gr(R=>d([...c.current,R]),[d]),x=Gr(()=>{let R,N;"resourceType"in e.value?(R=e.value.resourceType,N=e.value.id):[R,N]=e.value.reference?.split("/"),u(o,R,N).then(m).catch(console.log)},[o,e.value,u,m]);Ny(()=>x(),[x]);function C(R){!n||!e.createCommunication||o.createResource(e.createCommunication(n,r,R)).then(N=>p(N)).catch(console.log)}function y(R){!n||!e.createMedia||o.createResource(e.createMedia(n,r,R)).then(N=>p(N)).then(()=>qr({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:D(bt,{size:16}),autoClose:2e3})).catch(N=>qr({id:"upload-notification",color:"red",title:"Upload error",message:Ci(N),icon:D(fr,{size:16}),autoClose:2e3}))}function v(R,N){return o.updateResource({...R,priority:N})}function b(R){v(R,"stat").then(x).catch(console.log)}function P(R){v(R,"routine").then(x).catch(console.log)}function h(R){t(`/${R.resourceType}/${R.id}`)}function A(R){t(`/${R.resourceType}/${R.id}/edit`)}function W(R){t(`/${R.resourceType}/${R.id}/delete`)}function Y(R){t(`/${R.resourceType}/${R.id}/_history/${R.meta?.versionId}`)}function gt(){Ly({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function ke(R){qr({id:"upload-notification",loading:!0,title:"Uploading...",message:Wy(R),autoClose:!1,withCloseButton:!1})}function De(R){qr({id:"upload-notification",color:"red",title:"Upload error",message:Ci(R),icon:D(fr,{size:16}),autoClose:2e3})}return n?zt(Ii,{children:[e.createCommunication&&D(Yo,{children:D(H,{testid:"timeline-form",onSubmit:R=>{C(R.text);let N=a.current;N&&(N.value="",N.focus())},children:zt(Fy,{spacing:"xs",noWrap:!0,style:{width:"100%"},children:[D(fe,{value:r}),D(Ey,{name:"text",ref:a,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),D(Si,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:D(_a,{size:16})}),D(Jo,{onUpload:y,onUploadStart:gt,onUploadProgress:ke,onUploadError:De,children:R=>D(Si,{...R,radius:"xl",color:"blue",variant:"filled",children:D(Rt,{size:16})})})]})})}),i.map(R=>{if(!R)return null;let N=`${R.resourceType}/${R.id}/${R.meta?.versionId}`;if(R.resourceType===n.resourceType&&R.id===n.id)return D(Hy,{history:l,resource:R,onDetails:Y},N);switch(R.resourceType){case"AuditEvent":return D(Qy,{resource:R,onDetails:h},N);case"Communication":return D(Gy,{resource:R,onPin:R.priority!=="stat"?b:void 0,onUnpin:R.priority==="stat"?P:void 0,onDetails:h,onEdit:A,onDelete:W},N);case"DiagnosticReport":return D(zy,{resource:R,onDetails:h,onEdit:A,onDelete:W},N);case"Media":return D(Uy,{resource:R,onDetails:h,onEdit:A,onDelete:W},N);default:return D(mo,{resource:R,padding:!0,children:D(zn,{value:R,ignoreMissingValues:!0})},N)}})]}):D(Ay,{style:{width:"100%",height:"100%"},children:D(wy,{})})}function et(e){return zt(je.Dropdown,{children:[D(je.Label,{children:"Resource"}),e.onPin&&D(je.Item,{icon:D(Ka,{size:14}),onClick:()=>e.onPin(e.resource),"aria-label":`Pin ${Qt(e.resource)}`,children:"Pin"}),e.onUnpin&&D(je.Item,{icon:D(Za,{size:14}),onClick:()=>e.onUnpin(e.resource),"aria-label":`Unpin ${Qt(e.resource)}`,children:"Unpin"}),e.onDetails&&D(je.Item,{icon:D(Ja,{size:14}),onClick:()=>e.onDetails(e.resource),"aria-label":`Details ${Qt(e.resource)}`,children:"Details"}),e.onEdit&&D(je.Item,{icon:D(Qa,{size:14}),onClick:()=>e.onEdit(e.resource),"aria-label":`Edit ${Qt(e.resource)}`,children:"Edit"}),e.onDelete&&zt(Xy,{children:[D(je.Divider,{}),D(je.Label,{children:"Danger zone"}),D(je.Item,{color:"red",icon:D(Dt,{size:14}),onClick:()=>e.onDelete(e.resource),"aria-label":`Delete ${Qt(e.resource)}`,children:"Delete"})]})]})}function Hy(e){let o=qy(e.history,e.resource);return o?D(mo,{resource:e.resource,padding:!0,popupMenuItems:D(et,{...e}),children:D(pi,{original:o,revised:e.resource})}):zt(mo,{resource:e.resource,padding:!0,popupMenuItems:D(et,{...e}),children:[D("h3",{children:"Created"}),D(zn,{value:e.resource,ignoreMissingValues:!0,forceUseInput:!0})]})}function qy(e,o){let t=e.entry,r=t.findIndex(a=>a.resource?.meta?.versionId===o.meta?.versionId);if(!(r>=t.length-1))return t[r+1].resource}function Gy(e){let{classes:o}=Vy(),r=!e.resource.priority||e.resource.priority==="routine"?void 0:o.pinnedComment;return D(mo,{resource:e.resource,profile:e.resource.sender,dateTime:e.resource.sent,padding:!0,className:r,popupMenuItems:D(et,{...e}),children:D("p",{children:e.resource.payload?.[0]?.contentString})})}function Uy(e){let o=e.resource.content?.contentType,t=o&&!o.startsWith("image/")&&!o.startsWith("video/")&&o!=="application/pdf";return D(mo,{resource:e.resource,padding:!!t,popupMenuItems:D(et,{...e}),children:D(Ge,{value:e.resource.content})})}function Qy(e){return D(mo,{resource:e.resource,padding:!0,popupMenuItems:D(et,{...e}),children:D(Oy,{children:D("pre",{children:e.resource.outcomeDesc})})})}function zy(e){return D(mo,{resource:e.resource,padding:!0,popupMenuItems:D(et,{...e}),children:D(Fn,{value:e.resource})})}function Wy(e){if(e.lengthComputable){let o=100*e.loaded/e.total;return`Uploaded: ${Xn(e.loaded)} / ${Xn(e.total)} ${o.toFixed(2)}%`}return`Uploaded: ${Xn(e.loaded)}`}function Xn(e){if(e===0)return"0.00 B";let o=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,o)).toFixed(2)+" "+" KMGTP".charAt(o)+"B"}import{jsx as Jy}from"react/jsx-runtime";function t2(e){return Jy(po,{value:e.resource,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`;return Promise.allSettled([o.readHistory(t,r),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:100})])}})}import{jsx as Pi}from"react/jsx-runtime";function Ur(e){let{children:o,...t}=e;return Pi(uo,{children:Pi(Yo,{...t,children:o})})}import{createReference as Qr}from"@medplum/core";import{jsx as $y}from"react/jsx-runtime";function p2(e){return $y(po,{value:e.encounter,loadTimelineResources:async(o,t,r)=>Promise.allSettled([o.readHistory("Encounter",r),o.search("Communication","encounter=Encounter/"+r),o.search("Media","encounter=Encounter/"+r)]),createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",encounter:Qr(o),subject:o.subject,sender:Qr(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",encounter:Qr(o),subject:o.subject,operator:Qr(t),issued:new Date().toISOString(),content:r})})}import{Button as mS,Loader as pS,Table as xS}from"@mantine/core";import{normalizeOperationOutcome as IS}from"@medplum/core";import{memo as gS,useEffect as lu,useRef as fu,useState as Zr}from"react";import{evalFhirPath as _y}from"@medplum/core";import{jsx as Ky}from"react/jsx-runtime";function Ti(e){let o;try{o=_y(e.path,e.resource)}catch(t){return console.warn("FhirPathDisplay:",t),null}if(o.length>1)throw new Error(`Component "path" for "FhirPathDisplay" must resolve to a single element. Received ${o.length} elements [${JSON.stringify(o,null,2)}]`);return Ky(ce,{value:o[0]||"",propertyType:e.propertyType})}import{ActionIcon as Kv,Button as nt,Center as _r,createStyles as Zv,Group as Kr,Loader as Yv,Menu as ru,Pagination as jv,Table as eS,Text as rl,UnstyledButton as oS}from"@mantine/core";import{DEFAULT_SEARCH_COUNT as fl,formatSearchQuery as tS}from"@medplum/core";import{memo as rS,useCallback as au,useEffect as nu,useRef as aS,useState as al}from"react";import{Box as Zy,Button as Yy,Modal as jy,Text as ev}from"@mantine/core";import{jsx as zr,jsxs as Di}from"react/jsx-runtime";function Bi(e){return Di(jy,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:e.onCancel,children:[Di(Zy,{display:"flex",sx:{justifyContent:"space-between"},children:[e.exportCsv&&zr(ki,{text:"CSV",exportLogic:e.exportCsv,onCancel:e.onCancel}),e.exportTransactionBundle&&zr(ki,{text:"Transaction Bundle",exportLogic:e.exportTransactionBundle,onCancel:e.onCancel})]}),zr(ev,{sx:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ki(e){return zr(Yy,{onClick:()=>{e.exportLogic(),e.onCancel()},children:`Export as ${e.text}`})}import{Button as cv,Group as dv,Modal as mv,MultiSelect as pv,Stack as xv}from"@mantine/core";import{getDataType as Iv,getSearchParameters as gv,stringify as hv}from"@medplum/core";import{useEffect as yv,useMemo as vv,useRef as Sv,useState as zi}from"react";import{capitalize as ov,DEFAULT_SEARCH_COUNT as tv,evalFhirPathTyped as rv,formatDateTime as av,Operator as O}from"@medplum/core";import{Fragment as uv,jsx as Jn}from"react/jsx-runtime";var nv={string:[O.EQUALS,O.NOT,O.CONTAINS,O.EXACT],fulltext:[O.EQUALS,O.NOT,O.CONTAINS,O.EXACT],token:[O.EQUALS,O.NOT],reference:[O.EQUALS,O.NOT],numeric:[O.EQUALS,O.NOT_EQUALS,O.GREATER_THAN,O.LESS_THAN,O.GREATER_THAN_OR_EQUALS,O.LESS_THAN_OR_EQUALS],quantity:[O.EQUALS,O.NOT_EQUALS,O.GREATER_THAN,O.LESS_THAN,O.GREATER_THAN_OR_EQUALS,O.LESS_THAN_OR_EQUALS],date:[O.EQUALS,O.NOT_EQUALS,O.GREATER_THAN,O.LESS_THAN,O.GREATER_THAN_OR_EQUALS,O.LESS_THAN_OR_EQUALS,O.STARTS_AFTER,O.ENDS_BEFORE,O.APPROXIMATELY],datetime:[O.EQUALS,O.NOT_EQUALS,O.GREATER_THAN,O.LESS_THAN,O.GREATER_THAN_OR_EQUALS,O.LESS_THAN_OR_EQUALS,O.STARTS_AFTER,O.ENDS_BEFORE,O.APPROXIMATELY]},lv={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 Wt(e,o){return{...e,filters:o,offset:0,name:void 0}}function A2(e){return Wt(e,[])}function Wr(e,o){return Wt(e,(e.filters??[]).filter(t=>t.code!==o))}function ot(e,o,t,r,a){a&&(e=Wr(e,o));let n=[];return e.filters&&n.push(...e.filters),n.push({code:o,operator:t,value:r??""}),Wt(e,n)}function M2(e,o){if(e.fields?.includes(o))return e;let t=[];return e.fields&&t.push(...e.fields),t.push(o),{...e,fields:t,name:void 0}}function Mi(e,o){if(!e.filters)return e;let t=[...e.filters];return t.splice(o,1),{...e,filters:t,name:void 0}}function Fi(e,o){return $n(e,o,-1)}function wi(e,o){return $n(e,o,0)}function Oi(e,o){return $n(e,o,1)}function $n(e,o,t){let r=new Date;r.setDate(r.getDate()+t),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setDate(a.getDate()+1),a.setTime(a.getTime()-1),Kn(e,o,r,a)}function Ei(e,o){return _n(e,o,-1)}function Li(e,o){return _n(e,o,0)}function Ni(e,o){return _n(e,o,1)}function _n(e,o,t){let r=new Date;r.setMonth(r.getMonth()+t),r.setDate(1),r.setHours(0,0,0,0);let a=new Date(r.getTime());return a.setMonth(a.getMonth()+1),a.setDate(1),a.setHours(0,0,0,0),a.setTime(a.getTime()-1),Kn(e,o,r,a)}function Vi(e,o){let t=new Date;return t.setMonth(0),t.setDate(1),t.setHours(0,0,0,0),Kn(e,o,t,new Date)}function Kn(e,o,t,r){return e=Wr(e,o),e=Ai(e,o,O.GREATER_THAN_OR_EQUALS,t),e=Ai(e,o,O.LESS_THAN_OR_EQUALS,r),e}function Ai(e,o,t,r){return ot(e,o,t,r.toISOString())}function Zn(e,o,t=!0){return ot(e,o,O.MISSING,t.toString())}function fv(e,o){return e.offset===o?e:{...e,offset:o,name:void 0}}function Hi(e,o){let t=e.count??tv,r=(o-1)*t;return fv(e,r)}function Yn(e,o,t){return o===qi(e)&&t!==void 0&&t===Gi(e)?e:{...e,sortRules:[{code:o,descending:!!t}],name:void 0}}function F2(e,o){let t=!1;return qi(e)===o&&(t=!Gi(e)),Yn(e,o,t)}function qi(e){let o=e.sortRules;if(!o||o.length===0)return;let t=o[0].code;return t.startsWith("-")?t.substr(1):t}function Gi(e){let o=e.sortRules;return!o||o.length===0?!1:!!o[0].descending}function Ui(e){return nv[e.type]}function Xt(e){return lv[e]??""}function we(e){let o=e;return o.includes(".")&&(o=o.split(".").pop()),o==="versionId"?"Version ID":(o=o.replace("[x]",""),o=o.replace(/([A-Z])/g," $1"),o=o.replace(/[-_]/g," "),o=o.replace(/\s+/g," "),o=o.trim(),o.toLowerCase()==="id"?"ID":o.split(/\s/).map(ov).join(" "))}function Qi(e,o){let t=o.name;return t==="id"?e.id:t==="meta.versionId"?e.meta?.versionId:t==="_lastUpdated"?av(e.meta?.lastUpdated):o.elementDefinition&&`${e.resourceType}.${o.name}`===o.elementDefinition.path?sv(e,o.elementDefinition):o.searchParams&&o.searchParams.length===1&&o.name===o.searchParams[0].code?iv(e,o.searchParams[0]):null}function sv(e,o){let t=o.path?.split(".")?.pop()?.replaceAll("[x]","")??"",[r,a]=so({type:e.resourceType,value:e},t);return r?Jn(ce,{property:o,propertyType:a,value:r,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function iv(e,o){let t=rv(o.expression,[{type:e.resourceType,value:e}]);return!t||t.length===0?null:Jn(uv,{children:t.map((r,a)=>Jn(ce,{propertyType:r.type,value:r.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${a}-${t.length}`))})}import{jsx as Jt,jsxs as bv}from"react/jsx-runtime";function Wi(e){let o=Sv(!1),[t,r]=zi({search:JSON.parse(hv(e.search))}),[a,n]=zi(!1);yv(()=>{r({search:e.search})},[e.search]);let l=vv(()=>{if(!e.visible)return[];let i=e.search.resourceType,s=Iv(i),u=gv(i);return Cv(s,u).sort((c,d)=>c.localeCompare(d)).map(c=>({value:c,label:we(c)}))},[e.visible,e.search.resourceType]);if(!e.visible)return null;function f(i){r({search:{...t.search,fields:i}})}return Jt(mv,{title:"Fields",closeButtonProps:{"aria-label":"Close"},opened:e.visible,onClose:()=>{e.onCancel()},size:"auto",withOverlay:!0,closeOnClickOutside:!1,overlayProps:{onMouseDownCapture:()=>{o.current=a},onClick:()=>{o.current||e.onCancel(),o.current=!1},children:Jt("div",{"data-testid":"overlay-child"})},children:bv(xv,{children:[Jt(pv,{withinPortal:!0,style:{width:550},placeholder:"Select fields to display",data:l,value:t.search.fields??[],onChange:f,onDropdownOpen:()=>n(!0),onDropdownClose:()=>n(!1),maxDropdownHeight:"250px",dropdownPosition:"bottom",clearButtonProps:{"aria-label":"Clear selection"},clearable:!0,searchable:!0}),Jt(dv,{position:"right",children:Jt(cv,{onClick:()=>e.onOk(t.search),children:"OK"})})]})})}function Cv(e,o){let t=[],r=new Set,a=new Set;for(let n of Object.keys(e.elements))t.push(n),r.add(n.toLowerCase()),a.add(we(n));if(o)for(let n of Object.keys(o)){let l=we(n);!r.has(n)&&!a.has(l)&&(t.push(n),r.add(n),a.add(l))}return t}import{Button as $t,Group as Mv,Modal as Fv,NativeSelect as $i}from"@mantine/core";import{getSearchParameters as wv,stringify as _i}from"@medplum/core";import{useEffect as Ov,useRef as Zi,useState as ol}from"react";import{formatDateTime as Rv,getSearchParameterDetails as Pv,globalSchema as Tv,Operator as Xi,SearchParameterType as kv}from"@medplum/core";import{Fragment as Ji,jsx as jn}from"react/jsx-runtime";function Xr(e){let{resourceType:o,filter:t}=e,r=Tv.types[o].searchParams?.[t.code];if(r){if(r.type==="reference"&&(t.operator===Xi.EQUALS||t.operator===Xi.NOT_EQUALS))return jn(Ue,{value:{reference:t.value}});let a=Pv(o,r);if(t.code==="_lastUpdated"||a.type===kv.DATETIME)return jn(Ji,{children:Rv(t.value)})}return jn(Ji,{children:t.value})}import{Checkbox as Dv,TextInput as el}from"@mantine/core";import{getSearchParameterDetails as Bv,SearchParameterType as tt}from"@medplum/core";import{jsx as ko}from"react/jsx-runtime";function Jr(e){let o=Bv(e.resourceType,e.searchParam),t="filter-value";switch(o.type){case tt.REFERENCE:return ko(Zo,{name:t,defaultValue:e.defaultValue?{reference:e.defaultValue}:void 0,targetTypes:e.searchParam.target,autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(r.reference):e.onChange("")}});case tt.BOOLEAN:return ko(Dv,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultChecked:e.defaultValue==="true",autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.checked.toString())});case tt.DATE:return ko(el,{type:"date",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case tt.DATETIME:return ko(Ve,{name:t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:e.onChange});case tt.NUMBER:return ko(el,{type:"number",name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value)});case tt.QUANTITY:return ko(Ae,{name:t,defaultValue:Av(e.defaultValue),autoFocus:e.autoFocus,onChange:r=>{r?e.onChange(`${r.value}`):e.onChange("")}});default:return ko(el,{name:t,"data-autofocus":e.autoFocus,"data-testid":t,defaultValue:e.defaultValue,autoFocus:e.autoFocus,onChange:r=>e.onChange(r.currentTarget.value),placeholder:"Search value"})}}function Av(e){if(e){let[o,t,r]=e.split("|");if(o)return{value:parseFloat(o),system:t,unit:r}}}import{jsx as z,jsxs as eo}from"react/jsx-runtime";function Yi(e){let[o,t]=ol(JSON.parse(_i(e.search))),[r,a]=ol(-1),n=Zi(o);n.current=o,Ov(()=>{t(JSON.parse(_i(e.search)))},[e.search]);function l(u){t(ot(n.current,u.code,u.operator,u.value))}if(!e.visible)return null;let f=e.search.resourceType,i=wv(f)??{},s=o.filters||[];return eo(Fv,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:e.visible,onClose:e.onCancel,children:[z("div",{children:eo("table",{children:[eo("colgroup",{children:[z("col",{style:{width:200}}),z("col",{style:{width:200}}),z("col",{style:{width:380}}),z("col",{style:{width:120}})]}),z("thead",{children:eo("tr",{children:[z("th",{children:"Field"}),z("th",{children:"Operation"}),z("th",{children:"Value"}),z("th",{children:"Actions"})]})}),eo("tbody",{children:[s.map((u,c)=>c===r?z(Ki,{resourceType:f,searchParams:i,defaultValue:u,okText:"Save",onOk:d=>{let m=[...s];m[c]=d,t(Wt(n.current,m)),a(-1)},onCancel:()=>a(-1)},`filter-${u.code}-${u.operator}-${u.value}-input`):z(Ev,{resourceType:f,searchParams:i,filter:u,onEdit:()=>a(c),onDelete:()=>t(Mi(n.current,c))},`filter-${u.code}-${u.operator}-${u.value}-display`)),z(Ki,{resourceType:f,searchParams:i,okText:"Add",onOk:l})]})]})}),z(Mv,{position:"right",mt:"xl",children:z($t,{onClick:()=>e.onOk(n.current),children:"OK"})})]})}function Ev(e){let{filter:o}=e;return eo("tr",{children:[z("td",{children:we(o.code)}),z("td",{children:Xt(o.operator)}),z("td",{children:z(Xr,{resourceType:e.resourceType,filter:o})}),eo("td",{children:[z($t,{compact:!0,variant:"outline",onClick:e.onEdit,children:"Edit"}),z($t,{compact:!0,variant:"outline",onClick:e.onDelete,children:"Delete"})]})]})}function Ki(e){let[o,t]=ol(e.defaultValue??{}),r=Zi(o);r.current=o;function a(s){t({...r.current,code:s})}function n(s){t({...r.current,operator:s})}function l(s){t({...r.current,value:s})}let f=e.searchParams[o.code],i=f&&Ui(f);return eo("tr",{children:[z("td",{children:z($i,{"data-testid":"filter-field",defaultValue:r.current.code,onChange:s=>a(s.currentTarget.value),data:["",...Object.keys(e.searchParams).map(s=>({value:s,label:we(s)}))]})}),z("td",{children:i&&z($i,{"data-testid":"filter-operation",defaultValue:o.operator,onChange:s=>n(s.currentTarget.value),data:["",...i.map(s=>({value:s,label:Xt(s)}))]})}),z("td",{children:f&&o.operator&&z(Jr,{resourceType:e.resourceType,searchParam:f,defaultValue:o.value,onChange:l})}),eo("td",{children:[o.code&&o.operator&&z($t,{compact:!0,variant:"outline",onClick:()=>{e.onOk(r.current),t({})},children:e.okText}),e.onCancel&&z($t,{compact:!0,variant:"outline",onClick:e.onCancel,children:"Cancel"})]})]})}import{Button as Lv,Grid as tl,Modal as Nv}from"@mantine/core";import{useState as Vv}from"react";import{jsx as rt,jsxs as Hv}from"react/jsx-runtime";function ji(e){let[o,t]=Vv(e.defaultValue??"");if(!e.visible||!e.searchParam||!e.filter)return null;function r(){e.onOk({...e.filter,value:o})}return rt(Nv,{title:e.title,size:"xl",opened:e.visible,onClose:e.onCancel,children:rt(H,{onSubmit:r,children:Hv(tl,{children:[rt(tl.Col,{span:10,children:rt(Jr,{resourceType:e.resourceType,searchParam:e.searchParam,defaultValue:o,autoFocus:!0,onChange:t})}),rt(tl.Col,{span:2,children:rt(Lv,{onClick:r,fullWidth:!0,children:"OK"})})]})})})}import{Menu as B}from"@mantine/core";import{Operator as se}from"@medplum/core";import{Fragment as ou,jsx as g,jsxs as at}from"react/jsx-runtime";function eu(e){if(!e.searchParams)return null;function o(n,l){a(Yn(e.search,n.code,l))}function t(n){a(Wr(e.search,n.code))}function r(n,l){e.onPrompt(n,{code:n.code,operator:l,value:""})}function a(n){e.onChange(n)}return e.searchParams.length===1?g(qv,{search:e.search,searchParam:e.searchParams[0],onSort:o,onPrompt:r,onChange:a,onClear:t}):g(B.Dropdown,{children:e.searchParams.map(n=>g(B.Item,{children:we(n.code)},n.code))})}function qv(e){switch(e.searchParam.type){case"date":return g(Gv,{...e});case"number":case"quantity":return g(Uv,{...e});case"reference":return g(Qv,{...e});case"string":case"token":case"uri":return g(zv,{...e});default:return at(ou,{children:["Unknown search param type: ",e.searchParam.type]})}}function Gv(e){let{searchParam:o}=e,t=o.code;return at(B.Dropdown,{children:[g(B.Item,{icon:g(Tt,{size:14}),onClick:()=>e.onSort(o,!1),children:"Sort Oldest to Newest"}),g(B.Item,{icon:g(kt,{size:14}),onClick:()=>e.onSort(o,!0),children:"Sort Newest to Oldest"}),g(B.Divider,{}),g(B.Item,{icon:g(Ho,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Equals..."}),g(B.Item,{icon:g(Vo,{size:14}),onClick:()=>e.onPrompt(o,se.NOT_EQUALS),children:"Does not equal..."}),g(B.Divider,{}),g(B.Item,{icon:g(ir,{size:14}),onClick:()=>e.onPrompt(o,se.ENDS_BEFORE),children:"Before..."}),g(B.Item,{icon:g(sr,{size:14}),onClick:()=>e.onPrompt(o,se.STARTS_AFTER),children:"After..."}),g(B.Item,{icon:g(Ea,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Between..."}),g(B.Divider,{}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Oi(e.search,t)),children:"Tomorrow"}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(wi(e.search,t)),children:"Today"}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Fi(e.search,t)),children:"Yesterday"}),g(B.Divider,{}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Ni(e.search,t)),children:"Next Month"}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Li(e.search,t)),children:"This Month"}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Ei(e.search,t)),children:"Last Month"}),g(B.Divider,{}),g(B.Item,{icon:g($e,{size:14}),onClick:()=>e.onChange(Vi(e.search,t)),children:"Year to date"}),g($r,{...e})]})}function Uv(e){let{searchParam:o}=e;return at(B.Dropdown,{children:[g(B.Item,{icon:g(Tt,{size:14}),onClick:()=>e.onSort(o,!1),children:"Sort Smallest to Largest"}),g(B.Item,{icon:g(kt,{size:14}),onClick:()=>e.onSort(o,!0),children:"Sort Largest to Smallest"}),g(B.Divider,{}),g(B.Item,{icon:g(Ho,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Equals..."}),g(B.Item,{icon:g(Vo,{size:14}),onClick:()=>e.onPrompt(o,se.NOT_EQUALS),children:"Does not equal..."}),g(B.Divider,{}),g(B.Item,{icon:g(sr,{size:14}),onClick:()=>e.onPrompt(o,se.GREATER_THAN),children:"Greater than..."}),g(B.Item,{icon:g(qo,{size:14}),onClick:()=>e.onPrompt(o,se.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),g(B.Item,{icon:g(ir,{size:14}),onClick:()=>e.onPrompt(o,se.LESS_THAN),children:"Less than..."}),g(B.Item,{icon:g(qo,{size:14}),onClick:()=>e.onPrompt(o,se.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),g($r,{...e})]})}function Qv(e){let{searchParam:o}=e;return at(B.Dropdown,{children:[g(B.Item,{icon:g(Ho,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Equals..."}),g(B.Item,{icon:g(Vo,{size:14}),onClick:()=>e.onPrompt(o,se.NOT),children:"Does not equal..."}),g($r,{...e})]})}function zv(e){let{searchParam:o}=e;return at(B.Dropdown,{children:[g(B.Item,{icon:g(Tt,{size:14}),onClick:()=>e.onSort(o,!1),children:"Sort A to Z"}),g(B.Item,{icon:g(kt,{size:14}),onClick:()=>e.onSort(o,!0),children:"Sort Z to A"}),g(B.Divider,{}),g(B.Item,{icon:g(Ho,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Equals..."}),g(B.Item,{icon:g(Vo,{size:14}),onClick:()=>e.onPrompt(o,se.NOT),children:"Does not equal..."}),g(B.Divider,{}),g(B.Item,{icon:g(Na,{size:14}),onClick:()=>e.onPrompt(o,se.CONTAINS),children:"Contains..."}),g(B.Item,{icon:g(La,{size:14}),onClick:()=>e.onPrompt(o,se.EQUALS),children:"Does not contain..."}),g($r,{...e})]})}function $r(e){let{searchParam:o}=e,t=o.code;return at(ou,{children:[g(B.Divider,{}),g(B.Item,{icon:g(wa,{size:14}),onClick:()=>e.onChange(Zn(e.search,t)),children:"Missing"}),g(B.Item,{icon:g(Fa,{size:14}),onClick:()=>e.onChange(Zn(e.search,t,!1)),children:"Not missing"}),g(B.Divider,{}),g(B.Item,{icon:g(ln,{size:14}),onClick:()=>e.onClear(o),children:"Clear filters"})]})}import{getElementDefinition as Wv,getSearchParameter as Xv,getSearchParameterDetails as Jv,getSearchParameters as $v}from"@medplum/core";function tu(e){let o=e.resourceType,t=[];for(let r of e.fields||["id","_lastUpdated"])t.push(_v(o,r));return t}function _v(e,o){if(o==="_lastUpdated")return{name:"_lastUpdated",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_lastUpdated",name:"_lastUpdated",type:"date",expression:"Resource.meta.lastUpdated"}]};if(o==="meta.versionId")return{name:"meta.versionId",searchParams:[{resourceType:"SearchParameter",base:["Resource"],code:"_versionId",name:"_versionId",type:"token",expression:"Resource.meta.versionId"}]};let t=Wv(e,o),r=Xv(e,o.toLowerCase());if(t&&r)return{name:o,elementDefinition:t,searchParams:[r]};if(t){let a=$v(e),n;if(a){let l=new RegExp(`${e}\\.${o.replaceAll("[x]","")}([^\\w-]|$)`);n=Object.values(a).filter(f=>!!f.expression&&l.test(f?.expression)),n.length===0&&(n=void 0)}return{name:o,elementDefinition:t,searchParams:n}}if(r){let a=Jv(e,r);return{name:o,elementDefinition:a.elementDefinitions?.[0],searchParams:[r]}}return{name:o}}import{Fragment as dS,jsx as F,jsxs as Pe}from"react/jsx-runtime";var nl=class extends Event{constructor(o){super("change"),this.definition=o}},ll=class extends Event{constructor(o){super("load"),this.response=o}},Do=class extends Event{constructor(o,t){super("click"),this.resource=o,this.browserEvent=t}},nS=Zv(e=>({root:{maxWidth:"100%",overflow:"auto",textAlign:"left",marginBottom:"20px"},table:{cursor:"pointer"},tr:{"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[7]:e.colors.gray[0]}},th:{padding:"0 !important"},control:{width:"100%",padding:`${e.spacing.xs} ${e.spacing.md}`,"&:hover":{backgroundColor:e.colorScheme==="dark"?e.colors.dark[6]:e.colors.gray[0]}},icon:{width:21,height:21,borderRadius:21}}));function lS(e){let{classes:o}=nS(),t=S(),[r,a]=al(!1),[n,l]=al(),{search:f,onLoad:i}=e,[s,u]=al({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),c=aS(s);c.current=s;let d=f.total??"accurate",m=au(T=>{l(void 0),t.search(f.resourceType,tS({...f,total:d,fields:void 0}),T).then(G=>{u({...c.current,searchResponse:G}),i&&i(new ll(G))}).catch(G=>{u({...c.current,searchResponse:void 0}),l(G)})},[t,f,d,i]),p=au(()=>{u({...c.current,searchResponse:void 0}),m({cache:"reload"})},[m]);nu(()=>{m()},[m]);function x(T,G){T.stopPropagation();let ne=T.target.checked,ue={...c.current.selected};ne?ue[G]=!0:delete ue[G],u({...c.current,selected:ue})}function C(T){T.stopPropagation();let ee=T.target.checked,ne={},ue=c.current.searchResponse;ee&&ue?.entry&&ue.entry.forEach(ht=>{ht.resource?.id&&(ne[ht.resource.id]=!0)}),u({...c.current,selected:ne})}function y(){let T=c.current;if(!T.searchResponse?.entry||T.searchResponse.entry.length===0)return!1;for(let G of T.searchResponse.entry)if(G.resource?.id&&!T.selected[G.resource.id])return!1;return!0}function v(T){e.onChange&&e.onChange(new nl(T))}function b(T,G){if(cr(T.target)||T.button===2)return;M(T);let ee=T.button===1||T.ctrlKey||T.metaKey;!ee&&e.onClick&&e.onClick(new Do(G,T)),ee&&e.onAuxClick&&e.onAuxClick(new Do(G,T))}function P(){return!!(e.onExport??e.onExportCsv??e.onExportTransactionBundle)}if(nu(()=>{a(!1),t.requestSchema(e.search.resourceType).then(()=>a(!0)).catch(console.log)},[t,e.search.resourceType]),!r)return F(_r,{style:{width:"100%",height:"100%"},children:F(Yv,{})});let h=e.checkboxesEnabled,A=tu(f),W=f.resourceType,Y=s.searchResponse,ke=Y?.entry?.map(T=>T.resource),De="subtle",R="gray",N=16,ao=window.innerWidth<768;return Pe("div",{className:o.root,"data-testid":"search-control",children:[!e.hideToolbar&&Pe(Kr,{position:"apart",mb:"xl",children:[Pe(Kr,{spacing:2,children:[F(nt,{compact:!0,variant:De,color:R,leftIcon:F(qa,{size:N}),onClick:()=>u({...c.current,fieldEditorVisible:!0}),children:"Fields"}),F(nt,{compact:!0,variant:De,color:R,leftIcon:F(Wa,{size:N}),onClick:()=>u({...c.current,filterEditorVisible:!0}),children:"Filters"}),e.onNew&&F(nt,{compact:!0,variant:De,color:R,leftIcon:F(za,{size:N}),onClick:e.onNew,children:"New..."}),!ao&&P()&&F(nt,{compact:!0,variant:De,color:R,leftIcon:F(an,{size:N}),onClick:e.onExport?e.onExport:()=>u({...c.current,exportDialogVisible:!0}),children:"Export..."}),!ao&&e.onDelete&&F(nt,{compact:!0,variant:De,color:R,leftIcon:F(Dt,{size:N}),onClick:()=>e.onDelete(Object.keys(s.selected)),children:"Delete..."}),!ao&&e.onBulk&&F(nt,{compact:!0,variant:De,color:R,leftIcon:F(Oa,{size:N}),onClick:()=>e.onBulk(Object.keys(s.selected)),children:"Bulk..."})]}),Pe(Kr,{spacing:2,children:[Y&&Pe(rl,{size:"xs",color:"dimmed",children:[uS(f,Y.total),"-",cS(f,Y.total)," of"," ",`${d==="estimate"?"~":""}${Y.total?.toLocaleString()}`]}),F(Kv,{title:"Refresh",onClick:p,children:F(ja,{size:"1.125rem"})})]})]}),Pe(eS,{className:o.table,children:[Pe("thead",{children:[Pe("tr",{children:[h&&F("th",{children:F("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:y(),onChange:T=>C(T)})}),A.map(T=>F("th",{children:Pe(ru,{shadow:"md",width:240,position:"bottom-end",children:[F(ru.Target,{children:F(oS,{className:o.control,children:Pe(Kr,{position:"apart",noWrap:!0,children:[F(rl,{weight:500,size:"sm",children:we(T.name)}),F(_r,{className:o.icon,children:F(Ba,{size:14,stroke:1.5})})]})})}),F(eu,{search:e.search,searchParams:T.searchParams,onPrompt:(G,ee)=>{u({...c.current,filterDialogVisible:!0,filterDialogSearchParam:G,filterDialogFilter:ee})},onChange:G=>{v(G)}})]})},T.name))]}),!e.hideFilters&&Pe("tr",{children:[h&&F("th",{}),A.map(T=>F("th",{children:T.searchParams&&F(fS,{resourceType:W,searchParams:T.searchParams,filters:e.search.filters})},T.name))]})]}),F("tbody",{children:ke?.map(T=>T&&Pe("tr",{className:o.tr,"data-testid":"search-control-row",onClick:G=>b(G,T),onAuxClick:G=>b(G,T),children:[h&&F("td",{children:F("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${T.id}`,checked:!!s.selected[T.id],onChange:G=>x(G,T.id)})}),A.map(G=>F("td",{children:Qi(T,G)},G.name))]},T.id))})]}),ke?.length===0&&F(uo,{children:F(_r,{style:{height:150},children:F(rl,{size:"xl",color:"dimmed",children:"No results"})})}),Y?.total!==void 0&&Y.total>0&&F(_r,{m:"md",p:"md",children:F(jv,{value:sS(f),total:iS(f,Y.total),onChange:T=>v(Hi(f,T)),getControlProps:T=>{switch(T){case"previous":return{"aria-label":"Previous page"};case"next":return{"aria-label":"Next page"};default:return{}}}})}),n&&F("div",{"data-testid":"search-error",children:F("pre",{style:{textAlign:"left"},children:JSON.stringify(n,void 0,2)})}),F(Wi,{search:e.search,visible:c.current.fieldEditorVisible,onOk:T=>{v(T),u({...c.current,fieldEditorVisible:!1})},onCancel:()=>{u({...c.current,fieldEditorVisible:!1})}}),F(Yi,{search:e.search,visible:c.current.filterEditorVisible,onOk:T=>{v(T),u({...c.current,filterEditorVisible:!1})},onCancel:()=>{u({...c.current,filterEditorVisible:!1})}}),F(Bi,{visible:c.current.exportDialogVisible,exportCsv:e.onExportCsv,exportTransactionBundle:e.onExportTransactionBundle,onCancel:()=>{u({...c.current,exportDialogVisible:!1})}}),F(ji,{visible:c.current.filterDialogVisible,title:s.filterDialogSearchParam?.code?we(s.filterDialogSearchParam.code):"",resourceType:W,searchParam:s.filterDialogSearchParam,filter:s.filterDialogFilter,defaultValue:"",onOk:T=>{v(ot(e.search,T.code,T.operator,T.value)),u({...c.current,filterDialogVisible:!1})},onCancel:()=>{u({...c.current,filterDialogVisible:!1})}},s.filterDialogSearchParam?.code)]})}var _N=rS(lS);function fS(e){let o=(e.filters??[]).filter(t=>e.searchParams.find(r=>r.code===t.code));return o.length===0?F("span",{children:"no filters"}):F(dS,{children:o.map(t=>Pe("div",{children:[Xt(t.operator),"\xA0",F(Xr,{resourceType:e.resourceType,filter:t})]},`filter-${t.code}-${t.operator}-${t.value}`))})}function sS(e){return Math.floor((e.offset??0)/(e.count??fl))+1}function iS(e,o){let t=e.count??fl;return Math.ceil(o/t)}function uS(e,o){return Math.min(o,(e.offset??0)+1)}function cS(e,o){return Math.min(o,((e.offset??0)+1)*(e.count??fl))}import{jsx as Se,jsxs as Yr}from"react/jsx-runtime";function hS(e){let o=S(),[t,r]=Zr(!1),[a,n]=Zr(),{query:l,fields:f}=e,[i,s]=Zr(),[u,c]=Zr({}),d=fu();d.current=i;let m=fu({});m.current=u,lu(()=>{n(void 0),o.graphql(l).then(s).catch(b=>n(IS(b)))},[o,l]);function p(b,P){b.stopPropagation();let A=b.target.checked,W={...m.current};A?W[P]=!0:delete W[P],c(W)}function x(b){b.stopPropagation();let h=b.target.checked,A={},W=d.current?.data.ResourceList;h&&W&&W.forEach(Y=>{Y.id&&(A[Y.id]=!0)}),c(A)}function C(){let b=d.current?.data.ResourceList;if(!b||b.length===0)return!1;for(let P of b)if(P.id&&!m.current[P.id])return!1;return!0}function y(b,P){cr(b.target)||(M(b),b.button!==1&&e.onClick&&e.onClick(new Do(P,b)),b.button===1&&e.onAuxClick&&e.onAuxClick(new Do(P,b)))}if(lu(()=>{o.requestSchema(e.resourceType).then(()=>r(!0)).catch(console.log)},[o,e.resourceType]),!t)return Se(pS,{});let v=e.checkboxesEnabled;return Yr("div",{onContextMenu:b=>M(b),"data-testid":"search-control",children:[Yr(xS,{children:[Se("thead",{children:Yr("tr",{children:[v&&Se("th",{children:Se("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:C(),onChange:b=>x(b)})}),f.map(b=>Se("th",{children:b.name},b.name))]})}),Se("tbody",{children:i?.data.ResourceList.map(b=>b&&Yr("tr",{"data-testid":"search-control-row",onClick:P=>y(P,b),onAuxClick:P=>y(P,b),children:[v&&Se("td",{children:Se("input",{type:"checkbox",value:"checked","data-testid":"row-checkbox","aria-label":`Checkbox for ${b.id}`,checked:!!u[b.id],onChange:P=>p(P,b.id)})}),f.map(P=>Se("td",{children:Se(Ti,{propertyType:P.propertyType,path:P.fhirPath,resource:b})},P.name))]},b.id))})]}),i?.data.ResourceList.length===0&&Se("div",{"data-testid":"empty-search",children:"No results"}),a&&Se("div",{"data-testid":"search-error",children:Se("pre",{style:{textAlign:"left"},children:JSON.stringify(a,void 0,2)})}),e.onBulk&&Se(mS,{onClick:()=>e.onBulk(Object.keys(m.current)),children:"Bulk..."})]})}var fV=gS(hS);import{jsx as lt,jsxs as yS}from"react/jsx-runtime";function xo(e){return yS("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:e.size,height:e.size},children:[lt("title",{children:"Medplum Logo"}),lt("path",{fill:e.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),lt("path",{fill:e.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"}),lt("path",{fill:e.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"}),lt("path",{fill:e.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),lt("path",{fill:e.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}import{Box as PS,SimpleGrid as TS}from"@mantine/core";import{Box as su,Flex as sl,Group as vS,Paper as SS,RingProgress as uu,Text as Bo,Title as il}from"@mantine/core";import{formatCodeableConcept as iu}from"@medplum/core";import{Fragment as pu,jsx as re,jsxs as _t}from"react/jsx-runtime";function cu(e){let{group:o}=e;return re(SS,{withBorder:!0,radius:"md",p:"xs",display:"flex",sx:{alignItems:"center",justifyContent:"center"},children:_t(vS,{children:[o.measureScore&&re(bS,{group:o}),!o.measureScore&&re(CS,{group:o})]})})}function du(e){let{measure:o}=e;return _t(pu,{children:[re(Bo,{fz:"md",fw:500,mb:8,children:o.title}),re(Bo,{fz:"xs",c:"dimmed",mb:8,children:o.subtitle})]})}function CS(e){let{group:o}=e,t=o.population,r=t?.find(i=>iu(i.code)==="numerator"),a=t?.find(i=>iu(i.code)==="denominator"),n=r?.count,l=a?.count;if(l===0)return _t(su,{children:[re(il,{order:3,children:"Not Applicable"}),re(Bo,{children:`Denominator: ${l}`})]});if(n===void 0||l===void 0)return _t(su,{children:[re(il,{order:3,children:"Insufficient Data"}),re(Bo,{children:`Numerator: ${n}`}),re(Bo,{children:`Denominator: ${l}`})]});let f=n/l*100;return re(uu,{size:120,thickness:12,roundCaps:!0,sections:[{value:f,color:mu(f)}],label:re(sl,{justify:"center",children:_t(Bo,{fw:700,fz:18,children:[n," / ",l]})})})}function bS(e){let{group:o}=e,t=o.measureScore?.unit??o.measureScore?.code;return re(pu,{children:t==="%"?re(uu,{size:120,thickness:12,roundCaps:!0,sections:[{value:RS(o),color:mu(o?.measureScore?.value??0)}],label:re(sl,{justify:"center",children:re(Bo,{fw:700,fz:18,children:re(ae,{value:o.measureScore})})})}):re(sl,{h:120,align:"center",children:re(il,{order:3,children:re(ae,{value:o.measureScore})})})})}function RS(e){let o=e.measureScore?.value,t=e.measureScore?.unit;return o?o<=1&&t==="%"?o*100:o:0}function mu(e){return e<=33?"red":e<=67?"yellow":"green"}import{jsx as ul,jsxs as kS}from"react/jsx-runtime";function vV(e){let o=X(e.measureReport),[t]=Kl("Measure",{url:o?.measure});return o?kS(PS,{children:[t&&ul(du,{measure:t}),ul(TS,{cols:3,breakpoints:[{maxWidth:"48rem",cols:2,spacing:"md"},{maxWidth:"36rem",cols:1,spacing:"sm"}],spacing:"md",children:o.group?.map((r,a)=>ul(cu,{group:r},r.id??a))})]}):null}import{Alert as DS}from"@mantine/core";import{operationOutcomeIssueToString as BS}from"@medplum/core";import{jsx as cl}from"react/jsx-runtime";function ft(e){let o=e.outcome?.issue||e.issues;return!o||o.length===0?null:cl(DS,{icon:cl(vo,{size:16}),color:"red",children:o.map(t=>cl("div",{"data-testid":"text-field-error",children:BS(t)},t.details?.text))})}import{Anchor as Xu,Card as Ju,Divider as Kt,Flex as gl,Group as MC,Paper as FC,Stack as wC,Text as Zt}from"@mantine/core";import{calculateAgeString as OC,formatHumanName as EC,resolveId as LC}from"@medplum/core";import{useEffect as NC,useState as st}from"react";import{Anchor as AS,Badge as MS,Box as FS,Button as wS,Group as xu,Modal as OS,NativeSelect as ES,Stack as LS,Text as Iu,TextInput as gu}from"@mantine/core";import{useDisclosure as NS}from"@mantine/hooks";import{createReference as hu}from"@medplum/core";import{useCallback as VS,useState as yu}from"react";import{Fragment as HS,jsx as Ce,jsxs as dl}from"react/jsx-runtime";function vu(e){let o=S(),{patient:t,encounter:r}=e,[a,n]=yu(e.allergies),[l,{open:f,close:i}]=NS(!1),[s,u]=yu(),c=VS(d=>{o.createResource({resourceType:"AllergyIntolerance",patient:hu(t),encounter:r?hu(r):void 0,code:s,onsetDateTime:d.onset?d.onset:void 0,reaction:d.reaction?[{manifestation:[{text:d.reaction}]}]:void 0}).then(m=>{n([...a,m]),i()}).catch(console.error)},[o,t,r,a,i,s]);return dl(HS,{children:[dl(xu,{position:"apart",children:[Ce(Iu,{fz:"md",fw:700,children:"Allergies"}),Ce(AS,{href:"#",onClick:d=>{M(d),f()},children:"+ Add"})]}),a.length>0?Ce(FS,{children:a.map(d=>Ce(MS,{maw:"100%",children:Ce(ye,{value:d.code})},d.id))}):Ce(Iu,{children:"(none)"}),Ce(OS,{opened:l,onClose:i,title:"Add Allergy",children:Ce(H,{onSubmit:c,children:dl(LS,{children:[Ce(_o,{name:"allergy","data-autofocus":!0,binding:"http://hl7.org/fhir/us/core/ValueSet/us-core-allergy-substance",onChange:d=>u(d)}),Ce(gu,{name:"reaction",label:"Reaction"}),Ce(ES,{name:"status",label:"Status",data:["active"]}),Ce(gu,{name:"onset",label:"Onset",type:"date"}),Ce(xu,{position:"right",spacing:4,mt:"md",children:Ce(wS,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as qS,Badge as GS,Box as US,Button as QS,Group as Su,Modal as zS,Radio as ml,Stack as WS,Text as Cu}from"@mantine/core";import{useDisclosure as XS}from"@mantine/hooks";import{createReference as bu}from"@medplum/core";import{useCallback as JS,useState as Ru}from"react";import{Fragment as $S,jsx as Te,jsxs as jr}from"react/jsx-runtime";function Pu(e){let o=S(),[t,r]=Ru(e.medicationRequests),[a,{open:n,close:l}]=XS(!1),[f,i]=Ru(),s=JS(u=>{let c=u.status;o.createResource({resourceType:"MedicationRequest",status:c,intent:"order",encounter:e.encounter?bu(e.encounter):void 0,medicationCodeableConcept:f,subject:bu(e.patient)}).then(d=>{r([d,...t]),l()}).catch(console.error)},[o,e.patient,e.encounter,t,l,f]);return jr($S,{children:[jr(Su,{position:"apart",children:[Te(Cu,{fz:"md",fw:700,children:"Medications"}),Te(qS,{href:"#",onClick:u=>{M(u),n()},children:"+ Add"})]}),t.length>0?Te(US,{children:t.map(u=>Te(GS,{mt:4,maw:"50%",color:u.status==="active"?"blue":"gray",children:Te(ye,{value:u.medicationCodeableConcept})},u.id))}):Te(Cu,{children:"(none)"}),Te(zS,{opened:a,onClose:l,title:"Add Medication Request",children:Te(H,{onSubmit:s,children:jr(WS,{h:275,children:[Te(_o,{name:"request","data-autofocus":!0,binding:"https://app.medplum.com/ValueSet/16d6f7b7-7eeb-4d0e-a83b-83be082aa10b",onChange:u=>i(u)}),jr(ml.Group,{mt:32,name:"status",label:"Request Status",required:!0,children:[Te(ml,{value:"active",label:"active",my:"xs"},"active"),Te(ml,{value:"stopped",label:"stopped",my:"xs"},"stopped")]}),Te(Su,{position:"right",spacing:4,mt:"md",children:Te(QS,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as _S,Badge as KS,Button as ZS,Grid as pl,Group as Tu,Modal as YS,NativeSelect as jS,Stack as eC,Text as ku,Textarea as oC,TextInput as Du}from"@mantine/core";import{useDisclosure as tC}from"@mantine/hooks";import{createReference as Bu}from"@medplum/core";import{Fragment as rC,useCallback as aC,useState as nC}from"react";import{Fragment as lC,jsx as me,jsxs as ea}from"react/jsx-runtime";function Au(e){let o=S(),{patient:t,encounter:r}=e,[a,n]=nC(e.problems),[l,{open:f,close:i}]=tC(!1),s=aC(u=>{o.createResource({resourceType:"Condition",subject:Bu(t),encounter:r?Bu(r):void 0,code:{coding:[{code:u.problem,display:u.problem}]},onsetDateTime:u.onset?u.onset:void 0}).then(c=>{n([...a,c]),i()}).catch(console.error)},[o,t,r,a,i]);return ea(lC,{children:[ea(Tu,{position:"apart",children:[me(ku,{fz:"md",fw:700,children:"Problem List"}),me(_S,{href:"#",onClick:u=>{M(u),f()},children:"+ Add"})]}),a.length>0?me(pl,{gutter:"xs",children:a.map(u=>ea(rC,{children:[me(pl.Col,{span:2,children:u.onsetDateTime?.substring(0,4)}),me(pl.Col,{span:10,children:me(KS,{maw:"100%",children:me(ye,{value:u.code})},u.id)})]},u.id))}):me(ku,{children:"(none)"}),me(YS,{opened:l,onClose:i,title:"Add Problem",children:me(H,{onSubmit:s,children:ea(eC,{children:[me(Du,{name:"problem",label:"Problem","data-autofocus":!0,autoFocus:!0,required:!0}),me(Du,{name:"onset",label:"Dx Date",type:"date",required:!0}),me(jS,{name:"status",label:"Status",data:["active"]}),me(oC,{name:"notes",label:"Notes"}),me(Tu,{position:"right",spacing:4,mt:"md",children:me(ZS,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as fC,Badge as sC,Box as iC,Button as uC,Group as Mu,Modal as cC,Radio as Fu,Stack as dC,Text as wu}from"@mantine/core";import{useDisclosure as mC}from"@mantine/hooks";import{HTTP_HL7_ORG as pC,LOINC as xC,SNOMED as Ou,createReference as Eu}from"@medplum/core";import{useCallback as IC,useState as gC}from"react";import{Fragment as hC,jsx as Oe,jsxs as xl}from"react/jsx-runtime";var Lu={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 Nu(e){let o=S(),{patient:t,encounter:r}=e,[a,n]=gC(e.smokingStatus),[l,{open:f,close:i}]=mC(!1),s=IC(u=>{o.createResource({resourceType:"Observation",meta:{profile:[pC+"/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:xC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:Eu(t),encounter:r?Eu(r):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:Ou,version:Ou+"/731000124108",code:u.smokingStatus}],text:Lu[u.smokingStatus]}}).then(c=>{n(c),i()}).catch(console.error)},[o,t,r,i]);return xl(hC,{children:[xl(Mu,{position:"apart",children:[Oe(wu,{fz:"md",fw:700,children:"Smoking Status"}),Oe(fC,{href:"#",onClick:u=>{M(u),f()},children:"+ Edit"})]}),a?.valueCodeableConcept?Oe(iC,{children:Oe(sC,{children:Oe(ye,{value:a.valueCodeableConcept})})}):Oe(wu,{children:"(none)"}),Oe(cC,{opened:l,onClose:i,title:"Set Smoking Status",children:Oe(H,{onSubmit:s,children:xl(dC,{children:[Oe(Fu.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(Lu).map(([u,c])=>Oe(Fu,{value:u,label:c,my:"xs"},u))}),Oe(Mu,{position:"right",spacing:4,mt:"md",children:Oe(uC,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as SC,Button as CC,Grid as te,Group as Ao,Modal as bC,Stack as RC,Text as PC,Textarea as TC,TextInput as We}from"@mantine/core";import{useDisclosure as kC}from"@mantine/hooks";import{useCallback as DC,useState as BC}from"react";import{LOINC as yC,UCUM as vC,createReference as Vu}from"@medplum/core";function oo(e,o){return e.find(r=>r.code?.coding?.[0].code===o)?.valueQuantity}function Il(e,o,t){return e.find(n=>n.code?.coding?.[0].code===o)?.component?.find(n=>n.code?.coding?.[0].code===t)?.valueQuantity}function Hu(e,o,t,r,a){if(Uu(a.value))return{...Gu(e,o,t,r),valueQuantity:a}}function qu(e,o,t,r,a){let n=a.filter(l=>Uu(l.valueQuantity?.value));if(n.length!==0)return{...Gu(e,o,t,r),component:n}}function Gu(e,o,t,r){return{resourceType:"Observation",status:"preliminary",subject:Vu(e),encounter:o?Vu(o):void 0,effectiveDateTime:new Date().toISOString(),category:[{coding:[{system:"http://terminology.hl7.org/CodeSystem/observation-category",code:"vital-signs",display:"Vital Signs"}]}],code:oa(t,r)}}function oa(e,o){return{coding:[{code:e,display:o,system:yC}],text:o}}function ta(e,o){return{value:e,system:vC,unit:o,code:o}}function Uu(e){return e!==void 0&&!isNaN(e)&&isFinite(e)}import{Fragment as AC,jsx as w,jsxs as Xe}from"react/jsx-runtime";var He={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"}},Qu="8480-6",zu="8462-4";function Wu(e){let o=S(),{patient:t,encounter:r}=e,[a,n]=BC(e.vitals),[l,{open:f,close:i}]=kC(!1),s=DC(u=>{let c=Object.entries(He).map(([d,m])=>d==="bloodPressure"?qu(t,r,m.code,m.title,[{code:oa(Qu,"Systolic blood pressure"),valueQuantity:ta(parseFloat(u.systolic),"mm[Hg]")},{code:oa(zu,"Diastolic blood pressure"),valueQuantity:ta(parseFloat(u.diastolic),"mm[Hg]")}]):Hu(t,r,m.code,m.title,ta(parseFloat(u[d]),m.unit))).filter(Boolean);Promise.all(c.map(d=>o.createResource(d))).then(d=>n([...d,...a])).catch(console.error),i()},[o,t,r,a,i]);return Xe(AC,{children:[Xe(Ao,{position:"apart",children:[w(PC,{fz:"md",fw:700,children:"Vitals"}),w(SC,{href:"#",onClick:u=>{M(u),f()},children:"+ Add"})]}),Xe(te,{children:[w(te.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),w(te.Col,{span:3,children:w(ae,{value:Il(a,He.bloodPressure.code,Qu)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),w(te.Col,{span:3,children:w(ae,{value:Il(a,He.bloodPressure.code,zu)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.heartRate.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.bodyTemperature.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.respiratoryRate.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.height.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.weight.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.bmi.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.oxygen.code)})}),w(te.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),w(te.Col,{span:3,children:w(ae,{value:oo(a,He.headCircumference.code)})})]}),w(bC,{opened:l,onClose:i,title:"Add Vitals",children:Xe(H,{onSubmit:s,children:[Xe(RC,{children:[Xe(Ao,{grow:!0,children:[w(We,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),w(We,{name:"diastolic",label:"BP Dias"})]}),Xe(Ao,{grow:!0,children:[w(We,{name:"heartRate",label:"HR"}),w(We,{name:"bodyTemperature",label:"Temp"})]}),Xe(Ao,{grow:!0,children:[w(We,{name:"respiratoryRate",label:"RR"}),w(We,{name:"height",label:"height"})]}),Xe(Ao,{grow:!0,children:[w(We,{name:"weight",label:"Wt"}),w(We,{name:"bmi",label:"BMI"})]}),Xe(Ao,{grow:!0,children:[w(We,{name:"oxygen",label:"O2"}),w(We,{name:"headCircumference",label:"HC"})]}),w(TC,{name:"notes",label:"Notes"})]}),w(Ao,{position:"right",spacing:4,mt:"md",children:w(CC,{type:"submit",children:"Save"})})]})})]})}import{jsx as j,jsxs as Mo}from"react/jsx-runtime";function qH(e){let o=S(),{patient:t,background:r,...a}=e,[n,l]=st(),[f,i]=st(),[s,u]=st(),[c,d]=st(),[m,p]=st(),[x,C]=st();return NC(()=>{let y=LC(t),v=`Patient/${y}`,b={_count:100,_sort:"-_lastUpdated"};Promise.all([o.readResource("Patient",y),o.searchResources("AllergyIntolerance",{patient:v,...b}),o.searchResources("Condition",{patient:v,...b}),o.searchResources("MedicationRequest",{subject:v,...b}),o.searchResources("Observation",{subject:v,...b})]).then(P=>{l(P[0]),i(P[1]),u(P[2]),C(P[3]);let h=P[4];d(h.find(A=>A.code?.coding?.[0].code==="72166-2")),p(h.filter(A=>A.category?.[0]?.coding?.[0].code==="vital-signs"))}).catch(console.error)},[o,t]),n?Mo(Ju,{...a,children:[j(Ju.Section,{h:100,style:{background:r}}),j(fe,{value:n,size:80,radius:80,mx:"auto",mt:-50,sx:{border:"2px solid white"}}),j(Zt,{ta:"center",fz:"lg",fw:500,children:EC(n.name?.[0])}),Mo(Zt,{ta:"center",fz:"xs",color:"dimmed",children:[n.birthDate," (",OC(n.birthDate),")"]}),j(FC,{withBorder:!0,p:"md",my:"md",children:Mo(MC,{grow:!0,children:[Mo(gl,{justify:"center",align:"center",direction:"column",gap:0,maw:"33%",children:[j(nn,{size:24,color:"gray"}),j(Zt,{fz:"xs",align:"center",sx:{whiteSpace:"nowrap"},children:"Self"})]}),Mo(gl,{justify:"center",align:"center",direction:"column",gap:0,children:[j(tn,{size:24,color:"gray"}),j(Zt,{fz:"xs",sx:{whiteSpace:"nowrap"},children:n?.generalPractitioner?.[0]?.display??"No provider"})]}),Mo(gl,{justify:"center",align:"center",direction:"column",gap:0,children:[j(Xa,{size:24,color:"gray"}),j(Zt,{fz:"xs",sx:{whiteSpace:"nowrap"},children:n.gender})]})]})}),Mo(wC,{spacing:"xs",children:[j(Xu,{href:"#",children:"No upcoming appointments"}),j(Xu,{href:"#",children:"No documented visits"}),j(Kt,{}),j(vu,{patient:n,allergies:f}),j(Kt,{}),j(Au,{patient:n,problems:s}),j(Kt,{}),j(Pu,{patient:n,medicationRequests:x}),j(Kt,{}),j(Nu,{patient:n,smokingStatus:c}),j(Kt,{}),j(Wu,{patient:n,vitals:m})]})]}):null}import{createReference as ra}from"@medplum/core";import{useCallback as VC}from"react";import{jsx as HC}from"react/jsx-runtime";function $H(e){let o=VC((t,r,a)=>{let n=`${r}/${a}`,l=100;return Promise.allSettled([t.readHistory("Patient",a),t.search("Communication",{subject:n,_count:l}),t.search("Device",{patient:n,_count:l}),t.search("DeviceRequest",{patient:n,_count:l}),t.search("DiagnosticReport",{subject:n,_count:l}),t.search("Media",{subject:n,_count:l}),t.search("ServiceRequest",{subject:n,_count:l}),t.search("Task",{subject:n,_count:l})])},[]);return HC(po,{value:e.patient,loadTimelineResources:o,createCommunication:(t,r,a)=>({resourceType:"Communication",status:"completed",subject:ra(t),sender:ra(r),sent:new Date().toISOString(),payload:[{contentString:a}]}),createMedia:(t,r,a)=>({resourceType:"Media",status:"completed",subject:ra(t),operator:ra(r),issued:new Date().toISOString(),content:a})})}import{Anchor as _u,Button as qC,createStyles as GC,NativeSelect as UC,Stack as QC,TextInput as yl}from"@mantine/core";import{getReferenceString as zC}from"@medplum/core";import{useEffect as $u,useRef as Ku,useState as Yt}from"react";import{jsx as J,jsxs as it}from"react/jsx-runtime";var Zu=GC(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}}}));function mq(e){let o=S(),t=X(e.value),[r,a]=Yt(!1),[n,l]=Yt(),[f,i]=Yt(),[s,u]=Yt();function c(){i(void 0)}function d(){l(void 0)}let m=Ku();if(m.current=s,$u(()=>{o.requestSchema("PlanDefinition").then(()=>a(!0)).catch(console.log)},[o]),$u(()=>(u(KC(t??{resourceType:"PlanDefinition"})),document.addEventListener("mouseover",c),document.addEventListener("click",d),()=>{document.removeEventListener("mouseover",c),document.removeEventListener("click",d)}),[t]),!r||!s)return null;function p(x,C){u({...m.current,[x]:C})}return J("div",{children:it(H,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(s),children:[J(yl,{label:"Plan Title",defaultValue:s.title,onChange:x=>p("title",x.currentTarget.value)}),J(Yu,{actions:s.action||[],selectedKey:n,setSelectedKey:l,hoverKey:f,setHoverKey:i,onChange:x=>p("action",x)}),J(qC,{type:"submit",children:"Save"})]})})}function Yu(e){let{classes:o}=Zu(),t=Ku();t.current=e.actions;function r(l){e.onChange(t.current.map(f=>f.id===l.id?l:f))}function a(l){e.onChange([...t.current,l]),e.setSelectedKey(l.id)}function n(l){e.onChange(t.current.filter(f=>f!==l))}return it("div",{className:o.section,children:[e.actions.map(l=>J("div",{children:J(WC,{action:l,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:r,onRemove:()=>n(l)})},l.id)),J("div",{className:o.bottomActions,children:J(_u,{href:"#",onClick:l=>{M(l),a({id:ec()})},children:"Add action"})})]})}function WC(e){let{classes:o,cx:t}=Zu(),{action:r}=e,a=_C(r),n=e.selectedKey===e.action.id,l=e.hoverKey===e.action.id;function f(u){u.stopPropagation(),e.setSelectedKey(e.action.id)}function i(u){M(u),e.setHoverKey(e.action.id)}let s=t(o.section,{[o.editing]:n,[o.hovering]:l&&!n});return it("div",{"data-testid":r.id,className:s,onClick:f,onMouseOver:i,onFocus:i,children:[n?J(JC,{action:r,actionType:a,onChange:e.onChange,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onRemove:e.onRemove}):J(XC,{action:r,actionType:a}),J("div",{className:o.bottomActions,children:J(_u,{href:"#",onClick:u=>{u.preventDefault(),e.onRemove()},children:"Remove"})})]})}var vl={path:"PlanDefinition.action.timing[x]",min:0,max:1,description:"",isArray:!1,constraints:[],type:["dateTime","Period","Range","Timing"].map(e=>({code:e}))};function XC(e){let{action:o,actionType:t}=e,[r,a]=ju(o);return it("div",{children:[it("div",{children:[o.title||"Untitled"," ",t&&`(${t})`]}),o.definitionCanonical&&J("div",{children:J(To,{value:{reference:o.definitionCanonical}})}),r&&J("div",{children:J(ce,{property:vl,propertyType:a,value:r})})]})}function JC(e){let{action:o}=e,[t,r]=Yt(e.actionType);function a(n,l){e.onChange({...o,[n]:l})}return it(QC,{spacing:"xl",children:[J(yl,{name:`actionTitle-${o.id}`,label:"Title",defaultValue:o.title,onChange:n=>a("title",n.currentTarget.value)}),J(yl,{name:`actionDescription-${o.id}`,label:"Description",defaultValue:o.description,onChange:n=>a("description",n.currentTarget.value)}),J(UC,{label:"Type of Action",description:"The type of the action to be performed.",name:`actionType-${o.id}`,defaultValue:t,onChange:n=>r(n.currentTarget.value),data:["","appointment","lab","questionnaire","task"]}),o.action&&o.action.length>0&&J(Yu,{actions:o.action,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,setHoverKey:e.setHoverKey,onChange:n=>a("action",n)}),(()=>{switch(t){case"appointment":return J(aa,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action:o,onChange:e.onChange});case"lab":return J(aa,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});case"questionnaire":return J(aa,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action:o,onChange:e.onChange});case"task":return J(aa,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action:o,onChange:e.onChange});default:return null}})(),J(pe,{title:"Timing",description:"When the action should take place.",children:J($C,{name:"timing-"+o.id,action:o,onChange:e.onChange})})]})}function aa(e){let{id:o,definitionCanonical:t}=e.action,r=t?.startsWith(e.resourceType+"/")?{reference:t}:void 0;return J(kr,{name:o,resourceType:e.resourceType,defaultValue:r,loadOnFocus:!0,onChange:a=>{a?e.onChange({...e.action,definitionCanonical:zC(a)}):e.onChange({...e.action,definitionCanonical:void 0})}})}function $C(e){let o=e.action,t="timing",[r,a]=ju(o);return J(io,{property:vl,name:"timing[x]",defaultValue:r,defaultPropertyType:a,onChange:(n,l)=>{e.onChange(Ot(o,t,l??t,vl,n))},outcome:void 0})}function _C(e){if(e.definitionCanonical?.startsWith("Schedule"))return"appointment";if(e.definitionCanonical?.startsWith("Questionnaire/"))return"questionnaire";if(e.definitionCanonical?.startsWith("ActivityDefinition/"))return"task"}function ju(e){return so({type:"PlanDefinitionAction",value:e},"timing")}var hl=1;function ec(e){if(e){if(e.startsWith("id-")){let o=parseInt(e.substring(3),10);isNaN(o)||(hl=Math.max(hl,o+1))}return e}return"id-"+hl++}function KC(e){return{...e,action:oc(e.action)}}function oc(e){if(e)return e.map(o=>({...o,id:ec(o.id),action:oc(o.action)}))}import{Anchor as Ee,Box as Pl,Button as Pb,createStyles as Tb,Group as kb,NativeSelect as Db,Space as Bb,Textarea as Ab,TextInput as Tl,Title as Mb}from"@mantine/core";import{getElementDefinition as Fb,isResource as wb}from"@medplum/core";import{useEffect as gc,useRef as Ob,useState as ca}from"react";import{Checkbox as ib,Group as ub,MultiSelect as cb,NativeSelect as db,Radio as cc,Textarea as mb,TextInput as ut}from"@mantine/core";import{capitalize as bl,deepEquals as pb,formatCodeableConcept as xb,formatCoding as ua,getElementDefinition as Ib,getTypedPropertyValue as Io,stringify as dc}from"@medplum/core";import{useContext as gb}from"react";import{deepClone as ZC,evalFhirPathTyped as YC,formatCoding as jC,getExtension as na,getReferenceString as eb,getTypedPropertyValue as Sl,splitN as ob,stringify as tb}from"@medplum/core";var la=(y=>(y.group="group",y.display="display",y.question="question",y.boolean="boolean",y.decimal="decimal",y.integer="integer",y.date="date",y.dateTime="dateTime",y.time="time",y.string="string",y.text="text",y.url="url",y.choice="choice",y.openChoice="open-choice",y.attachment="attachment",y.reference="reference",y.quantity="quantity",y))(la||{});function tc(e){return e.type==="choice"||e.type==="open-choice"}function rc(e,o){if(!e.enableWhen)return!0;let t=e.enableBehavior??"any";for(let r of e.enableWhen){let a=nc(o,r.question);if(r.operator==="exists"&&!r.answerBoolean&&!a?.length){if(t==="any")return!0;continue}let{anyMatch:n,allMatch:l}=ab(r,a,t);if(t==="any"&&n)return!0;if(t==="all"&&!l)return!1}return t!=="any"}function ac(e,o,t){return e.map(r=>{let a=t.answerOption?.find(l=>jC(l.valueCoding)===r||l[o]===r),n=Sl({type:"QuestionnaireItemAnswerOption",value:a},"value");return{[o]:n?.value}})}function nc(e,o){if(e)for(let t of e){if(t.linkId===o)return t.answer;if(t.item){let r=nc(t.item,o);if(r)return r}}}function rb(e,o,t){if(t==="exists")return!!e===o.value;if(e){let r=t==="="||t==="!="?t?.replace("=","~"):t,[{value:a}]=YC(`%actualAnswer ${r} %expectedAnswer`,[e],{"%actualAnswer":e,"%expectedAnswer":o});return a}else return!1}function ab(e,o,t){let r=o||[],a=Sl({type:"QuestionnaireItemEnableWhen",value:e},"answer[x]"),n=!1,l=!0;for(let f of r){let i=Sl({type:"QuestionnaireResponseItemAnswer",value:f},"value[x]"),{operator:s}=e;if(rb(i,a,s)?n=!0:l=!1,t==="any"&&n)break}return{anyMatch:n,allMatch:l}}function fa(e){let o=na(e,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");if(o){if(o.valueCode!==void 0)return[o.valueCode];if(o.valueCodeableConcept)return o.valueCodeableConcept?.coding?.map(t=>t.code)}}function sa(e,o){let t=ZC(e),r=na(t,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource");return!o||o.length===0?(r&&(t.extension=t.extension?.filter(a=>a!==r)),t):(r||(t.extension||(t.extension=[]),r={url:"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceResource"},t.extension.push(r)),o.length===1?(r.valueCode=o[0],delete r.valueCodeableConcept):(r.valueCodeableConcept={coding:o.map(a=>({code:a}))},delete r.valueCode),t)}function lc(e,o,t){let r=na(e,"http://hl7.org/fhir/StructureDefinition/questionnaire-referenceFilter");if(!r?.valueString)return;let a=r.valueString;o?.reference&&(a=a.replaceAll("$subj",o.reference)),t?.reference&&(a=a.replaceAll("$encounter",t.reference));let n={},l=a.split("&");for(let f of l){let[i,s]=ob(f,"=",2);n[i]=s}return n}function fc(e){return{resourceType:"QuestionnaireResponse",questionnaire:eb(e),item:sc(e.item)}}function sc(e){return e?.map(Cl)??[]}function Cl(e){return{id:lb(),linkId:e.linkId,text:e.text,item:sc(e.item),answer:e.initial?.map(fb)??[]}}var nb=1;function lb(){return"id-"+nb++}function fb(e){return{...e}}function ic(e){return e.value.display||e.value.reference||tb(e.value)}function uc(e){let o=e?.item?.[0];return o&&na(o,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?e.item.length:1}import{createContext as sb}from"react";var ia=sb({});import{jsx as $}from"react/jsx-runtime";function jt(e){let o=gb(ia),t=e.item,r=e.response;function a(s){let u;Array.isArray(s)?u=s:e.index>=(e.response?.answer?.length??0)?u=(e.response?.answer??[]).concat([s]):u=(e.response?.answer??[]).map((d,m)=>m===e.index?s:d)??[],e.onChange({id:r?.id,linkId:r?.linkId,text:t.text,answer:u})}let n=t.type;if(!n)return null;let l=t.linkId;if(!l)return null;let f=t.initial&&t.initial.length>0?t.initial[0]:void 0,i=Rl(r,e.index)??Io({type:"QuestionnaireItemInitial",value:f},"value");switch(n){case"display":return $("p",{children:e.item.text},e.item.linkId);case"boolean":return $(Cr,{title:e.item.text,htmlFor:e.item.linkId,children:$(ib,{id:e.item.linkId,name:e.item.linkId,defaultChecked:i?.value,onChange:s=>a({valueBoolean:s.currentTarget.checked})})},e.item.linkId);case"decimal":return $(ut,{type:"number",step:"any",id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueDecimal:s.currentTarget.valueAsNumber})});case"integer":return $(ut,{type:"number",step:1,id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueInteger:s.currentTarget.valueAsNumber})});case"date":return $(ut,{type:"date",id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueDate:s.currentTarget.value})});case"dateTime":return $(Ve,{name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueDateTime:s})});case"time":return $(ut,{type:"time",id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueTime:s.currentTarget.value})});case"string":case"url":return $(ut,{id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueString:s.currentTarget.value})});case"text":return $(mb,{id:l,name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueString:s.currentTarget.value})});case"attachment":return $(ub,{py:4,children:$(xr,{name:l,defaultValue:i?.value,onChange:s=>a({valueAttachment:s})})});case"reference":return $(Zo,{name:l,required:t.required,targetTypes:fa(t),searchCriteria:lc(t,o.subject,o.encounter),defaultValue:i?.value,onChange:s=>a({valueReference:s})});case"quantity":return $(Ae,{name:l,required:t.required,defaultValue:i?.value,onChange:s=>a({valueQuantity:s}),disableWheel:!0});case"choice":case"open-choice":return bb(t)&&!t.answerValueSet?$(hb,{name:l,item:t,initial:f,response:r,onChangeAnswer:s=>a(s)}):$(yb,{name:l,item:t,initial:f,response:r,onChangeAnswer:s=>a(s)});default:return null}}function hb(e){let{name:o,item:t,initial:r,response:a}=e;if(!t.answerOption?.length)return $(xc,{});let n=Io({type:"QuestionnaireItemInitial",value:r},"value"),l=[""];for(let i of t.answerOption){let s=Io({type:"QuestionnaireItemAnswerOption",value:i},"value");l.push(mc(s))}let f=Rl(a)??n;if(t.repeats){let{propertyName:i,data:s}=Rb(e.item),u=Sb(a);return $(cb,{data:s,placeholder:"Select items",searchable:!0,defaultValue:u||[mc(n)],onChange:c=>{let d=ac(c,i,t);e.onChangeAnswer(d)}})}return $(db,{id:o,name:o,onChange:i=>{let s=i.currentTarget.selectedIndex;if(s===0){e.onChangeAnswer({});return}let u=t.answerOption[s-1],c=Io({type:"QuestionnaireItemAnswerOption",value:u},"value"),d="value"+bl(c.type);e.onChangeAnswer({[d]:c.value})},defaultValue:ua(f?.value)||f?.value,data:l})}function yb(e){let{name:o,item:t,initial:r,onChangeAnswer:a,response:n}=e;return!t.answerOption?.length&&!t.answerValueSet?$(xc,{}):t.answerValueSet?$(Rr,{name:o,binding:t.answerValueSet,onChange:l=>a({valueCoding:l})}):$(vb,{name:n?.id??o,item:t,initial:r,response:n,onChangeAnswer:a})}function vb(e){let{name:o,item:t,initial:r,onChangeAnswer:a,response:n}=e,l=Ib("QuestionnaireItemAnswerOption","value[x]"),f=Io({type:"QuestionnaireItemInitial",value:r},"value"),i=[],s;if(t.answerOption)for(let d=0;d<t.answerOption.length;d++){let m=t.answerOption[d],p=`${o}-option-${d}`,x=Io({type:"QuestionnaireItemAnswerOption",value:m},"value");x?.value&&(f&&dc(x)===dc(f)&&(s=p),i.push([p,x]))}let u=Rl(n),c=Cb(i,u);return $(cc.Group,{name:o,value:c??s,onChange:d=>{let m=i.find(p=>p[0]===d);if(m){let p=m[1],x="value"+bl(p.type);a({[x]:p.value})}},children:i.map(([d,m])=>$(cc,{id:d,value:d,py:4,label:$(ce,{property:l,propertyType:m.type,value:m.value})},d))})}function xc(){return $(ut,{disabled:!0,placeholder:"No Answers Defined"})}function Ic(e){return Io({type:"QuestionnaireItemAnswer",value:e},"value")}function Rl(e,o=0){let t=e.answer;return Ic(t?.[o]??{})}function Sb(e){let o=e.answer;return o?o.map(r=>Ic(r)).map(r=>ua(r?.value)||r?.value):[]}function Cb(e,o){return e.find(t=>pb(t[1].value,o?.value))?.[0]}function mc(e){if(e)return e.type==="CodeableConcept"?xb(e.value):e.type==="Coding"?ua(e.value):e.type==="Reference"?ic(e):e.value.toString()}function bb(e){return!!e.extension?.some(o=>o.url==="http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl"&&o.valueCodeableConcept?.coding?.[0]?.code==="drop-down")}function Rb(e){if(e.answerOption?.length===0)return{propertyName:"",data:[]};let o=e.answerOption[0],t=Io({type:"QuestionnaireItemAnswerOption",value:o},"value"),r="value"+bl(t.type),a=(e.answerOption??[]).map(n=>({value:pc(n,r),label:pc(n,r)}));return{propertyName:r,data:a}}function pc(e,o){return ua(e.valueCoding)||e[o]?.toString()}import{Fragment as ct,jsx as L,jsxs as be}from"react/jsx-runtime";var Eb=Tb(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[1]}`,borderRadius:e.radius.sm,transition:"all 0.1s"},hovering:{border:`1.5px solid ${e.colors.blue[5]}`},editing:{border:`1.5px solid ${e.colors.gray[1]}`,borderLeft:`4px solid ${e.colors.blue[5]}`},questionBody:{maxWidth:600},topActions:{position:"absolute",right:32,top:1,padding:4,color:e.colors.gray[5],fontSize:e.fontSizes.xs},bottomActions:{position:"absolute",right:4,bottom:0,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementActions:{position:"absolute",right:8,top:0,paddingTop:8,fontSize:e.fontSizes.xs,"& a":{marginLeft:8}},movementIcons:{color:e.colors.gray[5]},columnAlignment:{display:"flex",flexDirection:"column"},linkIdInput:{width:100,marginBottom:4},typeSelect:{width:100}}));function Zq(e){let o=S(),t=X(e.questionnaire),[r,a]=ca(!1),[n,l]=ca(),[f,i]=ca(),[s,u]=ca();function c(){u(void 0)}function d(){i(void 0)}gc(()=>{o.requestSchema("Questionnaire").then(()=>a(!0)).catch(console.log)},[o]),gc(()=>(l(Hb(t??{resourceType:"Questionnaire"})),document.addEventListener("mouseover",c),document.addEventListener("click",d),()=>{document.removeEventListener("mouseover",c),document.removeEventListener("click",d)}),[t]);let m=(p,x)=>{l(p),e.autoSave&&!x&&e.onSubmit&&e.onSubmit(p)};return!r||!n?null:L("div",{children:be(H,{testid:"questionnaire-form",onSubmit:()=>e.onSubmit(n),children:[L(hc,{item:n,selectedKey:f,setSelectedKey:i,hoverKey:s,setHoverKey:u,onChange:m}),L(Pb,{type:"submit",children:"Save"})]})})}function hc(e){let{classes:o,cx:t}=Eb(),r=e.item,a=e.item,n=wb(e.item),l=n||a.type==="group",f=a.linkId??"[untitled]",i=e.selectedKey===e.item.id,s=e.hoverKey===e.item.id,u=Ob();u.current=e.item;function c(h){M(h),e.setSelectedKey(e.item.id)}function d(h){M(h),e.setHoverKey(e.item.id)}function m(h){let A=u.current;e.onChange({...A,item:A.item?.map(W=>W.id===h.id?h:W)})}function p(h,A){e.onChange({...e.item,item:[...e.item.item??[],h]},A)}function x(h){e.onChange({...e.item,item:e.item.item?.filter(A=>A!==h)})}function C(h,A){e.onChange({...u.current,[h]:A})}function y(h){e.onChange({...e.item,...h})}function v(h){e.onChange({...e.item,item:e.item.item?.map(A=>A===h?{...A,repeats:!A.repeats}:A)})}function b(h,A){let W=Ub(e.item.item,h,A);e.onChange({...e.item,item:W})}let P=t(o.section,{[o.editing]:i,[o.hovering]:s&&!i});return be("div",{"data-testid":a.linkId,className:P,onClick:c,onMouseOver:d,onFocus:d,children:[L("div",{className:o.questionBody,children:i?be(ct,{children:[n&&L(Tl,{size:"xl",defaultValue:r.title,onBlur:h=>C("title",h.currentTarget.value)}),!n&&L(Ab,{autosize:!0,minRows:2,defaultValue:a.text,onBlur:h=>C("text",h.currentTarget.value)}),a.type==="reference"&&L(Vb,{item:a,onChange:y}),tc(a)&&L(Lb,{item:a,onChange:h=>y(h)})]}):be(ct,{children:[r.title&&L(Mb,{children:r.title}),a.text&&L("div",{children:a.text}),!l&&L(jt,{item:a,index:0,onChange:()=>{},response:{}})]})}),a.item?.map((h,A)=>L("div",{children:L(hc,{item:h,selectedKey:e.selectedKey,setSelectedKey:e.setSelectedKey,hoverKey:e.hoverKey,isFirst:A===0,isLast:A===(e.item.item??[]).length-1,setHoverKey:e.setHoverKey,onChange:m,onRemove:()=>x(h),onRepeatable:v,onMoveUp:()=>b(A,-1),onMoveDown:()=>b(A,1)})},h.id)),!l&&L("div",{className:o.topActions,children:i?be(ct,{children:[L(Tl,{size:"xs",className:o.linkIdInput,defaultValue:a.linkId,onBlur:h=>C("linkId",h.currentTarget.value)}),!l&&L(Db,{size:"xs",className:o.typeSelect,defaultValue:a.type,onChange:h=>C("type",h.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"}]})]}):L("div",{children:f})}),!n&&L(Pl,{className:o.movementActions,children:be(Pl,{className:o.columnAlignment,children:[!e.isFirst&&L(Ee,{href:"#",onClick:h=>{h.preventDefault(),e.onMoveUp&&e.onMoveUp()},children:L(Ma,{"data-testid":"up-button",size:15,className:o.movementIcons})}),!e.isLast&&L(Ee,{href:"#",onClick:h=>{h.preventDefault(),e.onMoveDown&&e.onMoveDown()},children:L(Aa,{"data-testid":"down-button",size:15,className:o.movementIcons})})]})}),be("div",{className:o.bottomActions,children:[l&&be(ct,{children:[L(Ee,{href:"#",onClick:h=>{h.preventDefault(),p({id:Fo(),linkId:Bl("q"),type:"string",text:"Question"})},children:"Add item"}),L(Ee,{href:"#",onClick:h=>{h.preventDefault(),p({id:Fo(),linkId:Bl("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),n&&L(Ee,{href:"#",onClick:h=>{h.preventDefault(),p(Gb(),!0)},children:"Add Page"}),i&&!n&&be(ct,{children:[L(Ee,{href:"#",onClick:h=>{h.preventDefault(),e.onRepeatable&&e.onRepeatable(a)},children:a.repeats?"Remove Repeatable":"Make Repeatable"}),L(Ee,{href:"#",onClick:h=>{h.preventDefault(),e.onRemove&&e.onRemove()},children:"Remove"})]})]})]})}function Lb(e){let o=Fb("QuestionnaireItemAnswerOption","value[x]"),t=e.item.answerOption??[];return be("div",{children:[e.item.answerValueSet!==void 0?L(Tl,{placeholder:"Enter Value Set",defaultValue:e.item.answerValueSet,onChange:r=>e.onChange({...e.item,answerValueSet:r.target.value})}):L(Nb,{options:t,property:o,item:e.item,onChange:e.onChange}),be(Pl,{display:"flex",children:[L(Ee,{href:"#",onClick:r=>{M(r),e.onChange({...e.item,answerValueSet:void 0,answerOption:[...t,{id:Fo()}]})},children:"Add choice"}),L(Bb,{w:"lg"}),L(Ee,{href:"#",onClick:r=>{M(r),e.onChange({...e.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function Nb(e){return L("div",{children:e.options.map(o=>{let[t,r]=so({type:"QuestionnaireItemAnswerOption",value:o},"value");return be("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[L("div",{children:L(io,{name:"value[x]",property:e.property,defaultPropertyType:r,defaultValue:t,onChange:(a,n)=>{let l=[...e.options],f=l.findIndex(i=>i.id===o.id);l[f]={id:o.id,[n]:a},e.onChange({...e.item,answerOption:l})},outcome:void 0},o.id)}),L("div",{children:L(Ee,{href:"#",onClick:a=>{M(a),e.onChange({...e.item,answerOption:e.options.filter(n=>n.id!==o.id)})},children:"Remove"})})]},o.id)})})}function Vb(e){let o=fa(e.item)??[];return be(ct,{children:[o.map((t,r)=>be(kb,{children:[L(Xo,{name:"resourceType",placeholder:"Resource Type",defaultValue:t,onChange:a=>{e.onChange(sa(e.item,o.map(n=>n===t?a:n)))}}),L(Ee,{href:"#",onClick:a=>{M(a),e.onChange(sa(e.item,o.filter(n=>n!==t)))},children:"Remove"})]},`${t}-${r}`)),L(Ee,{href:"#",onClick:t=>{M(t),e.onChange(sa(e.item,[...o,""]))},children:"Add Resource Type"})]})}var kl=1,Dl=1;function Bl(e){return e+kl++}function Fo(){return"id-"+Dl++}function Hb(e){return{...e,id:e.id||Fo(),item:yc(e.item)}}function yc(e){if(e)return e.forEach(o=>{o.id?.match(/^id-\d+$/)&&(Dl=Math.max(Dl,parseInt(o.id.substring(3),10)+1)),o.linkId?.match(/^q\d+$/)&&(kl=Math.max(kl,parseInt(o.linkId.substring(1),10)+1))}),e.map(o=>({...o,id:o.id||Fo(),item:yc(o.item),answerOption:qb(o.answerOption)}))}function qb(e){if(e)return e.map(o=>({...o,id:o.id||Fo()}))}function Gb(){return{id:Fo(),linkId:Bl("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 Ub(e,o,t){let r=e??[],a=o+t;if(a<0||a>=r.length)return r;let n=[...r];return[n[o],n[a]]=[n[a],n[o]],n}import{Title as tR}from"@mantine/core";import{createReference as rR,getReferenceString as aR}from"@medplum/core";import{useEffect as Pc,useState as Fl}from"react";import{Button as Ml,Group as Yb,Stack as jb,Stepper as Cc}from"@mantine/core";import{Anchor as Qb}from"@mantine/core";import{useState as zb}from"react";import{jsx as da,jsxs as Xb}from"react/jsx-runtime";function ma(e){let{item:o,response:t,onChange:r}=e,[a,n]=zb(Wb(o,t??{}));if(!e.checkForQuestionEnabled(o)||!t)return null;if(o.type==="display")return da("p",{children:o.text},o.linkId);let l=o?.repeats&&o.type!=="choice"&&o.type!=="open-choice";return o.type==="boolean"?da(jt,{item:o,response:t,onChange:f=>r([f]),index:0},o.linkId):Xb(pe,{htmlFor:e.item.linkId,title:e.item.text,withAsterisk:e.item.required,children:[[...Array(a)].map((f,i)=>da(jt,{item:o,response:t,onChange:s=>r([s]),index:i},`${o.linkId}-${i}`)),l&&da(Qb,{onClick:()=>n(f=>f+1),children:"Add Item"})]},e.item.linkId)}function Wb(e,o){if(e.type==="choice"||e.type==="open-choice")return 1;let t=o.answer;return t?.length?t.length:1}import{Anchor as Jb,Stack as $b,Title as _b}from"@mantine/core";import{useState as Kb}from"react";import{Fragment as Zb,jsx as wo,jsxs as Sc}from"react/jsx-runtime";function Al(e){let[o,t]=Kb(e.response);if(o.length===0)return null;function r(n,l){let f=o.map((i,s)=>s===l?n[0]:i);t(f),e.onChange(f)}function a(){let n=Cl(e.item);t([...o,n])}return Sc(Zb,{children:[o.map((n,l)=>wo(vc,{item:e.item,response:n,checkForQuestionEnabled:e.checkForQuestionEnabled,onChange:f=>r(f,l)},n.id)),e.item.repeats&&wo(Jb,{onClick:a,children:`Add Group: ${e.item.text}`})]})}function vc(e){let{response:o,checkForQuestionEnabled:t,onChange:r}=e;function a(n){let f=o.item?.map(s=>n.find(c=>c.id===s.id)??s)?.concat(n.slice(1)),i={...o,item:f};r([i])}return e.checkForQuestionEnabled(e.item)?Sc("div",{children:[e.item.text&&wo(_b,{order:3,mb:"md",children:e.item.text}),wo($b,{children:e.item.item?.map(n=>n.type==="group"?n.repeats?wo(Al,{item:n,response:o.item?.filter(l=>l.linkId===n.linkId)??[],checkForQuestionEnabled:t,onChange:a},n.linkId):wo(vc,{item:n,checkForQuestionEnabled:t,response:o.item?.find(l=>l.linkId===n.linkId)??{},onChange:a},n.linkId):wo(ma,{item:n,response:o.item?.find(l=>l.linkId===n.linkId),onChange:a,checkForQuestionEnabled:t},n.linkId))})]},e.item.linkId):null}import{Fragment as oR,jsx as to,jsxs as Rc}from"react/jsx-runtime";function bc(e){let{items:o,response:t,activePage:r,onChange:a,nextStep:n,prevStep:l,numberOfPages:f,renderPages:i,submitButtonText:s,checkForQuestionEnabled:u}=e,c=o.map(d=>{let m=t?.item?.filter(x=>x.linkId===d.linkId)??[],p=d.type==="group"?to(Al,{item:d,response:m,onChange:a,checkForQuestionEnabled:u},d.linkId):to(ma,{item:d,response:m?.[0],onChange:a,checkForQuestionEnabled:u},d.linkId);return i?to(Cc.Step,{label:d.text,children:p},d.linkId):p});return Rc(oR,{children:[i&&to(Cc,{active:r??0,allowNextStepsSelect:!1,p:6,children:c}),!i&&to(jb,{children:c}),to(eR,{activePage:r??0,numberOfPages:f,nextStep:n,prevStep:l,submitButtonText:s})]})}function eR(e){let o=e.activePage>0,t=e.activePage<e.numberOfPages-1,r=e.activePage===e.numberOfPages-1;return Rc(Yb,{position:"right",mt:"xl",spacing:"xs",children:[o&&to(Ml,{onClick:e.prevStep,children:"Back"}),t&&to(Ml,{onClick:a=>{a.currentTarget.closest("form").reportValidity()&&e.nextStep()},children:"Next"}),r&&to(Ml,{type:"submit",children:e.submitButtonText??"Submit"})]})}import{jsx as wl,jsxs as lR}from"react/jsx-runtime";function Tc(e){let o=S(),t=o.getProfile(),[r,a]=Fl(!1),n=X(e.questionnaire),[l,f]=Fl(),[i,s]=Fl(0);Pc(()=>{o.requestSchema("Questionnaire").then(()=>o.requestSchema("QuestionnaireResponse")).then(()=>a(!0)).catch(console.log)},[o]),Pc(()=>{f(n?fc(n):void 0)},[n]);function u(x){let C=l?.item??[],v={resourceType:"QuestionnaireResponse",item:kc(C,Array.isArray(x)?x:[x])};f(v)}function c(x){return rc(x,l?.item??[])}if(!r||!n)return null;let d=uc(n),m=()=>s(x=>x+1),p=()=>s(x=>x-1);return wl(ia.Provider,{value:{subject:e.subject,encounter:e.encounter},children:lR(H,{testid:"questionnaire-form",onSubmit:()=>{e.onSubmit&&l&&e.onSubmit({...l,questionnaire:aR(n),subject:e.subject,source:rR(t),authored:new Date().toISOString(),status:"completed"})},children:[n.title&&wl(tR,{children:n.title}),wl(bc,{items:n.item??[],response:l,onChange:u,renderPages:d>1,activePage:i,numberOfPages:d,submitButtonText:e.submitButtonText,checkForQuestionEnabled:c,nextStep:m,prevStep:p})]})})}function nR(e,o){let t=kc(e.item??[],o.item??[]);return{...o,item:t.length>0?t:void 0,answer:o.answer&&o.answer.length>0?o.answer:e.answer}}function kc(e,o){let t=[],r=new Set;for(let a of e){let n=a.id,l=o.find(f=>f.id===n);l?(t.push(nR(a,l)),r.add(l.id)):t.push(a)}for(let a of o)r.has(a.id)||t.push(a);return t}import{ActionIcon as pa,Button as fR,createStyles as sR,Divider as iR,Group as er,NativeSelect as Ol,Stack as xa,Text as uR,TextInput as cR}from"@mantine/core";import{formatRange as Dc,getCodeBySystem as dR}from"@medplum/core";import{useEffect as mR,useState as El}from"react";import{jsx as _,jsxs as dt}from"react/jsx-runtime";var pR=sR(e=>({section:{position:"relative",margin:"4px 4px 8px 0",padding:"6px 12px 16px 6px",border:`1.5px solid ${e.colors.gray[3]}`,borderRadius:e.radius.sm,transition:"all 0.1s"}})),xR=["gender","age","gestationalAge","context","appliesTo","category"],IR={definition:{resourceType:"ObservationDefinition"},onSubmit:()=>{}};function NG(e){e=Object.assign(IR,e);let o=e.definition,[t,r]=El([]),[a,n]=El(1),[l,f]=El(1);return mR(()=>{let p=yR(o,f);r(vR(p.qualifiedInterval||[],n))},[o]),dt(H,{testid:"reference-range-editor",onSubmit:i,children:[_(xa,{children:t.map(p=>_(gR,{unit:CR(o.quantitativeDetails?.unit),onChange:c,onAdd:d,onRemove:m,onRemoveGroup:u,intervalGroup:p},`group-${p.id}`))}),_(pa,{title:"Add Group",size:"sm",onClick:p=>{M(p),s({id:`group-id-${a}`,filters:{},intervals:[]}),n(x=>x+1)},children:_(So,{})}),_(er,{position:"right",children:_(fR,{type:"submit",children:"Save"})})]});function i(){let p=t.flatMap(x=>x.intervals).filter(x=>!bR(x));e.onSubmit({...o,qualifiedInterval:p})}function s(p){r(x=>[...x,p])}function u(p){r(x=>x.filter(C=>C.id!==p.id))}function c(p,x){r(C=>{C=[...C];let y=C.find(b=>b.id===p),v=y?.intervals.findIndex(b=>b.id===x.id);return v!==void 0&&y?.intervals[v]&&(y.intervals[v]=x),C})}function d(p,x){x.id===void 0&&(x.id=`id-${l}`,f(C=>C+1)),r(C=>{C=[...C];let y=C.findIndex(v=>v.id===p);if(y!==-1){let v={...C[y]};x={...x,...v.filters},v.intervals=[...v.intervals,x],C[y]=v}return C})}function m(p,x){r(C=>{C=[...C];let y=C.find(v=>v.id===p);return y&&(y.intervals=y.intervals.filter(v=>v.id!==x.id)),C})}}function gR(e){let{intervalGroup:o,unit:t}=e,{classes:r}=pR();return _(uo,{"data-testid":o.id,className:r.section,children:dt(xa,{spacing:"lg",children:[_(er,{position:"right",children:_(pa,{title:"Remove Group","data-testid":`remove-group-button-${o.id}`,size:"sm",onClick:a=>{M(a),e.onRemoveGroup(o)},children:_(lo,{})},`remove-group-button-${o.id}`)}),_(hR,{intervalGroup:o,onChange:e.onChange}),_(iR,{}),o.intervals.map(a=>dt(xa,{spacing:"xs",children:[dt(er,{children:[_(cR,{"data-testid":`condition-${a.id}`,defaultValue:a.condition,label:"Condition: ",size:"sm",onChange:n=>{M(n),e.onChange(o.id,{...a,condition:n.currentTarget.value.trim()})}},`condition-${a.id}`),_(pa,{title:"Remove Interval",size:"sm","data-testid":`remove-interval-${a.id}`,onClick:n=>{M(n),e.onRemove(o.id,a)},children:_(lo,{})},`remove-interval-${a.id}`)]}),_(Lt,{onChange:n=>{e.onChange(o.id,{...a,range:n})},name:`range-${a.id}`,defaultValue:a.range},`range-${a.id}`)]},`interval-${a.id}`)),_(pa,{title:"Add Interval",size:"sm",onClick:a=>{M(a),e.onAdd(o.id,{range:{low:{unit:t},high:{unit:t}}})},children:_(So,{})})]})})}function hR(e){let{intervalGroup:o,onChange:t}=e;o.filters.age||(o.filters.age={});for(let r of["low","high"])o.filters.age[r]?.unit||(o.filters.age[r]={...o.filters.age[r],unit:"years",system:"http://unitsofmeasure.org"});return dt(xa,{style:{maxWidth:"50%"},children:[_(er,{children:_(Ol,{data:["","male","female"],label:"Gender:",defaultValue:o.filters.gender||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""&&(n=void 0),t(o.id,{...a,gender:n})}}})}),dt(er,{spacing:"xs",children:[_(uR,{component:"label",htmlFor:`div-age-${o.id}`,children:"Age:"}),_("div",{id:`div-age-${o.id}`,children:_(Lt,{name:`age-${o.id}`,defaultValue:o.filters.age,onChange:r=>{for(let a of o.intervals)t(o.id,{...a,age:r})}},`age-${o.id}`)})]}),_(Ol,{data:["","pre-puberty","follicular","midcycle","luteal","postmenopausal"],label:"Endocrine:",defaultValue:o.filters.context?.text||"",onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?(n=void 0,t(o.id,{...a,context:void 0})):t(o.id,{...a,context:{text:n,coding:[{code:n,system:"http://terminology.hl7.org/CodeSystem/referencerange-meaning"}]}})}}}),_(Ol,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:o.filters.category,onChange:r=>{for(let a of o.intervals){let n=r.currentTarget.value;n===""?t(o.id,{...a,category:void 0}):t(o.id,{...a,category:n})}}})]})}function yR(e,o){let t=e.qualifiedInterval||[],r=Math.max(...t.map(a=>{let n=parseInt(a.id?.substring(3)||"",10);return isNaN(n)?Number.NEGATIVE_INFINITY:n}))+1;return Number.isFinite(r)||(r=1),e={...e,qualifiedInterval:t.map(a=>({...a,id:a.id||`id-${r++}`}))},o(r),e}function vR(e,o){let t=1,r={};for(let a of e){let n=SR(a);n in r||(r[n]={id:`group-id-${t++}`,filters:Object.fromEntries(xR.map(l=>[l,a[l]])),intervals:[]}),r[n].intervals.push(a)}return o(t),Object.values(r)}function SR(e){return[`gender=${e.gender}`,`age=${Dc(e.age)}`,`gestationalAge=${Dc(e.gestationalAge)}`,`context=${e.context?.text}`,`appliesTo=${e.appliesTo?.map(t=>t.text).join("+")}`,`category=${e.category}`].join(":")}function CR(e){return e&&(dR(e,"http://unitsofmeasure.org")||e.text)}function bR(e){return e.range?.low?.value===void 0&&e.range?.high?.value===void 0}import{Button as Bc,Grid as Ia,Text as RR}from"@mantine/core";import{formatDateTime as PR,getReferenceString as TR}from"@medplum/core";import{Fragment as kR,useEffect as DR,useState as Ac}from"react";import{jsx as Je,jsxs as or}from"react/jsx-runtime";function JG(e){let o=S(),t=X(e.value),[r,a]=Ac(!1),[n,l]=Ac();if(DR(()=>{t&&!r&&(o.executeBatch(f(t)).then(l).catch(console.log),a(!0))},[o,t,r]),!t||!n)return null;return Je(Ia,{children:t.action?.map((s,u)=>{let c=s.resource&&i(s.resource),d=c?.input?.[0]?.valueReference,m=c?.output?.[0]?.valueReference;return or(kR,{children:[Je(Ia.Col,{span:1,p:"md",children:c?.status==="completed"?Je(Va,{}):Je(on,{color:"gray"})}),or(Ia.Col,{span:9,p:"xs",children:[Je(RR,{weight:500,children:s.title}),s.description&&Je("div",{children:s.description}),or("div",{children:["Last edited by\xA0",Je(Ue,{value:c?.meta?.author}),"\xA0on\xA0",PR(c?.meta?.lastUpdated)]}),or("div",{children:["Status: ",Je(Er,{status:c?.status||"unknown"})]})]}),or(Ia.Col,{span:2,p:"md",children:[d&&!m&&Je(Bc,{onClick:()=>e.onStart(c,d),children:"Start"}),d&&m&&Je(Bc,{onClick:()=>e.onEdit(c,d,m),children:"Edit"})]})]},`action-${u}`)})});function f(s){let u=[];if(s.action)for(let c of s.action)c.resource?.reference&&u.push({request:{method:"GET",url:c.resource.reference}});return{resourceType:"Bundle",type:"batch",entry:u}}function i(s){for(let u of n?.entry)if(u.resource&&s.reference===TR(u.resource))return u.resource}}import{createStyles as ER}from"@mantine/core";import{useEffect as LR,useState as NR}from"react";import{stringify as FR}from"@medplum/core";function ga(e,o){let t=BR(e,o);return AR(t,e,o)}function BR(e,o){let t=e.length,r=o.length,a=t+r+1,n=1+2*a,l=n/2|0,f=new Array(n);f[l+1]={i:0,j:-1,prev:void 0,snake:!0};for(let i=0;i<a;i++){for(let s=-i;s<=i;s+=2){let u=l+s,c=u+1,d=u-1,m=f[c],p=f[d],x,C=0;s===-i||s!==i&&p.i<m.i?(C=m.i,x=m):(C=p.i+1,x=p),f[d]=void 0;let y=C-s,v={i:C,j:y,prev:MR(x),snake:!1};for(;C<t&&y<r&&e[C]===o[y];)C++,y++;if(C>v.i&&(v={i:C,j:y,prev:v,snake:!0}),f[u]=v,C>=t&&y>=r)return f[u]}f[l+i-1]=void 0}}function AR(e,o,t){let r=[],a=e;for(a.snake&&(a=a.prev);a?.prev&&a.prev.j>=0;){let n=a.i,l=a.j;a=a.prev;let f=a.i,i=a.j,s={position:f,lines:o.slice(f,n)},u={position:i,lines:t.slice(i,l)},c;s.lines.length===0&&u.lines.length>0?c="insert":s.lines.length>0&&u.lines.length===0?c="delete":c="change",r.push({original:s,revised:u,type:c}),a.snake&&(a=a.prev)}return r}function MR(e){return e&&!e.snake&&e.prev?e.prev:e}function Mc(e){let o=e.entry.filter(r=>!!r.resource).map(r=>({meta:r.resource?.meta,lines:FR(r.resource,!0).match(/[^\r\n]+/g)})).sort((r,a)=>r.meta.lastUpdated.localeCompare(a.meta.lastUpdated)),t=o[0].lines.map(r=>({id:o[0].meta.versionId,meta:o[0].meta,value:r,span:1}));return wR(t,o),OR(t),t}function wR(e,o){for(let t=1;t<o.length;t++){let r=ga(o[t-1].lines,o[t].lines);for(let a of r){let n=a.original.position,l=a.original.lines,f=a.revised.lines;if((a.type==="delete"||a.type==="change")&&e.splice(n,l.length),a.type==="insert"||a.type==="change")for(let i=0;i<a.revised.lines.length;i++)e.splice(n+i,0,{id:o[t].meta.versionId,meta:o[t].meta,value:f[i],span:1})}}}function OR(e){let o=0;for(;o<e.length;){let t=o;for(;t<e.length&&e[t].id===e[o].id;)e[t].span=-1,t++;e[o].span=t-o,o=t}}function Fc(e,o){return`/${e.resourceType}/${e.id}/_history/${o}`}function wc(e){let o=Math.floor((Date.now()-Date.parse(e))/1e3),t=Math.floor(o/31536e3);if(t>0)return mt(t,"year");let r=Math.floor(o/2592e3);if(r>0)return mt(r,"month");let a=Math.floor(o/86400);if(a>0)return mt(a,"day");let n=Math.floor(o/3600);if(n>0)return mt(n,"hour");let l=Math.floor(o/60);return l>0?mt(l,"minute"):mt(o,"second")}function mt(e,o){return`${e} ${e===1?o:o+"s"} ago`}import{Fragment as HR,jsx as qe,jsxs as Oc}from"react/jsx-runtime";var VR=ER(e=>({container:{overflowX:"auto"},root:{border:`0.1px solid ${e.colors.gray[3]}`,borderCollapse:"collapse",borderRadius:e.radius.sm,borderSpacing:0,fontSize:e.fontSizes.xs,width:"100%","& td":{padding:"2px 4px 0 4px",verticalAlign:"top",whiteSpace:"nowrap"}},startRow:{borderTop:`0.1px solid ${e.colors.gray[3]}`},normalRow:{borderTop:0},author:{lineHeight:"10px"},dateTime:{borderRight:`0.1px solid ${e.colors.gray[3]}`,lineHeight:"20px"},lineNumber:{backgroundColor:e.colors.gray[1],border:0,color:e.colors.gray[5],fontFamily:e.fontFamilyMonospace,padding:`${e.spacing.xs} ${e.spacing.sm}`,textAlign:"right"},line:{fontFamily:e.fontFamilyMonospace,fontSize:e.fontSizes.sm,padding:`${e.spacing.xs} ${e.spacing.sm}`},pre:{margin:0}}));function s4(e){let{classes:o}=VR(),t=S(),[r,a]=NR(e.history);if(LR(()=>{!e.history&&e.resourceType&&e.id&&t.readHistory(e.resourceType,e.id).then(a).catch(console.log)},[t,e.history,e.resourceType,e.id]),!r)return qe("div",{children:"Loading..."});let n=r.entry?.[0]?.resource;if(!n)return null;let l=Mc(r);return qe("div",{className:o.container,children:qe("table",{className:o.root,children:qe("tbody",{children:l.map((f,i)=>Oc("tr",{className:f.span>0?o.startRow:o.normalRow,children:[f.span>0&&Oc(HR,{children:[qe("td",{className:o.author,rowSpan:f.span,children:qe(co,{value:f.meta.author,link:!0})}),qe("td",{className:o.dateTime,rowSpan:f.span,children:qe(le,{to:Fc(n,f.meta.versionId),children:wc(f.meta.lastUpdated)})})]}),qe("td",{className:o.lineNumber,children:i+1}),qe("td",{className:o.line,children:qe("pre",{className:o.pre,children:f.value})})]},"row-"+i))})})})}import{createStyles as qR}from"@mantine/core";import{stringify as Ec}from"@medplum/core";import{Fragment as QR,jsx as pt,jsxs as zR}from"react/jsx-runtime";var GR=qR(e=>({removed:{color:e.colors.red[7],textDecoration:"line-through"},added:{color:e.colors.green[7]}}));function x4(e){let o=e.original,t=e.revised;e.ignoreMeta&&(o={...o,meta:void 0},t={...t,meta:void 0});let r=Ec(o,!0).match(/[^\r\n]+/g),a=Ec(t,!0).match(/[^\r\n]+/g),n=ga(r,a);return pt("pre",{style:{color:"gray"},children:n.map((l,f)=>pt(UR,{delta:l},"delta"+f))})}function UR(e){let{classes:o}=GR();return zR(QR,{children:["...",pt("br",{}),e.delta.original.lines.length>0&&pt("div",{className:o.removed,children:e.delta.original.lines.join(`
72
- `)}),e.delta.revised.lines.length>0&&pt("div",{className:o.added,children:e.delta.revised.lines.join(`
73
- `)}),"...",pt("br",{})]})}import{Button as Lc,Group as WR,Stack as XR,TextInput as Nc}from"@mantine/core";import{deepClone as JR,tryGetProfile as $R}from"@medplum/core";import{useEffect as _R,useState as Vc}from"react";import{jsx as go,jsxs as Ll}from"react/jsx-runtime";function P4(e){let{outcome:o}=e,t=S(),r=X(e.defaultValue),[a,n]=Vc(),[l,f]=Vc();return _R(()=>{if(r)if(f(JR(r)),e.profileUrl){let i=e.profileUrl;t.requestProfileSchema(e.profileUrl).then(()=>{let s=$R(i);s?n(s.name):console.log(`Schema not found for ${i}`)}).catch(console.log)}else{let i=e.schemaName??r?.resourceType;t.requestSchema(i).then(()=>n(i)).catch(console.log)}},[t,r,e.schemaName,e.profileUrl]),!a||!l?go("div",{children:"Loading..."}):Ll("form",{noValidate:!0,autoComplete:"off",onSubmit:i=>{i.preventDefault(),e.onSubmit&&e.onSubmit(l)},children:[Ll(XR,{mb:"xl",children:[go(pe,{title:"Resource Type",htmlFor:"resourceType",outcome:o,children:go(Nc,{name:"resourceType",defaultValue:l.resourceType,disabled:!0})}),go(pe,{title:"ID",htmlFor:"id",outcome:o,children:go(Nc,{name:"id",defaultValue:l.id,disabled:!0})})]}),go(Ko,{typeName:a,defaultValue:l,outcome:o,onChange:f,profileUrl:e.profileUrl}),Ll(WR,{position:"right",mt:"xl",children:[go(Lc,{type:"submit",children:"OK"}),e.onDelete&&go(Lc,{variant:"outline",color:"red",type:"button",onClick:()=>{e.onDelete(l)},children:"Delete"})]})]})}import{Table as KR}from"@mantine/core";import{formatDateTime as ZR,normalizeErrorString as YR}from"@medplum/core";import{useEffect as jR,useState as eP}from"react";import{jsx as Re,jsxs as Nl}from"react/jsx-runtime";function O4(e){let o=S(),[t,r]=eP(e.history);return jR(()=>{!e.history&&e.resourceType&&e.id&&o.readHistory(e.resourceType,e.id).then(r).catch(console.log)},[o,e.history,e.resourceType,e.id]),t?Nl(KR,{withBorder:!0,withColumnBorders:!0,children:[Re("thead",{children:Nl("tr",{children:[Re("th",{children:"Author"}),Re("th",{children:"Date"}),Re("th",{children:"Version"})]})}),Re("tbody",{children:t.entry?.map((a,n)=>Re(oP,{entry:a},"entry-"+n))})]}):Re("div",{children:"Loading..."})}function oP(e){let{response:o,resource:t}=e.entry;return t?Nl("tr",{children:[Re("td",{children:Re(co,{value:t.meta?.author,link:!0})}),Re("td",{children:ZR(t.meta?.lastUpdated)}),Re("td",{children:Re(le,{to:tP(t),children:t.meta?.versionId})})]}):Re("tr",{children:Re("td",{colSpan:3,children:YR(o?.outcome)})})}function tP(e){return`/${e.resourceType}/${e.id}/_history/${e.meta?.versionId}`}import{Button as rP,createStyles as aP,Stack as nP,Text as lP}from"@mantine/core";import{getReferenceString as fP,isReference as sP}from"@medplum/core";import{useState as ha}from"react";import{jsx as ge,jsxs as xt}from"react/jsx-runtime";var iP=aP(e=>({container:{display:"flex",minHeight:400},info:{minWidth:300,padding:20,borderRight:`1px solid ${e.colors.gray[3]}`},selection:{minWidth:300,padding:20}}));function X4(e){let{classes:o}=iP(),t=X(e.schedule),r=X(e.questionnaire),[a,n]=ha(Or()),[l,f]=ha(),[i,s]=ha(),[u,c]=ha(),[d]=Zl("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",sP(e.schedule)?e.schedule.reference:fP(e.schedule)],["start","gt"+uP(a)],["start","lt"+cP(a)]]));if(!t||!d||!r)return null;let m=t.actor?.[0];return xt("div",{className:o.container,"data-testid":"scheduler",children:[xt("div",{className:o.info,children:[m&&ge(fe,{value:m,size:"xl"}),m&&ge(lP,{size:"xl",weight:500,children:ge(Ue,{value:m})}),ge("p",{children:"1 hour"}),l&&ge("p",{children:l.toLocaleDateString()}),i&&ge("p",{children:Hc(new Date(i.start))})]}),xt("div",{className:o.selection,children:[!l&&xt("div",{children:[ge("h3",{children:"Select date"}),ge(qs,{slots:d,onChangeMonth:n,onClick:f})]}),l&&!i&&xt("div",{children:[ge("h3",{children:"Select time"}),ge(nP,{children:d.map(p=>{let x=new Date(p.start);return x.getTime()>l.getTime()&&x.getTime()<l.getTime()+24*3600*1e3&&ge("div",{children:ge(rP,{variant:"outline",style:{width:150},onClick:()=>s(p),children:Hc(x)})},p.id)})})]}),l&&i&&!u&&ge(Tc,{questionnaire:r,submitButtonText:"Next",onSubmit:c}),l&&i&&u&&xt("div",{children:[ge("h3",{children:"You're all set!"}),ge("p",{children:"Check your email for a calendar invite."})]})]})]})}function uP(e){return qc(e.getTime())}function cP(e){return qc(e.getTime()+31*24*60*60*1e3)}function qc(e){let o=new Date(Math.max(Date.now(),e));return o.setHours(0,0,0,0),o.toISOString()}function Hc(e){return e.toLocaleTimeString([],{hour:"numeric",minute:"2-digit"})}import{createReference as ya}from"@medplum/core";import{jsx as dP}from"react/jsx-runtime";function j4(e){return dP(po,{value:e.serviceRequest,loadTimelineResources:async(o,t,r)=>{let a=`${t}/${r}`,n=100;return Promise.allSettled([o.readHistory("ServiceRequest",r),o.search("Communication",{"based-on":a,_count:n}),o.search("DiagnosticReport",{"based-on":a,_count:n}),o.search("Media",{"based-on":a,_count:n}),o.search("DocumentReference",{related:a,_count:n}),o.search("Task",{_filter:`based-on eq ${a} or focus eq ${a} or subject eq ${a}`,_count:n})])},createCommunication:(o,t,r)=>({resourceType:"Communication",status:"completed",basedOn:[ya(o)],subject:o.subject,sender:ya(t),sent:new Date().toISOString(),payload:[{contentString:r}]}),createMedia:(o,t,r)=>({resourceType:"Media",status:"completed",basedOn:[ya(o)],subject:o.subject,operator:ya(t),issued:new Date().toISOString(),content:r})})}import{Anchor as mP}from"@mantine/core";import{showNotification as pP}from"@mantine/notifications";import{normalizeErrorString as xP}from"@medplum/core";import{jsx as IP}from"react/jsx-runtime";function fU(e){let o=S(),{client:t,patient:r,encounter:a,children:n,...l}=e;function f(){o.createResource({resourceType:"SmartAppLaunch",patient:r,encounter:a}).then(i=>{let s=new URL(t.launchUri);s.searchParams.set("iss",o.getBaseUrl()+"fhir/R4"),s.searchParams.set("launch",i.id),window.location.assign(s.toString())}).catch(i=>pP({color:"red",message:xP(i),autoClose:!1}))}return IP(mP,{onClick:()=>f(),...l,children:n})}import{normalizeOperationOutcome as VP}from"@medplum/core";import{useEffect as HP,useState as $c}from"react";import{Anchor as Gc,Button as gP,Center as hP,Group as yP,Stack as vP,Text as SP,TextInput as CP,Title as bP}from"@mantine/core";import{normalizeOperationOutcome as RP}from"@medplum/core";import{useState as PP}from"react";import{jsx as Oo,jsxs as va}from"react/jsx-runtime";function Sa(e){let o=S(),[t,r]=PP();return va(H,{style:{maxWidth:400},onSubmit:async a=>{try{e.handleAuthResponse(await o.startNewProject({login:e.login,projectName:a.projectName}))}catch(n){r(RP(n))}},children:[va(hP,{sx:{flexDirection:"column"},children:[Oo(xo,{size:32}),Oo(bP,{children:"Create project"})]}),va(vP,{spacing:"xl",children:[Oo(CP,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:Q(t,"firstName")}),va(SP,{color:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",Oo(Gc,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",Oo(Gc,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),Oo(yP,{position:"right",mt:"xl",noWrap:!0,children:Oo(gP,{type:"submit",children:"Create project"})})]})}import{Anchor as Pa,Button as BP,Center as AP,Checkbox as MP,Divider as FP,Group as zc,PasswordInput as wP,Stack as OP,Text as Wc,TextInput as Hl}from"@mantine/core";import{normalizeOperationOutcome as Xc}from"@medplum/core";import{useEffect as EP,useState as LP}from"react";import{useEffect as TP,useRef as kP,useState as Vl}from"react";function Ca(e,o){let t=document.getElementsByTagName("head")[0],r=document.createElement("script");r.async=!0,r.src=e,r.onload=o??null,t.appendChild(r)}import{jsx as DP}from"react/jsx-runtime";function ba(e){let o=S(),{googleClientId:t,handleGoogleCredential:r}=e,a=kP(null),[n,l]=Vl(typeof google<"u"),[f,i]=Vl(!1),[s,u]=Vl(!1);return TP(()=>{if(typeof google>"u"){Ca("https://accounts.google.com/gsi/client",()=>l(!0));return}f||(google.accounts.id.initialize({client_id:t,callback:r}),i(!0)),a.current&&!s&&(google.accounts.id.renderButton(a.current,{}),u(!0))},[o,t,f,n,a,s,r]),t?DP("div",{ref:a}):null}function Ra(e){if(e)return e;if(typeof window<"u"){let o=window.location.protocol+"//"+window.location.host;if(("undefined"?.split(",")??[]).includes(o))return"__GOOGLE_CLIENT_ID__"}}function Uc(e){typeof grecaptcha>"u"&&Ca("https://www.google.com/recaptcha/api.js?render="+e)}function Qc(e){return new Promise((o,t)=>{grecaptcha.ready(async()=>{try{o(await grecaptcha.execute(e,{action:"submit"}))}catch(r){t(r)}})})}import{Fragment as NP,jsx as he,jsxs as It}from"react/jsx-runtime";function Jc(e){let o=Ra(e.googleClientId),t=e.recaptchaSiteKey,r=S(),[a,n]=LP(),l=br(a,void 0);return EP(()=>{t&&Uc(t)},[t]),It(H,{style:{maxWidth:400},onSubmit:async f=>{try{let i="";t&&(i=await Qc(t)),e.handleAuthResponse(await r.startNewUser({projectId:e.projectId,clientId:e.clientId,firstName:f.firstName,lastName:f.lastName,email:f.email,password:f.password,remember:f.remember==="true",recaptchaSiteKey:t,recaptchaToken:i}))}catch(i){n(Xc(i))}},children:[he(AP,{sx:{flexDirection:"column"},children:e.children}),he(ft,{issues:l}),o&&It(NP,{children:[he(zc,{position:"center",p:"xl",style:{height:70},children:he(ba,{googleClientId:o,handleGoogleCredential:async f=>{try{e.handleAuthResponse(await r.startGoogleLogin({googleClientId:f.clientId,googleCredential:f.credential,createUser:!0}))}catch(i){n(Xc(i))}}})}),he(FP,{label:"or",labelPosition:"center",my:"lg"})]}),It(OP,{spacing:"xl",children:[he(Hl,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:Q(a,"firstName")}),he(Hl,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:Q(a,"lastName")}),he(Hl,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:Q(a,"email")}),he(wP,{name:"password",label:"Password",autoComplete:"off",required:!0,error:Q(a,"password")}),It(Wc,{color:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",he(Pa,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",he(Pa,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),It(Wc,{color:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",he(Pa,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",he(Pa,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),It(zc,{position:"apart",mt:"xl",noWrap:!0,children:[he(MP,{name:"remember",label:"Remember me",size:"xs"}),he(BP,{type:"submit",children:"Create account"})]})]})}import{jsx as ql,jsxs as qP}from"react/jsx-runtime";function YU(e){let{type:o,projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,onSuccess:l}=e,f=S(),[i,s]=$c(),[u,c]=$c();HP(()=>{o==="patient"&&i&&f.startNewPatient({login:i,projectId:t}).then(m=>f.processCode(m.code)).then(()=>l()).catch(m=>c(VP(m)))},[f,o,t,i,l]);function d(m){m.code?f.processCode(m.code).then(()=>l()).catch(console.log):m.login&&s(m.login)}return qP(Ur,{width:450,children:[u&&ql("pre",{children:JSON.stringify(u,null,2)}),!i&&ql(Jc,{projectId:t,clientId:r,googleClientId:a,recaptchaSiteKey:n,handleAuthResponse:d,children:e.children}),i&&o==="project"&&ql(Sa,{login:i,handleAuthResponse:d})]})}import{showNotification as sd}from"@mantine/notifications";import{normalizeErrorString as id}from"@medplum/core";import{useCallback as Ul,useEffect as gT,useState as Ql}from"react";import{Anchor as _c,Button as Kc,Center as Zc,Checkbox as GP,Divider as UP,Group as Gl,PasswordInput as QP,Stack as zP,TextInput as WP}from"@mantine/core";import{normalizeOperationOutcome as XP}from"@medplum/core";import{useCallback as Ta,useState as Yc}from"react";import{Fragment as _P,jsx as ie,jsxs as tr}from"react/jsx-runtime";function jc(e){let[o,t]=Yc();return o?ie($P,{email:o,...e}):ie(JP,{setEmail:t,...e})}function JP(e){let{setEmail:o,onRegister:t,handleAuthResponse:r,children:a,disableEmailAuth:n,...l}=e,f=S(),i=!e.disableGoogleAuth&&Ra(e.googleClientId),s=Ta(async d=>{if(!d.authorizeUrl)return!1;let m=JSON.stringify({...await f.ensureCodeChallenge(l),domain:d.domain}),p=new URL(d.authorizeUrl);return p.searchParams.set("state",m),window.location.assign(p.toString()),!0},[f,l]),u=Ta(async d=>{let m=await f.post("auth/method",{email:d.email});await s(m)||o(d.email)},[f,s,o]),c=Ta(async d=>{let m=await f.startGoogleLogin({...l,googleCredential:d.credential});await s(m)||r(m)},[f,l,s,r]);return tr(H,{style:{maxWidth:400},onSubmit:u,children:[ie(Zc,{sx:{flexDirection:"column"},children:a}),i&&tr(_P,{children:[ie(Gl,{position:"center",p:"xl",style:{height:70},children:ie(ba,{googleClientId:i,handleGoogleCredential:c})}),!n&&ie(UP,{label:"or",labelPosition:"center",my:"lg"})]}),!n&&ie(WP,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0}),tr(Gl,{position:"apart",mt:"xl",spacing:0,noWrap:!0,children:[ie("div",{children:t&&ie(_c,{component:"button",type:"button",color:"dimmed",onClick:t,size:"xs",children:"Register"})}),!n&&ie(Kc,{type:"submit",children:"Next"})]})]})}function $P(e){let{onForgotPassword:o,handleAuthResponse:t,children:r,...a}=e,n=S(),[l,f]=Yc(),i=br(l,void 0),s=Ta(u=>{n.startLogin({...a,password:u.password,remember:u.remember==="on"}).then(t).catch(c=>f(XP(c)))},[n,a,t]);return tr(H,{style:{maxWidth:400},onSubmit:s,children:[ie(Zc,{sx:{flexDirection:"column"},children:r}),ie(ft,{issues:i}),ie(zP,{spacing:"xl",children:ie(QP,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:Q(l,"password")})}),tr(Gl,{position:"apart",mt:"xl",spacing:0,noWrap:!0,children:[o&&ie(_c,{component:"button",type:"button",color:"dimmed",onClick:o,size:"xs",children:"Forgot password"}),ie(GP,{id:"remember",name:"remember",label:"Remember me",size:"xs",sx:{lineHeight:1}}),ie(Kc,{type:"submit",children:"Sign in"})]})]})}import{Avatar as KP,Center as ZP,Group as YP,Stack as jP,Text as ed,Title as eT,UnstyledButton as oT}from"@mantine/core";import{normalizeOperationOutcome as tT}from"@medplum/core";import{useState as rT}from"react";import{jsx as Eo,jsxs as ka}from"react/jsx-runtime";function od(e){let o=S(),[t,r]=rT();return ka(jP,{children:[ka(ZP,{sx:{flexDirection:"column"},children:[Eo(xo,{size:32}),Eo(eT,{order:3,children:"Choose profile"})]}),Eo(ft,{outcome:t}),e.memberships.map(a=>Eo(oT,{onClick:()=>{o.post("auth/profile",{login:e.login,profile:a.id}).then(e.handleAuthResponse).catch(n=>r(tT(n)))},children:ka(YP,{children:[Eo(KP,{radius:"xl"}),ka("div",{style:{flex:1},children:[Eo(ed,{size:"sm",weight:500,children:a.profile?.display}),Eo(ed,{color:"dimmed",size:"xs",children:a.project?.display})]})]})},a.id))]})}import{Button as aT,Center as nT,Checkbox as lT,Group as fT,Stack as td,Title as sT}from"@mantine/core";import{jsx as Lo,jsxs as rd}from"react/jsx-runtime";function ad(e){let o=S();return Lo(H,{style:{maxWidth:400},onSubmit:t=>{o.post("auth/scope",{login:e.login,scope:Object.keys(t).join(" ")}).then(e.handleAuthResponse).catch(console.log)},children:rd(td,{children:[rd(nT,{sx:{flexDirection:"column"},children:[Lo(xo,{size:32}),Lo(sT,{children:"Choose scope"})]}),Lo(td,{children:(e.scope??"openid").split(" ").map(t=>Lo(lT,{id:t,name:t,label:t,defaultChecked:!0},t))}),Lo(fT,{position:"right",mt:"xl",children:Lo(aT,{type:"submit",children:"Set scope"})})]})})}import{Alert as iT,Button as uT,Center as cT,Group as dT,Stack as nd,TextInput as mT,Title as pT}from"@mantine/core";import{normalizeErrorString as xT}from"@medplum/core";import{useState as IT}from"react";import{jsx as ro,jsxs as ld}from"react/jsx-runtime";function fd(e){let o=S(),[t,r]=IT();return ro(H,{style:{maxWidth:400},onSubmit:a=>{r(void 0),o.post("auth/mfa/verify",{login:e.login,token:a.token}).then(e.handleAuthResponse).catch(n=>r(xT(n)))},children:ld(nd,{children:[ld(cT,{sx:{flexDirection:"column"},children:[ro(xo,{size:32}),ro(pT,{children:"Enter MFA code"})]}),t&&ro(iT,{icon:ro(vo,{size:16}),title:"Error",color:"red",children:t}),ro(nd,{children:ro(mT,{name:"token",label:"MFA code",required:!0})}),ro(dT,{position:"right",mt:"xl",children:ro(uT,{type:"submit",children:"Submit code"})})]})})}import{jsx as No}from"react/jsx-runtime";function oQ(e){let{login:o,chooseScopes:t,onSuccess:r,onForgotPassword:a,onRegister:n,onCode:l,...f}=e,i=S(),[s,u]=Ql(),[c,d]=Ql(!1),[m,p]=Ql(),x=Ul(v=>{l?l(v):i.processCode(v).then(()=>{r&&r()}).catch(b=>sd({color:"red",message:id(b)}))},[i,l,r]),C=Ul(v=>{d(!!v.mfaRequired),v.login&&u(v.login),v.memberships&&p(v.memberships),v.code&&(t?p(void 0):x(v.code))},[t,x]),y=Ul(v=>{x(v.code)},[x]);return gT(()=>{o&&!s&&i.get("auth/login/"+o).then(C).catch(v=>sd({color:"red",message:id(v)}))},[i,o,s,C]),No(Ur,{width:450,children:s?c?No(fd,{login:s,handleAuthResponse:C}):m?No(od,{login:s,memberships:m,handleAuthResponse:C}):e.projectId==="new"?No(Sa,{login:s,handleAuthResponse:C}):e.chooseScopes?No(ad,{login:s,scope:e.scope,handleAuthResponse:y}):No("div",{children:"Success"}):No(jc,{onForgotPassword:a,onRegister:n,handleAuthResponse:C,disableGoogleAuth:e.disableGoogleAuth,disableEmailAuth:e.disableEmailAuth,...f,children:e.children})})}export{Yl as AddressDisplay,tf as AddressInput,rf as AnnotationInput,wM as AppShell,Qo as AsyncAutocomplete,Mf as AttachmentArrayDisplay,wf as AttachmentArrayInput,Jo as AttachmentButton,Ge as AttachmentDisplay,xr as AttachmentInput,wt as BackboneElementDisplay,Ko as BackboneElementInput,qs as CalendarInput,Cr as CheckboxFormSection,mr as CodeInput,ye as CodeableConceptDisplay,_o as CodeableConceptInput,Nf as CodingDisplay,Rr as CodingInput,Vf as ContactDetailDisplay,Yf as ContactDetailInput,hr as ContactPointDisplay,Pr as ContactPointInput,uo as Container,Ve as DateTimeInput,t2 as DefaultResourceTimeline,Ef as DescriptionList,Lf as DescriptionListEntry,Fn as DiagnosticReportDisplay,Ur as Document,Zg as ElementDefinitionInputSelector,Ar as ElementDefinitionTypeInput,p2 as EncounterTimeline,Go as ErrorBoundary,hS as FhirPathTable,H as Form,pe as FormSection,Pf as Header,ur as HumanNameDisplay,ns as HumanNameInput,Hf as IdentifierDisplay,ss as IdentifierInput,fn as Loading,xo as Logo,vV as MeasureReportDisplay,le as MedplumLink,CT as MedplumProvider,fV as MemoizedFhirPathTable,_N as MemoizedSearchControl,qf as MoneyDisplay,is as MoneyInput,Af as Navbar,Qh as ObservationTable,ft as OperationOutcomeAlert,Yo as Panel,qH as PatientSummary,$H as PatientTimeline,mq as PlanDefinitionBuilder,ae as QuantityDisplay,Ae as QuantityInput,Zq as QuestionnaireBuilder,Tc as QuestionnaireForm,la as QuestionnaireItemType,yr as RangeDisplay,Lt as RangeInput,To as ReferenceDisplay,Zo as ReferenceInput,NG as ReferenceRangeEditor,gR as ReferenceRangeGroupEditor,YU as RegisterForm,JG as RequestGroupDisplay,Wf as ResourceArrayDisplay,Rs as ResourceArrayInput,fe as ResourceAvatar,co as ResourceBadge,s4 as ResourceBlame,x4 as ResourceDiff,P4 as ResourceForm,O4 as ResourceHistoryTable,kr as ResourceInput,Ue as ResourceName,ce as ResourcePropertyDisplay,io as ResourcePropertyInput,zn as ResourceTable,po as ResourceTimeline,X4 as Scheduler,nl as SearchChangeEvent,Do as SearchClickEvent,lS as SearchControl,Wi as SearchFieldEditor,Yi as SearchFilterEditor,ll as SearchLoadEvent,j4 as ServiceRequestTimeline,oQ as SignInForm,fU as SmartAppLaunchLink,Er as StatusBadge,Ii as Timeline,mo as TimelineItem,Fs as TimingInput,Kn as addDateFilterBetween,M2 as addField,ot as addFilter,Ei as addLastMonthFilter,Zn as addMissingFilter,Ni as addNextMonthFilter,Li as addThisMonthFilter,wi as addTodayFilter,Oi as addTomorrowFilter,Vi as addYearToDateFilter,Fi as addYesterdayFilter,we as buildFieldNameString,fc as buildInitialResponse,Cl as buildInitialResponseItem,A2 as clearFilters,Wr as clearFiltersOnField,es as convertIsoToLocal,os as convertLocalToIso,Ca as createScriptTag,Mi as deleteFilter,ic as formatReferenceString,Q as getErrorsForInput,tu as getFieldDefinitions,br as getIssuesForExpression,ac as getNewMultiSelectValues,uc as getNumberOfPages,Xt as getOpString,lc as getQuestionnaireItemReferenceFilter,fa as getQuestionnaireItemReferenceTargetTypes,Qc as getRecaptcha,Ui as getSearchOperators,qi as getSortField,Uc as initRecaptcha,tc as isChoiceQuestion,rc as isQuestionEnabled,Gi as isSortDescending,$w as isSupportedProfileStructureDefinition,Tf as parseForm,$l as reactContext,Qi as renderValue,Wt as setFilters,fv as setOffset,Hi as setPage,Ot as setPropertyValue,sa as setQuestionnaireItemReferenceTargetTypes,Yn as setSort,yi as sortByDateAndPriority,F2 as toggleSort,S as useMedplum,St as useMedplumContext,no as useMedplumNavigate,nr as useMedplumProfile,X as useResource,kT as useSearch,Kl as useSearchOne,Zl as useSearchResources};
71
+ }`.replace(/\s+/g," ");return(await medplum.graphql(query)).data.StructureDefinitionList[0]}function shouldFetchResourceType(targetType){return targetType.type==="profile"&&!targetType?.error&&isEmpty3(targetType.resourceType)}import{ActionIcon as ActionIcon3,Button as Button4,Group as Group17,Stack as Stack3}from"@mantine/core";import{getPathDisplayName as getPathDisplayName2,getPropertyDisplayName,isEmpty as isEmpty4,tryGetProfile as tryGetProfile3}from"@medplum/core";import{useEffect as useEffect5,useState as useState25}from"react";var ResourceArrayInput_default={indented:"ResourceArrayInput_indented"};import{arrayify,getElementDefinitionFromElements,getTypedPropertyValueWithSchema as getTypedPropertyValueWithSchema2,isPopulated as isPopulated2,matchDiscriminant}from"@medplum/core";function isDiscriminatorComponentMatch(typedValue,discriminator,slice){for(let elementList of[slice.elements,slice.typeSchema?.elements]){let nestedProp;if(isPopulated2(elementList)){let ed=getElementDefinitionFromElements(elementList,discriminator.path);ed&&(nestedProp=getTypedPropertyValueWithSchema2(typedValue.value,discriminator.path,ed))}if(nestedProp)return arrayify(nestedProp)?.some(v2=>matchDiscriminant(v2,discriminator,slice,elementList))??!1}return!1}function getValueSliceName(value,slices,discriminators){if(value)for(let slice of slices){let typedValue={value,type:slice.typeSchema?.name??slice.type[0].code};if(discriminators.every(d2=>isDiscriminatorComponentMatch(typedValue,d2,slice)))return slice.name}}function assignValuesIntoSlices(values,slices,slicing){if(!slicing||slicing.slices.length===0)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=getValueSliceName(value,slices,slicing.discriminator),sliceIndex=sliceName?slices.findIndex(slice=>slice.name===sliceName):-1;sliceIndex===-1&&(sliceIndex=slices.length),slicedValues[sliceIndex].push(value)}for(let i=0;i<slices.length;i++)slicedValues[i].length===0&&slicedValues[i].push(void 0);return slicedValues}function isSupportedSliceDefinition(slice){return slice.type!==void 0&&slice.type.length>0}import{jsx as jsx54,jsxs as jsxs30}from"react/jsx-runtime";function ResourceArrayInput(props){let{property}=props,medplum=s(),[loading,setLoading]=useState25(!0),[slices,setSlices]=useState25([]),[defaultValue2]=useState25(()=>Array.isArray(props.defaultValue)?props.defaultValue:[]),[slicedValues,setSlicedValues]=useState25([[]]),propertyTypeCode=property.type[0]?.code;useEffect5(()=>{if(!property.slicing){let emptySlices=[];setSlices(emptySlices);let results=assignValuesIntoSlices(defaultValue2,emptySlices,property.slicing);setSlicedValues(results),setLoading(!1);return}let supportedSlices=[],profileUrls=[],promises=[];for(let slice of property.slicing.slices){if(!isSupportedSliceDefinition(slice))continue;let sliceType=slice.type[0],profileUrl;isEmpty4(slice.elements)&&sliceType.profile&&(profileUrl=sliceType.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=tryGetProfile3(profileUrl);slice.typeSchema=typeSchema}}setSlices(supportedSlices);let results=assignValuesIntoSlices(defaultValue2,supportedSlices,property.slicing);setSlicedValues(results),setLoading(!1)}).catch(reason=>{console.error(reason),setLoading(!1)})},[medplum,property.slicing,propertyTypeCode,defaultValue2]);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 jsx54("div",{children:"Loading..."});let nonSliceIndex=slices.length,nonSliceValues=slicedValues[nonSliceIndex],showNonSliceValues=!(props.hideNonSliceValues??(propertyTypeCode==="Extension"&&slices.length>0)),propertyDisplayName=getPathDisplayName2(property.path);return jsxs30(Stack3,{className:props.indent?ResourceArrayInput_default.indented:void 0,children:[slices.map((slice,sliceIndex)=>jsx54(SliceInput,{slice,property,defaultValue:slicedValues[sliceIndex],onChange:newValue=>{setValuesWrapper(newValue,sliceIndex)},testId:`slice-${slice.name}`},slice.name)),showNonSliceValues&&nonSliceValues.map((value,valueIndex)=>jsxs30(Group17,{wrap:"nowrap",style:{flexGrow:1},children:[jsx54("div",{style:{flexGrow:1},children:jsx54(ResourcePropertyInput,{arrayElement:!0,property:props.property,name:props.name+"."+valueIndex,defaultValue:value,onChange:newValue=>{let newNonSliceValues=[...nonSliceValues];newNonSliceValues[valueIndex]=newValue,setValuesWrapper(newNonSliceValues,nonSliceIndex)},defaultPropertyType:void 0,outcome:props.outcome})}),jsx54(RemoveButton,{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&&jsx54(Group17,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:jsx54(AddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newNonSliceValues=[...nonSliceValues];newNonSliceValues.push(void 0),setValuesWrapper(newNonSliceValues,nonSliceIndex)},testId:"nonsliced-add"})})]})}function SliceInput(props){let{slice,property}=props,[values,setValues]=useState25(()=>props.defaultValue.map(v2=>v2??{}));function setValuesWrapper(newValues){setValues(newValues),props.onChange&&props.onChange(newValues)}let required=slice.min>0,indentedStack=isEmpty4(slice.elements),propertyDisplayName=getPropertyDisplayName(slice.name);return jsx54(FormSection,{title:propertyDisplayName,description:slice.definition,withAsterisk:required,fhirPath:`${property.path}:${slice.name}`,testId:props.testId,children:jsxs30(Stack3,{className:indentedStack?ResourceArrayInput_default.indented:void 0,children:[values.map((value,valueIndex)=>jsxs30(Group17,{wrap:"nowrap",children:[jsx54("div",{style:{flexGrow:1},children:jsx54(Stack3,{children:isEmpty4(slice.elements)?jsx54(ElementDefinitionTypeInput,{elementDefinitionType:slice.type[0],name:slice.name,defaultValue:value,onChange:newValue=>{let newValues=[...values];newValues[valueIndex]=newValue,setValuesWrapper(newValues)},outcome:void 0,min:slice.min,max:slice.max,binding:void 0,path:slice.path}):jsx54(ElementsInput,{type:slice.type[0].code,elements:slice.elements,defaultValue:value,outcome:props.outcome,onChange:newValue=>{let newValues=[...values];newValues[valueIndex]=newValue,setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-elements-${valueIndex}`})})}),values.length>slice.min&&jsx54(RemoveButton,{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&&jsx54(Group17,{wrap:"nowrap",style:{justifyContent:"flex-start"},children:jsx54(AddButton,{propertyDisplayName,onClick:e=>{killEvent(e);let newValues=[...values,void 0];setValuesWrapper(newValues)},testId:props.testId&&`${props.testId}-add`})})]})})}function AddButton({propertyDisplayName,onClick,testId}){let text=propertyDisplayName?`Add ${propertyDisplayName}`:"Add";return propertyDisplayName?jsx54(Button4,{title:text,size:"sm",color:"green.6",variant:"subtle","data-testid":testId,leftSection:jsx54(IconCirclePlus,{size:"1.25rem"}),onClick,children:text}):jsx54(ActionIcon3,{title:text,color:"green.6","data-testid":testId,onClick,children:jsx54(IconCirclePlus,{size:"1.25rem"})})}function RemoveButton({propertyDisplayName,onClick,testId}){return jsx54(ActionIcon3,{title:propertyDisplayName?`Remove ${propertyDisplayName}`:"Remove",color:"red.5","data-testid":testId,onClick,children:jsx54(IconCircleMinus,{size:"1.25rem"})})}import{ActionIcon as ActionIcon4,Flex,Textarea}from"@mantine/core";import{useClipboard}from"@mantine/hooks";import{showNotification as showNotification4}from"@mantine/notifications";import{useRef as useRef8,useState as useState26}from"react";import{jsx as jsx55,jsxs as jsxs31}from"react/jsx-runtime";function SensitiveTextarea(props){let[revealed,setRevealed]=useState26(!1),clipboard=useClipboard(),ref=useRef8(null),styles={...props.styles};return revealed||(styles.input||(styles.input={}),styles.input.WebkitTextSecurity="disc"),jsxs31(Flex,{gap:"xs",children:[jsx55(Textarea,{...props,styles:{...styles,root:{...styles.root??{},flexGrow:1}},ref,autosize:!0,minRows:1,onFocus:()=>setRevealed(!0),onBlur:()=>setRevealed(!1)}),jsx55(ActionIcon4,{title:"Copy secret",onClick:()=>{clipboard.copy(ref.current?.value),showNotification4({color:"green",message:"Copied"})},children:jsx55(IconCopy,{})})]})}import{Button as Button5,Chip,Group as Group18,Modal as Modal2,NativeSelect as NativeSelect8,Stack as Stack4,Switch,TextInput as TextInput11}from"@mantine/core";import{formatTiming as formatTiming2}from"@medplum/core";import{useRef as useRef9,useState as useState27}from"react";import{Fragment as Fragment19,jsx as jsx56,jsxs as jsxs32}from"react/jsx-runtime";var daysOfWeek=["sun","mon","tue","wed","thu","fri","sat"];function TimingInput(props){let[value,setValue]=useState27(props.defaultValue),[open,setOpen]=useState27(!1),valueRef=useRef9();return valueRef.current=value,jsxs32(Fragment19,{children:[jsxs32(Group18,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx56("span",{children:formatTiming2(valueRef.current)||"No repeat"}),jsx56(Button5,{onClick:()=>setOpen(!0),children:"Edit"})]}),jsx56(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]=useState27(props.defaultValue||defaultValue),valueRef=useRef9();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 jsx56(Modal2,{title:"Timing",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:()=>props.onCancel(),children:jsxs32(Stack4,{children:[jsx56(FormSection,{title:"Starts on",htmlFor:"timing-dialog-start",children:jsx56(DateTimeInput,{name:"timing-dialog-start",onChange:newValue=>setStart(newValue)})}),jsx56(Switch,{label:"Repeat",checked:!!value.repeat,onChange:e=>setRepeat(e.currentTarget.checked?defaultValue.repeat:void 0)}),value.repeat&&jsxs32(Fragment19,{children:[jsx56(FormSection,{title:"Repeat every",htmlFor:"timing-dialog-period",children:jsxs32(Group18,{gap:"xs",grow:!0,wrap:"nowrap",children:[jsx56(TextInput11,{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)}),jsx56(NativeSelect8,{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"&&jsx56(FormSection,{title:"Repeat on",children:jsx56(Chip.Group,{multiple:!0,onChange:setDaysOfWeek,children:jsx56(Group18,{justify:"space-between",mt:"md",gap:"xs",children:daysOfWeek.map(day=>jsx56(Chip,{value:day,size:"xs",radius:"xl",children:day.charAt(0).toUpperCase()},day))})})})]}),jsx56(Group18,{justify:"flex-end",children:jsx56(Button5,{onClick:()=>props.onOk(value),children:"OK"})})]})})}import{jsx as jsx57,jsxs as jsxs33}from"react/jsx-runtime";function ResourcePropertyInput(props){let{property,name,defaultValue:defaultValue2,onChange}=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===PropertyType2.Attachment)return jsx57(AttachmentArrayInput,{name,defaultValue:defaultValue2,onChange});let indent=propertyTypes[0]?.code!==PropertyType2.Extension;return jsx57(ResourceArrayInput,{property,name,defaultValue:defaultValue2,indent,onChange,outcome:props.outcome})}return propertyTypes.length>1?jsx57(ElementDefinitionInputSelector,{elementDefinitionTypes:propertyTypes,...props}):jsx57(ElementDefinitionTypeInput,{name,defaultValue:defaultValue2,onChange:newValue=>{if(props.onChange){let newPropName=props.name.replace("[x]",capitalize2(propertyTypes[0].code));props.onChange(newValue,newPropName)}},outcome:props.outcome,elementDefinitionType:propertyTypes[0],min:property.min,max:property.min,binding:property.binding,path:property.path})}function ElementDefinitionInputSelector(props){let propertyTypes=props.elementDefinitionTypes,initialPropertyType;props.defaultPropertyType&&(initialPropertyType=propertyTypes.find(t=>t.code===props.defaultPropertyType)),initialPropertyType||(initialPropertyType=propertyTypes[0]);let[selectedType,setSelectedType]=useState28(initialPropertyType);return jsxs33(Group19,{gap:"xs",grow:!0,wrap:"nowrap",align:"flex-start",children:[jsx57(NativeSelect9,{style:{width:"200px"},defaultValue:selectedType.code,onChange:e=>{setSelectedType(propertyTypes.find(type=>type.code===e.currentTarget.value))},data:propertyTypes.map(type=>({value:type.code,label:type.code}))}),jsx57(ElementDefinitionTypeInput,{name:props.name,defaultValue:props.defaultValue,outcome:props.outcome,elementDefinitionType:selectedType,onChange:newValue=>{props.onChange&&props.onChange(newValue,props.name.replace("[x]",capitalize2(selectedType.code)))},min:props.property.min,max:props.property.max,binding:props.property.binding,path:props.property.path})]})}function ElementDefinitionTypeInput(props){let{name,defaultValue:defaultValue2,onChange,outcome,binding,path}=props,required=props.min!==void 0&&props.min>0,propertyType=props.elementDefinitionType.code;if(!propertyType)return jsx57("div",{children:"Property type not specified "});let properties={name,defaultValue:defaultValue2,onChange,outcome,path};switch(propertyType){case PropertyType2.SystemString:case PropertyType2.canonical:case PropertyType2.string:case PropertyType2.time:case PropertyType2.uri:case PropertyType2.url:return props.path==="Project.secret.value[x]"?jsx57(SensitiveTextarea,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{props.onChange&&props.onChange(e.currentTarget.value)},error:getErrorsForInput(props.outcome,name)}):jsx57(TextInput12,{id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case PropertyType2.date:return jsx57(TextInput12,{type:"date",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)},error:getErrorsForInput(outcome,name)});case PropertyType2.dateTime:case PropertyType2.instant:return jsx57(DateTimeInput,{name,defaultValue:defaultValue2,onChange,outcome});case PropertyType2.decimal:case PropertyType2.integer:case PropertyType2.positiveInt:case PropertyType2.unsignedInt:return jsx57(TextInput12,{type:"number",step:propertyType===PropertyType2.decimal?"any":"1",id:name,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.valueAsNumber)}});case PropertyType2.code:return jsx57(CodeInput,{...properties,binding:binding?.valueSet});case PropertyType2.boolean:return jsx57(Checkbox,{id:name,name,"data-testid":name,defaultChecked:!!defaultValue2,onChange:e=>{onChange&&onChange(e.currentTarget.checked)}});case PropertyType2.base64Binary:case PropertyType2.markdown:return jsx57(Textarea2,{id:name,spellCheck:propertyType!==PropertyType2.base64Binary,name,"data-testid":name,defaultValue:defaultValue2,required,onChange:e=>{onChange&&onChange(e.currentTarget.value)}});case PropertyType2.Address:return jsx57(AddressInput,{...properties});case PropertyType2.Annotation:return jsx57(AnnotationInput,{...properties});case PropertyType2.Attachment:return jsx57(AttachmentInput,{...properties});case PropertyType2.CodeableConcept:return jsx57(CodeableConceptInput,{binding:binding?.valueSet,...properties});case PropertyType2.Coding:return jsx57(CodingInput,{binding:binding?.valueSet,...properties});case PropertyType2.ContactDetail:return jsx57(ContactDetailInput,{...properties});case PropertyType2.ContactPoint:return jsx57(ContactPointInput,{...properties});case PropertyType2.Extension:return jsx57(ExtensionInput,{...properties,propertyType:props.elementDefinitionType});case PropertyType2.HumanName:return jsx57(HumanNameInput,{...properties});case PropertyType2.Identifier:return jsx57(IdentifierInput,{...properties});case PropertyType2.Money:return jsx57(MoneyInput,{...properties});case PropertyType2.Period:return jsx57(PeriodInput,{...properties});case PropertyType2.Duration:case PropertyType2.Quantity:return jsx57(QuantityInput,{...properties});case PropertyType2.Range:return jsx57(RangeInput,{...properties});case PropertyType2.Ratio:return jsx57(RatioInput,{...properties});case PropertyType2.Reference:return jsx57(ReferenceInput,{...properties,targetTypes:getTargetTypes(props.elementDefinitionType)});case PropertyType2.Timing:return jsx57(TimingInput,{...properties});case PropertyType2.Dosage:case PropertyType2.UsageContext:default:return jsx57(BackboneElementInput,{typeName:propertyType,defaultValue:defaultValue2,onChange,outcome})}}var RESOURCE_TYPE_URL_PREFIXES=[`${HTTP_HL7_ORG}/fhir/StructureDefinition/`,"https://medplum.com/fhir/StructureDefinition/"];function getTargetTypes(elementDefinitionType){return elementDefinitionType?.targetProfile?.map(p2=>{let resourceTypePrefix=RESOURCE_TYPE_URL_PREFIXES.find(prefix=>p2.startsWith(prefix));return resourceTypePrefix?p2.slice(resourceTypePrefix.length):p2})}import{jsx as jsx58}from"react/jsx-runtime";var EXTENSION_KEYS=new Set(["extension","modifierExtension"]),IGNORED_PROPERTIES=new Set(["id",...DEFAULT_IGNORED_PROPERTIES].filter(prop=>!EXTENSION_KEYS.has(prop)));function ElementsInput(props){let{elements}=props,[value,setValue]=useState29(props.defaultValue??{}),fixedProperties=useMemo5(()=>{let result=Object.create(null);for(let[key,property]of Object.entries(elements))property.fixed&&(result[key]=property);return result},[elements]);function setValueWrapper(newValue){for(let[key,prop]of Object.entries(fixedProperties))setPropertyValue(newValue,key,key,prop,prop.fixed.value);setValue(newValue),props.onChange&&props.onChange(newValue)}return jsx58(Stack5,{style:{flexGrow:1},"data-testid":props.testId,children:Object.entries(elements).map(([key,element])=>{if(!element.type||element.max===0||key==="url"&&element.fixed||EXTENSION_KEYS.has(key)&&!isPopulated3(element.slicing?.slices))return null;if(IGNORED_PROPERTIES.has(key))return null;if(DEFAULT_IGNORED_NON_NESTED_PROPERTIES.includes(key)&&element.path.split(".").length===2||key.includes("."))return null;let[propertyValue,propertyType]=getValueAndTypeFromElement(value,key,element),required=element.min!==void 0&&element.min>0,resourcePropertyInput=jsx58(ResourcePropertyInput,{property:element,name:key,defaultValue:propertyValue,defaultPropertyType:propertyType,onChange:(newValue,propName)=>{setValueWrapper(setPropertyValue({...value},key,propName??key,element,newValue))},arrayElement:void 0,outcome:props.outcome},key);return props.type==="Extension"||EXTENSION_KEYS.has(key)?resourcePropertyInput:element.type.length===1&&element.type[0].code==="boolean"?jsx58(CheckboxFormSection,{title:getPathDisplayName3(key),description:element.description,htmlFor:key,fhirPath:element.path,withAsterisk:required,children:resourcePropertyInput},key):jsx58(FormSection,{title:getPathDisplayName3(key),description:element.description,withAsterisk:required,htmlFor:key,outcome:props.outcome,fhirPath:element.path,children:resourcePropertyInput},key)})})}import{jsx as jsx59,jsxs as jsxs34}from"react/jsx-runtime";function BackboneElementInput(props){let{typeName}=props,[value,setValue]=useState30(props.defaultValue??{}),backboneContext=useContext5(BackboneElementContext),profileUrl=props.profileUrl??backboneContext.profileUrl,typeSchema=useMemo6(()=>tryGetDataType2(typeName,profileUrl),[typeName,profileUrl]),context=useMemo6(()=>buildBackboneElementContext(typeSchema,profileUrl),[typeSchema,profileUrl]);if(!typeSchema)return jsxs34("div",{children:[typeName,"\xA0not implemented"]});function setValueWrapper(newValue){setValue(newValue),props.onChange&&props.onChange(newValue)}return jsx59(BackboneElementContext.Provider,{value:context,children:jsx59(ElementsInput,{type:typeSchema.type,elements:typeSchema.elements,defaultValue:value,onChange:setValueWrapper,outcome:props.outcome})})}import{Button as Button6,Group as Group20}from"@mantine/core";import{useMemo as useMemo7,useState as useState31}from"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}import{jsx as jsx60,jsxs as jsxs35}from"react/jsx-runtime";function CalendarInput(props){let{onChangeMonth,onClick}=props,[month,setMonth]=useState31(getStartMonth);function moveMonth(delta){setMonth(currMonth=>{let newMonth=new Date(currMonth.getTime());return newMonth.setMonth(currMonth.getMonth()+delta),onChangeMonth(newMonth),newMonth})}let grid=useMemo7(()=>buildGrid(month,props.slots),[month,props.slots]);return jsxs35("div",{children:[jsxs35(Group20,{justify:"space-between",gap:"xs",grow:!0,wrap:"nowrap",children:[jsx60("p",{style:{flex:1},children:getMonthString(month)}),jsxs35(Group20,{justify:"flex-end",gap:"xs",children:[jsx60(Button6,{variant:"outline","aria-label":"Previous month",onClick:()=>moveMonth(-1),children:"<"}),jsx60(Button6,{variant:"outline","aria-label":"Next month",onClick:()=>moveMonth(1),children:">"})]})]}),jsxs35("table",{className:CalendarInput_default.table,children:[jsx60("thead",{children:jsxs35("tr",{children:[jsx60("th",{children:"SUN"}),jsx60("th",{children:"MON"}),jsx60("th",{children:"TUE"}),jsx60("th",{children:"WED"}),jsx60("th",{children:"THU"}),jsx60("th",{children:"FRI"}),jsx60("th",{children:"SAT"})]})}),jsx60("tbody",{children:grid.map((week,weekIndex)=>jsx60("tr",{children:week.map((day,dayIndex)=>jsx60("td",{children:day&&jsx60(Button6,{disabled:!day.available,onClick:()=>onClick(day.date),children:day.date.getDate()})},"day-"+dayIndex))},"week-"+weekIndex))})]})]})}function buildGrid(startDate,slots){let d2=new Date(startDate.getFullYear(),startDate.getMonth()),grid=[],row=[];for(let i=0;i<d2.getDay();i++)row.push(void 0);for(;d2.getMonth()===startDate.getMonth();)row.push({date:new Date(d2.getTime()),available:isDayAvailable(d2,slots)}),d2.getDay()===6&&(grid.push(row),row=[]),d2.setDate(d2.getDate()+1);if(d2.getDay()!==0){for(let i=d2.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}import{Container as MantineContainer}from"@mantine/core";var Container_default={root:"Container_root"};import{jsx as jsx61}from"react/jsx-runtime";function Container(props){let{children,...others}=props;return jsx61(MantineContainer,{className:Container_default.root,...others,children})}import{ActionIcon as ActionIcon6,Center as Center2,Group as Group24,Loader as Loader3,Menu as Menu3,ScrollArea as ScrollArea2,TextInput as TextInput13}from"@mantine/core";import{showNotification as showNotification5,updateNotification}from"@mantine/notifications";import{getReferenceString as getReferenceString5,normalizeErrorString as normalizeErrorString5}from"@medplum/core";import{useCallback as useCallback8,useEffect as useEffect9,useRef as useRef10,useState as useState36}from"react";import{Group as Group22,List,Stack as Stack7,Text as Text6,Title}from"@mantine/core";import{capitalize as capitalize3,formatCodeableConcept as formatCodeableConcept2,formatDateTime as formatDateTime2,formatObservationValue,isReference as isReference2}from"@medplum/core";import{useEffect as useEffect6,useState as useState33}from"react";import{Blockquote,Stack as Stack6}from"@mantine/core";var NoteDisplay_default={noteBody:"NoteDisplay_noteBody",noteCite:"NoteDisplay_noteCite",noteRoot:"NoteDisplay_noteRoot"};import{jsx as jsx62}from"react/jsx-runtime";function NoteDisplay({value}){return value?jsx62(Stack6,{justify:"flex-start",gap:"xs",children:value.map(note=>note.text&&jsx62(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}import{Group as Group21}from"@mantine/core";import{Text as Text5}from"@mantine/core";import{getDisplayString as getDisplayString4,isOk,normalizeErrorString as normalizeErrorString4}from"@medplum/core";import{useState as useState32}from"react";import{jsx as jsx63}from"react/jsx-runtime";function ResourceName(props){let{value,link,...rest}=props,[outcome,setOutcome]=useState32(),resource=j(value,setOutcome),text;if(outcome&&!isOk(outcome))text=`[${normalizeErrorString4(outcome)}]`;else if(resource)text=getDisplayString4(resource);else return null;return link?jsx63(MedplumLink,{to:value,...rest,children:text}):jsx63(Text5,{component:"span",...rest,children:text})}import{jsx as jsx64,jsxs as jsxs36}from"react/jsx-runtime";function ResourceBadge(props){return jsxs36(Group21,{gap:"xs",children:[jsx64(ResourceAvatar,{size:24,radius:12,value:props.value,link:props.link}),jsx64(ResourceName,{value:props.value,link:props.link})]})}import{Badge}from"@mantine/core";import{jsx as jsx65}from"react/jsx-runtime";var statusToColor={draft:"blue",active:"blue","on-hold":"yellow",revoked:"red",completed:"green","entered-in-error":"red",unknown:"gray",retired:"gray",registered:"blue",preliminary:"blue",final:"green",amended:"yellow",corrected:"yellow",cancelled:"red",requested:"blue",received:"blue",accepted:"blue",rejected:"red",ready:"blue","in-progress":"blue",failed:"red",proposed:"blue",pending:"blue",booked:"blue",arrived:"blue",fulfilled:"green",noshow:"red","checked-in":"blue",waitlist:"gray",routine:"gray",urgent:"red",asap:"red",stat:"red","not-done":"red"};function StatusBadge(props){return jsx65(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"};import{Fragment as Fragment20,jsx as jsx66,jsxs as jsxs37}from"react/jsx-runtime";DiagnosticReportDisplay.defaultProps={hideObservationNotes:!1,hideSpecimenInfo:!1};function DiagnosticReportDisplay(props){let medplum=s(),diagnosticReport=j(props.value),[specimens,setSpecimens]=useState33();if(useEffect6(()=>{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 jsxs37(Stack7,{children:[jsx66(Title,{children:"Diagnostic Report"}),jsx66(DiagnosticReportHeader,{value:diagnosticReport}),specimens&&!props.hideSpecimenInfo&&SpecimenInfo(specimens),diagnosticReport.result&&jsx66(ObservationTable,{hideObservationNotes:props.hideObservationNotes,value:diagnosticReport.result}),specimenNotes.length>0&&jsx66(NoteDisplay,{value:specimenNotes})]})}function DiagnosticReportHeader({value}){return jsxs37(Group22,{mt:"md",gap:30,children:[value.subject&&jsxs37("div",{children:[jsx66(Text6,{size:"xs",tt:"uppercase",c:"dimmed",children:"Subject"}),jsx66(ResourceBadge,{value:value.subject,link:!0})]}),value.resultsInterpreter?.map(interpreter=>jsxs37("div",{children:[jsx66(Text6,{size:"xs",tt:"uppercase",c:"dimmed",children:"Interpreter"}),jsx66(ResourceBadge,{value:interpreter,link:!0})]},interpreter.reference)),value.performer?.map(performer=>jsxs37("div",{children:[jsx66(Text6,{size:"xs",tt:"uppercase",c:"dimmed",children:"Performer"}),jsx66(ResourceBadge,{value:performer,link:!0})]},performer.reference)),value.issued&&jsxs37("div",{children:[jsx66(Text6,{size:"xs",tt:"uppercase",c:"dimmed",children:"Issued"}),jsx66(Text6,{children:formatDateTime2(value.issued)})]}),value.status&&jsxs37("div",{children:[jsx66(Text6,{size:"xs",tt:"uppercase",c:"dimmed",children:"Status"}),jsx66(Text6,{children:capitalize3(value.status)})]})]})}function SpecimenInfo(specimens){return jsxs37(Stack7,{gap:"xs",children:[jsx66(Title,{order:2,size:"h6",children:"Specimens"}),jsx66(List,{type:"ordered",children:specimens?.map(specimen=>jsx66(List.Item,{ml:"sm",children:jsxs37(Group22,{gap:20,children:[jsxs37(Group22,{gap:5,children:[jsx66(Text6,{fw:500,children:"Collected:"})," ",formatDateTime2(specimen.collection?.collectedDateTime)]}),jsxs37(Group22,{gap:5,children:[jsx66(Text6,{fw:500,children:"Received:"})," ",formatDateTime2(specimen.receivedTime)]})]})},`specimen-${specimen.id}`))})]})}function ObservationTable(props){return jsxs37("table",{className:DiagnosticReportDisplay_default.table,children:[jsx66("thead",{children:jsxs37("tr",{children:[jsx66("th",{children:"Test"}),jsx66("th",{children:"Value"}),jsx66("th",{children:"Reference Range"}),jsx66("th",{children:"Interpretation"}),jsx66("th",{children:"Category"}),jsx66("th",{children:"Performer"}),jsx66("th",{children:"Status"})]})}),jsx66("tbody",{children:jsx66(ObservationRowGroup,{value:props.value,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes})})]})}function ObservationRowGroup(props){return jsx66(Fragment20,{children:props.value?.map(observation=>jsx66(ObservationRow,{value:observation,ancestorIds:props.ancestorIds,hideObservationNotes:props.hideObservationNotes},`obs-${isReference2(observation)?observation.reference:observation.id}`))})}function ObservationRow(props){let observation=j(props.value);if(!observation||props.ancestorIds?.includes(observation.id))return null;let displayNotes=!props.hideObservationNotes&&observation.note,critical=isCritical(observation);return jsxs37(Fragment20,{children:[jsxs37("tr",{className:clsx_default({[DiagnosticReportDisplay_default.criticalRow]:critical}),children:[jsx66("td",{rowSpan:displayNotes?2:1,children:jsx66(MedplumLink,{to:observation,children:jsx66(CodeableConceptDisplay,{value:observation.code})})}),jsx66("td",{children:jsx66(ObservationValueDisplay,{value:observation})}),jsx66("td",{children:jsx66(ReferenceRangeDisplay,{value:observation.referenceRange})}),jsx66("td",{children:observation.interpretation&&observation.interpretation.length>0&&jsx66(CodeableConceptDisplay,{value:observation.interpretation[0]})}),jsx66("td",{children:observation.category&&observation.category.length>0&&jsx66(Fragment20,{children:observation.category.map(concept=>jsx66("div",{children:jsx66(CodeableConceptDisplay,{value:concept})},`category-${formatCodeableConcept2(concept)}`))})}),jsx66("td",{children:observation.performer?.map(performer=>jsx66(ReferenceDisplay,{value:performer},performer.reference))}),jsx66("td",{children:observation.status&&jsx66(StatusBadge,{status:observation.status})})]}),observation.hasMember&&jsx66(ObservationRowGroup,{value:observation.hasMember,ancestorIds:props.ancestorIds?[...props.ancestorIds,observation.id]:[observation.id],hideObservationNotes:props.hideObservationNotes}),displayNotes&&jsx66("tr",{children:jsx66("td",{colSpan:6,children:jsx66(NoteDisplay,{value:observation.note})})})]})}function ObservationValueDisplay(props){let obs=props.value;return jsx66(Fragment20,{children:formatObservationValue(obs)})}function ReferenceRangeDisplay(props){let range=props.value&&props.value.length>0&&props.value[0];return range?range.text?jsx66(Fragment20,{children:range.text}):jsx66(RangeDisplay,{value:range}):null}function isCritical(observation){let code=observation.interpretation?.[0]?.coding?.[0]?.code;return code==="AA"||code==="LL"||code==="HH"||code==="A"}import{Paper}from"@mantine/core";var Panel_default={paper:"Panel_paper",fill:"Panel_fill"};import{jsx as jsx67}from"react/jsx-runtime";function Panel(props){let{width,fill,className,children,...rest}=props,style=width?{width}:void 0;return jsx67(Paper,{className:clsx_default(Panel_default.paper,fill&&Panel_default.fill,className),style,shadow:"sm",radius:"sm",withBorder:!0,...rest,children})}import{Table}from"@mantine/core";import{capitalize as capitalize4,evalFhirPathTyped,getSearchParameterDetails,toTypedValue}from"@medplum/core";var import_rfc6902=__toESM(require_rfc6902(),1);import{useEffect as useEffect7,useState as useState34}from"react";var ResourceDiffTable_default={root:"ResourceDiffTable_root",removed:"ResourceDiffTable_removed",added:"ResourceDiffTable_added"};import{jsx as jsx68,jsxs as jsxs38}from"react/jsx-runtime";function ResourceDiffTable(props){let medplum=s(),[schemaLoaded,setSchemaLoaded]=useState34(!1);if(useEffect7(()=>{medplum.requestSchema(props.original.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.original.resourceType]),!schemaLoaded)return null;let patch=(0,import_rfc6902.createPatch)(props.original,props.revised),typedOriginal=[toTypedValue(props.original)],typedRevised=[toTypedValue(props.revised)];return jsxs38(Table,{className:ResourceDiffTable_default.root,children:[jsx68(Table.Thead,{children:jsxs38(Table.Tr,{children:[jsx68(Table.Th,{}),jsx68(Table.Th,{children:"Before"}),jsx68(Table.Th,{children:"After"})]})}),jsx68(Table.Tbody,{children:patch.map(op=>{if(op.path.startsWith("/meta"))return null;let path=op.path,fhirPath=jsonPathToFhirPath(path),property=getSearchParameterDetails(props.original.resourceType,{resourceType:"SearchParameter",base:[props.original.resourceType],code:props.original.resourceType+"."+fhirPath,expression:props.original.resourceType+"."+fhirPath})?.elementDefinitions?.[0],isArray=!!property?.isArray,originalValue=op.op==="add"?void 0:evalFhirPathTyped(fhirPath,typedOriginal)?.[0],revisedValue=op.op==="remove"?void 0:evalFhirPathTyped(fhirPath,typedRevised)?.[0];return jsxs38(Table.Tr,{children:[jsxs38(Table.Td,{children:[capitalize4(op.op)," ",fhirPath]}),jsx68(Table.Td,{className:ResourceDiffTable_default.removed,children:originalValue&&jsx68(ResourcePropertyDisplay,{property,propertyType:originalValue.type,value:fixArray(originalValue.value,isArray),ignoreMissingValues:!0})}),jsx68(Table.Td,{className:ResourceDiffTable_default.added,children:revisedValue&&jsx68(ResourcePropertyDisplay,{property,propertyType:revisedValue.type,value:fixArray(revisedValue.value,isArray),ignoreMissingValues:!0})})]},`op-${op.op}-${op.path}`)})})]})}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}function fixArray(inputValue,isArray){return Array.isArray(inputValue)&&!isArray?inputValue[0]:!Array.isArray(inputValue)&&isArray?[inputValue]:inputValue}import{useEffect as useEffect8,useState as useState35}from"react";import{jsx as jsx69}from"react/jsx-runtime";function ResourceTable(props){let medplum=s(),value=j(props.value),[schemaLoaded,setSchemaLoaded]=useState35(!1);return useEffect8(()=>{value&&medplum.requestSchema(value.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,value]),!schemaLoaded||!value?null:jsx69(BackboneElementDisplay,{value:{type:value.resourceType,value:props.forceUseInput?props.value:value},ignoreMissingValues:props.ignoreMissingValues})}import{ActionIcon as ActionIcon5,Group as Group23,Menu as Menu2,Text as Text7}from"@mantine/core";import{formatDateTime as formatDateTime3,getReferenceString as getReferenceString4}from"@medplum/core";import{Fragment as Fragment21,jsx as jsx70,jsxs as jsxs39}from"react/jsx-runtime";function Timeline(props){return jsx70(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 jsxs39(Panel,{"data-testid":"timeline-item",fill:!0,...others,children:[jsxs39(Group23,{justify:"space-between",gap:8,mx:"xs",my:"sm",children:[jsx70(ResourceAvatar,{value:author,link:!0,size:"md"}),jsxs39("div",{style:{flex:1},children:[jsx70(Text7,{size:"sm",children:jsx70(ResourceName,{c:"dark",fw:500,value:author,link:!0})}),jsxs39(Text7,{size:"xs",children:[jsx70(MedplumLink,{c:"dimmed",to:props.resource,children:formatDateTime3(dateTime)}),jsx70(Text7,{component:"span",c:"dimmed",mx:8,children:"\xB7"}),jsx70(MedplumLink,{c:"dimmed",to:props.resource,children:props.resource.resourceType})]})]}),popupMenuItems&&jsxs39(Menu2,{position:"bottom-end",shadow:"md",width:200,children:[jsx70(Menu2.Target,{children:jsx70(ActionIcon5,{color:"gray",variant:"subtle",radius:"xl","aria-label":`Actions for ${getReferenceString4(props.resource)}`,children:jsx70(IconDots,{})})}),popupMenuItems]})]}),jsxs39(ErrorBoundary,{children:[padding&&jsx70("div",{style:{padding:"0 16px 16px 16px"},children:props.children}),!padding&&jsx70(Fragment21,{children:props.children})]})]})}function sortByDateAndPriority(resources,timelineResource){resources.sort((a,b2)=>{let priority1=getPriorityScore(a,timelineResource),priority2=getPriorityScore(b2,timelineResource);return priority1>priority2?1:priority1<priority2?-1:getTime(a,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(a,b2){return!!b2&&a.resourceType===b2.resourceType&&a.id===b2.id}var ResourceTimeline_default={pinnedComment:"ResourceTimeline_pinnedComment"};import{Fragment as Fragment22,jsx as jsx71,jsxs as jsxs40}from"react/jsx-runtime";function ResourceTimeline(props){let medplum=s(),navigate=B(),sender=medplum.getProfile(),inputRef=useRef10(null),resource=j(props.value),[history,setHistory]=useState36(),[items,setItems]=useState36([]),loadTimelineResources=props.loadTimelineResources,itemsRef=useRef10(items);itemsRef.current=items;let sortAndSetItems=useCallback8(newItmes=>{sortByDateAndPriority(newItmes,resource),newItmes.reverse(),setItems(newItmes)},[resource]),handleBatchResponse=useCallback8(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=useCallback8(resource2=>sortAndSetItems([...itemsRef.current,resource2]),[sortAndSetItems]),loadTimeline=useCallback8(()=>{let resourceType,id;"resourceType"in props.value?(resourceType=props.value.resourceType,id=props.value.id):[resourceType,id]=props.value.reference?.split("/"),loadTimelineResources(medplum,resourceType,id).then(handleBatchResponse).catch(console.log)},[medplum,props.value,loadTimelineResources,handleBatchResponse]);useEffect9(()=>loadTimeline(),[loadTimeline]);function createComment(contentString){!resource||!props.createCommunication||medplum.createResource(props.createCommunication(resource,sender,contentString)).then(result=>addResource(result)).catch(console.log)}function createMedia(attachment){!resource||!props.createMedia||medplum.createResource(props.createMedia(resource,sender,attachment)).then(result=>addResource(result)).then(()=>updateNotification({id:"upload-notification",color:"teal",title:"Upload complete",message:"",icon:jsx71(IconCheck,{size:16}),autoClose:2e3})).catch(reason=>updateNotification({id:"upload-notification",color:"red",title:"Upload error",message:normalizeErrorString5(reason),icon:jsx71(IconFileAlert,{size:16}),autoClose:2e3}))}function setPriority(communication,priority){return medplum.updateResource({...communication,priority})}function onPin(communication){setPriority(communication,"stat").then(loadTimeline).catch(console.log)}function onUnpin(communication){setPriority(communication,"routine").then(loadTimeline).catch(console.log)}function onDetails(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}`)}function onEdit(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/edit`)}function onDelete(timelineItem){navigate(`/${timelineItem.resourceType}/${timelineItem.id}/delete`)}function onVersionDetails(version){navigate(`/${version.resourceType}/${version.id}/_history/${version.meta?.versionId}`)}function onUploadStart(){showNotification5({id:"upload-notification",loading:!0,title:"Initializing upload...",message:"Please wait...",autoClose:!1,withCloseButton:!1})}function onUploadProgress(e){updateNotification({id:"upload-notification",loading:!0,title:"Uploading...",message:getProgressMessage(e),autoClose:!1,withCloseButton:!1})}function onUploadError(outcome){updateNotification({id:"upload-notification",color:"red",title:"Upload error",message:normalizeErrorString5(outcome),icon:jsx71(IconFileAlert,{size:16}),autoClose:2e3})}return resource?jsxs40(Timeline,{children:[props.createCommunication&&jsx71(Panel,{children:jsx71(Form,{testid:"timeline-form",onSubmit:formData=>{createComment(formData.text);let input=inputRef.current;input&&(input.value="",input.focus())},children:jsxs40(Group24,{gap:"xs",wrap:"nowrap",style:{width:"100%"},children:[jsx71(ResourceAvatar,{value:sender}),jsx71(TextInput13,{name:"text",ref:inputRef,placeholder:"Add comment",style:{width:"100%",maxWidth:300}}),jsx71(ActionIcon6,{type:"submit",radius:"xl",color:"blue",variant:"filled",children:jsx71(IconMessage,{size:16})}),jsx71(AttachmentButton,{onUpload:createMedia,onUploadStart,onUploadProgress,onUploadError,children:props2=>jsx71(ActionIcon6,{...props2,radius:"xl",color:"blue",variant:"filled",children:jsx71(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 jsx71(HistoryTimelineItem,{history,resource:item,onDetails:onVersionDetails},key);switch(item.resourceType){case"AuditEvent":return jsx71(AuditEventTimelineItem,{resource:item,onDetails},key);case"Communication":return jsx71(CommunicationTimelineItem,{resource:item,onPin:item.priority!=="stat"?onPin:void 0,onUnpin:item.priority==="stat"?onUnpin:void 0,onDetails,onEdit,onDelete},key);case"DiagnosticReport":return jsx71(DiagnosticReportTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);case"Media":return jsx71(MediaTimelineItem,{resource:item,onDetails,onEdit,onDelete},key);default:return jsx71(TimelineItem,{resource:item,padding:!0,children:jsx71(ResourceTable,{value:item,ignoreMissingValues:!0})},key)}})]}):jsx71(Center2,{style:{width:"100%",height:"100%"},children:jsx71(Loader3,{})})}function TimelineItemPopupMenu(props){return jsxs40(Menu3.Dropdown,{children:[jsx71(Menu3.Label,{children:"Resource"}),props.onPin&&jsx71(Menu3.Item,{leftSection:jsx71(IconPin,{size:14}),onClick:()=>props.onPin(props.resource),"aria-label":`Pin ${getReferenceString5(props.resource)}`,children:"Pin"}),props.onUnpin&&jsx71(Menu3.Item,{leftSection:jsx71(IconPinnedOff,{size:14}),onClick:()=>props.onUnpin(props.resource),"aria-label":`Unpin ${getReferenceString5(props.resource)}`,children:"Unpin"}),props.onDetails&&jsx71(Menu3.Item,{leftSection:jsx71(IconListDetails,{size:14}),onClick:()=>props.onDetails(props.resource),"aria-label":`Details ${getReferenceString5(props.resource)}`,children:"Details"}),props.onEdit&&jsx71(Menu3.Item,{leftSection:jsx71(IconEdit,{size:14}),onClick:()=>props.onEdit(props.resource),"aria-label":`Edit ${getReferenceString5(props.resource)}`,children:"Edit"}),props.onDelete&&jsxs40(Fragment22,{children:[jsx71(Menu3.Divider,{}),jsx71(Menu3.Label,{children:"Danger zone"}),jsx71(Menu3.Item,{color:"red",leftSection:jsx71(IconTrash,{size:14}),onClick:()=>props.onDelete(props.resource),"aria-label":`Delete ${getReferenceString5(props.resource)}`,children:"Delete"})]})]})}function HistoryTimelineItem(props){let previous=getPrevious(props.history,props.resource);return previous?jsx71(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:jsx71(ResourceDiffTable,{original:previous,revised:props.resource})}):jsxs40(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:[jsx71("h3",{children:"Created"}),jsx71(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 jsx71(TimelineItem,{resource:props.resource,profile:props.resource.sender,dateTime:props.resource.sent,padding:!0,className,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:jsx71("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 jsx71(TimelineItem,{resource:props.resource,padding:!!padding,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:jsx71(AttachmentDisplay,{value:props.resource.content})})}function AuditEventTimelineItem(props){return jsx71(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:jsx71(ScrollArea2,{children:jsx71("pre",{children:props.resource.outcomeDesc})})})}function DiagnosticReportTimelineItem(props){return jsx71(TimelineItem,{resource:props.resource,padding:!0,popupMenuItems:jsx71(TimelineItemPopupMenu,{...props}),children:jsx71(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"}import{jsx as jsx72}from"react/jsx-runtime";function DefaultResourceTimeline(props){return jsx72(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})])}})}import{jsx as jsx73}from"react/jsx-runtime";function Document(props){let{children,...others}=props;return jsx73(Container,{children:jsx73(Panel,{...others,children})})}import{createReference as createReference3}from"@medplum/core";import{jsx as jsx74}from"react/jsx-runtime";function EncounterTimeline(props){return jsx74(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:createReference3(resource),subject:resource.subject,sender:createReference3(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",encounter:createReference3(resource),subject:resource.subject,operator:createReference3(operator),issued:new Date().toISOString(),content})})}import{Button as Button12,Loader as Loader5,Table as Table3}from"@mantine/core";import{normalizeOperationOutcome as normalizeOperationOutcome2}from"@medplum/core";import{memo as memo2,useEffect as useEffect13,useRef as useRef14,useState as useState41}from"react";import{evalFhirPath}from"@medplum/core";import{jsx as jsx75}from"react/jsx-runtime";function FhirPathDisplay(props){let value;try{value=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 jsx75(ResourcePropertyDisplay,{value:value[0]||"",propertyType:props.propertyType})}import{ActionIcon as ActionIcon7,Button as Button11,Center as Center3,Group as Group27,Loader as Loader4,Menu as Menu5,Pagination,Table as Table2,Text as Text9,UnstyledButton as UnstyledButton2}from"@mantine/core";import{DEFAULT_SEARCH_COUNT as DEFAULT_SEARCH_COUNT2,formatSearchQuery,isDataTypeLoaded}from"@medplum/core";import{memo,useCallback as useCallback9,useEffect as useEffect12,useRef as useRef13,useState as useState40}from"react";import{Box as Box2,Button as Button7,Modal as Modal3,Text as Text8}from"@mantine/core";import{jsx as jsx76,jsxs as jsxs41}from"react/jsx-runtime";function SearchExportDialog(props){return jsxs41(Modal3,{title:"Export",closeButtonProps:{"aria-label":"Close"},opened:props.visible,onClose:props.onCancel,children:[jsxs41(Box2,{display:"flex",style:{justifyContent:"space-between"},children:[props.exportCsv&&jsx76(ExportButton,{text:"CSV",exportLogic:props.exportCsv,onCancel:props.onCancel}),props.exportTransactionBundle&&jsx76(ExportButton,{text:"Transaction Bundle",exportLogic:props.exportTransactionBundle,onCancel:props.onCancel})]}),jsx76(Text8,{style:{marginTop:"10px",marginLeft:"2px"},children:"Limited to 1000 records"})]})}function ExportButton(props){return jsx76(Button7,{onClick:()=>{props.exportLogic(),props.onCancel()},children:`Export as ${props.text}`})}import{Button as Button8,Group as Group25,Modal as Modal4,MultiSelect,Stack as Stack8}from"@mantine/core";import{getDataType,getSearchParameters,stringify as stringify3}from"@medplum/core";import{useEffect as useEffect10,useMemo as useMemo8,useRef as useRef11,useState as useState37}from"react";import{capitalize as capitalize5,DEFAULT_SEARCH_COUNT,evalFhirPathTyped as evalFhirPathTyped2,formatDateTime as formatDateTime4,Operator}from"@medplum/core";import{Fragment as Fragment23,jsx as jsx77}from"react/jsx-runtime";var searchParamToOperators={string:[Operator.EQUALS,Operator.NOT,Operator.CONTAINS,Operator.EXACT],fulltext:[Operator.EQUALS,Operator.NOT,Operator.CONTAINS,Operator.EXACT],token:[Operator.EQUALS,Operator.NOT],reference:[Operator.EQUALS,Operator.NOT],numeric:[Operator.EQUALS,Operator.NOT_EQUALS,Operator.GREATER_THAN,Operator.LESS_THAN,Operator.GREATER_THAN_OR_EQUALS,Operator.LESS_THAN_OR_EQUALS],quantity:[Operator.EQUALS,Operator.NOT_EQUALS,Operator.GREATER_THAN,Operator.LESS_THAN,Operator.GREATER_THAN_OR_EQUALS,Operator.LESS_THAN_OR_EQUALS],date:[Operator.EQUALS,Operator.NOT_EQUALS,Operator.GREATER_THAN,Operator.LESS_THAN,Operator.GREATER_THAN_OR_EQUALS,Operator.LESS_THAN_OR_EQUALS,Operator.STARTS_AFTER,Operator.ENDS_BEFORE,Operator.APPROXIMATELY],datetime:[Operator.EQUALS,Operator.NOT_EQUALS,Operator.GREATER_THAN,Operator.LESS_THAN,Operator.GREATER_THAN_OR_EQUALS,Operator.LESS_THAN_OR_EQUALS,Operator.STARTS_AFTER,Operator.ENDS_BEFORE,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(f=>f.code!==code))}function addFilter(definition,field,op,value,opt_clear){opt_clear&&(definition=clearFiltersOnField(definition,field));let nextFilters=[];return definition.filters&&nextFilters.push(...definition.filters),nextFilters.push({code:field,operator:op,value:value??""}),setFilters(definition,nextFilters)}function addField(definition,field){if(definition.fields?.includes(field))return definition;let newFields=[];return definition.fields&&newFields.push(...definition.fields),newFields.push(field),{...definition,fields:newFields,name:void 0}}function deleteFilter(definition,index){if(!definition.filters)return definition;let newFilters=[...definition.filters];return newFilters.splice(index,1),{...definition,filters:newFilters,name:void 0}}function addYesterdayFilter(definition,field){return addDayFilter(definition,field,-1)}function addTodayFilter(definition,field){return addDayFilter(definition,field,0)}function addTomorrowFilter(definition,field){return addDayFilter(definition,field,1)}function addDayFilter(definition,field,delta){let startTime=new Date;startTime.setDate(startTime.getDate()+delta),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setDate(endTime.getDate()+1),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addLastMonthFilter(definition,field){return addMonthFilter(definition,field,-1)}function addThisMonthFilter(definition,field){return addMonthFilter(definition,field,0)}function addNextMonthFilter(definition,field){return addMonthFilter(definition,field,1)}function addMonthFilter(definition,field,delta){let startTime=new Date;startTime.setMonth(startTime.getMonth()+delta),startTime.setDate(1),startTime.setHours(0,0,0,0);let endTime=new Date(startTime.getTime());return endTime.setMonth(endTime.getMonth()+1),endTime.setDate(1),endTime.setHours(0,0,0,0),endTime.setTime(endTime.getTime()-1),addDateFilterBetween(definition,field,startTime,endTime)}function addYearToDateFilter(definition,field){let startTime=new Date;return startTime.setMonth(0),startTime.setDate(1),startTime.setHours(0,0,0,0),addDateFilterBetween(definition,field,startTime,new Date)}function addDateFilterBetween(definition,field,d1,d2){return definition=clearFiltersOnField(definition,field),definition=addDateFilterImpl(definition,field,Operator.GREATER_THAN_OR_EQUALS,d1),definition=addDateFilterImpl(definition,field,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,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??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(capitalize5).join(" "))}function renderValue(resource,field){let key=field.name;return key==="id"?resource.id:key==="meta.versionId"?resource.meta?.versionId:key==="_lastUpdated"?formatDateTime4(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?jsx77(ResourcePropertyDisplay,{property:elementDefinition,propertyType,value,maxWidth:200,ignoreMissingValues:!0,link:!1}):null}function renderSearchParameterValue(resource,searchParam){let value=evalFhirPathTyped2(searchParam.expression,[{type:resource.resourceType,value:resource}]);return!value||value.length===0?null:jsx77(Fragment23,{children:value.map((v2,index)=>jsx77(ResourcePropertyDisplay,{propertyType:v2.type,value:v2.value,maxWidth:200,ignoreMissingValues:!0,link:!1},`${index}-${value.length}`))})}import{jsx as jsx78,jsxs as jsxs42}from"react/jsx-runtime";function SearchFieldEditor(props){let wasDropdownOpen=useRef11(!1),[state,setState]=useState37({search:JSON.parse(stringify3(props.search))}),[isDropdownOpen,setIsDropdownOpen]=useState37(!1);useEffect10(()=>{setState({search:props.search})},[props.search]);let allFields=useMemo8(()=>{if(!props.visible)return[];let resourceType=props.search.resourceType,typeSchema=getDataType(resourceType),searchParams=getSearchParameters(resourceType);return getFieldsList(typeSchema,searchParams).sort((a,b2)=>a.localeCompare(b2)).map(field=>({value:field,label:buildFieldNameString(field)}))},[props.visible,props.search.resourceType]);if(!props.visible)return null;function handleChange(newFields){setState({search:{...state.search,fields:newFields}})}return jsx78(Modal4,{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:jsx78("div",{"data-testid":"overlay-child"})},children:jsxs42(Stack8,{children:[jsx78(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}),jsx78(Group25,{justify:"flex-end",children:jsx78(Button8,{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}import{Button as Button9,Group as Group26,Modal as Modal5,NativeSelect as NativeSelect10}from"@mantine/core";import{getSearchParameters as getSearchParameters2,stringify as stringify4}from"@medplum/core";import{useEffect as useEffect11,useRef as useRef12,useState as useState38}from"react";import{formatDateTime as formatDateTime5,getSearchParameterDetails as getSearchParameterDetails2,globalSchema,Operator as Operator2,SearchParameterType}from"@medplum/core";import{Fragment as Fragment24,jsx as jsx79}from"react/jsx-runtime";function SearchFilterValueDisplay(props){let{resourceType,filter}=props,searchParam=globalSchema.types[resourceType].searchParams?.[filter.code];if(searchParam){if(searchParam.type==="reference"&&(filter.operator===Operator2.EQUALS||filter.operator===Operator2.NOT_EQUALS))return jsx79(ResourceName,{value:{reference:filter.value}});let searchParamDetails=getSearchParameterDetails2(resourceType,searchParam);if(filter.code==="_lastUpdated"||searchParamDetails.type===SearchParameterType.DATETIME)return jsx79(Fragment24,{children:formatDateTime5(filter.value)})}return jsx79(Fragment24,{children:filter.value})}import{Checkbox as Checkbox2,TextInput as TextInput14}from"@mantine/core";import{getSearchParameterDetails as getSearchParameterDetails3,SearchParameterType as SearchParameterType2}from"@medplum/core";import{jsx as jsx80}from"react/jsx-runtime";function SearchFilterValueInput(props){let details=getSearchParameterDetails3(props.resourceType,props.searchParam),name="filter-value";switch(details.type){case SearchParameterType2.REFERENCE:return jsx80(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 SearchParameterType2.BOOLEAN:return jsx80(Checkbox2,{name,"data-autofocus":props.autoFocus,"data-testid":name,defaultChecked:props.defaultValue==="true",autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.checked.toString())});case SearchParameterType2.DATE:return jsx80(TextInput14,{type:"date",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case SearchParameterType2.DATETIME:return jsx80(DateTimeInput,{name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:props.onChange});case SearchParameterType2.NUMBER:return jsx80(TextInput14,{type:"number",name,"data-autofocus":props.autoFocus,"data-testid":name,defaultValue:props.defaultValue,autoFocus:props.autoFocus,onChange:e=>props.onChange(e.currentTarget.value)});case SearchParameterType2.QUANTITY:return jsx80(QuantityInput,{name,defaultValue:tryParseQuantity(props.defaultValue),autoFocus:props.autoFocus,onChange:newQuantity=>{newQuantity?props.onChange(`${newQuantity.value}`):props.onChange("")}});default:return jsx80(TextInput14,{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}}}import{jsx as jsx81,jsxs as jsxs43}from"react/jsx-runtime";function SearchFilterEditor(props){let[search,setSearch]=useState38(JSON.parse(stringify4(props.search))),[editingIndex,setEditingIndex]=useState38(-1),searchRef=useRef12(search);searchRef.current=search,useEffect11(()=>{setSearch(JSON.parse(stringify4(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=getSearchParameters2(resourceType)??{},filters=search.filters||[];return jsxs43(Modal5,{title:"Filters",closeButtonProps:{"aria-label":"Close"},size:900,opened:props.visible,onClose:props.onCancel,children:[jsx81("div",{children:jsxs43("table",{children:[jsxs43("colgroup",{children:[jsx81("col",{style:{width:200}}),jsx81("col",{style:{width:200}}),jsx81("col",{style:{width:380}}),jsx81("col",{style:{width:120}})]}),jsx81("thead",{children:jsxs43("tr",{children:[jsx81("th",{children:"Field"}),jsx81("th",{children:"Operation"}),jsx81("th",{children:"Value"}),jsx81("th",{children:"Actions"})]})}),jsxs43("tbody",{children:[filters.map((filter,index)=>index===editingIndex?jsx81(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`):jsx81(FilterRowDisplay,{resourceType,searchParams,filter,onEdit:()=>setEditingIndex(index),onDelete:()=>setSearch(deleteFilter(searchRef.current,index))},`filter-${filter.code}-${filter.operator}-${filter.value}-display`)),jsx81(FilterRowInput,{resourceType,searchParams,okText:"Add",onOk:onAddFilter})]})]})}),jsx81(Group26,{justify:"flex-end",mt:"xl",children:jsx81(Button9,{onClick:()=>props.onOk(searchRef.current),children:"OK"})})]})}function FilterRowDisplay(props){let{filter}=props;return jsxs43("tr",{children:[jsx81("td",{children:buildFieldNameString(filter.code)}),jsx81("td",{children:getOpString(filter.operator)}),jsx81("td",{children:jsx81(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})}),jsxs43("td",{children:[jsx81(Button9,{size:"compact-md",variant:"outline",onClick:props.onEdit,children:"Edit"}),jsx81(Button9,{size:"size-md",variant:"outline",onClick:props.onDelete,children:"Delete"})]})]})}function FilterRowInput(props){let[value,setValue]=useState38(props.defaultValue??{}),valueRef=useRef12(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 jsxs43("tr",{children:[jsx81("td",{children:jsx81(NativeSelect10,{"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)}))]})}),jsx81("td",{children:operators&&jsx81(NativeSelect10,{"data-testid":"filter-operation",defaultValue:value.operator,onChange:e=>setFilterOperator(e.currentTarget.value),data:["",...operators.map(op=>({value:op,label:getOpString(op)}))]})}),jsx81("td",{children:searchParam&&value.operator&&jsx81(SearchFilterValueInput,{resourceType:props.resourceType,searchParam,defaultValue:value.value,onChange:setFilterValue})}),jsxs43("td",{children:[value.code&&value.operator&&jsx81(Button9,{size:"compact-md",variant:"outline",onClick:()=>{props.onOk(valueRef.current),setValue({})},children:props.okText}),props.onCancel&&jsx81(Button9,{size:"compact-md",variant:"outline",onClick:props.onCancel,children:"Cancel"})]})]})}import{Button as Button10,Grid,Modal as Modal6}from"@mantine/core";import{useState as useState39}from"react";import{jsx as jsx82,jsxs as jsxs44}from"react/jsx-runtime";function SearchFilterValueDialog(props){let[value,setValue]=useState39(props.defaultValue??"");if(!props.visible||!props.searchParam||!props.filter)return null;function onOk(){props.onOk({...props.filter,value})}return jsx82(Modal6,{title:props.title,size:"xl",opened:props.visible,onClose:props.onCancel,children:jsx82(Form,{onSubmit:onOk,children:jsxs44(Grid,{children:[jsx82(Grid.Col,{span:10,children:jsx82(SearchFilterValueInput,{resourceType:props.resourceType,searchParam:props.searchParam,defaultValue:value,autoFocus:!0,onChange:setValue})}),jsx82(Grid.Col,{span:2,children:jsx82(Button10,{onClick:onOk,fullWidth:!0,children:"OK"})})]})})})}import{Menu as Menu4}from"@mantine/core";import{Operator as Operator4}from"@medplum/core";import{Fragment as Fragment25,jsx as jsx83,jsxs as jsxs45}from"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?jsx83(SearchParameterSubMenu,{search:props.search,searchParam:props.searchParams[0],onSort,onPrompt,onChange,onClear}):jsx83(Menu4.Dropdown,{children:props.searchParams.map(searchParam=>jsx83(Menu4.Item,{children:buildFieldNameString(searchParam.code)},searchParam.code))})}function SearchParameterSubMenu(props){switch(props.searchParam.type){case"date":return jsx83(DateFilterSubMenu,{...props});case"number":case"quantity":return jsx83(NumericFilterSubMenu,{...props});case"reference":return jsx83(ReferenceFilterSubMenu,{...props});case"string":case"token":case"uri":return jsx83(TextFilterSubMenu,{...props});default:return jsxs45(Fragment25,{children:["Unknown search param type: ",props.searchParam.type]})}}function DateFilterSubMenu(props){let{searchParam}=props,code=searchParam.code;return jsxs45(Menu4.Dropdown,{children:[jsx83(Menu4.Item,{leftSection:jsx83(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Oldest to Newest"}),jsx83(Menu4.Item,{leftSection:jsx83(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Newest to Oldest"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Equals..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.NOT_EQUALS),children:"Does not equal..."}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.ENDS_BEFORE),children:"Before..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.STARTS_AFTER),children:"After..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconBracketsContain,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Between..."}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addTomorrowFilter(props.search,code)),children:"Tomorrow"}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addTodayFilter(props.search,code)),children:"Today"}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addYesterdayFilter(props.search,code)),children:"Yesterday"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addNextMonthFilter(props.search,code)),children:"Next Month"}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addThisMonthFilter(props.search,code)),children:"This Month"}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addLastMonthFilter(props.search,code)),children:"Last Month"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconCalendar,{size:14}),onClick:()=>props.onChange(addYearToDateFilter(props.search,code)),children:"Year to date"}),jsx83(CommonMenuItems,{...props})]})}function NumericFilterSubMenu(props){let{searchParam}=props;return jsxs45(Menu4.Dropdown,{children:[jsx83(Menu4.Item,{leftSection:jsx83(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort Smallest to Largest"}),jsx83(Menu4.Item,{leftSection:jsx83(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Largest to Smallest"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Equals..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.NOT_EQUALS),children:"Does not equal..."}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconMathGreater,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.GREATER_THAN),children:"Greater than..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.GREATER_THAN_OR_EQUALS),children:"Greater than or equal to..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconMathLower,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.LESS_THAN),children:"Less than..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconSettings,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.LESS_THAN_OR_EQUALS),children:"Less than or equal to..."}),jsx83(CommonMenuItems,{...props})]})}function ReferenceFilterSubMenu(props){let{searchParam}=props;return jsxs45(Menu4.Dropdown,{children:[jsx83(Menu4.Item,{leftSection:jsx83(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Equals..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.NOT),children:"Does not equal..."}),jsx83(CommonMenuItems,{...props})]})}function TextFilterSubMenu(props){let{searchParam}=props;return jsxs45(Menu4.Dropdown,{children:[jsx83(Menu4.Item,{leftSection:jsx83(IconSortAscending,{size:14}),onClick:()=>props.onSort(searchParam,!1),children:"Sort A to Z"}),jsx83(Menu4.Item,{leftSection:jsx83(IconSortDescending,{size:14}),onClick:()=>props.onSort(searchParam,!0),children:"Sort Z to A"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqual,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Equals..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconEqualNot,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.NOT),children:"Does not equal..."}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconBucket,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.CONTAINS),children:"Contains..."}),jsx83(Menu4.Item,{leftSection:jsx83(IconBucketOff,{size:14}),onClick:()=>props.onPrompt(searchParam,Operator4.EQUALS),children:"Does not contain..."}),jsx83(CommonMenuItems,{...props})]})}function CommonMenuItems(props){let{searchParam}=props,code=searchParam.code;return jsxs45(Fragment25,{children:[jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(IconBleach,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code)),children:"Missing"}),jsx83(Menu4.Item,{leftSection:jsx83(IconBleachOff,{size:14}),onClick:()=>props.onChange(addMissingFilter(props.search,code,!1)),children:"Not missing"}),jsx83(Menu4.Divider,{}),jsx83(Menu4.Item,{leftSection:jsx83(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"};import{getElementDefinition,getSearchParameter,getSearchParameterDetails as getSearchParameterDetails4,getSearchParameters as getSearchParameters3}from"@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=getElementDefinition(resourceType,name),exactSearchParam=getSearchParameter(resourceType,name.toLowerCase());if(exactElementDefinition&&exactSearchParam)return{name,elementDefinition:exactElementDefinition,searchParams:[exactSearchParam]};if(exactElementDefinition){let allSearchParams=getSearchParameters3(resourceType),searchParams;if(allSearchParams){let pathRegex=new RegExp(`${resourceType}\\.${name.replaceAll("[x]","")}([^\\w-]|$)`);searchParams=Object.values(allSearchParams).filter(p2=>!!p2.expression&&pathRegex.test(p2?.expression)),searchParams.length===0&&(searchParams=void 0)}return{name,elementDefinition:exactElementDefinition,searchParams}}if(exactSearchParam){let details=getSearchParameterDetails4(resourceType,exactSearchParam);return{name,elementDefinition:details.elementDefinitions?.[0],searchParams:[exactSearchParam]}}return{name}}import{Fragment as Fragment26,jsx as jsx84,jsxs as jsxs46}from"react/jsx-runtime";var 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=s(),[loadingSchema,setLoadingSchema]=useState40(),[outcome,setOutcome]=useState40(),{search,onLoad}=props,[state,setState]=useState40({selected:{},fieldEditorVisible:!1,filterEditorVisible:!1,exportDialogVisible:!1,filterDialogVisible:!1}),stateRef=useRef13(state);stateRef.current=state;let totalType=search.total??"accurate",loadResults=useCallback9(options=>{setOutcome(void 0),medplum.search(search.resourceType,formatSearchQuery({...search,total:totalType,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,totalType,onLoad]),refreshResults=useCallback9(()=>{setState({...stateRef.current,searchResponse:void 0}),loadResults({cache:"reload"})},[loadResults]);useEffect12(()=>{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(useEffect12(()=>{setLoadingSchema(props.search.resourceType),medplum.requestSchema(props.search.resourceType).catch(console.error).finally(()=>setLoadingSchema(void 0))},[medplum,props.search.resourceType]),!isDataTypeLoaded(props.search.resourceType)||loadingSchema===props.search.resourceType)return jsx84(Center3,{style:{width:"100%",height:"100%"},children:jsx84(Loader4,{})});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 jsxs46("div",{className:SearchControl_default.root,"data-testid":"search-control",children:[!props.hideToolbar&&jsxs46(Group27,{justify:"space-between",mb:"xl",children:[jsxs46(Group27,{gap:2,children:[jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconColumns,{size:iconSize}),onClick:()=>setState({...stateRef.current,fieldEditorVisible:!0}),children:"Fields"}),jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconFilter,{size:iconSize}),onClick:()=>setState({...stateRef.current,filterEditorVisible:!0}),children:"Filters"}),props.onNew&&jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconFilePlus,{size:iconSize}),onClick:props.onNew,children:"New..."}),!isMobile&&isExportPassed()&&jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconTableExport,{size:iconSize}),onClick:props.onExport?props.onExport:()=>setState({...stateRef.current,exportDialogVisible:!0}),children:"Export..."}),!isMobile&&props.onDelete&&jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconTrash,{size:iconSize}),onClick:()=>props.onDelete(Object.keys(state.selected)),children:"Delete..."}),!isMobile&&props.onBulk&&jsx84(Button11,{size:"compact-md",variant:buttonVariant,color:buttonColor,leftSection:jsx84(IconBoxMultiple,{size:iconSize}),onClick:()=>props.onBulk(Object.keys(state.selected)),children:"Bulk..."})]}),jsxs46(Group27,{gap:2,children:[lastResult&&jsxs46(Text9,{size:"xs",c:"dimmed",children:[getStart(search,lastResult.total),"-",getEnd(search,lastResult.total)," of"," ",`${totalType==="estimate"?"~":""}${lastResult.total?.toLocaleString()}`]}),jsx84(ActionIcon7,{variant:buttonVariant,color:buttonColor,title:"Refresh",onClick:refreshResults,children:jsx84(IconRefresh,{size:iconSize})})]})]}),jsxs46(Table2,{className:SearchControl_default.table,children:[jsxs46(Table2.Thead,{children:[jsxs46(Table2.Tr,{children:[checkboxColumn&&jsx84(Table2.Th,{children:jsx84("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>jsx84(Table2.Th,{children:jsxs46(Menu5,{shadow:"md",width:240,position:"bottom-end",children:[jsx84(Menu5.Target,{children:jsx84(UnstyledButton2,{className:SearchControl_default.control,p:2,children:jsxs46(Group27,{justify:"space-between",wrap:"nowrap",children:[jsx84(Text9,{fw:500,children:buildFieldNameString(field.name)}),jsx84(Center3,{className:SearchControl_default.icon,children:jsx84(IconAdjustmentsHorizontal,{size:14,stroke:1.5})})]})})}),jsx84(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&&jsxs46(Table2.Tr,{children:[checkboxColumn&&jsx84(Table2.Th,{}),fields.map(field=>jsx84(Table2.Th,{children:field.searchParams&&jsx84(FilterDescription,{resourceType,searchParams:field.searchParams,filters:props.search.filters})},field.name))]})]}),jsx84(Table2.Tbody,{children:resources?.map(resource=>resource&&jsxs46(Table2.Tr,{className:SearchControl_default.tr,"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&jsx84(Table2.Td,{children:jsx84("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=>jsx84(Table2.Td,{children:renderValue(resource,field)},field.name))]},resource.id))})]}),resources?.length===0&&jsx84(Container,{children:jsx84(Center3,{style:{height:150},children:jsx84(Text9,{size:"xl",c:"dimmed",children:"No results"})})}),lastResult?.total!==void 0&&lastResult.total>0&&jsx84(Center3,{m:"md",p:"md",children:jsx84(Pagination,{value:getPage(search),total:getTotalPages(search,lastResult.total),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&&jsx84("div",{"data-testid":"search-error",children:jsx84("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),jsx84(SearchFieldEditor,{search:props.search,visible:stateRef.current.fieldEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,fieldEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,fieldEditorVisible:!1})}}),jsx84(SearchFilterEditor,{search:props.search,visible:stateRef.current.filterEditorVisible,onOk:result=>{emitSearchChange(result),setState({...stateRef.current,filterEditorVisible:!1})},onCancel:()=>{setState({...stateRef.current,filterEditorVisible:!1})}}),jsx84(SearchExportDialog,{visible:stateRef.current.exportDialogVisible,exportCsv:props.onExportCsv,exportTransactionBundle:props.onExportTransactionBundle,onCancel:()=>{setState({...stateRef.current,exportDialogVisible:!1})}}),jsx84(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=memo(SearchControl);function FilterDescription(props){let filters=(props.filters??[]).filter(f=>props.searchParams.find(p2=>p2.code===f.code));return filters.length===0?jsx84("span",{children:"no filters"}):jsx84(Fragment26,{children:filters.map(filter=>jsxs46("div",{children:[getOpString(filter.operator),"\xA0",jsx84(SearchFilterValueDisplay,{resourceType:props.resourceType,filter})]},`filter-${filter.code}-${filter.operator}-${filter.value}`))})}function getPage(search){return Math.floor((search.offset??0)/(search.count??DEFAULT_SEARCH_COUNT2))+1}function getTotalPages(search,total){let pageSize=search.count??DEFAULT_SEARCH_COUNT2;return Math.ceil(total/pageSize)}function getStart(search,total){return Math.min(total,(search.offset??0)+1)}function getEnd(search,total){return Math.min(total,((search.offset??0)+1)*(search.count??DEFAULT_SEARCH_COUNT2))}import{jsx as jsx85,jsxs as jsxs47}from"react/jsx-runtime";function FhirPathTable(props){let medplum=s(),[schemaLoaded,setSchemaLoaded]=useState41(!1),[outcome,setOutcome]=useState41(),{query,fields}=props,[response,setResponse]=useState41(),[selected,setSelected]=useState41({}),responseRef=useRef14();responseRef.current=response;let selectedRef=useRef14({});selectedRef.current=selected,useEffect13(()=>{setOutcome(void 0),medplum.graphql(query).then(setResponse).catch(err=>setOutcome(normalizeOperationOutcome2(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(useEffect13(()=>{medplum.requestSchema(props.resourceType).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum,props.resourceType]),!schemaLoaded)return jsx85(Loader5,{});let checkboxColumn=props.checkboxesEnabled;return jsxs47("div",{onContextMenu:e=>killEvent(e),"data-testid":"search-control",children:[jsxs47(Table3,{children:[jsx85(Table3.Thead,{children:jsxs47(Table3.Tr,{children:[checkboxColumn&&jsx85(Table3.Th,{children:jsx85("input",{type:"checkbox",value:"checked","aria-label":"all-checkbox","data-testid":"all-checkbox",checked:isAllSelected(),onChange:e=>handleAllCheckboxClick(e)})}),fields.map(field=>jsx85(Table3.Th,{children:field.name},field.name))]})}),jsx85(Table3.Tbody,{children:response?.data.ResourceList.map(resource=>resource&&jsxs47(Table3.Tr,{"data-testid":"search-control-row",onClick:e=>handleRowClick(e,resource),onAuxClick:e=>handleRowClick(e,resource),children:[checkboxColumn&&jsx85(Table3.Td,{children:jsx85("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=>jsx85(Table3.Td,{children:jsx85(FhirPathDisplay,{propertyType:field.propertyType,path:field.fhirPath,resource})},field.name))]},resource.id))})]}),response?.data.ResourceList.length===0&&jsx85("div",{"data-testid":"empty-search",children:"No results"}),outcome&&jsx85("div",{"data-testid":"search-error",children:jsx85("pre",{style:{textAlign:"left"},children:JSON.stringify(outcome,void 0,2)})}),props.onBulk&&jsx85(Button12,{onClick:()=>props.onBulk(Object.keys(selectedRef.current)),children:"Bulk..."})]})}var MemoizedFhirPathTable=memo2(FhirPathTable);import{jsx as jsx86,jsxs as jsxs48}from"react/jsx-runtime";function Logo(props){return jsxs48("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 491 491",style:{width:props.size,height:props.size},children:[jsx86("title",{children:"Medplum Logo"}),jsx86("path",{fill:props.fill??"#ad7136",d:"M282 67c6-16 16-29 29-40L289 0c-22 17-37 41-43 68l17 23 19-24z"}),jsx86("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"}),jsx86("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"}),jsx86("path",{fill:props.fill??"#40bc26",d:"M207 220a176 176 0 01-177 43A176 176 0 01251 43l1 5c17 59 2 125-45 172z"}),jsx86("path",{fill:props.fill??"#33961e",d:"M252 48A421 421 0 0057 270l-27-7A176 176 0 01251 43l1 5z"})]})}import{Box as Box4,SimpleGrid}from"@mantine/core";import{Box as Box3,Flex as Flex2,Group as Group28,Paper as Paper2,RingProgress,Text as Text10,Title as Title2}from"@mantine/core";import{formatCodeableConcept as formatCodeableConcept3}from"@medplum/core";import{Fragment as Fragment27,jsx as jsx87,jsxs as jsxs49}from"react/jsx-runtime";function MeasureReportGroupDisplay(props){let{group}=props;return jsx87(Paper2,{withBorder:!0,radius:"md",p:"xs",display:"flex",style:{alignItems:"center",justifyContent:"center"},children:jsxs49(Group28,{children:[group.measureScore&&jsx87(MeasureScore,{group}),!group.measureScore&&jsx87(MeasureReportPopulation,{group})]})})}function MeasureTitle(props){let{measure}=props;return jsxs49(Fragment27,{children:[jsx87(Text10,{fz:"md",fw:500,mb:8,children:measure.title}),jsx87(Text10,{fz:"xs",c:"dimmed",mb:8,children:measure.subtitle})]})}function MeasureReportPopulation(props){let{group}=props,populations=group.population,numerator=populations?.find(p2=>formatCodeableConcept3(p2.code)==="numerator"),denominator=populations?.find(p2=>formatCodeableConcept3(p2.code)==="denominator"),numeratorCount=numerator?.count,denominatorCount=denominator?.count;if(denominatorCount===0)return jsxs49(Box3,{children:[jsx87(Title2,{order:3,children:"Not Applicable"}),jsx87(Text10,{children:`Denominator: ${denominatorCount}`})]});if(numeratorCount===void 0||denominatorCount===void 0)return jsxs49(Box3,{children:[jsx87(Title2,{order:3,children:"Insufficient Data"}),jsx87(Text10,{children:`Numerator: ${numeratorCount}`}),jsx87(Text10,{children:`Denominator: ${denominatorCount}`})]});let value=numeratorCount/denominatorCount*100;return jsx87(RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value,color:groupColor(value)}],label:jsx87(Flex2,{justify:"center",children:jsxs49(Text10,{fw:700,fz:18,children:[numeratorCount," / ",denominatorCount]})})})}function MeasureScore(props){let{group}=props,unit=group.measureScore?.unit??group.measureScore?.code;return jsx87(Fragment27,{children:unit==="%"?jsx87(RingProgress,{size:120,thickness:12,roundCaps:!0,sections:[{value:groupValue(group),color:groupColor(group?.measureScore?.value??0)}],label:jsx87(Flex2,{justify:"center",children:jsx87(Text10,{fw:700,fz:18,children:jsx87(QuantityDisplay,{value:group.measureScore})})})}):jsx87(Flex2,{h:120,align:"center",children:jsx87(Title2,{order:3,children:jsx87(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"}import{jsx as jsx88,jsxs as jsxs50}from"react/jsx-runtime";function MeasureReportDisplay(props){let report=j(props.measureReport),[measure]=ue("Measure",{url:report?.measure});return report?jsxs50(Box4,{children:[measure&&jsx88(MeasureTitle,{measure}),jsx88(SimpleGrid,{cols:{base:3,sm:1},spacing:{base:"md",sm:"sm"},children:report.group?.map((group,idx)=>jsx88(MeasureReportGroupDisplay,{group},group.id??idx))})]}):null}import{Alert as Alert2}from"@mantine/core";import{operationOutcomeIssueToString}from"@medplum/core";import{jsx as jsx89}from"react/jsx-runtime";function OperationOutcomeAlert(props){let issues=props.outcome?.issue||props.issues;return!issues||issues.length===0?null:jsx89(Alert2,{icon:jsx89(IconAlertCircle,{size:16}),color:"red",children:issues.map(issue=>jsx89("div",{"data-testid":"text-field-error",children:operationOutcomeIssueToString(issue)},issue.details?.text))})}import{Anchor as Anchor8,Card,Divider,Flex as Flex3,Group as Group34,Paper as Paper3,Stack as Stack14,Text as Text16}from"@mantine/core";import{calculateAgeString,formatHumanName as formatHumanName4,resolveId}from"@medplum/core";import{useEffect as useEffect14,useState as useState47}from"react";import{Anchor as Anchor3,Badge as Badge2,Box as Box5,Button as Button13,Group as Group29,Modal as Modal7,NativeSelect as NativeSelect11,Stack as Stack9,Text as Text11,TextInput as TextInput15}from"@mantine/core";import{useDisclosure}from"@mantine/hooks";import{createReference as createReference4}from"@medplum/core";import{useCallback as useCallback10,useState as useState42}from"react";import{Fragment as Fragment28,jsx as jsx90,jsxs as jsxs51}from"react/jsx-runtime";function Allergies(props){let medplum=s(),{patient,encounter}=props,[allergies,setAllergies]=useState42(props.allergies),[opened,{open,close}]=useDisclosure(!1),[code,setCode]=useState42(),handleSubmit=useCallback10(formData=>{medplum.createResource({resourceType:"AllergyIntolerance",patient:createReference4(patient),encounter:encounter?createReference4(encounter):void 0,code,onsetDateTime:formData.onset?formData.onset:void 0,reaction:formData.reaction?[{manifestation:[{text:formData.reaction}]}]:void 0}).then(newAllergy=>{setAllergies([...allergies,newAllergy]),close()}).catch(console.error)},[medplum,patient,encounter,allergies,close,code]);return jsxs51(Fragment28,{children:[jsxs51(Group29,{justify:"space-between",children:[jsx90(Text11,{fz:"md",fw:700,children:"Allergies"}),jsx90(Anchor3,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),allergies.length>0?jsx90(Box5,{children:allergies.map(allergy=>jsx90(Badge2,{variant:"light",maw:"100%",children:jsx90(CodeableConceptDisplay,{value:allergy.code})},allergy.id))}):jsx90(Text11,{children:"(none)"}),jsx90(Modal7,{opened,onClose:close,title:"Add Allergy",children:jsx90(Form,{onSubmit:handleSubmit,children:jsxs51(Stack9,{children:[jsx90(CodeableConceptInput,{name:"allergy","data-autofocus":!0,binding:"http://hl7.org/fhir/us/core/ValueSet/us-core-allergy-substance",onChange:allergy=>setCode(allergy)}),jsx90(TextInput15,{name:"reaction",label:"Reaction"}),jsx90(NativeSelect11,{name:"status",label:"Status",data:["active"]}),jsx90(TextInput15,{name:"onset",label:"Onset",type:"date"}),jsx90(Group29,{justify:"flex-end",gap:4,mt:"md",children:jsx90(Button13,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as Anchor4,Badge as Badge3,Box as Box6,Button as Button14,Group as Group30,Modal as Modal8,Radio,Stack as Stack10,Text as Text12}from"@mantine/core";import{useDisclosure as useDisclosure2}from"@mantine/hooks";import{createReference as createReference5}from"@medplum/core";import{useCallback as useCallback11,useState as useState43}from"react";import{Fragment as Fragment29,jsx as jsx91,jsxs as jsxs52}from"react/jsx-runtime";function Medications(props){let medplum=s(),[medicationRequests,setMedicationRequests]=useState43(props.medicationRequests),[opened,{open,close}]=useDisclosure2(!1),[code,setCode]=useState43(),handleSubmit=useCallback11(formData=>{let status=formData.status;medplum.createResource({resourceType:"MedicationRequest",status,intent:"order",encounter:props.encounter?createReference5(props.encounter):void 0,medicationCodeableConcept:code,subject:createReference5(props.patient)}).then(newRequest=>{setMedicationRequests([newRequest,...medicationRequests]),close()}).catch(console.error)},[medplum,props.patient,props.encounter,medicationRequests,close,code]);return jsxs52(Fragment29,{children:[jsxs52(Group30,{justify:"space-between",children:[jsx91(Text12,{fz:"md",fw:700,children:"Medications"}),jsx91(Anchor4,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),medicationRequests.length>0?jsx91(Box6,{children:medicationRequests.map(request=>jsx91(Badge3,{mt:4,variant:"light",maw:"50%",color:request.status==="active"?"blue":"gray",children:jsx91(CodeableConceptDisplay,{value:request.medicationCodeableConcept})},request.id))}):jsx91(Text12,{children:"(none)"}),jsx91(Modal8,{opened,onClose:close,title:"Add Medication Request",children:jsx91(Form,{onSubmit:handleSubmit,children:jsxs52(Stack10,{h:275,children:[jsx91(CodeableConceptInput,{name:"request","data-autofocus":!0,binding:"https://app.medplum.com/ValueSet/16d6f7b7-7eeb-4d0e-a83b-83be082aa10b",onChange:request=>setCode(request)}),jsxs52(Radio.Group,{mt:32,name:"status",label:"Request Status",required:!0,children:[jsx91(Radio,{value:"active",label:"active",my:"xs"},"active"),jsx91(Radio,{value:"stopped",label:"stopped",my:"xs"},"stopped")]}),jsx91(Group30,{justify:"flex-end",gap:4,mt:"md",children:jsx91(Button14,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as Anchor5,Badge as Badge4,Button as Button15,Grid as Grid2,Group as Group31,Modal as Modal9,NativeSelect as NativeSelect12,Stack as Stack11,Text as Text13,Textarea as Textarea3,TextInput as TextInput16}from"@mantine/core";import{useDisclosure as useDisclosure3}from"@mantine/hooks";import{createReference as createReference6}from"@medplum/core";import{Fragment as Fragment30,useCallback as useCallback12,useState as useState44}from"react";import{Fragment as Fragment31,jsx as jsx92,jsxs as jsxs53}from"react/jsx-runtime";function ProblemList(props){let medplum=s(),{patient,encounter}=props,[problems,setProblems]=useState44(props.problems),[opened,{open,close}]=useDisclosure3(!1),handleSubmit=useCallback12(formData=>{medplum.createResource({resourceType:"Condition",subject:createReference6(patient),encounter:encounter?createReference6(encounter):void 0,code:{coding:[{code:formData.problem,display:formData.problem}]},onsetDateTime:formData.onset?formData.onset:void 0}).then(newProblem=>{setProblems([...problems,newProblem]),close()}).catch(console.error)},[medplum,patient,encounter,problems,close]);return jsxs53(Fragment31,{children:[jsxs53(Group31,{justify:"space-between",children:[jsx92(Text13,{fz:"md",fw:700,children:"Problem List"}),jsx92(Anchor5,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),problems.length>0?jsx92(Grid2,{gutter:"xs",children:problems.map(problem=>jsxs53(Fragment30,{children:[jsx92(Grid2.Col,{span:2,children:problem.onsetDateTime?.substring(0,4)}),jsx92(Grid2.Col,{span:10,children:jsx92(Badge4,{variant:"light",maw:"100%",children:jsx92(CodeableConceptDisplay,{value:problem.code})},problem.id)})]},problem.id))}):jsx92(Text13,{children:"(none)"}),jsx92(Modal9,{opened,onClose:close,title:"Add Problem",children:jsx92(Form,{onSubmit:handleSubmit,children:jsxs53(Stack11,{children:[jsx92(TextInput16,{name:"problem",label:"Problem","data-autofocus":!0,autoFocus:!0,required:!0}),jsx92(TextInput16,{name:"onset",label:"Dx Date",type:"date",required:!0}),jsx92(NativeSelect12,{name:"status",label:"Status",data:["active"]}),jsx92(Textarea3,{name:"notes",label:"Notes"}),jsx92(Group31,{justify:"flex-end",gap:4,mt:"md",children:jsx92(Button15,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as Anchor6,Badge as Badge5,Box as Box7,Button as Button16,Group as Group32,Modal as Modal10,Radio as Radio2,Stack as Stack12,Text as Text14}from"@mantine/core";import{useDisclosure as useDisclosure4}from"@mantine/hooks";import{HTTP_HL7_ORG as HTTP_HL7_ORG2,LOINC,SNOMED,createReference as createReference7}from"@medplum/core";import{useCallback as useCallback13,useState as useState45}from"react";import{Fragment as Fragment32,jsx as jsx93,jsxs as jsxs54}from"react/jsx-runtime";var 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=s(),{patient,encounter}=props,[smokingStatus,setSmokingStatus]=useState45(props.smokingStatus),[opened,{open,close}]=useDisclosure4(!1),handleSubmit=useCallback13(formData=>{medplum.createResource({resourceType:"Observation",meta:{profile:[HTTP_HL7_ORG2+"/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:LOINC,code:"72166-2",display:"Tobacco smoking status"}],text:"Tobacco smoking status"},subject:createReference7(patient),encounter:encounter?createReference7(encounter):void 0,effectiveDateTime:new Date().toISOString(),valueCodeableConcept:{coding:[{system:SNOMED,version:SNOMED+"/731000124108",code:formData.smokingStatus}],text:smokingStatusOptions[formData.smokingStatus]}}).then(newSmokingStatus=>{setSmokingStatus(newSmokingStatus),close()}).catch(console.error)},[medplum,patient,encounter,close]);return jsxs54(Fragment32,{children:[jsxs54(Group32,{justify:"space-between",children:[jsx93(Text14,{fz:"md",fw:700,children:"Smoking Status"}),jsx93(Anchor6,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Edit"})]}),smokingStatus?.valueCodeableConcept?jsx93(Box7,{children:jsx93(Badge5,{variant:"light",children:jsx93(CodeableConceptDisplay,{value:smokingStatus.valueCodeableConcept})})}):jsx93(Text14,{children:"(none)"}),jsx93(Modal10,{opened,onClose:close,title:"Set Smoking Status",children:jsx93(Form,{onSubmit:handleSubmit,children:jsxs54(Stack12,{children:[jsx93(Radio2.Group,{name:"smokingStatus",label:"Smoking Status",required:!0,children:Object.entries(smokingStatusOptions).map(([code,text])=>jsx93(Radio2,{value:code,label:text,my:"xs"},code))}),jsx93(Group32,{justify:"flex-end",gap:4,mt:"md",children:jsx93(Button16,{type:"submit",children:"Save"})})]})})})]})}import{Anchor as Anchor7,Button as Button17,Grid as Grid3,Group as Group33,Modal as Modal11,Stack as Stack13,Text as Text15,Textarea as Textarea4,TextInput as TextInput17}from"@mantine/core";import{useDisclosure as useDisclosure5}from"@mantine/hooks";import{useCallback as useCallback14,useState as useState46}from"react";import{LOINC as LOINC2,UCUM,createReference as createReference8}from"@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:createReference8(patient),encounter:encounter?createReference8(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:LOINC2}],text:display}}function createQuantity(value,unit){return{value,system:UCUM,unit,code:unit}}function isValidNumber(value){return value!==void 0&&!isNaN(value)&&isFinite(value)}import{Fragment as Fragment33,jsx as jsx94,jsxs as jsxs55}from"react/jsx-runtime";var 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=s(),{patient,encounter}=props,[vitals,setVitals]=useState46(props.vitals),[opened,{open,close}]=useDisclosure5(!1),handleSubmit=useCallback14(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 jsxs55(Fragment33,{children:[jsxs55(Group33,{justify:"space-between",children:[jsx94(Text15,{fz:"md",fw:700,children:"Vitals"}),jsx94(Anchor7,{href:"#",onClick:e=>{killEvent(e),open()},children:"+ Add"})]}),jsxs55(Grid3,{children:[jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"BP Sys"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,SYSTOLIC)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"BP Dias"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getCompoundObservationValue(vitals,LOINC_CODES.bloodPressure.code,DIASTOLIC)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"HR"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.heartRate.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"Temp"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bodyTemperature.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"RR"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.respiratoryRate.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"Height"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.height.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"Weight"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.weight.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"BMI"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.bmi.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"O2"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.oxygen.code)})}),jsx94(Grid3.Col,{span:3,ta:"right",c:"dimmed",children:"HC"}),jsx94(Grid3.Col,{span:3,children:jsx94(QuantityDisplay,{value:getObservationValue(vitals,LOINC_CODES.headCircumference.code)})})]}),jsx94(Modal11,{opened,onClose:close,title:"Add Vitals",children:jsxs55(Form,{onSubmit:handleSubmit,children:[jsxs55(Stack13,{children:[jsxs55(Group33,{grow:!0,children:[jsx94(TextInput17,{name:"systolic",label:"BP Sys","data-autofocus":!0,autoFocus:!0}),jsx94(TextInput17,{name:"diastolic",label:"BP Dias"})]}),jsxs55(Group33,{grow:!0,children:[jsx94(TextInput17,{name:"heartRate",label:"HR"}),jsx94(TextInput17,{name:"bodyTemperature",label:"Temp"})]}),jsxs55(Group33,{grow:!0,children:[jsx94(TextInput17,{name:"respiratoryRate",label:"RR"}),jsx94(TextInput17,{name:"height",label:"height"})]}),jsxs55(Group33,{grow:!0,children:[jsx94(TextInput17,{name:"weight",label:"Wt"}),jsx94(TextInput17,{name:"bmi",label:"BMI"})]}),jsxs55(Group33,{grow:!0,children:[jsx94(TextInput17,{name:"oxygen",label:"O2"}),jsx94(TextInput17,{name:"headCircumference",label:"HC"})]}),jsx94(Textarea4,{name:"notes",label:"Notes"})]}),jsx94(Group33,{justify:"flex-end",gap:4,mt:"md",children:jsx94(Button17,{type:"submit",children:"Save"})})]})})]})}import{jsx as jsx95,jsxs as jsxs56}from"react/jsx-runtime";function PatientSummary(props){let medplum=s(),{patient:propsPatient,background,...rest}=props,[patient,setPatient]=useState47(),[allergies,setAllergies]=useState47(),[problems,setProblems]=useState47(),[smokingStatus,setSmokingStatus]=useState47(),[vitals,setVitals]=useState47(),[medicationRequest,setMedicationRequest]=useState47();return useEffect14(()=>{let id=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?jsxs56(Card,{...rest,children:[jsx95(Card.Section,{h:100,style:{background}}),jsx95(ResourceAvatar,{value:patient,size:80,radius:80,mx:"auto",mt:-50,style:{border:"2px solid white"}}),jsx95(Text16,{ta:"center",fz:"lg",fw:500,children:formatHumanName4(patient.name?.[0])}),jsxs56(Text16,{ta:"center",fz:"xs",color:"dimmed",children:[patient.birthDate," (",calculateAgeString(patient.birthDate),")"]}),jsx95(Paper3,{withBorder:!0,p:"md",my:"md",children:jsxs56(Group34,{grow:!0,children:[jsxs56(Flex3,{justify:"center",align:"center",direction:"column",gap:0,maw:"33%",children:[jsx95(IconUserSquare,{size:24,color:"gray"}),jsx95(Text16,{fz:"xs",ta:"center",style:{whiteSpace:"nowrap"},children:"Self"})]}),jsxs56(Flex3,{justify:"center",align:"center",direction:"column",gap:0,children:[jsx95(IconStethoscope,{size:24,color:"gray"}),jsx95(Text16,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient?.generalPractitioner?.[0]?.display??"No provider"})]}),jsxs56(Flex3,{justify:"center",align:"center",direction:"column",gap:0,children:[jsx95(IconGenderFemale,{size:24,color:"gray"}),jsx95(Text16,{fz:"xs",style:{whiteSpace:"nowrap"},children:patient.gender})]})]})}),jsxs56(Stack14,{gap:"xs",children:[jsx95(Anchor8,{href:"#",children:"No upcoming appointments"}),jsx95(Anchor8,{href:"#",children:"No documented visits"}),jsx95(Divider,{}),jsx95(Allergies,{patient,allergies}),jsx95(Divider,{}),jsx95(ProblemList,{patient,problems}),jsx95(Divider,{}),jsx95(Medications,{patient,medicationRequests:medicationRequest}),jsx95(Divider,{}),jsx95(SmokingStatus,{patient,smokingStatus}),jsx95(Divider,{}),jsx95(Vitals,{patient,vitals})]})]}):null}import{createReference as createReference9}from"@medplum/core";import{useCallback as useCallback15}from"react";import{jsx as jsx96}from"react/jsx-runtime";function PatientTimeline(props){let loadTimelineResources=useCallback15((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 jsx96(ResourceTimeline,{value:props.patient,loadTimelineResources,createCommunication:(resource,sender,text)=>({resourceType:"Communication",status:"completed",subject:createReference9(resource),sender:createReference9(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",subject:createReference9(resource),operator:createReference9(operator),issued:new Date().toISOString(),content})})}import{Anchor as Anchor9,Button as Button18,NativeSelect as NativeSelect13,Stack as Stack15,TextInput as TextInput18}from"@mantine/core";import{getReferenceString as getReferenceString6}from"@medplum/core";import{useEffect as useEffect15,useRef as useRef15,useState as useState48}from"react";var PlanDefinitionBuilder_default={section:"PlanDefinitionBuilder_section",hovering:"PlanDefinitionBuilder_hovering",editing:"PlanDefinitionBuilder_editing",bottomActions:"PlanDefinitionBuilder_bottomActions"};import{jsx as jsx97,jsxs as jsxs57}from"react/jsx-runtime";function PlanDefinitionBuilder(props){let medplum=s(),defaultValue2=j(props.value),[schemaLoaded,setSchemaLoaded]=useState48(!1),[selectedKey,setSelectedKey]=useState48(),[hoverKey,setHoverKey]=useState48(),[value,setValue]=useState48();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}let valueRef=useRef15();if(valueRef.current=value,useEffect15(()=>{medplum.requestSchema("PlanDefinition").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),useEffect15(()=>(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 jsx97("div",{children:jsxs57(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[jsx97(TextInput18,{label:"Plan Title",defaultValue:value.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),jsx97(ActionArrayBuilder,{actions:value.action||[],selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:x=>changeProperty("action",x)}),jsx97(Button18,{type:"submit",children:"Save"})]})})}function ActionArrayBuilder(props){let actionsRef=useRef15();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 jsxs57("div",{className:PlanDefinitionBuilder_default.section,children:[props.actions.map(action=>jsx97("div",{children:jsx97(ActionBuilder,{action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:changeAction,onRemove:()=>removeAction(action)})},action.id)),jsx97("div",{className:PlanDefinitionBuilder_default.bottomActions,children:jsx97(Anchor9,{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 jsxs57("div",{"data-testid":action.id,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[editing?jsx97(ActionEditor,{action,actionType,onChange:props.onChange,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onRemove:props.onRemove}):jsx97(ActionDisplay,{action,actionType}),jsx97("div",{className:PlanDefinitionBuilder_default.bottomActions,children:jsx97(Anchor9,{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 jsxs57("div",{children:[jsxs57("div",{children:[action.title||"Untitled"," ",actionType&&`(${actionType})`]}),action.definitionCanonical&&jsx97("div",{children:jsx97(ReferenceDisplay,{value:{reference:action.definitionCanonical}})}),propertyValue&&jsx97("div",{children:jsx97(ResourcePropertyDisplay,{property:timingProperty,propertyType,value:propertyValue})})]})}function ActionEditor(props){let{action}=props,[actionType,setActionType]=useState48(props.actionType);function changeProperty(property,value){props.onChange({...action,[property]:value})}return jsxs57(Stack15,{gap:"xl",children:[jsx97(TextInput18,{name:`actionTitle-${action.id}`,label:"Title",defaultValue:action.title,onChange:e=>changeProperty("title",e.currentTarget.value)}),jsx97(TextInput18,{name:`actionDescription-${action.id}`,label:"Description",defaultValue:action.description,onChange:e=>changeProperty("description",e.currentTarget.value)}),jsx97(NativeSelect13,{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&&jsx97(ActionArrayBuilder,{actions:action.action,selectedKey:props.selectedKey,setSelectedKey:props.setSelectedKey,hoverKey:props.hoverKey,setHoverKey:props.setHoverKey,onChange:x=>changeProperty("action",x)}),(()=>{switch(actionType){case"appointment":return jsx97(ActionResourceTypeBuilder,{title:"Appointment",description:"The subject must schedule an appointment from the schedule.",resourceType:"Schedule",action,onChange:props.onChange});case"lab":return jsx97(ActionResourceTypeBuilder,{title:"Lab",description:"The subject must complete the following lab panel.",resourceType:"ActivityDefinition",action,onChange:props.onChange});case"questionnaire":return jsx97(ActionResourceTypeBuilder,{title:"Questionnaire",description:"The subject must complete the selected questionnaire.",resourceType:"Questionnaire",action,onChange:props.onChange});case"task":return jsx97(ActionResourceTypeBuilder,{title:"Task",description:"The subject must complete the following task.",resourceType:"ActivityDefinition",action,onChange:props.onChange});default:return null}})(),jsx97(FormSection,{title:"Timing",description:"When the action should take place.",children:jsx97(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 jsx97(ResourceInput,{name:id,resourceType:props.resourceType,defaultValue:reference,loadOnFocus:!0,onChange:newValue=>{newValue?props.onChange({...props.action,definitionCanonical:getReferenceString6(newValue)}):props.onChange({...props.action,definitionCanonical:void 0})}})}function ActionTimingInput(props){let value=props.action,key="timing",[propertyValue,propertyType]=getActionTiming(value);return jsx97(ResourcePropertyInput,{property:timingProperty,name:"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)}))}import{Anchor as Anchor10,Box as Box8,Button as Button19,Group as Group36,NativeSelect as NativeSelect15,Space as Space2,Textarea as Textarea6,TextInput as TextInput20,Title as Title3}from"@mantine/core";import{getElementDefinition as getElementDefinition3,isResource as isResourceType}from"@medplum/core";import{useEffect as useEffect16,useRef as useRef16,useState as useState49}from"react";import{Checkbox as Checkbox3,Group as Group35,MultiSelect as MultiSelect2,NativeSelect as NativeSelect14,Radio as Radio3,Textarea as Textarea5,TextInput as TextInput19}from"@mantine/core";import{capitalize as capitalize6,deepEquals,formatCodeableConcept as formatCodeableConcept4,formatCoding as formatCoding3,getElementDefinition as getElementDefinition2,getTypedPropertyValue as getTypedPropertyValue3,stringify as stringify6}from"@medplum/core";import{useContext as useContext6}from"react";import{deepClone as deepClone2,evalFhirPathTyped as evalFhirPathTyped3,formatCoding as formatCoding2,getExtension,getReferenceString as getReferenceString7,getTypedPropertyValue as getTypedPropertyValue2,splitN,stringify as stringify5}from"@medplum/core";var 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=>formatCoding2(option2.valueCoding)===o||option2[propertyName]===o),optionValue=getTypedPropertyValue2({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}]=evalFhirPathTyped3(`%actualAnswer ${fhirPathOperator} %expectedAnswer`,[actualAnswer],{"%actualAnswer":actualAnswer,"%expectedAnswer":expectedAnswer});return value}else return!1}function checkAnswers(enableWhen,answers,enableBehavior){let actualAnswers=answers||[],expectedAnswer=getTypedPropertyValue2({type:"QuestionnaireItemEnableWhen",value:enableWhen},"answer[x]"),anyMatch=!1,allMatch=!0;for(let actualAnswerValue of actualAnswers){let actualAnswer=getTypedPropertyValue2({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=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=deepClone2(item),extension=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=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]=splitN(part,"=",2);result[key]=value}return result}function buildInitialResponse(questionnaire){return{resourceType:"QuestionnaireResponse",questionnaire:getReferenceString7(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||stringify5(typedValue.value)}function getNumberOfPages(questionnaire){let firstItem=questionnaire?.item?.[0];return firstItem&&getExtension(firstItem,"http://hl7.org/fhir/StructureDefinition/questionnaire-itemControl")?.valueCodeableConcept?.coding?.[0]?.code==="page"?questionnaire.item.length:1}import{createContext}from"react";var QuestionnaireFormContext=createContext({});import{jsx as jsx98}from"react/jsx-runtime";function QuestionnaireFormItem(props){let context=useContext6(QuestionnaireFormContext),item=props.item,response=props.response;function onChangeAnswer(newResponseAnswer){let updatedAnswers;Array.isArray(newResponseAnswer)?updatedAnswers=newResponseAnswer:props.index>=(props.response?.answer?.length??0)?updatedAnswers=(props.response?.answer??[]).concat([newResponseAnswer]):updatedAnswers=(props.response?.answer??[]).map((a,idx)=>idx===props.index?newResponseAnswer:a)??[],props.onChange({id:response?.id,linkId:response?.linkId,text:item.text,answer:updatedAnswers})}let type=item.type;if(!type)return null;let name=item.linkId;if(!name)return null;let initial=item.initial&&item.initial.length>0?item.initial[0]:void 0,defaultValue2=getCurrentAnswer(response,props.index)??getTypedPropertyValue3({type:"QuestionnaireItemInitial",value:initial},"value");switch(type){case"display":return jsx98("p",{children:props.item.text},props.item.linkId);case"boolean":return jsx98(CheckboxFormSection,{title:props.item.text,htmlFor:props.item.linkId,children:jsx98(Checkbox3,{id:props.item.linkId,name:props.item.linkId,defaultChecked:defaultValue2?.value,onChange:e=>onChangeAnswer({valueBoolean:e.currentTarget.checked})})},props.item.linkId);case"decimal":return jsx98(TextInput19,{type:"number",step:"any",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDecimal:e.currentTarget.valueAsNumber})});case"integer":return jsx98(TextInput19,{type:"number",step:1,id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueInteger:e.currentTarget.valueAsNumber})});case"date":return jsx98(TextInput19,{type:"date",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueDate:e.currentTarget.value})});case"dateTime":return jsx98(DateTimeInput,{name,required:item.required,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueDateTime:newValue})});case"time":return jsx98(TextInput19,{type:"time",id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueTime:e.currentTarget.value})});case"string":case"url":return jsx98(TextInput19,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"text":return jsx98(Textarea5,{id:name,name,required:item.required,defaultValue:defaultValue2?.value,onChange:e=>onChangeAnswer({valueString:e.currentTarget.value})});case"attachment":return jsx98(Group35,{py:4,children:jsx98(AttachmentInput,{name,defaultValue:defaultValue2?.value,onChange:newValue=>onChangeAnswer({valueAttachment:newValue})})});case"reference":return jsx98(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 jsx98(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?jsx98(QuestionnaireChoiceDropDownInput,{name,item,initial,response,onChangeAnswer:e=>onChangeAnswer(e)}):jsx98(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 jsx98(NoAnswerDisplay,{});let initialValue=getTypedPropertyValue3({type:"QuestionnaireItemInitial",value:initial},"value"),data2=[""];for(let option of item.answerOption){let optionValue=getTypedPropertyValue3({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 jsx98(MultiSelect2,{data:data3,placeholder:"Select items",searchable:!0,defaultValue:currentAnswer||[typedValueToString(initialValue)],onChange:selected=>{let values=getNewMultiSelectValues(selected,propertyName,item);props.onChangeAnswer(values)}})}return jsx98(NativeSelect14,{id:name,name,onChange:e=>{let index=e.currentTarget.selectedIndex;if(index===0){props.onChangeAnswer({});return}let option=item.answerOption[index-1],optionValue=getTypedPropertyValue3({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+capitalize6(optionValue.type);props.onChangeAnswer({[propertyName]:optionValue.value})},defaultValue:formatCoding3(defaultValue2?.value)||defaultValue2?.value,data:data2})}function QuestionnaireChoiceSetInput(props){let{name,item,initial,onChangeAnswer,response}=props;return!item.answerOption?.length&&!item.answerValueSet?jsx98(NoAnswerDisplay,{}):item.answerValueSet?jsx98(CodingInput,{name,binding:item.answerValueSet,onChange:code=>onChangeAnswer({valueCoding:code})}):jsx98(QuestionnaireChoiceRadioInput,{name:response?.id??name,item,initial,response,onChangeAnswer})}function QuestionnaireChoiceRadioInput(props){let{name,item,initial,onChangeAnswer,response}=props,valueElementDefinition=getElementDefinition2("QuestionnaireItemAnswerOption","value[x]"),initialValue=getTypedPropertyValue3({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=getTypedPropertyValue3({type:"QuestionnaireItemAnswerOption",value:option},"value");optionValue?.value&&(initialValue&&stringify6(optionValue)===stringify6(initialValue)&&(defaultValue2=optionName),options.push([optionName,optionValue]))}let defaultAnswer=getCurrentAnswer(response),answerLinkId=getCurrentRadioAnswer(options,defaultAnswer);return jsx98(Radio3.Group,{name,value:answerLinkId??defaultValue2,onChange:newValue=>{let option=options.find(option2=>option2[0]===newValue);if(option){let optionValue=option[1],propertyName="value"+capitalize6(optionValue.type);onChangeAnswer({[propertyName]:optionValue.value})}},children:options.map(([optionName,optionValue])=>jsx98(Radio3,{id:optionName,value:optionName,py:4,label:jsx98(ResourcePropertyDisplay,{property:valueElementDefinition,propertyType:optionValue.type,value:optionValue.value})},optionName))})}function NoAnswerDisplay(){return jsx98(TextInput19,{disabled:!0,placeholder:"No Answers Defined"})}function getItemValue(answer){return getTypedPropertyValue3({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(a=>getItemValue(a)).map(type=>formatCoding3(type?.value)||type?.value):[]}function getCurrentRadioAnswer(options,defaultAnswer){return options.find(option=>deepEquals(option[1].value,defaultAnswer?.value))?.[0]}function typedValueToString(typedValue){if(typedValue)return typedValue.type==="CodeableConcept"?formatCodeableConcept4(typedValue.value):typedValue.type==="Coding"?formatCoding3(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=getTypedPropertyValue3({type:"QuestionnaireItemAnswerOption",value:option},"value"),propertyName="value"+capitalize6(optionValue.type),data2=(item.answerOption??[]).map(a=>({value:getValueAndLabel(a,propertyName),label:getValueAndLabel(a,propertyName)}));return{propertyName,data:data2}}function getValueAndLabel(option,propertyName){return formatCoding3(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"};import{Fragment as Fragment34,jsx as jsx99,jsxs as jsxs58}from"react/jsx-runtime";function QuestionnaireBuilder(props){let medplum=s(),defaultValue2=j(props.questionnaire),[schemaLoaded,setSchemaLoaded]=useState49(!1),[value,setValue]=useState49(),[selectedKey,setSelectedKey]=useState49(),[hoverKey,setHoverKey]=useState49();function handleDocumentMouseOver(){setHoverKey(void 0)}function handleDocumentClick(){setSelectedKey(void 0)}useEffect16(()=>{medplum.requestSchema("Questionnaire").then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),useEffect16(()=>(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:jsx99("div",{children:jsxs58(Form,{testid:"questionnaire-form",onSubmit:()=>props.onSubmit(value),children:[jsx99(ItemBuilder,{item:value,selectedKey,setSelectedKey,hoverKey,setHoverKey,onChange:handleChange}),jsx99(Button19,{type:"submit",children:"Save"})]})})}function ItemBuilder(props){let resource=props.item,item=props.item,isResource2=isResourceType(props.item),isContainer=isResource2||item.type==="group",linkId=item.linkId??"[untitled]",editing=props.selectedKey===props.item.id,hovering=props.hoverKey===props.item.id,itemRef=useRef16();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 jsxs58("div",{"data-testid":item.linkId,className,onClick,onMouseOver:onHover,onFocus:onHover,children:[jsx99("div",{className:QuestionnaireBuilder_default.questionBody,children:editing?jsxs58(Fragment34,{children:[isResource2&&jsx99(TextInput20,{size:"xl",defaultValue:resource.title,onBlur:e=>changeProperty("title",e.currentTarget.value)}),!isResource2&&jsx99(Textarea6,{autosize:!0,minRows:2,defaultValue:item.text,onBlur:e=>changeProperty("text",e.currentTarget.value)}),item.type==="reference"&&jsx99(ReferenceProfiles,{item,onChange:updateItem}),isChoiceQuestion(item)&&jsx99(AnswerBuilder,{item,onChange:item2=>updateItem(item2)})]}):jsxs58(Fragment34,{children:[resource.title&&jsx99(Title3,{children:resource.title}),item.text&&jsx99("div",{children:item.text}),!isContainer&&jsx99(QuestionnaireFormItem,{item,index:0,onChange:()=>{},response:{linkId:item.linkId}})]})}),item.item?.map((item2,i)=>jsx99("div",{children:jsx99(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&&jsx99("div",{className:QuestionnaireBuilder_default.topActions,children:editing?jsxs58(Fragment34,{children:[jsx99(TextInput20,{size:"xs",className:QuestionnaireBuilder_default.linkIdInput,defaultValue:item.linkId,onBlur:e=>changeProperty("linkId",e.currentTarget.value)}),!isContainer&&jsx99(NativeSelect15,{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"}]})]}):jsx99("div",{children:linkId})}),!isResource2&&jsx99(Box8,{className:QuestionnaireBuilder_default.movementActions,children:jsxs58(Box8,{className:QuestionnaireBuilder_default.columnAlignment,children:[!props.isFirst&&jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveUp&&props.onMoveUp()},children:jsx99(IconArrowUp,{"data-testid":"up-button",size:15,className:QuestionnaireBuilder_default.movementIcons})}),!props.isLast&&jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),props.onMoveDown&&props.onMoveDown()},children:jsx99(IconArrowDown,{"data-testid":"down-button",size:15,className:QuestionnaireBuilder_default.movementIcons})})]})}),jsxs58("div",{className:QuestionnaireBuilder_default.bottomActions,children:[isContainer&&jsxs58(Fragment34,{children:[jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("q"),type:"string",text:"Question"})},children:"Add item"}),jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),addItem({id:generateId3(),linkId:generateLinkId("g"),type:"group",text:"Group"},!0)},children:"Add group"})]}),isResource2&&jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),addItem(createPage(),!0)},children:"Add Page"}),editing&&!isResource2&&jsxs58(Fragment34,{children:[jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),props.onRepeatable&&props.onRepeatable(item)},children:item.repeats?"Remove Repeatable":"Make Repeatable"}),jsx99(Anchor10,{href:"#",onClick:e=>{e.preventDefault(),props.onRemove&&props.onRemove()},children:"Remove"})]})]})]})}function AnswerBuilder(props){let property=getElementDefinition3("QuestionnaireItemAnswerOption","value[x]"),options=props.item.answerOption??[];return jsxs58("div",{children:[props.item.answerValueSet!==void 0?jsx99(TextInput20,{placeholder:"Enter Value Set",defaultValue:props.item.answerValueSet,onChange:e=>props.onChange({...props.item,answerValueSet:e.target.value})}):jsx99(AnswerOptionsInput,{options,property,item:props.item,onChange:props.onChange}),jsxs58(Box8,{display:"flex",children:[jsx99(Anchor10,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerValueSet:void 0,answerOption:[...options,{id:generateId3()}]})},children:"Add choice"}),jsx99(Space2,{w:"lg"}),jsx99(Anchor10,{href:"#",onClick:e=>{killEvent(e),props.onChange({...props.item,answerOption:[],answerValueSet:""})},children:"Add value set"})]})]})}function AnswerOptionsInput(props){return jsx99("div",{children:props.options.map(option=>{let[propertyValue,propertyType]=getValueAndType({type:"QuestionnaireItemAnswerOption",value:option},"value");return jsxs58("div",{style:{display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",width:"80%"},children:[jsx99("div",{children:jsx99(ResourcePropertyInput,{name:"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)}),jsx99("div",{children:jsx99(Anchor10,{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 jsxs58(Fragment34,{children:[targetTypes.map((targetType,index)=>jsxs58(Group36,{children:[jsx99(ResourceTypeInput,{name:"resourceType",placeholder:"Resource Type",defaultValue:targetType,onChange:newValue=>{props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.map(t=>t===targetType?newValue:t)))}}),jsx99(Anchor10,{href:"#",onClick:e=>{killEvent(e),props.onChange(setQuestionnaireItemReferenceTargetTypes(props.item,targetTypes.filter(t=>t!==targetType)))},children:"Remove"})]},`${targetType}-${index}`)),jsx99(Anchor10,{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}import{Title as Title5}from"@mantine/core";import{createReference as createReference10,getReferenceString as getReferenceString8}from"@medplum/core";import{useEffect as useEffect17,useState as useState52}from"react";import{Button as Button20,Group as Group37,Stack as Stack17,Stepper}from"@mantine/core";import{Anchor as Anchor11}from"@mantine/core";import{useState as useState50}from"react";import{jsx as jsx100,jsxs as jsxs59}from"react/jsx-runtime";function QuestionnaireRepeatableItem(props){let{item,response,onChange}=props,[number,setNumber]=useState50(getNumberOfRepeats(item,response??{linkId:item.linkId}));if(!props.checkForQuestionEnabled(item)||!response)return null;if(item.type==="display")return jsx100("p",{children:item.text},item.linkId);let showAddButton=item?.repeats&&item.type!=="choice"&&item.type!=="open-choice";return item.type==="boolean"?jsx100(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index:0},item.linkId):jsxs59(FormSection,{htmlFor:props.item.linkId,title:props.item.text,withAsterisk:props.item.required,children:[[...Array(number)].map((_,index)=>jsx100(QuestionnaireFormItem,{item,response,onChange:r2=>onChange([r2]),index},`${item.linkId}-${index}`)),showAddButton&&jsx100(Anchor11,{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}import{Anchor as Anchor12,Stack as Stack16,Title as Title4}from"@mantine/core";import{useState as useState51}from"react";import{Fragment as Fragment35,jsx as jsx101,jsxs as jsxs60}from"react/jsx-runtime";function QuestionnaireRepeatedGroup(props){let[responses,setResponses]=useState51(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 jsxs60(Fragment35,{children:[responses.map((response,idx)=>jsx101(QuestionnaireGroup,{item:props.item,response,checkForQuestionEnabled:props.checkForQuestionEnabled,onChange:r2=>handleRepeatableGroup(r2,idx)},response.id)),props.item.repeats&&jsx101(Anchor12,{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)?jsxs60("div",{children:[props.item.text&&jsx101(Title4,{order:3,mb:"md",children:props.item.text}),jsx101(Stack16,{children:props.item.item?.map(item=>item.type==="group"?item.repeats?jsx101(QuestionnaireRepeatedGroup,{item,response:response.item?.filter(i=>i.linkId===item.linkId)??[],checkForQuestionEnabled,onChange:onSetGroup},item.linkId):jsx101(QuestionnaireGroup,{item,checkForQuestionEnabled,response:response.item?.find(i=>i.linkId===item.linkId)??{linkId:item.linkId},onChange:onSetGroup},item.linkId):jsx101(QuestionnaireRepeatableItem,{item,response:response.item?.find(i=>i.linkId===item.linkId),onChange:onSetGroup,checkForQuestionEnabled},item.linkId))})]},props.item.linkId):null}import{Fragment as Fragment36,jsx as jsx102,jsxs as jsxs61}from"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"?jsx102(QuestionnaireRepeatedGroup,{item,response:itemResponse,onChange,checkForQuestionEnabled},item.linkId):jsx102(QuestionnaireRepeatableItem,{item,response:itemResponse?.[0],onChange,checkForQuestionEnabled},item.linkId);return renderPages?jsx102(Stepper.Step,{label:item.text,children:repeatedItem},item.linkId):repeatedItem});return jsxs61(Fragment36,{children:[renderPages&&jsx102(Stepper,{active:activePage??0,allowNextStepsSelect:!1,p:6,children:form}),!renderPages&&jsx102(Stack17,{children:form}),jsx102(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 jsxs61(Group37,{justify:"flex-end",mt:"xl",gap:"xs",children:[showBackButton&&jsx102(Button20,{onClick:props.prevStep,children:"Back"}),showNextButton&&jsx102(Button20,{onClick:e=>{e.currentTarget.closest("form").reportValidity()&&props.nextStep()},children:"Next"}),showSubmitButton&&jsx102(Button20,{type:"submit",children:props.submitButtonText??"Submit"})]})}import{jsx as jsx103,jsxs as jsxs62}from"react/jsx-runtime";function QuestionnaireForm(props){let medplum=s(),source=medplum.getProfile(),[schemaLoaded,setSchemaLoaded]=useState52(!1),questionnaire=j(props.questionnaire),[response,setResponse]=useState52(),[activePage,setActivePage]=useState52(0);useEffect17(()=>{medplum.requestSchema("Questionnaire").then(()=>medplum.requestSchema("QuestionnaireResponse")).then(()=>setSchemaLoaded(!0)).catch(console.log)},[medplum]),useEffect17(()=>{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)return null;let numberOfPages=getNumberOfPages(questionnaire),nextStep=()=>setActivePage(current=>current+1),prevStep=()=>setActivePage(current=>current-1);return jsx103(QuestionnaireFormContext.Provider,{value:{subject:props.subject,encounter:props.encounter},children:jsxs62(Form,{testid:"questionnaire-form",onSubmit:()=>{props.onSubmit&&response&&props.onSubmit({...response,questionnaire:getReferenceString8(questionnaire),subject:props.subject,source:createReference10(source),authored:new Date().toISOString(),status:"completed"})},children:[questionnaire.title&&jsx103(Title5,{children:questionnaire.title}),jsx103(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}import{ActionIcon as ActionIcon8,Button as Button21,Divider as Divider2,Group as Group38,NativeSelect as NativeSelect16,Stack as Stack18,Text as Text17,TextInput as TextInput21}from"@mantine/core";import{formatRange as formatRange2,getCodeBySystem}from"@medplum/core";import{useEffect as useEffect18,useState as useState53}from"react";var ReferenceRangeEditor_default={section:"ReferenceRangeEditor_section"};import{jsx as jsx104,jsxs as jsxs63}from"react/jsx-runtime";var 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]=useState53([]),[groupId,setGroupId]=useState53(1),[intervalId,setIntervalId]=useState53(1);return useEffect18(()=>{let definition=ensureQualifiedIntervalKeys(defaultDefinition,setIntervalId);setIntervalGroups(groupQualifiedIntervals(definition.qualifiedInterval||[],setGroupId))},[defaultDefinition]),jsxs63(Form,{testid:"reference-range-editor",onSubmit:submitDefinition,children:[jsx104(Stack18,{children:intervalGroups.map(intervalGroup=>jsx104(ReferenceRangeGroupEditor,{unit:getUnitString(defaultDefinition.quantitativeDetails?.unit),onChange:changeInterval,onAdd:addInterval,onRemove:removeInterval,onRemoveGroup:removeGroup,intervalGroup},`group-${intervalGroup.id}`))}),jsx104(ActionIcon8,{title:"Add Group",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),addGroup({id:`group-id-${groupId}`,filters:{},intervals:[]}),setGroupId(id=>id+1)},children:jsx104(IconCirclePlus,{})}),jsx104(Group38,{justify:"flex-end",children:jsx104(Button21,{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 jsx104(Container,{"data-testid":intervalGroup.id,className:ReferenceRangeEditor_default.section,children:jsxs63(Stack18,{gap:"lg",children:[jsx104(Group38,{justify:"flex-end",children:jsx104(ActionIcon8,{title:"Remove Group",variant:"subtle","data-testid":`remove-group-button-${intervalGroup.id}`,size:"sm",onClick:e=>{killEvent(e),props.onRemoveGroup(intervalGroup)},children:jsx104(IconCircleMinus,{})},`remove-group-button-${intervalGroup.id}`)}),jsx104(ReferenceRangeGroupFilters,{intervalGroup,onChange:props.onChange}),jsx104(Divider2,{}),intervalGroup.intervals.map(interval=>jsxs63(Stack18,{gap:"xs",children:[jsxs63(Group38,{children:[jsx104(TextInput21,{"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}`),jsx104(ActionIcon8,{title:"Remove Interval",variant:"subtle",size:"sm","data-testid":`remove-interval-${interval.id}`,onClick:e=>{killEvent(e),props.onRemove(intervalGroup.id,interval)},children:jsx104(IconCircleMinus,{})},`remove-interval-${interval.id}`)]}),jsx104(RangeInput,{onChange:range=>{props.onChange(intervalGroup.id,{...interval,range})},name:`range-${interval.id}`,defaultValue:interval.range},`range-${interval.id}`)]},`interval-${interval.id}`)),jsx104(ActionIcon8,{title:"Add Interval",variant:"subtle",size:"sm",onClick:e=>{killEvent(e),props.onAdd(intervalGroup.id,{range:{low:{unit},high:{unit}}})},children:jsx104(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 jsxs63(Stack18,{style:{maxWidth:"50%"},children:[jsx104(Group38,{children:jsx104(NativeSelect16,{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})}}})}),jsxs63(Group38,{gap:"xs",children:[jsx104(Text17,{component:"label",htmlFor:`div-age-${intervalGroup.id}`,children:"Age:"}),jsx104("div",{id:`div-age-${intervalGroup.id}`,children:jsx104(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}`)})]}),jsx104(NativeSelect16,{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"}]}})}}}),jsx104(NativeSelect16,{data:["","reference","critical","absolute"],label:"Category: ",defaultValue:intervalGroup.filters.category,onChange:e=>{for(let interval of intervalGroup.intervals){let newCategory=e.currentTarget.value;newCategory===""?onChange(intervalGroup.id,{...interval,category:void 0}):onChange(intervalGroup.id,{...interval,category:newCategory})}}})]})}function ensureQualifiedIntervalKeys(definition,setIntervalId){let intervals=definition.qualifiedInterval||[],nextId4=Math.max(...intervals.map(interval=>{let existingNum=parseInt(interval.id?.substring(3)||"",10);return isNaN(existingNum)?Number.NEGATIVE_INFINITY:existingNum}))+1;return Number.isFinite(nextId4)||(nextId4=1),definition={...definition,qualifiedInterval:intervals.map(interval=>({...interval,id:interval.id||`id-${nextId4++}`}))},setIntervalId(nextId4),definition}function groupQualifiedIntervals(intervals,setGroupId){let groupId=1,groups={};for(let interval of intervals){let groupKey=generateGroupKey(interval);groupKey in groups||(groups[groupKey]={id:`group-id-${groupId++}`,filters:Object.fromEntries(intervalFilters.map(f=>[f,interval[f]])),intervals:[]}),groups[groupKey].intervals.push(interval)}return setGroupId(groupId),Object.values(groups)}function generateGroupKey(interval){return[`gender=${interval.gender}`,`age=${formatRange2(interval.age)}`,`gestationalAge=${formatRange2(interval.gestationalAge)}`,`context=${interval.context?.text}`,`appliesTo=${interval.appliesTo?.map(c=>c.text).join("+")}`,`category=${interval.category}`].join(":")}function getUnitString(unit){return unit&&(getCodeBySystem(unit,"http://unitsofmeasure.org")||unit.text)}function isEmptyInterval(interval){return interval.range?.low?.value===void 0&&interval.range?.high?.value===void 0}import{Button as Button22,Grid as Grid4,Text as Text18}from"@mantine/core";import{formatDateTime as formatDateTime6,getReferenceString as getReferenceString9}from"@medplum/core";import{Fragment as Fragment37,useEffect as useEffect19,useState as useState54}from"react";import{jsx as jsx105,jsxs as jsxs64}from"react/jsx-runtime";function RequestGroupDisplay(props){let medplum=s(),requestGroup=j(props.value),[startedLoading,setStartedLoading]=useState54(!1),[responseBundle,setResponseBundle]=useState54();if(useEffect19(()=>{requestGroup&&!startedLoading&&(medplum.executeBatch(buildBatchRequest(requestGroup)).then(setResponseBundle).catch(console.log),setStartedLoading(!0))},[medplum,requestGroup,startedLoading]),!requestGroup||!responseBundle)return null;return jsx105(Grid4,{children:requestGroup.action?.map((action,index)=>{let task=action.resource&&findBundleEntry(action.resource),taskInput=task?.input?.[0]?.valueReference,taskOutput=task?.output?.[0]?.valueReference;return jsxs64(Fragment37,{children:[jsx105(Grid4.Col,{span:1,p:"md",children:task?.status==="completed"?jsx105(IconCheckbox,{}):jsx105(IconSquare,{color:"gray"})}),jsxs64(Grid4.Col,{span:9,p:"xs",children:[jsx105(Text18,{fw:500,children:action.title}),action.description&&jsx105("div",{children:action.description}),jsxs64("div",{children:["Last edited by\xA0",jsx105(ResourceName,{value:task?.meta?.author}),"\xA0on\xA0",formatDateTime6(task?.meta?.lastUpdated)]}),jsxs64("div",{children:["Status: ",jsx105(StatusBadge,{status:task?.status||"unknown"})]})]}),jsxs64(Grid4.Col,{span:2,p:"md",children:[taskInput&&!taskOutput&&jsx105(Button22,{onClick:()=>props.onStart(task,taskInput),children:"Start"}),taskInput&&taskOutput&&jsx105(Button22,{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===getReferenceString9(entry.resource))return entry.resource}}import{useEffect as useEffect20,useState as useState55}from"react";import{stringify as stringify7}from"@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 d2=0;d2<MAX;d2++){for(let k2=-d2;k2<=d2;k2+=2){let kmiddle=middle+k2,kplus=kmiddle+1,kminus=kmiddle-1,kplusNode=diagonal[kplus],kminusNode=diagonal[kminus],prev,i=0;k2===-d2||k2!==d2&&kminusNode.i<kplusNode.i?(i=kplusNode.i,prev=kplusNode):(i=kminusNode.i+1,prev=kminusNode),diagonal[kminus]=void 0;let j2=i-k2,node={i,j:j2,prev:previousSnake(prev),snake:!1};for(;i<N2&&j2<M2&&orig[i]===rev[j2];)i++,j2++;if(i>node.i&&(node={i,j:j2,prev:node,snake:!0}),diagonal[kmiddle]=node,i>=N2&&j2>=M2)return diagonal[kmiddle]}diagonal[middle+d2-1]=void 0}}function buildRevisions(startNode,orig,rev){let deltas=[],path=startNode;for(path.snake&&(path=path.prev);path?.prev&&path.prev.j>=0;){let i=path.i,j2=path.j;path=path.prev;let ianchor=path.i,janchor=path.j,original={position:ianchor,lines:orig.slice(ianchor,i)},revised={position:janchor,lines:rev.slice(janchor,j2)},type;original.lines.length===0&&revised.lines.length>0?type="insert":original.lines.length>0&&revised.lines.length===0?type="delete":type="change",deltas.push({original,revised,type}),path.snake&&(path=path.prev)}return deltas}function previousSnake(node){return node&&!node.snake&&node.prev?node.prev:node}function blame(history){let versions=history.entry.filter(entry=>!!entry.resource).map(entry=>({meta:entry.resource?.meta,lines:stringify7(entry.resource,!0).match(/[^\r\n]+/g)})).sort((a,b2)=>a.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`}import{Fragment as Fragment38,jsx as jsx106,jsxs as jsxs65}from"react/jsx-runtime";function ResourceBlame(props){let medplum=s(),[value,setValue]=useState55(props.history);if(useEffect20(()=>{!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 jsx106("div",{children:"Loading..."});let resource=value.entry?.[0]?.resource;if(!resource)return null;let table=blame(value);return jsx106("div",{className:ResourceBlame_default.container,children:jsx106("table",{className:ResourceBlame_default.root,children:jsx106("tbody",{children:table.map((row,index)=>jsxs65("tr",{className:row.span>0?ResourceBlame_default.startRow:ResourceBlame_default.normalRow,children:[row.span>0&&jsxs65(Fragment38,{children:[jsx106("td",{className:ResourceBlame_default.author,rowSpan:row.span,children:jsx106(ResourceBadge,{value:row.meta.author,link:!0})}),jsx106("td",{className:ResourceBlame_default.dateTime,rowSpan:row.span,children:jsx106(MedplumLink,{to:getVersionUrl(resource,row.meta.versionId),children:getTimeString(row.meta.lastUpdated)})})]}),jsx106("td",{className:ResourceBlame_default.lineNumber,children:index+1}),jsx106("td",{className:ResourceBlame_default.line,children:jsx106("pre",{className:ResourceBlame_default.pre,children:row.value})})]},"row-"+index))})})})}import{stringify as stringify8}from"@medplum/core";var ResourceDiff_default={removed:"ResourceDiff_removed",added:"ResourceDiff_added"};import{Fragment as Fragment39,jsx as jsx107,jsxs as jsxs66}from"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=stringify8(originalResource,!0).match(/[^\r\n]+/g),revised=stringify8(revisedResource,!0).match(/[^\r\n]+/g),deltas=diff(original,revised);return jsx107("pre",{style:{color:"gray"},children:deltas.map((delta,index)=>jsx107(ChangeDiff,{delta},"delta"+index))})}function ChangeDiff(props){return jsxs66(Fragment39,{children:["...",jsx107("br",{}),props.delta.original.lines.length>0&&jsx107("div",{className:ResourceDiff_default.removed,children:props.delta.original.lines.join(`
72
+ `)}),props.delta.revised.lines.length>0&&jsx107("div",{className:ResourceDiff_default.added,children:props.delta.revised.lines.join(`
73
+ `)}),"...",jsx107("br",{})]})}import{Button as Button23,Group as Group39,Stack as Stack19,TextInput as TextInput22}from"@mantine/core";import{deepClone as deepClone3,tryGetProfile as tryGetProfile4}from"@medplum/core";import{useEffect as useEffect21,useState as useState56}from"react";import{jsx as jsx108,jsxs as jsxs67}from"react/jsx-runtime";function ResourceForm(props){let{outcome}=props,medplum=s(),defaultValue2=j(props.defaultValue),[schemaLoaded,setSchemaLoaded]=useState56(),[value,setValue]=useState56();return useEffect21(()=>{if(defaultValue2)if(setValue(deepClone3(defaultValue2)),props.profileUrl){let profileUrl=props.profileUrl;medplum.requestProfileSchema(props.profileUrl).then(()=>{let profile=tryGetProfile4(profileUrl);profile?setSchemaLoaded(profile.name):console.log(`Schema not found for ${profileUrl}`)}).catch(console.log)}else{let schemaName=props.schemaName??defaultValue2?.resourceType;medplum.requestSchema(schemaName).then(()=>setSchemaLoaded(schemaName)).catch(console.log)}},[medplum,defaultValue2,props.schemaName,props.profileUrl]),!schemaLoaded||!value?jsx108("div",{children:"Loading..."}):jsxs67("form",{noValidate:!0,autoComplete:"off",onSubmit:e=>{e.preventDefault(),props.onSubmit&&props.onSubmit(value)},children:[jsxs67(Stack19,{mb:"xl",children:[jsx108(FormSection,{title:"Resource Type",htmlFor:"resourceType",outcome,children:jsx108(TextInput22,{name:"resourceType",defaultValue:value.resourceType,disabled:!0})}),jsx108(FormSection,{title:"ID",htmlFor:"id",outcome,children:jsx108(TextInput22,{name:"id",defaultValue:value.id,disabled:!0})})]}),jsx108(BackboneElementInput,{typeName:schemaLoaded,defaultValue:value,outcome,onChange:setValue,profileUrl:props.profileUrl}),jsxs67(Group39,{justify:"flex-end",mt:"xl",children:[jsx108(Button23,{type:"submit",children:"OK"}),props.onDelete&&jsx108(Button23,{variant:"outline",color:"red",type:"button",onClick:()=>{props.onDelete(value)},children:"Delete"})]})]})}import{Table as Table4}from"@mantine/core";import{formatDateTime as formatDateTime7,normalizeErrorString as normalizeErrorString6}from"@medplum/core";import{useEffect as useEffect22,useState as useState57}from"react";import{jsx as jsx109,jsxs as jsxs68}from"react/jsx-runtime";function ResourceHistoryTable(props){let medplum=s(),[value,setValue]=useState57(props.history);return useEffect22(()=>{!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?jsxs68(Table4,{withTableBorder:!0,withRowBorders:!0,withColumnBorders:!0,children:[jsx109(Table4.Thead,{children:jsxs68(Table4.Tr,{children:[jsx109(Table4.Th,{children:"Author"}),jsx109(Table4.Th,{children:"Date"}),jsx109(Table4.Th,{children:"Version"})]})}),jsx109(Table4.Tbody,{children:value.entry?.map((entry,index)=>jsx109(HistoryRow,{entry},"entry-"+index))})]}):jsx109("div",{children:"Loading..."})}function HistoryRow(props){let{response,resource}=props.entry;return resource?jsxs68(Table4.Tr,{children:[jsx109(Table4.Td,{children:jsx109(ResourceBadge,{value:resource.meta?.author,link:!0})}),jsx109(Table4.Td,{children:formatDateTime7(resource.meta?.lastUpdated)}),jsx109(Table4.Td,{children:jsx109(MedplumLink,{to:getVersionUrl2(resource),children:resource.meta?.versionId})})]}):jsx109(Table4.Tr,{children:jsx109(Table4.Td,{colSpan:3,children:normalizeErrorString6(response?.outcome)})})}function getVersionUrl2(resource){return`/${resource.resourceType}/${resource.id}/_history/${resource.meta?.versionId}`}import{Button as Button24,Stack as Stack20,Text as Text19}from"@mantine/core";import{getReferenceString as getReferenceString10,isReference as isReference3}from"@medplum/core";import{useState as useState58}from"react";var Scheduler_default={container:"Scheduler_container",info:"Scheduler_info",selection:"Scheduler_selection"};import{jsx as jsx110,jsxs as jsxs69}from"react/jsx-runtime";function Scheduler(props){let schedule=j(props.schedule),questionnaire=j(props.questionnaire),[month,setMonth]=useState58(getStartMonth()),[date,setDate]=useState58(),[slot,setSlot]=useState58(),[response,setResponse]=useState58(),[slots]=ce("Slot",new URLSearchParams([["_count",(30*24).toString()],["schedule",isReference3(props.schedule)?props.schedule.reference:getReferenceString10(props.schedule)],["start","gt"+getStart2(month)],["start","lt"+getEnd2(month)]]));if(!schedule||!slots||!questionnaire)return null;let actor=schedule.actor?.[0];return jsxs69("div",{className:Scheduler_default.container,"data-testid":"scheduler",children:[jsxs69("div",{className:Scheduler_default.info,children:[actor&&jsx110(ResourceAvatar,{value:actor,size:"xl"}),actor&&jsx110(Text19,{size:"xl",fw:500,children:jsx110(ResourceName,{value:actor})}),jsx110("p",{children:"1 hour"}),date&&jsx110("p",{children:date.toLocaleDateString()}),slot&&jsx110("p",{children:formatTime(new Date(slot.start))})]}),jsxs69("div",{className:Scheduler_default.selection,children:[!date&&jsxs69("div",{children:[jsx110("h3",{children:"Select date"}),jsx110(CalendarInput,{slots,onChangeMonth:setMonth,onClick:setDate})]}),date&&!slot&&jsxs69("div",{children:[jsx110("h3",{children:"Select time"}),jsx110(Stack20,{children:slots.map(s2=>{let slotStart=new Date(s2.start);return slotStart.getTime()>date.getTime()&&slotStart.getTime()<date.getTime()+24*3600*1e3&&jsx110("div",{children:jsx110(Button24,{variant:"outline",style:{width:150},onClick:()=>setSlot(s2),children:formatTime(slotStart)})},s2.id)})})]}),date&&slot&&!response&&jsx110(QuestionnaireForm,{questionnaire,submitButtonText:"Next",onSubmit:setResponse}),date&&slot&&response&&jsxs69("div",{children:[jsx110("h3",{children:"You're all set!"}),jsx110("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"})}import{createReference as createReference11}from"@medplum/core";import{jsx as jsx111}from"react/jsx-runtime";function ServiceRequestTimeline(props){return jsx111(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:[createReference11(resource)],subject:resource.subject,sender:createReference11(sender),sent:new Date().toISOString(),payload:[{contentString:text}]}),createMedia:(resource,operator,content)=>({resourceType:"Media",status:"completed",basedOn:[createReference11(resource)],subject:resource.subject,operator:createReference11(operator),issued:new Date().toISOString(),content})})}import{Anchor as Anchor13}from"@mantine/core";import{showNotification as showNotification6}from"@mantine/notifications";import{normalizeErrorString as normalizeErrorString7}from"@medplum/core";import{jsx as jsx112}from"react/jsx-runtime";function SmartAppLaunchLink(props){let medplum=s(),{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=>showNotification6({color:"red",message:normalizeErrorString7(err),autoClose:!1}))}return jsx112(Anchor13,{onClick:()=>launchApp(),...rest,children})}import{normalizeOperationOutcome as normalizeOperationOutcome5}from"@medplum/core";import{useEffect as useEffect25,useState as useState62}from"react";import{Anchor as Anchor14,Button as Button25,Center as Center4,Group as Group40,Stack as Stack21,Text as Text20,TextInput as TextInput23,Title as Title6}from"@mantine/core";import{normalizeOperationOutcome as normalizeOperationOutcome3}from"@medplum/core";import{useState as useState59}from"react";import{jsx as jsx113,jsxs as jsxs70}from"react/jsx-runtime";function NewProjectForm(props){let medplum=s(),[outcome,setOutcome]=useState59();return jsxs70(Form,{style:{maxWidth:400},onSubmit:async formData=>{try{props.handleAuthResponse(await medplum.startNewProject({login:props.login,projectName:formData.projectName}))}catch(err){setOutcome(normalizeOperationOutcome3(err))}},children:[jsxs70(Center4,{style:{flexDirection:"column"},children:[jsx113(Logo,{size:32}),jsx113(Title6,{children:"Create project"})]}),jsxs70(Stack21,{gap:"xl",children:[jsx113(TextInput23,{name:"projectName",label:"Project Name",placeholder:"My Project",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),jsxs70(Text20,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",jsx113(Anchor14,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",jsx113(Anchor14,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]})]}),jsx113(Group40,{justify:"flex-end",mt:"xl",wrap:"nowrap",children:jsx113(Button25,{type:"submit",children:"Create project"})})]})}import{Anchor as Anchor15,Button as Button26,Center as Center5,Checkbox as Checkbox4,Divider as Divider3,Group as Group41,PasswordInput,Stack as Stack22,Text as Text21,TextInput as TextInput24}from"@mantine/core";import{normalizeOperationOutcome as normalizeOperationOutcome4}from"@medplum/core";import{useEffect as useEffect24,useState as useState61}from"react";import{useEffect as useEffect23,useRef as useRef17,useState as useState60}from"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)}import{jsx as jsx114}from"react/jsx-runtime";function GoogleButton(props){let medplum=s(),{googleClientId,handleGoogleCredential}=props,parentRef=useRef17(null),[scriptLoaded,setScriptLoaded]=useState60(typeof google<"u"),[initialized,setInitialized]=useState60(!1),[buttonRendered,setButtonRendered]=useState60(!1);return useEffect23(()=>{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?jsx114("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)}})})}import{Fragment as Fragment40,jsx as jsx115,jsxs as jsxs71}from"react/jsx-runtime";function NewUserForm(props){let googleClientId=getGoogleClientId(props.googleClientId),recaptchaSiteKey=props.recaptchaSiteKey,medplum=s(),[outcome,setOutcome]=useState61(),issues=getIssuesForExpression(outcome,void 0);return useEffect24(()=>{recaptchaSiteKey&&initRecaptcha(recaptchaSiteKey)},[recaptchaSiteKey]),jsxs71(Form,{style:{maxWidth:400},onSubmit:async formData=>{try{let recaptchaToken="";recaptchaSiteKey&&(recaptchaToken=await getRecaptcha(recaptchaSiteKey)),props.handleAuthResponse(await medplum.startNewUser({projectId:props.projectId,clientId:props.clientId,firstName:formData.firstName,lastName:formData.lastName,email:formData.email,password:formData.password,remember:formData.remember==="true",recaptchaSiteKey,recaptchaToken}))}catch(err){setOutcome(normalizeOperationOutcome4(err))}},children:[jsx115(Center5,{style:{flexDirection:"column"},children:props.children}),jsx115(OperationOutcomeAlert,{issues}),googleClientId&&jsxs71(Fragment40,{children:[jsx115(Group41,{justify:"center",p:"xl",style:{height:70},children:jsx115(GoogleButton,{googleClientId,handleGoogleCredential:async response=>{try{props.handleAuthResponse(await medplum.startGoogleLogin({googleClientId:response.clientId,googleCredential:response.credential,createUser:!0}))}catch(err){setOutcome(normalizeOperationOutcome4(err))}}})}),jsx115(Divider3,{label:"or",labelPosition:"center",my:"lg"})]}),jsxs71(Stack22,{gap:"xl",children:[jsx115(TextInput24,{name:"firstName",type:"text",label:"First name",placeholder:"First name",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"firstName")}),jsx115(TextInput24,{name:"lastName",type:"text",label:"Last name",placeholder:"Last name",required:!0,error:getErrorsForInput(outcome,"lastName")}),jsx115(TextInput24,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,error:getErrorsForInput(outcome,"email")}),jsx115(PasswordInput,{name:"password",label:"Password",autoComplete:"off",required:!0,error:getErrorsForInput(outcome,"password")}),jsxs71(Text21,{c:"dimmed",size:"xs",children:["By clicking submit you agree to the Medplum"," ",jsx115(Anchor15,{href:"https://www.medplum.com/privacy",children:"Privacy\xA0Policy"})," and ",jsx115(Anchor15,{href:"https://www.medplum.com/terms",children:"Terms\xA0of\xA0Service"}),"."]}),jsxs71(Text21,{c:"dimmed",size:"xs",children:["This site is protected by reCAPTCHA and the Google"," ",jsx115(Anchor15,{href:"https://policies.google.com/privacy",children:"Privacy\xA0Policy"})," and ",jsx115(Anchor15,{href:"https://policies.google.com/terms",children:"Terms\xA0of\xA0Service"})," apply."]})]}),jsxs71(Group41,{justify:"space-between",mt:"xl",wrap:"nowrap",children:[jsx115(Checkbox4,{name:"remember",label:"Remember me",size:"xs"}),jsx115(Button26,{type:"submit",children:"Create account"})]})]})}import{jsx as jsx116,jsxs as jsxs72}from"react/jsx-runtime";function RegisterForm(props){let{type,projectId,clientId,googleClientId,recaptchaSiteKey,onSuccess}=props,medplum=s(),[login,setLogin]=useState62(),[outcome,setOutcome]=useState62();useEffect25(()=>{type==="patient"&&login&&medplum.startNewPatient({login,projectId}).then(response=>medplum.processCode(response.code)).then(()=>onSuccess()).catch(err=>setOutcome(normalizeOperationOutcome5(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 jsxs72(Document,{width:450,children:[outcome&&jsx116("pre",{children:JSON.stringify(outcome,null,2)}),!login&&jsx116(NewUserForm,{projectId,clientId,googleClientId,recaptchaSiteKey,handleAuthResponse,children:props.children}),login&&type==="project"&&jsx116(NewProjectForm,{login,handleAuthResponse})]})}import{showNotification as showNotification7}from"@mantine/notifications";import{normalizeErrorString as normalizeErrorString9}from"@medplum/core";import{useCallback as useCallback17,useEffect as useEffect26,useState as useState66}from"react";import{Anchor as Anchor16,Button as Button27,Center as Center6,Checkbox as Checkbox5,Divider as Divider4,Group as Group42,PasswordInput as PasswordInput2,Stack as Stack23,TextInput as TextInput25}from"@mantine/core";import{normalizeOperationOutcome as normalizeOperationOutcome6}from"@medplum/core";import{useCallback as useCallback16,useState as useState63}from"react";import{Fragment as Fragment41,jsx as jsx117,jsxs as jsxs73}from"react/jsx-runtime";function AuthenticationForm(props){let[email,setEmail]=useState63();return email?jsx117(PasswordForm,{email,...props}):jsx117(EmailForm,{setEmail,...props})}function EmailForm(props){let{setEmail,onRegister,handleAuthResponse,children,disableEmailAuth,...baseLoginRequest}=props,medplum=s(),googleClientId=!props.disableGoogleAuth&&getGoogleClientId(props.googleClientId),isExternalAuth=useCallback16(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=useCallback16(async formData=>{let authMethod=await medplum.post("auth/method",{email:formData.email});await isExternalAuth(authMethod)||setEmail(formData.email)},[medplum,isExternalAuth,setEmail]),handleGoogleCredential=useCallback16(async response=>{let authResponse=await medplum.startGoogleLogin({...baseLoginRequest,googleCredential:response.credential});await isExternalAuth(authResponse)||handleAuthResponse(authResponse)},[medplum,baseLoginRequest,isExternalAuth,handleAuthResponse]);return jsxs73(Form,{style:{maxWidth:400},onSubmit:handleSubmit,children:[jsx117(Center6,{style:{flexDirection:"column"},children}),googleClientId&&jsxs73(Fragment41,{children:[jsx117(Group42,{justify:"center",p:"xl",style:{height:70},children:jsx117(GoogleButton,{googleClientId,handleGoogleCredential})}),!disableEmailAuth&&jsx117(Divider4,{label:"or",labelPosition:"center",my:"lg"})]}),!disableEmailAuth&&jsx117(TextInput25,{name:"email",type:"email",label:"Email",placeholder:"name@domain.com",required:!0,autoFocus:!0}),jsxs73(Group42,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[jsx117("div",{children:onRegister&&jsx117(Anchor16,{component:"button",type:"button",color:"dimmed",onClick:onRegister,size:"xs",children:"Register"})}),!disableEmailAuth&&jsx117(Button27,{type:"submit",children:"Next"})]})]})}function PasswordForm(props){let{onForgotPassword,handleAuthResponse,children,...baseLoginRequest}=props,medplum=s(),[outcome,setOutcome]=useState63(),issues=getIssuesForExpression(outcome,void 0),handleSubmit=useCallback16(formData=>{medplum.startLogin({...baseLoginRequest,password:formData.password,remember:formData.remember==="on"}).then(handleAuthResponse).catch(err=>setOutcome(normalizeOperationOutcome6(err)))},[medplum,baseLoginRequest,handleAuthResponse]);return jsxs73(Form,{style:{maxWidth:400},onSubmit:handleSubmit,children:[jsx117(Center6,{style:{flexDirection:"column"},children}),jsx117(OperationOutcomeAlert,{issues}),jsx117(Stack23,{gap:"xl",children:jsx117(PasswordInput2,{name:"password",label:"Password",autoComplete:"off",required:!0,autoFocus:!0,error:getErrorsForInput(outcome,"password")})}),jsxs73(Group42,{justify:"space-between",mt:"xl",gap:0,wrap:"nowrap",children:[onForgotPassword&&jsx117(Anchor16,{component:"button",type:"button",c:"dimmed",onClick:onForgotPassword,size:"xs",children:"Forgot password"}),jsx117(Checkbox5,{id:"remember",name:"remember",label:"Remember me",size:"xs",style:{lineHeight:1}}),jsx117(Button27,{type:"submit",children:"Sign in"})]})]})}import{Avatar as Avatar3,Center as Center7,Group as Group43,Stack as Stack24,Text as Text22,Title as Title7,UnstyledButton as UnstyledButton3}from"@mantine/core";import{normalizeOperationOutcome as normalizeOperationOutcome7}from"@medplum/core";import{useState as useState64}from"react";import{jsx as jsx118,jsxs as jsxs74}from"react/jsx-runtime";function ChooseProfileForm(props){let medplum=s(),[outcome,setOutcome]=useState64();return jsxs74(Stack24,{children:[jsxs74(Center7,{style:{flexDirection:"column"},children:[jsx118(Logo,{size:32}),jsx118(Title7,{order:3,children:"Choose profile"})]}),jsx118(OperationOutcomeAlert,{outcome}),props.memberships.map(membership=>jsx118(UnstyledButton3,{onClick:()=>{medplum.post("auth/profile",{login:props.login,profile:membership.id}).then(props.handleAuthResponse).catch(err=>setOutcome(normalizeOperationOutcome7(err)))},children:jsxs74(Group43,{children:[jsx118(Avatar3,{radius:"xl"}),jsxs74("div",{style:{flex:1},children:[jsx118(Text22,{size:"sm",fw:500,children:membership.profile?.display}),jsx118(Text22,{c:"dimmed",size:"xs",children:membership.project?.display})]})]})},membership.id))]})}import{Button as Button28,Center as Center8,Checkbox as Checkbox6,Group as Group44,Stack as Stack25,Title as Title8}from"@mantine/core";import{jsx as jsx119,jsxs as jsxs75}from"react/jsx-runtime";function ChooseScopeForm(props){let medplum=s();return jsx119(Form,{style:{maxWidth:400},onSubmit:formData=>{medplum.post("auth/scope",{login:props.login,scope:Object.keys(formData).join(" ")}).then(props.handleAuthResponse).catch(console.log)},children:jsxs75(Stack25,{children:[jsxs75(Center8,{style:{flexDirection:"column"},children:[jsx119(Logo,{size:32}),jsx119(Title8,{children:"Choose scope"})]}),jsx119(Stack25,{children:(props.scope??"openid").split(" ").map(scopeName=>jsx119(Checkbox6,{id:scopeName,name:scopeName,label:scopeName,defaultChecked:!0},scopeName))}),jsx119(Group44,{justify:"flex-end",mt:"xl",children:jsx119(Button28,{type:"submit",children:"Set scope"})})]})})}import{Alert as Alert3,Button as Button29,Center as Center9,Group as Group45,Stack as Stack26,TextInput as TextInput26,Title as Title9}from"@mantine/core";import{normalizeErrorString as normalizeErrorString8}from"@medplum/core";import{useState as useState65}from"react";import{jsx as jsx120,jsxs as jsxs76}from"react/jsx-runtime";function MfaForm(props){let medplum=s(),[errorMessage,setErrorMessage]=useState65();return jsx120(Form,{style:{maxWidth:400},onSubmit:formData=>{setErrorMessage(void 0),medplum.post("auth/mfa/verify",{login:props.login,token:formData.token}).then(props.handleAuthResponse).catch(err=>setErrorMessage(normalizeErrorString8(err)))},children:jsxs76(Stack26,{children:[jsxs76(Center9,{style:{flexDirection:"column"},children:[jsx120(Logo,{size:32}),jsx120(Title9,{children:"Enter MFA code"})]}),errorMessage&&jsx120(Alert3,{icon:jsx120(IconAlertCircle,{size:16}),title:"Error",color:"red",children:errorMessage}),jsx120(Stack26,{children:jsx120(TextInput26,{name:"token",label:"MFA code",required:!0})}),jsx120(Group45,{justify:"flex-end",mt:"xl",children:jsx120(Button29,{type:"submit",children:"Submit code"})})]})})}import{jsx as jsx121}from"react/jsx-runtime";function SignInForm(props){let{login:loginCode,chooseScopes,onSuccess,onForgotPassword,onRegister,onCode,...baseLoginRequest}=props,medplum=s(),[login,setLogin]=useState66(),[mfaRequired,setAuthenticatorRequired]=useState66(!1),[memberships,setMemberships]=useState66(),handleCode=useCallback17(code=>{onCode?onCode(code):medplum.processCode(code).then(()=>{onSuccess&&onSuccess()}).catch(err=>showNotification7({color:"red",message:normalizeErrorString9(err)}))},[medplum,onCode,onSuccess]),handleAuthResponse=useCallback17(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=useCallback17(response=>{handleCode(response.code)},[handleCode]);return useEffect26(()=>{loginCode&&!login&&medplum.get("auth/login/"+loginCode).then(handleAuthResponse).catch(err=>showNotification7({color:"red",message:normalizeErrorString9(err)}))},[medplum,loginCode,login,handleAuthResponse]),jsx121(Document,{width:450,children:login?mfaRequired?jsx121(MfaForm,{login,handleAuthResponse}):memberships?jsx121(ChooseProfileForm,{login,memberships,handleAuthResponse}):props.projectId==="new"?jsx121(NewProjectForm,{login,handleAuthResponse}):props.chooseScopes?jsx121(ChooseScopeForm,{login,scope:props.scope,handleAuthResponse:handleScopeResponse}):jsx121("div",{children:"Success"}):jsx121(AuthenticationForm,{onForgotPassword,onRegister,handleAuthResponse,disableGoogleAuth:props.disableGoogleAuth,disableEmailAuth:props.disableEmailAuth,...baseLoginRequest,children:props.children})})}export{AddressDisplay,AddressInput,AnnotationInput,AppShell,AsyncAutocomplete,AttachmentArrayDisplay,AttachmentArrayInput,AttachmentButton,AttachmentDisplay,AttachmentInput,BackboneElementDisplay,BackboneElementInput,CalendarInput,CheckboxFormSection,CodeInput,CodeableConceptDisplay,CodeableConceptInput,CodingDisplay,CodingInput,ContactDetailDisplay,ContactDetailInput,ContactPointDisplay,ContactPointInput,Container,DateTimeInput,DefaultResourceTimeline,DescriptionList,DescriptionListEntry,DiagnosticReportDisplay,Document,ElementDefinitionInputSelector,ElementDefinitionTypeInput,EncounterTimeline,ErrorBoundary,FhirPathTable,Form,FormSection,Header,HumanNameDisplay,HumanNameInput,IdentifierDisplay,IdentifierInput,Loading,Logo,MeasureReportDisplay,MedplumLink,H as MedplumProvider,MemoizedFhirPathTable,MemoizedSearchControl,MoneyDisplay,MoneyInput,Navbar,NoteDisplay,ObservationTable,OperationOutcomeAlert,Panel,PatientSummary,PatientTimeline,PlanDefinitionBuilder,QuantityDisplay,QuantityInput,QuestionnaireBuilder,QuestionnaireForm,QuestionnaireItemType,RangeDisplay,RangeInput,ReferenceDisplay,ReferenceInput,ReferenceRangeEditor,ReferenceRangeGroupEditor,RegisterForm,RequestGroupDisplay,ResourceArrayDisplay,ResourceArrayInput,ResourceAvatar,ResourceBadge,ResourceBlame,ResourceDiff,ResourceForm,ResourceHistoryTable,ResourceInput,ResourceName,ResourcePropertyDisplay,ResourcePropertyInput,ResourceTable,ResourceTimeline,Scheduler,SearchChangeEvent,SearchClickEvent,SearchControl,SearchFieldEditor,SearchFilterEditor,SearchLoadEvent,ServiceRequestTimeline,SignInForm,SmartAppLaunchLink,StatusBadge,Timeline,TimelineItem,TimingInput,ValueSetAutocomplete,addDateFilterBetween,addField,addFilter,addLastMonthFilter,addMissingFilter,addNextMonthFilter,addThisMonthFilter,addTodayFilter,addTomorrowFilter,addYearToDateFilter,addYesterdayFilter,buildFieldNameString,buildInitialResponse,buildInitialResponseItem,clearFilters,clearFiltersOnField,convertIsoToLocal,convertLocalToIso,createScriptTag,deleteFilter,formatReferenceString,getErrorsForInput,getFieldDefinitions,getIssuesForExpression,getNewMultiSelectValues,getNumberOfPages,getOpString,getQuestionnaireItemReferenceFilter,getQuestionnaireItemReferenceTargetTypes,getRecaptcha,getSearchOperators,getSortField,initRecaptcha,isChoiceQuestion,isQuestionEnabled,isSortDescending,isSupportedProfileStructureDefinition,parseForm,p as reactContext,renderValue,setFilters,setOffset,setPage,setPropertyValue,setQuestionnaireItemReferenceTargetTypes,setSort,sortByDateAndPriority,toggleSort,s as useMedplum,m as useMedplumContext,B as useMedplumNavigate,w as useMedplumProfile,j as useResource,ie as useSearch,ue as useSearchOne,ce as useSearchResources};
74
74
  //# sourceMappingURL=index.mjs.map