@sergeymosyakov/questionnaire-widget 1.0.11 → 1.0.12
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.
- package/package.json +1 -1
- package/questionnaire-widget.css +1 -1
- package/questionnaire-widget.global.js +17 -17
- package/questionnaire-widget.js +17 -17
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
var FhirQuestionnaireWidget=(()=>{var Wt=Object.defineProperty;var ls=Object.getOwnPropertyDescriptor;var cs=Object.getOwnPropertyNames;var us=Object.prototype.hasOwnProperty;var ds=(n,t)=>{for(var e in t)Wt(n,e,{get:t[e],enumerable:!0})},ps=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of cs(t))!us.call(n,s)&&s!==e&&Wt(n,s,{get:()=>t[s],enumerable:!(i=ls(t,s))||i.enumerable});return n};var fs=n=>ps(Wt({},"__esModule",{value:!0}),n);var Or={};ds(Or,{QuestionnaireRenderer:()=>In});var Ne=class{constructor(t){this._target=t||(typeof document<"u"?document:new EventTarget)}dispatch(t,e){this._target.dispatchEvent(new CustomEvent(t,{detail:e}))}on(t,e,i){return this._target.addEventListener(t,e,i),()=>this._target.removeEventListener(t,e,i)}off(t,e,i){this._target.removeEventListener(t,e,i)}get target(){return this._target}},X=new Ne;function Mn(n,t){let e=new Map;for(let i of t)n.on(i,s=>e.set(i,s?.detail??{}));return{get(i){return e.get(i)},_set(i,s){e.set(i,s)}}}var hs="e3a8c2f1-6b4d-4e9a-87c5",Be=hs+":group-or";function tt(n){n.forEach(t=>t.destroy?.()),n.splice(0)}function Ce(n,t){for(let e of t.children)if(e.id===n||e.children?.length&&Ce(n,e))return!0;return!1}function ms(n){let t=n.indexOf("=");return t===-1?{code:n,display:n}:{code:n.slice(0,t).trim(),display:n.slice(t+1).trim()}}function nt(n){return(n||"").split(",").map(t=>t.trim()).filter(Boolean).map(ms)}function Pn(n){return(n||[]).map(t=>{if(t.valueCoding){let e=t.valueCoding.code||t.valueCoding.display||"",i=t.valueCoding.display||t.valueCoding.code||"";return{code:e,display:i}}if(t.valueString!==void 0)return{code:t.valueString,display:t.valueString};if(t.valueInteger!==void 0)return{code:String(t.valueInteger),display:String(t.valueInteger)};if(t.valueDate!==void 0)return{code:t.valueDate,display:t.valueDate};if(t.valueTime!==void 0)return{code:t.valueTime,display:t.valueTime};if(t.valueReference){let e=typeof t.valueReference=="string"?t.valueReference:t.valueReference.reference||"",i=typeof t.valueReference=="object"&&t.valueReference.display||e;return{code:e,display:i}}return null}).filter(Boolean)}function Ee(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/("(?:\\u[0-9a-fA-F]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(?:true|false|null)\b|-?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?)/g,e=>{let i;return/^"/.test(e)?i=/:$/.test(e)?"jv-k":"jv-s":e==="true"||e==="false"?i="jv-b":e==="null"?i="jv-null":i="jv-n",'<span class="'+i+'">'+e+"</span>"})}function Bn(n,t){if(!t)return{html:Ee(n),count:0};let e=t.toLowerCase(),i=n.toLowerCase(),s=[],a=0;for(;(a=i.indexOf(e,a))!==-1;)s.push(a),a+=e.length;if(s.length===0)return{html:Ee(n),count:0};let o="",l=0;for(let c of s)o+=n.slice(l,c)+""+n.slice(c,c+e.length)+"",l=c+e.length;o+=n.slice(l);let r=Ee(o);return r=r.split("").join('<mark class="search-match">'),r=r.split("").join("</mark>"),{html:r,count:s.length}}var C=Object.freeze({QUESTIONNAIRE_LOADED:"questionnaire-loaded",QUESTIONNAIRE_CLEARED:"questionnaire-cleared",QUESTIONNAIRE_NEW:"questionnaire-new",QUESTIONNAIRE_CLEAR_REQUESTED:"questionnaire-clear-requested",QUESTIONNAIRE_RESET:"questionnaire-reset",QUESTIONNAIRE_META_CHANGED:"questionnaire-meta-changed",QUESTIONNAIRE_LOAD_CONFIRM_REQUESTED:"questionnaire-load-confirm-requested",QUESTIONNAIRE_LOAD_REQUESTED:"questionnaire-load-requested",APP_CONTEXT_READY:"app:context-ready",BUILDER_RERENDER:"builder:rerender",BUILDER_NAVIGATE:"builder:navigate",BUILDER_NAVIGATE_TO:"builder:navigate-to",BUILDER_EXPAND_ALL:"builder:expand-all",BUILDER_COLLAPSE_ALL:"builder:collapse-all",BUILDER_VIEW_MODE_CHANGE:"builder:view-mode-change",BUILDER_META_ROW_CHANGE:"builder:meta-row-change",PREVIEW_NAVIGATE_TO:"preview:navigate-to",REINIT_FORM:"reinit-form",SHOW_JSON:"show-json",VIEW_PREF_CHANGE:"view-pref-change",PREVIEW_MODE_CHANGE:"preview-mode-change",RESPONSE_CHANGED:"preview:response-changed",PREVIEW_RENDER_DONE:"preview:render-done",SDC_POPULATE_REQUESTED:"sdc:populate-requested",DEF_EXTRACT_REQUESTED:"sdc:def-extract-requested",BUILDER_RENDER_DONE:"builder:render-done",PATIENT_CTX_APPLIED:"patient-ctx-applied",QR_LOADED:"qr-loaded",CLOUD_SAVE_REQUESTED:"cloud-save-requested",CLOUD_LOAD_REQUESTED:"cloud-load-requested",CLOSE_DROPDOWNS:"close-dropdowns",LANGUAGE_CHANGED:"language-changed",TRANSLATE_REQUESTED:"translate-requested",FHIRPATH_TESTER_REQUESTED:"fhirpath-tester-requested",CALC_RECALC_REQUESTED:"calc-recalc-requested",REFRESH_EXPR_ICONS:"refresh-expr-icons",REFRESH_CALC_BADGES:"refresh-calc-badges",COLLAPSE_ALL_PREVIEW:"collapse-all-preview",EXPAND_ALL_PREVIEW:"expand-all-preview",RENUMBER_FORMAT_CHANGED:"renumber-format-changed",RENUMBER_PROGRESS:"renumber-progress",RENUMBER_DONE:"renumber-done",VALIDATOR_TOGGLE:"validator-toggle",TIPS_INIT_DONE:"tips-init-done",TIPS_TOGGLED:"tips-toggled",AUTOSAVE_INIT_DONE:"autosave-init-done",AUTOSAVE_TOGGLED:"autosave-toggled",AUTOSAVE_SAVED:"autosave-saved",VALIDATE_REQUESTED:"validate-requested",NODE_DELETE_REQUESTED:"node:delete-requested",NODE_COPY_REQUESTED:"node:copy-requested",NODE_PASTE_AFTER_REQUESTED:"node:paste-after-requested",NODE_PASTE_BEFORE_REQUESTED:"node:paste-before-requested",CLIPBOARD_CHANGED:"node:clipboard-changed",COPY_TO_NODES:"copy-to-nodes",ANSWER_SET:"answer:set",ANSWER_DELETE:"answer:delete",ANSWERS_CLEAR:"answer:clear",FHIRPATH_CTX_UPDATED:"fhirpath:ctx-updated",VARIABLES_APPLY:"variables:apply",QR_ANSWERS_REQUESTED:"qr:answers-requested",FILE_NAME_CHANGED:"file-name:changed",CLEAR_CONFIRM_REQUESTED:"reset:clear-confirm-requested",EXPORT_PROMPT_REQUESTED:"reset:export-prompt-requested",VALIDATE_EXPORT_REQUESTED:"reset:validate-export-requested",AUTOSAVE_CLEAR_DRAFT:"reset:autosave-clear-draft",FHIR_VERSION_CHANGED:"fhir-version-changed",METADATA_EDIT_REQUESTED:"metadata-edit-requested"}),gs=new Set([C.APP_CONTEXT_READY,C.QUESTIONNAIRE_LOADED,C.QUESTIONNAIRE_CLEARED,C.QUESTIONNAIRE_NEW,C.FHIR_VERSION_CHANGED,C.PREVIEW_MODE_CHANGE,C.BUILDER_VIEW_MODE_CHANGE,C.BUILDER_META_ROW_CHANGE,C.LANGUAGE_CHANGED]),pe=Mn(X,gs);var qe=class{tree=[];rawFhir=null;contained=[];variables=[];meta={id:"",url:"",version:"",title:"",status:"draft",publisher:"",description:"",name:"",date:"",subjectType:[],purpose:"",copyright:"",approvalDate:"",lastReviewDate:"",effectivePeriodStart:"",effectivePeriodEnd:"",experimental:null,language:"",derivedFrom:[],replaces:[],copyrightLabel:"",_versionAlgorithmString:"",_versionAlgorithmCoding:null,_rawIdentifier:[],_rawText:null,_rawContact:null,_rawUseContext:null,_rawJurisdiction:null,_rawCode:null,_metaVersionId:"",_metaSource:"",_metaLastUpdated:"",_rawMetaProfile:[],_rawMetaTag:[],_rawMetaSecurity:[],_rawQuestExtensions:[],preferredTermServer:"",_signatureRequired:[],_implicitRules:"",fhirTarget:"R4"};translations={};get fhirTarget(){return this.meta.fhirTarget}get containedValueSets(){return this.contained.filter(t=>t.resourceType==="ValueSet")}constructor(t=X){t.on(C.VARIABLES_APPLY,e=>this.applyVariables(e.detail.variables))}applyVariables(t){for(let{name:e,expression:i}of t){let s=this.variables.findIndex(a=>a.name===e);s>=0?this.variables[s].expression=i:this.variables.push({name:e,expression:i})}}reset(){tt(this.tree),this.rawFhir=null,this.contained.splice(0),this.variables.splice(0),Object.assign(this.meta,{id:"",url:"",version:"",title:"",status:"draft",publisher:"",description:"",name:"",date:"",subjectType:[],purpose:"",copyright:"",approvalDate:"",lastReviewDate:"",effectivePeriodStart:"",effectivePeriodEnd:"",experimental:null,language:"",derivedFrom:[],replaces:[],copyrightLabel:"",_versionAlgorithmString:"",_versionAlgorithmCoding:null,_rawIdentifier:[],_rawText:null,_rawContact:null,_rawUseContext:null,_rawJurisdiction:null,_rawCode:null,_metaVersionId:"",_metaSource:"",_metaLastUpdated:"",_rawMetaProfile:[],_rawMetaTag:[],_rawMetaSecurity:[],_rawQuestExtensions:[],preferredTermServer:"",_signatureRequired:[],_implicitRules:"",fhirTarget:"R4"})}},qn=new qe;var Fe=class n{data={};static _parse(t){let e=/^(.+)\$\$(\d+|n)$/.exec(t);return e?e[2]==="n"?{base:e[1],kind:"count"}:{base:e[1],kind:"row",index:Number(e[2])}:{base:t,kind:"row",index:0}}_scope(t){let e=this.data;for(let i of t||[]){let s=e[i.id],a=Array.isArray(s)?s[i.idx]:void 0;if(!a||typeof a!="object")return null;e=a}return e}_scopeOrCreate(t){let e=this.data;for(let i of t||[]){let s=e[i.id];Array.isArray(s)||(s=e[i.id]=[]),(!s[i.idx]||typeof s[i.idx]!="object")&&(s[i.idx]={}),e=s[i.idx]}return e}get(t,e){let i=this._scope(e);if(!i)return;let s=n._parse(t),a=i[s.base];return s.kind==="count"?Array.isArray(a)?Math.max(0,a.length-1):0:Array.isArray(a)?a[s.index]:void 0}getAll(t,e){let i=this._scope(e),s=i&&i[t];return Array.isArray(s)?s.filter(a=>a!==void 0):[]}set(t,e,i){let s=this._scopeOrCreate(i),a=n._parse(t),o=s[a.base]||(s[a.base]=[]);if(a.kind==="count"){let l=e+1;if(o.length>l)o.length=l;else for(;o.length<l;)o.push(void 0);return}o[a.index]=e}remove(t,e){let i=this._scope(e);if(!i)return;let s=n._parse(t);if(s.kind==="count"){let o=i[s.base];o&&(o.length=1);return}if(t===s.base){delete i[s.base];return}let a=i[s.base];a&&delete a[s.index]}instanceCount(t,e){let i=this._scope(e),s=i&&i[t];return Array.isArray(s)?s.length:0}addInstance(t,e){let i=this._scopeOrCreate(e),s=i[t]||(i[t]=[]);return s.push({}),s.length}removeInstance(t,e,i){let s=this._scope(i),a=s&&s[t];Array.isArray(a)&&a.splice(e,1)}clear(){let t=this.data;Object.keys(t).forEach(e=>delete t[e])}toValueMap(){let t={};for(let e of Object.keys(this.data))t[e]=this.data[e].slice();return t}merge(t){for(let e of Object.keys(t))this.data[e]=Array.isArray(t[e])?t[e].slice():[t[e]]}replaceAll(t){this.clear(),this.merge(t)}constructor(t=X){t.on(C.ANSWER_SET,e=>this.set(e.detail.id,e.detail.value,e.detail.path)),t.on(C.ANSWER_DELETE,e=>this.remove(e.detail.id,e.detail.path)),t.on(C.ANSWERS_CLEAR,()=>this.clear())}},it=new Fe;var st=class{constructor({questDoc:t,answerStore:e,bus:i,config:s={}}){this.questDoc=t,this.answerStore=e,this.bus=i,this.config=s}};function Fn(n={}){let t=new Ne(new EventTarget);return new st({questDoc:new qe(t),answerStore:new Fe(t),bus:t,config:n})}var Un=new st({questDoc:qn,answerStore:it,bus:X,config:{}});var Wn={add_another:"+ Add another",add_row:"+ Add another entry",more_info:"More info \u2197",or_separator:"OR",and_separator:"AND",select_placeholder:"select"};function Ht(){return{bus:X,ctx:null,resultMap:null,cEnv:{},visible:[],groupIconMap:null,previewMode:"preview",viewPrefs:null,lastCtx:null,buildControl:null,updateGroupIcons:null,isMandatory:null,calcFormOk:null,evalConstraints:null,getValue:null,getAll:null,set:null,remove:null,CHECKABLE_TYPES:null,instancePath:[],instanceCount:null,addInstance:null,removeInstance:null,evalChildren:null,activeLanguage:"",translations:null,showNavBtn:!0,showExplain:!0}}var Hn=Ht();function Ae(n,t){let e=Wn[n]??n;return t?.activeLanguage?t.translations?.[t.activeLanguage]?.ui?.[n]??e:e}var $n={error:{title:"Error",icon:"!"},warn:{title:"Warning",icon:"!"},info:{title:"Info",icon:"i"}};function $t(n,t){document.removeEventListener("keydown",t,!0),n.style.opacity="0",n.addEventListener("transitionend",()=>n.remove(),{once:!0}),setTimeout(()=>{n.isConnected&&n.remove()},300)}function jn(n,t="error"){let e=$n[t]||$n.error,i=document.createElement("div");i.className="modal-backdrop notif-backdrop",i.style.opacity="0";let s=document.createElement("div");s.className=`modal-box notif-box notif--${t}`,s.setAttribute("role","alertdialog"),s.setAttribute("aria-modal","true");let a=document.createElement("div");a.className="modal-header";let o=document.createElement("div");o.className="notif-header-title";let l=document.createElement("span");l.className="notif-title-icon",l.textContent=e.icon;let r=document.createElement("span");r.className="modal-title-label",r.textContent=e.title,o.append(l,r),a.appendChild(o);let c=document.createElement("div");c.className="modal-body",c.textContent=n;let u=document.createElement("div");u.className="modal-footer";let d=document.createElement("button");d.type="button",d.className="modal-btn modal-btn--apply",d.textContent="OK",u.appendChild(d),s.append(a,c,u),i.appendChild(s),document.body.appendChild(i),i.getBoundingClientRect(),i.style.opacity="1",d.focus();let h=p=>{(p.key==="Escape"||p.key==="Enter")&&$t(i,h)};document.addEventListener("keydown",h,!0),d.onclick=()=>$t(i,h),i.addEventListener("click",p=>{p.target===i&&$t(i,h)})}var _e=n=>jn(n,"error");var Gn=n=>jn(n,"info");var jt=class{_map=new Map;register(t){this._map.set(t.id,t)}get(t){return this._map.get(t)}getAll(){return[...this._map.values()]}getBuilderVersions(){return this.getAll().filter(t=>t.isBuilderVersion)}detectVersion(t){let e=(t?.extension||[]).find(i=>i?.url===we);if(e?.valueCode){for(let i of this._map.values())if(i.metaVersion&&i.metaVersion===e.valueCode)return i.id}return this._map.has("R5")&&(Gt(t?.item,"disabledDisplay")||Gt(t?.item,"answerConstraint"))?"R5":"R4"}},we="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/builder-target-version",Le="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/item-answerConstraint",Oe="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/item-disabledDisplay";function De(n,t){n.extension=(n.extension||[]).filter(e=>e?.url!==we),n.extension.push({url:we,valueCode:t}),n.extension.length===0&&delete n.extension}function Gt(n,t){if(!Array.isArray(n))return!1;for(let e of n)if(e?.[t]!==void 0||Gt(e?.item,t))return!0;return!1}var fe=new jt;function Qn(n){return typeof n=="string"&&(n.startsWith("3.")||n.startsWith("1."))}function Yn(n){if(!n)return!1;if(n.type==="coding"||Array.isArray(n.option)&&n.option.length||n.options)return!0;for(let t of n.enableWhen||[])if(t.hasAnswer!==void 0||!("operator"in t)&&_s(t))return!0;if(ys(n))return!0;for(let t of n.item||[])if(Yn(t))return!0;return!1}function _s(n){return Object.keys(n).some(t=>t.startsWith("answer"))}var vs=["initialBoolean","initialDecimal","initialInteger","initialDate","initialDateTime","initialTime","initialString","initialUri","initialAttachment","initialCoding","initialQuantity","initialReference"];function ys(n){return vs.some(t=>n[t]!==void 0)}function xs(n){if(!n||n.resourceType!=="Questionnaire"||(n.extension||[]).some(t=>t?.url===we))return!1;if(Qn(n.fhirVersion)||Qn(n.meta?.fhirVersion))return!0;for(let t of n.item||[])if(Yn(t))return!0;return!1}function bs(n){Array.isArray(n.option)&&!Array.isArray(n.answerOption)&&(n.answerOption=n.option,delete n.option)}function Es(n){n.options&&typeof n.options=="object"&&n.options.reference&&(n.answerValueSet=n.options.reference,delete n.options)}function Cs(n){return Array.isArray(n)?n.map(t=>{let e={...t};return e.hasAnswer!==void 0?(e.operator="exists",e.answerBoolean=e.hasAnswer,delete e.hasAnswer,e):(e.operator||Object.keys(e).find(s=>s.startsWith("answer"))&&(e.operator="="),e)}):n}var ws={initialBoolean:"valueBoolean",initialDecimal:"valueDecimal",initialInteger:"valueInteger",initialDate:"valueDate",initialDateTime:"valueDateTime",initialTime:"valueTime",initialString:"valueString",initialUri:"valueUri",initialAttachment:"valueAttachment",initialCoding:"valueCoding",initialQuantity:"valueQuantity",initialReference:"valueReference"};function Ss(n){if(!Array.isArray(n.initial)){for(let[t,e]of Object.entries(ws))if(n[t]!==void 0){n.initial=[{[e]:n[t]}],delete n[t];return}}}function Rs(n){n.type==="coding"&&(n.type="choice")}function Jn(n){Rs(n),bs(n),Es(n),n.enableWhen&&(n.enableWhen=Cs(n.enableWhen)),Ss(n);for(let t of n.item||[])Jn(t)}function zn(n){if(!xs(n))return n;let t=JSON.parse(JSON.stringify(n));for(let e of t.item||[])Jn(e);return t}var Xn=1,Kn=()=>"n"+Xn++,Zn=()=>{Xn=1},Ts=1,rt=(n="uid")=>n+"-"+Ts++;var ve="http://hl7.org/fhir",Ns="http://terminology.hl7.org",B=ve+"/StructureDefinition",J=ve+"/uv/sdc/StructureDefinition",As=ve+"/uv/sdc/CodeSystem",f={sd:B,vs:ve+"/ValueSet",itemControl:B+"/questionnaire-itemControl",constraint:B+"/questionnaire-constraint",unit:B+"/questionnaire-unit",unitValueSet:B+"/questionnaire-unitValueSet",unitOption:B+"/questionnaire-unitOption",minOccurs:B+"/questionnaire-minOccurs",maxOccurs:B+"/questionnaire-maxOccurs",sliderStepValue:B+"/questionnaire-sliderStepValue",supportLink:B+"/questionnaire-supportLink",optionPrefix:B+"/questionnaire-optionPrefix",optionExclusive:B+"/questionnaire-optionExclusive",hidden:B+"/questionnaire-hidden",usageMode:B+"/questionnaire-usageMode",choiceOrientation:B+"/questionnaire-choiceOrientation",displayCategory:B+"/questionnaire-displayCategory",baseType:B+"/questionnaire-baseType",fhirType:B+"/questionnaire-fhirType",referenceResource:B+"/questionnaire-referenceResource",referenceProfile:B+"/questionnaire-referenceProfile",referenceFilter:B+"/questionnaire-referenceFilter",signatureRequired:B+"/questionnaire-signatureRequired",minValue:B+"/minValue",maxValue:B+"/maxValue",minLength:B+"/minLength",maxSize:B+"/maxSize",mimeType:B+"/mimeType",regex:B+"/regex",entryFormat:B+"/entryFormat",ordinalValue:B+"/ordinalValue",itemWeight:B+"/itemWeight",designNote:B+"/designNote",translation:B+"/translation",maxDecimalPlaces:B+"/maxDecimalPlaces",renderingXhtml:B+"/rendering-xhtml",renderingStyle:B+"/rendering-style",renderingMarkdown:B+"/rendering-markdown",artifactVersionAlgorithm:B+"/artifact-versionAlgorithm",artifactCopyrightLabel:B+"/artifact-copyrightLabel",replaces:B+"/replaces",calculatedExpression:J+"/sdc-questionnaire-calculatedExpression",initialExpression:J+"/sdc-questionnaire-initialExpression",enableWhenExpression:J+"/sdc-questionnaire-enableWhenExpression",answerExpression:J+"/sdc-questionnaire-answerExpression",candidateExpression:J+"/sdc-questionnaire-candidateExpression",variable:J+"/sdc-questionnaire-variable",launchContext:J+"/sdc-questionnaire-launchContext",itemMedia:J+"/sdc-questionnaire-itemMedia",answerMedia:J+"/sdc-questionnaire-answerMedia",isSubject:J+"/sdc-questionnaire-isSubject",entryFormatSdc:J+"/sdc-questionnaire-entryFormat",columnCount:J+"/sdc-questionnaire-columnCount",choiceColumn:J+"/sdc-questionnaire-choiceColumn",collapsible:J+"/sdc-questionnaire-collapsible",hiddenSdc:J+"/sdc-questionnaire-hidden",openLabel:J+"/sdc-questionnaire-openLabel",observationExtract:J+"/sdc-questionnaire-observationExtract",preferredTerminologyServer:J+"/sdc-questionnaire-preferredTerminologyServer",shortText:J+"/sdc-questionnaire-shortText",itemContext:J+"/sdc-questionnaire-itemContext",definitionExtract:J+"/sdc-questionnaire-definitionExtract",definitionExtractContext:J+"/sdc-questionnaire-definitionExtractContext",sdcQuestionnaire:J+"/sdc-questionnaire",sdcObservation:J+"/sdc-observation",launchContextCS:As+"/launchContext",itemControlCS:ve+"/questionnaire-item-control",displayCategoryCS:ve+"/questionnaire-display-category",versionAlgorithm:ve+"/version-algorithm",icd10cm:ve+"/sid/icd-10-cm",v3Confidentiality:Ns+"/CodeSystem/v3-Confidentiality"};var at="http://fhir-qb.app",te={redcapNs:at+"/redcap/",uiTranslations:at+"/StructureDefinition/ui-translations",xhtmlTranslations:at+"/StructureDefinition/xhtml-translations",markdownTranslations:at+"/StructureDefinition/markdown-translations"};var Ls=new Set([f.enableWhenExpression,f.constraint,f.itemControl,f.referenceResource,f.unit,f.unitValueSet,f.calculatedExpression,f.initialExpression,f.minLength,f.entryFormatSdc,f.entryFormat,f.choiceOrientation,f.displayCategory,f.minValue,f.maxValue,f.minOccurs,f.maxOccurs,f.sliderStepValue,f.supportLink,f.hiddenSdc,f.hidden,f.observationExtract,f.collapsible,f.openLabel,f.isSubject,f.columnCount,Oe,Le,f.maxSize,f.mimeType,f.designNote,f.answerExpression,f.candidateExpression,f.preferredTerminologyServer,f.choiceColumn,f.unitOption,f.regex,f.usageMode,f.referenceFilter,f.referenceProfile,f.signatureRequired,f.itemMedia,f.itemWeight,f.baseType,f.fhirType]),ot=[{url:f.answerExpression,prop:"_answerExpression"},{url:f.candidateExpression,prop:"_candidateExpression"}];function Qt(n){let t=(n.extension||[]).filter(e=>!Ls.has(e.url));return t.length?t.map(e=>JSON.parse(JSON.stringify(e))):null}function Yt(n){return n==="boolean"?"checkbox":n==="integer"?"integer":n==="decimal"?"decimal":n==="quantity"?"quantity":n==="choice"||n==="coding"?"select":n==="open-choice"?"open-choice":n==="display"?"display":n==="date"?"date":n==="dateTime"?"dateTime":n==="time"?"time":n==="url"?"url":n==="attachment"?"attachment":n==="reference"?"reference":"text"}function Jt(n){return(n||[]).map(t=>{if(t.valueCoding){let e=t.valueCoding.code||"",i=t.valueCoding.display||"";return e&&i&&e!==i?e+"="+i:i||e}return t.valueString!==void 0?t.valueString:t.valueInteger!==void 0?String(t.valueInteger):t.valueDate!==void 0?t.valueDate:t.valueTime!==void 0?t.valueTime:t.valueReference?typeof t.valueReference=="string"?t.valueReference:t.valueReference.reference||"":""}).filter(Boolean).join(", ")}function zt(n){return(n||[]).some(t=>!t.valueCoding)}function ei(n){return(n||[]).some(t=>t.valueCoding&&[t.valueCoding.code,t.valueCoding.display].some(e=>typeof e=="string"&&e.includes(",")))}function Xt(n,t={}){for(let e of n||[])t[e.linkId]=e.text||e.linkId||"",Xt(e.item,t);return t}function ti(n,t,e){if(!n||!n.length)return"";let i=t==="any"?" OR ":" AND ";return n.map(a=>{let o=e&&e[a.question]||a.question;if(a.operator==="exists")return"\xAB"+o+"\xBB has answer";let l;a.answerBoolean!==void 0?l=a.answerBoolean?"Yes":"No":a.answerString!==void 0?l="\xAB"+a.answerString+"\xBB":a.answerInteger!==void 0?l=a.answerInteger:a.answerDecimal!==void 0?l=a.answerDecimal:a.answerQuantity!==void 0?l=(a.answerQuantity.value??"?")+(a.answerQuantity.unit||a.answerQuantity.code?" "+(a.answerQuantity.unit||a.answerQuantity.code):""):a.answerCoding?l=a.answerCoding.display||a.answerCoding.code||"?":l="?";let r={"=":"=","!=":"\u2260",">":">","<":"<",">=":"\u2265","<=":"\u2264"}[a.operator]||a.operator;return"\xAB"+o+"\xBB "+r+" "+l}).join(i)}function lt(n,t,e){t.enableWhen&&t.enableWhen.length&&(n.enableWhen=t.enableWhen.map(s=>({...s})),n.enableBehavior=t.enableBehavior==="any"?"any":"all",n._enableWhenText=ti(t.enableWhen,t.enableBehavior,e));let i=(t.extension||[]).find(s=>s.url===f.enableWhenExpression);i&&i.valueExpression&&(n.enableWhenExpression=i.valueExpression.expression||"")}function Kt(n,t){let e=(t.extension||[]).filter(s=>s.url===f.constraint);if(!e.length)return!1;let i=!1;return n.constraint=e.map(s=>({key:s.extension?.find(a=>a.url==="key")?.valueId||"",expression:s.extension?.find(a=>a.url==="expression")?.valueString||"",human:s.extension?.find(a=>a.url==="human")?.valueString||"",severity:s.extension?.find(a=>a.url==="severity")?.valueCode||"error"})).filter(s=>s.key===Be?(i=!0,!1):s.expression),i}function Zt(n,t){if(!t||!t.startsWith("#"))return"";let e=t.slice(1),i=(n||[]).find(a=>a.resourceType==="ValueSet"&&a.id===e);if(!i)return"";let s=[];for(let a of i.compose?.include||[])for(let o of a.concept||[])o.code&&s.push(o.code+(o.display?"="+o.display:""));return s.join(",")}var W=new Map;var ni=new Map;typeof document<"u"&&document.addEventListener("keydown",n=>{if(n.key!=="Escape")return;let t=null,e=-1;for(let[i,s]of ni){if(i.style.display==="none")continue;let a=parseInt(getComputedStyle(i).zIndex,10)||0;a>e&&(e=a,t=s)}t&&t()});function oe(n,t){let e=document.createElement(n);return t&&(e.className=t),e}var Os='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',Ds=0,ct=class{getName(){return null}constructor({cancelLabel:t="Cancel",applyLabel:e="Apply",maxWidth:i=null,bodyClass:s=null}={}){this.backdrop=oe("div","modal-backdrop"),this.backdrop.style.display="none";let a=oe("div","modal-box");i&&(a.style.maxWidth=i),this.box=a,a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.tabIndex=-1;let o=oe("div","modal-header");this.title=oe("span"),this.title.id="modal-title-"+ ++Ds,a.setAttribute("aria-labelledby",this.title.id),this.closeBtn=oe("button","modal-close"),this.closeBtn.type="button",this.closeBtn.dataset.tipTitle="Close",this.closeBtn.textContent="\u2715",o.append(this.title,this.closeBtn),this.body=oe("div",s?`modal-body ${s}`:"modal-body"),this.footer=oe("div","modal-footer"),this.cancelBtn=null,this.applyBtn=null,t!==null&&(this.cancelBtn=oe("button","modal-btn modal-btn--cancel"),this.cancelBtn.type="button",this.cancelBtn.textContent=t,this.footer.appendChild(this.cancelBtn)),e!==null&&(this.applyBtn=oe("button","modal-btn modal-btn--apply"),this.applyBtn.type="button",this.applyBtn.textContent=e,this.footer.appendChild(this.applyBtn)),a.append(o,this.body,this.footer),this.backdrop.appendChild(a);let l=this.getName();l&&(this.backdrop.dataset.testid=l,this.title.dataset.testid=l+"Title",this.closeBtn.dataset.testid=l+"Close",this.body.dataset.testid=l+"Body",this.cancelBtn&&(this.cancelBtn.dataset.testid=l+"Cancel"),this.applyBtn&&(this.applyBtn.dataset.testid=l+"Apply")),this.closeBtn.addEventListener("click",()=>this._cancel()),this.cancelBtn&&this.cancelBtn.addEventListener("click",()=>this._cancel()),this.applyBtn&&this.applyBtn.addEventListener("click",()=>this._apply()),this.backdrop.addEventListener("click",r=>{r.target===this.backdrop&&this._cancel()}),ni.set(this.backdrop,()=>this._cancel()),document.body.appendChild(this.backdrop)}open(){this._prevFocus=typeof document<"u"&&document.activeElement||null,this.backdrop.style.display="flex",this._trapHandler||(this._trapHandler=t=>this._onTrapKeydown(t),this.backdrop.addEventListener("keydown",this._trapHandler));try{this.box.focus({preventScroll:!0})}catch{}}close(){this.backdrop.style.display="none",this._trapHandler&&(this.backdrop.removeEventListener("keydown",this._trapHandler),this._trapHandler=null);let t=this._prevFocus;if(this._prevFocus=null,t&&typeof t.focus=="function"&&t.isConnected)try{t.focus({preventScroll:!0})}catch{}}_onTrapKeydown(t){if(t.key!=="Tab")return;let e=[...this.box.querySelectorAll(Os)].filter(o=>o.offsetParent!==null||o===document.activeElement);if(e.length===0){t.preventDefault(),this.box.focus();return}let i=e[0],s=e[e.length-1],a=document.activeElement;t.shiftKey&&(a===i||a===this.box)?(t.preventDefault(),s.focus()):!t.shiftKey&&a===s&&(t.preventDefault(),i.focus())}setTitle(t,e){this.title.innerHTML="";let i=oe("span","modal-title-label");if(i.textContent=t,this.title.appendChild(i),e){let s=oe("span","modal-title-subject");s.textContent=" \u2014 "+e,this.title.appendChild(s)}}_apply(){this.close()}_cancel(){this.close()}};var re=()=>typeof window<"u"?window.fhirpath_r4_model:void 0;function ii(n,t){let e=[],i=0,s=null,a=0,o=" "+t+" ",l=o.length,r=n.length;for(let c=0;c<r;c++){let u=n[c];if(s){u===s&&(s=null);continue}if(u==="'"||u==='"'){s=u;continue}if(u==="("||u==="["||u==="{"){i++;continue}if(u===")"||u==="]"||u==="}"){i--;continue}i===0&&n.slice(c,c+l).toLowerCase()===o&&(e.push(n.slice(a,c).trim()),a=c+l,c+=l-1)}return e.length>0?(e.push(n.slice(a).trim()),e):[]}function ks(n){if(n=n.trim(),!n.startsWith("("))return n;let t=0;for(let e=0;e<n.length;e++)if(n[e]==="(")t++;else if(n[e]===")"&&(t--,t===0))return e===n.length-1?n.slice(1,-1).trim():n;return n}function Ue(n){let t=ks(n.trim()),e=/^not\s*\(([\s\S]+)\)$/i.exec(t);if(e)return{type:"NOT",child:Ue(e[1])};let i=ii(t,"or");if(i.length>=2)return{type:"OR",children:i.map(a=>Ue(a))};let s=ii(t,"and");return s.length>=2?{type:"AND",children:s.map(a=>Ue(a))}:{type:"LEAF",expr:t}}function We(n,t,e,i){switch(n.type){case"LEAF":{try{let s=t.evaluate(e||{},n.expr,i||{},re()),a=Array.isArray(s)?s[0]:s;n.result=a===!0||a==="true"||typeof a=="number"&&a!==0?!0:a===!1||a==="false"||a===0?!1:s.length>0}catch(s){n.result=null,n.error=s.message}break}case"NOT":{We(n.child,t,e,i),n.result=n.child.result===null?null:!n.child.result;break}case"AND":{for(let s of n.children)We(s,t,e,i);n.result=n.children.every(s=>s.result===!0);break}case"OR":{for(let s of n.children)We(s,t,e,i);n.result=n.children.some(s=>s.result===!0);break}}return n}var en=class extends ct{getName(){return"explainModal"}constructor(){super({cancelLabel:"Close",applyLabel:null}),this.setTitle("Expression Explain")}show(t,e,i,s){this.setTitle("Expression Explain"),this.body.innerHTML="";try{let r=Ue(t);We(r,e,i,s),this.body.appendChild(tn(r,0))}catch(r){let c=document.createElement("div");c.className="explain-parse-error",c.textContent="Could not parse expression: "+r.message,this.body.appendChild(c)}let a=document.createElement("div");a.className="explain-fhirpath";let o=document.createElement("span");o.className="explain-fhirpath-label",o.textContent="FHIRPath:";let l=document.createElement("code");l.className="explain-full-expr",l.textContent=t,a.append(o,l),this.body.appendChild(a),super.open()}showAudit(t,e){this.setTitle(t),this.body.innerHTML="";let i=document.createElement("div");i.className="explain-audit-head",i.textContent=`Shown only when ${e.logic} of these conditions are met:`,this.body.appendChild(i);for(let s of e.rows){let a=document.createElement("div");a.className="explain-row",a.style.setProperty("--explain-depth",0),a.appendChild(si(s.ok));let o=document.createElement("span");o.className="explain-expr",o.textContent=s.text,a.appendChild(o),this.body.appendChild(a)}super.open()}_cancel(){this.close()}};function si(n){let t=document.createElement("span");return t.className="explain-icon"+(n===!0?" explain-icon--true":n===!1?" explain-icon--false":" explain-icon--err"),t.textContent=n===!0?"\u2713":n===!1?"\u2717":"?",t}function tn(n,t){let e=document.createDocumentFragment(),i=document.createElement("div");if(i.className="explain-row",i.style.setProperty("--explain-depth",t),i.appendChild(si(n.result)),n.type==="LEAF"){let s=document.createElement("code");if(s.className="explain-expr",s.textContent=n.expr,i.appendChild(s),n.error){let a=document.createElement("span");a.className="explain-error",a.textContent=n.error,i.appendChild(a)}}else{let s=document.createElement("span");s.className="explain-op explain-op--"+n.type.toLowerCase(),s.textContent=n.type,i.appendChild(s)}if(e.appendChild(i),n.type==="AND"||n.type==="OR")for(let s of n.children)e.appendChild(tn(s,t+1));else n.type==="NOT"&&e.appendChild(tn(n.child,t+1));return e}var Is=null,ri=()=>Is??=new en,Se=(n,t,e,i)=>ri().show(n,t,e,i),ai=(n,t)=>ri().showAudit(n,t);function li(n,t){for(let e of n)t.push({node:e,visible:!0,ok:!0,disabled:!0}),e.children?.length&&li(e.children,t)}function He(n,t){if(t.operator==="exists"){let a=n!=null&&n!=="";return t.answerBoolean!==!1?a:!a}if(t.answerQuantity!==void 0){let a=t.answerQuantity||{},o=Number(n&&typeof n=="object"?n.value:n),l=Number(a.value),r=n&&typeof n=="object"&&n.unit||"",c=a.code||a.unit||"",u=!c||String(r)===String(c);switch(t.operator){case"=":return o===l&&u;case"!=":return!(o===l&&u);case">":return o>l;case"<":return o<l;case">=":return o>=l;case"<=":return o<=l}return!1}let e;if(t.answerBoolean!==void 0)e=t.answerBoolean;else if(t.answerString!==void 0)e=t.answerString;else if(t.answerInteger!==void 0)e=t.answerInteger;else if(t.answerDecimal!==void 0)e=t.answerDecimal;else if(t.answerCoding)e=t.answerCoding.code||t.answerCoding.display||"";else return!1;let i=String(e),s=n!=null?String(n):"";switch(t.operator){case"=":return s===i;case"!=":return s!==i;case">":return Number(s)>Number(i);case"<":return Number(s)<Number(i);case">=":return Number(s)>=Number(i);case"<=":return Number(s)<=Number(i)}return!1}function Vs(n,t,e){let i=e.getAll(n.question,t);return i.length===0&&t&&t.length&&(i=e.getAll(n.question)),i.length===0?He(void 0,n):i.some(s=>He(s,n))}function Ms(n,t,e){let i=t?.answerStore||it;if(n.enableWhen&&n.enableWhen.length){let s=n.enableWhen.map(a=>Vs(a,e,i));return n.enableBehavior==="any"?s.some(Boolean):s.every(Boolean)}if(n.enableWhenExpression&&t&&t.fp&&t.qr)try{let s={resource:t.qr,...t.envVars||{}};return t.fp.evaluate(t.qr,n.enableWhenExpression,s,re())[0]===!0}catch{return!1}return!0}function ke(n,t,e,i=!1,s=[]){if(n._hidden||i){let c=!!n._hidden&&!i,u={node:n,visible:!0,ok:!0,hidden:!0,hiddenRoot:c};if(e.push(u),n.children?.length)for(let d of n.children)ke(d,t,e,!0,s);return{ok:!0,visible:!0,hidden:!0}}if(!Ms(n,t,s)){let c=!!(n.enableWhen&&n.enableWhen.length)||!!n.enableWhenExpression;return e.push({node:n,visible:!1,ok:n.mandatory===!1,showDimmed:c}),c&&n.children?.length&&li(n.children,e),{ok:n.mandatory===!1,visible:!1,showDimmed:c}}if(n.type==="item"){if(e.push({node:n,visible:!0,ok:!0}),n.children?.length)for(let c of n.children)ke(c,t,e,!1,s);return{ok:!0,visible:!0}}if(n.repeats)return e.push({node:n,visible:!0,ok:!0,repeating:!0}),{ok:!0,visible:!0};let o={node:n,visible:!0,ok:!0};e.push(o);let l=[];for(let c of n.children){let u=ke(c,t,e,!1,s);u.visible&&l.push(u)}let r;if(l.length===0)r=n.mandatory===!1;else{r=l[0].ok;for(let c=1;c<l.length;c++)r=n.logicWithParent==="AND"?r&&l[c].ok:r||l[c].ok}return o.ok=r,{ok:r,visible:!0}}var Ps=["font-weight","font-style","color","font-size","text-decoration"];function ci(n){let t={};if(!n)return t;let e=new Set(Ps);return n.split(";").forEach(i=>{let s=i.indexOf(":");if(s<1)return;let a=i.slice(0,s).trim().toLowerCase(),o=i.slice(s+1).trim();e.has(a)&&o&&(t[a]=o)}),t}function ui(n,t,e){if(!e)return null;let i=t==="any"?"ANY":"ALL",s=n.map(a=>{let o=e(a.question),l=o.length===0?"(no answer)":o.map(u=>JSON.stringify(u)).join(", "),r=a.operator==="exists"?a.answerBoolean!==!1?"exists":"not exists":JSON.stringify(a.answerBoolean!==void 0?a.answerBoolean:a.answerString!==void 0?a.answerString:a.answerInteger!==void 0?a.answerInteger:a.answerDecimal!==void 0?a.answerDecimal:a.answerCoding!==void 0?a.answerCoding.code||a.answerCoding.display:"?");return{ok:o.length===0?He(void 0,a):o.some(u=>He(u,a)),text:`[${a.question}] ${a.operator} ${r} \u2192 actual: ${l}`}});return{logic:i,rows:s}}function Bs(n,t,e){let i=ui(n,t,e);if(!i)return null;let s=i.rows.map(a=>`${a.ok?"\u2713":"\u2717"} ${a.text}`);return`Enable when (${i.logic}):
|
|
1
|
+
var FhirQuestionnaireWidget=(()=>{var Wt=Object.defineProperty;var cs=Object.getOwnPropertyDescriptor;var ds=Object.getOwnPropertyNames;var us=Object.prototype.hasOwnProperty;var ps=(n,t)=>{for(var e in t)Wt(n,e,{get:t[e],enumerable:!0})},fs=(n,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of ds(t))!us.call(n,s)&&s!==e&&Wt(n,s,{get:()=>t[s],enumerable:!(i=cs(t,s))||i.enumerable});return n};var hs=n=>fs(Wt({},"__esModule",{value:!0}),n);var Dr={};ps(Dr,{QuestionnaireRenderer:()=>Vn});var Ne=class{constructor(t){this._target=t||(typeof document<"u"?document:new EventTarget)}dispatch(t,e){this._target.dispatchEvent(new CustomEvent(t,{detail:e}))}on(t,e,i){return this._target.addEventListener(t,e,i),()=>this._target.removeEventListener(t,e,i)}off(t,e,i){this._target.removeEventListener(t,e,i)}get target(){return this._target}},X=new Ne;function Pn(n,t){let e=new Map;for(let i of t)n.on(i,s=>e.set(i,s?.detail??{}));return{get(i){return e.get(i)},_set(i,s){e.set(i,s)}}}var ms="e3a8c2f1-6b4d-4e9a-87c5",Be=ms+":group-or";function tt(n){n.forEach(t=>t.destroy?.()),n.splice(0)}function Ce(n,t){for(let e of t.children)if(e.id===n||e.children?.length&&Ce(n,e))return!0;return!1}function gs(n){let t=n.indexOf("=");return t===-1?{code:n,display:n}:{code:n.slice(0,t).trim(),display:n.slice(t+1).trim()}}function nt(n){return(n||"").split(",").map(t=>t.trim()).filter(Boolean).map(gs)}function Bn(n){return(n||[]).map(t=>{if(t.valueCoding){let e=t.valueCoding.code||t.valueCoding.display||"",i=t.valueCoding.display||t.valueCoding.code||"";return{code:e,display:i}}if(t.valueString!==void 0)return{code:t.valueString,display:t.valueString};if(t.valueInteger!==void 0)return{code:String(t.valueInteger),display:String(t.valueInteger)};if(t.valueDate!==void 0)return{code:t.valueDate,display:t.valueDate};if(t.valueTime!==void 0)return{code:t.valueTime,display:t.valueTime};if(t.valueReference){let e=typeof t.valueReference=="string"?t.valueReference:t.valueReference.reference||"",i=typeof t.valueReference=="object"&&t.valueReference.display||e;return{code:e,display:i}}return null}).filter(Boolean)}function Ee(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/("(?:\\u[0-9a-fA-F]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(?:true|false|null)\b|-?\d+(?:\.\d+)?(?:[eE][-+]?\d+)?)/g,e=>{let i;return/^"/.test(e)?i=/:$/.test(e)?"jv-k":"jv-s":e==="true"||e==="false"?i="jv-b":e==="null"?i="jv-null":i="jv-n",'<span class="'+i+'">'+e+"</span>"})}function qn(n,t){if(!t)return{html:Ee(n),count:0};let e=t.toLowerCase(),i=n.toLowerCase(),s=[],a=0;for(;(a=i.indexOf(e,a))!==-1;)s.push(a),a+=e.length;if(s.length===0)return{html:Ee(n),count:0};let o="",l=0;for(let c of s)o+=n.slice(l,c)+""+n.slice(c,c+e.length)+"",l=c+e.length;o+=n.slice(l);let r=Ee(o);return r=r.split("").join('<mark class="search-match">'),r=r.split("").join("</mark>"),{html:r,count:s.length}}var w=Object.freeze({QUESTIONNAIRE_LOADED:"questionnaire-loaded",QUESTIONNAIRE_CLEARED:"questionnaire-cleared",QUESTIONNAIRE_NEW:"questionnaire-new",QUESTIONNAIRE_CLEAR_REQUESTED:"questionnaire-clear-requested",QUESTIONNAIRE_RESET:"questionnaire-reset",QUESTIONNAIRE_META_CHANGED:"questionnaire-meta-changed",QUESTIONNAIRE_LOAD_CONFIRM_REQUESTED:"questionnaire-load-confirm-requested",QUESTIONNAIRE_LOAD_REQUESTED:"questionnaire-load-requested",APP_CONTEXT_READY:"app:context-ready",BUILDER_RERENDER:"builder:rerender",BUILDER_NAVIGATE:"builder:navigate",BUILDER_NAVIGATE_TO:"builder:navigate-to",BUILDER_EXPAND_ALL:"builder:expand-all",BUILDER_COLLAPSE_ALL:"builder:collapse-all",BUILDER_VIEW_MODE_CHANGE:"builder:view-mode-change",BUILDER_META_ROW_CHANGE:"builder:meta-row-change",PREVIEW_NAVIGATE_TO:"preview:navigate-to",REINIT_FORM:"reinit-form",SHOW_JSON:"show-json",VIEW_PREF_CHANGE:"view-pref-change",PREVIEW_MODE_CHANGE:"preview-mode-change",RESPONSE_CHANGED:"preview:response-changed",PREVIEW_RENDER_DONE:"preview:render-done",SDC_POPULATE_REQUESTED:"sdc:populate-requested",DEF_EXTRACT_REQUESTED:"sdc:def-extract-requested",BUILDER_RENDER_DONE:"builder:render-done",PATIENT_CTX_APPLIED:"patient-ctx-applied",QR_LOADED:"qr-loaded",CLOUD_SAVE_REQUESTED:"cloud-save-requested",CLOUD_LOAD_REQUESTED:"cloud-load-requested",CLOSE_DROPDOWNS:"close-dropdowns",LANGUAGE_CHANGED:"language-changed",TRANSLATE_REQUESTED:"translate-requested",FHIRPATH_TESTER_REQUESTED:"fhirpath-tester-requested",CALC_RECALC_REQUESTED:"calc-recalc-requested",REFRESH_EXPR_ICONS:"refresh-expr-icons",REFRESH_CALC_BADGES:"refresh-calc-badges",COLLAPSE_ALL_PREVIEW:"collapse-all-preview",EXPAND_ALL_PREVIEW:"expand-all-preview",RENUMBER_FORMAT_CHANGED:"renumber-format-changed",RENUMBER_PROGRESS:"renumber-progress",RENUMBER_DONE:"renumber-done",VALIDATOR_TOGGLE:"validator-toggle",TIPS_INIT_DONE:"tips-init-done",TIPS_TOGGLED:"tips-toggled",AUTOSAVE_INIT_DONE:"autosave-init-done",AUTOSAVE_TOGGLED:"autosave-toggled",AUTOSAVE_SAVED:"autosave-saved",VALIDATE_REQUESTED:"validate-requested",NODE_DELETE_REQUESTED:"node:delete-requested",NODE_COPY_REQUESTED:"node:copy-requested",NODE_PASTE_AFTER_REQUESTED:"node:paste-after-requested",NODE_PASTE_BEFORE_REQUESTED:"node:paste-before-requested",CLIPBOARD_CHANGED:"node:clipboard-changed",COPY_TO_NODES:"copy-to-nodes",ANSWER_SET:"answer:set",ANSWER_DELETE:"answer:delete",ANSWERS_CLEAR:"answer:clear",FHIRPATH_CTX_UPDATED:"fhirpath:ctx-updated",VARIABLES_APPLY:"variables:apply",QR_ANSWERS_REQUESTED:"qr:answers-requested",FILE_NAME_CHANGED:"file-name:changed",CLEAR_CONFIRM_REQUESTED:"reset:clear-confirm-requested",EXPORT_PROMPT_REQUESTED:"reset:export-prompt-requested",VALIDATE_EXPORT_REQUESTED:"reset:validate-export-requested",AUTOSAVE_CLEAR_DRAFT:"reset:autosave-clear-draft",FHIR_VERSION_CHANGED:"fhir-version-changed",METADATA_EDIT_REQUESTED:"metadata-edit-requested"}),_s=new Set([w.APP_CONTEXT_READY,w.QUESTIONNAIRE_LOADED,w.QUESTIONNAIRE_CLEARED,w.QUESTIONNAIRE_NEW,w.FHIR_VERSION_CHANGED,w.PREVIEW_MODE_CHANGE,w.BUILDER_VIEW_MODE_CHANGE,w.BUILDER_META_ROW_CHANGE,w.LANGUAGE_CHANGED]),pe=Pn(X,_s);var qe=class{tree=[];rawFhir=null;contained=[];variables=[];meta={id:"",url:"",version:"",title:"",status:"draft",publisher:"",description:"",name:"",date:"",subjectType:[],purpose:"",copyright:"",approvalDate:"",lastReviewDate:"",effectivePeriodStart:"",effectivePeriodEnd:"",experimental:null,language:"",derivedFrom:[],replaces:[],copyrightLabel:"",_versionAlgorithmString:"",_versionAlgorithmCoding:null,_rawIdentifier:[],_rawText:null,_rawContact:null,_rawUseContext:null,_rawJurisdiction:null,_rawCode:null,_metaVersionId:"",_metaSource:"",_metaLastUpdated:"",_rawMetaProfile:[],_rawMetaTag:[],_rawMetaSecurity:[],_rawQuestExtensions:[],preferredTermServer:"",_signatureRequired:[],_implicitRules:"",fhirTarget:"R4"};translations={};get fhirTarget(){return this.meta.fhirTarget}get containedValueSets(){return this.contained.filter(t=>t.resourceType==="ValueSet")}constructor(t=X){t.on(w.VARIABLES_APPLY,e=>this.applyVariables(e.detail.variables))}applyVariables(t){for(let{name:e,expression:i}of t){let s=this.variables.findIndex(a=>a.name===e);s>=0?this.variables[s].expression=i:this.variables.push({name:e,expression:i})}}reset(){tt(this.tree),this.rawFhir=null,this.contained.splice(0),this.variables.splice(0),Object.assign(this.meta,{id:"",url:"",version:"",title:"",status:"draft",publisher:"",description:"",name:"",date:"",subjectType:[],purpose:"",copyright:"",approvalDate:"",lastReviewDate:"",effectivePeriodStart:"",effectivePeriodEnd:"",experimental:null,language:"",derivedFrom:[],replaces:[],copyrightLabel:"",_versionAlgorithmString:"",_versionAlgorithmCoding:null,_rawIdentifier:[],_rawText:null,_rawContact:null,_rawUseContext:null,_rawJurisdiction:null,_rawCode:null,_metaVersionId:"",_metaSource:"",_metaLastUpdated:"",_rawMetaProfile:[],_rawMetaTag:[],_rawMetaSecurity:[],_rawQuestExtensions:[],preferredTermServer:"",_signatureRequired:[],_implicitRules:"",fhirTarget:"R4"})}},Fn=new qe;var Fe=class n{data={};static _parse(t){let e=/^(.+)\$\$(\d+|n)$/.exec(t);return e?e[2]==="n"?{base:e[1],kind:"count"}:{base:e[1],kind:"row",index:Number(e[2])}:{base:t,kind:"row",index:0}}_scope(t){let e=this.data;for(let i of t||[]){let s=e[i.id],a=Array.isArray(s)?s[i.idx]:void 0;if(!a||typeof a!="object")return null;e=a}return e}_scopeOrCreate(t){let e=this.data;for(let i of t||[]){let s=e[i.id];Array.isArray(s)||(s=e[i.id]=[]),(!s[i.idx]||typeof s[i.idx]!="object")&&(s[i.idx]={}),e=s[i.idx]}return e}get(t,e){let i=this._scope(e);if(!i)return;let s=n._parse(t),a=i[s.base];return s.kind==="count"?Array.isArray(a)?Math.max(0,a.length-1):0:Array.isArray(a)?a[s.index]:void 0}getAll(t,e){let i=this._scope(e),s=i&&i[t];return Array.isArray(s)?s.filter(a=>a!==void 0):[]}set(t,e,i){let s=this._scopeOrCreate(i),a=n._parse(t),o=s[a.base]||(s[a.base]=[]);if(a.kind==="count"){let l=e+1;if(o.length>l)o.length=l;else for(;o.length<l;)o.push(void 0);return}o[a.index]=e}remove(t,e){let i=this._scope(e);if(!i)return;let s=n._parse(t);if(s.kind==="count"){let o=i[s.base];o&&(o.length=1);return}if(t===s.base){delete i[s.base];return}let a=i[s.base];a&&delete a[s.index]}instanceCount(t,e){let i=this._scope(e),s=i&&i[t];return Array.isArray(s)?s.length:0}addInstance(t,e){let i=this._scopeOrCreate(e),s=i[t]||(i[t]=[]);return s.push({}),s.length}removeInstance(t,e,i){let s=this._scope(i),a=s&&s[t];Array.isArray(a)&&a.splice(e,1)}clear(){let t=this.data;Object.keys(t).forEach(e=>delete t[e])}toValueMap(){let t={};for(let e of Object.keys(this.data))t[e]=this.data[e].slice();return t}merge(t){for(let e of Object.keys(t))this.data[e]=Array.isArray(t[e])?t[e].slice():[t[e]]}replaceAll(t){this.clear(),this.merge(t)}constructor(t=X){t.on(w.ANSWER_SET,e=>this.set(e.detail.id,e.detail.value,e.detail.path)),t.on(w.ANSWER_DELETE,e=>this.remove(e.detail.id,e.detail.path)),t.on(w.ANSWERS_CLEAR,()=>this.clear())}},it=new Fe;var st=class{constructor({questDoc:t,answerStore:e,bus:i,config:s={}}){this.questDoc=t,this.answerStore=e,this.bus=i,this.config=s}};function Un(n={}){let t=new Ne(new EventTarget);return new st({questDoc:new qe(t),answerStore:new Fe(t),bus:t,config:n})}var Wn=new st({questDoc:Fn,answerStore:it,bus:X,config:{}});var Hn={add_another:"+ Add another",add_row:"+ Add another entry",more_info:"More info \u2197",or_separator:"OR",and_separator:"AND",select_placeholder:"select"};function Ht(){return{bus:X,ctx:null,resultMap:null,cEnv:{},visible:[],groupIconMap:null,previewMode:"preview",viewPrefs:null,lastCtx:null,buildControl:null,updateGroupIcons:null,isMandatory:null,calcFormOk:null,evalConstraints:null,getValue:null,getAll:null,set:null,remove:null,CHECKABLE_TYPES:null,instancePath:[],instanceCount:null,addInstance:null,removeInstance:null,evalChildren:null,activeLanguage:"",translations:null,showNavBtn:!0,showExplain:!0}}var $n=Ht();function Ae(n,t){let e=Hn[n]??n;return t?.activeLanguage?t.translations?.[t.activeLanguage]?.ui?.[n]??e:e}var jn={error:{title:"Error",icon:"!"},warn:{title:"Warning",icon:"!"},info:{title:"Info",icon:"i"}};function $t(n,t){document.removeEventListener("keydown",t,!0),n.style.opacity="0",n.addEventListener("transitionend",()=>n.remove(),{once:!0}),setTimeout(()=>{n.isConnected&&n.remove()},300)}function Gn(n,t="error"){let e=jn[t]||jn.error,i=document.createElement("div");i.className="modal-backdrop notif-backdrop",i.style.opacity="0";let s=document.createElement("div");s.className=`modal-box notif-box notif--${t}`,s.setAttribute("role","alertdialog"),s.setAttribute("aria-modal","true");let a=document.createElement("div");a.className="modal-header";let o=document.createElement("div");o.className="notif-header-title";let l=document.createElement("span");l.className="notif-title-icon",l.textContent=e.icon;let r=document.createElement("span");r.className="modal-title-label",r.textContent=e.title,o.append(l,r),a.appendChild(o);let c=document.createElement("div");c.className="modal-body",c.textContent=n;let d=document.createElement("div");d.className="modal-footer";let u=document.createElement("button");u.type="button",u.className="modal-btn modal-btn--apply",u.textContent="OK",d.appendChild(u),s.append(a,c,d),i.appendChild(s),document.body.appendChild(i),i.getBoundingClientRect(),i.style.opacity="1",u.focus();let f=h=>{(h.key==="Escape"||h.key==="Enter")&&$t(i,f)};document.addEventListener("keydown",f,!0),u.onclick=()=>$t(i,f),i.addEventListener("click",h=>{h.target===i&&$t(i,f)})}var _e=n=>Gn(n,"error");var Qn=n=>Gn(n,"info");var jt=class{_map=new Map;register(t){this._map.set(t.id,t)}get(t){return this._map.get(t)}getAll(){return[...this._map.values()]}getBuilderVersions(){return this.getAll().filter(t=>t.isBuilderVersion)}detectVersion(t){let e=(t?.extension||[]).find(i=>i?.url===we);if(e?.valueCode){for(let i of this._map.values())if(i.metaVersion&&i.metaVersion===e.valueCode)return i.id}return this._map.has("R5")&&(Gt(t?.item,"disabledDisplay")||Gt(t?.item,"answerConstraint"))?"R5":"R4"}},we="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/builder-target-version",Le="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/item-answerConstraint",Oe="https://sergeymosyakov.github.io/fhir-questionnaire-builder/StructureDefinition/item-disabledDisplay";function De(n,t){n.extension=(n.extension||[]).filter(e=>e?.url!==we),n.extension.push({url:we,valueCode:t}),n.extension.length===0&&delete n.extension}function Gt(n,t){if(!Array.isArray(n))return!1;for(let e of n)if(e?.[t]!==void 0||Gt(e?.item,t))return!0;return!1}var fe=new jt;function Yn(n){return typeof n=="string"&&(n.startsWith("3.")||n.startsWith("1."))}function Jn(n){if(!n)return!1;if(n.type==="coding"||Array.isArray(n.option)&&n.option.length||n.options)return!0;for(let t of n.enableWhen||[])if(t.hasAnswer!==void 0||!("operator"in t)&&vs(t))return!0;if(xs(n))return!0;for(let t of n.item||[])if(Jn(t))return!0;return!1}function vs(n){return Object.keys(n).some(t=>t.startsWith("answer"))}var ys=["initialBoolean","initialDecimal","initialInteger","initialDate","initialDateTime","initialTime","initialString","initialUri","initialAttachment","initialCoding","initialQuantity","initialReference"];function xs(n){return ys.some(t=>n[t]!==void 0)}function bs(n){if(!n||n.resourceType!=="Questionnaire"||(n.extension||[]).some(t=>t?.url===we))return!1;if(Yn(n.fhirVersion)||Yn(n.meta?.fhirVersion))return!0;for(let t of n.item||[])if(Jn(t))return!0;return!1}function Es(n){Array.isArray(n.option)&&!Array.isArray(n.answerOption)&&(n.answerOption=n.option,delete n.option)}function Cs(n){n.options&&typeof n.options=="object"&&n.options.reference&&(n.answerValueSet=n.options.reference,delete n.options)}function ws(n){return Array.isArray(n)?n.map(t=>{let e={...t};return e.hasAnswer!==void 0?(e.operator="exists",e.answerBoolean=e.hasAnswer,delete e.hasAnswer,e):(e.operator||Object.keys(e).find(s=>s.startsWith("answer"))&&(e.operator="="),e)}):n}var Ss={initialBoolean:"valueBoolean",initialDecimal:"valueDecimal",initialInteger:"valueInteger",initialDate:"valueDate",initialDateTime:"valueDateTime",initialTime:"valueTime",initialString:"valueString",initialUri:"valueUri",initialAttachment:"valueAttachment",initialCoding:"valueCoding",initialQuantity:"valueQuantity",initialReference:"valueReference"};function Rs(n){if(!Array.isArray(n.initial)){for(let[t,e]of Object.entries(Ss))if(n[t]!==void 0){n.initial=[{[e]:n[t]}],delete n[t];return}}}function Ts(n){n.type==="coding"&&(n.type="choice")}function zn(n){Ts(n),Es(n),Cs(n),n.enableWhen&&(n.enableWhen=ws(n.enableWhen)),Rs(n);for(let t of n.item||[])zn(t)}function Xn(n){if(!bs(n))return n;let t=JSON.parse(JSON.stringify(n));for(let e of t.item||[])zn(e);return t}var Kn=1,Zn=()=>"n"+Kn++,ei=()=>{Kn=1},Ns=1,rt=(n="uid")=>n+"-"+Ns++;var ve="http://hl7.org/fhir",As="http://terminology.hl7.org",B=ve+"/StructureDefinition",J=ve+"/uv/sdc/StructureDefinition",Ls=ve+"/uv/sdc/CodeSystem",p={sd:B,vs:ve+"/ValueSet",itemControl:B+"/questionnaire-itemControl",constraint:B+"/questionnaire-constraint",unit:B+"/questionnaire-unit",unitValueSet:B+"/questionnaire-unitValueSet",unitOption:B+"/questionnaire-unitOption",minOccurs:B+"/questionnaire-minOccurs",maxOccurs:B+"/questionnaire-maxOccurs",sliderStepValue:B+"/questionnaire-sliderStepValue",supportLink:B+"/questionnaire-supportLink",optionPrefix:B+"/questionnaire-optionPrefix",optionExclusive:B+"/questionnaire-optionExclusive",hidden:B+"/questionnaire-hidden",usageMode:B+"/questionnaire-usageMode",choiceOrientation:B+"/questionnaire-choiceOrientation",displayCategory:B+"/questionnaire-displayCategory",baseType:B+"/questionnaire-baseType",fhirType:B+"/questionnaire-fhirType",referenceResource:B+"/questionnaire-referenceResource",referenceProfile:B+"/questionnaire-referenceProfile",referenceFilter:B+"/questionnaire-referenceFilter",signatureRequired:B+"/questionnaire-signatureRequired",minValue:B+"/minValue",maxValue:B+"/maxValue",minLength:B+"/minLength",maxSize:B+"/maxSize",mimeType:B+"/mimeType",regex:B+"/regex",entryFormat:B+"/entryFormat",ordinalValue:B+"/ordinalValue",itemWeight:B+"/itemWeight",designNote:B+"/designNote",translation:B+"/translation",maxDecimalPlaces:B+"/maxDecimalPlaces",renderingXhtml:B+"/rendering-xhtml",renderingStyle:B+"/rendering-style",renderingMarkdown:B+"/rendering-markdown",artifactVersionAlgorithm:B+"/artifact-versionAlgorithm",artifactCopyrightLabel:B+"/artifact-copyrightLabel",replaces:B+"/replaces",calculatedExpression:J+"/sdc-questionnaire-calculatedExpression",initialExpression:J+"/sdc-questionnaire-initialExpression",enableWhenExpression:J+"/sdc-questionnaire-enableWhenExpression",answerExpression:J+"/sdc-questionnaire-answerExpression",candidateExpression:J+"/sdc-questionnaire-candidateExpression",variable:J+"/sdc-questionnaire-variable",launchContext:J+"/sdc-questionnaire-launchContext",itemMedia:J+"/sdc-questionnaire-itemMedia",answerMedia:J+"/sdc-questionnaire-answerMedia",isSubject:J+"/sdc-questionnaire-isSubject",entryFormatSdc:J+"/sdc-questionnaire-entryFormat",columnCount:J+"/sdc-questionnaire-columnCount",choiceColumn:J+"/sdc-questionnaire-choiceColumn",collapsible:J+"/sdc-questionnaire-collapsible",hiddenSdc:J+"/sdc-questionnaire-hidden",openLabel:J+"/sdc-questionnaire-openLabel",observationExtract:J+"/sdc-questionnaire-observationExtract",preferredTerminologyServer:J+"/sdc-questionnaire-preferredTerminologyServer",shortText:J+"/sdc-questionnaire-shortText",itemContext:J+"/sdc-questionnaire-itemContext",definitionExtract:J+"/sdc-questionnaire-definitionExtract",definitionExtractContext:J+"/sdc-questionnaire-definitionExtractContext",sdcQuestionnaire:J+"/sdc-questionnaire",sdcObservation:J+"/sdc-observation",launchContextCS:Ls+"/launchContext",itemControlCS:ve+"/questionnaire-item-control",displayCategoryCS:ve+"/questionnaire-display-category",versionAlgorithm:ve+"/version-algorithm",icd10cm:ve+"/sid/icd-10-cm",v3Confidentiality:As+"/CodeSystem/v3-Confidentiality"};var at="http://fhir-qb.app",te={redcapNs:at+"/redcap/",uiTranslations:at+"/StructureDefinition/ui-translations",xhtmlTranslations:at+"/StructureDefinition/xhtml-translations",markdownTranslations:at+"/StructureDefinition/markdown-translations"};var Os=new Set([p.enableWhenExpression,p.constraint,p.itemControl,p.referenceResource,p.unit,p.unitValueSet,p.calculatedExpression,p.initialExpression,p.minLength,p.entryFormatSdc,p.entryFormat,p.choiceOrientation,p.displayCategory,p.minValue,p.maxValue,p.minOccurs,p.maxOccurs,p.sliderStepValue,p.supportLink,p.hiddenSdc,p.hidden,p.observationExtract,p.collapsible,p.openLabel,p.isSubject,p.columnCount,Oe,Le,p.maxSize,p.mimeType,p.designNote,p.answerExpression,p.candidateExpression,p.preferredTerminologyServer,p.choiceColumn,p.unitOption,p.regex,p.usageMode,p.referenceFilter,p.referenceProfile,p.signatureRequired,p.itemMedia,p.itemWeight,p.baseType,p.fhirType]),ot=[{url:p.answerExpression,prop:"_answerExpression"},{url:p.candidateExpression,prop:"_candidateExpression"}];function Qt(n){let t=(n.extension||[]).filter(e=>!Os.has(e.url));return t.length?t.map(e=>JSON.parse(JSON.stringify(e))):null}function Yt(n){return n==="boolean"?"checkbox":n==="integer"?"integer":n==="decimal"?"decimal":n==="quantity"?"quantity":n==="choice"||n==="coding"?"select":n==="open-choice"?"open-choice":n==="display"?"display":n==="date"?"date":n==="dateTime"?"dateTime":n==="time"?"time":n==="url"?"url":n==="attachment"?"attachment":n==="reference"?"reference":"text"}function Jt(n){return(n||[]).map(t=>{if(t.valueCoding){let e=t.valueCoding.code||"",i=t.valueCoding.display||"";return e&&i&&e!==i?e+"="+i:i||e}return t.valueString!==void 0?t.valueString:t.valueInteger!==void 0?String(t.valueInteger):t.valueDate!==void 0?t.valueDate:t.valueTime!==void 0?t.valueTime:t.valueReference?typeof t.valueReference=="string"?t.valueReference:t.valueReference.reference||"":""}).filter(Boolean).join(", ")}function zt(n){return(n||[]).some(t=>!t.valueCoding)}function ti(n){return(n||[]).some(t=>t.valueCoding&&[t.valueCoding.code,t.valueCoding.display].some(e=>typeof e=="string"&&e.includes(",")))}function Xt(n,t={}){for(let e of n||[])t[e.linkId]=e.text||e.linkId||"",Xt(e.item,t);return t}function ni(n,t,e){if(!n||!n.length)return"";let i=t==="any"?" OR ":" AND ";return n.map(a=>{let o=e&&e[a.question]||a.question;if(a.operator==="exists")return"\xAB"+o+"\xBB has answer";let l;a.answerBoolean!==void 0?l=a.answerBoolean?"Yes":"No":a.answerString!==void 0?l="\xAB"+a.answerString+"\xBB":a.answerInteger!==void 0?l=a.answerInteger:a.answerDecimal!==void 0?l=a.answerDecimal:a.answerQuantity!==void 0?l=(a.answerQuantity.value??"?")+(a.answerQuantity.unit||a.answerQuantity.code?" "+(a.answerQuantity.unit||a.answerQuantity.code):""):a.answerCoding?l=a.answerCoding.display||a.answerCoding.code||"?":l="?";let r={"=":"=","!=":"\u2260",">":">","<":"<",">=":"\u2265","<=":"\u2264"}[a.operator]||a.operator;return"\xAB"+o+"\xBB "+r+" "+l}).join(i)}function lt(n,t,e){t.enableWhen&&t.enableWhen.length&&(n.enableWhen=t.enableWhen.map(s=>({...s})),n.enableBehavior=t.enableBehavior==="any"?"any":"all",n._enableWhenText=ni(t.enableWhen,t.enableBehavior,e));let i=(t.extension||[]).find(s=>s.url===p.enableWhenExpression);i&&i.valueExpression&&(n.enableWhenExpression=i.valueExpression.expression||"")}function Kt(n,t){let e=(t.extension||[]).filter(s=>s.url===p.constraint);if(!e.length)return!1;let i=!1;return n.constraint=e.map(s=>({key:s.extension?.find(a=>a.url==="key")?.valueId||"",expression:s.extension?.find(a=>a.url==="expression")?.valueString||"",human:s.extension?.find(a=>a.url==="human")?.valueString||"",severity:s.extension?.find(a=>a.url==="severity")?.valueCode||"error"})).filter(s=>s.key===Be?(i=!0,!1):s.expression),i}function Zt(n,t){if(!t||!t.startsWith("#"))return"";let e=t.slice(1),i=(n||[]).find(a=>a.resourceType==="ValueSet"&&a.id===e);if(!i)return"";let s=[];for(let a of i.compose?.include||[])for(let o of a.concept||[])o.code&&s.push(o.code+(o.display?"="+o.display:""));return s.join(",")}var W=new Map;var ii=new Map;typeof document<"u"&&document.addEventListener("keydown",n=>{if(n.key!=="Escape")return;let t=null,e=-1;for(let[i,s]of ii){if(i.style.display==="none")continue;let a=parseInt(getComputedStyle(i).zIndex,10)||0;a>e&&(e=a,t=s)}t&&t()});function oe(n,t){let e=document.createElement(n);return t&&(e.className=t),e}var Ds='a[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',ks=0,ct=class{getName(){return null}constructor({cancelLabel:t="Cancel",applyLabel:e="Apply",maxWidth:i=null,bodyClass:s=null}={}){this.backdrop=oe("div","modal-backdrop"),this.backdrop.style.display="none";let a=oe("div","modal-box");i&&(a.style.maxWidth=i),this.box=a,a.setAttribute("role","dialog"),a.setAttribute("aria-modal","true"),a.tabIndex=-1;let o=oe("div","modal-header");this.title=oe("span"),this.title.id="modal-title-"+ ++ks,a.setAttribute("aria-labelledby",this.title.id),this.closeBtn=oe("button","modal-close"),this.closeBtn.type="button",this.closeBtn.dataset.tipTitle="Close",this.closeBtn.textContent="\u2715",o.append(this.title,this.closeBtn),this.body=oe("div",s?`modal-body ${s}`:"modal-body"),this.footer=oe("div","modal-footer"),this.cancelBtn=null,this.applyBtn=null,t!==null&&(this.cancelBtn=oe("button","modal-btn modal-btn--cancel"),this.cancelBtn.type="button",this.cancelBtn.textContent=t,this.footer.appendChild(this.cancelBtn)),e!==null&&(this.applyBtn=oe("button","modal-btn modal-btn--apply"),this.applyBtn.type="button",this.applyBtn.textContent=e,this.footer.appendChild(this.applyBtn)),a.append(o,this.body,this.footer),this.backdrop.appendChild(a);let l=this.getName();l&&(this.backdrop.dataset.testid=l,this.title.dataset.testid=l+"Title",this.closeBtn.dataset.testid=l+"Close",this.body.dataset.testid=l+"Body",this.cancelBtn&&(this.cancelBtn.dataset.testid=l+"Cancel"),this.applyBtn&&(this.applyBtn.dataset.testid=l+"Apply")),this.closeBtn.addEventListener("click",()=>this._cancel()),this.cancelBtn&&this.cancelBtn.addEventListener("click",()=>this._cancel()),this.applyBtn&&this.applyBtn.addEventListener("click",()=>this._apply()),this.backdrop.addEventListener("click",r=>{r.target===this.backdrop&&this._cancel()}),ii.set(this.backdrop,()=>this._cancel()),document.body.appendChild(this.backdrop)}open(){this._prevFocus=typeof document<"u"&&document.activeElement||null,this.backdrop.style.display="flex",this._trapHandler||(this._trapHandler=t=>this._onTrapKeydown(t),this.backdrop.addEventListener("keydown",this._trapHandler));try{this.box.focus({preventScroll:!0})}catch{}}close(){this.backdrop.style.display="none",this._trapHandler&&(this.backdrop.removeEventListener("keydown",this._trapHandler),this._trapHandler=null);let t=this._prevFocus;if(this._prevFocus=null,t&&typeof t.focus=="function"&&t.isConnected)try{t.focus({preventScroll:!0})}catch{}}_onTrapKeydown(t){if(t.key!=="Tab")return;let e=[...this.box.querySelectorAll(Ds)].filter(o=>o.offsetParent!==null||o===document.activeElement);if(e.length===0){t.preventDefault(),this.box.focus();return}let i=e[0],s=e[e.length-1],a=document.activeElement;t.shiftKey&&(a===i||a===this.box)?(t.preventDefault(),s.focus()):!t.shiftKey&&a===s&&(t.preventDefault(),i.focus())}setTitle(t,e){this.title.innerHTML="";let i=oe("span","modal-title-label");if(i.textContent=t,this.title.appendChild(i),e){let s=oe("span","modal-title-subject");s.textContent=" \u2014 "+e,this.title.appendChild(s)}}_apply(){this.close()}_cancel(){this.close()}};var re=()=>typeof window<"u"?window.fhirpath_r4_model:void 0;function si(n,t){let e=[],i=0,s=null,a=0,o=" "+t+" ",l=o.length,r=n.length;for(let c=0;c<r;c++){let d=n[c];if(s){d===s&&(s=null);continue}if(d==="'"||d==='"'){s=d;continue}if(d==="("||d==="["||d==="{"){i++;continue}if(d===")"||d==="]"||d==="}"){i--;continue}i===0&&n.slice(c,c+l).toLowerCase()===o&&(e.push(n.slice(a,c).trim()),a=c+l,c+=l-1)}return e.length>0?(e.push(n.slice(a).trim()),e):[]}function Is(n){if(n=n.trim(),!n.startsWith("("))return n;let t=0;for(let e=0;e<n.length;e++)if(n[e]==="(")t++;else if(n[e]===")"&&(t--,t===0))return e===n.length-1?n.slice(1,-1).trim():n;return n}function Ue(n){let t=Is(n.trim()),e=/^not\s*\(([\s\S]+)\)$/i.exec(t);if(e)return{type:"NOT",child:Ue(e[1])};let i=si(t,"or");if(i.length>=2)return{type:"OR",children:i.map(a=>Ue(a))};let s=si(t,"and");return s.length>=2?{type:"AND",children:s.map(a=>Ue(a))}:{type:"LEAF",expr:t}}function We(n,t,e,i){switch(n.type){case"LEAF":{try{let s=t.evaluate(e||{},n.expr,i||{},re()),a=Array.isArray(s)?s[0]:s;n.result=a===!0||a==="true"||typeof a=="number"&&a!==0?!0:a===!1||a==="false"||a===0?!1:s.length>0}catch(s){n.result=null,n.error=s.message}break}case"NOT":{We(n.child,t,e,i),n.result=n.child.result===null?null:!n.child.result;break}case"AND":{for(let s of n.children)We(s,t,e,i);n.result=n.children.every(s=>s.result===!0);break}case"OR":{for(let s of n.children)We(s,t,e,i);n.result=n.children.some(s=>s.result===!0);break}}return n}var en=class extends ct{getName(){return"explainModal"}constructor(){super({cancelLabel:"Close",applyLabel:null}),this.setTitle("Expression Explain")}show(t,e,i,s){this.setTitle("Expression Explain"),this.body.innerHTML="";try{let r=Ue(t);We(r,e,i,s),this.body.appendChild(tn(r,0))}catch(r){let c=document.createElement("div");c.className="explain-parse-error",c.textContent="Could not parse expression: "+r.message,this.body.appendChild(c)}let a=document.createElement("div");a.className="explain-fhirpath";let o=document.createElement("span");o.className="explain-fhirpath-label",o.textContent="FHIRPath:";let l=document.createElement("code");l.className="explain-full-expr",l.textContent=t,a.append(o,l),this.body.appendChild(a),super.open()}showAudit(t,e){this.setTitle(t),this.body.innerHTML="";let i=document.createElement("div");i.className="explain-audit-head",i.textContent=`Shown only when ${e.logic} of these conditions are met:`,this.body.appendChild(i);for(let s of e.rows){let a=document.createElement("div");a.className="explain-row",a.style.setProperty("--explain-depth",0),a.appendChild(ri(s.ok));let o=document.createElement("span");o.className="explain-expr",o.textContent=s.text,a.appendChild(o),this.body.appendChild(a)}super.open()}_cancel(){this.close()}};function ri(n){let t=document.createElement("span");return t.className="explain-icon"+(n===!0?" explain-icon--true":n===!1?" explain-icon--false":" explain-icon--err"),t.textContent=n===!0?"\u2713":n===!1?"\u2717":"?",t}function tn(n,t){let e=document.createDocumentFragment(),i=document.createElement("div");if(i.className="explain-row",i.style.setProperty("--explain-depth",t),i.appendChild(ri(n.result)),n.type==="LEAF"){let s=document.createElement("code");if(s.className="explain-expr",s.textContent=n.expr,i.appendChild(s),n.error){let a=document.createElement("span");a.className="explain-error",a.textContent=n.error,i.appendChild(a)}}else{let s=document.createElement("span");s.className="explain-op explain-op--"+n.type.toLowerCase(),s.textContent=n.type,i.appendChild(s)}if(e.appendChild(i),n.type==="AND"||n.type==="OR")for(let s of n.children)e.appendChild(tn(s,t+1));else n.type==="NOT"&&e.appendChild(tn(n.child,t+1));return e}var Vs=null,ai=()=>Vs??=new en,Se=(n,t,e,i)=>ai().show(n,t,e,i),oi=(n,t)=>ai().showAudit(n,t);function ci(n,t){for(let e of n)t.push({node:e,visible:!0,ok:!0,disabled:!0}),e.children?.length&&ci(e.children,t)}function He(n,t){if(t.operator==="exists"){let a=n!=null&&n!=="";return t.answerBoolean!==!1?a:!a}if(t.answerQuantity!==void 0){let a=t.answerQuantity||{},o=Number(n&&typeof n=="object"?n.value:n),l=Number(a.value),r=n&&typeof n=="object"&&n.unit||"",c=a.code||a.unit||"",d=!c||String(r)===String(c);switch(t.operator){case"=":return o===l&&d;case"!=":return!(o===l&&d);case">":return o>l;case"<":return o<l;case">=":return o>=l;case"<=":return o<=l}return!1}let e;if(t.answerBoolean!==void 0)e=t.answerBoolean;else if(t.answerString!==void 0)e=t.answerString;else if(t.answerInteger!==void 0)e=t.answerInteger;else if(t.answerDecimal!==void 0)e=t.answerDecimal;else if(t.answerCoding)e=t.answerCoding.code||t.answerCoding.display||"";else return!1;let i=String(e),s=n!=null?String(n):"";switch(t.operator){case"=":return s===i;case"!=":return s!==i;case">":return Number(s)>Number(i);case"<":return Number(s)<Number(i);case">=":return Number(s)>=Number(i);case"<=":return Number(s)<=Number(i)}return!1}function Ms(n,t,e){let i=e.getAll(n.question,t);return i.length===0&&t&&t.length&&(i=e.getAll(n.question)),i.length===0?He(void 0,n):i.some(s=>He(s,n))}function Ps(n,t,e){let i=t?.answerStore||it;if(n.enableWhen&&n.enableWhen.length){let s=n.enableWhen.map(a=>Ms(a,e,i));return n.enableBehavior==="any"?s.some(Boolean):s.every(Boolean)}if(n.enableWhenExpression&&t&&t.fp&&t.qr)try{let s={resource:t.qr,...t.envVars||{}};return t.fp.evaluate(t.qr,n.enableWhenExpression,s,re())[0]===!0}catch{return!1}return!0}function ke(n,t,e,i=!1,s=[]){if(n._hidden||i){let c=!!n._hidden&&!i,d={node:n,visible:!0,ok:!0,hidden:!0,hiddenRoot:c};if(e.push(d),n.children?.length)for(let u of n.children)ke(u,t,e,!0,s);return{ok:!0,visible:!0,hidden:!0}}if(!Ps(n,t,s)){let c=!!(n.enableWhen&&n.enableWhen.length)||!!n.enableWhenExpression;return e.push({node:n,visible:!1,ok:n.mandatory===!1,showDimmed:c}),c&&n.children?.length&&ci(n.children,e),{ok:n.mandatory===!1,visible:!1,showDimmed:c}}if(n.type==="item"){if(e.push({node:n,visible:!0,ok:!0}),n.children?.length)for(let c of n.children)ke(c,t,e,!1,s);return{ok:!0,visible:!0}}if(n.repeats)return e.push({node:n,visible:!0,ok:!0,repeating:!0}),{ok:!0,visible:!0};let o={node:n,visible:!0,ok:!0};e.push(o);let l=[];for(let c of n.children){let d=ke(c,t,e,!1,s);d.visible&&l.push(d)}let r;if(l.length===0)r=n.mandatory===!1;else{r=l[0].ok;for(let c=1;c<l.length;c++)r=n.logicWithParent==="AND"?r&&l[c].ok:r||l[c].ok}return o.ok=r,{ok:r,visible:!0}}var Bs=["font-weight","font-style","color","font-size","text-decoration"];function di(n){let t={};if(!n)return t;let e=new Set(Bs);return n.split(";").forEach(i=>{let s=i.indexOf(":");if(s<1)return;let a=i.slice(0,s).trim().toLowerCase(),o=i.slice(s+1).trim();e.has(a)&&o&&(t[a]=o)}),t}function ui(n,t,e){if(!e)return null;let i=t==="any"?"ANY":"ALL",s=n.map(a=>{let o=e(a.question),l=o.length===0?"(no answer)":o.map(d=>JSON.stringify(d)).join(", "),r=a.operator==="exists"?a.answerBoolean!==!1?"exists":"not exists":JSON.stringify(a.answerBoolean!==void 0?a.answerBoolean:a.answerString!==void 0?a.answerString:a.answerInteger!==void 0?a.answerInteger:a.answerDecimal!==void 0?a.answerDecimal:a.answerCoding!==void 0?a.answerCoding.code||a.answerCoding.display:"?");return{ok:o.length===0?He(void 0,a):o.some(d=>He(d,a)),text:`[${a.question}] ${a.operator} ${r} \u2192 actual: ${l}`}});return{logic:i,rows:s}}function qs(n,t,e){let i=ui(n,t,e);if(!i)return null;let s=i.rows.map(a=>`${a.ok?"\u2713":"\u2717"} ${a.text}`);return`Enable when (${i.logic}):
|
|
2
2
|
`+s.join(`
|
|
3
|
-
`)}function Y(){let n=document.createElement("span");return n.className="ctrl-wrap",n}function
|
|
3
|
+
`)}function Y(){let n=document.createElement("span");return n.className="ctrl-wrap",n}function dt(n,t){return t.isMandatory(n)&&t.CHECKABLE_TYPES.has(n.itemType)||n._calculatedExpr&&n._readOnly&&n.itemType==="checkbox"||n.constraint?.length>0||n._minValue!==void 0||n._maxValue!==void 0}function $e(n,t){let e=di(t);for(let i of Object.keys(e))n.style.setProperty(i,e[i])}var I=class n{static _collapseMap=new Map;constructor(t={}){this.id=t.id??Zn(),this.title=t.title??"",this.enableWhen=t.enableWhen??[],this.enableBehavior=t.enableBehavior??"all",this.enableWhenExpression=t.enableWhenExpression??"",this.mandatory=t.mandatory??!1,this._previewCollapsed=!1,typeof document<"u"&&(this._ac=new AbortController,document.addEventListener(w.COPY_TO_NODES,e=>{let{ids:i,patch:s,nodeType:a}=e.detail;i.includes(this.id)&&(a&&this.type!==a||this.applyPatch(s))},{signal:this._ac.signal}))}_ensureBusListeners(t){if(this._busWired||!this._ac)return;this._busWired=!0;let e=t?.bus||X;this._bus=e,e.on(w.REFRESH_CALC_BADGES,()=>this._refreshCalcBadge?.(),{signal:this._ac.signal}),e.on(w.BUILDER_NAVIGATE,i=>{this._previewCollapsed&&Ce(i.detail.id,this)&&(this._previewCollapsed=!1)},{signal:this._ac.signal}),e.on(w.COLLAPSE_ALL_PREVIEW,()=>{this._previewCollapsed=!0},{signal:this._ac.signal}),e.on(w.EXPAND_ALL_PREVIEW,()=>{this._previewCollapsed=!1},{signal:this._ac.signal}),this._initPreviewNavListener(e)}destroy(){this._ac?.abort(),this._navAbort?.abort()}applyPatch(t){for(let[e,i]of Object.entries(t))i===null?delete this[e]:this[e]=i}static _hasClipboard=!1;static{typeof document<"u"&&document.addEventListener(w.CLIPBOARD_CHANGED,t=>{n._hasClipboard=t.detail.hasClip})}static notifyChanged(t){(t||X).dispatch(w.RESPONSE_CHANGED)}static dispatch(t,e,i){t&&t.node.renderPreview(t,e,i)}renderPreview(t,e,i){if(this._ensureBusListeners(i),!t.visible&&!t.showDimmed)return;let s=i.previewMode==="patient";if(t.hidden&&(s||!i.viewPrefs.showHiddenItems))return;if(i.cellMode&&this.type==="item"){if(!t.visible)return;let l=this._makePreviewRow("lform-item gtable-cell-item");t._iconEl=null,this._buildRowContent(l,t,i),e.appendChild(l);return}if(this._usageMode){let l=this._usageMode,r=l==="display"||l==="display-non-empty";if(s&&r)return;!s&&r&&(t._usageModeHidden=!0)}if(!t.visible&&t.showDimmed){s||this._renderDimmed(t,e,i);return}if(t.disabled){this._renderDisabled(t,e,i);return}let a=this._createBaseRow(t,i);this._buildRowContent(a,t,i);let o=this._appendRow(a,t,e);this._renderChildren(t,o,i)}_renderDimmed(t,e,i){let s=this._makePreviewRow("lform-item lform-waiting"+(i.showNavBtn?" preview-row--pointer":""));i.showNavBtn&&(s.dataset.tipTitle="Click to navigate to builder node",s.addEventListener("click",()=>i.bus.dispatch(w.BUILDER_NAVIGATE_TO,{nodeId:this.id})));let a=document.createElement("span");a.className="preview-icon-ph",s.appendChild(a);let o=document.createElement("span");o.className="preview-label--dim",o.textContent=(this.type==="group"?"Group: ":"Item: ")+this.title,s.appendChild(o);let l=document.createElement("span");l.className="preview-condition-hint preview-condition-waiting",l.dataset.testid="preview-condition-hint";let r=this._enableWhenText||this.enableWhenExpression||"condition not met";if(l.textContent="\u{1F512} "+r,this.enableWhenExpression){if(l.dataset.tipTitle="Visibility condition",l.dataset.tipBody="Not met. FHIRPath: "+this.enableWhenExpression+(i.showExplain?`
|
|
4
4
|
|
|
5
|
-
Click to explain.`:""),l.dataset.tipFhir="sdc-questionnaire-enableWhenExpression",l.dataset.tipSpec="SDC",i.showExplain){l.classList.add("preview-condition-hint--explain");let c=this.enableWhenExpression;l.addEventListener("click",
|
|
5
|
+
Click to explain.`:""),l.dataset.tipFhir="sdc-questionnaire-enableWhenExpression",l.dataset.tipSpec="SDC",i.showExplain){l.classList.add("preview-condition-hint--explain");let c=this.enableWhenExpression;l.addEventListener("click",d=>{d.stopPropagation(),i.lastCtx.fp&&Se(c,i.lastCtx.fp,i.lastCtx.qr,i.lastCtx.env)})}}else{let c=qs(this.enableWhen,this.enableBehavior,i.getAll);l.dataset.tipTitle="Visibility condition",l.dataset.tipBody=c?c+`
|
|
6
6
|
|
|
7
7
|
This label is auto-generated from the enableWhen condition. To change it \u2014 edit the Show When panel in the builder.`:"Not yet met: "+r+`
|
|
8
8
|
|
|
9
|
-
This label is auto-generated from the enableWhen condition. To change it \u2014 edit the Show When panel in the builder.`,l.dataset.tipFhir="Questionnaire.item.enableWhen[]",l.dataset.tipSpec="R4",this._attachEnableWhenAudit(l,i)}s.appendChild(l),e.appendChild(s),this._renderDimmedChildren(t,e,i)}_attachEnableWhenAudit(t,e){!e.showExplain||!this.enableWhen?.length||(t.classList.add("preview-condition-hint--explain"),t.addEventListener("click",i=>{i.stopPropagation();let s=ui(this.enableWhen,this.enableBehavior,e.getAll);s&&
|
|
9
|
+
This label is auto-generated from the enableWhen condition. To change it \u2014 edit the Show When panel in the builder.`,l.dataset.tipFhir="Questionnaire.item.enableWhen[]",l.dataset.tipSpec="R4",this._attachEnableWhenAudit(l,i)}s.appendChild(l),e.appendChild(s),this._renderDimmedChildren(t,e,i)}_attachEnableWhenAudit(t,e){!e.showExplain||!this.enableWhen?.length||(t.classList.add("preview-condition-hint--explain"),t.addEventListener("click",i=>{i.stopPropagation();let s=ui(this.enableWhen,this.enableBehavior,e.getAll);s&&oi("Visibility condition",s)}))}_renderDimmedChildren(t,e,i){}_renderDisabled(t,e,i){if(i.previewMode==="patient")return;let s=this._makePreviewRow("lform-item lform-disabled"+(i.showNavBtn?" preview-row--pointer":""));i.showNavBtn&&s.addEventListener("click",()=>i.bus.dispatch(w.BUILDER_NAVIGATE_TO,{nodeId:this.id}));let a=document.createElement("span");a.className="icon-na",s.appendChild(a);let o=document.createElement("span");this.type==="group"&&(o.className="group-label"),o.textContent=(this.type==="group"?"Group: ":"Item: ")+this.title,s.appendChild(o),e.appendChild(s),this._renderDisabledChildren(t,e,i)}_renderDisabledChildren(t,e,i){}_createBaseRow(t,e){let i=e.previewMode==="patient",s=this._makePreviewRow("lform-item");if((t.hiddenRoot||t._usageModeHidden)&&s.classList.add("lform-item--hidden"),!i&&e.showNavBtn){let r=document.createElement("span");r.className="preview-nav-btn",r.dataset.testid="preview-nav-btn",r.textContent="\u2197",r.dataset.tipTitle="Go to builder node",r.dataset.tipBody="Scroll and highlight the corresponding node in the builder panel.",r.addEventListener("click",c=>{c.stopPropagation(),e.bus.dispatch(w.BUILDER_NAVIGATE_TO,{nodeId:this.id})}),s.appendChild(r)}let{hasCondition:a,displayOk:o}=this._evalCondition(t,e),l=null;if(!i)if(a&&!t.hidden)l=document.createElement("span"),l.className=o?"icon-ok":"icon-fail",l.textContent=o?"\u2713":"\u2717",s.appendChild(l);else{let r=document.createElement("span");r.className="preview-icon-ph",s.appendChild(r)}if(t._iconEl=l,this._iconEl=l,e.viewPrefs.showLinkId&&!i&&s.appendChild(this._buildLinkIdTag(e)),t.hiddenRoot&&!i){let r=document.createElement("span");r.className="preview-hidden-badge",r.textContent="HIDDEN",r.dataset.tipTitle="sdc-questionnaire-hidden",r.dataset.tipBody="This item is permanently hidden from patients. It still participates in calculatedExpression logic. Controls are disabled in preview.",r.dataset.tipFhir="sdc-questionnaire-hidden",r.dataset.tipSpec="SDC",s.appendChild(r)}if(this._usageMode&&!i){let r=document.createElement("span");r.className="preview-hidden-badge",r.textContent=this._usageMode,r.dataset.tipTitle="questionnaire-usageMode",r.dataset.tipBody=`Usage mode: "${this._usageMode}". Controls when this item is shown:
|
|
10
10
|
\u2022 capture \u2014 only during data entry
|
|
11
11
|
\u2022 display \u2014 only when displaying completed data
|
|
12
12
|
\u2022 display-non-empty \u2014 display only if answered
|
|
13
13
|
\u2022 capture-display \u2014 both modes
|
|
14
|
-
\u2022 capture-display-non-empty \u2014 capture always, display only if answered`,r.dataset.tipFhir="item.extension[questionnaire-usageMode].valueCode",r.dataset.tipSpec="R4",s.appendChild(r)}if(this._shortText&&!i){let r=document.createElement("span");r.className="preview-short-text-badge",r.textContent=this._shortText,r.dataset.tipTitle="sdc-questionnaire-shortText",r.dataset.tipBody=`Short Text: "${this._shortText}" \u2014 abbreviated label used in summary views.`,r.dataset.tipFhir="item.extension[sdc-questionnaire-shortText].valueString",r.dataset.tipSpec="SDC",s.appendChild(r)}if(this._signatureRequired?.length){let r=this._signatureRequired.map(
|
|
15
|
-
Type(s): `+r,c.dataset.tipFhir="item.extension[questionnaire-signatureRequired].valueCodeableConcept",c.dataset.tipSpec="R4",s.appendChild(c)}if(this._isSubject&&!i){let r=document.createElement("span");r.className="preview-meta-badge preview-meta-badge--subject",r.dataset.testid="preview-subject-badge",r.textContent="SUBJECT",r.dataset.tipTitle="sdc-questionnaire-isSubject",r.dataset.tipBody="This item\u2019s answer identifies the subject of the QuestionnaireResponse (QuestionnaireResponse.subject). Used by SDC servers when generating the response \u2014 has no effect on the patient-facing control.",r.dataset.tipFhir="item.extension[sdc-questionnaire-isSubject].valueBoolean",r.dataset.tipSpec="SDC",s.appendChild(r)}if(this._prefix&&e.viewPrefs.showPrefix){let r=document.createElement("span");r.className="preview-prefix",this.type==="group"&&r.classList.add("preview-prefix--group"),r.textContent=this._prefix,r.dataset.tipTitle="Item prefix",r.dataset.tipBody="Prefix label assigned to this item (item.prefix).",r.dataset.tipFhir="Questionnaire.item.prefix",r.dataset.tipSpec="R4",s.appendChild(r)}return s}_evalCondition(t,e){return{hasCondition:!1,displayOk:!0}}_hasChildLogic(t){return this._calculatedExpr?!1:t.visible.some(e=>e.node.type==="item"&&!e.disabled&&!e.hidden&&Ce(e.node.id,this)&&
|
|
14
|
+
\u2022 capture-display-non-empty \u2014 capture always, display only if answered`,r.dataset.tipFhir="item.extension[questionnaire-usageMode].valueCode",r.dataset.tipSpec="R4",s.appendChild(r)}if(this._shortText&&!i){let r=document.createElement("span");r.className="preview-short-text-badge",r.textContent=this._shortText,r.dataset.tipTitle="sdc-questionnaire-shortText",r.dataset.tipBody=`Short Text: "${this._shortText}" \u2014 abbreviated label used in summary views.`,r.dataset.tipFhir="item.extension[sdc-questionnaire-shortText].valueString",r.dataset.tipSpec="SDC",s.appendChild(r)}if(this._signatureRequired?.length){let r=this._signatureRequired.map(d=>d.display||d.code).join(", "),c=document.createElement("span");c.className="preview-meta-badge preview-meta-badge--sig",c.textContent="\u{1F50F} "+r,c.dataset.tipTitle="Signature required",c.dataset.tipBody=`A digital signature is required for this item.
|
|
15
|
+
Type(s): `+r,c.dataset.tipFhir="item.extension[questionnaire-signatureRequired].valueCodeableConcept",c.dataset.tipSpec="R4",s.appendChild(c)}if(this._isSubject&&!i){let r=document.createElement("span");r.className="preview-meta-badge preview-meta-badge--subject",r.dataset.testid="preview-subject-badge",r.textContent="SUBJECT",r.dataset.tipTitle="sdc-questionnaire-isSubject",r.dataset.tipBody="This item\u2019s answer identifies the subject of the QuestionnaireResponse (QuestionnaireResponse.subject). Used by SDC servers when generating the response \u2014 has no effect on the patient-facing control.",r.dataset.tipFhir="item.extension[sdc-questionnaire-isSubject].valueBoolean",r.dataset.tipSpec="SDC",s.appendChild(r)}if(this._prefix&&e.viewPrefs.showPrefix){let r=document.createElement("span");r.className="preview-prefix",this.type==="group"&&r.classList.add("preview-prefix--group"),r.textContent=this._prefix,r.dataset.tipTitle="Item prefix",r.dataset.tipBody="Prefix label assigned to this item (item.prefix).",r.dataset.tipFhir="Questionnaire.item.prefix",r.dataset.tipSpec="R4",s.appendChild(r)}return s}_evalCondition(t,e){return{hasCondition:!1,displayOk:!0}}_hasChildLogic(t){return this._calculatedExpr?!1:t.visible.some(e=>e.node.type==="item"&&!e.disabled&&!e.hidden&&Ce(e.node.id,this)&&dt(e.node,t))}_buildLinkIdTag(t){let e=this.itemType,i=e==="checkbox"?"true / false":e==="integer"?"42 (valueInteger)":e==="decimal"?"3.14 (valueDecimal)":e==="number"?"42":e==="date"?'"2024-01-15"':e==="select"||e==="radio"||e==="open-choice"?'"option-code"':e==="quantity"?'{ value: 70, unit: "kg" }':'"text value"',s=document.createElement("span");return s.className="preview-linkid",s.dataset.testid="preview-linkid",s.textContent=this.id,s.dataset.tipTitle="linkId: "+this.id,s.dataset.tipBody="In visibility rules: values['"+this.id+`']
|
|
16
16
|
Expected value: `+i+(e?`
|
|
17
17
|
Item type: `+e:"")+`
|
|
18
18
|
Click to copy linkId to clipboard.`,s.dataset.tipFhir="Questionnaire.item.linkId",s.dataset.tipSpec="R4",s.addEventListener("click",a=>{a.stopPropagation(),navigator.clipboard.writeText(this.id).catch(()=>{}),s.textContent="\u2713 copied",setTimeout(()=>{s.textContent=this.id},1200)}),s}_applyLabelContent(t,e){let i=window.DOMPurify,s=window.marked,a=e?.activeLanguage;if(a&&e?.translations?.[a]?.xhtml?.[this.id]!=null){t.innerHTML=i?i.sanitize(e.translations[a].xhtml[this.id]):"";return}if(a&&e?.translations?.[a]?.markdown?.[this.id]!=null){let o=e.translations[a].markdown[this.id];t.innerHTML=i&&s?i.sanitize(s.parseInline(o)):o;return}if(a&&e?.translations?.[a]?.items?.[this.id]!=null){t.textContent=e.translations[a].items[this.id];return}this._renderXhtml&&i?t.innerHTML=i.sanitize(this._renderXhtml):this._renderMarkdown&&i&&s?t.innerHTML=i.sanitize(s.parseInline(this._renderMarkdown)):t.textContent=this.title}_buildLabel(t,e){let i=document.createElement("span");return this._applyLabelContent(i,e),i}_buildSupportLinks(t,e){if(!this._supportLinks||!this._supportLinks.length)return;let i=this._supportLinks.filter(a=>a&&a.trim()),s=e.previewMode==="patient";for(let a of i)if(/^https?:|^mailto:/i.test(a.trim()))if(s){let o=document.createElement("a");o.className="support-link-patient-btn",o.dataset.testid="support-link-patient-btn",o.href=a,o.target="_blank",o.rel="noopener noreferrer",o.textContent=Ae("more_info",e),t.appendChild(o)}else{let o=document.createElement("a");o.className="support-link-icon",o.dataset.testid="support-link-icon",o.href=a,o.target="_blank",o.rel="noopener noreferrer",o.textContent="\u{1F517}",o.dataset.tipTitle="Support link",o.dataset.tipBody=a,o.dataset.tipFhir="Questionnaire.item.extension[questionnaire-supportLink]",o.dataset.tipSpec="R4",o.addEventListener("click",l=>l.stopPropagation()),t.appendChild(o)}}_buildVisHint(t,e){let i=e.previewMode==="patient",s=this._enableWhenText||this.enableWhenExpression;if(!i&&s){let a=document.createElement("span");if(a.className="preview-condition-hint",a.dataset.testid="preview-condition-hint",a.textContent="\u{1F441}\uFE0F "+s,this.enableWhenExpression){if(a.dataset.tipTitle="Visibility condition",a.dataset.tipBody="FHIRPath: "+this.enableWhenExpression+(e.showExplain?`
|
|
19
19
|
|
|
20
20
|
Click to explain.`:""),a.dataset.tipFhir="sdc-questionnaire-enableWhenExpression",a.dataset.tipSpec="SDC",e.showExplain){a.classList.add("preview-condition-hint--explain");let o=this.enableWhenExpression;a.addEventListener("click",()=>{e.lastCtx.fp&&Se(o,e.lastCtx.fp,e.lastCtx.qr,e.lastCtx.env)})}}else a.dataset.tipTitle="Visibility condition",a.dataset.tipBody="This item is shown only when: "+s+`
|
|
21
21
|
|
|
22
|
-
This label is auto-generated from the enableWhen condition. To change it \u2014 edit the Show When panel in the builder.`,a.dataset.tipFhir="Questionnaire.item.enableWhen[]",a.dataset.tipSpec="R4",this._attachEnableWhenAudit(a,e);t.appendChild(a)}}_buildRowContent(t,e,i){let s=this._buildLabel(e,i);this._renderStyle&&$e(s,this._renderStyle);let a=document.createElement("div");a.className="item-body",a.appendChild(s),this._buildSupportLinks(a,i),this._buildVisHint(a,i),t.appendChild(a),t._itemBody=a}_appendRow(t,e,i){if((e.hiddenRoot||e._usageModeHidden)&&this.type==="group"){let s=document.createElement("div");return s.className="lform-item--hidden",i.appendChild(s),t.classList.remove("lform-item--hidden"),s.appendChild(t),s}return i.appendChild(t),i}_buildPreviewCollapseToggle(t){if(!this.children?.length)return;let e=this._previewCollapsed,i=document.createElement("span");i.className="preview-collapse-toggle",i.setAttribute("role","button"),i.setAttribute("tabindex","0"),e||i.classList.add("preview-collapse-toggle--open"),i.dataset.tipTitle=e?"Expand section":"Collapse section";let s=this,a=()=>{s._previewCollapsed=!s._previewCollapsed,(s._bus||X).dispatch(
|
|
23
|
-
`)||"questionnaire-constraint on this column",a.dataset.tipFhir="Questionnaire.item.extension[questionnaire-constraint]",a.dataset.tipSpec="R4",t.appendChild(a)}if(e._supportLinks?.length){let s=e._supportLinks.filter(a=>a&&/^https?:/i.test(a));for(let a of s){let o=document.createElement("a");o.className="gtable-col-ind support-link-icon",o.textContent="\u{1F517}",o.href=a,o.target="_blank",o.rel="noopener noreferrer",o.dataset.tipTitle="Support link",o.dataset.tipBody=a,o.dataset.tipFhir="Questionnaire.item.extension[questionnaire-supportLink]",o.dataset.tipSpec="R4",o.addEventListener("click",l=>l.stopPropagation()),t.appendChild(o)}}if(e.mandatory===!1&&e.type==="item"){let s=document.createElement("span");s.className="gtable-col-ind gtable-col-ind--optional",s.textContent="optional",s.dataset.tipTitle="Optional column",s.dataset.tipBody="This field is not required (item.required: false).",s.dataset.tipFhir="Questionnaire.item.required",s.dataset.tipSpec="R4",t.appendChild(s)}}};var ce=class n extends I{static get _collapseMap(){return I._collapseMap}constructor(t={}){super(t),this.type="group",this.logicWithParent=t.logicWithParent??"AND",this.children=t.children??[],this.repeats=t.repeats??!1}destroy(){super.destroy(),this.children.forEach(t=>t.destroy())}_evalCondition(t,e){if(this._calculatedExpr){if(this.constraint?.length){let{ctx:c,cEnv:
|
|
22
|
+
This label is auto-generated from the enableWhen condition. To change it \u2014 edit the Show When panel in the builder.`,a.dataset.tipFhir="Questionnaire.item.enableWhen[]",a.dataset.tipSpec="R4",this._attachEnableWhenAudit(a,e);t.appendChild(a)}}_buildRowContent(t,e,i){let s=this._buildLabel(e,i);this._renderStyle&&$e(s,this._renderStyle);let a=document.createElement("div");a.className="item-body",a.appendChild(s),this._buildSupportLinks(a,i),this._buildVisHint(a,i),t.appendChild(a),t._itemBody=a}_appendRow(t,e,i){if((e.hiddenRoot||e._usageModeHidden)&&this.type==="group"){let s=document.createElement("div");return s.className="lform-item--hidden",i.appendChild(s),t.classList.remove("lform-item--hidden"),s.appendChild(t),s}return i.appendChild(t),i}_buildPreviewCollapseToggle(t){if(!this.children?.length)return;let e=this._previewCollapsed,i=document.createElement("span");i.className="preview-collapse-toggle",i.setAttribute("role","button"),i.setAttribute("tabindex","0"),e||i.classList.add("preview-collapse-toggle--open"),i.dataset.tipTitle=e?"Expand section":"Collapse section";let s=this,a=()=>{s._previewCollapsed=!s._previewCollapsed,(s._bus||X).dispatch(w.CALC_RECALC_REQUESTED),n.notifyChanged(s._bus)};i.addEventListener("click",o=>{o.stopPropagation(),a()}),i.addEventListener("keydown",o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),a())}),t.appendChild(i)}_appendChildRows(t,e){let i=this.logicWithParent||"AND",s=this._hasChildLogic(e),a=!0;for(let o of this.children){let l=e.resultMap.get(o.id);if(!(l&&l.hidden&&(e.previewMode==="patient"||!e.viewPrefs.showHiddenItems))&&l&&(l.visible||l.showDimmed)){let r=o.itemType==="display"||o.type==="group"&&!o.children?.length;if(s&&!r&&!a&&l.visible){let c=document.createElement("div");c.className="logic-separator logic-separator-"+i.toLowerCase(),c.textContent=i==="OR"?Ae("or_separator",e):Ae("and_separator",e),t.appendChild(c)}n.dispatch(l,t,e),l.visible&&(a=r)}}}_renderNestedChildren(t,e,i){if(!this.children?.length)return;let s=document.createElement("div");s.className="preview-nested";for(let a of this.children){let o=i.resultMap.get(a.id);o&&n.dispatch(o,s,i)}s.childElementCount>0&&e.appendChild(s)}_renderChildren(t,e,i){}isDraggable(){return!0}_buildCollapseBtn(t){let e=n._collapseMap.get(this.id)||!1,i=document.createElement("button");return i.type="button",i.className="node-collapse-btn",i.dataset.testid="group-collapse-btn",i.textContent=e?"\u25B6":"\u25BC",i.dataset.tipTitle=e?"Expand":"Collapse",i.onclick=s=>{s.stopPropagation();let a=!n._collapseMap.get(this.id);n._collapseMap.set(this.id,a),i.textContent=a?"\u25B6":"\u25BC",i.dataset.tipTitle=a?"Expand":"Collapse";let o=t.querySelector(".node-body");o&&(o.style.display=a?"none":"")},i}_initNavListener(t){this._navAbort?.abort(),this._navAbort=new AbortController,document.addEventListener(w.BUILDER_NAVIGATE_TO,e=>{if(e.detail?.nodeId!==this.id)return;let i=document.querySelector(".left-panel-body");if(i){let s=t.getBoundingClientRect().top-i.getBoundingClientRect().top+i.scrollTop-10;i.scrollTo({top:s,behavior:"instant"})}else t.scrollIntoView({behavior:"instant",block:"start"});t.classList.add("node-flash"),setTimeout(()=>t.classList.remove("node-flash"),1e3)},{signal:this._navAbort.signal})}_dispatchRerender(){document.dispatchEvent(new CustomEvent(w.BUILDER_RERENDER))}_dispatchNavigate(){document.dispatchEvent(new CustomEvent(w.BUILDER_NAVIGATE,{detail:{id:this.id}}))}_makePreviewRow(t){let e=document.createElement("div");return e.className=t,e.dataset.previewId=this.id,this._previewEl=e,this._scrollAfterRender&&(this._scrollAfterRender=!1,requestAnimationFrame(()=>this._scrollIntoView())),e}_scrollIntoView(){!this._previewEl||!document.contains(this._previewEl)||(this._previewEl.scrollIntoView({behavior:"smooth",block:"center"}),this._previewEl.classList.add("preview-flash"),setTimeout(()=>this._previewEl?.classList.remove("preview-flash"),1e3))}_initPreviewNavListener(t){t.on(w.PREVIEW_NAVIGATE_TO,e=>{e.detail?.id===this.id&&(this._previewEl&&document.contains(this._previewEl)?this._scrollIntoView():(this._scrollAfterRender=!0,requestAnimationFrame(()=>{this._scrollAfterRender&&this._previewEl&&document.contains(this._previewEl)&&(this._scrollAfterRender=!1,this._scrollIntoView())})))},{signal:this._ac.signal})}};var ut=class{constructor(t){this._group=t}render(t,e,i=[]){let s=this._group,a=document.createElement("table");a.className="gtable",a.dataset.testid="gtable",a.dataset.gtableId=s.id;let l=a.createTHead().insertRow(),r=e.previewMode==="patient";for(let u of s.children){let f=document.createElement("th");f.className="gtable-th";let h=document.createElement("span");if(h.className="gtable-th-title",h.textContent=u.title||u.id,u.mandatory===!0){let _=document.createElement("span");_.className="gtable-required-star",_.textContent=" *",h.appendChild(_)}if(f.appendChild(h),!r){let _=document.createElement("div");_.className="gtable-th-indicators",this._buildColIndicators(_,u,e),_.childElementCount>0&&f.appendChild(_)}l.appendChild(f)}if(s.repeats){let u=document.createElement("th");u.className="gtable-th gtable-th-action",l.appendChild(u)}let c=a.createTBody();if(s.repeats)this._renderRepeatingRows(c,e,i);else{let u=c.insertRow();this._appendCells(u,e)}if(s.repeats){let u=e.instanceCount(s.id,i),f=s._maxOccurs,h=f!==void 0&&u>=f,v=a.createTFoot().insertRow(),C=document.createElement("td");C.colSpan=s.children.length+1,C.className="gtable-tfoot-td";let T=document.createElement("button");T.type="button",T.className="repeat-add-btn gtable-add-btn",T.dataset.testid="gtable-add-btn",T.textContent="+ Add row",T.disabled=h,h&&(T.dataset.tipTitle=`Maximum ${f} row${f===1?"":"s"} reached`),T.addEventListener("click",()=>{h||(e.addInstance(s.id,i),I.notifyChanged(e.bus))}),C.appendChild(T),v.appendChild(C)}let d=document.createElement("div");d.className="gtable-wrap",d.dataset.gtableId=s.id,d.appendChild(a),t.appendChild(d)}_renderRepeatingRows(t,e,i){let s=this._group,a=s._minOccurs!=null&&s._minOccurs>0?s._minOccurs:1,o=e.instanceCount(s.id,i);for(;o<a;)e.addInstance(s.id,i),o++;let l={map:e.resultMap,visible:e.visible,path:e.instancePath};for(let r=0;r<o;r++){let c=[...i,{id:s.id,idx:r}];e.instancePath=c;let d=e.evalChildren(s.children,c);e.resultMap=new Map(d.map(h=>[h.node.id,h])),e.visible=d;let u=t.insertRow();this._appendCells(u,e);let f=document.createElement("td");if(f.className="gtable-td-action",o>a){let h=document.createElement("button");h.type="button",h.className="repeat-remove-btn gtable-rm-btn",h.textContent="\xD7",h.dataset.testid="gtable-remove-btn",h.dataset.tipTitle="Remove this row";let _=r;h.addEventListener("click",()=>{e.removeInstance(s.id,_,i),I.notifyChanged(e.bus)}),f.appendChild(h)}u.appendChild(f),e.resultMap=l.map,e.visible=l.visible,e.instancePath=l.path}}_appendCells(t,e){let i=e.cellMode;for(let s of this._group.children){let a=document.createElement("td");a.className="gtable-td";let o=e.resultMap.get(s.id);o&&(e.cellMode=s.type==="item",I.dispatch(o,a,e)),t.appendChild(a)}e.cellMode=i}_buildColIndicators(t,e,i){if(e.enableWhen?.length||e.enableWhenExpression){let s=document.createElement("span");s.className="gtable-col-ind",s.textContent="\u{1F441}",s.dataset.tipTitle="Conditional column",s.dataset.tipBody=e._enableWhenText||e.enableWhenExpression||"This column has a Show When (enableWhen) condition.",s.dataset.tipFhir="Questionnaire.item.enableWhen[]",s.dataset.tipSpec="R4",t.appendChild(s)}if(e._readOnly&&!e._calculatedExpr){let s=document.createElement("span");s.className="gtable-col-ind",s.textContent="\u{1F512}",s.dataset.tipTitle="Read-only column",s.dataset.tipBody="Values in this column are read-only (item.readOnly).",s.dataset.tipFhir="Questionnaire.item.readOnly",s.dataset.tipSpec="R4",t.appendChild(s)}if(e._calculatedExpr){let s=document.createElement("span");s.className="gtable-col-ind",s.textContent="\u26A1",s.dataset.tipTitle="Calculated column",s.dataset.tipBody="Values in this column are computed by: "+e._calculatedExpr,s.dataset.tipFhir="sdc-questionnaire-calculatedExpression",s.dataset.tipSpec="SDC",t.appendChild(s)}if(e.constraint?.length){let s=e.constraint.map(o=>o.human||o.expression||o.key).filter(Boolean),a=document.createElement("span");a.className="gtable-col-ind",a.textContent="\u26A0\uFE0F",a.dataset.tipTitle="Has constraint",a.dataset.tipBody=s.join(`
|
|
23
|
+
`)||"questionnaire-constraint on this column",a.dataset.tipFhir="Questionnaire.item.extension[questionnaire-constraint]",a.dataset.tipSpec="R4",t.appendChild(a)}if(e._supportLinks?.length){let s=e._supportLinks.filter(a=>a&&/^https?:/i.test(a));for(let a of s){let o=document.createElement("a");o.className="gtable-col-ind support-link-icon",o.textContent="\u{1F517}",o.href=a,o.target="_blank",o.rel="noopener noreferrer",o.dataset.tipTitle="Support link",o.dataset.tipBody=a,o.dataset.tipFhir="Questionnaire.item.extension[questionnaire-supportLink]",o.dataset.tipSpec="R4",o.addEventListener("click",l=>l.stopPropagation()),t.appendChild(o)}}if(e.mandatory===!1&&e.type==="item"){let s=document.createElement("span");s.className="gtable-col-ind gtable-col-ind--optional",s.textContent="optional",s.dataset.tipTitle="Optional column",s.dataset.tipBody="This field is not required (item.required: false).",s.dataset.tipFhir="Questionnaire.item.required",s.dataset.tipSpec="R4",t.appendChild(s)}}};var ce=class n extends I{static get _collapseMap(){return I._collapseMap}constructor(t={}){super(t),this.type="group",this.logicWithParent=t.logicWithParent??"AND",this.children=t.children??[],this.repeats=t.repeats??!1}destroy(){super.destroy(),this.children.forEach(t=>t.destroy())}_evalCondition(t,e){if(this._calculatedExpr){if(this.constraint?.length){let{ctx:c,cEnv:d}=e;return{hasCondition:!0,displayOk:e.evalConstraints(this,c.fp,c.qr,d)}}return{hasCondition:!1,displayOk:!0}}let s=e.visible.filter(c=>c.node.type==="item"&&!c.disabled&&!c.hidden&&Ce(c.node.id,this)).filter(c=>dt(c.node,e));if(s.length===0)return{hasCondition:!1,displayOk:!0};let{ctx:a,cEnv:o}=e,l=c=>c.ok&&e.calcFormOk(c.node)&&(!c.node.constraint?.length||e.evalConstraints(c.node,a.fp,a.qr,o));return{hasCondition:!0,displayOk:this.logicWithParent==="OR"?s.some(l):s.every(l)}}refreshIcon(t){let e=t.groupIconMap.get(this.id);if(!e)return;let{icon:i,descendants:s}=e,{ctx:a}=t;if(this._calculatedExpr){if(this.constraint?.length){let c=t.evalConstraints(this,a.fp,a.qr,a.envVars||{});i.className=c?"icon-ok":"icon-fail",i.textContent=c?"\u2713":"\u2717"}else i.className="icon-ok",i.textContent="\u2713";return}let o=s.filter(c=>dt(c.node,t));if(o.length===0){i.className="icon-ok",i.textContent="\u2713";return}let l=c=>c.ok&&t.calcFormOk(c.node)&&(!c.node.constraint?.length||t.evalConstraints(c.node,a.fp,a.qr,a.envVars||{})),r=this.logicWithParent==="OR"?o.some(l):o.every(l);i.className=r?"icon-ok":"icon-fail",i.textContent=r?"\u2713":"\u2717"}_buildLabel(t,e){let i=this.children.length===0,s=document.createElement("span");return s.className=i?"display-info-label":"group-label",this._applyLabelContent(s,e),s}_buildRowContent(t,e,i){super._buildRowContent(t,e,i);let s=t._itemBody,a=i.previewMode==="patient",o=this.children.length===0;if((this._itemControl==="header"||this._itemControl==="footer")&&(t.classList.add("lform-group-"+this._itemControl),!a)){let l=document.createElement("span");l.className="preview-group-ctrl-badge",l.textContent=this._itemControl,l.dataset.tipTitle=this._itemControl==="header"?"Group header":"Group footer",l.dataset.tipBody=this._itemControl==="header"?"This group is rendered as a header \u2014 continuously visible at the top of the questionnaire.":"This group is rendered as a footer \u2014 continuously visible at the bottom of the questionnaire.",l.dataset.tipFhir="item.extension[questionnaire-itemControl].valueCodeableConcept.coding.code = "+this._itemControl,l.dataset.tipSpec="R4",s.appendChild(l)}if(this._itemControl==="gtable"&&!a){let l=document.createElement("span");l.className="preview-group-ctrl-badge preview-group-ctrl-badge--gtable",l.textContent="gtable",l.dataset.testid="gtable-badge",l.dataset.tipTitle="Group table layout (gtable)",l.dataset.tipBody="This group is rendered as a table \u2014 each child item is a column, each repeat instance is a row.",l.dataset.tipFhir="item.extension[questionnaire-itemControl].valueCodeableConcept.coding.code = gtable",l.dataset.tipSpec="R4 \xB7 SDC",s.appendChild(l)}if(this.repeats&&!a){let l=document.createElement("span");l.className="preview-group-ctrl-badge",l.textContent="Repeatable",l.dataset.tipTitle="Repeatable group",l.dataset.tipBody="This group repeats \u2014 the respondent can add multiple entries.",l.dataset.tipFhir="Questionnaire.item.repeats",l.dataset.tipSpec="R4",s.appendChild(l)}if(!a&&!o&&this._hasChildLogic(i)){let l=this.logicWithParent==="OR",r=document.createElement("span");r.className="preview-logic-badge preview-logic-"+(l?"or":"and"),r.textContent=l?"ANY item \u2713":"ALL items \u2713",r.dataset.tipTitle=l?"Any item passes (OR)":"All items required (AND)",r.dataset.tipBody=l?`Group is satisfied if at least one child item has a valid answer.
|
|
24
24
|
Stored in FHIR as a questionnaire-constraint with key e3a8c2f1\u2026:group-or.`:`Group is satisfied only when all child items have valid answers.
|
|
25
|
-
This is the default FHIR behaviour \u2014 no extra constraint is generated.`,r.dataset.tipFhir=l?"questionnaire-constraint (key: ITLH_NS:group-or)":"item.required (default AND)",r.dataset.tipSpec="R4",s.appendChild(r)}o||this._buildPreviewCollapseToggle(t)}_renderDimmedChildren(t,e,i){this._previewCollapsed||this._renderNestedChildren(t,e,i)}_renderDisabledChildren(t,e,i){this._previewCollapsed||this._renderNestedChildren(t,e,i)}_renderChildren(t,e,i){if(this.children.length===0)return;let s=t._iconEl,a=i.visible.filter(l=>l.node.type==="item"&&!l.disabled&&!l.hidden&&Ce(l.node.id,this));if(s&&i.groupIconMap.set(this.id,{icon:s,descendants:a,node:this}),this._previewCollapsed)return;if(this._itemControl==="gtable"){new
|
|
26
|
-
`):"questionnaire-constraint on this item",l.dataset.tipFhir="Questionnaire.item.extension[questionnaire-constraint]",l.dataset.tipSpec="R4";let c=this.constraint.find(
|
|
25
|
+
This is the default FHIR behaviour \u2014 no extra constraint is generated.`,r.dataset.tipFhir=l?"questionnaire-constraint (key: ITLH_NS:group-or)":"item.required (default AND)",r.dataset.tipSpec="R4",s.appendChild(r)}o||this._buildPreviewCollapseToggle(t)}_renderDimmedChildren(t,e,i){this._previewCollapsed||this._renderNestedChildren(t,e,i)}_renderDisabledChildren(t,e,i){this._previewCollapsed||this._renderNestedChildren(t,e,i)}_renderChildren(t,e,i){if(this.children.length===0)return;let s=t._iconEl,a=i.visible.filter(l=>l.node.type==="item"&&!l.disabled&&!l.hidden&&Ce(l.node.id,this));if(s&&i.groupIconMap.set(this.id,{icon:s,descendants:a,node:this}),this._previewCollapsed)return;if(this._itemControl==="gtable"){new ut(this).render(e,i,i.instancePath||[]);return}if(this.repeats){this._renderInstances(e,i);return}let o=document.createElement("div");o.className="preview-nested",this._appendChildRows(o,i),o.childElementCount>0&&e.appendChild(o)}_renderInstances(t,e){let i=e.instancePath||[],s=this._minOccurs&&this._minOccurs>0?this._minOccurs:1,a=e.instanceCount(this.id,i);for(;a<s;)e.addInstance(this.id,i),a++;let o=document.createElement("div");o.className="preview-nested rg-instances",o.dataset.rgGroup=this.id;let l={map:e.resultMap,visible:e.visible,path:e.instancePath};for(let u=0;u<a;u++){let f=[...i,{id:this.id,idx:u}],h=document.createElement("div");if(h.className="rg-inst",a>s){let v=document.createElement("button");v.type="button",v.className="repeat-remove-btn rg-del",v.textContent="\xD7",v.dataset.testid="rg-remove-btn",v.dataset.tipTitle="Remove this entry";let C=u;v.onclick=()=>{e.removeInstance(this.id,C,i),I.notifyChanged(e.bus)},h.appendChild(v)}e.instancePath=f;let _=e.evalChildren(this.children,f);e.resultMap=new Map(_.map(v=>[v.node.id,v])),e.visible=_,this._appendChildRows(h,e),e.resultMap=l.map,e.visible=l.visible,e.instancePath=l.path,o.appendChild(h)}let r=this._maxOccurs,c=r!==void 0&&a>=r,d=document.createElement("button");d.type="button",d.className="repeat-add-btn",d.dataset.testid="rg-add-btn",d.textContent="+ Add another entry",c&&(d.disabled=!0,d.dataset.tipTitle="Maximum "+r+" entr"+(r===1?"y":"ies")+" reached"),d.onclick=()=>{c||(e.addInstance(this.id,i),I.notifyChanged(e.bus))},o.appendChild(d),t.appendChild(o)}static updateAll(t){for(let[,{node:e}]of t.groupIconMap.entries())e.refreshIcon(t)}static resetCollapsedFromTree(t){for(let e of t)I._collapseMap.delete(e.id),e.children?.length&&(e.type==="group"&&(e._previewCollapsed=e._collapsible==="default-closed"),n.resetCollapsedFromTree(e.children))}};W.set("group",ce);var Q=class extends I{constructor(t={}){super(t),this.type="item",this.repeats=t.repeats??!1,this.options=t.options??"",this.constraint=t.constraint??[],this.children=t.children??[],this.logicWithParent=t.logicWithParent??"AND"}destroy(){super.destroy(),this.children.forEach(t=>t.destroy())}buildControl(t){throw new Error(`buildControl() not implemented on ${this.constructor.name} (itemType: ${this.itemType})`)}supportsRepeat(){return!0}impliesRepeats(){return!1}_renderChildren(t,e,i){if(this._previewCollapsed||!this.children.length)return;let s=document.createElement("div");s.className="preview-nested",this._appendChildRows(s,i),s.childElementCount>0&&e.appendChild(s)}_renderDimmedChildren(t,e,i){this._renderNestedChildren(t,e,i)}_renderDisabledChildren(t,e,i){this._renderNestedChildren(t,e,i)}_evalCondition(t,e){let{ctx:i,cEnv:s}=e,a=this.constraint?.length?e.evalConstraints(this,i.fp,i.qr,s):!0,o=this.itemType!=="display"&&(e.CHECKABLE_TYPES.has(this.itemType)&&(e.isMandatory(this)||this.itemType==="url")||this._calculatedExpr&&this._readOnly&&this.itemType==="checkbox"||this.constraint?.length>0||this._minValue!==void 0||this._maxValue!==void 0||this._maxDecimalPlaces!==void 0||this._regex),l=t.ok&&e.calcFormOk(this)&&a;return{hasCondition:o,displayOk:l}}_buildLabel(t,e){let i=document.createElement("span");return this._applyLabelContent(i,e),i}_buildRowContent(t,e,i){let s=i.previewMode==="patient";if(i.cellMode){this._buildControl(t,e,i),this._buildReadOnlyValue(t,i);return}let a=this._buildLabel(e,i);this._renderStyle&&$e(a,this._renderStyle);let o=null;if(this.itemType!=="display"&&!this._readOnly)if(this.mandatory===!1)s||(o=document.createElement("span"),o.className="preview-optional-badge",o.dataset.testid="preview-optional-badge",o.textContent="optional",o.dataset.tipTitle="Optional field",o.dataset.tipBody="This field is not required \u2014 the questionnaire response is valid without an answer.",o.dataset.tipFhir="item.required: false",o.dataset.tipSpec="R4");else{let r=document.createElement("span");r.className="preview-required-star",r.dataset.testid="preview-required-star",r.textContent="*",r.dataset.tipTitle="Required field",r.dataset.tipBody="This item is marked as required (item.required = true) and must be answered.",r.dataset.tipFhir="Questionnaire.item.required",r.dataset.tipSpec="R4",a.appendChild(r)}let l=document.createElement("div");l.className="item-body",l.appendChild(a),o&&l.appendChild(o),this._buildSupportLinks(l,i),this._buildVisHint(l,i),this._buildConstraintBadge(l,i),this._buildReadOnlyBadge(l,i),this._buildInitialBadge(l,i),this._buildItemMedia(l),this._buildControl(l,e,i),this._buildReadOnlyValue(l,i),this._buildCalcBadge(l,e,i),t.appendChild(l),this._buildPreviewCollapseToggle(t)}_buildConstraintBadge(t,e){if(!this.constraint?.length||e.previewMode==="patient")return;let{ctx:s,cEnv:a}=e,o=e.evalConstraints(this,s.fp,s.qr,a),l=document.createElement("span");l.className="preview-constraint-badge"+(o?"":" preview-constraint-badge--fail");let r=this.constraint.filter(d=>d.severity==="error").map(d=>d.human||d.expression||d.key).filter(Boolean);l.textContent=o?"\u26A0\uFE0F constraint":"\u2718 constraint",l.dataset.tipTitle=o?"Has constraint":"Constraint: FAIL",l.dataset.tipBody=r.length?r.join(`
|
|
26
|
+
`):"questionnaire-constraint on this item",l.dataset.tipFhir="Questionnaire.item.extension[questionnaire-constraint]",l.dataset.tipSpec="R4";let c=this.constraint.find(d=>d.expression?.trim())?.expression;c&&e.showExplain&&(l.classList.add("preview-condition-hint--explain"),l.dataset.tipBody+=`
|
|
27
27
|
|
|
28
|
-
Click to explain.`,l.addEventListener("click",()=>{e.lastCtx.fp&&Se(c,e.lastCtx.fp,e.lastCtx.qr,e.lastCtx.env)})),t.appendChild(l)}_buildReadOnlyBadge(t,e){if(e.previewMode==="patient"||!this._readOnly||this._calculatedExpr)return;let i=document.createElement("span");i.className="preview-meta-badge",i.textContent="\u{1F512} read-only",i.dataset.tipTitle="Read-only field",i.dataset.tipBody="This field is marked readOnly in the FHIR Questionnaire. It cannot be edited by the user.",i.dataset.tipFhir="Questionnaire.item.readOnly",i.dataset.tipSpec="R4",t.appendChild(i)}_buildInitialBadge(t,e){if(e.previewMode==="patient"||this._initialValue===void 0||this._initialValue==="")return;let i=document.createElement("span");i.className="preview-meta-badge preview-meta-badge--init",i.textContent="\u21BA default",i.dataset.tipTitle="Has default value",i.dataset.tipBody="Pre-filled from Questionnaire.item.initial[]. User can change it unless the field is readOnly.",i.dataset.tipFhir="Questionnaire.item.initial[]",i.dataset.tipSpec="R4",t.appendChild(i)}_buildItemMedia(t){if(!this._itemMedia?.url)return;let e=this._itemMedia,i=e.contentType||"",s=i.startsWith("audio/")?Object.assign(document.createElement("audio"),{src:e.url,controls:!0}):i.startsWith("video/")?Object.assign(document.createElement("video"),{src:e.url,controls:!0,style:"max-width:100%;max-height:240px"}):Object.assign(document.createElement("img"),{src:e.url,alt:e.title||"",style:"max-width:100%;max-height:200px"});s.className="preview-item-media",s.dataset.testid="preview-item-media",t.appendChild(s)}_buildControl(t,e,i){this._readOnly||this._calculatedExpr||(this.repeats&&this.supportsRepeat()?t.appendChild(this._buildRepeatContainer(e._iconEl,()=>i.updateGroupIcons(),i)):t.appendChild(i.buildControl(this,e._iconEl,()=>i.updateGroupIcons())),i.previewMode==="patient"&&this._previewEl&&this._previewEl.classList.toggle("lform-item--invalid",!i.calcFormOk(this)))}_buildRepeatContainer(t,e,i){let s=this.id,a=
|
|
28
|
+
Click to explain.`,l.addEventListener("click",()=>{e.lastCtx.fp&&Se(c,e.lastCtx.fp,e.lastCtx.qr,e.lastCtx.env)})),t.appendChild(l)}_buildReadOnlyBadge(t,e){if(e.previewMode==="patient"||!this._readOnly||this._calculatedExpr)return;let i=document.createElement("span");i.className="preview-meta-badge",i.textContent="\u{1F512} read-only",i.dataset.tipTitle="Read-only field",i.dataset.tipBody="This field is marked readOnly in the FHIR Questionnaire. It cannot be edited by the user.",i.dataset.tipFhir="Questionnaire.item.readOnly",i.dataset.tipSpec="R4",t.appendChild(i)}_buildInitialBadge(t,e){if(e.previewMode==="patient"||this._initialValue===void 0||this._initialValue==="")return;let i=document.createElement("span");i.className="preview-meta-badge preview-meta-badge--init",i.textContent="\u21BA default",i.dataset.tipTitle="Has default value",i.dataset.tipBody="Pre-filled from Questionnaire.item.initial[]. User can change it unless the field is readOnly.",i.dataset.tipFhir="Questionnaire.item.initial[]",i.dataset.tipSpec="R4",t.appendChild(i)}_buildItemMedia(t){if(!this._itemMedia?.url)return;let e=this._itemMedia,i=e.contentType||"",s=i.startsWith("audio/")?Object.assign(document.createElement("audio"),{src:e.url,controls:!0}):i.startsWith("video/")?Object.assign(document.createElement("video"),{src:e.url,controls:!0,style:"max-width:100%;max-height:240px"}):Object.assign(document.createElement("img"),{src:e.url,alt:e.title||"",style:"max-width:100%;max-height:200px"});s.className="preview-item-media",s.dataset.testid="preview-item-media",t.appendChild(s)}_buildControl(t,e,i){this._readOnly||this._calculatedExpr||(this.repeats&&this.supportsRepeat()?t.appendChild(this._buildRepeatContainer(e._iconEl,()=>i.updateGroupIcons(),i)):t.appendChild(i.buildControl(this,e._iconEl,()=>i.updateGroupIcons())),i.previewMode==="patient"&&this._previewEl&&this._previewEl.classList.toggle("lform-item--invalid",!i.calcFormOk(this)))}_buildRepeatContainer(t,e,i){let s=this.id,a=u=>u===0?s:s+"$$"+u,o=i.getValue(s+"$$n")||0,l=document.createElement("div");l.className="repeat-wrap";for(let u=0;u<=o;u++){let f=a(u),h=u===0?this:Object.assign(Object.create(Object.getPrototypeOf(this)),this,{id:f}),_=document.createElement("div");if(_.className="repeat-row",_.appendChild(i.buildControl(h,u===0?t:null,e)),o>0){let v=document.createElement("button");v.type="button",v.className="repeat-remove-btn",v.textContent="\xD7",v.dataset.tipTitle="Remove this answer",v.dataset.testid="repeat-remove-btn";let C=u;v.onclick=()=>{for(let T=C;T<o;T++)i.set(a(T),i.getValue(a(T+1)));i.remove(a(o)),i.set(s+"$$n",o-1),I.notifyChanged(i.bus)},_.appendChild(v)}l.appendChild(_)}let r=this._maxOccurs,c=r!==void 0&&o+1>=r,d=document.createElement("button");return d.type="button",d.className="repeat-add-btn",d.textContent=Ae("add_another",i),d.dataset.testid="repeat-add-btn",c&&(d.disabled=!0,d.dataset.tipTitle="Maximum "+r+" answer"+(r===1?"":"s")+" reached"),d.onclick=()=>{c||(i.set(s+"$$n",o+1),I.notifyChanged(i.bus))},l.appendChild(d),l}_buildReadOnlyValue(t,e){if(!this._readOnly||this._calculatedExpr)return;let i=e.getValue(this.id),s=document.createElement("span");s.className="preview-readonly-value",s.dataset.testid="preview-readonly-value",s.textContent=i!=null&&i!==""?String(i):"\u2014",t.appendChild(s)}_buildCalcBadge(t,e,i){if(!this._calculatedExpr||!this._readOnly)return;let s=i.previewMode==="patient",a=document.createElement("span");if(a.dataset.calcId=this.id,a.dataset.calcType=this.itemType,s){let o=i.getValue(this.id);a.className="preview-calc-value",a.textContent=o!==void 0&&o!==""?String(o):"\u2014",this._attachCalcExplain(a,i)}else if(this.itemType==="checkbox"){let o=i.getValue(this.id);if(a.className="calc-badge "+(o?"calc-true":"calc-false")+(i.showExplain?" calc-badge--explain":""),a.textContent=o?"\u2713 true":"\u2717 false",a.dataset.tipTitle="Calculated value",a.dataset.tipBody="FHIRPath: "+this._calculatedExpr+(i.showExplain?`
|
|
29
29
|
|
|
30
30
|
Click to explain.`:""),a.dataset.tipFhir="sdc-questionnaire-calculatedExpression",a.dataset.tipSpec="SDC",i.showExplain){let l=this._calculatedExpr;a.addEventListener("click",()=>{i.lastCtx.fp&&Se(l,i.lastCtx.fp,i.lastCtx.qr,i.lastCtx.env)})}}else{let o=i.getValue(this.id);a.className="preview-calc-value",a.textContent=o!==void 0&&o!==""?String(o):"\u2014",this._attachCalcExplain(a,i)}this._refreshCalcBadge=()=>{if(this.itemType==="checkbox"&&i.previewMode!=="patient"){let o=i.getValue(this.id);a.className="calc-badge "+(o?"calc-true":"calc-false")+(i.showExplain?" calc-badge--explain":""),a.textContent=o?"\u2713 true":"\u2717 false"}else{let o=i.getValue(this.id);a.className="preview-calc-value"+(i.showExplain&&this._calculatedExpr?" preview-calc-value--explain":""),a.textContent=o!==void 0&&o!==""?String(o):"\u2014"}},t.appendChild(a)}_attachCalcExplain(t,e){if(!e.showExplain||!this._calculatedExpr)return;t.classList.add("preview-calc-value--explain"),t.dataset.tipTitle="Calculated value",t.dataset.tipBody="FHIRPath: "+this._calculatedExpr+`
|
|
31
31
|
|
|
32
|
-
Click to explain.`,t.dataset.tipFhir="sdc-questionnaire-calculatedExpression",t.dataset.tipSpec="SDC";let i=this._calculatedExpr;t.addEventListener("click",()=>{e.lastCtx.fp&&Se(i,e.lastCtx.fp,e.lastCtx.qr,e.lastCtx.env)})}_appendRow(t,e,i){return e.hidden&&this.type==="item"&&t.querySelectorAll("input, select, textarea").forEach(s=>{s.disabled=!0}),super._appendRow(t,e,i)}};var je=class extends Q{constructor(t={}){super(t),this.itemType="text"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.className="ctrl-wrap ctrl-wrap--text";let r=document.createElement("textarea");r.className="ctrl-input--text",r.rows=3,r.value=i(e.id)!==void 0?i(e.id):"",e._maxLength&&(r.maxLength=e._maxLength),e._minLength&&(r.minLength=e._minLength),e._entryFormat&&(r.placeholder=e._entryFormat);let c=()=>{r.style.height="auto",r.style.height=r.scrollHeight+"px"},u=null;if(e._maxLength){u=document.createElement("span"),u.className="ctrl-char-counter",u.dataset.testid="char-counter";let _=()=>{u.textContent=r.value.length+"\xA0/\xA0"+e._maxLength};_(),r.addEventListener("input",_)}let d=null;if(e._minLength){d=document.createElement("span"),d.className="ctrl-err ctrl-err--ml",d.dataset.testid="minlength-err",d.textContent="Min\xA0"+e._minLength+"\xA0chars";let _=()=>{d.style.display=r.value.length>0&&r.value.length<e._minLength?"inline":"none"};e._interacted?_():d.style.display="none"}let h=null,p=e._regex?(()=>{try{return new RegExp(e._regex)}catch{return null}})():null;if(e._regex){h=document.createElement("span"),h.className="ctrl-err ctrl-err--regex",h.dataset.testid="regex-err",h.textContent="Does not match pattern";let _=()=>{h.style.display=p&&r.value.length>0&&!p.test(r.value)?"inline":"none"};e._interacted?_():h.style.display="none"}r.addEventListener("blur",()=>{e._interacted=!0,d&&(d.style.display=r.value.length>0&&r.value.length<e._minLength?"inline":"none"),h&&(h.style.display=p&&r.value.length>0&&!p.test(r.value)?"inline":"none")});let y=null;return r.oninput=()=>{s(e.id,r.value),c(),clearTimeout(y),y=setTimeout(()=>{o(),a()},200)},r.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(r),u&&l.appendChild(u),d&&l.appendChild(d),h&&l.appendChild(h),r.value&&requestAnimationFrame(c),l}};W.set("text",je);var Ie=class extends Q{constructor(t={}){super(t),this.itemType=t.itemType??"number"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();if(e._sliderStep!==void 0||e._itemControl==="slider"){let d=document.createElement("input");d.type="range",d.className="ctrl-input--slider",d.dataset.testid="slider-input",d.min=e._minValue!==void 0?String(e._minValue):"0",d.max=e._maxValue!==void 0?String(e._maxValue):"100",d.step=String(e._sliderStep);let h=i(e.id);d.value=h!==void 0&&h!==""?String(h):d.min;let p=document.createElement("span");return p.className="ctrl-slider-value",p.dataset.testid="slider-value",p.textContent=d.value,d.oninput=()=>{let y=parseFloat(d.value);s(e.id,y),p.textContent=d.value,o(),a()},d.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(d),l.appendChild(p),l}let r=document.createElement("input");r.type="number",r.className="ctrl-input--number",r.value=i(e.id)!==void 0?i(e.id):"",e._minValue!==void 0&&(r.min=String(e._minValue)),e._maxValue!==void 0&&(r.max=String(e._maxValue)),e._maxDecimalPlaces!==void 0&&(r.step=String(Math.pow(10,-e._maxDecimalPlaces))),e._entryFormat&&(r.placeholder=e._entryFormat);let c=document.createElement("span");c.className="ctrl-err ctrl-err--ml",c.dataset.testid="numeric-err",c.style.display="none";let u=d=>{if(d===void 0||d===""||d===null){c.style.display="none";return}let h=Number(d);if(e._minValue!==void 0&&h<e._minValue)c.textContent="Min: "+e._minValue,c.style.display="inline";else if(e._maxValue!==void 0&&h>e._maxValue)c.textContent="Max: "+e._maxValue,c.style.display="inline";else if(e._maxDecimalPlaces!==void 0){let p=String(d).split(".");p.length>1&&p[1].length>e._maxDecimalPlaces?(c.textContent="Max "+e._maxDecimalPlaces+" decimal place"+(e._maxDecimalPlaces!==1?"s":""),c.style.display="inline"):c.style.display="none"}else c.style.display="none"};return r.oninput=()=>{let d=r.value===""?void 0:e.itemType==="integer"?parseInt(r.value,10):parseFloat(r.value);s(e.id,d),u(d),o(),a()},r.onchange=()=>{I.notifyChanged(t.bus)},u(i(e.id)),l.appendChild(r),(e._minValue!==void 0||e._maxValue!==void 0||e._maxDecimalPlaces!==void 0)&&l.appendChild(c),l}};W.set("number",Ie);W.set("integer",Ie);W.set("decimal",Ie);var Z={CORS_PROXY:"corsProxyUrl",TERMINOLOGY_SERVER:"terminologyServer",NLM_API_BASE:"nlmApiBaseUrl",FHIR_BASE:"fhirBaseUrl",SDC_SERVER:"sdcServerUrl",VALIDATORS:"validators",TRANSLATE_API:"translateApiUrl",TRANSLATE_PROVIDER:"translateProvider",TRANSLATE_API_KEY:"translateApiKey"};var nn=class{get(t){return null}set(t,e){}get writable(){return!1}get label(){return"Unknown"}},Ve=class extends nn{constructor(t={}){super(),this._cfg=t}get(t){let e=this._cfg[t];return e==null?null:typeof e=="string"?e:JSON.stringify(e)}get label(){return"Default (config.json)"}};function qs(){let n=[],t=null;return{register(e){n.unshift(e)},load(e="./config.json"){return t||(t=fetch(e).then(i=>i.json()).then(i=>(n.push(new Ve(i)),i)).catch(()=>(n.push(new Ve({})),{})),t)},ready(){return t??Promise.resolve({})},get(e){for(let i of n){let s=i.get(e);if(s!=null)return s}return null},getParsed(e){let i=this.get(e);if(i==null)return null;if(e===Z.VALIDATORS)try{return JSON.parse(i)}catch{return null}return i},set(e,i){for(let s of n)if(s.writable){s.set(e,i);return}},reset(e){this.set(e,null)},getProviders(){return[...n]},hasOverride(e){for(let i of n)if(i.writable&&i.get(e)!=null)return!0;return!1},_clear(){n.length=0,t=null}}}var ue=qs();var Fs="https://tx.fhir.org/r4",Us=500,di=15e3,Ws=8e3,Hs=new Set([429,500,503,504]),fi=700,sn=2,pi=3e4;function $s(n,t){let e=n.headers.get("Retry-After");if(e){let i=Number(e);if(!isNaN(i)&&i>0)return Math.min(i*1e3,pi);let s=new Date(e);if(!isNaN(s.getTime()))return Math.min(Math.max(0,s-Date.now()),pi)}return fi*(t+1)}async function rn(n,t,e,i){let s;for(let a=0;a<=sn;a++){let o;try{o=await fetch(n,{...t,signal:AbortSignal.timeout(e)})}catch(l){s=l,a<sn&&(await new Promise(r=>setTimeout(r,fi*(a+1))),i?.());continue}if(!Hs.has(o.status))return o;s=new Error(`HTTP ${o.status} ${o.statusText}`),a<sn&&(await new Promise(l=>setTimeout(l,$s(o,a))),i?.())}throw s}function hi(n,t=[]){for(let e of n)e._answerValueSet&&!e._answerValueSet.startsWith("#")&&e._itemControl!=="lookup"&&t.push(e),e.children?.length&&hi(e.children,t);return t}function mi(n,t=[]){for(let e of n)e._unitValueSet&&t.push(e),e.children?.length&&mi(e.children,t);return t}var Ge=class{constructor(t){this._cfg=t}_corsProxy(){return(this._cfg.get(Z.CORS_PROXY)||"").replace(/\/$/,"")}_termServer(){return(this._cfg.get(Z.TERMINOLOGY_SERVER)||Fs).replace(/\/$/,"")}_nlmApiBase(){return(this._cfg.get(Z.NLM_API_BASE)||"https://clinicaltables.nlm.nih.gov/api").replace(/\/$/,"")}_proxyUrl(t){let e=this._corsProxy();return e?`${e}?url=${encodeURIComponent(t)}`:t}async nlmUrl(t){return await this._cfg.ready?.(),`${this._nlmApiBase()}/${t}`}getServer(t,e){return(t?._preferredTermServer||e?.preferredTermServer||this._termServer()).replace(/\/$/,"")}async expandValueSet(t,e){await this._cfg.ready?.();let i=(e||this._termServer()).replace(/\/$/,""),s=this._proxyUrl(`${i}/ValueSet/$expand?url=${encodeURIComponent(t)}&_count=${Us}`),a=await rn(s,{headers:{Accept:"application/fhir+json"}},di);if(!a.ok)throw new Error(`HTTP ${a.status} ${a.statusText}`);let o=await a.json();if(o.resourceType!=="ValueSet")throw new Error("Response is not a FHIR ValueSet");return(o.expansion?.contains||[]).map(l=>({code:l.code??"",display:l.display||l.code||"",system:l.system||""}))}async expandWithFilter(t,e,i="",s=50){await this._cfg.ready?.();let a=(e||this._termServer()).replace(/\/$/,""),o=new URLSearchParams({url:t,_count:String(s)});i&&i.trim()&&o.set("filter",i.trim());let l=this._proxyUrl(`${a}/ValueSet/$expand?${o}`),r=await rn(l,{headers:{Accept:"application/fhir+json"}},di);if(!r.ok)throw new Error(`HTTP ${r.status} ${r.statusText}`);let c=await r.json();if(c.resourceType!=="ValueSet")throw new Error("Response is not a FHIR ValueSet");return(c.expansion?.contains||[]).map(u=>({code:u.code??"",display:u.display||u.code||"",system:u.system||""}))}async testServer(t,{onRetry:e}={}){await this._cfg.ready?.();let i=(t||"").trim().replace(/\/$/,"");if(!i)return{ok:!1,message:"No URL provided"};try{let s=await rn(this._proxyUrl(`${i}/metadata`),{headers:{Accept:"application/fhir+json"}},Ws,e);if(!s.ok)return{ok:!1,message:`HTTP ${s.status} ${s.statusText}`};let a=await s.json();return a.resourceType!=="CapabilityStatement"?{ok:!1,message:"Not a FHIR server (no CapabilityStatement)"}:{ok:!0,message:[a.software?.name,a.software?.version].filter(Boolean).join(" ")||"OK"}}catch(s){return{ok:!1,message:s.message}}}async testExpand(t,e){if(!t)return{ok:!1,message:"No URL provided"};try{let i=await this.expandValueSet(t,e||this._termServer());return{ok:!0,message:`${i.length} code${i.length!==1?"s":""}`,count:i.length}}catch(i){return{ok:!1,message:i.message}}}async expandAll(t,e){let i=hi(t),s=mi(t);if(!i.length&&!s.length)return[];let a=[];for(let o of i){let l=this.getServer(o,e);try{o._vsCache=await this.expandValueSet(o._answerValueSet,l)}catch(r){o._vsCache=[];let u=r instanceof TypeError&&r.message.includes("fetch")?`Network error (possible CORS restriction \u2014 the server may not allow browser requests): ${r.message}`:r.message;a.push({node:o,vsUrl:o._answerValueSet,server:l,error:u})}}for(let o of s){let l=this.getServer(o,e);try{o._unitVsCache=await this.expandValueSet(o._unitValueSet,l)}catch(r){o._unitVsCache=[];let u=r instanceof TypeError&&r.message.includes("fetch")?`Network error (possible CORS restriction \u2014 the server may not allow browser requests): ${r.message}`:r.message;a.push({node:o,vsUrl:o._unitValueSet,server:l,error:u})}}return a}},an=new Ge(ue);function pt(n){return n._rawAnswerOptions?Pn(n._rawAnswerOptions):nt(n.options)}function Qe(n,t){let e=n._answerExpression||n._candidateExpression;return e?!t||!t.fp||!t.qr?pt(n):js(n,e,t):n._answerValueSet&&!n._answerValueSet.startsWith("#")?n._vsCache??[]:pt(n)}function gi(n,t,e){let i=Number(e(n+"$$n"))||0,s=new Set;for(let a=0;a<=i;a++){let o=a===0?n:n+"$$"+a;if(o===t)continue;let l=e(o);l&&s.add(l)}return s}function _i(n,t,e){return!e||!e.size?n:n.filter(i=>i.code===t||!e.has(i.code))}function vi(n){return String(n).replace(/\$\$\d+$/,"")}function js(n,t,e){try{let i=e.fp.evaluate(e.qr,t,e.env||{},re());return!i||!i.length?pt(n):i.map(s=>{if(s==null)return null;if(typeof s=="string")return{code:s,display:s};if(typeof s=="number")return{code:String(s),display:String(s)};if(typeof s=="boolean")return{code:String(s),display:s?"Yes":"No"};if(typeof s=="object"){if(s.code!==void 0)return{code:String(s.code),display:s.display||String(s.code)};if(s.value!==void 0)return{code:String(s.value),display:s.display||String(s.value)}}return{code:String(s),display:String(s)}}).filter(Boolean)}catch{return pt(n)}}function yi(n,t,e,i){if(n){let s=n.valueCoding||n.valueReference||n;if(s&&s[i]!==void 0)return String(s[i])}return i==="code"?t:i==="display"&&e||""}function on(n,t){return n._rawAnswerOptions&&n._rawAnswerOptions.find(e=>{let i=e.valueCoding||e.valueReference;return!!(i&&(i.code===t||i.reference===t)||e.valueString===t||e.valueInteger!==void 0&&String(e.valueInteger)===t||e.valueDate===t||e.valueTime===t)})||null}function xi(n,t,e){if(!n._choiceColumns||!n._choiceColumns.length)return e;let i=n._choiceColumns.find(o=>o.forDisplay);if(!i)return e;let s=on(n,t);return yi(s,t,e,i.path)||e}function bi(n){let t=document.createElement("div");t.className="oc-col-header";for(let e of n){let i=document.createElement("span");i.className="oc-col-cell",i.textContent=e.label||e.path,e.width&&(i.style.width=e.width.value+(e.width.unit||e.width.code||"%")),t.appendChild(i)}return t}function Ei(n,t,e,i){let s=document.createElement("div");s.className="oc-opt oc-col-row";for(let a of n){let o=document.createElement("span");o.className="oc-col-cell",o.textContent=yi(t,e,i,a.path),a.width&&(o.style.width=a.width.value+(a.width.unit||a.width.code||"%")),s.appendChild(o)}return s}function ft(n,t,e){if(t._optionWeights&&t._optionWeights[e]!==void 0){let i=document.createElement("span");i.className="option-weight",i.textContent="\xA0[w:"+t._optionWeights[e]+"]",i.dataset.tipTitle="Item weight",i.dataset.tipBody="Scoring weight for this answer option (itemWeight).",i.dataset.tipFhir="answerOption.extension[itemWeight].valueDecimal",i.dataset.tipSpec="SDC",n.appendChild(i)}if(t._answerMedias&&t._answerMedias[e]){let i=t._answerMedias[e],s=i.contentType||"",a=s.startsWith("audio/")?Object.assign(document.createElement("audio"),{src:i.url,controls:!0}):s.startsWith("video/")?Object.assign(document.createElement("video"),{src:i.url,controls:!0,style:"max-width:200px;max-height:120px"}):Object.assign(document.createElement("img"),{src:i.url,alt:i.title||"",style:"max-width:120px;max-height:80px;vertical-align:middle;margin-left:6px"});a.className="preview-answer-media",n.appendChild(a)}}function Ci(n,t,e){let i=t.getBoundingClientRect(),a=window.innerHeight-i.bottom-4,o=i.top-4,l=parseInt(getComputedStyle(n).maxHeight)||200;n.style.left=i.left+"px",n.style.minWidth=i.width+"px",n.style.fontSize=getComputedStyle(e||t).fontSize;let r=Math.min(l,Math.max(a>=Math.min(l,o)?a:o,60));return n.style.maxHeight=r+"px",a>=Math.min(l,o)?n.style.top=i.bottom+2+"px":n.style.top=Math.max(4,i.top-Math.min(r,n.offsetHeight||r)-2)+"px",i}var ht=class extends Q{constructor(t={}){super(t),this.itemType="select"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=i(e.id)||"",c=Qe(e,t._fpCtx);e.repeats&&(c=_i(c,r,gi(vi(e.id),e.id,i))),e._lookupDisplayCache||(e._lookupDisplayCache={});let u=document.createElement("div");u.className="sc-trigger",u.tabIndex=0,u.setAttribute("role","combobox"),u.setAttribute("aria-haspopup","listbox"),u.setAttribute("aria-expanded","false");{let m=String(e.title||"").replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim();m&&u.setAttribute("aria-label",m)}let d=document.createElement("span");d.className="sc-trigger-text",u.appendChild(d);let h=()=>{let m=c.find(x=>x.code===r);if(m){let x=xi(e,m.code,m.display||m.code);e._optionPrefixes&&e._optionPrefixes[m.code]!==void 0&&(x=e._optionPrefixes[m.code]+"\xA0"+x),e._optionOrdinals&&e._optionOrdinals[m.code]!==void 0&&(x+="\xA0("+e._optionOrdinals[m.code]+")"),d.textContent=x,u.classList.remove("sc-trigger--empty")}else r&&e._lookupDisplayCache[r]?(d.textContent=e._lookupDisplayCache[r],u.classList.remove("sc-trigger--empty")):(d.textContent="\u2014 select \u2014",u.classList.add("sc-trigger--empty"))};h();let p=null,y=!1,_=-1,R=rt("csel"),S=()=>{p&&(p.remove(),p=null),y=!1,_=-1,u.setAttribute("aria-expanded","false"),u.removeAttribute("aria-activedescendant"),document.removeEventListener("mousedown",D,!0),document.removeEventListener("keydown",b,!0)},D=m=>{!l.contains(m.target)&&!p?.contains(m.target)&&S()},A=m=>{r=m,s(e.id,m),h(),o(),a(),I.notifyChanged(t.bus),S(),u.focus()},O=()=>p?[...p.querySelectorAll('[role="option"]')]:[],N=m=>{let x=O();x.length&&(_=Math.max(0,Math.min(m,x.length-1)),x.forEach((k,$)=>{k.id||(k.id=R+"-opt-"+$),k.classList.toggle("oc-opt--active",$===_)}),u.setAttribute("aria-activedescendant",x[_].id),x[_].scrollIntoView({block:"nearest"}))},b=m=>{if(!y)return;if(m.key==="Escape"){m.preventDefault(),m.stopPropagation(),S(),u.focus();return}let x=O();if(x.length){if(m.key==="ArrowDown")m.preventDefault(),m.stopPropagation(),N(_+1);else if(m.key==="ArrowUp")m.preventDefault(),m.stopPropagation(),N(_-1);else if(m.key==="Home")m.preventDefault(),m.stopPropagation(),N(0);else if(m.key==="End")m.preventDefault(),m.stopPropagation(),N(x.length-1);else if(m.key==="Enter"){m.preventDefault(),m.stopPropagation();let k=x[_]||c[0];k&&k.dataset.code!==void 0&&A(k.dataset.code)}}},P=(m,x="")=>{let k=x.toLowerCase(),$=e._choiceColumns;$&&$.length&&m.appendChild(bi($));for(let{code:q,display:z}of c){let K=z||q;if(!(k&&!K.toLowerCase().includes(k)&&!q.toLowerCase().includes(k)))if($&&$.length){let U=on(e,q),j=Ei($,U,q,z);j.setAttribute("role","option"),j.setAttribute("aria-selected",String(q===r)),j.dataset.code=q,q===r&&j.classList.add("oc-opt--sel"),j.addEventListener("mousedown",se=>{se.preventDefault(),A(q)}),m.appendChild(j)}else{let U=document.createElement("div");if(U.className="oc-opt",U.setAttribute("role","option"),U.setAttribute("aria-selected",String(q===r)),U.dataset.code=q,e._optionPrefixes&&e._optionPrefixes[q]!==void 0){let j=document.createElement("span");j.className="option-prefix",j.textContent=e._optionPrefixes[q]+"\xA0",U.appendChild(j)}if(e._optionOrdinals&&e._optionOrdinals[q]!==void 0){U.appendChild(document.createTextNode(K));let j=document.createElement("span");j.className="option-ordinal",j.textContent="\xA0("+e._optionOrdinals[q]+")",U.appendChild(j)}else U.appendChild(document.createTextNode(K));ft(U,e,q),q===r&&U.classList.add("oc-opt--sel"),U.addEventListener("mousedown",j=>{j.preventDefault(),A(q)}),m.appendChild(U)}}},v=()=>{P(p)},T=()=>{let m=document.createElement("input");m.type="text",m.className="oc-search",m.placeholder="Search\u2026",m.dataset.testid="autocomplete-search";let x=document.createElement("div");P(x),m.addEventListener("input",()=>{x.innerHTML="",P(x,m.value)}),p.appendChild(m),p.appendChild(x),requestAnimationFrame(()=>m.focus())},w=()=>{let m=document.createElement("input");m.type="text",m.className="oc-search",m.placeholder="Search codes\u2026",m.dataset.testid="lookup-search";let x=document.createElement("div");x.className="oc-lookup-status",x.dataset.testid="lookup-status",x.style.display="none";let k=document.createElement("div"),$=null,q=z=>{clearTimeout($),x.textContent="Searching\u2026",x.style.display="",k.innerHTML="",$=setTimeout(async()=>{if(!e._answerValueSet){x.textContent="No ValueSet configured",x.style.display="";return}try{let K=an.getServer(e,null),U=await an.expandWithFilter(e._answerValueSet,K,z);x.textContent=U.length?"":"No results",x.style.display=U.length?"none":"",k.innerHTML="";for(let{code:j,display:se}of U){let le=document.createElement("div");le.className="oc-opt",le.textContent=se||j,j===r&&le.classList.add("oc-opt--sel"),le.addEventListener("mousedown",Te=>{Te.preventDefault(),e._lookupDisplayCache[j]=se||j,A(j)}),k.appendChild(le)}L()}catch(K){x.textContent="\u2717 "+(K.message||"Search failed"),x.style.display="",k.innerHTML=""}},z.trim()?300:0)};m.addEventListener("input",()=>q(m.value)),p.appendChild(m),p.appendChild(x),p.appendChild(k),requestAnimationFrame(()=>{m.focus(),q("")})},L=()=>{if(!p)return;let m=Ci(p,u);e._choiceColumns&&e._choiceColumns.length?(p.style.minWidth=m.width+"px",p.style.width="auto"):p.style.width=m.width+"px"},H=()=>{if(p){S();return}switch(p=document.createElement("div"),p.className="oc-drop",p.setAttribute("role","listbox"),e._itemControl){case"autocomplete":T();break;case"lookup":w();break;default:v();break}if(document.body.appendChild(p),y=!0,u.setAttribute("aria-expanded","true"),u.setAttribute("aria-controls",p.id||(p.id=R+"-list")),L(),document.addEventListener("mousedown",D,!0),e._itemControl!=="autocomplete"&&e._itemControl!=="lookup"){document.addEventListener("keydown",b,!0);let x=O().findIndex(k=>k.dataset.code===r);N(x>=0?x:0)}};return u.addEventListener("click",H),u.addEventListener("keydown",m=>{y||(m.key==="Enter"||m.key===" "||m.key==="ArrowDown"||m.key==="ArrowUp")&&(m.preventDefault(),H())}),l.appendChild(u),l}},mt=class extends Q{constructor(t={}){super(t),this.itemType="radio"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx);if(!r.length){let u=document.createElement("span");return u.className="radio-no-opts",u.textContent="(no options)",l.appendChild(u),l}e._columnCount>1?(l.classList.add("ctrl-wrap--columns"),l.style.setProperty("--col-count",e._columnCount)):e._choiceOrientation==="vertical"?l.classList.add("ctrl-wrap--vertical"):e._choiceOrientation==="horizontal"&&l.classList.add("ctrl-wrap--horizontal");let c="radio_"+e.id;for(let{code:u,display:d}of r){let h=document.createElement("label");h.className="radio-label";let p=document.createElement("input");if(p.type="radio",p.name=c,p.value=u,p.checked=i(e.id)===u,p.onchange=()=>{p.checked&&(s(e.id,u),o(),a(),I.notifyChanged(t.bus))},h.appendChild(p),e._optionPrefixes&&e._optionPrefixes[u]!==void 0){let y=document.createElement("span");y.className="option-prefix",y.textContent=e._optionPrefixes[u]+"\xA0",h.appendChild(y)}if(h.appendChild(document.createTextNode(d)),e._optionOrdinals&&e._optionOrdinals[u]!==void 0){let y=document.createElement("span");y.className="option-ordinal",y.textContent="\xA0("+e._optionOrdinals[u]+")",h.appendChild(y)}ft(h,e,u),l.appendChild(h)}return l}},gt=class extends Q{constructor(t={}){super(t),this.itemType="open-choice"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx),c=document.createElement("div");c.className="oc-wrap";let u=document.createElement("input");u.type="text",u.className="oc-input",u.placeholder=e._openLabel||"Choose or type\u2026",u.value=i(e.id)!==void 0?i(e.id):"",u.autocomplete="off";let d=e._answerConstraint==="optionsOnly";d&&(u.readOnly=!0,u.placeholder=e._openLabel||"Choose\u2026",u.classList.add("choice-open-readonly"));let h=document.createElement("button");h.type="button",h.className="oc-btn",h.innerHTML="▾",h.dataset.tipTitle="Show options",c.appendChild(u),c.appendChild(h);let p=null,y=!1,_=()=>{p&&(p.remove(),p=null),y=!1,document.removeEventListener("mousedown",R,!0)},R=A=>{!c.contains(A.target)&&!p?.contains(A.target)&&_()},S=A=>{u.value=A,s(e.id,A),o(),a(),I.notifyChanged(t.bus),_(),u.focus()},D=(A="")=>{p&&p.remove();let O=A.toLowerCase(),N=O?r.filter(({display:b,code:P})=>(b||P).toLowerCase().includes(O)):r;if(!N.length){y=!1;return}p=document.createElement("div"),p.className="oc-drop";for(let{display:b,code:P}of N){let v=b||P,T=document.createElement("div");T.className="oc-opt",T.textContent=v,v===u.value&&T.classList.add("oc-opt--sel"),T.addEventListener("mousedown",w=>{w.preventDefault(),S(v)}),p.appendChild(T)}document.body.appendChild(p),y=!0,Ci(p,c,u),document.addEventListener("mousedown",R,!0)};return u.addEventListener("input",()=>{d||(s(e.id,u.value),o(),a(),D(u.value))}),u.addEventListener("change",()=>{I.notifyChanged(t.bus)}),u.addEventListener("focus",()=>{r.length&&D(u.value)}),u.addEventListener("keydown",A=>{A.key==="Escape"&&_()}),h.addEventListener("click",A=>{A.stopPropagation(),y?_():(u.focus(),D(u.value))}),l.appendChild(c),l}},_t=class extends Q{constructor(t={}){super(t),this.itemType="checklist",this.repeats=!0}supportsRepeat(){return!1}impliesRepeats(){return!0}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx);if(!r.length){let p=document.createElement("span");return p.className="radio-no-opts",p.textContent="(no options)",l.appendChild(p),l}e._columnCount>1?(l.classList.add("ctrl-wrap--columns"),l.style.setProperty("--col-count",e._columnCount)):e._choiceOrientation==="horizontal"?l.classList.add("ctrl-wrap--horizontal"):l.classList.add("ctrl-wrap--vertical");let c=()=>{let p=i(e.id);return!p||p===""?new Set:new Set(String(p).split(","))},u=p=>[...p].join(","),d=e._optionExclusives||{},h=[];for(let{code:p,display:y}of r){let _=document.createElement("label");_.className="radio-label";let R=document.createElement("input");if(R.type="checkbox",R.value=p,R.checked=c().has(p),h.push(R),R.onchange=()=>{let S=c();if(R.checked)if(d[p]){S.clear(),S.add(p);for(let A of h)A.checked=A.value===p}else{S.add(p);for(let A of Object.keys(d))S.delete(A);for(let A of h)d[A.value]&&(A.checked=!1)}else S.delete(p);let D=u(S);s(e.id,D||void 0),o(),a(),I.notifyChanged(t.bus)},_.appendChild(R),e._optionPrefixes&&e._optionPrefixes[p]!==void 0){let S=document.createElement("span");S.className="option-prefix",S.textContent=e._optionPrefixes[p]+"\xA0",_.appendChild(S)}if(_.appendChild(document.createTextNode(y)),e._optionOrdinals&&e._optionOrdinals[p]!==void 0){let S=document.createElement("span");S.className="option-ordinal",S.textContent="\xA0("+e._optionOrdinals[p]+")",_.appendChild(S)}ft(_,e,p),l.appendChild(_)}return l}};W.set("select",ht);W.set("radio",mt);W.set("checklist",_t);W.set("open-choice",gt);var wi=["January","February","March","April","May","June","July","August","September","October","November","December"],Gs=["Su","Mo","Tu","We","Th","Fr","Sa"];function cn(n){if(!n||n.length<10)return null;let t=parseInt(n.slice(0,4),10),e=parseInt(n.slice(5,7),10)-1,i=parseInt(n.slice(8,10),10),s=n.length>=16&&parseInt(n.slice(11,13),10)||0,a=n.length>=16&&parseInt(n.slice(14,16),10)||0;return isNaN(t)||isNaN(e)||isNaN(i)?null:{y:t,m:e,d:i,h:s,min:a}}function ln(n,t,e){return`${n}-${String(t+1).padStart(2,"0")}-${String(e).padStart(2,"0")}`}function Qs(n,t){let e=cn(n);if(!e)return"";let i=`${e.d} ${wi[e.m]} ${e.y}`;return t?`${i} \xB7 ${String(e.h).padStart(2,"0")}:${String(e.min).padStart(2,"0")}`:i}function un({value:n="",onChange:t,className:e="",testid:i,placeholder:s,withTime:a=!1}={}){let o=s||(a?"\u2014 date & time \u2014":"\u2014 date \u2014"),l=n,r=t||null,c=document.createElement("div");c.className="sc-trigger dp-trigger"+(e?" "+e:""),c.tabIndex=0,i&&(c.dataset.testid=i);let u=document.createElement("span");u.className="sc-trigger-text",c.appendChild(u);let d=()=>{let w=Qs(l,a);u.textContent=w||o,c.classList.toggle("sc-trigger--empty",!w),c.dataset.value=l};d();let h=null,p=0,y=0,_=null,R=null,S=null,D=0,A=0,O=()=>{h&&(h.remove(),h=null),document.removeEventListener("mousedown",N,!0),document.removeEventListener("keydown",b,!0)},N=w=>{!c.contains(w.target)&&!h?.contains(w.target)&&O()},b=w=>{w.key==="Escape"&&(O(),c.focus())},P=()=>{if(h){O();return}let w=cn(l),L=new Date;p=w?w.y:L.getFullYear(),y=w?w.m:L.getMonth(),_=w?w.y:null,R=w?w.m:null,S=w?w.d:null,D=w?w.h:0,A=w?w.min:0,h=document.createElement("div"),h.className="dp-cal"+(a?" dp-cal--dt":""),document.body.appendChild(h),T(),v(),document.addEventListener("mousedown",N,!0),document.addEventListener("keydown",b,!0)},v=()=>{if(!h)return;let w=c.getBoundingClientRect();h.style.left=w.left+"px";let L=h.offsetHeight;w.bottom+L+4<=window.innerHeight?h.style.top=w.bottom+2+"px":h.style.top=Math.max(4,w.top-L-2)+"px"},T=()=>{h.innerHTML="";let w=p,L=y,H=new Date,m=H.getFullYear(),x=H.getMonth(),k=H.getDate(),$=a?_!==null?{y:_,m:R,d:S}:null:cn(l),q=document.createElement("div");q.className="dp-hdr";let z=document.createElement("button");z.type="button",z.className="dp-nav-btn",z.textContent="\u2039",z.addEventListener("mousedown",G=>{G.preventDefault(),y===0?(y=11,p--):y--,T()});let K=document.createElement("span");K.className="dp-month-lbl",K.textContent=`${wi[L]} ${w}`;let U=document.createElement("button");U.type="button",U.className="dp-nav-btn",U.textContent="\u203A",U.addEventListener("mousedown",G=>{G.preventDefault(),y===11?(y=0,p++):y++,T()}),q.append(z,K,U),h.appendChild(q);let j=document.createElement("div");j.className="dp-grid";for(let G of Gs){let F=document.createElement("div");F.className="dp-dn",F.textContent=G,j.appendChild(F)}h.appendChild(j);let se=document.createElement("div");se.className="dp-grid";let le=new Date(w,L,1).getDay(),Te=new Date(w,L+1,0).getDate();for(let G=0;G<le;G++){let F=document.createElement("div");F.className="dp-day dp-day--blank",se.appendChild(F)}for(let G=1;G<=Te;G++){let F=document.createElement("div"),g=w===m&&L===x&&G===k,E=$&&w===$.y&&L===$.m&&G===$.d;F.className="dp-day"+(g?" dp-day--today":"")+(E?" dp-day--sel":""),F.textContent=G;let M=w,V=L,ie=G;F.addEventListener("mousedown",et=>{et.preventDefault(),a?(_=M,R=V,S=ie,T()):(l=ln(M,V,ie),d(),r&&r(l),O(),c.focus())}),se.appendChild(F)}h.appendChild(se);let ge=document.createElement("div");if(ge.className="dp-footer",a){let G=document.createElement("div");G.className="dp-time-row";let F=document.createElement("input");F.type="number",F.min="0",F.max="23",F.step="1",F.className="dp-time-inp",F.value=String(D).padStart(2,"0"),F.addEventListener("mousedown",ie=>ie.stopPropagation()),F.addEventListener("input",()=>{D=Math.min(23,Math.max(0,parseInt(F.value,10)||0))}),F.addEventListener("blur",()=>{F.value=String(D).padStart(2,"0")});let g=document.createElement("span");g.className="dp-time-sep",g.textContent=":";let E=document.createElement("input");E.type="number",E.min="0",E.max="59",E.step="1",E.className="dp-time-inp",E.value=String(A).padStart(2,"0"),E.addEventListener("mousedown",ie=>ie.stopPropagation()),E.addEventListener("input",()=>{A=Math.min(59,Math.max(0,parseInt(E.value,10)||0))}),E.addEventListener("blur",()=>{E.value=String(A).padStart(2,"0")}),G.append(F,g,E),ge.appendChild(G);let M=document.createElement("button");M.type="button",M.className="dp-footer-btn dp-footer-btn--set",M.textContent="Set",M.disabled=_===null,M.addEventListener("mousedown",ie=>{ie.preventDefault(),_!==null&&(l=`${ln(_,R,S)}T${String(D).padStart(2,"0")}:${String(A).padStart(2,"0")}:00`,d(),r&&r(l),O(),c.focus())});let V=document.createElement("button");V.type="button",V.className="dp-footer-btn dp-footer-btn--clear",V.textContent="Clear",V.addEventListener("mousedown",ie=>{ie.preventDefault(),l="",d(),r&&r(""),O(),c.focus()}),ge.append(M,V)}else{let G=document.createElement("button");G.type="button",G.className="dp-footer-btn",G.textContent="Today",G.addEventListener("mousedown",g=>{g.preventDefault(),l=ln(m,x,k),d(),r&&r(l),O(),c.focus()});let F=document.createElement("button");F.type="button",F.className="dp-footer-btn dp-footer-btn--clear",F.textContent="Clear",F.addEventListener("mousedown",g=>{g.preventDefault(),l="",d(),r&&r(""),O(),c.focus()}),ge.append(G,F)}h.appendChild(ge),setTimeout(v,0)};return c.addEventListener("click",P),c.addEventListener("keydown",w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),P()),w.key==="Escape"&&O()}),c._dpSetValue=w=>{l=w||"",d(),r&&r(l)},{el:c,getValue(){return l},setValue(w){l=w||"",d()}}}var vt=class extends Q{constructor(t={}){super(t),this.itemType="date"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=un({value:i(e.id)||"",onChange:c=>{s(e.id,c||void 0),o(),a(),I.notifyChanged(t.bus)},className:"ctrl-input--date",testid:"date-input"});return l.appendChild(r.el),l}},yt=class extends Q{constructor(t={}){super(t),this.itemType="dateTime"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=un({value:i(e.id)||"",onChange:c=>{s(e.id,c||void 0),o(),a(),I.notifyChanged(t.bus)},withTime:!0,className:"ctrl-input--date",testid:"datetime-input"});return l.appendChild(r.el),l}},xt=class extends Q{constructor(t={}){super(t),this.itemType="time"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("input");r.type="time",r.className="ctrl-input ctrl-input--time",r.dataset.testid="time-input";let c=i(e.id);return r.value=c?String(c).slice(0,5):"",r.addEventListener("change",()=>{let u=r.value;s(e.id,u?u+":00":void 0),o(),a(),I.notifyChanged(t.bus)}),l.appendChild(r),l}};W.set("date",vt);W.set("dateTime",yt);W.set("time",xt);var Ys=[{label:"Yes",value:!0},{label:"No",value:!1},{label:"Not Answered",value:void 0}],bt=class extends Q{constructor(t={}){super(t),this.itemType="checkbox"}supportsRepeat(){return!1}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("div");r.className="bool-seg",r.setAttribute("role","group"),r.setAttribute("aria-label",e.text||"Yes/No question");let c=i(e.id);for(let u of Ys){let d=document.createElement("button");d.type="button",d.className="bool-seg__btn",d.textContent=u.label;let h=u.value===c;d.classList.toggle("bool-seg__btn--active",h),d.setAttribute("aria-pressed",String(h)),d.addEventListener("click",()=>{r.querySelectorAll(".bool-seg__btn").forEach(p=>{p.classList.remove("bool-seg__btn--active"),p.setAttribute("aria-pressed","false")}),d.classList.add("bool-seg__btn--active"),d.setAttribute("aria-pressed","true"),s(e.id,u.value),o(),a(),I.notifyChanged(t.bus)}),r.appendChild(d)}return l.appendChild(r),l}};W.set("checkbox",bt);var Et=class extends Q{constructor(t={}){super(t),this.itemType="url"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.className="ctrl-wrap ctrl-wrap--text";let r=document.createElement("textarea");r.className="ctrl-input--text",r.rows=1,r.placeholder=e._entryFormat||"https://",r.value=i(e.id)!==void 0?i(e.id):"";let c=()=>{r.style.height="auto",r.style.height=r.scrollHeight+"px"},u=R=>{try{return new URL(R),!0}catch{return!1}};e._maxLength&&(r.maxLength=e._maxLength),e._minLength&&(r.minLength=e._minLength);let d=document.createElement("span");d.className="ctrl-err ctrl-err--ml",d.textContent="Invalid URL",d.style.display="none";let h=(()=>{if(!e._regex)return null;try{return new RegExp(e._regex)}catch{return null}})(),p=()=>{e._minLength&&r.value.length>0&&r.value.length<e._minLength?(d.textContent="Min\xA0"+e._minLength+"\xA0chars",d.style.display="inline"):h&&r.value.length>0&&!h.test(r.value)?(d.textContent="Does not match pattern",d.style.display="inline"):(d.textContent="Invalid URL",d.style.display=r.value===""||u(r.value)?"none":"inline")};(e._interacted||r.value&&!u(r.value))&&p();let y=null;if(e._maxLength){y=document.createElement("span"),y.className="ctrl-char-counter",y.dataset.testid="char-counter";let R=()=>{y.textContent=r.value.length+"\xA0/\xA0"+e._maxLength};R(),r.addEventListener("input",R)}let _=null;return r.oninput=()=>{s(e.id,r.value),c(),clearTimeout(_),_=setTimeout(()=>{o(),a()},200)},r.onchange=()=>{I.notifyChanged(t.bus)},r.addEventListener("blur",()=>{e._interacted=!0,p()}),l.appendChild(r),l.appendChild(d),y&&l.appendChild(y),r.value&&requestAnimationFrame(c),l}};W.set("url",Et);var Ct=class extends Q{constructor(t={}){super(t),this.itemType="attachment"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("input");r.type="file",r.className="file-input-hidden",e._mimeTypes&&e._mimeTypes.length&&(r.accept=e._mimeTypes.join(","));let c=document.createElement("button");c.type="button",c.className="btn-file",c.textContent="Choose file",c.onclick=()=>r.click();let u=document.createElement("span");u.className="file-name-tag",u.textContent=i(e.id)?i(e.id).name:"No file chosen";let d=document.createElement("span");d.className="file-size-hint",e._maxFileSizeMB!==void 0&&(d.textContent=`Max ${e._maxFileSizeMB} MB`);let h=document.createElement("span");return h.className="file-size-hint",h.dataset.testid="mime-hint",e._mimeTypes&&e._mimeTypes.length&&(h.textContent=e._mimeTypes.join(", ")),r.onchange=()=>{let p=r.files[0]||null;if(p&&e._maxFileSizeMB!==void 0&&p.size>e._maxFileSizeMB*1024*1024){_e(`File too large \u2014 max ${e._maxFileSizeMB} MB allowed`),r.value="",s(e.id,null),o(),a(),I.notifyChanged(t.bus);return}u.classList.remove("file-name-tag--error"),s(e.id,p?{name:p.name,size:p.size,type:p.type}:null),u.textContent=p?p.name:"No file chosen",o(),a(),I.notifyChanged(t.bus)},l.appendChild(r),l.appendChild(c),l.appendChild(u),e._maxFileSizeMB!==void 0&&l.appendChild(d),e._mimeTypes&&e._mimeTypes.length&&l.appendChild(h),l}};W.set("attachment",Ct);function wt({items:n=[],value:t="",onChange:e,className:i="",testid:s,searchable:a,ariaLabel:o}={}){let l=n.slice(),r=t,c=e||null,u=-1,d=rt("csel"),h=document.createElement("div");h.className="sc-trigger"+(i?" "+i:""),h.tabIndex=0,h.setAttribute("role","combobox"),h.setAttribute("aria-haspopup","listbox"),h.setAttribute("aria-expanded","false"),o&&h.setAttribute("aria-label",o),s&&(h.dataset.testid=s);let p=document.createElement("span");p.className="sc-trigger-text",h.appendChild(p);let y=()=>{let T=l.find(w=>w.value===r);p.textContent=T?T.label:"\u2014 "+(r||"select")+" \u2014",h.classList.toggle("sc-trigger--empty",!T),h.dataset.value=r};y();let _=null,R=()=>{_&&(_.remove(),_=null),u=-1,h.setAttribute("aria-expanded","false"),h.removeAttribute("aria-activedescendant"),document.removeEventListener("mousedown",S,!0),document.removeEventListener("keydown",O,!0)},S=T=>{!h.contains(T.target)&&!_?.contains(T.target)&&R()},D=()=>_?[..._.querySelectorAll(".oc-opt")].filter(T=>T.style.display!=="none"):[],A=T=>{let w=D();if(!w.length)return;u=Math.max(0,Math.min(T,w.length-1)),w.forEach((H,m)=>H.classList.toggle("oc-opt--active",m===u));let L=w[u];h.setAttribute("aria-activedescendant",L.id),L.scrollIntoView({block:"nearest"})},O=T=>{if(T.key==="Escape"){R(),h.focus();return}let w=D();if(w.length){if(T.key==="ArrowDown")T.preventDefault(),A(u+1);else if(T.key==="ArrowUp")T.preventDefault(),A(u-1);else if(T.key==="Home")T.preventDefault(),A(0);else if(T.key==="End")T.preventDefault(),A(w.length-1);else if(T.key==="Enter"){T.preventDefault();let L=w[u]||w[0],H=l.find(m=>m.value===L.dataset.val);H&&N(H)}}},N=T=>{r=T.value,y(),c&&c(T.value,T),R(),h.focus()},b=()=>{if(_){R();return}let T=a!==void 0?a:l.length>8;_=document.createElement("div"),_.className="oc-drop csel-drop",_.dataset.testid="csel-drop",_.id=d+"-list",_.setAttribute("role","listbox"),h.setAttribute("aria-controls",_.id),h.setAttribute("aria-expanded","true");let w=()=>{let H=D().findIndex(m=>m.dataset.val===r);A(H>=0?H:0)};if(T){let L=document.createElement("input");L.type="text",L.className="vis-q-sel-search",L.placeholder="Search\u2026",L.addEventListener("mousedown",m=>m.stopPropagation()),_.appendChild(L);let H=P(_);L.addEventListener("input",()=>{let m=L.value.toLowerCase();for(let x of H){let k=!m||x.dataset.val.toLowerCase().includes(m)||x.textContent.toLowerCase().includes(m);x.style.display=k?"":"none"}A(0)}),document.body.appendChild(_),v(),w(),document.addEventListener("mousedown",S,!0),document.addEventListener("keydown",O,!0),setTimeout(()=>L.focus(),0)}else P(_),document.body.appendChild(_),v(),w(),document.addEventListener("mousedown",S,!0),document.addEventListener("keydown",O,!0)},P=T=>{let w=[];return l.forEach((L,H)=>{let m=document.createElement("div");m.className="oc-opt"+(L.value===r?" oc-opt--sel":""),m.id=d+"-opt-"+H,m.setAttribute("role","option"),m.setAttribute("aria-selected",String(L.value===r)),m.textContent=L.label,m.dataset.val=L.value,L.title&&(m.dataset.tipTitle=L.title),m.addEventListener("mousedown",x=>{x.preventDefault(),N(L)}),T.appendChild(m),w.push(m)}),w},v=()=>{let T=h.getBoundingClientRect(),L=window.innerHeight-T.bottom-4,H=T.top-4,m=200;if(_.style.left=T.left+"px",_.style.minWidth=T.width+"px",L>=Math.min(m,H)){let x=Math.min(m,Math.max(L,60));_.style.maxHeight=x+"px",_.style.top=T.bottom+2+"px"}else{let x=Math.min(m,Math.max(H,60));_.style.maxHeight=x+"px",_.style.top=T.top-Math.min(x,_.offsetHeight||x)-2+"px"}};return h.addEventListener("click",b),h.addEventListener("keydown",T=>{T.key==="Enter"||T.key===" "||T.key==="ArrowDown"||T.key==="ArrowUp"?(T.preventDefault(),_||b()):T.key==="Escape"&&R()}),{el:h,getValue(){return r},setValue(T){if(r=T,y(),_)for(let w of _.querySelectorAll(".oc-opt")){let L=w.dataset.val===r;w.classList.toggle("oc-opt--sel",L),w.setAttribute("aria-selected",String(L))}},setOptions(T){l=T.slice();let w=r;l.find(L=>L.value===w)||(r=l[0]?.value??""),y(),_&&R()},setOnChange(T){c=T}}}var Js=["hapi.fhir.org","r4.smarthealthit.org","launch.smarthealthit.org","test.ahdis.ch","terminology.hl7.org"];function dn(n,t){let e=((t??ue.get(Z.CORS_PROXY))||"").replace(/\/$/,"");if(!e)return n;try{let{hostname:i}=new URL(n);if(Js.includes(i))return n}catch{}return`${e}?url=${encodeURIComponent(n)}`}function zs(n){let t=n.resourceType;if(["Patient","Practitioner","RelatedPerson","Person"].includes(t)){let e=n.name?.[0];if(e){let i=e.family||"",s=(e.given||[]).join(" ");return[i,s].filter(Boolean).join(", ")||e.text||n.id}}if(["Organization","Location","HealthcareService"].includes(t))return n.name||n.id;if(["Encounter","EpisodeOfCare"].includes(t)){let e=n.subject?.display||n.patient?.display||"",i=n.status?`[${n.status}]`:"",s=n.period?.start?.slice(0,10)||"";return[e,s,i].filter(Boolean).join(" ")||n.id}if(["Condition","Observation","Procedure"].includes(t)){let e=n.code?.coding?.[0]?.display||n.code?.text||"",i=n.subject?.display||"";return[e,i].filter(Boolean).join(" \u2014 ")||n.id}return n.name||n.title||n.id}function Xs(n){return["Patient","Practitioner","RelatedPerson","Person"].includes(n)||["Organization","Location","HealthcareService","Medication"].includes(n)?"name":["Encounter","EpisodeOfCare","Condition","Observation","Procedure","DiagnosticReport","MedicationRequest","ServiceRequest"].includes(n)?"patient.name":["Medication","Substance"].includes(n)?"code":"_id"}async function Si(n,t,e=10,i={}){let s=((i.fhirBase??ue.get(Z.FHIR_BASE))||"").replace(/\/$/,"");if(!s||!n||!t.trim())return[];let a=new URLSearchParams({_count:String(e)});a.set(Xs(n),t);let o=dn(`${s}/${n}?${a}`,i.corsProxy),l=await fetch(o,{headers:{Accept:"application/fhir+json"},signal:AbortSignal.timeout(6e3)});if(!l.ok){let c=`HTTP ${l.status}`;try{let d=(await l.json())?.issue?.[0]?.diagnostics;d&&(c+=" \u2014 "+d.substring(0,120))}catch{}throw new Error(c)}return((await l.json()).entry||[]).map(c=>({id:c.resource?.id||"",display:zs(c.resource)})).filter(c=>c.id)}var St=new Set(["checkbox","text","number","date","dateTime","time","url","attachment","open-choice","decimal","integer","quantity","reference","radio","select","checklist"]),Ks=new Set(["text","number","date","dateTime","time","open-choice","decimal","integer","radio","select","checklist"]),ae=n=>n.mandatory===!0;function Ye(n,t,e,i){if(!n.constraint||!n.constraint.length||!t||!e)return!0;let s={resource:e,...i};for(let a of n.constraint)if(!(!a.expression||a.severity!=="error"))try{let o=t.evaluate(e,a.expression,s,re());if(!o||o.length===0||o[0]===!1)return!1}catch{return!1}return!0}function Zs(n){try{return new URL(n),!0}catch{return!1}}function pn(n,t){if(!t)return!1;let e=n&&typeof n=="object"?n.reference:"";if(!e)return!1;let i=String(e).split("/")[0];return!!i&&i!==t}function Re(n,t,e){if(e&&e.length){let i=t;t={get:s=>i.get(s,e)}}if(n._calculatedExpr&&n._readOnly)return n.itemType!=="checkbox"?!0:t.get(n.id)===!0;if(n.itemType==="reference"&&n.referenceResource&&pn(t.get(n.id),n.referenceResource))return!1;if(n.itemType==="checkbox"&&ae(n)){let i=t.get(n.id);return i===!0||i===!1}if(n.itemType==="url"){let i=t.get(n.id);if(!i||i==="")return!ae(n);if(!Zs(i))return!1;if(n._regex)try{if(!new RegExp(n._regex).test(i))return!1}catch{}return!0}if(n.itemType==="attachment"){let i=t.get(n.id);return i&&n._maxFileSizeMB!==void 0&&i.size>n._maxFileSizeMB*1024*1024?!1:ae(n)?i!=null:!0}if(n.itemType==="integer"||n.itemType==="decimal"||n.itemType==="number"){let i=t.get(n.id);if(i!==void 0&&i!==""&&i!==null){let s=Number(i);if(!isFinite(s)||n._minValue!==void 0&&s<Number(n._minValue)||n._maxValue!==void 0&&s>Number(n._maxValue))return!1;if(n._maxDecimalPlaces!==void 0){let a=String(i).split(".");if(a.length>1&&a[1].length>n._maxDecimalPlaces)return!1}}return ae(n)?i!==void 0&&i!==""&&i!==null:!0}if(n.mandatory===!1)return!0;if(n.itemType==="reference"){if(!ae(n))return!0;let i=t.get(n.id);return i!=null&&typeof i=="object"&&!!i.reference}if(n.itemType==="quantity"){if(!ae(n))return!0;let i=t.get(n.id);return i!=null&&typeof i=="object"&&i.value!==void 0&&!!i.unit}if(n._minLength){let i=t.get(n.id);if(i&&String(i).length>0&&String(i).length<n._minLength)return!1}if(n._regex){let i=t.get(n.id);if(i&&String(i).length>0)try{if(!new RegExp(n._regex).test(String(i)))return!1}catch{}}if(ae(n)&&Ks.has(n.itemType)){let i=t.get(n.id);return i!==void 0&&i!==""&&i!==null}return!0}var er=["Account","ActivityDefinition","AdverseEvent","AllergyIntolerance","Appointment","AppointmentResponse","AuditEvent","Basic","Binary","BiologicallyDerivedProduct","BodyStructure","Bundle","CapabilityStatement","CarePlan","CareTeam","ChargeItem","ChargeItemDefinition","Claim","ClaimResponse","ClinicalImpression","CodeSystem","Communication","CommunicationRequest","CompartmentDefinition","Composition","ConceptMap","Condition","Consent","Contract","Coverage","CoverageEligibilityRequest","CoverageEligibilityResponse","DetectedIssue","Device","DeviceDefinition","DeviceMetric","DeviceRequest","DeviceUseStatement","DiagnosticReport","DocumentManifest","DocumentReference","Encounter","Endpoint","EnrollmentRequest","EnrollmentResponse","EpisodeOfCare","EventDefinition","ExplanationOfBenefit","FamilyMemberHistory","Flag","Goal","Group","GuidanceResponse","HealthcareService","ImagingStudy","Immunization","ImmunizationEvaluation","ImmunizationRecommendation","ImplementationGuide","InsurancePlan","Invoice","Library","Linkage","List","Location","Measure","MeasureReport","Media","Medication","MedicationAdministration","MedicationDispense","MedicationKnowledge","MedicationRequest","MedicationStatement","MessageDefinition","MessageHeader","MolecularSequence","NamingSystem","NutritionOrder","Observation","ObservationDefinition","OperationDefinition","OperationOutcome","Organization","OrganizationAffiliation","Parameters","Patient","PaymentNotice","PaymentReconciliation","Person","PlanDefinition","Practitioner","PractitionerRole","Procedure","Provenance","Questionnaire","QuestionnaireResponse","RelatedPerson","RequestGroup","ResearchStudy","ResearchSubject","RiskAssessment","Schedule","SearchParameter","ServiceRequest","Slot","Specimen","SpecimenDefinition","StructureDefinition","StructureMap","Subscription","Substance","SupplyDelivery","SupplyRequest","Task","TerminologyCapabilities","TestReport","TestScript","ValueSet","VerificationResult","VisionPrescription"],Rt=class extends Q{constructor(t={}){super(t),this.itemType="reference"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.classList.add("ctrl-wrap--joined");let r=i(e.id),c=r&&r.reference||"",u=c.indexOf("/"),d=u>-1?c.slice(0,u):e.referenceResource||"",h=u>-1?c.slice(u+1):"",p=e.referenceResource?[{value:e.referenceResource,label:e.referenceResource}]:[{value:"",label:"\u2014 type \u2014"},...er.map(N=>({value:N,label:N}))],y=wt({items:p,value:d||"",className:"ref-type-sel",onChange:()=>{O(),I.notifyChanged(t.bus)}}),_=document.createElement("span");_.textContent="/",_.className="ref-sep";let R=document.createElement("input");R.type="text",R.placeholder=t.fhirBase?"search or enter id":"id",R.value=h,R.className="ref-id-input";let S=document.createElement("span");S.className="ctrl-err ctrl-err--ml",S.textContent="id is required";let D=document.createElement("span");D.className="ctrl-err ctrl-err--ml",D.dataset.testid="ref-type-error",D.style.display="none";let A=()=>{let N=i(e.id),b=!!e.referenceResource&&pn(N,e.referenceResource);D.textContent=b?`Expected ${e.referenceResource}`:"",D.style.display=b?"inline":"none"},O=()=>{let N=y.getValue(),b=R.value.trim();S.style.display=N&&!b?"inline":"none",s(e.id,N&&b?{reference:N+"/"+b}:void 0),A(),o(),a()};if(R.oninput=O,R.onchange=()=>{I.notifyChanged(t.bus)},t.fhirBase){let N=document.createElement("div");N.className="ref-search-wrap";let b=document.createElement("div");b.className="ref-search-drop",b.style.display="none",document.body.appendChild(b);let P=()=>{let m=R.getBoundingClientRect(),x=240;b.style.position="fixed",b.style.top=m.bottom+4+"px",b.style.width=x+"px",b.style.maxHeight="220px";let k=m.right-x;b.style.left=Math.max(4,k)+"px"},v=null,T=()=>{b.style.display="none"},w=()=>{P(),b.style.display="block"},L=(m,x)=>{if(b.innerHTML="",m.length===0){let k=document.createElement("div");k.className="ref-search-empty",k.textContent=x.trim()?"No results":"Type to search\u2026",b.appendChild(k)}else m.forEach(k=>{let $=document.createElement("button");$.type="button",$.className="ref-search-item";let q=document.createElement("span");q.className="ref-search-name",q.textContent=k.display;let z=document.createElement("span");z.className="ref-search-id",z.textContent=k.id,$.append(q,z),$.addEventListener("mousedown",K=>{K.preventDefault(),R.value=k.id,O(),I.notifyChanged(t.bus),T()}),b.appendChild($)});w()},H=async m=>{let x=y.getValue();if(!x){T();return}let k=document.createElement("div");k.className="ref-search-empty",k.textContent="Searching\u2026",b.innerHTML="",b.appendChild(k),w();try{let $=await Si(x,m,10,{fhirBase:t.fhirBase,corsProxy:t.corsProxy});L($,m)}catch($){let q=document.createElement("div");q.className="ref-search-empty ref-search-error",q.textContent=$.message||"Search failed",b.innerHTML="",b.appendChild(q)}};R.addEventListener("input",()=>{clearTimeout(v);let m=R.value.trim();if(!m){T();return}v=setTimeout(()=>H(m),350)}),R.addEventListener("focus",()=>{R.value.trim()&&H(R.value.trim())}),R.addEventListener("blur",()=>{setTimeout(T,150)}),e._ac?.signal&&e._ac.signal.addEventListener("abort",()=>{b.remove()},{once:!0}),N.appendChild(R),l.appendChild(y.el),l.appendChild(_),l.appendChild(N)}else l.appendChild(y.el),l.appendChild(_),l.appendChild(R);if(l.appendChild(S),l.appendChild(D),A(),e._referenceProfiles?.length){let N=document.createElement("span");N.className="ctrl-ref-info",N.textContent="Profile: "+e._referenceProfiles.join(", "),N.dataset.tipTitle="questionnaire-referenceProfile",N.dataset.tipBody=`Allowed profiles:
|
|
32
|
+
Click to explain.`,t.dataset.tipFhir="sdc-questionnaire-calculatedExpression",t.dataset.tipSpec="SDC";let i=this._calculatedExpr;t.addEventListener("click",()=>{e.lastCtx.fp&&Se(i,e.lastCtx.fp,e.lastCtx.qr,e.lastCtx.env)})}_appendRow(t,e,i){return e.hidden&&this.type==="item"&&t.querySelectorAll("input, select, textarea").forEach(s=>{s.disabled=!0}),super._appendRow(t,e,i)}};var je=class extends Q{constructor(t={}){super(t),this.itemType="text"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.className="ctrl-wrap ctrl-wrap--text";let r=document.createElement("textarea");r.className="ctrl-input--text",r.rows=3,r.value=i(e.id)!==void 0?i(e.id):"",e._maxLength&&(r.maxLength=e._maxLength),e._minLength&&(r.minLength=e._minLength),e._entryFormat&&(r.placeholder=e._entryFormat);let c=()=>{r.style.height="auto",r.style.height=r.scrollHeight+"px"},d=null;if(e._maxLength){d=document.createElement("span"),d.className="ctrl-char-counter",d.dataset.testid="char-counter";let v=()=>{d.textContent=r.value.length+"\xA0/\xA0"+e._maxLength};v(),r.addEventListener("input",v)}let u=null;if(e._minLength){u=document.createElement("span"),u.className="ctrl-err ctrl-err--ml",u.dataset.testid="minlength-err",u.textContent="Min\xA0"+e._minLength+"\xA0chars";let v=()=>{u.style.display=r.value.length>0&&r.value.length<e._minLength?"inline":"none"};e._interacted?v():u.style.display="none"}let f=null,h=e._regex?(()=>{try{return new RegExp(e._regex)}catch{return null}})():null;if(e._regex){f=document.createElement("span"),f.className="ctrl-err ctrl-err--regex",f.dataset.testid="regex-err",f.textContent="Does not match pattern";let v=()=>{f.style.display=h&&r.value.length>0&&!h.test(r.value)?"inline":"none"};e._interacted?v():f.style.display="none"}r.addEventListener("blur",()=>{e._interacted=!0,u&&(u.style.display=r.value.length>0&&r.value.length<e._minLength?"inline":"none"),f&&(f.style.display=h&&r.value.length>0&&!h.test(r.value)?"inline":"none")});let _=null;return r.oninput=()=>{s(e.id,r.value),c(),clearTimeout(_),_=setTimeout(()=>{o(),a()},200)},r.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(r),d&&l.appendChild(d),u&&l.appendChild(u),f&&l.appendChild(f),r.value&&requestAnimationFrame(c),l}};W.set("text",je);var Ie=class extends Q{constructor(t={}){super(t),this.itemType=t.itemType??"number"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();if(e._sliderStep!==void 0||e._itemControl==="slider"){let u=document.createElement("input");u.type="range",u.className="ctrl-input--slider",u.dataset.testid="slider-input",u.min=e._minValue!==void 0?String(e._minValue):"0",u.max=e._maxValue!==void 0?String(e._maxValue):"100",u.step=String(e._sliderStep);let f=i(e.id);u.value=f!==void 0&&f!==""?String(f):u.min;let h=document.createElement("span");return h.className="ctrl-slider-value",h.dataset.testid="slider-value",h.textContent=u.value,u.oninput=()=>{let _=parseFloat(u.value);s(e.id,_),h.textContent=u.value,o(),a()},u.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(u),l.appendChild(h),l}let r=document.createElement("input");r.type="number",r.className="ctrl-input--number",r.value=i(e.id)!==void 0?i(e.id):"",e._minValue!==void 0&&(r.min=String(e._minValue)),e._maxValue!==void 0&&(r.max=String(e._maxValue)),e._maxDecimalPlaces!==void 0&&(r.step=String(Math.pow(10,-e._maxDecimalPlaces))),e._entryFormat&&(r.placeholder=e._entryFormat);let c=document.createElement("span");c.className="ctrl-err ctrl-err--ml",c.dataset.testid="numeric-err",c.style.display="none";let d=u=>{if(u===void 0||u===""||u===null){c.style.display="none";return}let f=Number(u);if(e._minValue!==void 0&&f<e._minValue)c.textContent="Min: "+e._minValue,c.style.display="inline";else if(e._maxValue!==void 0&&f>e._maxValue)c.textContent="Max: "+e._maxValue,c.style.display="inline";else if(e._maxDecimalPlaces!==void 0){let h=String(u).split(".");h.length>1&&h[1].length>e._maxDecimalPlaces?(c.textContent="Max "+e._maxDecimalPlaces+" decimal place"+(e._maxDecimalPlaces!==1?"s":""),c.style.display="inline"):c.style.display="none"}else c.style.display="none"};return r.oninput=()=>{let u=r.value===""?void 0:e.itemType==="integer"?parseInt(r.value,10):parseFloat(r.value);s(e.id,u),d(u),o(),a()},r.onchange=()=>{I.notifyChanged(t.bus)},d(i(e.id)),l.appendChild(r),(e._minValue!==void 0||e._maxValue!==void 0||e._maxDecimalPlaces!==void 0)&&l.appendChild(c),l}};W.set("number",Ie);W.set("integer",Ie);W.set("decimal",Ie);var Z={CORS_PROXY:"corsProxyUrl",TERMINOLOGY_SERVER:"terminologyServer",NLM_API_BASE:"nlmApiBaseUrl",FHIR_BASE:"fhirBaseUrl",SDC_SERVER:"sdcServerUrl",VALIDATORS:"validators",TRANSLATE_API:"translateApiUrl",TRANSLATE_PROVIDER:"translateProvider",TRANSLATE_API_KEY:"translateApiKey"};var nn=class{get(t){return null}set(t,e){}get writable(){return!1}get label(){return"Unknown"}},Ve=class extends nn{constructor(t={}){super(),this._cfg=t}get(t){let e=this._cfg[t];return e==null?null:typeof e=="string"?e:JSON.stringify(e)}get label(){return"Default (config.json)"}};function Fs(){let n=[],t=null;return{register(e){n.unshift(e)},load(e="./config.json"){return t||(t=fetch(e).then(i=>i.json()).then(i=>(n.push(new Ve(i)),i)).catch(()=>(n.push(new Ve({})),{})),t)},ready(){return t??Promise.resolve({})},get(e){for(let i of n){let s=i.get(e);if(s!=null)return s}return null},getParsed(e){let i=this.get(e);if(i==null)return null;if(e===Z.VALIDATORS)try{return JSON.parse(i)}catch{return null}return i},set(e,i){for(let s of n)if(s.writable){s.set(e,i);return}},reset(e){this.set(e,null)},getProviders(){return[...n]},hasOverride(e){for(let i of n)if(i.writable&&i.get(e)!=null)return!0;return!1},_clear(){n.length=0,t=null}}}var de=Fs();var Us="https://tx.fhir.org/r4",Ws=500,pi=15e3,Hs=8e3,$s=new Set([429,500,503,504]),hi=700,sn=2,fi=3e4;function js(n,t){let e=n.headers.get("Retry-After");if(e){let i=Number(e);if(!isNaN(i)&&i>0)return Math.min(i*1e3,fi);let s=new Date(e);if(!isNaN(s.getTime()))return Math.min(Math.max(0,s-Date.now()),fi)}return hi*(t+1)}async function rn(n,t,e,i){let s;for(let a=0;a<=sn;a++){let o;try{o=await fetch(n,{...t,signal:AbortSignal.timeout(e)})}catch(l){s=l,a<sn&&(await new Promise(r=>setTimeout(r,hi*(a+1))),i?.());continue}if(!$s.has(o.status))return o;s=new Error(`HTTP ${o.status} ${o.statusText}`),a<sn&&(await new Promise(l=>setTimeout(l,js(o,a))),i?.())}throw s}function mi(n,t=[]){for(let e of n)e._answerValueSet&&!e._answerValueSet.startsWith("#")&&e._itemControl!=="lookup"&&t.push(e),e.children?.length&&mi(e.children,t);return t}function gi(n,t=[]){for(let e of n)e._unitValueSet&&t.push(e),e.children?.length&&gi(e.children,t);return t}var Ge=class{constructor(t){this._cfg=t}_corsProxy(){return(this._cfg.get(Z.CORS_PROXY)||"").replace(/\/$/,"")}_termServer(){return(this._cfg.get(Z.TERMINOLOGY_SERVER)||Us).replace(/\/$/,"")}_nlmApiBase(){return(this._cfg.get(Z.NLM_API_BASE)||"https://clinicaltables.nlm.nih.gov/api").replace(/\/$/,"")}_proxyUrl(t){let e=this._corsProxy();return e?`${e}?url=${encodeURIComponent(t)}`:t}async nlmUrl(t){return await this._cfg.ready?.(),`${this._nlmApiBase()}/${t}`}getServer(t,e){return(t?._preferredTermServer||e?.preferredTermServer||this._termServer()).replace(/\/$/,"")}async expandValueSet(t,e){await this._cfg.ready?.();let i=(e||this._termServer()).replace(/\/$/,""),s=this._proxyUrl(`${i}/ValueSet/$expand?url=${encodeURIComponent(t)}&_count=${Ws}`),a=await rn(s,{headers:{Accept:"application/fhir+json"}},pi);if(!a.ok)throw new Error(`HTTP ${a.status} ${a.statusText}`);let o=await a.json();if(o.resourceType!=="ValueSet")throw new Error("Response is not a FHIR ValueSet");return(o.expansion?.contains||[]).map(l=>({code:l.code??"",display:l.display||l.code||"",system:l.system||""}))}async expandWithFilter(t,e,i="",s=50){await this._cfg.ready?.();let a=(e||this._termServer()).replace(/\/$/,""),o=new URLSearchParams({url:t,_count:String(s)});i&&i.trim()&&o.set("filter",i.trim());let l=this._proxyUrl(`${a}/ValueSet/$expand?${o}`),r=await rn(l,{headers:{Accept:"application/fhir+json"}},pi);if(!r.ok)throw new Error(`HTTP ${r.status} ${r.statusText}`);let c=await r.json();if(c.resourceType!=="ValueSet")throw new Error("Response is not a FHIR ValueSet");return(c.expansion?.contains||[]).map(d=>({code:d.code??"",display:d.display||d.code||"",system:d.system||""}))}async testServer(t,{onRetry:e}={}){await this._cfg.ready?.();let i=(t||"").trim().replace(/\/$/,"");if(!i)return{ok:!1,message:"No URL provided"};try{let s=await rn(this._proxyUrl(`${i}/metadata`),{headers:{Accept:"application/fhir+json"}},Hs,e);if(!s.ok)return{ok:!1,message:`HTTP ${s.status} ${s.statusText}`};let a=await s.json();return a.resourceType!=="CapabilityStatement"?{ok:!1,message:"Not a FHIR server (no CapabilityStatement)"}:{ok:!0,message:[a.software?.name,a.software?.version].filter(Boolean).join(" ")||"OK"}}catch(s){return{ok:!1,message:s.message}}}async testExpand(t,e){if(!t)return{ok:!1,message:"No URL provided"};try{let i=await this.expandValueSet(t,e||this._termServer());return{ok:!0,message:`${i.length} code${i.length!==1?"s":""}`,count:i.length}}catch(i){return{ok:!1,message:i.message}}}async expandAll(t,e){let i=mi(t),s=gi(t);if(!i.length&&!s.length)return[];let a=[];for(let o of i){let l=this.getServer(o,e);try{o._vsCache=await this.expandValueSet(o._answerValueSet,l)}catch(r){o._vsCache=[];let d=r instanceof TypeError&&r.message.includes("fetch")?`Network error (possible CORS restriction \u2014 the server may not allow browser requests): ${r.message}`:r.message;a.push({node:o,vsUrl:o._answerValueSet,server:l,error:d})}}for(let o of s){let l=this.getServer(o,e);try{o._unitVsCache=await this.expandValueSet(o._unitValueSet,l)}catch(r){o._unitVsCache=[];let d=r instanceof TypeError&&r.message.includes("fetch")?`Network error (possible CORS restriction \u2014 the server may not allow browser requests): ${r.message}`:r.message;a.push({node:o,vsUrl:o._unitValueSet,server:l,error:d})}}return a}},an=new Ge(de);function pt(n){return n._rawAnswerOptions?Bn(n._rawAnswerOptions):nt(n.options)}function Qe(n,t){let e=n._answerExpression||n._candidateExpression;return e?!t||!t.fp||!t.qr?pt(n):Gs(n,e,t):n._answerValueSet&&!n._answerValueSet.startsWith("#")?n._vsCache??[]:pt(n)}function _i(n,t,e){let i=Number(e(n+"$$n"))||0,s=new Set;for(let a=0;a<=i;a++){let o=a===0?n:n+"$$"+a;if(o===t)continue;let l=e(o);l&&s.add(l)}return s}function vi(n,t,e){return!e||!e.size?n:n.filter(i=>i.code===t||!e.has(i.code))}function yi(n){return String(n).replace(/\$\$\d+$/,"")}function Gs(n,t,e){try{let i=e.fp.evaluate(e.qr,t,e.env||{},re());return!i||!i.length?pt(n):i.map(s=>{if(s==null)return null;if(typeof s=="string")return{code:s,display:s};if(typeof s=="number")return{code:String(s),display:String(s)};if(typeof s=="boolean")return{code:String(s),display:s?"Yes":"No"};if(typeof s=="object"){if(s.code!==void 0)return{code:String(s.code),display:s.display||String(s.code)};if(s.value!==void 0)return{code:String(s.value),display:s.display||String(s.value)}}return{code:String(s),display:String(s)}}).filter(Boolean)}catch{return pt(n)}}function xi(n,t,e,i){if(n){let s=n.valueCoding||n.valueReference||n;if(s&&s[i]!==void 0)return String(s[i])}return i==="code"?t:i==="display"&&e||""}function on(n,t){return n._rawAnswerOptions&&n._rawAnswerOptions.find(e=>{let i=e.valueCoding||e.valueReference;return!!(i&&(i.code===t||i.reference===t)||e.valueString===t||e.valueInteger!==void 0&&String(e.valueInteger)===t||e.valueDate===t||e.valueTime===t)})||null}function bi(n,t,e){if(!n._choiceColumns||!n._choiceColumns.length)return e;let i=n._choiceColumns.find(o=>o.forDisplay);if(!i)return e;let s=on(n,t);return xi(s,t,e,i.path)||e}function Ei(n){let t=document.createElement("div");t.className="oc-col-header";for(let e of n){let i=document.createElement("span");i.className="oc-col-cell",i.textContent=e.label||e.path,e.width&&(i.style.width=e.width.value+(e.width.unit||e.width.code||"%")),t.appendChild(i)}return t}function Ci(n,t,e,i){let s=document.createElement("div");s.className="oc-opt oc-col-row";for(let a of n){let o=document.createElement("span");o.className="oc-col-cell",o.textContent=xi(t,e,i,a.path),a.width&&(o.style.width=a.width.value+(a.width.unit||a.width.code||"%")),s.appendChild(o)}return s}function ln(n,t){let e=document.createElement("table");e.className="atable-item",e.dataset.testid="atable-item";let i=document.createElement("tr"),s=document.createElement("tr");n.forEach(({code:l,display:r},c)=>{let d=document.createElement("th");d.className="atable-th",d.textContent=r,i.appendChild(d);let u=document.createElement("td");u.className="atable-td",u.appendChild(t(l,c)),s.appendChild(u)});let a=document.createElement("thead");a.appendChild(i);let o=document.createElement("tbody");return o.appendChild(s),e.append(a,o),e}function ft(n,t,e){if(t._optionWeights&&t._optionWeights[e]!==void 0){let i=document.createElement("span");i.className="option-weight",i.textContent="\xA0[w:"+t._optionWeights[e]+"]",i.dataset.tipTitle="Item weight",i.dataset.tipBody="Scoring weight for this answer option (itemWeight).",i.dataset.tipFhir="answerOption.extension[itemWeight].valueDecimal",i.dataset.tipSpec="SDC",n.appendChild(i)}if(t._answerMedias&&t._answerMedias[e]){let i=t._answerMedias[e],s=i.contentType||"",a=s.startsWith("audio/")?Object.assign(document.createElement("audio"),{src:i.url,controls:!0}):s.startsWith("video/")?Object.assign(document.createElement("video"),{src:i.url,controls:!0,style:"max-width:200px;max-height:120px"}):Object.assign(document.createElement("img"),{src:i.url,alt:i.title||"",style:"max-width:120px;max-height:80px;vertical-align:middle;margin-left:6px"});a.className="preview-answer-media",n.appendChild(a)}}function wi(n,t,e){let i=t.getBoundingClientRect(),a=window.innerHeight-i.bottom-4,o=i.top-4,l=parseInt(getComputedStyle(n).maxHeight)||200;n.style.left=i.left+"px",n.style.minWidth=i.width+"px",n.style.fontSize=getComputedStyle(e||t).fontSize;let r=Math.min(l,Math.max(a>=Math.min(l,o)?a:o,60));return n.style.maxHeight=r+"px",a>=Math.min(l,o)?n.style.top=i.bottom+2+"px":n.style.top=Math.max(4,i.top-Math.min(r,n.offsetHeight||r)-2)+"px",i}var ht=class extends Q{constructor(t={}){super(t),this.itemType="select"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=i(e.id)||"",c=Qe(e,t._fpCtx);e.repeats&&(c=vi(c,r,_i(yi(e.id),e.id,i))),e._lookupDisplayCache||(e._lookupDisplayCache={});let d=document.createElement("div");d.className="sc-trigger",d.tabIndex=0,d.setAttribute("role","combobox"),d.setAttribute("aria-haspopup","listbox"),d.setAttribute("aria-expanded","false");{let m=String(e.title||"").replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim();m&&d.setAttribute("aria-label",m)}let u=document.createElement("span");u.className="sc-trigger-text",d.appendChild(u);let f=()=>{let m=c.find(x=>x.code===r);if(m){let x=bi(e,m.code,m.display||m.code);e._optionPrefixes&&e._optionPrefixes[m.code]!==void 0&&(x=e._optionPrefixes[m.code]+"\xA0"+x),e._optionOrdinals&&e._optionOrdinals[m.code]!==void 0&&(x+="\xA0("+e._optionOrdinals[m.code]+")"),u.textContent=x,d.classList.remove("sc-trigger--empty")}else r&&e._lookupDisplayCache[r]?(u.textContent=e._lookupDisplayCache[r],d.classList.remove("sc-trigger--empty")):(u.textContent="\u2014 select \u2014",d.classList.add("sc-trigger--empty"))};f();let h=null,_=!1,v=-1,C=rt("csel"),T=()=>{h&&(h.remove(),h=null),_=!1,v=-1,d.setAttribute("aria-expanded","false"),d.removeAttribute("aria-activedescendant"),document.removeEventListener("mousedown",N,!0),document.removeEventListener("keydown",b,!0)},N=m=>{!l.contains(m.target)&&!h?.contains(m.target)&&T()},D=m=>{r=m,s(e.id,m),f(),o(),a(),I.notifyChanged(t.bus),T(),d.focus()},O=()=>h?[...h.querySelectorAll('[role="option"]')]:[],A=m=>{let x=O();x.length&&(v=Math.max(0,Math.min(m,x.length-1)),x.forEach((k,$)=>{k.id||(k.id=C+"-opt-"+$),k.classList.toggle("oc-opt--active",$===v)}),d.setAttribute("aria-activedescendant",x[v].id),x[v].scrollIntoView({block:"nearest"}))},b=m=>{if(!_)return;if(m.key==="Escape"){m.preventDefault(),m.stopPropagation(),T(),d.focus();return}let x=O();if(x.length){if(m.key==="ArrowDown")m.preventDefault(),m.stopPropagation(),A(v+1);else if(m.key==="ArrowUp")m.preventDefault(),m.stopPropagation(),A(v-1);else if(m.key==="Home")m.preventDefault(),m.stopPropagation(),A(0);else if(m.key==="End")m.preventDefault(),m.stopPropagation(),A(x.length-1);else if(m.key==="Enter"){m.preventDefault(),m.stopPropagation();let k=x[v]||c[0];k&&k.dataset.code!==void 0&&D(k.dataset.code)}}},P=(m,x="")=>{let k=x.toLowerCase(),$=e._choiceColumns;$&&$.length&&m.appendChild(Ei($));for(let{code:q,display:z}of c){let K=z||q;if(!(k&&!K.toLowerCase().includes(k)&&!q.toLowerCase().includes(k)))if($&&$.length){let U=on(e,q),j=Ci($,U,q,z);j.setAttribute("role","option"),j.setAttribute("aria-selected",String(q===r)),j.dataset.code=q,q===r&&j.classList.add("oc-opt--sel"),j.addEventListener("mousedown",se=>{se.preventDefault(),D(q)}),m.appendChild(j)}else{let U=document.createElement("div");if(U.className="oc-opt",U.setAttribute("role","option"),U.setAttribute("aria-selected",String(q===r)),U.dataset.code=q,e._optionPrefixes&&e._optionPrefixes[q]!==void 0){let j=document.createElement("span");j.className="option-prefix",j.textContent=e._optionPrefixes[q]+"\xA0",U.appendChild(j)}if(e._optionOrdinals&&e._optionOrdinals[q]!==void 0){U.appendChild(document.createTextNode(K));let j=document.createElement("span");j.className="option-ordinal",j.textContent="\xA0("+e._optionOrdinals[q]+")",U.appendChild(j)}else U.appendChild(document.createTextNode(K));ft(U,e,q),q===r&&U.classList.add("oc-opt--sel"),U.addEventListener("mousedown",j=>{j.preventDefault(),D(q)}),m.appendChild(U)}}},y=()=>{P(h)},R=()=>{let m=document.createElement("input");m.type="text",m.className="oc-search",m.placeholder="Search\u2026",m.dataset.testid="autocomplete-search";let x=document.createElement("div");P(x),m.addEventListener("input",()=>{x.innerHTML="",P(x,m.value)}),h.appendChild(m),h.appendChild(x),requestAnimationFrame(()=>m.focus())},S=()=>{let m=document.createElement("input");m.type="text",m.className="oc-search",m.placeholder="Search codes\u2026",m.dataset.testid="lookup-search";let x=document.createElement("div");x.className="oc-lookup-status",x.dataset.testid="lookup-status",x.style.display="none";let k=document.createElement("div"),$=null,q=z=>{clearTimeout($),x.textContent="Searching\u2026",x.style.display="",k.innerHTML="",$=setTimeout(async()=>{if(!e._answerValueSet){x.textContent="No ValueSet configured",x.style.display="";return}try{let K=an.getServer(e,null),U=await an.expandWithFilter(e._answerValueSet,K,z);x.textContent=U.length?"":"No results",x.style.display=U.length?"none":"",k.innerHTML="";for(let{code:j,display:se}of U){let le=document.createElement("div");le.className="oc-opt",le.textContent=se||j,j===r&&le.classList.add("oc-opt--sel"),le.addEventListener("mousedown",Te=>{Te.preventDefault(),e._lookupDisplayCache[j]=se||j,D(j)}),k.appendChild(le)}L()}catch(K){x.textContent="\u2717 "+(K.message||"Search failed"),x.style.display="",k.innerHTML=""}},z.trim()?300:0)};m.addEventListener("input",()=>q(m.value)),h.appendChild(m),h.appendChild(x),h.appendChild(k),requestAnimationFrame(()=>{m.focus(),q("")})},L=()=>{if(!h)return;let m=wi(h,d);e._choiceColumns&&e._choiceColumns.length?(h.style.minWidth=m.width+"px",h.style.width="auto"):h.style.width=m.width+"px"},H=()=>{if(h){T();return}switch(h=document.createElement("div"),h.className="oc-drop",h.setAttribute("role","listbox"),e._itemControl){case"autocomplete":R();break;case"lookup":S();break;default:y();break}if(document.body.appendChild(h),_=!0,d.setAttribute("aria-expanded","true"),d.setAttribute("aria-controls",h.id||(h.id=C+"-list")),L(),document.addEventListener("mousedown",N,!0),e._itemControl!=="autocomplete"&&e._itemControl!=="lookup"){document.addEventListener("keydown",b,!0);let x=O().findIndex(k=>k.dataset.code===r);A(x>=0?x:0)}};return d.addEventListener("click",H),d.addEventListener("keydown",m=>{_||(m.key==="Enter"||m.key===" "||m.key==="ArrowDown"||m.key==="ArrowUp")&&(m.preventDefault(),H())}),l.appendChild(d),l}},mt=class extends Q{constructor(t={}){super(t),this.itemType="radio"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx);if(!r.length){let d=document.createElement("span");return d.className="radio-no-opts",d.textContent="(no options)",l.appendChild(d),l}e._columnCount>1?(l.classList.add("ctrl-wrap--columns"),l.style.setProperty("--col-count",e._columnCount)):e._choiceOrientation==="vertical"?l.classList.add("ctrl-wrap--vertical"):e._choiceOrientation==="horizontal"&&l.classList.add("ctrl-wrap--horizontal");let c="radio_"+e.id;if(e._itemControl==="atable")return l.appendChild(ln(r,d=>{let u=document.createElement("input");return u.type="radio",u.name=c,u.value=d,u.checked=i(e.id)===d,u.onchange=()=>{u.checked&&(s(e.id,d),o(),a(),I.notifyChanged(t.bus))},u})),l;for(let{code:d,display:u}of r){let f=document.createElement("label");f.className="radio-label";let h=document.createElement("input");if(h.type="radio",h.name=c,h.value=d,h.checked=i(e.id)===d,h.onchange=()=>{h.checked&&(s(e.id,d),o(),a(),I.notifyChanged(t.bus))},f.appendChild(h),e._optionPrefixes&&e._optionPrefixes[d]!==void 0){let _=document.createElement("span");_.className="option-prefix",_.textContent=e._optionPrefixes[d]+"\xA0",f.appendChild(_)}if(f.appendChild(document.createTextNode(u)),e._optionOrdinals&&e._optionOrdinals[d]!==void 0){let _=document.createElement("span");_.className="option-ordinal",_.textContent="\xA0("+e._optionOrdinals[d]+")",f.appendChild(_)}ft(f,e,d),l.appendChild(f)}return l}},gt=class extends Q{constructor(t={}){super(t),this.itemType="open-choice"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx),c=document.createElement("div");c.className="oc-wrap";let d=document.createElement("input");d.type="text",d.className="oc-input",d.placeholder=e._openLabel||"Choose or type\u2026",d.value=i(e.id)!==void 0?i(e.id):"",d.autocomplete="off";let u=e._answerConstraint==="optionsOnly";u&&(d.readOnly=!0,d.placeholder=e._openLabel||"Choose\u2026",d.classList.add("choice-open-readonly"));let f=document.createElement("button");f.type="button",f.className="oc-btn",f.innerHTML="▾",f.dataset.tipTitle="Show options",c.appendChild(d),c.appendChild(f);let h=null,_=!1,v=()=>{h&&(h.remove(),h=null),_=!1,document.removeEventListener("mousedown",C,!0)},C=D=>{!c.contains(D.target)&&!h?.contains(D.target)&&v()},T=D=>{d.value=D,s(e.id,D),o(),a(),I.notifyChanged(t.bus),v(),d.focus()},N=(D="")=>{h&&h.remove();let O=D.toLowerCase(),A=O?r.filter(({display:b,code:P})=>(b||P).toLowerCase().includes(O)):r;if(!A.length){_=!1;return}h=document.createElement("div"),h.className="oc-drop";for(let{display:b,code:P}of A){let y=b||P,R=document.createElement("div");R.className="oc-opt",R.textContent=y,y===d.value&&R.classList.add("oc-opt--sel"),R.addEventListener("mousedown",S=>{S.preventDefault(),T(y)}),h.appendChild(R)}document.body.appendChild(h),_=!0,wi(h,c,d),document.addEventListener("mousedown",C,!0)};return d.addEventListener("input",()=>{u||(s(e.id,d.value),o(),a(),N(d.value))}),d.addEventListener("change",()=>{I.notifyChanged(t.bus)}),d.addEventListener("focus",()=>{r.length&&N(d.value)}),d.addEventListener("keydown",D=>{D.key==="Escape"&&v()}),f.addEventListener("click",D=>{D.stopPropagation(),_?v():(d.focus(),N(d.value))}),l.appendChild(c),l}},_t=class extends Q{constructor(t={}){super(t),this.itemType="checklist",this.repeats=!0}supportsRepeat(){return!1}impliesRepeats(){return!0}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=Qe(e,t._fpCtx);if(!r.length){let _=document.createElement("span");return _.className="radio-no-opts",_.textContent="(no options)",l.appendChild(_),l}e._columnCount>1?(l.classList.add("ctrl-wrap--columns"),l.style.setProperty("--col-count",e._columnCount)):e._choiceOrientation==="horizontal"?l.classList.add("ctrl-wrap--horizontal"):l.classList.add("ctrl-wrap--vertical");let c=()=>{let _=i(e.id);return!_||_===""?new Set:new Set(String(_).split(","))},d=_=>[..._].join(","),u=e._optionExclusives||{},f=[],h=_=>{let v=document.createElement("input");return v.type="checkbox",v.value=_,v.checked=c().has(_),f.push(v),v.onchange=()=>{let C=c();if(v.checked)if(u[_]){C.clear(),C.add(_);for(let N of f)N.checked=N.value===_}else{C.add(_);for(let N of Object.keys(u))C.delete(N);for(let N of f)u[N.value]&&(N.checked=!1)}else C.delete(_);let T=d(C);s(e.id,T||void 0),o(),a(),I.notifyChanged(t.bus)},v};if(e._itemControl==="atable")return l.appendChild(ln(r,h)),l;for(let{code:_,display:v}of r){let C=document.createElement("label");C.className="radio-label";let T=h(_);if(C.appendChild(T),e._optionPrefixes&&e._optionPrefixes[_]!==void 0){let N=document.createElement("span");N.className="option-prefix",N.textContent=e._optionPrefixes[_]+"\xA0",C.appendChild(N)}if(C.appendChild(document.createTextNode(v)),e._optionOrdinals&&e._optionOrdinals[_]!==void 0){let N=document.createElement("span");N.className="option-ordinal",N.textContent="\xA0("+e._optionOrdinals[_]+")",C.appendChild(N)}ft(C,e,_),l.appendChild(C)}return l}};W.set("select",ht);W.set("radio",mt);W.set("checklist",_t);W.set("open-choice",gt);var Si=["January","February","March","April","May","June","July","August","September","October","November","December"],Qs=["Su","Mo","Tu","We","Th","Fr","Sa"];function dn(n){if(!n||n.length<10)return null;let t=parseInt(n.slice(0,4),10),e=parseInt(n.slice(5,7),10)-1,i=parseInt(n.slice(8,10),10),s=n.length>=16&&parseInt(n.slice(11,13),10)||0,a=n.length>=16&&parseInt(n.slice(14,16),10)||0;return isNaN(t)||isNaN(e)||isNaN(i)?null:{y:t,m:e,d:i,h:s,min:a}}function cn(n,t,e){return`${n}-${String(t+1).padStart(2,"0")}-${String(e).padStart(2,"0")}`}function Ys(n,t){let e=dn(n);if(!e)return"";let i=`${e.d} ${Si[e.m]} ${e.y}`;return t?`${i} \xB7 ${String(e.h).padStart(2,"0")}:${String(e.min).padStart(2,"0")}`:i}function un({value:n="",onChange:t,className:e="",testid:i,placeholder:s,withTime:a=!1}={}){let o=s||(a?"\u2014 date & time \u2014":"\u2014 date \u2014"),l=n,r=t||null,c=document.createElement("div");c.className="sc-trigger dp-trigger"+(e?" "+e:""),c.tabIndex=0,i&&(c.dataset.testid=i);let d=document.createElement("span");d.className="sc-trigger-text",c.appendChild(d);let u=()=>{let S=Ys(l,a);d.textContent=S||o,c.classList.toggle("sc-trigger--empty",!S),c.dataset.value=l};u();let f=null,h=0,_=0,v=null,C=null,T=null,N=0,D=0,O=()=>{f&&(f.remove(),f=null),document.removeEventListener("mousedown",A,!0),document.removeEventListener("keydown",b,!0)},A=S=>{!c.contains(S.target)&&!f?.contains(S.target)&&O()},b=S=>{S.key==="Escape"&&(O(),c.focus())},P=()=>{if(f){O();return}let S=dn(l),L=new Date;h=S?S.y:L.getFullYear(),_=S?S.m:L.getMonth(),v=S?S.y:null,C=S?S.m:null,T=S?S.d:null,N=S?S.h:0,D=S?S.min:0,f=document.createElement("div"),f.className="dp-cal"+(a?" dp-cal--dt":""),document.body.appendChild(f),R(),y(),document.addEventListener("mousedown",A,!0),document.addEventListener("keydown",b,!0)},y=()=>{if(!f)return;let S=c.getBoundingClientRect();f.style.left=S.left+"px";let L=f.offsetHeight;S.bottom+L+4<=window.innerHeight?f.style.top=S.bottom+2+"px":f.style.top=Math.max(4,S.top-L-2)+"px"},R=()=>{f.innerHTML="";let S=h,L=_,H=new Date,m=H.getFullYear(),x=H.getMonth(),k=H.getDate(),$=a?v!==null?{y:v,m:C,d:T}:null:dn(l),q=document.createElement("div");q.className="dp-hdr";let z=document.createElement("button");z.type="button",z.className="dp-nav-btn",z.textContent="\u2039",z.addEventListener("mousedown",G=>{G.preventDefault(),_===0?(_=11,h--):_--,R()});let K=document.createElement("span");K.className="dp-month-lbl",K.textContent=`${Si[L]} ${S}`;let U=document.createElement("button");U.type="button",U.className="dp-nav-btn",U.textContent="\u203A",U.addEventListener("mousedown",G=>{G.preventDefault(),_===11?(_=0,h++):_++,R()}),q.append(z,K,U),f.appendChild(q);let j=document.createElement("div");j.className="dp-grid";for(let G of Qs){let F=document.createElement("div");F.className="dp-dn",F.textContent=G,j.appendChild(F)}f.appendChild(j);let se=document.createElement("div");se.className="dp-grid";let le=new Date(S,L,1).getDay(),Te=new Date(S,L+1,0).getDate();for(let G=0;G<le;G++){let F=document.createElement("div");F.className="dp-day dp-day--blank",se.appendChild(F)}for(let G=1;G<=Te;G++){let F=document.createElement("div"),g=S===m&&L===x&&G===k,E=$&&S===$.y&&L===$.m&&G===$.d;F.className="dp-day"+(g?" dp-day--today":"")+(E?" dp-day--sel":""),F.textContent=G;let M=S,V=L,ie=G;F.addEventListener("mousedown",et=>{et.preventDefault(),a?(v=M,C=V,T=ie,R()):(l=cn(M,V,ie),u(),r&&r(l),O(),c.focus())}),se.appendChild(F)}f.appendChild(se);let ge=document.createElement("div");if(ge.className="dp-footer",a){let G=document.createElement("div");G.className="dp-time-row";let F=document.createElement("input");F.type="number",F.min="0",F.max="23",F.step="1",F.className="dp-time-inp",F.value=String(N).padStart(2,"0"),F.addEventListener("mousedown",ie=>ie.stopPropagation()),F.addEventListener("input",()=>{N=Math.min(23,Math.max(0,parseInt(F.value,10)||0))}),F.addEventListener("blur",()=>{F.value=String(N).padStart(2,"0")});let g=document.createElement("span");g.className="dp-time-sep",g.textContent=":";let E=document.createElement("input");E.type="number",E.min="0",E.max="59",E.step="1",E.className="dp-time-inp",E.value=String(D).padStart(2,"0"),E.addEventListener("mousedown",ie=>ie.stopPropagation()),E.addEventListener("input",()=>{D=Math.min(59,Math.max(0,parseInt(E.value,10)||0))}),E.addEventListener("blur",()=>{E.value=String(D).padStart(2,"0")}),G.append(F,g,E),ge.appendChild(G);let M=document.createElement("button");M.type="button",M.className="dp-footer-btn dp-footer-btn--set",M.textContent="Set",M.disabled=v===null,M.addEventListener("mousedown",ie=>{ie.preventDefault(),v!==null&&(l=`${cn(v,C,T)}T${String(N).padStart(2,"0")}:${String(D).padStart(2,"0")}:00`,u(),r&&r(l),O(),c.focus())});let V=document.createElement("button");V.type="button",V.className="dp-footer-btn dp-footer-btn--clear",V.textContent="Clear",V.addEventListener("mousedown",ie=>{ie.preventDefault(),l="",u(),r&&r(""),O(),c.focus()}),ge.append(M,V)}else{let G=document.createElement("button");G.type="button",G.className="dp-footer-btn",G.textContent="Today",G.addEventListener("mousedown",g=>{g.preventDefault(),l=cn(m,x,k),u(),r&&r(l),O(),c.focus()});let F=document.createElement("button");F.type="button",F.className="dp-footer-btn dp-footer-btn--clear",F.textContent="Clear",F.addEventListener("mousedown",g=>{g.preventDefault(),l="",u(),r&&r(""),O(),c.focus()}),ge.append(G,F)}f.appendChild(ge),setTimeout(y,0)};return c.addEventListener("click",P),c.addEventListener("keydown",S=>{(S.key==="Enter"||S.key===" ")&&(S.preventDefault(),P()),S.key==="Escape"&&O()}),c._dpSetValue=S=>{l=S||"",u(),r&&r(l)},{el:c,getValue(){return l},setValue(S){l=S||"",u()}}}var vt=class extends Q{constructor(t={}){super(t),this.itemType="date"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=un({value:i(e.id)||"",onChange:c=>{s(e.id,c||void 0),o(),a(),I.notifyChanged(t.bus)},className:"ctrl-input--date",testid:"date-input"});return l.appendChild(r.el),l}},yt=class extends Q{constructor(t={}){super(t),this.itemType="dateTime"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=un({value:i(e.id)||"",onChange:c=>{s(e.id,c||void 0),o(),a(),I.notifyChanged(t.bus)},withTime:!0,className:"ctrl-input--date",testid:"datetime-input"});return l.appendChild(r.el),l}},xt=class extends Q{constructor(t={}){super(t),this.itemType="time"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("input");r.type="time",r.className="ctrl-input ctrl-input--time",r.dataset.testid="time-input";let c=i(e.id);return r.value=c?String(c).slice(0,5):"",r.addEventListener("change",()=>{let d=r.value;s(e.id,d?d+":00":void 0),o(),a(),I.notifyChanged(t.bus)}),l.appendChild(r),l}};W.set("date",vt);W.set("dateTime",yt);W.set("time",xt);var Js=[{label:"Yes",value:!0},{label:"No",value:!1},{label:"Not Answered",value:void 0}],bt=class extends Q{constructor(t={}){super(t),this.itemType="checkbox"}supportsRepeat(){return!1}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("div");r.className="bool-seg",r.setAttribute("role","group"),r.setAttribute("aria-label",e.text||"Yes/No question");let c=i(e.id);for(let d of Js){let u=document.createElement("button");u.type="button",u.className="bool-seg__btn",u.textContent=d.label;let f=d.value===c;u.classList.toggle("bool-seg__btn--active",f),u.setAttribute("aria-pressed",String(f)),u.addEventListener("click",()=>{r.querySelectorAll(".bool-seg__btn").forEach(h=>{h.classList.remove("bool-seg__btn--active"),h.setAttribute("aria-pressed","false")}),u.classList.add("bool-seg__btn--active"),u.setAttribute("aria-pressed","true"),s(e.id,d.value),o(),a(),I.notifyChanged(t.bus)}),r.appendChild(u)}return l.appendChild(r),l}};W.set("checkbox",bt);var Et=class extends Q{constructor(t={}){super(t),this.itemType="url"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.className="ctrl-wrap ctrl-wrap--text";let r=document.createElement("textarea");r.className="ctrl-input--text",r.rows=1,r.placeholder=e._entryFormat||"https://",r.value=i(e.id)!==void 0?i(e.id):"";let c=()=>{r.style.height="auto",r.style.height=r.scrollHeight+"px"},d=C=>{try{return new URL(C),!0}catch{return!1}};e._maxLength&&(r.maxLength=e._maxLength),e._minLength&&(r.minLength=e._minLength);let u=document.createElement("span");u.className="ctrl-err ctrl-err--ml",u.textContent="Invalid URL",u.style.display="none";let f=(()=>{if(!e._regex)return null;try{return new RegExp(e._regex)}catch{return null}})(),h=()=>{e._minLength&&r.value.length>0&&r.value.length<e._minLength?(u.textContent="Min\xA0"+e._minLength+"\xA0chars",u.style.display="inline"):f&&r.value.length>0&&!f.test(r.value)?(u.textContent="Does not match pattern",u.style.display="inline"):(u.textContent="Invalid URL",u.style.display=r.value===""||d(r.value)?"none":"inline")};(e._interacted||r.value&&!d(r.value))&&h();let _=null;if(e._maxLength){_=document.createElement("span"),_.className="ctrl-char-counter",_.dataset.testid="char-counter";let C=()=>{_.textContent=r.value.length+"\xA0/\xA0"+e._maxLength};C(),r.addEventListener("input",C)}let v=null;return r.oninput=()=>{s(e.id,r.value),c(),clearTimeout(v),v=setTimeout(()=>{o(),a()},200)},r.onchange=()=>{I.notifyChanged(t.bus)},r.addEventListener("blur",()=>{e._interacted=!0,h()}),l.appendChild(r),l.appendChild(u),_&&l.appendChild(_),r.value&&requestAnimationFrame(c),l}};W.set("url",Et);var Ct=class extends Q{constructor(t={}){super(t),this.itemType="attachment"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=document.createElement("input");r.type="file",r.className="file-input-hidden",e._mimeTypes&&e._mimeTypes.length&&(r.accept=e._mimeTypes.join(","));let c=document.createElement("button");c.type="button",c.className="btn-file",c.textContent="Choose file",c.onclick=()=>r.click();let d=document.createElement("span");d.className="file-name-tag",d.textContent=i(e.id)?i(e.id).name:"No file chosen";let u=document.createElement("span");u.className="file-size-hint",e._maxFileSizeMB!==void 0&&(u.textContent=`Max ${e._maxFileSizeMB} MB`);let f=document.createElement("span");return f.className="file-size-hint",f.dataset.testid="mime-hint",e._mimeTypes&&e._mimeTypes.length&&(f.textContent=e._mimeTypes.join(", ")),r.onchange=()=>{let h=r.files[0]||null;if(h&&e._maxFileSizeMB!==void 0&&h.size>e._maxFileSizeMB*1024*1024){_e(`File too large \u2014 max ${e._maxFileSizeMB} MB allowed`),r.value="",s(e.id,null),o(),a(),I.notifyChanged(t.bus);return}d.classList.remove("file-name-tag--error"),s(e.id,h?{name:h.name,size:h.size,type:h.type}:null),d.textContent=h?h.name:"No file chosen",o(),a(),I.notifyChanged(t.bus)},l.appendChild(r),l.appendChild(c),l.appendChild(d),e._maxFileSizeMB!==void 0&&l.appendChild(u),e._mimeTypes&&e._mimeTypes.length&&l.appendChild(f),l}};W.set("attachment",Ct);function wt({items:n=[],value:t="",onChange:e,className:i="",testid:s,searchable:a,ariaLabel:o}={}){let l=n.slice(),r=t,c=e||null,d=-1,u=rt("csel"),f=document.createElement("div");f.className="sc-trigger"+(i?" "+i:""),f.tabIndex=0,f.setAttribute("role","combobox"),f.setAttribute("aria-haspopup","listbox"),f.setAttribute("aria-expanded","false"),o&&f.setAttribute("aria-label",o),s&&(f.dataset.testid=s);let h=document.createElement("span");h.className="sc-trigger-text",f.appendChild(h);let _=()=>{let R=l.find(S=>S.value===r);h.textContent=R?R.label:"\u2014 "+(r||"select")+" \u2014",f.classList.toggle("sc-trigger--empty",!R),f.dataset.value=r};_();let v=null,C=()=>{v&&(v.remove(),v=null),d=-1,f.setAttribute("aria-expanded","false"),f.removeAttribute("aria-activedescendant"),document.removeEventListener("mousedown",T,!0),document.removeEventListener("keydown",O,!0)},T=R=>{!f.contains(R.target)&&!v?.contains(R.target)&&C()},N=()=>v?[...v.querySelectorAll(".oc-opt")].filter(R=>R.style.display!=="none"):[],D=R=>{let S=N();if(!S.length)return;d=Math.max(0,Math.min(R,S.length-1)),S.forEach((H,m)=>H.classList.toggle("oc-opt--active",m===d));let L=S[d];f.setAttribute("aria-activedescendant",L.id),L.scrollIntoView({block:"nearest"})},O=R=>{if(R.key==="Escape"){C(),f.focus();return}let S=N();if(S.length){if(R.key==="ArrowDown")R.preventDefault(),D(d+1);else if(R.key==="ArrowUp")R.preventDefault(),D(d-1);else if(R.key==="Home")R.preventDefault(),D(0);else if(R.key==="End")R.preventDefault(),D(S.length-1);else if(R.key==="Enter"){R.preventDefault();let L=S[d]||S[0],H=l.find(m=>m.value===L.dataset.val);H&&A(H)}}},A=R=>{r=R.value,_(),c&&c(R.value,R),C(),f.focus()},b=()=>{if(v){C();return}let R=a!==void 0?a:l.length>8;v=document.createElement("div"),v.className="oc-drop csel-drop",v.dataset.testid="csel-drop",v.id=u+"-list",v.setAttribute("role","listbox"),f.setAttribute("aria-controls",v.id),f.setAttribute("aria-expanded","true");let S=()=>{let H=N().findIndex(m=>m.dataset.val===r);D(H>=0?H:0)};if(R){let L=document.createElement("input");L.type="text",L.className="vis-q-sel-search",L.placeholder="Search\u2026",L.addEventListener("mousedown",m=>m.stopPropagation()),v.appendChild(L);let H=P(v);L.addEventListener("input",()=>{let m=L.value.toLowerCase();for(let x of H){let k=!m||x.dataset.val.toLowerCase().includes(m)||x.textContent.toLowerCase().includes(m);x.style.display=k?"":"none"}D(0)}),document.body.appendChild(v),y(),S(),document.addEventListener("mousedown",T,!0),document.addEventListener("keydown",O,!0),setTimeout(()=>L.focus(),0)}else P(v),document.body.appendChild(v),y(),S(),document.addEventListener("mousedown",T,!0),document.addEventListener("keydown",O,!0)},P=R=>{let S=[];return l.forEach((L,H)=>{let m=document.createElement("div");m.className="oc-opt"+(L.value===r?" oc-opt--sel":""),m.id=u+"-opt-"+H,m.setAttribute("role","option"),m.setAttribute("aria-selected",String(L.value===r)),m.textContent=L.label,m.dataset.val=L.value,L.title&&(m.dataset.tipTitle=L.title),m.addEventListener("mousedown",x=>{x.preventDefault(),A(L)}),R.appendChild(m),S.push(m)}),S},y=()=>{let R=f.getBoundingClientRect(),L=window.innerHeight-R.bottom-4,H=R.top-4,m=200;if(v.style.left=R.left+"px",v.style.minWidth=R.width+"px",L>=Math.min(m,H)){let x=Math.min(m,Math.max(L,60));v.style.maxHeight=x+"px",v.style.top=R.bottom+2+"px"}else{let x=Math.min(m,Math.max(H,60));v.style.maxHeight=x+"px",v.style.top=R.top-Math.min(x,v.offsetHeight||x)-2+"px"}};return f.addEventListener("click",b),f.addEventListener("keydown",R=>{R.key==="Enter"||R.key===" "||R.key==="ArrowDown"||R.key==="ArrowUp"?(R.preventDefault(),v||b()):R.key==="Escape"&&C()}),{el:f,getValue(){return r},setValue(R){if(r=R,_(),v)for(let S of v.querySelectorAll(".oc-opt")){let L=S.dataset.val===r;S.classList.toggle("oc-opt--sel",L),S.setAttribute("aria-selected",String(L))}},setOptions(R){l=R.slice();let S=r;l.find(L=>L.value===S)||(r=l[0]?.value??""),_(),v&&C()},setOnChange(R){c=R}}}var zs=["hapi.fhir.org","r4.smarthealthit.org","launch.smarthealthit.org","test.ahdis.ch","terminology.hl7.org"];function pn(n,t){let e=((t??de.get(Z.CORS_PROXY))||"").replace(/\/$/,"");if(!e)return n;try{let{hostname:i}=new URL(n);if(zs.includes(i))return n}catch{}return`${e}?url=${encodeURIComponent(n)}`}function Xs(n){let t=n.resourceType;if(["Patient","Practitioner","RelatedPerson","Person"].includes(t)){let e=n.name?.[0];if(e){let i=e.family||"",s=(e.given||[]).join(" ");return[i,s].filter(Boolean).join(", ")||e.text||n.id}}if(["Organization","Location","HealthcareService"].includes(t))return n.name||n.id;if(["Encounter","EpisodeOfCare"].includes(t)){let e=n.subject?.display||n.patient?.display||"",i=n.status?`[${n.status}]`:"",s=n.period?.start?.slice(0,10)||"";return[e,s,i].filter(Boolean).join(" ")||n.id}if(["Condition","Observation","Procedure"].includes(t)){let e=n.code?.coding?.[0]?.display||n.code?.text||"",i=n.subject?.display||"";return[e,i].filter(Boolean).join(" \u2014 ")||n.id}return n.name||n.title||n.id}function Ks(n){return["Patient","Practitioner","RelatedPerson","Person"].includes(n)||["Organization","Location","HealthcareService","Medication"].includes(n)?"name":["Encounter","EpisodeOfCare","Condition","Observation","Procedure","DiagnosticReport","MedicationRequest","ServiceRequest"].includes(n)?"patient.name":["Medication","Substance"].includes(n)?"code":"_id"}async function Ri(n,t,e=10,i={}){let s=((i.fhirBase??de.get(Z.FHIR_BASE))||"").replace(/\/$/,"");if(!s||!n||!t.trim())return[];let a=new URLSearchParams({_count:String(e)});a.set(Ks(n),t);let o=pn(`${s}/${n}?${a}`,i.corsProxy),l=await fetch(o,{headers:{Accept:"application/fhir+json"},signal:AbortSignal.timeout(6e3)});if(!l.ok){let c=`HTTP ${l.status}`;try{let u=(await l.json())?.issue?.[0]?.diagnostics;u&&(c+=" \u2014 "+u.substring(0,120))}catch{}throw new Error(c)}return((await l.json()).entry||[]).map(c=>({id:c.resource?.id||"",display:Xs(c.resource)})).filter(c=>c.id)}var St=new Set(["checkbox","text","number","date","dateTime","time","url","attachment","open-choice","decimal","integer","quantity","reference","radio","select","checklist"]),Zs=new Set(["text","number","date","dateTime","time","open-choice","decimal","integer","radio","select","checklist"]),ae=n=>n.mandatory===!0;function Ye(n,t,e,i){if(!n.constraint||!n.constraint.length||!t||!e)return!0;let s={resource:e,...i};for(let a of n.constraint)if(!(!a.expression||a.severity!=="error"))try{let o=t.evaluate(e,a.expression,s,re());if(!o||o.length===0||o[0]===!1)return!1}catch{return!1}return!0}function er(n){try{return new URL(n),!0}catch{return!1}}function fn(n,t){if(!t)return!1;let e=n&&typeof n=="object"?n.reference:"";if(!e)return!1;let i=String(e).split("/")[0];return!!i&&i!==t}function Re(n,t,e){if(e&&e.length){let i=t;t={get:s=>i.get(s,e)}}if(n._calculatedExpr&&n._readOnly)return n.itemType!=="checkbox"?!0:t.get(n.id)===!0;if(n.itemType==="reference"&&n.referenceResource&&fn(t.get(n.id),n.referenceResource))return!1;if(n.itemType==="checkbox"&&ae(n)){let i=t.get(n.id);return i===!0||i===!1}if(n.itemType==="url"){let i=t.get(n.id);if(!i||i==="")return!ae(n);if(!er(i))return!1;if(n._regex)try{if(!new RegExp(n._regex).test(i))return!1}catch{}return!0}if(n.itemType==="attachment"){let i=t.get(n.id);return i&&n._maxFileSizeMB!==void 0&&i.size>n._maxFileSizeMB*1024*1024?!1:ae(n)?i!=null:!0}if(n.itemType==="integer"||n.itemType==="decimal"||n.itemType==="number"){let i=t.get(n.id);if(i!==void 0&&i!==""&&i!==null){let s=Number(i);if(!isFinite(s)||n._minValue!==void 0&&s<Number(n._minValue)||n._maxValue!==void 0&&s>Number(n._maxValue))return!1;if(n._maxDecimalPlaces!==void 0){let a=String(i).split(".");if(a.length>1&&a[1].length>n._maxDecimalPlaces)return!1}}return ae(n)?i!==void 0&&i!==""&&i!==null:!0}if(n.mandatory===!1)return!0;if(n.itemType==="reference"){if(!ae(n))return!0;let i=t.get(n.id);return i!=null&&typeof i=="object"&&!!i.reference}if(n.itemType==="quantity"){if(!ae(n))return!0;let i=t.get(n.id);return i!=null&&typeof i=="object"&&i.value!==void 0&&!!i.unit}if(n._minLength){let i=t.get(n.id);if(i&&String(i).length>0&&String(i).length<n._minLength)return!1}if(n._regex){let i=t.get(n.id);if(i&&String(i).length>0)try{if(!new RegExp(n._regex).test(String(i)))return!1}catch{}}if(ae(n)&&Zs.has(n.itemType)){let i=t.get(n.id);return i!==void 0&&i!==""&&i!==null}return!0}var tr=["Account","ActivityDefinition","AdverseEvent","AllergyIntolerance","Appointment","AppointmentResponse","AuditEvent","Basic","Binary","BiologicallyDerivedProduct","BodyStructure","Bundle","CapabilityStatement","CarePlan","CareTeam","ChargeItem","ChargeItemDefinition","Claim","ClaimResponse","ClinicalImpression","CodeSystem","Communication","CommunicationRequest","CompartmentDefinition","Composition","ConceptMap","Condition","Consent","Contract","Coverage","CoverageEligibilityRequest","CoverageEligibilityResponse","DetectedIssue","Device","DeviceDefinition","DeviceMetric","DeviceRequest","DeviceUseStatement","DiagnosticReport","DocumentManifest","DocumentReference","Encounter","Endpoint","EnrollmentRequest","EnrollmentResponse","EpisodeOfCare","EventDefinition","ExplanationOfBenefit","FamilyMemberHistory","Flag","Goal","Group","GuidanceResponse","HealthcareService","ImagingStudy","Immunization","ImmunizationEvaluation","ImmunizationRecommendation","ImplementationGuide","InsurancePlan","Invoice","Library","Linkage","List","Location","Measure","MeasureReport","Media","Medication","MedicationAdministration","MedicationDispense","MedicationKnowledge","MedicationRequest","MedicationStatement","MessageDefinition","MessageHeader","MolecularSequence","NamingSystem","NutritionOrder","Observation","ObservationDefinition","OperationDefinition","OperationOutcome","Organization","OrganizationAffiliation","Parameters","Patient","PaymentNotice","PaymentReconciliation","Person","PlanDefinition","Practitioner","PractitionerRole","Procedure","Provenance","Questionnaire","QuestionnaireResponse","RelatedPerson","RequestGroup","ResearchStudy","ResearchSubject","RiskAssessment","Schedule","SearchParameter","ServiceRequest","Slot","Specimen","SpecimenDefinition","StructureDefinition","StructureMap","Subscription","Substance","SupplyDelivery","SupplyRequest","Task","TerminologyCapabilities","TestReport","TestScript","ValueSet","VerificationResult","VisionPrescription"],Rt=class extends Q{constructor(t={}){super(t),this.itemType="reference"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y();l.classList.add("ctrl-wrap--joined");let r=i(e.id),c=r&&r.reference||"",d=c.indexOf("/"),u=d>-1?c.slice(0,d):e.referenceResource||"",f=d>-1?c.slice(d+1):"",h=e.referenceResource?[{value:e.referenceResource,label:e.referenceResource}]:[{value:"",label:"\u2014 type \u2014"},...tr.map(A=>({value:A,label:A}))],_=wt({items:h,value:u||"",className:"ref-type-sel",onChange:()=>{O(),I.notifyChanged(t.bus)}}),v=document.createElement("span");v.textContent="/",v.className="ref-sep";let C=document.createElement("input");C.type="text",C.placeholder=t.fhirBase?"search or enter id":"id",C.value=f,C.className="ref-id-input";let T=document.createElement("span");T.className="ctrl-err ctrl-err--ml",T.textContent="id is required";let N=document.createElement("span");N.className="ctrl-err ctrl-err--ml",N.dataset.testid="ref-type-error",N.style.display="none";let D=()=>{let A=i(e.id),b=!!e.referenceResource&&fn(A,e.referenceResource);N.textContent=b?`Expected ${e.referenceResource}`:"",N.style.display=b?"inline":"none"},O=()=>{let A=_.getValue(),b=C.value.trim();T.style.display=A&&!b?"inline":"none",s(e.id,A&&b?{reference:A+"/"+b}:void 0),D(),o(),a()};if(C.oninput=O,C.onchange=()=>{I.notifyChanged(t.bus)},t.fhirBase){let A=document.createElement("div");A.className="ref-search-wrap";let b=document.createElement("div");b.className="ref-search-drop",b.style.display="none",document.body.appendChild(b);let P=()=>{let m=C.getBoundingClientRect(),x=240;b.style.position="fixed",b.style.top=m.bottom+4+"px",b.style.width=x+"px",b.style.maxHeight="220px";let k=m.right-x;b.style.left=Math.max(4,k)+"px"},y=null,R=()=>{b.style.display="none"},S=()=>{P(),b.style.display="block"},L=(m,x)=>{if(b.innerHTML="",m.length===0){let k=document.createElement("div");k.className="ref-search-empty",k.textContent=x.trim()?"No results":"Type to search\u2026",b.appendChild(k)}else m.forEach(k=>{let $=document.createElement("button");$.type="button",$.className="ref-search-item";let q=document.createElement("span");q.className="ref-search-name",q.textContent=k.display;let z=document.createElement("span");z.className="ref-search-id",z.textContent=k.id,$.append(q,z),$.addEventListener("mousedown",K=>{K.preventDefault(),C.value=k.id,O(),I.notifyChanged(t.bus),R()}),b.appendChild($)});S()},H=async m=>{let x=_.getValue();if(!x){R();return}let k=document.createElement("div");k.className="ref-search-empty",k.textContent="Searching\u2026",b.innerHTML="",b.appendChild(k),S();try{let $=await Ri(x,m,10,{fhirBase:t.fhirBase,corsProxy:t.corsProxy});L($,m)}catch($){let q=document.createElement("div");q.className="ref-search-empty ref-search-error",q.textContent=$.message||"Search failed",b.innerHTML="",b.appendChild(q)}};C.addEventListener("input",()=>{clearTimeout(y);let m=C.value.trim();if(!m){R();return}y=setTimeout(()=>H(m),350)}),C.addEventListener("focus",()=>{C.value.trim()&&H(C.value.trim())}),C.addEventListener("blur",()=>{setTimeout(R,150)}),e._ac?.signal&&e._ac.signal.addEventListener("abort",()=>{b.remove()},{once:!0}),A.appendChild(C),l.appendChild(_.el),l.appendChild(v),l.appendChild(A)}else l.appendChild(_.el),l.appendChild(v),l.appendChild(C);if(l.appendChild(T),l.appendChild(N),D(),e._referenceProfiles?.length){let A=document.createElement("span");A.className="ctrl-ref-info",A.textContent="Profile: "+e._referenceProfiles.join(", "),A.dataset.tipTitle="questionnaire-referenceProfile",A.dataset.tipBody=`Allowed profiles:
|
|
33
33
|
`+e._referenceProfiles.join(`
|
|
34
|
-
`),
|
|
35
|
-
`+e._referenceFilter,N.dataset.tipFhir="item.extension[questionnaire-referenceFilter].valueString",N.dataset.tipSpec="R4",l.appendChild(N)}return l}};W.set("reference",Rt);var tr=[{label:"\u2500\u2500 Mass \u2500\u2500",disabled:!0},{label:"kg",value:"kg"},{label:"g",value:"g"},{label:"lb",value:"[lb_av]"},{label:"oz",value:"[oz_av]"},{label:"mg",value:"mg"},{label:"\xB5g",value:"ug"},{label:"\u2500\u2500 Length \u2500\u2500",disabled:!0},{label:"cm",value:"cm"},{label:"m",value:"m"},{label:"mm",value:"mm"},{label:"in",value:"[in_i]"},{label:"ft",value:"[ft_i]"},{label:"\u2500\u2500 Volume \u2500\u2500",disabled:!0},{label:"mL",value:"mL"},{label:"L",value:"L"},{label:"dL",value:"dL"},{label:"\u2500\u2500 Temperature \u2500\u2500",disabled:!0},{label:"\xB0C",value:"Cel"},{label:"\xB0F",value:"[degF]"},{label:"\u2500\u2500 Pressure \u2500\u2500",disabled:!0},{label:"mmHg",value:"mm[Hg]"},{label:"kPa",value:"kPa"},{label:"\u2500\u2500 Indices \u2500\u2500",disabled:!0},{label:"kg/m\xB2",value:"kg/m2"},{label:"%",value:"%"},{label:"\u2500\u2500 Rates \u2500\u2500",disabled:!0},{label:"/min",value:"/min"},{label:"beats/min",value:"{beats}/min"},{label:"breaths/min",value:"{breaths}/min"},{label:"\u2500\u2500 Time \u2500\u2500",disabled:!0},{label:"min",value:"min"},{label:"h",value:"h"},{label:"d",value:"d"},{label:"wk",value:"wk"},{label:"mo",value:"mo"},{label:"a (year)",value:"a"},{label:"\u2500\u2500 Lab \u2500\u2500",disabled:!0},{label:"mg/dL",value:"mg/dL"},{label:"mmol/L",value:"mmol/L"},{label:"g/dL",value:"g/dL"},{label:"mEq/L",value:"meq/L"},{label:"IU/L",value:"U/L"},{label:"IU",value:"[iU]"}],Tt=class extends Q{constructor(t={}){super(t),this.itemType="quantity"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=i(e.id),c=r&&r.value!==void 0?r.value:"",u=e._unitOptions&&e._unitOptions.length||e._unitValueSet,d=r?r.unit||(u?"":e.quantityUnit)||"":u?"":e.quantityUnit||"",h=document.createElement("input");h.type="number",h.step="any",h.placeholder=e._entryFormat||"0",h.value=c,h.className="qty-num-input",h.dataset.testid="qty-num-input";let p;if(e._unitOptions&&e._unitOptions.length)p=[{value:"",label:"\u2014 unit \u2014"},...e._unitOptions.map(S=>({value:S.code,label:S.display||S.code}))];else if(e._unitValueSet){let S=e._unitVsCache||[];p=[{value:"",label:"\u2014 unit \u2014"},...S.map(D=>({value:D.code,label:D.display||D.code}))]}else p=[{value:"",label:"\u2014 unit \u2014"},...tr.filter(S=>!S.disabled).map(S=>({value:S.value,label:S.label}))];let y=wt({items:p,value:d||"",className:"qty-unit-sel",testid:"qty-unit-sel",onChange:()=>{R()}}),_=document.createElement("span");_.className="ctrl-err";let R=()=>{let S=h.value.trim(),D=y.getValue(),A=S!==""?parseFloat(S):void 0,O=A!==void 0&&!isNaN(A),N=!!D;O&&!N?(_.textContent="unit is required",_.style.display="inline"):!O&&N?(_.textContent="value is required",_.style.display="inline"):_.style.display="none",s(e.id,O&&N?{value:A,unit:D}:void 0),o(),a()};return h.oninput=R,h.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(h),l.appendChild(y.el),l.appendChild(_),l}};W.set("quantity",Tt);var nr='<svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7" fill="none" stroke="currentColor" stroke-width="1.4"/><circle cx="8" cy="4.7" r="1" fill="currentColor"/><rect x="7.15" y="6.9" width="1.7" height="5" rx="0.85" fill="currentColor"/></svg>',Nt=class extends Q{constructor(t={}){super(t),this.itemType="display"}buildControl(t){return Y()}supportsRepeat(){return!1}_initRowClass(t){this._displayCategory&&t.classList.add("lform-item--"+this._displayCategory)}_buildLabel(t,e){if(this._displayCategory==="help"){let a=document.createElement("span");a.className="display-help-wrap";let o=document.createElement("button");o.type="button",o.className="display-help-toggle",o.dataset.testid="display-help-toggle",o.textContent="? Help";let l=document.createElement("span");return l.className="display-help-content",l.dataset.testid="display-help-content",this._applyLabelContent(l,e),this._helpOpen&&(l.classList.add("display-help-content--open"),o.classList.add("display-help-toggle--open")),o.addEventListener("click",()=>{this._helpOpen=!this._helpOpen,l.classList.toggle("display-help-content--open",this._helpOpen),o.classList.toggle("display-help-toggle--open",this._helpOpen)}),a.append(o,l),a}let s=document.createElement("span");return this._applyLabelContent(s,e),s}_buildRowContent(t,e,i){if(this._initRowClass(t),this._itemControl==="flyover"){let l=document.createElement("span");l.className="display-flyover",l.dataset.testid="display-flyover",l.innerHTML=nr,l.dataset.tipTitle="Flyover",l.dataset.tipBody=this.title,t.appendChild(l),this._buildSupportLinks(t,i),this._buildVisHint(t,i);return}let s=this._displayCategory;if(s&&s!=="help"){let l=document.createElement("span");l.className="display-cat-icon display-cat-icon--"+s,l.dataset.testid="display-category-icon",l.textContent=s==="instructions"?"\u2139":"\u26A0",l.dataset.tipTitle=s==="instructions"?"Instructions":"Security notice",l.dataset.tipBody="questionnaire-displayCategory: "+s,l.dataset.tipFhir="item.extension[questionnaire-displayCategory].valueCodeableConcept.coding[0].code",l.dataset.tipSpec="R5",t.appendChild(l)}let a=this._buildLabel(e,i);this._renderStyle&&$e(a,this._renderStyle);let o=document.createElement("div");o.className="item-body",o.appendChild(a),this._buildSupportLinks(o,i),this._buildVisHint(o,i),t.appendChild(o)}};W.set("display",Nt);function Ri(n={}){return typeof n=="string"&&(n={title:n}),new ce({title:n.title||"New Group",...n})}function Ti(n,t={}){typeof t=="string"&&(t={title:t});let e=W.get(n)??je;return new e({title:t.title||"New Item",...t,itemType:n})}function Ai(n,t){let e=n._text?.extension;if(!e)return;let i=e.find(o=>o.url===f.renderingStyle);i&&(t._renderStyle=i.valueString||"");let s=e.find(o=>o.url===f.renderingXhtml);s&&(t._renderXhtml=s.valueString||"");let a=e.find(o=>o.url===f.renderingMarkdown);a&&(t._renderMarkdown=a.valueMarkdown||a.valueString||"")}function Ni(n,t,e){let i=Yt(n.type||"string"),a=(n.extension||[]).find(g=>g.url===f.itemControl)?.valueCodeableConcept?.coding?.[0]?.code;(i==="select"||i==="open-choice")&&(a==="radio-button"?i="radio":a==="check-box"&&(i="checklist"));let o=Ti(i,{id:n.linkId,title:n.text||n.linkId||"Item",mandatory:!!n.required});o.options=Jt(n.answerOption);let l=(n.extension||[]).some(g=>g.url===f.choiceColumn);n.answerOption&&(zt(n.answerOption)||l||ei(n.answerOption))&&(o._rawAnswerOptions=JSON.parse(JSON.stringify(n.answerOption))),a&&a!=="radio-button"&&a!=="check-box"&&(o._itemControl=a);let r={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===f.ordinalValue)||(g.valueCoding.extension||[]).find(V=>V.url===f.ordinalValue);M&&M.valueDecimal!==void 0&&E&&(r[E]=M.valueDecimal)}Object.keys(r).length&&(o._optionOrdinals=r);let c={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===f.optionPrefix);M?.valueString&&E&&(c[E]=M.valueString)}Object.keys(c).length&&(o._optionPrefixes=c);let u={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"";(g.extension||[]).find(V=>V.url===f.optionExclusive)?.valueBoolean&&E&&(u[E]=!0)}Object.keys(u).length&&(o._optionExclusives=u);let d={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===f.itemWeight)||(g.valueCoding.extension||[]).find(V=>V.url===f.itemWeight);M?.valueDecimal!==void 0&&E&&(d[E]=M.valueDecimal)}Object.keys(d).length&&(o._optionWeights=d);let h={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===f.answerMedia);M?.valueAttachment&&E&&(h[E]=M.valueAttachment)}if(Object.keys(h).length&&(o._answerMedias=h),lt(o,n,t),Kt(o,n),o.itemType==="reference"){let g=(n.extension||[]).find(V=>V.url===f.referenceResource);g&&g.valueCode&&(o.referenceResource=g.valueCode);let E=(n.extension||[]).find(V=>V.url===f.referenceFilter);E?.valueString&&(o._referenceFilter=E.valueString);let M=(n.extension||[]).filter(V=>V.url===f.referenceProfile);M.length&&(o._referenceProfiles=M.map(V=>V.valueCanonical).filter(Boolean))}if(o.itemType==="quantity"||o.itemType==="decimal"||o.itemType==="integer"){let g=(n.extension||[]).find(V=>V.url===f.unit);g?.valueCoding?.code&&(o.quantityUnit=g.valueCoding.code);let E=(n.extension||[]).find(V=>V.url===f.unitValueSet);E?.valueCanonical&&(o._unitValueSet=E.valueCanonical);let M=(n.extension||[]).filter(V=>V.url===f.unitOption);M.length&&(o._unitOptions=M.filter(V=>V.valueCoding).map(V=>({system:V.valueCoding.system,code:V.valueCoding.code,display:V.valueCoding.display})))}Ai(n,o);let p=(n.extension||[]).find(g=>g.url===f.calculatedExpression);p?.valueExpression&&(o._calculatedExpr=p.valueExpression.expression||"");let y=(n.extension||[]).find(g=>g.url===f.initialExpression);y?.valueExpression&&(o._initialExpr=y.valueExpression.expression||"");for(let{url:g,prop:E}of ot){let M=(n.extension||[]).find(V=>V.url===g);M?.valueExpression&&(o[E]=M.valueExpression.expression||"")}n.maxLength&&(o._maxLength=n.maxLength),n.answerConstraint&&(o._answerConstraint=n.answerConstraint);let _=(n.extension||[]).find(g=>g.url===Le);_?.valueCode&&(o._answerConstraint=_.valueCode);let R=(n.extension||[]).find(g=>g.url===f.minLength);R?.valueInteger!==void 0&&(o._minLength=R.valueInteger);let S=(n.extension||[]).find(g=>g.url===f.regex);S?.valueString&&(o._regex=S.valueString);let D=(n.extension||[]).find(g=>g.url===f.entryFormatSdc||g.url===f.entryFormat);D?.valueString&&(o._entryFormat=D.valueString);let A=(n.extension||[]).find(g=>g.url===f.choiceOrientation);A?.valueCode&&(o._choiceOrientation=A.valueCode);let O=(n.extension||[]).find(g=>g.url===f.columnCount);Number.isInteger(O?.valueInteger)&&O.valueInteger>1&&(o._columnCount=O.valueInteger);let N=(n.extension||[]).filter(g=>g.url===f.choiceColumn);if(N.length&&(o._choiceColumns=N.map(g=>{let E=g.extension||[],M={},V=E.find(be=>be.url==="path");V?.valueString&&(M.path=V.valueString);let ie=E.find(be=>be.url==="label");ie?.valueString&&(M.label=ie.valueString);let et=E.find(be=>be.url==="width");et?.valueQuantity&&(M.width=et.valueQuantity);let Vn=E.find(be=>be.url==="forDisplay");return Vn?.valueBoolean!==void 0&&(M.forDisplay=Vn.valueBoolean),M})),o.itemType==="display"){let E=(n.extension||[]).find(M=>M.url===f.displayCategory)?.valueCodeableConcept?.coding?.[0]?.code;E&&(o._displayCategory=E)}let b=(n.extension||[]).find(g=>g.url===f.minValue);if(b){let g=b.valueDecimal??b.valueInteger;g!==void 0&&(o._minValue=g)}let P=(n.extension||[]).find(g=>g.url===f.maxValue);if(P){let g=P.valueDecimal??P.valueInteger;g!==void 0&&(o._maxValue=g)}let v=(n.extension||[]).find(g=>g.url===f.minOccurs);v?.valueInteger!==void 0&&(o._minOccurs=v.valueInteger);let T=(n.extension||[]).find(g=>g.url===f.maxOccurs);T?.valueInteger!==void 0&&(o._maxOccurs=T.valueInteger);let w=(n.extension||[]).find(g=>g.url===f.maxDecimalPlaces);w?.valueInteger!==void 0&&(o._maxDecimalPlaces=w.valueInteger);let L=(n.extension||[]).find(g=>g.url===f.sliderStepValue);if(L){let g=L.valueDecimal??L.valueInteger;g!==void 0&&(o._sliderStep=g)}let H=(n.extension||[]).find(g=>g.url===f.maxSize);H?.valueDecimal!==void 0&&(o._maxFileSizeMB=H.valueDecimal);let m=(n.extension||[]).filter(g=>g.url===f.mimeType&&g.valueCode).map(g=>g.valueCode);m.length&&(o._mimeTypes=m);let x=(n.extension||[]).filter(g=>g.url===f.supportLink&&g.valueUri).map(g=>g.valueUri);x.length&&(o._supportLinks=x),(n.extension||[]).find(g=>g.url===f.hiddenSdc||g.url===f.hidden)?.valueBoolean===!0&&(o._hidden=!0),(n.extension||[]).find(g=>g.url===f.isSubject)?.valueBoolean===!0&&(o._isSubject=!0);let q=(n.extension||[]).find(g=>g.url===f.observationExtract);if(q&&(o._observationExtract=q.valueBoolean!==!1),o.itemType==="open-choice"){let g=(n.extension||[]).find(E=>E.url===f.openLabel);g?.valueString&&(o._openLabel=g.valueString)}let z=(n.extension||[]).find(g=>g.url===f.preferredTerminologyServer);z?.valueUrl&&(o._preferredTermServer=z.valueUrl);let K=(n.extension||[]).find(g=>g.url===f.shortText);K?.valueString&&(o._shortText=K.valueString);let U=(n.extension||[]).find(g=>g.url===f.designNote);U?.valueMarkdown?o._designNote=U.valueMarkdown:U?.valueString&&(o._designNote=U.valueString);let j=(n.extension||[]).find(g=>g.url===f.usageMode);j?.valueCode&&(o._usageMode=j.valueCode);let se=(n.extension||[]).filter(g=>g.url===f.signatureRequired);se.length&&(o._signatureRequired=se.filter(g=>g.valueCodeableConcept?.coding?.[0]).map(g=>{let E=g.valueCodeableConcept.coding[0];return{system:E.system||"",code:E.code||"",display:E.display||""}}));let le=(n.extension||[]).find(g=>g.url===f.itemMedia);le?.valueAttachment&&(o._itemMedia=le.valueAttachment),n.disabledDisplay&&(o._disabledDisplay=n.disabledDisplay);let Te=(n.extension||[]).find(g=>g.url===Oe);Te?.valueCode&&(o._disabledDisplay=Te.valueCode),o._readOnly=!!n.readOnly,(n.repeats||o.impliesRepeats())&&(o.repeats=!0),n.prefix&&(o._prefix=n.prefix),n.definition&&(o._definition=n.definition);let ge=(n.extension||[]).find(g=>g.url===f.baseType);ge?.valueCode&&(o._baseType=ge.valueCode);let G=(n.extension||[]).find(g=>g.url===f.fhirType);if(G?.valueCode&&(o._fhirType=G.valueCode),n.code&&n.code.length&&(o._codes=n.code),n.answerValueSet){o._answerValueSet=n.answerValueSet;let g=Zt(e,n.answerValueSet);g&&(o.options=g)}if(n.initial&&n.initial.length){let g=E=>{if(E.valueBoolean!==void 0)return E.valueBoolean;if(E.valueDecimal!==void 0)return String(E.valueDecimal);if(E.valueInteger!==void 0)return String(E.valueInteger);if(E.valueDate!==void 0)return E.valueDate;if(E.valueDateTime!==void 0)return E.valueDateTime;if(E.valueTime!==void 0)return E.valueTime;if(E.valueString!==void 0)return E.valueString;if(E.valueUri!==void 0)return E.valueUri;if(E.valueCoding)return E.valueCoding.code||E.valueCoding.display||"";if(E.valueReference)return typeof E.valueReference=="string"?{reference:E.valueReference}:E.valueReference;if(E.valueQuantity)return{value:E.valueQuantity.value!==void 0?String(E.valueQuantity.value):"",unit:E.valueQuantity.unit||""}};if(o.repeats&&n.initial.length>1){let E=n.initial.map(g).filter(M=>M!==void 0);o._initialValues=E,o._initialValue=E[0]}else{let E=g(n.initial[0]);E!==void 0&&(o._initialValue=E)}}for(let g of n.answerOption||[])if(g.initialSelected){let E;if(g.valueCoding?E=g.valueCoding.code||g.valueCoding.display||"":g.valueString!==void 0?E=g.valueString:g.valueInteger!==void 0&&(E=String(g.valueInteger)),E!==void 0){o._initialSelected=E,o._initialValue===void 0&&(o._initialValue=E);break}}let F=Qt(n);return F&&(o._unknownExtensions=F),o}function At(n,t,e){if((n.type||"string")==="group"){let s=Ri({id:n.linkId,title:n.text||n.linkId||"Group",mandatory:!!n.required});lt(s,n,t),Kt(s,n)&&(s.logicWithParent="OR"),n.repeats&&(s.repeats=!0);let o=(n.extension||[]).find(v=>v.url===f.minOccurs);o?.valueInteger!==void 0&&(s._minOccurs=o.valueInteger);let l=(n.extension||[]).find(v=>v.url===f.maxOccurs);l?.valueInteger!==void 0&&(s._maxOccurs=l.valueInteger),Ai(n,s),n.prefix&&(s._prefix=n.prefix),n.definition&&(s._definition=n.definition);let r=(n.extension||[]).find(v=>v.url===f.baseType);r?.valueCode&&(s._baseType=r.valueCode);let c=(n.extension||[]).find(v=>v.url===f.fhirType);c?.valueCode&&(s._fhirType=c.valueCode),n.code&&n.code.length&&(s._codes=n.code);let u=(n.extension||[]).filter(v=>v.url===f.supportLink&&v.valueUri).map(v=>v.valueUri);u.length&&(s._supportLinks=u),(n.extension||[]).find(v=>v.url===f.hiddenSdc||v.url===f.hidden)?.valueBoolean===!0&&(s._hidden=!0);let h=(n.extension||[]).find(v=>v.url===f.observationExtract);h&&(s._observationExtract=h.valueBoolean!==!1);let p=(n.extension||[]).find(v=>v.url===f.collapsible);p?.valueCode&&(s._collapsible=p.valueCode);let y=(n.extension||[]).find(v=>v.url===f.preferredTerminologyServer);y?.valueUrl&&(s._preferredTermServer=y.valueUrl);let _=(n.extension||[]).find(v=>v.url===f.shortText);_?.valueString&&(s._shortText=_.valueString);let R=(n.extension||[]).find(v=>v.url===f.designNote);R?.valueMarkdown?s._designNote=R.valueMarkdown:R?.valueString&&(s._designNote=R.valueString);let D=(n.extension||[]).find(v=>v.url===f.displayCategory)?.valueCodeableConcept?.coding?.[0]?.code;D&&(s._displayCategory=D);let O=(n.extension||[]).find(v=>v.url===f.itemControl)?.valueCodeableConcept?.coding?.[0]?.code;O&&(s._itemControl=O);let N=(n.extension||[]).find(v=>v.url===f.calculatedExpression);N?.valueExpression&&(s._calculatedExpr=N.valueExpression.expression||"");let b=(n.extension||[]).find(v=>v.url===f.initialExpression);b?.valueExpression&&(s._initialExpr=b.valueExpression.expression||"");let P=Qt(n);P&&(s._unknownExtensions=P);for(let v of n.item||[]){let T=At(v,t,e);T&&s.children.push(T)}return s}if((n.item||[]).length>0){let s=Ni(n,t,e);for(let a of n.item){let o=At(a,t,e);o&&s.children.push(o)}return s}return Ni(n,t,e)}function Li(n,t){for(let e of n){if(e.repeats&&e._initialValues&&e._initialValues.length>1){t.dispatch(C.ANSWER_SET,{id:e.id,value:e._initialValues[0]});for(let i=1;i<e._initialValues.length;i++)t.dispatch(C.ANSWER_SET,{id:e.id+"$$"+i,value:e._initialValues[i]});t.dispatch(C.ANSWER_SET,{id:e.id+"$$n",value:e._initialValues.length-1})}else e._initialValue!==void 0&&t.dispatch(C.ANSWER_SET,{id:e.id,value:e._initialValue});e.type==="group"&&Li(e.children,t)}}function Oi(n,t={}){let e=t.questDoc||pe.get(C.APP_CONTEXT_READY)?.questDoc,i=t.bus||X,{tree:s,meta:a,variables:o,contained:l}=e,r=n;if(typeof r=="string")try{r=JSON.parse(r)}catch(b){_e(`Invalid JSON:
|
|
36
|
-
`+b.message);return}if(!r||r.resourceType!=="Questionnaire"){_e('Not a FHIR Questionnaire resource (resourceType must be "Questionnaire").');return}r=zn(r),tt(s),i.dispatch(C.ANSWERS_CLEAR),e.rawFhir=r,e.translations??={};for(let b of Object.keys(e.translations))delete e.translations[b];Zn(),a.id=r.id||"",a.url=r.url||"",a.version=r.version||"",a.title=r.title||"",a.status=r.status||"draft",a.publisher=r.publisher||"",a.description=r.description||"",a.name=r.name||"",a.date=r.date||"",a.subjectType=Array.isArray(r.subjectType)&&r.subjectType.length?[...r.subjectType]:[],a.purpose=r.purpose||"",a.copyright=r.copyright||"",a.approvalDate=r.approvalDate||"",a.lastReviewDate=r.lastReviewDate||"",a.effectivePeriodStart=r.effectivePeriod?.start||"",a.effectivePeriodEnd=r.effectivePeriod?.end||"",a.experimental=r.experimental!==void 0?r.experimental:null,a.language=r.language||"",a._rawIdentifier=Array.isArray(r.identifier)?JSON.parse(JSON.stringify(r.identifier)):[],a._rawText=r.text&&r.text.status&&r.text.div?{status:r.text.status,div:r.text.div}:null,a._rawContact=Array.isArray(r.contact)?r.contact:null,a._rawUseContext=Array.isArray(r.useContext)?r.useContext:null,a._rawJurisdiction=Array.isArray(r.jurisdiction)?r.jurisdiction:null,a._rawCode=Array.isArray(r.code)?r.code:null,a.derivedFrom=Array.isArray(r.derivedFrom)?[...r.derivedFrom]:[],a._rawModifierExtension=Array.isArray(r.modifierExtension)&&r.modifierExtension.length?JSON.parse(JSON.stringify(r.modifierExtension)):[],a._metaVersionId=r.meta?.versionId||"",a._metaSource=r.meta?.source||"",a._metaLastUpdated=r.meta?.lastUpdated||"",a._rawMetaProfile=Array.isArray(r.meta?.profile)?[...r.meta.profile]:[],a._implicitRules=r.implicitRules||"",a._rawMetaTag=Array.isArray(r.meta?.tag)?JSON.parse(JSON.stringify(r.meta.tag)):[],a._rawMetaSecurity=Array.isArray(r.meta?.security)?JSON.parse(JSON.stringify(r.meta.security)):[];let c=f.variable,u=f.replaces,d=f.launchContext,h=f.artifactVersionAlgorithm,p=f.artifactCopyrightLabel,y=(r.extension||[]).find(b=>b.url===h);r.versionAlgorithmString!==void 0?(a._versionAlgorithmString=r.versionAlgorithmString,a._versionAlgorithmCoding=null):r.versionAlgorithmCoding?(a._versionAlgorithmCoding=JSON.parse(JSON.stringify(r.versionAlgorithmCoding)),a._versionAlgorithmString=""):y?.valueString!==void 0?(a._versionAlgorithmString=y.valueString,a._versionAlgorithmCoding=null):y?.valueCoding?(a._versionAlgorithmCoding=JSON.parse(JSON.stringify(y.valueCoding)),a._versionAlgorithmString=""):(a._versionAlgorithmString="",a._versionAlgorithmCoding=null);let _=(r.extension||[]).find(b=>b.url===p);if(a.copyrightLabel=r.copyrightLabel||_?.valueString||"",o.splice(0),l.splice(0),Array.isArray(r.contained))for(let b of r.contained)l.push(b);a.replaces=(r.extension||[]).filter(b=>b.url===u&&b.valueCanonical).map(b=>b.valueCanonical);for(let b of r.extension||[])b.url===c&&b.valueExpression&&o.push({name:b.valueExpression.name||"",expression:b.valueExpression.expression||""});let R=f.preferredTerminologyServer,S=(r.extension||[]).find(b=>b.url===R);a.preferredTermServer=S?.valueUrl||"";let D=f.signatureRequired,A=(r.extension||[]).filter(b=>b.url===D);a._signatureRequired=A.length?A.filter(b=>b.valueCodeableConcept?.coding?.[0]).map(b=>{let P=b.valueCodeableConcept.coding[0];return{system:P.system||"",code:P.code||"",display:P.display||""}}):[];let O=(r.extension||[]).filter(b=>b.url!==c&&b.url!==u&&b.url!==R&&b.url!==D&&b.url!==we&&b.url!==d&&b.url!==h&&b.url!==p);a._rawQuestExtensions=O.length?JSON.parse(JSON.stringify(O)):[];let N=(r.extension||[]).filter(b=>b.url===d);a.launchContexts=N.map(b=>{let P=b.extension||[],v=P.find(L=>L.url==="name"),T=P.find(L=>L.url==="type"),w=P.find(L=>L.url==="description");return{name:v?.valueCoding?.code||v?.valueId||"",type:T?.valueCode||"",description:w?.valueString||""}});try{let b=Xt(r.item);for(let P of r.item||[]){let v=At(P,b,r.contained);v&&s.push(v)}Li(s,i),ir(r,s,e.translations)}finally{i.dispatch(C.REINIT_FORM)}i.dispatch(C.BUILDER_RERENDER)}var fn=f.translation;function ir(n,t,e){let i=(n._title?.extension||[]).filter(r=>r.url===fn);for(let r of i){let c=(r.extension||[]).find(d=>d.url==="lang")?.valueCode,u=(r.extension||[]).find(d=>d.url==="content")?.valueString;!c||u==null||(Me(e,c),e[c].title=u)}function s(r){for(let c of r||[]){let u=(c._text?.extension||[]).filter(d=>d.url===fn);for(let d of u){let h=(d.extension||[]).find(y=>y.url==="lang")?.valueCode,p=(d.extension||[]).find(y=>y.url==="content")?.valueString;!h||p==null||(Me(e,h),e[h].items[c.linkId]=p)}for(let d of c.answerOption||[]){let h=d.valueCoding?.code||d.valueString||d.valueInteger?.toString();if(!h)continue;let p=(d._valueCoding?._display?.extension||[]).filter(y=>y.url===fn);for(let y of p){let _=(y.extension||[]).find(S=>S.url==="lang")?.valueCode,R=(y.extension||[]).find(S=>S.url==="content")?.valueString;!_||R==null||(Me(e,_),e[_].opts[c.linkId+"__"+h]=R)}}s(c.item)}}s(n.item);let a=te.uiTranslations;for(let r of(n.extension||[]).filter(c=>c.url===a)){let c=(r.extension||[]).find(d=>d.url==="lang")?.valueCode,u=(r.extension||[]).find(d=>d.url==="strings")?.valueString;if(!(!c||!u))try{let d=JSON.parse(u);Me(e,c),Object.assign(e[c].ui,d)}catch{}}let o=te.xhtmlTranslations;for(let r of(n.extension||[]).filter(c=>c.url===o)){let c=(r.extension||[]).find(d=>d.url==="lang")?.valueCode,u=(r.extension||[]).find(d=>d.url==="strings")?.valueString;if(!(!c||!u))try{let d=JSON.parse(u);Me(e,c),e[c].xhtml||(e[c].xhtml={}),Object.assign(e[c].xhtml,d)}catch{}}let l=te.markdownTranslations;for(let r of(n.extension||[]).filter(c=>c.url===l)){let c=(r.extension||[]).find(d=>d.url==="lang")?.valueCode,u=(r.extension||[]).find(d=>d.url==="strings")?.valueString;if(!(!c||!u))try{let d=JSON.parse(u);Me(e,c),Object.assign(e[c].markdown,d)}catch{}}}function Me(n,t){n[t]||(n[t]={title:"",items:{},opts:{},ui:{},xhtml:{},markdown:{}}),n[t].ui||(n[t].ui={}),n[t].xhtml||(n[t].xhtml={}),n[t].markdown||(n[t].markdown={})}function Di(n,t=new Set){for(let e of n)e.id&&t.add(e.id),e.children&&Di(e.children,t);return t}function hn(n,t={}){for(let e of n||[]){if(e.answer&&e.answer.length){let i=s=>{if(s.valueBoolean!==void 0)return s.valueBoolean;if(s.valueCoding!==void 0)return s.valueCoding.code;if(s.valueDecimal!==void 0)return s.valueDecimal;if(s.valueInteger!==void 0)return s.valueInteger;if(s.valueDate!==void 0)return s.valueDate;if(s.valueDateTime!==void 0)return s.valueDateTime;if(s.valueTime!==void 0)return s.valueTime;if(s.valueQuantity!==void 0)return{value:s.valueQuantity.value,unit:s.valueQuantity.unit||""};if(s.valueUri!==void 0)return s.valueUri;if(s.valueReference!==void 0)return{reference:s.valueReference.reference||""};if(s.valueString!==void 0)return s.valueString};t[e.linkId]=e.answer.map(i).filter(s=>s!==void 0),t[e.linkId].length===0&&delete t[e.linkId];for(let s of e.answer)s.item&&hn(s.item,t)}e.item&&hn(e.item,t)}return t}function ki(n,t=new Set){for(let e of n)e.itemType==="checklist"&&t.add(e.id),e.children&&ki(e.children,t);return t}function Lt(n,t,e){if(!n||n.resourceType!=="QuestionnaireResponse")return{ok:!1,error:"Not a QuestionnaireResponse (resourceType: "+(n?.resourceType??"unknown")+")"};let i=Di(e),s=hn(n.item||[]),a=[],o=0;for(let[r,c]of Object.entries(s))i.has(r)?(t[r]=c,o++):a.push(r);let l=ki(e);for(let r of l){let c=t[r];Array.isArray(c)&&c.length>1&&(t[r]=[c.filter(u=>u!==void 0).join(",")])}return{ok:!0,loaded:o,unmatched:a,questionnaire:n.questionnaire||"",meta:{status:n.status||"in-progress",subject:n.subject?.reference||"",author:n.author?.reference||"",id:n.id||"",language:n.language||"",metaVersionId:n.meta?.versionId||"",metaSource:n.meta?.source||"",metaProfile:(n.meta?.profile||[]).slice(),metaTag:(n.meta?.tag||[]).map(r=>({...r})),metaSecurity:(n.meta?.security||[]).map(r=>({...r}))}}}var mn=f.ordinalValue;function _n(n,t){let e=n.type||"string";if(e==="boolean")return{valueBoolean:t===!0};if(e==="date")return{valueDate:String(t)};if(e==="dateTime")return{valueDateTime:String(t)};if(e==="time")return{valueTime:String(t)};if(e==="choice"||e==="open-choice"){let i=String(t),s={code:i},a=(n.answerOption||[]).find(o=>o.valueCoding&&o.valueCoding.code===i||o.valueString!==void 0&&String(o.valueString)===i);if(a&&a.valueCoding){a.valueCoding.system&&(s.system=a.valueCoding.system),a.valueCoding.display&&(s.display=a.valueCoding.display);let o=(a.extension||[]).find(l=>l.url===mn)||(a.valueCoding.extension||[]).find(l=>l.url===mn);o!==void 0&&(s.extension=[{url:mn,valueDecimal:o.valueDecimal}])}return{valueCoding:s}}return e==="integer"?{valueInteger:parseInt(t,10)||0}:e==="decimal"?{valueDecimal:parseFloat(t)||0}:e==="quantity"?{valueQuantity:{value:parseFloat(t?.value)||0,unit:t?.unit||""}}:e==="url"?{valueUri:String(t)}:e==="reference"?{valueReference:{reference:String(t?.reference||"")}}:{valueString:String(t)}}function gn(n,t){let e={linkId:n.linkId},i=n.item||[],s=n.type||"string",a=t[n.linkId],o=a?a[0]:void 0;function l(){return(t[n.linkId]||[]).filter(c=>c!==void 0)}let r=c=>_n(n,c);if(s==="group")i.length>0&&(e.item=i.map(c=>gn(c,t)));else if(i.length>0){let c={};s==="boolean"?o!==void 0&&(c.valueBoolean=o===!0):(s==="string"||s==="text")&&o!==void 0&&(c.valueString=String(o)),c.item=i.map(u=>gn(u,t)),e.answer=[c]}else{let c=l();(s==="choice"||s==="open-choice")&&n.repeats&&c.length===1&&typeof c[0]=="string"&&c[0].includes(",")?e.answer=c[0].split(",").map(r):c.length>0&&(e.answer=c.map(r))}return e}function Je(n,t){return{resourceType:"QuestionnaireResponse",questionnaire:n.url||n.id||"",status:"in-progress",item:(n.item||[]).map(e=>gn(e,t))}}function sr(n){let t=new Set,e=new Set;if(!n||typeof n!="string")return{linkIds:[],vars:[]};let i=/linkId\s*=\s*(['"])(.*?)\1/g,s;for(;(s=i.exec(n))!==null;)s[2]&&t.add(s[2]);let a=/%(`[^`]+`|[A-Za-z_][A-Za-z0-9_]*)/g;for(;(s=a.exec(n))!==null;){let o=s[1];o.startsWith("`")&&o.endsWith("`")&&(o=o.slice(1,-1)),o!=="resource"&&o!=="context"&&e.add(o)}return{linkIds:[...t],vars:[...e]}}function Ii(n,t=[]){for(let e of n)t.push(e),e.children?.length&&Ii(e.children,t);return t}function vn(n,t=[]){let e=Ii(n||[]),i=e.map(d=>d.id),s=new Set(i),a=new Set((t||[]).map(d=>d&&d.name).filter(Boolean)),o=new Map;function l(d,h){for(let p of d)o.set(p.id,new Set(h)),p.children?.length&&l(p.children,[...h,p.id])}l(n||[],[]);let r=new Map,c=new Map;for(let d of i)r.set(d,new Set);let u=(d,h)=>{h!==d&&(o.get(d)?.has(h)||(s.has(h)?r.get(d).add(h):a.has(h)||(c.has(d)||c.set(d,new Set),c.get(d).add(h))))};for(let d of e){if(Array.isArray(d.enableWhen))for(let p of d.enableWhen)p&&p.question&&u(d.id,p.question);let h=[d.enableWhenExpression,d._calculatedExpr,d._initialExpr];for(let p of h){let{linkIds:y}=sr(p);for(let _ of y)u(d.id,_)}}return{edges:r,nodeIds:i,varNames:a,missing:c}}function rr(n){let{edges:t}=n,e=0,i=1,s=2,a=new Map;for(let c of t.keys())a.set(c,e);let o=[],l=[],r=c=>{a.set(c,i),l.push(c);for(let u of t.get(c)||[]){let d=a.get(u);if(d===i){let h=l.indexOf(u);h!==-1&&o.push([...l.slice(h),u])}else d===e&&r(u)}l.pop(),a.set(c,s)};for(let c of t.keys())a.get(c)===e&&r(c);return o}function yn(n){let{edges:t,nodeIds:e}=n,i=new Map,s=new Map;for(let c of e)i.set(c,(t.get(c)||new Set).size),s.set(c,[]);for(let c of e)for(let u of t.get(c)||[])s.has(u)&&s.get(u).push(c);let a=e.filter(c=>i.get(c)===0),o=[],l=new Set;for(;a.length;){let c=a.shift();o.push(c),l.add(c);for(let u of s.get(c)||[])i.set(u,i.get(u)-1),i.get(u)===0&&a.push(u)}let r=rr(n);if(o.length<e.length)for(let c of e)l.has(c)||o.push(c);return{order:o,cycles:r}}function En(n,t,e){let i={};for(let s of n)if(!(!s.name||!s.expression))try{let a=e.evaluate(t,s.expression,{resource:t,...i},re());i[s.name]=Array.isArray(a)&&a.length===1?a[0]:a}catch{}return i}function Cn(n,t=new Map){for(let e of n)t.set(e.id,e),e.children?.length&&Cn(e.children,t);return t}function xn(n,t=new Map){for(let e of n||[])if(e.linkId&&t.set(e.linkId,e),Array.isArray(e.item)&&xn(e.item,t),Array.isArray(e.answer))for(let i of e.answer)Array.isArray(i.item)&&xn(i.item,t);return t}function bn(n,t=new Map){for(let e of n||[])if(e.linkId&&t.set(e.linkId,e),Array.isArray(e.item)&&bn(e.item,t),Array.isArray(e.answer))for(let i of e.answer)Array.isArray(i.item)&&bn(i.item,t);return t}function ar(n,t){return n.itemType==="checkbox"?t[0]===!0||t[0]==="true":Array.isArray(t)?t.join(""):t[0]!==void 0?String(t[0]):""}function Vi(n,t=[]){return{nodeMap:Cn(n),order:yn(vn(n,t)).order}}function Mi(n,t,e,i,s={},a=null,o=null){let l={resource:t,...s},r=o?.nodeMap||Cn(n),c=o?.order||yn(vn(n,[])).order,u=a?xn(a.item):null,d=u?bn(t.item):null;for(let h of c){let p=r.get(h);if(!(!p||!(p._calculatedExpr&&p._readOnly)))try{let y=e.evaluate(t,p._calculatedExpr,l,re()),_=ar(p,y);if(i[p.id]=_,d&&u){let R=d.get(p.id),S=u.get(p.id);if(R&&S){let D=_n(S,_),A=R.answer?.[0]?.item;A&&(D.item=A),R.answer=[D]}}}catch{}}}function wn(n,t,e,i,s={}){let a={resource:t,...s};for(let o of n){if(o._initialExpr)try{let l=e.evaluate(t,o._initialExpr,a,re());o.itemType==="checkbox"?i[o.id]=l[0]===!0||l[0]==="true":i[o.id]=Array.isArray(l)?l.join(""):l[0]!==void 0?String(l[0]):""}catch{}o.children?.length&&wn(o.children,t,e,i,s)}}var or={disabledDisplay:Oe,answerConstraint:Le},Pi=f.artifactVersionAlgorithm,lr=f.artifactCopyrightLabel;function Ot(n){if(!n)return;let t=[];n.versionAlgorithmString!==void 0?(t.push({url:Pi,valueString:n.versionAlgorithmString}),delete n.versionAlgorithmString):n.versionAlgorithmCoding!==void 0&&(t.push({url:Pi,valueCoding:n.versionAlgorithmCoding}),delete n.versionAlgorithmCoding),n.copyrightLabel!==void 0&&(t.push({url:lr,valueString:n.copyrightLabel}),delete n.copyrightLabel),t.length&&(n.extension=[...n.extension||[],...t])}function Dt(n){n?.item&&Bi(n.item)}function Bi(n){if(Array.isArray(n))for(let t of n){for(let[e,i]of Object.entries(or))t[e]===void 0||t[e]===null||(t.extension=(t.extension||[]).filter(s=>s?.url!==i),t.extension.push({url:i,valueCode:t[e]}),delete t[e]);t.item&&Bi(t.item)}}fe.register({id:"R4",label:"FHIR R4 JSON (.json)",selectorLabel:"FHIR R4",isBuilderVersion:!0,metaVersion:"4.0.1",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return Dt(t),Ot(t),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"4.0.1"),t}});fe.register({id:"R4B",label:"FHIR R4B JSON (.json)",selectorLabel:"FHIR R4B",isBuilderVersion:!0,metaVersion:"4.3.0",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return Dt(t),Ot(t),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"4.3.0"),t}});function qi(n){if(Array.isArray(n))for(let t of n)t.type==="open-choice"?(t.type="coding",t.answerConstraint||(t.answerConstraint="optionsOrString")):t.type==="choice"&&(t.type="coding"),t.item&&qi(t.item)}fe.register({id:"R5",label:"FHIR R5 JSON (.json)",selectorLabel:"FHIR R5",isBuilderVersion:!0,metaVersion:"5.0.0",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return t.item&&qi(t.item),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"5.0.0"),t}});var cr={equal:"=","not-equal":"<>",exists:null,">":">",">=":">=","<":"<","<=":"<="};function Fi(n,t){if(!n||n.length===0)return"";let e=t==="any"?" OR ":" AND ",i=n.map(s=>{let a=`[${s.question}]`,o=s.operator||"equal",l=cr[o]??"=",r;return s.answerDecimal!==void 0?r=String(s.answerDecimal):s.answerInteger!==void 0?r=String(s.answerInteger):s.answerBoolean!==void 0?r=s.answerBoolean?"1":"0":s.answerCoding?.code!==void 0?r=`'${s.answerCoding.code}'`:s.answerString!==void 0?r=`'${s.answerString}'`:r="''",`${a} ${l} ${r}`});return i.length===1?i[0]:i.map(s=>`(${s})`).join(e)}var tc=te.redcapNs,nc=f.itemControl,ic=f.minValue,sc=f.maxValue,rc=f.calculatedExpression;var $i=te.redcapNs,ur=f.itemControl,dr=f.minValue,pr=f.maxValue,ji=f.calculatedExpression,Gi=["Variable / Field Name","Form Name","Section Header","Field Type","Field Label","Choices, Calculations, OR Slider Labels","Field Note","Text Validation Type OR Show Slider Number","Text Validation Min","Text Validation Max","Identifier?","Branching Logic (Show field only if...)","Required Field?","Custom Alignment","Question Number (surveys only)","Matrix Group Name","Matrix Ranking?","Field Annotation"];function ee(n,t){if(!n)return;let e=$i+t,i=n.find(s=>s.url===e);if(i){for(let s of Object.keys(i))if(s.startsWith("value"))return i[s]}}function It(n,t){return(n||[]).find(e=>e.url===t)}function Qi(n){let t=String(n??"");return t.includes(",")||t.includes('"')||t.includes(`
|
|
37
|
-
`)?'"'+t.replace(/"/g,'""')+'"':t}function
|
|
34
|
+
`),A.dataset.tipFhir="item.extension[questionnaire-referenceProfile].valueCanonical",A.dataset.tipSpec="R4",l.appendChild(A)}if(e._referenceFilter){let A=document.createElement("span");A.className="ctrl-ref-info",A.textContent="Filter: "+e._referenceFilter,A.dataset.tipTitle="questionnaire-referenceFilter",A.dataset.tipBody=`Server-side filter expression:
|
|
35
|
+
`+e._referenceFilter,A.dataset.tipFhir="item.extension[questionnaire-referenceFilter].valueString",A.dataset.tipSpec="R4",l.appendChild(A)}return l}};W.set("reference",Rt);var nr=[{label:"\u2500\u2500 Mass \u2500\u2500",disabled:!0},{label:"kg",value:"kg"},{label:"g",value:"g"},{label:"lb",value:"[lb_av]"},{label:"oz",value:"[oz_av]"},{label:"mg",value:"mg"},{label:"\xB5g",value:"ug"},{label:"\u2500\u2500 Length \u2500\u2500",disabled:!0},{label:"cm",value:"cm"},{label:"m",value:"m"},{label:"mm",value:"mm"},{label:"in",value:"[in_i]"},{label:"ft",value:"[ft_i]"},{label:"\u2500\u2500 Volume \u2500\u2500",disabled:!0},{label:"mL",value:"mL"},{label:"L",value:"L"},{label:"dL",value:"dL"},{label:"\u2500\u2500 Temperature \u2500\u2500",disabled:!0},{label:"\xB0C",value:"Cel"},{label:"\xB0F",value:"[degF]"},{label:"\u2500\u2500 Pressure \u2500\u2500",disabled:!0},{label:"mmHg",value:"mm[Hg]"},{label:"kPa",value:"kPa"},{label:"\u2500\u2500 Indices \u2500\u2500",disabled:!0},{label:"kg/m\xB2",value:"kg/m2"},{label:"%",value:"%"},{label:"\u2500\u2500 Rates \u2500\u2500",disabled:!0},{label:"/min",value:"/min"},{label:"beats/min",value:"{beats}/min"},{label:"breaths/min",value:"{breaths}/min"},{label:"\u2500\u2500 Time \u2500\u2500",disabled:!0},{label:"min",value:"min"},{label:"h",value:"h"},{label:"d",value:"d"},{label:"wk",value:"wk"},{label:"mo",value:"mo"},{label:"a (year)",value:"a"},{label:"\u2500\u2500 Lab \u2500\u2500",disabled:!0},{label:"mg/dL",value:"mg/dL"},{label:"mmol/L",value:"mmol/L"},{label:"g/dL",value:"g/dL"},{label:"mEq/L",value:"meq/L"},{label:"IU/L",value:"U/L"},{label:"IU",value:"[iU]"}],Tt=class extends Q{constructor(t={}){super(t),this.itemType="quantity"}buildControl(t){let e=this,{getValue:i,setValue:s,onChange:a,_reCalc:o}=t,l=Y(),r=i(e.id),c=r&&r.value!==void 0?r.value:"",d=e._unitOptions&&e._unitOptions.length||e._unitValueSet,u=r?r.unit||(d?"":e.quantityUnit)||"":d?"":e.quantityUnit||"",f=document.createElement("input");f.type="number",f.step="any",f.placeholder=e._entryFormat||"0",f.value=c,f.className="qty-num-input",f.dataset.testid="qty-num-input";let h;if(e._unitOptions&&e._unitOptions.length)h=[{value:"",label:"\u2014 unit \u2014"},...e._unitOptions.map(T=>({value:T.code,label:T.display||T.code}))];else if(e._unitValueSet){let T=e._unitVsCache||[];h=[{value:"",label:"\u2014 unit \u2014"},...T.map(N=>({value:N.code,label:N.display||N.code}))]}else h=[{value:"",label:"\u2014 unit \u2014"},...nr.filter(T=>!T.disabled).map(T=>({value:T.value,label:T.label}))];let _=wt({items:h,value:u||"",className:"qty-unit-sel",testid:"qty-unit-sel",onChange:()=>{C()}}),v=document.createElement("span");v.className="ctrl-err";let C=()=>{let T=f.value.trim(),N=_.getValue(),D=T!==""?parseFloat(T):void 0,O=D!==void 0&&!isNaN(D),A=!!N;O&&!A?(v.textContent="unit is required",v.style.display="inline"):!O&&A?(v.textContent="value is required",v.style.display="inline"):v.style.display="none",s(e.id,O&&A?{value:D,unit:N}:void 0),o(),a()};return f.oninput=C,f.onchange=()=>{I.notifyChanged(t.bus)},l.appendChild(f),l.appendChild(_.el),l.appendChild(v),l}};W.set("quantity",Tt);var ir='<svg viewBox="0 0 16 16" width="15" height="15" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7" fill="none" stroke="currentColor" stroke-width="1.4"/><circle cx="8" cy="4.7" r="1" fill="currentColor"/><rect x="7.15" y="6.9" width="1.7" height="5" rx="0.85" fill="currentColor"/></svg>',Nt=class extends Q{constructor(t={}){super(t),this.itemType="display"}buildControl(t){return Y()}supportsRepeat(){return!1}_initRowClass(t){this._displayCategory&&t.classList.add("lform-item--"+this._displayCategory)}_buildLabel(t,e){if(this._displayCategory==="help"){let a=document.createElement("span");a.className="display-help-wrap";let o=document.createElement("button");o.type="button",o.className="display-help-toggle",o.dataset.testid="display-help-toggle",o.textContent="? Help";let l=document.createElement("span");return l.className="display-help-content",l.dataset.testid="display-help-content",this._applyLabelContent(l,e),this._helpOpen&&(l.classList.add("display-help-content--open"),o.classList.add("display-help-toggle--open")),o.addEventListener("click",()=>{this._helpOpen=!this._helpOpen,l.classList.toggle("display-help-content--open",this._helpOpen),o.classList.toggle("display-help-toggle--open",this._helpOpen)}),a.append(o,l),a}let s=document.createElement("span");return this._applyLabelContent(s,e),s}_buildRowContent(t,e,i){if(this._initRowClass(t),this._itemControl==="flyover"){let l=document.createElement("span");l.className="display-flyover",l.dataset.testid="display-flyover",l.innerHTML=ir,l.dataset.tipTitle="Flyover",l.dataset.tipBody=this.title,t.appendChild(l),this._buildSupportLinks(t,i),this._buildVisHint(t,i);return}let s=this._displayCategory;if(s&&s!=="help"){let l=document.createElement("span");l.className="display-cat-icon display-cat-icon--"+s,l.dataset.testid="display-category-icon",l.textContent=s==="instructions"?"\u2139":"\u26A0",l.dataset.tipTitle=s==="instructions"?"Instructions":"Security notice",l.dataset.tipBody="questionnaire-displayCategory: "+s,l.dataset.tipFhir="item.extension[questionnaire-displayCategory].valueCodeableConcept.coding[0].code",l.dataset.tipSpec="R5",t.appendChild(l)}let a=this._buildLabel(e,i);this._renderStyle&&$e(a,this._renderStyle);let o=document.createElement("div");o.className="item-body",o.appendChild(a),this._buildSupportLinks(o,i),this._buildVisHint(o,i),t.appendChild(o)}};W.set("display",Nt);function Ti(n={}){return typeof n=="string"&&(n={title:n}),new ce({title:n.title||"New Group",...n})}function Ni(n,t={}){typeof t=="string"&&(t={title:t});let e=W.get(n)??je;return new e({title:t.title||"New Item",...t,itemType:n})}function Li(n,t){let e=n._text?.extension;if(!e)return;let i=e.find(o=>o.url===p.renderingStyle);i&&(t._renderStyle=i.valueString||"");let s=e.find(o=>o.url===p.renderingXhtml);s&&(t._renderXhtml=s.valueString||"");let a=e.find(o=>o.url===p.renderingMarkdown);a&&(t._renderMarkdown=a.valueMarkdown||a.valueString||"")}function Ai(n,t,e){let i=Yt(n.type||"string"),a=(n.extension||[]).find(g=>g.url===p.itemControl)?.valueCodeableConcept?.coding?.[0]?.code;(i==="select"||i==="open-choice")&&(a==="radio-button"?i="radio":a==="check-box"?i="checklist":a==="atable"&&(i=n.repeats?"checklist":"radio"));let o=Ni(i,{id:n.linkId,title:n.text||n.linkId||"Item",mandatory:!!n.required});o.options=Jt(n.answerOption);let l=(n.extension||[]).some(g=>g.url===p.choiceColumn);n.answerOption&&(zt(n.answerOption)||l||ti(n.answerOption))&&(o._rawAnswerOptions=JSON.parse(JSON.stringify(n.answerOption))),a&&a!=="radio-button"&&a!=="check-box"&&(o._itemControl=a);let r={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===p.ordinalValue)||(g.valueCoding.extension||[]).find(V=>V.url===p.ordinalValue);M&&M.valueDecimal!==void 0&&E&&(r[E]=M.valueDecimal)}Object.keys(r).length&&(o._optionOrdinals=r);let c={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===p.optionPrefix);M?.valueString&&E&&(c[E]=M.valueString)}Object.keys(c).length&&(o._optionPrefixes=c);let d={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"";(g.extension||[]).find(V=>V.url===p.optionExclusive)?.valueBoolean&&E&&(d[E]=!0)}Object.keys(d).length&&(o._optionExclusives=d);let u={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===p.itemWeight)||(g.valueCoding.extension||[]).find(V=>V.url===p.itemWeight);M?.valueDecimal!==void 0&&E&&(u[E]=M.valueDecimal)}Object.keys(u).length&&(o._optionWeights=u);let f={};for(let g of n.answerOption||[])if(g.valueCoding){let E=g.valueCoding.code||g.valueCoding.display||"",M=(g.extension||[]).find(V=>V.url===p.answerMedia);M?.valueAttachment&&E&&(f[E]=M.valueAttachment)}if(Object.keys(f).length&&(o._answerMedias=f),lt(o,n,t),Kt(o,n),o.itemType==="reference"){let g=(n.extension||[]).find(V=>V.url===p.referenceResource);g&&g.valueCode&&(o.referenceResource=g.valueCode);let E=(n.extension||[]).find(V=>V.url===p.referenceFilter);E?.valueString&&(o._referenceFilter=E.valueString);let M=(n.extension||[]).filter(V=>V.url===p.referenceProfile);M.length&&(o._referenceProfiles=M.map(V=>V.valueCanonical).filter(Boolean))}if(o.itemType==="quantity"||o.itemType==="decimal"||o.itemType==="integer"){let g=(n.extension||[]).find(V=>V.url===p.unit);g?.valueCoding?.code&&(o.quantityUnit=g.valueCoding.code);let E=(n.extension||[]).find(V=>V.url===p.unitValueSet);E?.valueCanonical&&(o._unitValueSet=E.valueCanonical);let M=(n.extension||[]).filter(V=>V.url===p.unitOption);M.length&&(o._unitOptions=M.filter(V=>V.valueCoding).map(V=>({system:V.valueCoding.system,code:V.valueCoding.code,display:V.valueCoding.display})))}Li(n,o);let h=(n.extension||[]).find(g=>g.url===p.calculatedExpression);h?.valueExpression&&(o._calculatedExpr=h.valueExpression.expression||"");let _=(n.extension||[]).find(g=>g.url===p.initialExpression);_?.valueExpression&&(o._initialExpr=_.valueExpression.expression||"");for(let{url:g,prop:E}of ot){let M=(n.extension||[]).find(V=>V.url===g);M?.valueExpression&&(o[E]=M.valueExpression.expression||"")}n.maxLength&&(o._maxLength=n.maxLength),n.answerConstraint&&(o._answerConstraint=n.answerConstraint);let v=(n.extension||[]).find(g=>g.url===Le);v?.valueCode&&(o._answerConstraint=v.valueCode);let C=(n.extension||[]).find(g=>g.url===p.minLength);C?.valueInteger!==void 0&&(o._minLength=C.valueInteger);let T=(n.extension||[]).find(g=>g.url===p.regex);T?.valueString&&(o._regex=T.valueString);let N=(n.extension||[]).find(g=>g.url===p.entryFormatSdc||g.url===p.entryFormat);N?.valueString&&(o._entryFormat=N.valueString);let D=(n.extension||[]).find(g=>g.url===p.choiceOrientation);D?.valueCode&&(o._choiceOrientation=D.valueCode);let O=(n.extension||[]).find(g=>g.url===p.columnCount);Number.isInteger(O?.valueInteger)&&O.valueInteger>1&&(o._columnCount=O.valueInteger);let A=(n.extension||[]).filter(g=>g.url===p.choiceColumn);if(A.length&&(o._choiceColumns=A.map(g=>{let E=g.extension||[],M={},V=E.find(be=>be.url==="path");V?.valueString&&(M.path=V.valueString);let ie=E.find(be=>be.url==="label");ie?.valueString&&(M.label=ie.valueString);let et=E.find(be=>be.url==="width");et?.valueQuantity&&(M.width=et.valueQuantity);let Mn=E.find(be=>be.url==="forDisplay");return Mn?.valueBoolean!==void 0&&(M.forDisplay=Mn.valueBoolean),M})),o.itemType==="display"){let E=(n.extension||[]).find(M=>M.url===p.displayCategory)?.valueCodeableConcept?.coding?.[0]?.code;E&&(o._displayCategory=E)}let b=(n.extension||[]).find(g=>g.url===p.minValue);if(b){let g=b.valueDecimal??b.valueInteger;g!==void 0&&(o._minValue=g)}let P=(n.extension||[]).find(g=>g.url===p.maxValue);if(P){let g=P.valueDecimal??P.valueInteger;g!==void 0&&(o._maxValue=g)}let y=(n.extension||[]).find(g=>g.url===p.minOccurs);y?.valueInteger!==void 0&&(o._minOccurs=y.valueInteger);let R=(n.extension||[]).find(g=>g.url===p.maxOccurs);R?.valueInteger!==void 0&&(o._maxOccurs=R.valueInteger);let S=(n.extension||[]).find(g=>g.url===p.maxDecimalPlaces);S?.valueInteger!==void 0&&(o._maxDecimalPlaces=S.valueInteger);let L=(n.extension||[]).find(g=>g.url===p.sliderStepValue);if(L){let g=L.valueDecimal??L.valueInteger;g!==void 0&&(o._sliderStep=g)}let H=(n.extension||[]).find(g=>g.url===p.maxSize);H?.valueDecimal!==void 0&&(o._maxFileSizeMB=H.valueDecimal);let m=(n.extension||[]).filter(g=>g.url===p.mimeType&&g.valueCode).map(g=>g.valueCode);m.length&&(o._mimeTypes=m);let x=(n.extension||[]).filter(g=>g.url===p.supportLink&&g.valueUri).map(g=>g.valueUri);x.length&&(o._supportLinks=x),(n.extension||[]).find(g=>g.url===p.hiddenSdc||g.url===p.hidden)?.valueBoolean===!0&&(o._hidden=!0),(n.extension||[]).find(g=>g.url===p.isSubject)?.valueBoolean===!0&&(o._isSubject=!0);let q=(n.extension||[]).find(g=>g.url===p.observationExtract);if(q&&(o._observationExtract=q.valueBoolean!==!1),o.itemType==="open-choice"){let g=(n.extension||[]).find(E=>E.url===p.openLabel);g?.valueString&&(o._openLabel=g.valueString)}let z=(n.extension||[]).find(g=>g.url===p.preferredTerminologyServer);z?.valueUrl&&(o._preferredTermServer=z.valueUrl);let K=(n.extension||[]).find(g=>g.url===p.shortText);K?.valueString&&(o._shortText=K.valueString);let U=(n.extension||[]).find(g=>g.url===p.designNote);U?.valueMarkdown?o._designNote=U.valueMarkdown:U?.valueString&&(o._designNote=U.valueString);let j=(n.extension||[]).find(g=>g.url===p.usageMode);j?.valueCode&&(o._usageMode=j.valueCode);let se=(n.extension||[]).filter(g=>g.url===p.signatureRequired);se.length&&(o._signatureRequired=se.filter(g=>g.valueCodeableConcept?.coding?.[0]).map(g=>{let E=g.valueCodeableConcept.coding[0];return{system:E.system||"",code:E.code||"",display:E.display||""}}));let le=(n.extension||[]).find(g=>g.url===p.itemMedia);le?.valueAttachment&&(o._itemMedia=le.valueAttachment),n.disabledDisplay&&(o._disabledDisplay=n.disabledDisplay);let Te=(n.extension||[]).find(g=>g.url===Oe);Te?.valueCode&&(o._disabledDisplay=Te.valueCode),o._readOnly=!!n.readOnly,(n.repeats||o.impliesRepeats())&&(o.repeats=!0),n.prefix&&(o._prefix=n.prefix),n.definition&&(o._definition=n.definition);let ge=(n.extension||[]).find(g=>g.url===p.baseType);ge?.valueCode&&(o._baseType=ge.valueCode);let G=(n.extension||[]).find(g=>g.url===p.fhirType);if(G?.valueCode&&(o._fhirType=G.valueCode),n.code&&n.code.length&&(o._codes=n.code),n.answerValueSet){o._answerValueSet=n.answerValueSet;let g=Zt(e,n.answerValueSet);g&&(o.options=g)}if(n.initial&&n.initial.length){let g=E=>{if(E.valueBoolean!==void 0)return E.valueBoolean;if(E.valueDecimal!==void 0)return String(E.valueDecimal);if(E.valueInteger!==void 0)return String(E.valueInteger);if(E.valueDate!==void 0)return E.valueDate;if(E.valueDateTime!==void 0)return E.valueDateTime;if(E.valueTime!==void 0)return E.valueTime;if(E.valueString!==void 0)return E.valueString;if(E.valueUri!==void 0)return E.valueUri;if(E.valueCoding)return E.valueCoding.code||E.valueCoding.display||"";if(E.valueReference)return typeof E.valueReference=="string"?{reference:E.valueReference}:E.valueReference;if(E.valueQuantity)return{value:E.valueQuantity.value!==void 0?String(E.valueQuantity.value):"",unit:E.valueQuantity.unit||""}};if(o.repeats&&n.initial.length>1){let E=n.initial.map(g).filter(M=>M!==void 0);o._initialValues=E,o._initialValue=E[0]}else{let E=g(n.initial[0]);E!==void 0&&(o._initialValue=E)}}for(let g of n.answerOption||[])if(g.initialSelected){let E;if(g.valueCoding?E=g.valueCoding.code||g.valueCoding.display||"":g.valueString!==void 0?E=g.valueString:g.valueInteger!==void 0&&(E=String(g.valueInteger)),E!==void 0){o._initialSelected=E,o._initialValue===void 0&&(o._initialValue=E);break}}let F=Qt(n);return F&&(o._unknownExtensions=F),o}function At(n,t,e){if((n.type||"string")==="group"){let s=Ti({id:n.linkId,title:n.text||n.linkId||"Group",mandatory:!!n.required});lt(s,n,t),Kt(s,n)&&(s.logicWithParent="OR"),n.repeats&&(s.repeats=!0);let o=(n.extension||[]).find(y=>y.url===p.minOccurs);o?.valueInteger!==void 0&&(s._minOccurs=o.valueInteger);let l=(n.extension||[]).find(y=>y.url===p.maxOccurs);l?.valueInteger!==void 0&&(s._maxOccurs=l.valueInteger),Li(n,s),n.prefix&&(s._prefix=n.prefix),n.definition&&(s._definition=n.definition);let r=(n.extension||[]).find(y=>y.url===p.baseType);r?.valueCode&&(s._baseType=r.valueCode);let c=(n.extension||[]).find(y=>y.url===p.fhirType);c?.valueCode&&(s._fhirType=c.valueCode),n.code&&n.code.length&&(s._codes=n.code);let d=(n.extension||[]).filter(y=>y.url===p.supportLink&&y.valueUri).map(y=>y.valueUri);d.length&&(s._supportLinks=d),(n.extension||[]).find(y=>y.url===p.hiddenSdc||y.url===p.hidden)?.valueBoolean===!0&&(s._hidden=!0);let f=(n.extension||[]).find(y=>y.url===p.observationExtract);f&&(s._observationExtract=f.valueBoolean!==!1);let h=(n.extension||[]).find(y=>y.url===p.collapsible);h?.valueCode&&(s._collapsible=h.valueCode);let _=(n.extension||[]).find(y=>y.url===p.preferredTerminologyServer);_?.valueUrl&&(s._preferredTermServer=_.valueUrl);let v=(n.extension||[]).find(y=>y.url===p.shortText);v?.valueString&&(s._shortText=v.valueString);let C=(n.extension||[]).find(y=>y.url===p.designNote);C?.valueMarkdown?s._designNote=C.valueMarkdown:C?.valueString&&(s._designNote=C.valueString);let N=(n.extension||[]).find(y=>y.url===p.displayCategory)?.valueCodeableConcept?.coding?.[0]?.code;N&&(s._displayCategory=N);let O=(n.extension||[]).find(y=>y.url===p.itemControl)?.valueCodeableConcept?.coding?.[0]?.code;O&&(s._itemControl=O);let A=(n.extension||[]).find(y=>y.url===p.calculatedExpression);A?.valueExpression&&(s._calculatedExpr=A.valueExpression.expression||"");let b=(n.extension||[]).find(y=>y.url===p.initialExpression);b?.valueExpression&&(s._initialExpr=b.valueExpression.expression||"");let P=Qt(n);P&&(s._unknownExtensions=P);for(let y of n.item||[]){let R=At(y,t,e);R&&s.children.push(R)}return s}if((n.item||[]).length>0){let s=Ai(n,t,e);for(let a of n.item){let o=At(a,t,e);o&&s.children.push(o)}return s}return Ai(n,t,e)}function Oi(n,t){for(let e of n){if(e.repeats&&e._initialValues&&e._initialValues.length>1){t.dispatch(w.ANSWER_SET,{id:e.id,value:e._initialValues[0]});for(let i=1;i<e._initialValues.length;i++)t.dispatch(w.ANSWER_SET,{id:e.id+"$$"+i,value:e._initialValues[i]});t.dispatch(w.ANSWER_SET,{id:e.id+"$$n",value:e._initialValues.length-1})}else e._initialValue!==void 0&&t.dispatch(w.ANSWER_SET,{id:e.id,value:e._initialValue});e.type==="group"&&Oi(e.children,t)}}function Di(n,t={}){let e=t.questDoc||pe.get(w.APP_CONTEXT_READY)?.questDoc,i=t.bus||X,{tree:s,meta:a,variables:o,contained:l}=e,r=n;if(typeof r=="string")try{r=JSON.parse(r)}catch(b){_e(`Invalid JSON:
|
|
36
|
+
`+b.message);return}if(!r||r.resourceType!=="Questionnaire"){_e('Not a FHIR Questionnaire resource (resourceType must be "Questionnaire").');return}r=Xn(r),tt(s),i.dispatch(w.ANSWERS_CLEAR),e.rawFhir=r,e.translations??={};for(let b of Object.keys(e.translations))delete e.translations[b];ei(),a.id=r.id||"",a.url=r.url||"",a.version=r.version||"",a.title=r.title||"",a.status=r.status||"draft",a.publisher=r.publisher||"",a.description=r.description||"",a.name=r.name||"",a.date=r.date||"",a.subjectType=Array.isArray(r.subjectType)&&r.subjectType.length?[...r.subjectType]:[],a.purpose=r.purpose||"",a.copyright=r.copyright||"",a.approvalDate=r.approvalDate||"",a.lastReviewDate=r.lastReviewDate||"",a.effectivePeriodStart=r.effectivePeriod?.start||"",a.effectivePeriodEnd=r.effectivePeriod?.end||"",a.experimental=r.experimental!==void 0?r.experimental:null,a.language=r.language||"",a._rawIdentifier=Array.isArray(r.identifier)?JSON.parse(JSON.stringify(r.identifier)):[],a._rawText=r.text&&r.text.status&&r.text.div?{status:r.text.status,div:r.text.div}:null,a._rawContact=Array.isArray(r.contact)?r.contact:null,a._rawUseContext=Array.isArray(r.useContext)?r.useContext:null,a._rawJurisdiction=Array.isArray(r.jurisdiction)?r.jurisdiction:null,a._rawCode=Array.isArray(r.code)?r.code:null,a.derivedFrom=Array.isArray(r.derivedFrom)?[...r.derivedFrom]:[],a._rawModifierExtension=Array.isArray(r.modifierExtension)&&r.modifierExtension.length?JSON.parse(JSON.stringify(r.modifierExtension)):[],a._metaVersionId=r.meta?.versionId||"",a._metaSource=r.meta?.source||"",a._metaLastUpdated=r.meta?.lastUpdated||"",a._rawMetaProfile=Array.isArray(r.meta?.profile)?[...r.meta.profile]:[],a._implicitRules=r.implicitRules||"",a._rawMetaTag=Array.isArray(r.meta?.tag)?JSON.parse(JSON.stringify(r.meta.tag)):[],a._rawMetaSecurity=Array.isArray(r.meta?.security)?JSON.parse(JSON.stringify(r.meta.security)):[];let c=p.variable,d=p.replaces,u=p.launchContext,f=p.artifactVersionAlgorithm,h=p.artifactCopyrightLabel,_=(r.extension||[]).find(b=>b.url===f);r.versionAlgorithmString!==void 0?(a._versionAlgorithmString=r.versionAlgorithmString,a._versionAlgorithmCoding=null):r.versionAlgorithmCoding?(a._versionAlgorithmCoding=JSON.parse(JSON.stringify(r.versionAlgorithmCoding)),a._versionAlgorithmString=""):_?.valueString!==void 0?(a._versionAlgorithmString=_.valueString,a._versionAlgorithmCoding=null):_?.valueCoding?(a._versionAlgorithmCoding=JSON.parse(JSON.stringify(_.valueCoding)),a._versionAlgorithmString=""):(a._versionAlgorithmString="",a._versionAlgorithmCoding=null);let v=(r.extension||[]).find(b=>b.url===h);if(a.copyrightLabel=r.copyrightLabel||v?.valueString||"",o.splice(0),l.splice(0),Array.isArray(r.contained))for(let b of r.contained)l.push(b);a.replaces=(r.extension||[]).filter(b=>b.url===d&&b.valueCanonical).map(b=>b.valueCanonical);for(let b of r.extension||[])b.url===c&&b.valueExpression&&o.push({name:b.valueExpression.name||"",expression:b.valueExpression.expression||""});let C=p.preferredTerminologyServer,T=(r.extension||[]).find(b=>b.url===C);a.preferredTermServer=T?.valueUrl||"";let N=p.signatureRequired,D=(r.extension||[]).filter(b=>b.url===N);a._signatureRequired=D.length?D.filter(b=>b.valueCodeableConcept?.coding?.[0]).map(b=>{let P=b.valueCodeableConcept.coding[0];return{system:P.system||"",code:P.code||"",display:P.display||""}}):[];let O=(r.extension||[]).filter(b=>b.url!==c&&b.url!==d&&b.url!==C&&b.url!==N&&b.url!==we&&b.url!==u&&b.url!==f&&b.url!==h);a._rawQuestExtensions=O.length?JSON.parse(JSON.stringify(O)):[];let A=(r.extension||[]).filter(b=>b.url===u);a.launchContexts=A.map(b=>{let P=b.extension||[],y=P.find(L=>L.url==="name"),R=P.find(L=>L.url==="type"),S=P.find(L=>L.url==="description");return{name:y?.valueCoding?.code||y?.valueId||"",type:R?.valueCode||"",description:S?.valueString||""}});try{let b=Xt(r.item);for(let P of r.item||[]){let y=At(P,b,r.contained);y&&s.push(y)}Oi(s,i),sr(r,s,e.translations)}finally{i.dispatch(w.REINIT_FORM)}i.dispatch(w.BUILDER_RERENDER)}var hn=p.translation;function sr(n,t,e){let i=(n._title?.extension||[]).filter(r=>r.url===hn);for(let r of i){let c=(r.extension||[]).find(u=>u.url==="lang")?.valueCode,d=(r.extension||[]).find(u=>u.url==="content")?.valueString;!c||d==null||(Me(e,c),e[c].title=d)}function s(r){for(let c of r||[]){let d=(c._text?.extension||[]).filter(u=>u.url===hn);for(let u of d){let f=(u.extension||[]).find(_=>_.url==="lang")?.valueCode,h=(u.extension||[]).find(_=>_.url==="content")?.valueString;!f||h==null||(Me(e,f),e[f].items[c.linkId]=h)}for(let u of c.answerOption||[]){let f=u.valueCoding?.code||u.valueString||u.valueInteger?.toString();if(!f)continue;let h=(u._valueCoding?._display?.extension||[]).filter(_=>_.url===hn);for(let _ of h){let v=(_.extension||[]).find(T=>T.url==="lang")?.valueCode,C=(_.extension||[]).find(T=>T.url==="content")?.valueString;!v||C==null||(Me(e,v),e[v].opts[c.linkId+"__"+f]=C)}}s(c.item)}}s(n.item);let a=te.uiTranslations;for(let r of(n.extension||[]).filter(c=>c.url===a)){let c=(r.extension||[]).find(u=>u.url==="lang")?.valueCode,d=(r.extension||[]).find(u=>u.url==="strings")?.valueString;if(!(!c||!d))try{let u=JSON.parse(d);Me(e,c),Object.assign(e[c].ui,u)}catch{}}let o=te.xhtmlTranslations;for(let r of(n.extension||[]).filter(c=>c.url===o)){let c=(r.extension||[]).find(u=>u.url==="lang")?.valueCode,d=(r.extension||[]).find(u=>u.url==="strings")?.valueString;if(!(!c||!d))try{let u=JSON.parse(d);Me(e,c),e[c].xhtml||(e[c].xhtml={}),Object.assign(e[c].xhtml,u)}catch{}}let l=te.markdownTranslations;for(let r of(n.extension||[]).filter(c=>c.url===l)){let c=(r.extension||[]).find(u=>u.url==="lang")?.valueCode,d=(r.extension||[]).find(u=>u.url==="strings")?.valueString;if(!(!c||!d))try{let u=JSON.parse(d);Me(e,c),Object.assign(e[c].markdown,u)}catch{}}}function Me(n,t){n[t]||(n[t]={title:"",items:{},opts:{},ui:{},xhtml:{},markdown:{}}),n[t].ui||(n[t].ui={}),n[t].xhtml||(n[t].xhtml={}),n[t].markdown||(n[t].markdown={})}function ki(n,t=new Set){for(let e of n)e.id&&t.add(e.id),e.children&&ki(e.children,t);return t}function mn(n,t={}){for(let e of n||[]){if(e.answer&&e.answer.length){let i=s=>{if(s.valueBoolean!==void 0)return s.valueBoolean;if(s.valueCoding!==void 0)return s.valueCoding.code;if(s.valueDecimal!==void 0)return s.valueDecimal;if(s.valueInteger!==void 0)return s.valueInteger;if(s.valueDate!==void 0)return s.valueDate;if(s.valueDateTime!==void 0)return s.valueDateTime;if(s.valueTime!==void 0)return s.valueTime;if(s.valueQuantity!==void 0)return{value:s.valueQuantity.value,unit:s.valueQuantity.unit||""};if(s.valueUri!==void 0)return s.valueUri;if(s.valueReference!==void 0)return{reference:s.valueReference.reference||""};if(s.valueString!==void 0)return s.valueString};t[e.linkId]=e.answer.map(i).filter(s=>s!==void 0),t[e.linkId].length===0&&delete t[e.linkId];for(let s of e.answer)s.item&&mn(s.item,t)}e.item&&mn(e.item,t)}return t}function Ii(n,t=new Set){for(let e of n)e.itemType==="checklist"&&t.add(e.id),e.children&&Ii(e.children,t);return t}function Lt(n,t,e){if(!n||n.resourceType!=="QuestionnaireResponse")return{ok:!1,error:"Not a QuestionnaireResponse (resourceType: "+(n?.resourceType??"unknown")+")"};let i=ki(e),s=mn(n.item||[]),a=[],o=0;for(let[r,c]of Object.entries(s))i.has(r)?(t[r]=c,o++):a.push(r);let l=Ii(e);for(let r of l){let c=t[r];Array.isArray(c)&&c.length>1&&(t[r]=[c.filter(d=>d!==void 0).join(",")])}return{ok:!0,loaded:o,unmatched:a,questionnaire:n.questionnaire||"",meta:{status:n.status||"in-progress",subject:n.subject?.reference||"",author:n.author?.reference||"",id:n.id||"",language:n.language||"",metaVersionId:n.meta?.versionId||"",metaSource:n.meta?.source||"",metaProfile:(n.meta?.profile||[]).slice(),metaTag:(n.meta?.tag||[]).map(r=>({...r})),metaSecurity:(n.meta?.security||[]).map(r=>({...r}))}}}var gn=p.ordinalValue;function vn(n,t){let e=n.type||"string";if(e==="boolean")return{valueBoolean:t===!0};if(e==="date")return{valueDate:String(t)};if(e==="dateTime")return{valueDateTime:String(t)};if(e==="time")return{valueTime:String(t)};if(e==="choice"||e==="open-choice"){let i=String(t),s={code:i},a=(n.answerOption||[]).find(o=>o.valueCoding&&o.valueCoding.code===i||o.valueString!==void 0&&String(o.valueString)===i);if(a&&a.valueCoding){a.valueCoding.system&&(s.system=a.valueCoding.system),a.valueCoding.display&&(s.display=a.valueCoding.display);let o=(a.extension||[]).find(l=>l.url===gn)||(a.valueCoding.extension||[]).find(l=>l.url===gn);o!==void 0&&(s.extension=[{url:gn,valueDecimal:o.valueDecimal}])}return{valueCoding:s}}return e==="integer"?{valueInteger:parseInt(t,10)||0}:e==="decimal"?{valueDecimal:parseFloat(t)||0}:e==="quantity"?{valueQuantity:{value:parseFloat(t?.value)||0,unit:t?.unit||""}}:e==="url"?{valueUri:String(t)}:e==="reference"?{valueReference:{reference:String(t?.reference||"")}}:{valueString:String(t)}}function _n(n,t){let e={linkId:n.linkId},i=n.item||[],s=n.type||"string",a=t[n.linkId],o=a?a[0]:void 0;function l(){return(t[n.linkId]||[]).filter(c=>c!==void 0)}let r=c=>vn(n,c);if(s==="group")i.length>0&&(e.item=i.map(c=>_n(c,t)));else if(i.length>0){let c={};s==="boolean"?o!==void 0&&(c.valueBoolean=o===!0):(s==="string"||s==="text")&&o!==void 0&&(c.valueString=String(o)),c.item=i.map(d=>_n(d,t)),e.answer=[c]}else{let c=l();(s==="choice"||s==="open-choice")&&n.repeats&&c.length===1&&typeof c[0]=="string"&&c[0].includes(",")?e.answer=c[0].split(",").map(r):c.length>0&&(e.answer=c.map(r))}return e}function Je(n,t){return{resourceType:"QuestionnaireResponse",questionnaire:n.url||n.id||"",status:"in-progress",item:(n.item||[]).map(e=>_n(e,t))}}function rr(n){let t=new Set,e=new Set;if(!n||typeof n!="string")return{linkIds:[],vars:[]};let i=/linkId\s*=\s*(['"])(.*?)\1/g,s;for(;(s=i.exec(n))!==null;)s[2]&&t.add(s[2]);let a=/%(`[^`]+`|[A-Za-z_][A-Za-z0-9_]*)/g;for(;(s=a.exec(n))!==null;){let o=s[1];o.startsWith("`")&&o.endsWith("`")&&(o=o.slice(1,-1)),o!=="resource"&&o!=="context"&&e.add(o)}return{linkIds:[...t],vars:[...e]}}function Vi(n,t=[]){for(let e of n)t.push(e),e.children?.length&&Vi(e.children,t);return t}function yn(n,t=[]){let e=Vi(n||[]),i=e.map(u=>u.id),s=new Set(i),a=new Set((t||[]).map(u=>u&&u.name).filter(Boolean)),o=new Map;function l(u,f){for(let h of u)o.set(h.id,new Set(f)),h.children?.length&&l(h.children,[...f,h.id])}l(n||[],[]);let r=new Map,c=new Map;for(let u of i)r.set(u,new Set);let d=(u,f)=>{f!==u&&(o.get(u)?.has(f)||(s.has(f)?r.get(u).add(f):a.has(f)||(c.has(u)||c.set(u,new Set),c.get(u).add(f))))};for(let u of e){if(Array.isArray(u.enableWhen))for(let h of u.enableWhen)h&&h.question&&d(u.id,h.question);let f=[u.enableWhenExpression,u._calculatedExpr,u._initialExpr];for(let h of f){let{linkIds:_}=rr(h);for(let v of _)d(u.id,v)}}return{edges:r,nodeIds:i,varNames:a,missing:c}}function ar(n){let{edges:t}=n,e=0,i=1,s=2,a=new Map;for(let c of t.keys())a.set(c,e);let o=[],l=[],r=c=>{a.set(c,i),l.push(c);for(let d of t.get(c)||[]){let u=a.get(d);if(u===i){let f=l.indexOf(d);f!==-1&&o.push([...l.slice(f),d])}else u===e&&r(d)}l.pop(),a.set(c,s)};for(let c of t.keys())a.get(c)===e&&r(c);return o}function xn(n){let{edges:t,nodeIds:e}=n,i=new Map,s=new Map;for(let c of e)i.set(c,(t.get(c)||new Set).size),s.set(c,[]);for(let c of e)for(let d of t.get(c)||[])s.has(d)&&s.get(d).push(c);let a=e.filter(c=>i.get(c)===0),o=[],l=new Set;for(;a.length;){let c=a.shift();o.push(c),l.add(c);for(let d of s.get(c)||[])i.set(d,i.get(d)-1),i.get(d)===0&&a.push(d)}let r=ar(n);if(o.length<e.length)for(let c of e)l.has(c)||o.push(c);return{order:o,cycles:r}}function Cn(n,t,e){let i={};for(let s of n)if(!(!s.name||!s.expression))try{let a=e.evaluate(t,s.expression,{resource:t,...i},re());i[s.name]=Array.isArray(a)&&a.length===1?a[0]:a}catch{}return i}function wn(n,t=new Map){for(let e of n)t.set(e.id,e),e.children?.length&&wn(e.children,t);return t}function bn(n,t=new Map){for(let e of n||[])if(e.linkId&&t.set(e.linkId,e),Array.isArray(e.item)&&bn(e.item,t),Array.isArray(e.answer))for(let i of e.answer)Array.isArray(i.item)&&bn(i.item,t);return t}function En(n,t=new Map){for(let e of n||[])if(e.linkId&&t.set(e.linkId,e),Array.isArray(e.item)&&En(e.item,t),Array.isArray(e.answer))for(let i of e.answer)Array.isArray(i.item)&&En(i.item,t);return t}function or(n,t){return n.itemType==="checkbox"?t[0]===!0||t[0]==="true":Array.isArray(t)?t.join(""):t[0]!==void 0?String(t[0]):""}function Mi(n,t=[]){return{nodeMap:wn(n),order:xn(yn(n,t)).order}}function Pi(n,t,e,i,s={},a=null,o=null){let l={resource:t,...s},r=o?.nodeMap||wn(n),c=o?.order||xn(yn(n,[])).order,d=a?bn(a.item):null,u=d?En(t.item):null;for(let f of c){let h=r.get(f);if(!(!h||!(h._calculatedExpr&&h._readOnly)))try{let _=e.evaluate(t,h._calculatedExpr,l,re()),v=or(h,_);if(i[h.id]=v,u&&d){let C=u.get(h.id),T=d.get(h.id);if(C&&T){let N=vn(T,v),D=C.answer?.[0]?.item;D&&(N.item=D),C.answer=[N]}}}catch{}}}function Sn(n,t,e,i,s={}){let a={resource:t,...s};for(let o of n){if(o._initialExpr)try{let l=e.evaluate(t,o._initialExpr,a,re());o.itemType==="checkbox"?i[o.id]=l[0]===!0||l[0]==="true":i[o.id]=Array.isArray(l)?l.join(""):l[0]!==void 0?String(l[0]):""}catch{}o.children?.length&&Sn(o.children,t,e,i,s)}}var lr={disabledDisplay:Oe,answerConstraint:Le},Bi=p.artifactVersionAlgorithm,cr=p.artifactCopyrightLabel;function Ot(n){if(!n)return;let t=[];n.versionAlgorithmString!==void 0?(t.push({url:Bi,valueString:n.versionAlgorithmString}),delete n.versionAlgorithmString):n.versionAlgorithmCoding!==void 0&&(t.push({url:Bi,valueCoding:n.versionAlgorithmCoding}),delete n.versionAlgorithmCoding),n.copyrightLabel!==void 0&&(t.push({url:cr,valueString:n.copyrightLabel}),delete n.copyrightLabel),t.length&&(n.extension=[...n.extension||[],...t])}function Dt(n){n?.item&&qi(n.item)}function qi(n){if(Array.isArray(n))for(let t of n){for(let[e,i]of Object.entries(lr))t[e]===void 0||t[e]===null||(t.extension=(t.extension||[]).filter(s=>s?.url!==i),t.extension.push({url:i,valueCode:t[e]}),delete t[e]);t.item&&qi(t.item)}}fe.register({id:"R4",label:"FHIR R4 JSON (.json)",selectorLabel:"FHIR R4",isBuilderVersion:!0,metaVersion:"4.0.1",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return Dt(t),Ot(t),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"4.0.1"),t}});fe.register({id:"R4B",label:"FHIR R4B JSON (.json)",selectorLabel:"FHIR R4B",isBuilderVersion:!0,metaVersion:"4.3.0",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return Dt(t),Ot(t),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"4.3.0"),t}});function Fi(n){if(Array.isArray(n))for(let t of n)t.type==="open-choice"?(t.type="coding",t.answerConstraint||(t.answerConstraint="optionsOrString")):t.type==="choice"&&(t.type="coding"),t.item&&Fi(t.item)}fe.register({id:"R5",label:"FHIR R5 JSON (.json)",selectorLabel:"FHIR R5",isBuilderVersion:!0,metaVersion:"5.0.0",ext:"json",mimeType:"application/json",reportTitle:"Export \u2014 Validation Report",build(n){let t=JSON.parse(JSON.stringify(n));return t.item&&Fi(t.item),t.meta=t.meta??{lastUpdated:new Date().toISOString()},De(t,"5.0.0"),t}});var dr={equal:"=","not-equal":"<>",exists:null,">":">",">=":">=","<":"<","<=":"<="};function Ui(n,t){if(!n||n.length===0)return"";let e=t==="any"?" OR ":" AND ",i=n.map(s=>{let a=`[${s.question}]`,o=s.operator||"equal",l=dr[o]??"=",r;return s.answerDecimal!==void 0?r=String(s.answerDecimal):s.answerInteger!==void 0?r=String(s.answerInteger):s.answerBoolean!==void 0?r=s.answerBoolean?"1":"0":s.answerCoding?.code!==void 0?r=`'${s.answerCoding.code}'`:s.answerString!==void 0?r=`'${s.answerString}'`:r="''",`${a} ${l} ${r}`});return i.length===1?i[0]:i.map(s=>`(${s})`).join(e)}var nc=te.redcapNs,ic=p.itemControl,sc=p.minValue,rc=p.maxValue,ac=p.calculatedExpression;var ji=te.redcapNs,ur=p.itemControl,pr=p.minValue,fr=p.maxValue,Gi=p.calculatedExpression,Qi=["Variable / Field Name","Form Name","Section Header","Field Type","Field Label","Choices, Calculations, OR Slider Labels","Field Note","Text Validation Type OR Show Slider Number","Text Validation Min","Text Validation Max","Identifier?","Branching Logic (Show field only if...)","Required Field?","Custom Alignment","Question Number (surveys only)","Matrix Group Name","Matrix Ranking?","Field Annotation"];function ee(n,t){if(!n)return;let e=ji+t,i=n.find(s=>s.url===e);if(i){for(let s of Object.keys(i))if(s.startsWith("value"))return i[s]}}function It(n,t){return(n||[]).find(e=>e.url===t)}function Yi(n){let t=String(n??"");return t.includes(",")||t.includes('"')||t.includes(`
|
|
37
|
+
`)?'"'+t.replace(/"/g,'""')+'"':t}function hr(n){return Qi.map(t=>Yi(n[t]??"")).join(",")}function Wi(n){let e=It(n.extension,ur)?.valueCodeableConcept?.coding?.[0]?.code;if(e==="drop-down")return"dropdown";if(e==="slider")return"slider";if(It(n.extension,Gi))return"calc";switch(n.type){case"string":return"text";case"text":return"notes";case"integer":return"text";case"decimal":return"text";case"date":return"text";case"dateTime":return"text";case"time":return"text";case"boolean":return"yesno";case"choice":return n.repeats?"checkbox":"radio";case"attachment":return"file";case"display":return"descriptive";default:return"text"}}function mr(n){switch(n.type){case"integer":return"integer";case"decimal":return"number";case"date":return"date_ymd";case"dateTime":return"datetime_ymd";case"time":return"time";default:return""}}function Hi(n){return!n||n.length===0?"":n.map(t=>{if(t.valueCoding){let e=t.valueCoding.code||"",i=t.valueCoding.display||t.valueCoding.code||"";return`${e}, ${i}`}return t.valueString!==void 0?`${t.valueString}, ${t.valueString}`:t.valueInteger!==void 0?`${t.valueInteger}, ${t.valueInteger}`:""}).filter(Boolean).join(" | ")}function $i(n,t){let e=It(n,t);if(!e)return"";for(let i of Object.keys(e))if(i.startsWith("value"))return String(e[i]);return""}function kt(n,t,e,i,s=0){for(let a of n||[]){if(a.type==="group"){let O=ee(a.extension,"form-name")||a.text||a.linkId,A=ee(a.extension,"section-header")||"";if(s===0)kt(a.item,O,"",i,s+1);else if(s===1){let b=A||(O!==t?a.text:"");kt(a.item,t,b,i,s+1)}else kt(a.item,t,e,i,s+1);continue}let o=(a.extension||[]).some(O=>O.url.startsWith(ji)),l;if(o){let O=ee(a.extension,"calc-expression"),A=ee(a.extension,"sql-query");O!==void 0?l="calc":A!==void 0?l="sql":l=Wi(a)}else l=Wi(a);let r;if(o){let O=ee(a.extension,"calc-expression"),A=ee(a.extension,"sql-query"),b=ee(a.extension,"slider-labels");O!==void 0?r=O:A!==void 0?r=A:b!==void 0?r=b:r=Hi(a.answerOption)}else{let O=It(a.extension,Gi);O?.valueExpression?.expression?r=O.valueExpression.expression:r=Hi(a.answerOption)}let c="";o?c=ee(a.extension,"branching-logic")||"":a.enableWhen&&a.enableWhen.length>0&&(c=Ui(a.enableWhen,a.enableBehavior||"all"));let d=o?"":mr(a),u=$i(a.extension,pr),f=$i(a.extension,fr),h=ee(a.extension,"annotation")??"",_=ee(a.extension,"matrix-group")??"",v=ee(a.extension,"alignment")??"",C=ee(a.extension,"identifier")??!1,T=ee(a.extension,"field-note")??"",N=ee(a.extension,"question-number")??"",D=ee(a.extension,"matrix-ranking")??!1;i.push({"Variable / Field Name":a.linkId,"Form Name":t,"Section Header":e,"Field Type":l,"Field Label":a.text||a.linkId,"Choices, Calculations, OR Slider Labels":r,"Field Note":T,"Text Validation Type OR Show Slider Number":d,"Text Validation Min":u,"Text Validation Max":f,"Identifier?":C?"y":"","Branching Logic (Show field only if...)":c,"Required Field?":a.required?"y":"","Custom Alignment":v,"Question Number (surveys only)":N,"Matrix Group Name":_,"Matrix Ranking?":D?"y":"","Field Annotation":h})}}function Rn(n){let t=[];kt(n.item||[],"my_form","",t,0);let e=[Qi.map(Yi).join(",")];for(let i of t)e.push(hr(i));return e.join(`\r
|
|
38
38
|
`)+`\r
|
|
39
|
-
`}var Rn=class{constructor(){this._validators=[]}register(t){this._validators.push(t)}getAll(){return[...this._validators]}async runAll(t,e,i={}){return Promise.all(this._validators.map(s=>s.run(t,e,i).then(a=>({validator:s,issues:a,error:null})).catch(a=>({validator:s,issues:[],error:a}))))}},Yi=new Rn;var Vt=class{constructor(){this.enabled=!0,typeof document<"u"&&document.addEventListener(C.VALIDATOR_TOGGLE,t=>{t.detail?.id===this.id&&(this.enabled=t.detail.enabled)})}get id(){return""}get name(){throw new Error("Validator.name must be implemented")}get type(){return"local"}async run(t,e,i){return this.enabled?this._run(t,e,i):[]}async _run(t,e,i){return[]}};var yc=f.itemControl,mr=te.redcapNs,gr=new Set([f.answerExpression,f.initialExpression,f.choiceColumn,f.itemContext,f.constraint,f.variable]);function Ji(n,t,e=0){for(let i of n||[])t(i,e),i.item&&Ji(i.item,t,e+1)}function ye(n){return(n.extension||[]).some(t=>t.url.startsWith(mr))}var Mt=class extends Vt{constructor(){super(),this.enabled=!1}get id(){return"redcap-compat"}get name(){return"REDCap Compatibility"}get type(){return"local"}async _run(t,e,i){if(!t)return[];let s=[],a=0;return Ji(t.item,(o,l)=>{let r=o.linkId||"(unknown)";if(o.type==="group"&&(l>a&&(a=l),l>=2&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`Group "${o.text||r}" is nested at depth ${l+1}. REDCap supports at most 2 levels (Form \u2192 Section). It will be flattened into its parent section.`})),o.type!=="group"){if(o.answerValueSet&&!ye(o)&&s.push({severity:"error",nodeId:r,message:`"${o.text||r}": answerValueSet by URL ("${o.answerValueSet}") cannot be represented in REDCap \u2014 choices must be inline. The field will be exported with empty choices.`}),o.code&&o.code.length>0&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": item.code (FHIR Coding) has no REDCap equivalent and will be dropped.`}),o.enableWhenExpression&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": FHIRPath-based enableWhenExpression cannot be translated to REDCap branching logic. The branching condition will be lost.`}),!ye(o)&&o.enableWhen&&o.enableWhen.length>1){let c=o.enableBehavior==="all"||!o.enableBehavior,u=o.enableBehavior==="any";!c&&!u&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": enableBehavior "${o.enableBehavior}" is not supported in REDCap. Branching logic may be incorrect.`})}if(!ye(o)){for(let c of o.extension||[])if(gr.has(c.url)){let u=c.url.split("/").pop();s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": extension "${u}" has no REDCap equivalent and will be dropped.`})}}ye(o)||(o.type==="reference"&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": type "reference" (FHIR resource reference) has no REDCap equivalent \u2014 will be exported as a text field.`}),o.type==="quantity"&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": type "quantity" (value + unit) has no direct REDCap equivalent \u2014 will be exported as a text field. Consider splitting into two fields.`})),ye(o)||(o.extension||[]).find(u=>u.url===f.calculatedExpression)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": calculatedExpression uses FHIRPath \u2014 stored as a REDCap calc formula annotation. Manual adjustment in REDCap will be required.`})}}),s}};var ze=new Mt;Yi.register(ze);fe.register({id:"redcap",label:"REDCap CSV \u2014 Data Dictionary (.csv)",isBuilderVersion:!1,metaVersion:null,ext:"csv",mimeType:"text/csv;charset=utf-8;",reportTitle:"REDCap Export \u2014 Compatibility Report",validatorFilter:n=>n.type!=="external",build(n){return Sn(n)},onBeforeReport(){ze.enabled=!0},onAfterExport(){ze.enabled=!1},onCancel(){ze.enabled=!1}});var zi="http://unitsofmeasure.org",Tn={system:zi,valueSet:zi+"/vs"};var _r="http://www.w3.org",Xi={xhtml:_r+"/1999/xhtml"};function he(n){return String(n||"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function vr(n){let t=[];t.push(`<tr><td><b>Status</b></td><td>${he(n.status)}</td></tr>`),n.date&&t.push(`<tr><td><b>Date</b></td><td>${he(n.date)}</td></tr>`),n.version&&t.push(`<tr><td><b>Version</b></td><td>${he(n.version)}</td></tr>`),n.publisher&&t.push(`<tr><td><b>Publisher</b></td><td>${he(n.publisher)}</td></tr>`),n.description&&t.push(`<tr><td><b>Description</b></td><td>${he(n.description)}</td></tr>`);let e=[];function i(a,o){for(let l of a||[]){let r="\xA0\xA0\xA0\xA0".repeat(o);e.push(`<tr><td>${he(l.linkId)}</td><td>${r}${he(l.text)}</td><td>${he(l.type)}</td></tr>`),l.item&&i(l.item,o+1)}}i(n.item,0);let s=['<div xmlns="'+Xi.xhtml+'">',`<h2>${he(n.title||n.id||"Questionnaire")}</h2>`,`<table><tbody>${t.join("")}</tbody></table>`];return e.length&&s.push(`<table><thead><tr><th>LinkId</th><th>Text</th><th>Type</th></tr></thead><tbody>${e.join("")}</tbody></table>`),s.push("</div>"),s.join("")}function Ki(n){return n==="checkbox"?"boolean":n==="integer"?"integer":n==="decimal"||n==="number"?"decimal":n==="quantity"?"quantity":n==="select"||n==="radio"||n==="checklist"?"choice":n==="open-choice"?"open-choice":n==="display"?"display":n==="date"?"date":n==="dateTime"?"dateTime":n==="time"?"time":n==="url"?"url":n==="attachment"?"attachment":n==="reference"?"reference":"string"}function yr(n){return!n||!n.length?[]:n.filter(t=>t.expression).map(t=>({url:f.constraint,extension:[...t.key?[{url:"key",valueId:t.key}]:[],...t.severity?[{url:"severity",valueCode:t.severity}]:[],{url:"expression",valueString:t.expression},...t.human?[{url:"human",valueString:t.human}]:[]]}))}function Ln(n){let t={linkId:n.id,text:n.title,type:n.type==="group"?"group":Ki(n.itemType)};n._prefix&&(t.prefix=n._prefix),n._definition&&(t.definition=n._definition),n._baseType&&(t.extension=t.extension||[],t.extension.push({url:f.baseType,valueCode:n._baseType})),n._fhirType&&(t.extension=t.extension||[],t.extension.push({url:f.fhirType,valueString:n._fhirType})),n._codes&&n._codes.length&&n.itemType!=="display"&&(t.code=n._codes),n.mandatory===!0&&n.itemType!=="display"&&(t.required=!0);let e=n.type==="item"&&(n.options||n._rawAnswerOptions||n._answerValueSet||n._answerExpression||n._candidateExpression);if(n.type==="item"&&n.itemType!=="display"&&!e){let r=Ki(n.itemType),c=u=>{if(r==="boolean")return{valueBoolean:typeof u=="boolean"?u:u==="true"};if(r==="decimal"){let d=parseFloat(u);return isFinite(d)?{valueDecimal:d}:null}if(r==="integer"){let d=parseInt(u,10);return isFinite(d)?{valueInteger:d}:null}if(r==="date")return{valueDate:String(u)};if(r==="dateTime")return{valueDateTime:String(u)};if(r==="time")return{valueTime:String(u)};if(r==="url")return{valueUri:String(u)};if(r==="reference"){let d=u&&typeof u=="object"?u.reference:typeof u=="string"?u:"";return d?{valueReference:{reference:d}}:null}return r==="choice"?{valueCoding:{code:String(u),display:String(u)}}:{valueString:String(u)}};if(n.repeats&&n._initialValues&&n._initialValues.length>1){let u=n._initialValues.map(c).filter(Boolean);u.length&&(t.initial=u)}else if(n._initialValue!==void 0&&n._initialValue!==""){let u=c(n._initialValue);u&&(t.initial=[u])}}n.enableWhen&&n.enableWhen.length&&(t.enableWhen=n.enableWhen.map(r=>({...r})),(n.enableWhen.length>1||n.enableBehavior==="any")&&(t.enableBehavior=n.enableBehavior==="any"?"any":"all"));let i=[];n.enableWhenExpression&&i.push({url:f.enableWhenExpression,valueExpression:{language:"text/fhirpath",expression:n.enableWhenExpression}});let s=(n.constraint||[]).filter(r=>r.key!==Be);if(i.push(...yr(s)),n.type==="group"&&n.logicWithParent==="OR"&&n.children.length>0){let r=n.children.map(c=>`%resource.item.where(linkId='${c.id.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}').answer.exists()`).join(" or ");i.push({url:f.constraint,extension:[{url:"key",valueId:Be},{url:"severity",valueCode:"error"},{url:"human",valueString:"At least one item in this group must be completed"},{url:"expression",valueString:r}]})}if(n.itemType==="reference"&&n.referenceResource&&i.push({url:f.referenceResource,valueCode:n.referenceResource}),n.itemType==="reference"&&n._referenceFilter&&i.push({url:f.referenceFilter,valueString:n._referenceFilter}),n.itemType==="reference"&&n._referenceProfiles?.length)for(let r of n._referenceProfiles)i.push({url:f.referenceProfile,valueCanonical:r});if((n.itemType==="integer"||n.itemType==="decimal")&&n.quantityUnit&&i.push({url:f.unit,valueCoding:{system:Tn.system,code:n.quantityUnit}}),n.itemType==="quantity"&&n.quantityUnit&&!n._unitOptions?.length&&i.push({url:f.unitOption,valueCoding:{system:Tn.system,code:n.quantityUnit}}),n.itemType==="quantity"&&n._unitValueSet&&i.push({url:f.unitValueSet,valueCanonical:n._unitValueSet}),n.itemType==="quantity"&&n._unitOptions&&n._unitOptions.length)for(let r of n._unitOptions){let c={};r.system&&(c.system=r.system),r.code&&(c.code=r.code),r.display&&(c.display=r.display),i.push({url:f.unitOption,valueCoding:c})}n._calculatedExpr&&i.push({url:f.calculatedExpression,valueExpression:{language:"text/fhirpath",expression:n._calculatedExpr}}),n._initialExpr&&i.push({url:f.initialExpression,valueExpression:{language:"text/fhirpath",expression:n._initialExpr}});for(let{url:r,prop:c}of ot)n[c]&&i.push({url:r,valueExpression:{language:"text/fhirpath",expression:n[c]}});n.itemType==="radio"?i.push({url:f.itemControl,valueCodeableConcept:{coding:[{system:f.itemControlCS,code:"radio-button"}]}}):n.itemType==="checklist"?i.push({url:f.itemControl,valueCodeableConcept:{coding:[{system:f.itemControlCS,code:"check-box"}]}}):n._itemControl&&i.push({url:f.itemControl,valueCodeableConcept:{coding:[{system:f.itemControlCS,code:n._itemControl}]}});let a=[];n._renderStyle&&a.push({url:f.renderingStyle,valueString:n._renderStyle}),n._renderXhtml&&a.push({url:f.renderingXhtml,valueString:n._renderXhtml}),n._renderMarkdown&&a.push({url:f.renderingMarkdown,valueMarkdown:n._renderMarkdown}),a.length&&(t._text={extension:a}),n.type==="group"?t.item=n.children.map(Ln):(n.itemType==="select"||n.itemType==="radio"||n.itemType==="open-choice"||n.itemType==="checklist")&&(n.options||n._rawAnswerOptions)&&!n._answerValueSet&&!n._answerExpression&&!n._candidateExpression&&(n._rawAnswerOptions?t.answerOption=n._rawAnswerOptions.map(r=>{let c=r.valueCoding?r.valueCoding.code||r.valueCoding.display||"":r.valueString!==void 0?r.valueString:r.valueInteger!==void 0?String(r.valueInteger):r.valueDate!==void 0?r.valueDate:r.valueTime!==void 0?r.valueTime:r.valueReference?typeof r.valueReference=="string"?r.valueReference:r.valueReference.reference||"":"",u={...r},d=new Set([f.ordinalValue,f.optionPrefix,f.optionExclusive,f.itemWeight,f.answerMedia]),h=(r.extension||[]).filter(p=>!d.has(p.url));return n._optionOrdinals?.[c]!==void 0&&h.push({url:f.ordinalValue,valueDecimal:n._optionOrdinals[c]}),n._optionPrefixes?.[c]&&h.push({url:f.optionPrefix,valueString:n._optionPrefixes[c]}),n._optionExclusives?.[c]&&h.push({url:f.optionExclusive,valueBoolean:!0}),n._optionWeights?.[c]!==void 0&&h.push({url:f.itemWeight,valueDecimal:n._optionWeights[c]}),n._answerMedias?.[c]&&h.push({url:f.answerMedia,valueAttachment:n._answerMedias[c]}),h.length&&(u.extension=h),n._initialSelected===c&&(u.initialSelected=!0),u}):t.answerOption=nt(n.options).map(({code:r,display:c})=>{let d={valueCoding:{...n._optionSystems?.[r]?{system:n._optionSystems[r]}:{},code:r,display:c}},h=[];return n._optionOrdinals&&n._optionOrdinals[r]!==void 0&&h.push({url:f.ordinalValue,valueDecimal:n._optionOrdinals[r]}),n._optionPrefixes&&n._optionPrefixes[r]!==void 0&&h.push({url:f.optionPrefix,valueString:n._optionPrefixes[r]}),n._optionExclusives&&n._optionExclusives[r]&&h.push({url:f.optionExclusive,valueBoolean:!0}),n._optionWeights&&n._optionWeights[r]!==void 0&&h.push({url:f.itemWeight,valueDecimal:n._optionWeights[r]}),n._answerMedias&&n._answerMedias[r]&&h.push({url:f.answerMedia,valueAttachment:n._answerMedias[r]}),h.length&&(d.extension=h),n._initialSelected===r&&(d.initialSelected=!0),d}));let o=new Set(["checkbox","decimal","integer","number","text","url","open-choice"]);if(n._maxLength!==void 0&&n._maxLength!==null&&o.has(n.itemType)&&(t.maxLength=n._maxLength),n.type==="item"&&n.children?.length>0&&(t.item=n.children.map(Ln)),n._answerConstraint&&(t.answerConstraint=n._answerConstraint),n._minLength!==void 0&&n._minLength!==null&&i.push({url:f.minLength,valueInteger:n._minLength}),n._regex&&i.push({url:f.regex,valueString:n._regex}),n._maxFileSizeMB!==void 0&&n._maxFileSizeMB!==null&&i.push({url:f.maxSize,valueDecimal:n._maxFileSizeMB}),n._mimeTypes&&n._mimeTypes.length)for(let r of n._mimeTypes)r&&i.push({url:f.mimeType,valueCode:r});if(n._entryFormat&&i.push({url:f.entryFormatSdc,valueString:n._entryFormat}),n._choiceOrientation&&i.push({url:f.choiceOrientation,valueCode:n._choiceOrientation}),Number.isInteger(n._columnCount)&&n._columnCount>1&&i.push({url:f.columnCount,valueInteger:n._columnCount}),n._choiceColumns&&n._choiceColumns.length)for(let r of n._choiceColumns){let c=[];r.path&&c.push({url:"path",valueString:r.path}),r.label&&c.push({url:"label",valueString:r.label}),r.width&&c.push({url:"width",valueQuantity:r.width}),r.forDisplay!==void 0&&c.push({url:"forDisplay",valueBoolean:r.forDisplay}),i.push({url:f.choiceColumn,extension:c})}if(n._supportLinks&&n._supportLinks.length)for(let r of n._supportLinks)r&&i.push({url:f.supportLink,valueUri:r});if(n._hidden&&i.push({url:f.hiddenSdc,valueBoolean:!0}),n._isSubject&&n.type==="item"&&n.itemType!=="display"&&i.push({url:f.isSubject,valueBoolean:!0}),n._observationExtract!=null&&n.itemType!=="display"&&i.push({url:f.observationExtract,valueBoolean:n._observationExtract!==!1}),n.type==="group"&&n._collapsible&&i.push({url:f.collapsible,valueCode:n._collapsible}),n.itemType==="open-choice"&&n._openLabel&&i.push({url:f.openLabel,valueString:n._openLabel}),n._preferredTermServer&&i.push({url:f.preferredTerminologyServer,valueUrl:n._preferredTermServer}),n._shortText&&i.push({url:f.shortText,valueString:n._shortText}),n._designNote&&i.push({url:f.designNote,valueMarkdown:n._designNote}),n._usageMode&&i.push({url:f.usageMode,valueCode:n._usageMode}),n._signatureRequired?.length)for(let r of n._signatureRequired)i.push({url:f.signatureRequired,valueCodeableConcept:{coding:[{system:r.system,code:r.code,display:r.display}]}});if(n._itemMedia&&i.push({url:f.itemMedia,valueAttachment:n._itemMedia}),n._displayCategory&&n.itemType!=="display"&&i.push({url:f.displayCategory,valueCodeableConcept:{coding:[{system:f.displayCategoryCS,code:n._displayCategory}]}}),n._minValue!==void 0){let r=Number.isInteger(n._minValue);i.push({url:f.minValue,[r?"valueInteger":"valueDecimal"]:n._minValue})}if(n._maxValue!==void 0){let r=Number.isInteger(n._maxValue);i.push({url:f.maxValue,[r?"valueInteger":"valueDecimal"]:n._maxValue})}let l=new Set(["select","radio","checklist","open-choice","decimal","integer","number","text","date","dateTime","time","quantity"]);if(n.type==="item"&&n._answerValueSet&&l.has(n.itemType)&&(t.answerValueSet=n._answerValueSet),n._readOnly&&n.itemType!=="display"&&(t.readOnly=!0),n._disabledDisplay&&(t.disabledDisplay=n._disabledDisplay),(n.repeats||n.itemType==="checklist")&&n.itemType!=="display"&&(t.repeats=!0),n.repeats&&n._minOccurs!==void 0&&n.itemType!=="display"&&n.required&&i.push({url:f.minOccurs,valueInteger:n._minOccurs}),n.repeats&&n._maxOccurs!==void 0&&i.push({url:f.maxOccurs,valueInteger:n._maxOccurs}),n._maxDecimalPlaces!==void 0&&i.push({url:f.maxDecimalPlaces,valueInteger:n._maxDecimalPlaces}),n._sliderStep!==void 0){let c=Number.isInteger(n._sliderStep)?n._sliderStep:Math.round(n._sliderStep);i.push({url:f.sliderStepValue,valueInteger:c})}return n._unknownExtensions&&n._unknownExtensions.length&&i.push(...n._unknownExtensions.map(r=>JSON.parse(JSON.stringify(r)))),i.length&&(t.extension=i),t}function Pt(n=pe.get(C.APP_CONTEXT_READY)?.questDoc){let{tree:t,meta:e,rawFhir:i,variables:s,contained:a,translations:o}=n,l=f.variable,r={resourceType:"Questionnaire",id:e.id||"logic-builder-export",status:e.status||"draft",item:t.map(Ln)};if(e.url&&(r.url=e.url),e.version&&(r.version=e.version),r.title=e.title||i&&i.title||"Untitled Questionnaire",e.name&&(r.name=e.name),e.publisher&&(r.publisher=e.publisher),e.description&&(r.description=e.description),e.experimental!==null&&(r.experimental=e.experimental),e._implicitRules&&(r.implicitRules=e._implicitRules),e.language&&(r.language=e.language),e.purpose&&(r.purpose=e.purpose),e.copyright&&(r.copyright=e.copyright),e.copyrightLabel&&(r.copyrightLabel=e.copyrightLabel),e._versionAlgorithmString?r.versionAlgorithmString=e._versionAlgorithmString:e._versionAlgorithmCoding&&(r.versionAlgorithmCoding=JSON.parse(JSON.stringify(e._versionAlgorithmCoding))),e.approvalDate&&(r.approvalDate=e.approvalDate),e.lastReviewDate&&(r.lastReviewDate=e.lastReviewDate),r.date=e.date||new Date().toISOString().split("T")[0],e.subjectType?.length&&(r.subjectType=[...e.subjectType]),e._rawIdentifier?.length&&(r.identifier=JSON.parse(JSON.stringify(e._rawIdentifier))),r.text=e._rawText?{status:e._rawText.status,div:e._rawText.div}:{status:"generated",div:vr(r)},e._rawContact&&(r.contact=e._rawContact),e._rawUseContext&&(r.useContext=e._rawUseContext),e._rawJurisdiction&&(r.jurisdiction=e._rawJurisdiction),e._rawCode&&(r.code=e._rawCode),e._rawModifierExtension?.length&&(r.modifierExtension=JSON.parse(JSON.stringify(e._rawModifierExtension))),e.derivedFrom?.length&&(r.derivedFrom=e.derivedFrom),e.effectivePeriodStart||e.effectivePeriodEnd){let p={};e.effectivePeriodStart&&(p.start=e.effectivePeriodStart),e.effectivePeriodEnd&&(p.end=e.effectivePeriodEnd),r.effectivePeriod=p}let c=s.filter(p=>p.name&&p.expression),u=f.replaces,d=[...c.map(p=>({url:l,valueExpression:{name:p.name,language:"text/fhirpath",expression:p.expression}})),...(e.replaces||[]).filter(p=>p.trim()).map(p=>({url:u,valueCanonical:p.trim()})),...e.preferredTermServer?.trim()?[{url:f.preferredTerminologyServer,valueUrl:e.preferredTermServer.trim()}]:[],...(e._signatureRequired||[]).map(p=>({url:f.signatureRequired,valueCodeableConcept:{coding:[{system:p.system,code:p.code,display:p.display}]}})),...(e.launchContexts||[]).filter(p=>p.name.trim()).map(p=>({url:f.launchContext,extension:[{url:"name",valueCoding:{system:f.launchContextCS,code:p.name.trim()}},...p.type.trim()?[{url:"type",valueCode:p.type.trim()}]:[],...p.description.trim()?[{url:"description",valueString:p.description.trim()}]:[]]})),...(e._rawQuestExtensions||[]).map(p=>JSON.parse(JSON.stringify(p)))];return d.length&&(r.extension=d),a.length&&(r.contained=a.map(p=>JSON.parse(JSON.stringify(p)))),(e._metaVersionId||e._metaSource||e._metaLastUpdated||e._rawMetaProfile?.length||e._rawMetaTag?.length||e._rawMetaSecurity?.length)&&(r.meta={lastUpdated:new Date().toISOString()},e._metaVersionId&&(r.meta.versionId=e._metaVersionId),e._metaSource&&(r.meta.source=e._metaSource),e._rawMetaProfile?.length&&(r.meta.profile=e._rawMetaProfile),e._rawMetaTag?.length&&(r.meta.tag=e._rawMetaTag),e._rawMetaSecurity?.length&&(r.meta.security=e._rawMetaSecurity)),xr(r,o),r}var Zi=f.translation;function xr(n,t){if(!t||!Object.keys(t).length)return;let e=Object.keys(t),i=e.filter(r=>t[r].title).map(r=>Nn(r,t[r].title));i.length&&(n._title=n._title||{},n._title.extension=An(n._title.extension||[],i));function s(r){for(let c of r||[]){let u=e.filter(d=>t[d].items[c.linkId]!=null).map(d=>Nn(d,t[d].items[c.linkId]));u.length&&(c._text=c._text||{},c._text.extension=An(c._text.extension||[],u));for(let d of c.answerOption||[]){let h=d.valueCoding?.code||d.valueString||d.valueInteger?.toString();if(!h)continue;let p=c.linkId+"__"+h,y=e.filter(_=>t[_].opts[p]!=null).map(_=>Nn(_,t[_].opts[p]));y.length&&d.valueCoding&&(d._valueCoding=d._valueCoding||{},d._valueCoding._display=d._valueCoding._display||{},d._valueCoding._display.extension=An(d._valueCoding._display.extension||[],y))}s(c.item)}}s(n.item);let a=te.uiTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==a);for(let r of e){let c=t[r].ui;!c||!Object.keys(c).length||n.extension.push({url:a,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}n.extension.length||delete n.extension;let o=te.xhtmlTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==o);for(let r of e){let c=t[r].xhtml;!c||!Object.keys(c).length||n.extension.push({url:o,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}let l=te.markdownTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==l);for(let r of e){let c=t[r].markdown;!c||!Object.keys(c).length||n.extension.push({url:l,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}n.extension.length||delete n.extension}function Nn(n,t){return{url:Zi,extension:[{url:"lang",valueCode:n},{url:"content",valueString:t}]}}function An(n,t){return[...(n||[]).filter(i=>i.url!==Zi),...t]}async function es(n,t,e){let a=`${(ue.get(Z.SDC_SERVER)||n).replace(/\/$/,"")}/Questionnaire/$populate`,o=dn(a),l=JSON.stringify({resourceType:"Parameters",parameter:[{name:"questionnaire",resource:t},{name:"subject",valueReference:{reference:e}}]}),r=await fetch(o,{method:"POST",headers:{"Content-Type":"application/fhir+json",Accept:"application/fhir+json"},body:l,signal:AbortSignal.timeout(3e4)});if(!r.ok){let u=await r.text().catch(()=>""),d=u.substring(0,150);try{let y=JSON.parse(u)?.issue?.[0];d=y?.diagnostics||y?.details?.text||d}catch{}let h=r.status===400||r.status===404?" (This server may not support the SDC $populate operation.)":"";throw new Error(`$populate: HTTP ${r.status}${d?" \u2014 "+d:""}${h}`)}let c=await r.json();if(c.resourceType==="QuestionnaireResponse")return c;if(c.resourceType==="Parameters"){let u=c.parameter?.find(d=>d.name==="questionnaire-response"||d.name==="response"||d.name==="return");if(u?.resource?.resourceType==="QuestionnaireResponse")return u.resource;throw new Error("$populate Parameters response did not contain a QuestionnaireResponse")}throw new Error(`$populate returned unexpected resourceType: ${c.resourceType}`)}var me=window.fhirpath;function Pe(){return typeof document<"u"&&document.hidden?new Promise(n=>setTimeout(n,0)):new Promise(n=>requestAnimationFrame(()=>requestAnimationFrame(n)))}var Bt=class{constructor(t={}){this._session=t.session||Un,this._bus=this._session.bus,this._rc=t.rc||Hn,this._rc.bus=this._bus,this._progress=t.progress||{show(){},hide(){}},this._chrome={search:{refresh(){}},statusBadge:{update(){}},languageMenu:{rebuild(){}},...t.chrome||{}},this._mountEl=t.mountEl||null,this._jsonEl=t.jsonEl||null;let e=this._rc;this._tree=null,this._answerStore=null,this._rawFhir=null,this._questVariables=null,this._calcFormOk=null,this._viewPrefs=t.viewPrefs||{showLinkId:!0,showPrefix:!0,showBadges:!0,showHiddenItems:!0},this._previewMode=t.previewMode||"preview",this._lastCtx={fp:null,qr:null,env:{}},this._preQR=null,this._preEnvVars=null,this._renderVersion=0,this._renderTimer=null,this._calcCache=null,this._pendingCtx=null,this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._els={},e.viewPrefs=this._viewPrefs,e.lastCtx=this._lastCtx,e.buildControl=(s,a,o)=>this._buildControl(s,a,o),e.isMandatory=ae,e.evalConstraints=Ye,e.CHECKABLE_TYPES=St;let i=({questDoc:s,answerStore:a})=>{this._tree=s.tree,this._answerStore=a,this._rawFhir=s,this._questVariables=s.variables,this._calcFormOk=(o,l)=>Re(o,a,l),e.instancePath=[],e.translations=s.translations,e.calcFormOk=o=>this._calcFormOk(o,e.instancePath),e.updateGroupIcons=()=>ce.updateAll(e),e.getValue=o=>a.get(o,e.instancePath),e.getAll=o=>a.getAll(o,e.instancePath),e.set=(o,l)=>a.set(o,l,e.instancePath),e.remove=o=>a.remove(o,e.instancePath),e.instanceCount=(o,l)=>a.instanceCount(o,l),e.addInstance=(o,l)=>a.addInstance(o,l),e.removeInstance=(o,l,r)=>a.removeInstance(o,l,r),e.evalChildren=(o,l)=>{let r=[];for(let c of o)ke(c,e.ctx,r,!1,l);return r}};if(t.session)i({questDoc:this._session.questDoc,answerStore:this._session.answerStore});else{let s=pe.get(C.APP_CONTEXT_READY);s?.questDoc?i(s):this._bus.on(C.APP_CONTEXT_READY,a=>i(a.detail),{once:!0})}this._bus.on(C.VIEW_PREF_CHANGE,s=>this._onViewPrefChange(s)),this._bus.on(C.PREVIEW_MODE_CHANGE,s=>this._onPreviewModeChange(s)),this._bus.on(C.REINIT_FORM,s=>this.reinitForm({silent:s.detail?.silent})),this._bus.on(C.QUESTIONNAIRE_LOADED,()=>{this._els.lform?.closest(".right-panel-body")?.scrollTo({top:0}),this._chrome.languageMenu.rebuild(this._rawFhir?.translations)}),this._bus.on(C.BUILDER_NAVIGATE,s=>{this._bus.dispatch(C.PREVIEW_NAVIGATE_TO,{id:s.detail.id})}),this._bus.on(C.RESPONSE_CHANGED,()=>{++this._renderVersion,clearTimeout(this._renderTimer),this._renderTimer=setTimeout(()=>this._asyncRender(this._renderVersion),30)}),this._bus.on(C.CALC_RECALC_REQUESTED,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._calcCache=null}),this._bus.on(C.QR_LOADED,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null}),this._bus.on(C.EXPAND_ALL_PREVIEW,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),this._bus.on(C.COLLAPSE_ALL_PREVIEW,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),this._bus.on(C.SDC_POPULATE_REQUESTED,s=>this._populate(s.detail.patientRef)),this._bus.on(C.LANGUAGE_CHANGED,s=>{e.activeLanguage=s.detail?.lang??"",e.translations=this._rawFhir?.translations??{},this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),t.session||(pe.get(C.APP_CONTEXT_READY)?this.mount():this._bus.on(C.APP_CONTEXT_READY,()=>this.mount(),{once:!0}))}getLastCtx(){return this._lastCtx}collapseAll(){this._bus.dispatch(C.COLLAPSE_ALL_PREVIEW)}expandAll(){this._bus.dispatch(C.EXPAND_ALL_PREVIEW)}destroy(){clearTimeout(this._renderTimer)}mount(){let t={lform:this._mountEl||document.querySelector('[data-mount="preview-lform"]'),fhirJsonView:this._jsonEl||document.querySelector('[data-mount="fhir-json-view"]'),leftPanelBody:document.querySelector('[data-mount="left-panel-body"]'),viewOptionsWrap:document.querySelector('[data-mount="viewOptionsWrap"]'),previewModeWrap:document.querySelector('[data-mount="previewModeWrap"]'),searchWrap:document.querySelector('[data-mount="search-wrap"]')};this._els=t;let e=()=>{let s=this._tree.length>0?"":"none";t.viewOptionsWrap&&(t.viewOptionsWrap.style.display=s),t.searchWrap&&(t.searchWrap.style.display=s),t.previewModeWrap&&(t.previewModeWrap.style.display=s)};e(),this._bus.on(C.QUESTIONNAIRE_LOADED,e),this._bus.on(C.QUESTIONNAIRE_NEW,e),this._bus.on(C.QUESTIONNAIRE_CLEARED,e);let i=t.lform;i&&(i.classList.toggle("preview--no-badges",!this._viewPrefs.showBadges),i.classList.toggle("preview--no-linkid",!this._viewPrefs.showLinkId),i.classList.toggle("preview--no-prefix",!this._viewPrefs.showPrefix),i.classList.toggle("preview--no-hidden",!this._viewPrefs.showHiddenItems),i.classList.toggle("patient-view",this._previewMode==="patient"),i.style.display=this._previewMode==="json"?"none":""),t.fhirJsonView&&(t.fhirJsonView.style.display=this._previewMode==="json"?"":"none"),this._asyncRender(++this._renderVersion)}async reinitForm({silent:t=!1}={}){if(!me)return;let e=this._progress;this._calcCache=null,this._pendingCtx=null,this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,t||e.show("Building questionnaire response\u2026"),await Pe();let s=Je({resourceType:"Questionnaire",item:[]},this._answerStore.toValueMap());t||e.show("Evaluating variables\u2026"),await Pe();let a=En(this._questVariables,s,me);t||e.show("Applying initial values\u2026"),await Pe();let o=this._answerStore.toValueMap();wn(this._tree,s,me,o,a),this._answerStore.merge(o),this._preQR=s,this._preEnvVars=a,t||e.show("Refreshing preview\u2026"),await Pe(),this._asyncRender(++this._renderVersion)}_onViewPrefChange(t){this._viewPrefs[t.detail.key]=t.detail.value;let e=this._els.lform;if(!e)return;let i={showBadges:"preview--no-badges",showLinkId:"preview--no-linkid",showPrefix:"preview--no-prefix",showHiddenItems:"preview--no-hidden"}[t.detail.key];i&&e.classList.toggle(i,!t.detail.value),this._lastVisibleSig=null,this._lastRepCounts=null,this._asyncRender(++this._renderVersion)}_onPreviewModeChange(t){this._previewMode=t.detail.mode;let e=this._els.lform;if(e?.classList.toggle("patient-view",this._previewMode==="patient"),e){let i=this._previewMode==="json";e.style.display=i?"none":"",this._els.fhirJsonView&&(this._els.fhirJsonView.style.display=i?"":"none")}this._lastVisibleSig=null,this._lastRepCounts=null,this._asyncRender(++this._renderVersion)}_reCalc(){if(me){let t,e,i=Pt(this._session.questDoc);this._preQR?(t=this._preQR,e=this._preEnvVars,this._preQR=null,this._preEnvVars=null):(t=Je(i,this._answerStore.toValueMap()),e=En(this._questVariables,t,me));let s=this._answerStore.toValueMap();this._calcCache||(this._calcCache=Vi(this._tree,this._questVariables)),Mi(this._tree,t,me,s,e,i,this._calcCache),this._answerStore.merge(s);let a={resource:t,...e};this._lastCtx.fp=me,this._lastCtx.qr=t,this._lastCtx.env=a,this._bus.dispatch(C.FHIRPATH_CTX_UPDATED,{fp:me,qr:t,env:a}),this._bus.dispatch(C.REFRESH_EXPR_ICONS);let o={fp:me,qr:t,envVars:e};return this._pendingCtx=o,o}return{fp:null,qr:null,envVars:{}}}_buildControl(t,e,i){let s=this._rc,a=this._previewMode==="patient",o=s.instancePath&&s.instancePath.length?s.instancePath.slice():void 0,l=()=>{let h=this._calcFormOk(t,o);e&&(e.className=h?"icon-ok":"icon-fail",e.textContent=h?"\u2713":"\u2717"),a&&t._previewEl&&t._previewEl.classList.toggle("lform-item--invalid",!h)},u={getValue:h=>this._answerStore.get(h,o),setValue:(h,p)=>this._bus.dispatch(C.ANSWER_SET,{id:h,value:p,path:o}),onChange:()=>{l(),i&&i()},_reCalc:()=>{this._reCalc(),this._bus.dispatch(C.REFRESH_CALC_BADGES)},bus:this._bus,fhirBase:this._fhirBase(),corsProxy:this._session.config?.corsProxy??ue.get(Z.CORS_PROXY),_fpCtx:this._lastCtx},d=t.buildControl(u);return this._applyA11yLabels(d,t),d&&typeof d.querySelectorAll=="function"&&d.querySelectorAll(".ctrl-err").forEach(h=>{h.setAttribute("role","alert"),h.setAttribute("aria-live","assertive")}),d}_applyA11yLabels(t,e){if(!t||typeof t.querySelectorAll!="function")return;let i=String(e.title||"").replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim();i&&t.querySelectorAll("input, select, textarea").forEach(s=>{s.type!=="hidden"&&(s.getAttribute("aria-label")||s.getAttribute("aria-labelledby")||s.id&&t.querySelector(`label[for="${s.id}"]`)||typeof s.closest=="function"&&s.closest("label")||s.setAttribute("aria-label",i))})}async _asyncRender(t){let e=this._rc,i=this._progress,{search:s,statusBadge:a,languageMenu:o}=this._chrome,l=this._pendingCtx||this._reCalc();if(this._pendingCtx=null,await Pe(),t!==this._renderVersion){i.hide();return}if(this._tree.length===0){let m=this._els.lform;if(m){m.innerHTML="";let x=document.createElement("div");x.className="preview-placeholder",x.dataset.testid="preview-placeholder",x.innerHTML='<div class="preview-placeholder-icon">\u{1F4CB}</div><div class="preview-placeholder-title">No questionnaire loaded</div><div class="preview-placeholder-hint">Use <strong>Questionnaires \u25BE</strong> in the toolbar to load a questionnaire:<br><strong>From file\u2026</strong> \u2014 upload a FHIR R4 or STU3 JSON file from your computer,<br><strong>From Library\u2026</strong> \u2014 pick one of the built-in samples,<br><strong>From Cloud\u2026</strong> \u2014 access your saved questionnaires (sign in required).<br>Or start from scratch: click <strong>+ Add Root Group</strong> in the left panel.</div>',m.appendChild(x)}a.update({visible:[],ctx:null}),i.hide();return}let r=[];for(let m of this._tree)ke(m,l,r);let c=r.filter(m=>m.visible),u=new Map(r.map(m=>[m.node.id,m])),d=l.envVars||{};if(await Pe(),t!==this._renderVersion){i.hide();return}let h=this._els.lform;if(!h){i.hide();return}let p=c.map(m=>{let x=m.node;return`${x.id}|${x.title??""}|${x.itemType??""}|${x.mandatory??""}|${x.logicWithParent??""}|${x._prefix??""}|${x._choiceOrientation??""}|${x._previewCollapsed?"c":"e"}`}).join("\0"),y=r.filter(m=>m.visible&&m.node.repeats),_=new Map(y.map(m=>[m.node.id,this._answerStore.data[m.node.id]?.length??1])),R=m=>{let x=this._answerStore.data[m];return x?JSON.stringify(x).length:0},S=new Map(y.map(m=>[m.node.id,R(m.node.id)])),D=y.map(m=>`${_.get(m.node.id)}:${S.get(m.node.id)}`).join(","),A=p+" "+D,[O="",N=""]=(this._lastVisibleSig??" ").split(" "),b=h.children.length>0;if(p===O&&b){if(e.ctx=l,e.resultMap=u,e.cEnv=d,e.visible=c,D===N){for(let m of r){if(!m.visible)continue;let x=m.node._iconEl;if(!x||!document.contains(x))continue;let{displayOk:k}=m.node._evalCondition?.(m,e)??{displayOk:!0};x.className=k?"icon-ok":"icon-fail",x.textContent=k?"\u2713":"\u2717"}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),i.hide(),this._bus.dispatch(C.PREVIEW_RENDER_DONE);return}e.previewMode=this._previewMode,e.translations=this._rawFhir?.translations??{},e.instancePath=[];for(let m of y){let x=_.get(m.node.id),k=this._lastRepCounts?.get(m.node.id)??1,$=S.get(m.node.id),q=this._lastRepDataSz?.get(m.node.id)??0;if(x===k&&$===q)continue;let z=m.node._previewEl;if(!z||!document.contains(z))continue;let K=z.nextElementSibling,U=document.createDocumentFragment();I.dispatch(m,U,e),z.replaceWith(U),K&&(K.dataset.rgGroup===m.node.id||K.dataset.gtableId===m.node.id)&&K.remove()}this._lastVisibleSig=A,this._lastRepCounts=_,this._lastRepDataSz=S;for(let m of r){if(!m.visible)continue;let x=m.node._iconEl;if(!x||!document.contains(x))continue;let{displayOk:k}=m.node._evalCondition?.(m,e)??{displayOk:!0};x.className=k?"icon-ok":"icon-fail",x.textContent=k?"\u2713":"\u2717"}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),i.hide(),this._bus.dispatch(C.PREVIEW_RENDER_DONE);return}this._lastVisibleSig=A,this._lastRepCounts=_;let P=h.closest(".right-panel-body"),v=P?P.scrollTop:0,T=document.activeElement,w=null;if(T&&h.contains(T)){let m=T.closest("[data-preview-id]");if(m){let x=Array.from(m.querySelectorAll("input, textarea, select"));w={previewId:m.dataset.previewId,inputIndex:x.indexOf(T),selStart:T.selectionStart,selEnd:T.selectionEnd}}}h.innerHTML="";let L=new Map;e.ctx=l,e.resultMap=u,e.cEnv=d,e.visible=c,e.groupIconMap=L,e.previewMode=this._previewMode,e.translations=this._rawFhir?.translations??{},e.instancePath=[];let H=document.createDocumentFragment();for(let m of this._tree){let x=u.get(m.id);x&&I.dispatch(x,H,e)}if(h.appendChild(H),P&&v&&(P.scrollTop=v),w){let m=h.querySelector('[data-preview-id="'+CSS.escape(w.previewId)+'"]');if(m){let k=Array.from(m.querySelectorAll("input, textarea, select"))[w.inputIndex];if(k){k.focus();try{k.setSelectionRange(w.selStart,w.selEnd)}catch{}}}}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),o.rebuild(this._rawFhir?.translations),i.hide(),this._bus.dispatch(C.PREVIEW_RENDER_DONE)}_fhirBase(){return this._session.config?.fhirBaseUrl??ue.get(Z.FHIR_BASE)}async _populate(t){let e=this._progress,i=this._fhirBase();if(!i){_e("No FHIR Base Server configured. Open Settings to set one.");return}e.show("Populating from server\u2026");try{let s=Pt(this._session.questDoc),a=await es(i,s,t),o=this._answerStore.toValueMap(),{loaded:l}=Lt(a,o,this._tree);this._answerStore.replaceAll(o),this._bus.dispatch(C.REINIT_FORM),Gn(`Pre-filled ${l} answer${l!==1?"s":""} from server.`)}catch(s){_e(s.message)}finally{e.hide()}}_updateJsonView(){if(this._previewMode!=="json"||!this._els.fhirJsonView)return;let t=Pt(this._session.questDoc);this._els.fhirJsonView.innerHTML=Ee(JSON.stringify(t,null,2)),this._chrome.search.refresh()}};var Xe=class{constructor({els:t,bus:e=X,previewMode:i="preview"}){this._el=t,this._bus=e,this._matches=[],this._idx=-1,this._previewMode=i,this._ac=new AbortController,this._bus.on(C.PREVIEW_MODE_CHANGE,s=>{this._previewMode=s.detail.mode},{signal:this._ac.signal}),this._wire()}_wire(){let t=this._el,e={signal:this._ac.signal};t.input.addEventListener("input",()=>this._onInput(),e),t.input.addEventListener("keydown",i=>{(i.key==="ArrowDown"||i.key==="Enter")&&(i.preventDefault(),this._navigate(1)),i.key==="ArrowUp"&&(i.preventDefault(),this._navigate(-1)),i.key==="Escape"&&(t.input.value="",this._clear())},e),t.nextBtn.addEventListener("click",()=>this._navigate(1),e),t.prevBtn.addEventListener("click",()=>this._navigate(-1),e),document.addEventListener("keydown",i=>{if((i.ctrlKey||i.metaKey)&&i.key==="f"){if(t.searchWrap&&t.searchWrap.style.display==="none")return;i.preventDefault(),t.input.focus(),t.input.select()}},e)}destroy(){this._ac.abort()}refresh(){this._el.input.value.trim()&&this._onInput()}_onInput(){let t=this._el.input.value.trim().toLowerCase();if(this._clearHighlights(),!t){this._clear();return}this._previewMode==="json"?this._onInputJson(t):this._onInputRows(t)}_onInputRows(t){let e=[...this._el.lform.querySelectorAll("[data-preview-id]")];if(this._matches=e.filter(i=>i.textContent.toLowerCase().includes(t)),this._matches.length===0){this._idx=-1,this._el.counter.textContent="No results",this._el.counter.classList.add("search-counter--empty"),this._el.input.classList.add("search-input--empty");return}this._el.input.classList.remove("search-input--empty"),this._el.counter.classList.remove("search-counter--empty"),this._matches.forEach(i=>i.classList.add("search-match")),this._idx=0,this._activate()}_onInputJson(t){let e=this._el.fhirJsonView.textContent,{html:i,count:s}=Bn(e,t);if(this._el.fhirJsonView.innerHTML=i,s===0){this._idx=-1,this._el.counter.textContent="No results",this._el.counter.classList.add("search-counter--empty"),this._el.input.classList.add("search-input--empty");return}this._el.input.classList.remove("search-input--empty"),this._el.counter.classList.remove("search-counter--empty"),this._matches=[...this._el.fhirJsonView.querySelectorAll("mark.search-match")],this._idx=0,this._activateJson()}_navigate(t){this._matches.length!==0&&(this._idx>=0&&this._idx<this._matches.length&&this._matches[this._idx].classList.remove("search-match--active"),this._idx=(this._idx+t+this._matches.length)%this._matches.length,this._previewMode==="json"?this._activateJson():this._activate())}_activate(){let t=this._matches[this._idx];t.classList.add("search-match--active"),t.scrollIntoView({behavior:"smooth",block:"center"}),this._el.counter.textContent=this._idx+1+" / "+this._matches.length,this._el.counter.classList.remove("search-counter--empty")}_activateJson(){this._matches.forEach((t,e)=>t.classList.toggle("search-match--active",e===this._idx)),this._matches[this._idx].scrollIntoView({behavior:"smooth",block:"center"}),this._el.counter.textContent=this._idx+1+" / "+this._matches.length,this._el.counter.classList.remove("search-counter--empty")}_clearHighlights(){if(this._previewMode==="json"&&this._el.fhirJsonView.querySelector("mark.search-match")){let t=this._el.fhirJsonView.textContent;this._el.fhirJsonView.innerHTML=Ee(t)}else this._matches.forEach(t=>{t.classList.remove("search-match"),t.classList.remove("search-match--active")});this._matches=[],this._idx=-1}_clear(){this._clearHighlights(),this._el.counter.textContent="",this._el.counter.classList.remove("search-counter--empty"),this._el.input.classList.remove("search-input--empty")}},br=null;function Er(){let n={input:document.querySelector('[data-mount="search-input"]'),prevBtn:document.querySelector('[data-mount="search-prev-btn"]'),nextBtn:document.querySelector('[data-mount="search-next-btn"]'),counter:document.querySelector('[data-mount="search-counter"]'),lform:document.querySelector('[data-mount="preview-lform"]'),fhirJsonView:document.querySelector('[data-mount="fhir-json-view"]'),searchWrap:document.querySelector('[data-mount="search-wrap"]')};n.input&&(br=new Xe({els:n,bus:X}))}typeof document<"u"&&Er();var Ke=class{constructor({els:t,bus:e=X,getStore:i}={}){this._btn=t.btn,this._dropdown=t.dropdown,this._wrap=t.wrap,this._bus=e,this._getStore=i||(()=>pe.get(C.APP_CONTEXT_READY)?.answerStore),this._open=!1,this._ac=new AbortController,this._btn.setAttribute("aria-live","polite"),this._btn.setAttribute("aria-atomic","true"),this._btn.addEventListener("click",s=>{s.stopPropagation(),this._open=!this._open,this._dropdown.style.display=this._open?"block":"none"},{signal:this._ac.signal}),document.addEventListener("click",()=>{this._open&&this._close()},{signal:this._ac.signal})}destroy(){this._ac.abort()}update({visible:t,ctx:e}){if(!this._btn)return;let i=this._getStore();if(!i)return;let s=t.length>0,a=e?.fp??null,o=e?.qr??null,l=e?.envVars??{},r=t.filter(v=>!v.disabled&&!v.hidden&&v.node.type==="item"),c=r.filter(v=>ae(v.node)&&St.has(v.node.itemType)),u=c.length>0,d=r.filter(v=>v.node._calculatedExpr&&v.node._readOnly&&v.node.itemType==="checkbox"),h=d.length>0,p=d.every(v=>i?.get(v.node.id)===!0),y=r.filter(v=>v.node.constraint?.length),_=y.length>0,R=y.every(v=>Ye(v.node,a,o,l)),S=r.filter(v=>!ae(v.node)&&(v.node._minValue!==void 0||v.node._maxValue!==void 0)),D=S.length>0,A=S.every(v=>Re(v.node,i)),O=u||h||_||D;if(!s||!O){this._wrap.style.display="none",this._close();return}let N=t.filter(v=>!v.disabled&&!v.hidden).every(v=>v.node.type==="item"?v.ok&&Re(v.node,i):v.ok),b=(u?N:!0)&&(h?p:!0)&&(!_||R)&&(!D||A)&&O,P=[...c.filter(v=>!v.ok||!Re(v.node,i)).map(v=>({title:v.node.title,id:v.node.id})),...d.filter(v=>i?.get(v.node.id)!==!0).map(v=>({title:v.node.title,id:v.node.id})),...y.filter(v=>!Ye(v.node,a,o,l)).map(v=>({title:v.node.title,id:v.node.id})),...S.filter(v=>!Re(v.node,i)).map(v=>({title:v.node.title,id:v.node.id}))];if(this._wrap.style.display="inline-flex",b)this._btn.className="status-badge status-badge--pass",this._btn.textContent="\u2713 PASS";else{let v=P.length;this._btn.className="status-badge status-badge--fail",this._btn.textContent="\u2717 FAIL \xB7 "+v+" issue"+(v!==1?"s":"")}this._renderList(P)}_close(){this._open=!1,this._dropdown&&(this._dropdown.style.display="none")}_renderList(t){if(!this._dropdown)return;if(this._dropdown.innerHTML="",t.length===0){let i=document.createElement("div");i.className="status-dropdown-msg",i.textContent="All criteria met",this._dropdown.appendChild(i);return}let e=document.createElement("div");e.className="status-dropdown-header",e.textContent=t.length+" issue"+(t.length!==1?"s":"")+" to resolve",this._dropdown.appendChild(e),t.forEach((i,s)=>{let a=document.createElement("div");a.className="status-dropdown-row",a.dataset.tipTitle="Click to navigate",a.addEventListener("click",c=>{c.stopPropagation(),this._close(),this._bus.dispatch(C.BUILDER_NAVIGATE,{id:i.id})});let o=document.createElement("span");o.className="status-dropdown-num",o.textContent=s+1+".",a.appendChild(o);let l=document.createElement("span");l.className="status-dropdown-label",l.textContent=i.title,a.appendChild(l);let r=document.createElement("span");r.className="status-dropdown-arrow",r.textContent="\u2197",a.appendChild(r),this._dropdown.appendChild(a)})}},Cr=null;function wr(){let n={btn:document.querySelector('[data-mount="status-badge-btn"]'),dropdown:document.querySelector('[data-mount="status-dropdown"]'),wrap:document.querySelector('[data-mount="status-badge-wrap"]')};n.btn&&(Cr=new Ke({els:n,bus:X}))}typeof document<"u"&&wr();var On=null;function ts(){if(!On)throw new Error("[storage] No adapter registered. Call storage.register() at app startup.")}async function ns(n){return ts(),On.getItem(n)}async function is(n,t){return ts(),On.setItem(n,t)}var rs="tooltips-enabled",de=!0,ss=!1,ne=null;function Rr(n){de=!!n,is(rs,de?"true":"false"),de||xe();let t=document.getElementById("tooltipsOffBadge");t&&(t.style.display=de?"none":"")}function Ft(){if(!ne){ne=document.createElement("div"),ne.className="rich-tooltip",ne.setAttribute("aria-hidden","true");let n=document.createElement("button");n.className="rich-tooltip__close",n.textContent="\xD7",n.setAttribute("aria-label","Close"),n.addEventListener("click",t=>{t.stopPropagation(),xe()}),ne.appendChild(n),document.body.appendChild(ne)}return ne}function as(n){let{tipTitle:t,tipBody:e,tipFhir:i,tipSpec:s}=n.dataset;if(!t&&!e)return!1;let a=Ft();if([...a.children].forEach(o=>{o.classList.contains("rich-tooltip__close")||o.remove()}),t){let o=document.createElement("div");o.className="rich-tooltip__title",o.textContent=t,a.appendChild(o)}if(e){let o=document.createElement("div");o.className="rich-tooltip__body",o.textContent=e,a.appendChild(o)}if(i){let o=document.createElement("div");o.className="rich-tooltip__fhir";let l=document.createElement("span");l.className="rich-tooltip__fhir-badge",l.textContent="FHIR",o.appendChild(l);let r=document.createElement("code");if(r.textContent=i,o.appendChild(r),s){let c=document.createElement("span");c.className="rich-tooltip__spec",c.textContent=s,o.appendChild(c)}a.appendChild(o)}return!0}function Tr(n){let t=Ft(),e=n.getBoundingClientRect(),i=t.offsetWidth||260,s=t.offsetHeight||100,a=e.left+e.width/2-i/2;a=Math.max(8,Math.min(a,window.innerWidth-i-8));let l=window.innerHeight-e.bottom<s+12;t.classList.toggle("rich-tooltip--above",l);let r=l?e.top-s-10:e.bottom+10;t.style.left=a+"px",t.style.top=r+"px"}function Nr(n){de&&as(n)&&(Ft().style.display="block",requestAnimationFrame(()=>Tr(n)))}function xe(){ne&&(ne.style.display="none",ne.classList.remove("rich-tooltip--sheet"),Ze=!1,Dn=null)}var qt=()=>window.innerWidth<1024,Ze=!1,Dn=null;function Ar(n){if(!de||!as(n))return;let t=Ft();t.classList.add("rich-tooltip--sheet"),t.style.left="",t.style.top="",t.style.display="block",Ze=!0,Dn=n}async function os(){if(ss)return;ss=!0;try{de=await ns(rs)!=="false"}catch{de=!0}let n=document.getElementById("tooltipsOffBadge");n&&(n.style.display=de?"none":""),document.addEventListener("mouseover",t=>{if(qt())return;let e=t.target.closest("[data-tip-title],[data-tip-body]");e&&Nr(e)}),document.addEventListener("mouseout",t=>{if(qt())return;t.target.closest("[data-tip-title],[data-tip-body]")&&xe()}),document.addEventListener("click",t=>{if(!qt())return;let e=t.target.closest("[data-tip-title],[data-tip-body]");if(!e){Ze&&ne&&!ne.contains(t.target)&&xe();return}e.closest('button, a, [role="button"], .calc-badge--explain, .preview-condition-hint--explain, .preview-calc-value--explain, .status-dropdown-row, .support-link-patient-btn, .preview-nav-btn')||Ze&&(xe(),e===Dn)||Ar(e)},{capture:!0}),document.addEventListener("click",t=>{qt()||Ze&&ne&&!ne.contains(t.target)&&xe()}),window.addEventListener("scroll",xe,!0),window.addEventListener("resize",xe),document.dispatchEvent(new CustomEvent(C.TIPS_INIT_DONE,{detail:{enabled:de}}))}typeof document<"u"&&document.addEventListener(C.TIPS_TOGGLED,n=>Rr(n.detail?.enabled));var Ut=Object.freeze({search:Object.freeze({refresh(){}}),statusBadge:Object.freeze({update(){}}),languageMenu:Object.freeze({rebuild(){}})}),kn=class{constructor(){this._map=new Map}on(t,e){return(this._map.get(t)??this._map.set(t,new Set).get(t)).add(e),this}off(t,e){return this._map.get(t)?.delete(e),this}emit(t,e){for(let i of this._map.get(t)??[])i(e)}},In=class{constructor(t,{questionnaire:e=null,response:i=null,config:s={}}={}){this.mountEl=t,this._config=s,this._emitter=new kn,this._session=Fn(s);let a=this._session.bus;this._terminology=new Ge(new Ve({[Z.TERMINOLOGY_SERVER]:s.terminology?.server,[Z.CORS_PROXY]:s.terminology?.corsProxy,[Z.NLM_API_BASE]:s.terminology?.nlmApiBase}));let o=s.onProgress?{show:c=>s.onProgress(c),hide:()=>s.onProgress(null)}:{show(){},hide(){}};t.innerHTML="",this._lformEl=document.createElement("div"),this._lformEl.className="preview-card",this._jsonEl=document.createElement("pre"),this._jsonEl.className="fhir-json-view",this._jsonEl.style.display="none",s.tooltips&&os();let l=this._buildChrome(s,a);this._chrome=l,t.append(this._lformEl,this._jsonEl);let r=Ht();r.showNavBtn=!!s.navButton,r.showExplain=!!s.explain,this._renderer=new Bt({session:this._session,rc:r,chrome:l,progress:o,mountEl:this._lformEl,jsonEl:this._jsonEl,previewMode:s.previewMode,viewPrefs:s.viewPrefs}),this._offs=[a.on(C.RESPONSE_CHANGED,()=>this._emitter.emit("response-changed",this.getResponse())),a.on(C.PREVIEW_RENDER_DONE,()=>this._emitter.emit("render")),a.on(C.LANGUAGE_CHANGED,c=>this._emitter.emit("language-changed",c.detail?.lang??""))],this._renderer.mount(),e&&this._loadQuestionnaire(e),i&&this.setResponse(i),s.language&&this.setLanguage(s.language),Promise.resolve().then(()=>this._emitter.emit("ready"))}_loadQuestionnaire(t){Oi(t,{questDoc:this._session.questDoc,bus:this._session.bus}),this._expandValueSets()}async _expandValueSets(){await this._terminology.expandAll(this._session.questDoc.tree,this._session.questDoc.meta),this._session.bus.dispatch(C.REINIT_FORM,{silent:!0})}_buildChrome(t,e){let i=!!t.search,s=!!t.validation;if(!i&&!s)return Ut;let a=document.createElement("div");a.className="fhir-toolbar";let o=Ut.search;if(i){let c=document.createElement("div");c.className="search-wrap";let u=document.createElement("input");u.type="search",u.className="search-input",u.placeholder="\u{1F50D} Search\u2026",u.autocomplete="off",u.setAttribute("data-testid","preview-search-input");let d=document.createElement("button");d.type="button",d.className="search-nav-btn",d.textContent="\u2191";let h=document.createElement("button");h.type="button",h.className="search-nav-btn",h.textContent="\u2193";let p=document.createElement("span");p.className="search-counter",c.append(u,d,h,p),a.appendChild(c),o=new Xe({els:{input:u,prevBtn:d,nextBtn:h,counter:p,lform:this._lformEl,fhirJsonView:this._jsonEl,searchWrap:c},bus:e,previewMode:t.previewMode})}let l=document.createElement("span");l.className="fhir-toolbar-sep",a.appendChild(l);let r=Ut.statusBadge;if(s){let c=document.createElement("span");c.className="status-badge-wrap",c.style.display="none";let u=document.createElement("button");u.type="button",u.className="status-badge",u.setAttribute("data-testid","status-badge-btn");let d=document.createElement("div");d.className="status-dropdown",d.style.display="none",c.append(u,d),a.appendChild(c),r=new Ke({els:{btn:u,dropdown:d,wrap:c},bus:e,getStore:()=>this._session.answerStore})}return this.mountEl.appendChild(a),{search:o,statusBadge:r,languageMenu:Ut.languageMenu}}on(t,e){return this._emitter.on(t,e),this}off(t,e){return this._emitter.off(t,e),this}getResponse(){let t=this._session.questDoc.rawFhir||{resourceType:"Questionnaire",item:[]};return Je(t,this._session.answerStore.toValueMap())}setResponse(t){let e=this._session.answerStore.toValueMap();Lt(t,e,this._session.questDoc.tree),this._session.answerStore.replaceAll(e),this._session.bus.dispatch(C.QR_LOADED,{}),this._session.bus.dispatch(C.RESPONSE_CHANGED)}setLanguage(t){this._session.bus.dispatch(C.LANGUAGE_CHANGED,{lang:t})}setConfig(t){Object.assign(this._config,t),t.language!==void 0&&this.setLanguage(t.language)}destroy(){this._offs?.forEach(e=>e()),this._offs=null;let t=e=>{for(let i of e||[])i.destroy?.(),t(i.children)};t(this._session?.questDoc?.tree),this._chrome?.search?.destroy?.(),this._chrome?.statusBadge?.destroy?.(),this._renderer?.destroy?.(),this.mountEl&&(this.mountEl.innerHTML=""),this._renderer=null,this._session=null,this._chrome=null,this._emitter=null}};return fs(Or);})();
|
|
39
|
+
`}var Tn=class{constructor(){this._validators=[]}register(t){this._validators.push(t)}getAll(){return[...this._validators]}async runAll(t,e,i={}){return Promise.all(this._validators.map(s=>s.run(t,e,i).then(a=>({validator:s,issues:a,error:null})).catch(a=>({validator:s,issues:[],error:a}))))}},Ji=new Tn;var Vt=class{constructor(){this.enabled=!0,typeof document<"u"&&document.addEventListener(w.VALIDATOR_TOGGLE,t=>{t.detail?.id===this.id&&(this.enabled=t.detail.enabled)})}get id(){return""}get name(){throw new Error("Validator.name must be implemented")}get type(){return"local"}async run(t,e,i){return this.enabled?this._run(t,e,i):[]}async _run(t,e,i){return[]}};var xc=p.itemControl,gr=te.redcapNs,_r=new Set([p.answerExpression,p.initialExpression,p.choiceColumn,p.itemContext,p.constraint,p.variable]);function zi(n,t,e=0){for(let i of n||[])t(i,e),i.item&&zi(i.item,t,e+1)}function ye(n){return(n.extension||[]).some(t=>t.url.startsWith(gr))}var Mt=class extends Vt{constructor(){super(),this.enabled=!1}get id(){return"redcap-compat"}get name(){return"REDCap Compatibility"}get type(){return"local"}async _run(t,e,i){if(!t)return[];let s=[],a=0;return zi(t.item,(o,l)=>{let r=o.linkId||"(unknown)";if(o.type==="group"&&(l>a&&(a=l),l>=2&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`Group "${o.text||r}" is nested at depth ${l+1}. REDCap supports at most 2 levels (Form \u2192 Section). It will be flattened into its parent section.`})),o.type!=="group"){if(o.answerValueSet&&!ye(o)&&s.push({severity:"error",nodeId:r,message:`"${o.text||r}": answerValueSet by URL ("${o.answerValueSet}") cannot be represented in REDCap \u2014 choices must be inline. The field will be exported with empty choices.`}),o.code&&o.code.length>0&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": item.code (FHIR Coding) has no REDCap equivalent and will be dropped.`}),o.enableWhenExpression&&!ye(o)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": FHIRPath-based enableWhenExpression cannot be translated to REDCap branching logic. The branching condition will be lost.`}),!ye(o)&&o.enableWhen&&o.enableWhen.length>1){let c=o.enableBehavior==="all"||!o.enableBehavior,d=o.enableBehavior==="any";!c&&!d&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": enableBehavior "${o.enableBehavior}" is not supported in REDCap. Branching logic may be incorrect.`})}if(!ye(o)){for(let c of o.extension||[])if(_r.has(c.url)){let d=c.url.split("/").pop();s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": extension "${d}" has no REDCap equivalent and will be dropped.`})}}ye(o)||(o.type==="reference"&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": type "reference" (FHIR resource reference) has no REDCap equivalent \u2014 will be exported as a text field.`}),o.type==="quantity"&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": type "quantity" (value + unit) has no direct REDCap equivalent \u2014 will be exported as a text field. Consider splitting into two fields.`})),ye(o)||(o.extension||[]).find(d=>d.url===p.calculatedExpression)&&s.push({severity:"warning",nodeId:r,message:`"${o.text||r}": calculatedExpression uses FHIRPath \u2014 stored as a REDCap calc formula annotation. Manual adjustment in REDCap will be required.`})}}),s}};var ze=new Mt;Ji.register(ze);fe.register({id:"redcap",label:"REDCap CSV \u2014 Data Dictionary (.csv)",isBuilderVersion:!1,metaVersion:null,ext:"csv",mimeType:"text/csv;charset=utf-8;",reportTitle:"REDCap Export \u2014 Compatibility Report",validatorFilter:n=>n.type!=="external",build(n){return Rn(n)},onBeforeReport(){ze.enabled=!0},onAfterExport(){ze.enabled=!1},onCancel(){ze.enabled=!1}});var Xi="http://unitsofmeasure.org",Nn={system:Xi,valueSet:Xi+"/vs"};var vr="http://www.w3.org",Ki={xhtml:vr+"/1999/xhtml"};function he(n){return String(n||"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function yr(n){let t=[];t.push(`<tr><td><b>Status</b></td><td>${he(n.status)}</td></tr>`),n.date&&t.push(`<tr><td><b>Date</b></td><td>${he(n.date)}</td></tr>`),n.version&&t.push(`<tr><td><b>Version</b></td><td>${he(n.version)}</td></tr>`),n.publisher&&t.push(`<tr><td><b>Publisher</b></td><td>${he(n.publisher)}</td></tr>`),n.description&&t.push(`<tr><td><b>Description</b></td><td>${he(n.description)}</td></tr>`);let e=[];function i(a,o){for(let l of a||[]){let r="\xA0\xA0\xA0\xA0".repeat(o);e.push(`<tr><td>${he(l.linkId)}</td><td>${r}${he(l.text)}</td><td>${he(l.type)}</td></tr>`),l.item&&i(l.item,o+1)}}i(n.item,0);let s=['<div xmlns="'+Ki.xhtml+'">',`<h2>${he(n.title||n.id||"Questionnaire")}</h2>`,`<table><tbody>${t.join("")}</tbody></table>`];return e.length&&s.push(`<table><thead><tr><th>LinkId</th><th>Text</th><th>Type</th></tr></thead><tbody>${e.join("")}</tbody></table>`),s.push("</div>"),s.join("")}function Zi(n){return n==="checkbox"?"boolean":n==="integer"?"integer":n==="decimal"||n==="number"?"decimal":n==="quantity"?"quantity":n==="select"||n==="radio"||n==="checklist"?"choice":n==="open-choice"?"open-choice":n==="display"?"display":n==="date"?"date":n==="dateTime"?"dateTime":n==="time"?"time":n==="url"?"url":n==="attachment"?"attachment":n==="reference"?"reference":"string"}function xr(n){return!n||!n.length?[]:n.filter(t=>t.expression).map(t=>({url:p.constraint,extension:[...t.key?[{url:"key",valueId:t.key}]:[],...t.severity?[{url:"severity",valueCode:t.severity}]:[],{url:"expression",valueString:t.expression},...t.human?[{url:"human",valueString:t.human}]:[]]}))}function On(n){let t={linkId:n.id,text:n.title,type:n.type==="group"?"group":Zi(n.itemType)};n._prefix&&(t.prefix=n._prefix),n._definition&&(t.definition=n._definition),n._baseType&&(t.extension=t.extension||[],t.extension.push({url:p.baseType,valueCode:n._baseType})),n._fhirType&&(t.extension=t.extension||[],t.extension.push({url:p.fhirType,valueString:n._fhirType})),n._codes&&n._codes.length&&n.itemType!=="display"&&(t.code=n._codes),n.mandatory===!0&&n.itemType!=="display"&&(t.required=!0);let e=n.type==="item"&&(n.options||n._rawAnswerOptions||n._answerValueSet||n._answerExpression||n._candidateExpression);if(n.type==="item"&&n.itemType!=="display"&&!e){let r=Zi(n.itemType),c=d=>{if(r==="boolean")return{valueBoolean:typeof d=="boolean"?d:d==="true"};if(r==="decimal"){let u=parseFloat(d);return isFinite(u)?{valueDecimal:u}:null}if(r==="integer"){let u=parseInt(d,10);return isFinite(u)?{valueInteger:u}:null}if(r==="date")return{valueDate:String(d)};if(r==="dateTime")return{valueDateTime:String(d)};if(r==="time")return{valueTime:String(d)};if(r==="url")return{valueUri:String(d)};if(r==="reference"){let u=d&&typeof d=="object"?d.reference:typeof d=="string"?d:"";return u?{valueReference:{reference:u}}:null}return r==="choice"?{valueCoding:{code:String(d),display:String(d)}}:{valueString:String(d)}};if(n.repeats&&n._initialValues&&n._initialValues.length>1){let d=n._initialValues.map(c).filter(Boolean);d.length&&(t.initial=d)}else if(n._initialValue!==void 0&&n._initialValue!==""){let d=c(n._initialValue);d&&(t.initial=[d])}}n.enableWhen&&n.enableWhen.length&&(t.enableWhen=n.enableWhen.map(r=>({...r})),(n.enableWhen.length>1||n.enableBehavior==="any")&&(t.enableBehavior=n.enableBehavior==="any"?"any":"all"));let i=[];n.enableWhenExpression&&i.push({url:p.enableWhenExpression,valueExpression:{language:"text/fhirpath",expression:n.enableWhenExpression}});let s=(n.constraint||[]).filter(r=>r.key!==Be);if(i.push(...xr(s)),n.type==="group"&&n.logicWithParent==="OR"&&n.children.length>0){let r=n.children.map(c=>`%resource.item.where(linkId='${c.id.replace(/\\/g,"\\\\").replace(/'/g,"\\'")}').answer.exists()`).join(" or ");i.push({url:p.constraint,extension:[{url:"key",valueId:Be},{url:"severity",valueCode:"error"},{url:"human",valueString:"At least one item in this group must be completed"},{url:"expression",valueString:r}]})}if(n.itemType==="reference"&&n.referenceResource&&i.push({url:p.referenceResource,valueCode:n.referenceResource}),n.itemType==="reference"&&n._referenceFilter&&i.push({url:p.referenceFilter,valueString:n._referenceFilter}),n.itemType==="reference"&&n._referenceProfiles?.length)for(let r of n._referenceProfiles)i.push({url:p.referenceProfile,valueCanonical:r});if((n.itemType==="integer"||n.itemType==="decimal")&&n.quantityUnit&&i.push({url:p.unit,valueCoding:{system:Nn.system,code:n.quantityUnit}}),n.itemType==="quantity"&&n.quantityUnit&&!n._unitOptions?.length&&i.push({url:p.unitOption,valueCoding:{system:Nn.system,code:n.quantityUnit}}),n.itemType==="quantity"&&n._unitValueSet&&i.push({url:p.unitValueSet,valueCanonical:n._unitValueSet}),n.itemType==="quantity"&&n._unitOptions&&n._unitOptions.length)for(let r of n._unitOptions){let c={};r.system&&(c.system=r.system),r.code&&(c.code=r.code),r.display&&(c.display=r.display),i.push({url:p.unitOption,valueCoding:c})}n._calculatedExpr&&i.push({url:p.calculatedExpression,valueExpression:{language:"text/fhirpath",expression:n._calculatedExpr}}),n._initialExpr&&i.push({url:p.initialExpression,valueExpression:{language:"text/fhirpath",expression:n._initialExpr}});for(let{url:r,prop:c}of ot)n[c]&&i.push({url:r,valueExpression:{language:"text/fhirpath",expression:n[c]}});n.itemType==="radio"?i.push({url:p.itemControl,valueCodeableConcept:{coding:[{system:p.itemControlCS,code:n._itemControl==="atable"?"atable":"radio-button"}]}}):n.itemType==="checklist"?i.push({url:p.itemControl,valueCodeableConcept:{coding:[{system:p.itemControlCS,code:n._itemControl==="atable"?"atable":"check-box"}]}}):n._itemControl&&i.push({url:p.itemControl,valueCodeableConcept:{coding:[{system:p.itemControlCS,code:n._itemControl}]}});let a=[];n._renderStyle&&a.push({url:p.renderingStyle,valueString:n._renderStyle}),n._renderXhtml&&a.push({url:p.renderingXhtml,valueString:n._renderXhtml}),n._renderMarkdown&&a.push({url:p.renderingMarkdown,valueMarkdown:n._renderMarkdown}),a.length&&(t._text={extension:a}),n.type==="group"?t.item=n.children.map(On):(n.itemType==="select"||n.itemType==="radio"||n.itemType==="open-choice"||n.itemType==="checklist")&&(n.options||n._rawAnswerOptions)&&!n._answerValueSet&&!n._answerExpression&&!n._candidateExpression&&(n._rawAnswerOptions?t.answerOption=n._rawAnswerOptions.map(r=>{let c=r.valueCoding?r.valueCoding.code||r.valueCoding.display||"":r.valueString!==void 0?r.valueString:r.valueInteger!==void 0?String(r.valueInteger):r.valueDate!==void 0?r.valueDate:r.valueTime!==void 0?r.valueTime:r.valueReference?typeof r.valueReference=="string"?r.valueReference:r.valueReference.reference||"":"",d={...r},u=new Set([p.ordinalValue,p.optionPrefix,p.optionExclusive,p.itemWeight,p.answerMedia]),f=(r.extension||[]).filter(h=>!u.has(h.url));return n._optionOrdinals?.[c]!==void 0&&f.push({url:p.ordinalValue,valueDecimal:n._optionOrdinals[c]}),n._optionPrefixes?.[c]&&f.push({url:p.optionPrefix,valueString:n._optionPrefixes[c]}),n._optionExclusives?.[c]&&f.push({url:p.optionExclusive,valueBoolean:!0}),n._optionWeights?.[c]!==void 0&&f.push({url:p.itemWeight,valueDecimal:n._optionWeights[c]}),n._answerMedias?.[c]&&f.push({url:p.answerMedia,valueAttachment:n._answerMedias[c]}),f.length&&(d.extension=f),n._initialSelected===c&&(d.initialSelected=!0),d}):t.answerOption=nt(n.options).map(({code:r,display:c})=>{let u={valueCoding:{...n._optionSystems?.[r]?{system:n._optionSystems[r]}:{},code:r,display:c}},f=[];return n._optionOrdinals&&n._optionOrdinals[r]!==void 0&&f.push({url:p.ordinalValue,valueDecimal:n._optionOrdinals[r]}),n._optionPrefixes&&n._optionPrefixes[r]!==void 0&&f.push({url:p.optionPrefix,valueString:n._optionPrefixes[r]}),n._optionExclusives&&n._optionExclusives[r]&&f.push({url:p.optionExclusive,valueBoolean:!0}),n._optionWeights&&n._optionWeights[r]!==void 0&&f.push({url:p.itemWeight,valueDecimal:n._optionWeights[r]}),n._answerMedias&&n._answerMedias[r]&&f.push({url:p.answerMedia,valueAttachment:n._answerMedias[r]}),f.length&&(u.extension=f),n._initialSelected===r&&(u.initialSelected=!0),u}));let o=new Set(["checkbox","decimal","integer","number","text","url","open-choice"]);if(n._maxLength!==void 0&&n._maxLength!==null&&o.has(n.itemType)&&(t.maxLength=n._maxLength),n.type==="item"&&n.children?.length>0&&(t.item=n.children.map(On)),n._answerConstraint&&(t.answerConstraint=n._answerConstraint),n._minLength!==void 0&&n._minLength!==null&&i.push({url:p.minLength,valueInteger:n._minLength}),n._regex&&i.push({url:p.regex,valueString:n._regex}),n._maxFileSizeMB!==void 0&&n._maxFileSizeMB!==null&&i.push({url:p.maxSize,valueDecimal:n._maxFileSizeMB}),n._mimeTypes&&n._mimeTypes.length)for(let r of n._mimeTypes)r&&i.push({url:p.mimeType,valueCode:r});if(n._entryFormat&&i.push({url:p.entryFormatSdc,valueString:n._entryFormat}),n._choiceOrientation&&i.push({url:p.choiceOrientation,valueCode:n._choiceOrientation}),Number.isInteger(n._columnCount)&&n._columnCount>1&&i.push({url:p.columnCount,valueInteger:n._columnCount}),n._choiceColumns&&n._choiceColumns.length)for(let r of n._choiceColumns){let c=[];r.path&&c.push({url:"path",valueString:r.path}),r.label&&c.push({url:"label",valueString:r.label}),r.width&&c.push({url:"width",valueQuantity:r.width}),r.forDisplay!==void 0&&c.push({url:"forDisplay",valueBoolean:r.forDisplay}),i.push({url:p.choiceColumn,extension:c})}if(n._supportLinks&&n._supportLinks.length)for(let r of n._supportLinks)r&&i.push({url:p.supportLink,valueUri:r});if(n._hidden&&i.push({url:p.hiddenSdc,valueBoolean:!0}),n._isSubject&&n.type==="item"&&n.itemType!=="display"&&i.push({url:p.isSubject,valueBoolean:!0}),n._observationExtract!=null&&n.itemType!=="display"&&i.push({url:p.observationExtract,valueBoolean:n._observationExtract!==!1}),n.type==="group"&&n._collapsible&&i.push({url:p.collapsible,valueCode:n._collapsible}),n.itemType==="open-choice"&&n._openLabel&&i.push({url:p.openLabel,valueString:n._openLabel}),n._preferredTermServer&&i.push({url:p.preferredTerminologyServer,valueUrl:n._preferredTermServer}),n._shortText&&i.push({url:p.shortText,valueString:n._shortText}),n._designNote&&i.push({url:p.designNote,valueMarkdown:n._designNote}),n._usageMode&&i.push({url:p.usageMode,valueCode:n._usageMode}),n._signatureRequired?.length)for(let r of n._signatureRequired)i.push({url:p.signatureRequired,valueCodeableConcept:{coding:[{system:r.system,code:r.code,display:r.display}]}});if(n._itemMedia&&i.push({url:p.itemMedia,valueAttachment:n._itemMedia}),n._displayCategory&&n.itemType!=="display"&&i.push({url:p.displayCategory,valueCodeableConcept:{coding:[{system:p.displayCategoryCS,code:n._displayCategory}]}}),n._minValue!==void 0){let r=Number.isInteger(n._minValue);i.push({url:p.minValue,[r?"valueInteger":"valueDecimal"]:n._minValue})}if(n._maxValue!==void 0){let r=Number.isInteger(n._maxValue);i.push({url:p.maxValue,[r?"valueInteger":"valueDecimal"]:n._maxValue})}let l=new Set(["select","radio","checklist","open-choice","decimal","integer","number","text","date","dateTime","time","quantity"]);if(n.type==="item"&&n._answerValueSet&&l.has(n.itemType)&&(t.answerValueSet=n._answerValueSet),n._readOnly&&n.itemType!=="display"&&(t.readOnly=!0),n._disabledDisplay&&(t.disabledDisplay=n._disabledDisplay),(n.repeats||n.itemType==="checklist")&&n.itemType!=="display"&&(t.repeats=!0),n.repeats&&n._minOccurs!==void 0&&n.itemType!=="display"&&n.required&&i.push({url:p.minOccurs,valueInteger:n._minOccurs}),n.repeats&&n._maxOccurs!==void 0&&i.push({url:p.maxOccurs,valueInteger:n._maxOccurs}),n._maxDecimalPlaces!==void 0&&i.push({url:p.maxDecimalPlaces,valueInteger:n._maxDecimalPlaces}),n._sliderStep!==void 0){let c=Number.isInteger(n._sliderStep)?n._sliderStep:Math.round(n._sliderStep);i.push({url:p.sliderStepValue,valueInteger:c})}return n._unknownExtensions&&n._unknownExtensions.length&&i.push(...n._unknownExtensions.map(r=>JSON.parse(JSON.stringify(r)))),i.length&&(t.extension=i),t}function Pt(n=pe.get(w.APP_CONTEXT_READY)?.questDoc){let{tree:t,meta:e,rawFhir:i,variables:s,contained:a,translations:o}=n,l=p.variable,r={resourceType:"Questionnaire",id:e.id||"logic-builder-export",status:e.status||"draft",item:t.map(On)};if(e.url&&(r.url=e.url),e.version&&(r.version=e.version),r.title=e.title||i&&i.title||"Untitled Questionnaire",e.name&&(r.name=e.name),e.publisher&&(r.publisher=e.publisher),e.description&&(r.description=e.description),e.experimental!==null&&(r.experimental=e.experimental),e._implicitRules&&(r.implicitRules=e._implicitRules),e.language&&(r.language=e.language),e.purpose&&(r.purpose=e.purpose),e.copyright&&(r.copyright=e.copyright),e.copyrightLabel&&(r.copyrightLabel=e.copyrightLabel),e._versionAlgorithmString?r.versionAlgorithmString=e._versionAlgorithmString:e._versionAlgorithmCoding&&(r.versionAlgorithmCoding=JSON.parse(JSON.stringify(e._versionAlgorithmCoding))),e.approvalDate&&(r.approvalDate=e.approvalDate),e.lastReviewDate&&(r.lastReviewDate=e.lastReviewDate),r.date=e.date||new Date().toISOString().split("T")[0],e.subjectType?.length&&(r.subjectType=[...e.subjectType]),e._rawIdentifier?.length&&(r.identifier=JSON.parse(JSON.stringify(e._rawIdentifier))),r.text=e._rawText?{status:e._rawText.status,div:e._rawText.div}:{status:"generated",div:yr(r)},e._rawContact&&(r.contact=e._rawContact),e._rawUseContext&&(r.useContext=e._rawUseContext),e._rawJurisdiction&&(r.jurisdiction=e._rawJurisdiction),e._rawCode&&(r.code=e._rawCode),e._rawModifierExtension?.length&&(r.modifierExtension=JSON.parse(JSON.stringify(e._rawModifierExtension))),e.derivedFrom?.length&&(r.derivedFrom=e.derivedFrom),e.effectivePeriodStart||e.effectivePeriodEnd){let h={};e.effectivePeriodStart&&(h.start=e.effectivePeriodStart),e.effectivePeriodEnd&&(h.end=e.effectivePeriodEnd),r.effectivePeriod=h}let c=s.filter(h=>h.name&&h.expression),d=p.replaces,u=[...c.map(h=>({url:l,valueExpression:{name:h.name,language:"text/fhirpath",expression:h.expression}})),...(e.replaces||[]).filter(h=>h.trim()).map(h=>({url:d,valueCanonical:h.trim()})),...e.preferredTermServer?.trim()?[{url:p.preferredTerminologyServer,valueUrl:e.preferredTermServer.trim()}]:[],...(e._signatureRequired||[]).map(h=>({url:p.signatureRequired,valueCodeableConcept:{coding:[{system:h.system,code:h.code,display:h.display}]}})),...(e.launchContexts||[]).filter(h=>h.name.trim()).map(h=>({url:p.launchContext,extension:[{url:"name",valueCoding:{system:p.launchContextCS,code:h.name.trim()}},...h.type.trim()?[{url:"type",valueCode:h.type.trim()}]:[],...h.description.trim()?[{url:"description",valueString:h.description.trim()}]:[]]})),...(e._rawQuestExtensions||[]).map(h=>JSON.parse(JSON.stringify(h)))];return u.length&&(r.extension=u),a.length&&(r.contained=a.map(h=>JSON.parse(JSON.stringify(h)))),(e._metaVersionId||e._metaSource||e._metaLastUpdated||e._rawMetaProfile?.length||e._rawMetaTag?.length||e._rawMetaSecurity?.length)&&(r.meta={lastUpdated:new Date().toISOString()},e._metaVersionId&&(r.meta.versionId=e._metaVersionId),e._metaSource&&(r.meta.source=e._metaSource),e._rawMetaProfile?.length&&(r.meta.profile=e._rawMetaProfile),e._rawMetaTag?.length&&(r.meta.tag=e._rawMetaTag),e._rawMetaSecurity?.length&&(r.meta.security=e._rawMetaSecurity)),br(r,o),r}var es=p.translation;function br(n,t){if(!t||!Object.keys(t).length)return;let e=Object.keys(t),i=e.filter(r=>t[r].title).map(r=>An(r,t[r].title));i.length&&(n._title=n._title||{},n._title.extension=Ln(n._title.extension||[],i));function s(r){for(let c of r||[]){let d=e.filter(u=>t[u].items[c.linkId]!=null).map(u=>An(u,t[u].items[c.linkId]));d.length&&(c._text=c._text||{},c._text.extension=Ln(c._text.extension||[],d));for(let u of c.answerOption||[]){let f=u.valueCoding?.code||u.valueString||u.valueInteger?.toString();if(!f)continue;let h=c.linkId+"__"+f,_=e.filter(v=>t[v].opts[h]!=null).map(v=>An(v,t[v].opts[h]));_.length&&u.valueCoding&&(u._valueCoding=u._valueCoding||{},u._valueCoding._display=u._valueCoding._display||{},u._valueCoding._display.extension=Ln(u._valueCoding._display.extension||[],_))}s(c.item)}}s(n.item);let a=te.uiTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==a);for(let r of e){let c=t[r].ui;!c||!Object.keys(c).length||n.extension.push({url:a,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}n.extension.length||delete n.extension;let o=te.xhtmlTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==o);for(let r of e){let c=t[r].xhtml;!c||!Object.keys(c).length||n.extension.push({url:o,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}let l=te.markdownTranslations;n.extension=(n.extension||[]).filter(r=>r.url!==l);for(let r of e){let c=t[r].markdown;!c||!Object.keys(c).length||n.extension.push({url:l,extension:[{url:"lang",valueCode:r},{url:"strings",valueString:JSON.stringify(c)}]})}n.extension.length||delete n.extension}function An(n,t){return{url:es,extension:[{url:"lang",valueCode:n},{url:"content",valueString:t}]}}function Ln(n,t){return[...(n||[]).filter(i=>i.url!==es),...t]}async function ts(n,t,e){let a=`${(de.get(Z.SDC_SERVER)||n).replace(/\/$/,"")}/Questionnaire/$populate`,o=pn(a),l=JSON.stringify({resourceType:"Parameters",parameter:[{name:"questionnaire",resource:t},{name:"subject",valueReference:{reference:e}}]}),r=await fetch(o,{method:"POST",headers:{"Content-Type":"application/fhir+json",Accept:"application/fhir+json"},body:l,signal:AbortSignal.timeout(3e4)});if(!r.ok){let d=await r.text().catch(()=>""),u=d.substring(0,150);try{let _=JSON.parse(d)?.issue?.[0];u=_?.diagnostics||_?.details?.text||u}catch{}let f=r.status===400||r.status===404?" (This server may not support the SDC $populate operation.)":"";throw new Error(`$populate: HTTP ${r.status}${u?" \u2014 "+u:""}${f}`)}let c=await r.json();if(c.resourceType==="QuestionnaireResponse")return c;if(c.resourceType==="Parameters"){let d=c.parameter?.find(u=>u.name==="questionnaire-response"||u.name==="response"||u.name==="return");if(d?.resource?.resourceType==="QuestionnaireResponse")return d.resource;throw new Error("$populate Parameters response did not contain a QuestionnaireResponse")}throw new Error(`$populate returned unexpected resourceType: ${c.resourceType}`)}var me=window.fhirpath;function Pe(){return typeof document<"u"&&document.hidden?new Promise(n=>setTimeout(n,0)):new Promise(n=>requestAnimationFrame(()=>requestAnimationFrame(n)))}var Bt=class{constructor(t={}){this._session=t.session||Wn,this._bus=this._session.bus,this._rc=t.rc||$n,this._rc.bus=this._bus,this._progress=t.progress||{show(){},hide(){}},this._chrome={search:{refresh(){}},statusBadge:{update(){}},languageMenu:{rebuild(){}},...t.chrome||{}},this._mountEl=t.mountEl||null,this._jsonEl=t.jsonEl||null;let e=this._rc;this._tree=null,this._answerStore=null,this._rawFhir=null,this._questVariables=null,this._calcFormOk=null,this._viewPrefs=t.viewPrefs||{showLinkId:!0,showPrefix:!0,showBadges:!0,showHiddenItems:!0},this._previewMode=t.previewMode||"preview",this._lastCtx={fp:null,qr:null,env:{}},this._preQR=null,this._preEnvVars=null,this._renderVersion=0,this._renderTimer=null,this._calcCache=null,this._pendingCtx=null,this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._els={},e.viewPrefs=this._viewPrefs,e.lastCtx=this._lastCtx,e.buildControl=(s,a,o)=>this._buildControl(s,a,o),e.isMandatory=ae,e.evalConstraints=Ye,e.CHECKABLE_TYPES=St;let i=({questDoc:s,answerStore:a})=>{this._tree=s.tree,this._answerStore=a,this._rawFhir=s,this._questVariables=s.variables,this._calcFormOk=(o,l)=>Re(o,a,l),e.instancePath=[],e.translations=s.translations,e.calcFormOk=o=>this._calcFormOk(o,e.instancePath),e.updateGroupIcons=()=>ce.updateAll(e),e.getValue=o=>a.get(o,e.instancePath),e.getAll=o=>a.getAll(o,e.instancePath),e.set=(o,l)=>a.set(o,l,e.instancePath),e.remove=o=>a.remove(o,e.instancePath),e.instanceCount=(o,l)=>a.instanceCount(o,l),e.addInstance=(o,l)=>a.addInstance(o,l),e.removeInstance=(o,l,r)=>a.removeInstance(o,l,r),e.evalChildren=(o,l)=>{let r=[];for(let c of o)ke(c,e.ctx,r,!1,l);return r}};if(t.session)i({questDoc:this._session.questDoc,answerStore:this._session.answerStore});else{let s=pe.get(w.APP_CONTEXT_READY);s?.questDoc?i(s):this._bus.on(w.APP_CONTEXT_READY,a=>i(a.detail),{once:!0})}this._bus.on(w.VIEW_PREF_CHANGE,s=>this._onViewPrefChange(s)),this._bus.on(w.PREVIEW_MODE_CHANGE,s=>this._onPreviewModeChange(s)),this._bus.on(w.REINIT_FORM,s=>this.reinitForm({silent:s.detail?.silent})),this._bus.on(w.QUESTIONNAIRE_LOADED,()=>{this._els.lform?.closest(".right-panel-body")?.scrollTo({top:0}),this._chrome.languageMenu.rebuild(this._rawFhir?.translations)}),this._bus.on(w.BUILDER_NAVIGATE,s=>{this._bus.dispatch(w.PREVIEW_NAVIGATE_TO,{id:s.detail.id})}),this._bus.on(w.RESPONSE_CHANGED,()=>{++this._renderVersion,clearTimeout(this._renderTimer),this._renderTimer=setTimeout(()=>this._asyncRender(this._renderVersion),30)}),this._bus.on(w.CALC_RECALC_REQUESTED,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._calcCache=null}),this._bus.on(w.QR_LOADED,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null}),this._bus.on(w.EXPAND_ALL_PREVIEW,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),this._bus.on(w.COLLAPSE_ALL_PREVIEW,()=>{this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),this._bus.on(w.SDC_POPULATE_REQUESTED,s=>this._populate(s.detail.patientRef)),this._bus.on(w.LANGUAGE_CHANGED,s=>{e.activeLanguage=s.detail?.lang??"",e.translations=this._rawFhir?.translations??{},this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,this._asyncRender(++this._renderVersion)}),t.session||(pe.get(w.APP_CONTEXT_READY)?this.mount():this._bus.on(w.APP_CONTEXT_READY,()=>this.mount(),{once:!0}))}getLastCtx(){return this._lastCtx}collapseAll(){this._bus.dispatch(w.COLLAPSE_ALL_PREVIEW)}expandAll(){this._bus.dispatch(w.EXPAND_ALL_PREVIEW)}destroy(){clearTimeout(this._renderTimer)}mount(){let t={lform:this._mountEl||document.querySelector('[data-mount="preview-lform"]'),fhirJsonView:this._jsonEl||document.querySelector('[data-mount="fhir-json-view"]'),leftPanelBody:document.querySelector('[data-mount="left-panel-body"]'),viewOptionsWrap:document.querySelector('[data-mount="viewOptionsWrap"]'),previewModeWrap:document.querySelector('[data-mount="previewModeWrap"]'),searchWrap:document.querySelector('[data-mount="search-wrap"]')};this._els=t;let e=()=>{let s=this._tree.length>0?"":"none";t.viewOptionsWrap&&(t.viewOptionsWrap.style.display=s),t.searchWrap&&(t.searchWrap.style.display=s),t.previewModeWrap&&(t.previewModeWrap.style.display=s)};e(),this._bus.on(w.QUESTIONNAIRE_LOADED,e),this._bus.on(w.QUESTIONNAIRE_NEW,e),this._bus.on(w.QUESTIONNAIRE_CLEARED,e);let i=t.lform;i&&(i.classList.toggle("preview--no-badges",!this._viewPrefs.showBadges),i.classList.toggle("preview--no-linkid",!this._viewPrefs.showLinkId),i.classList.toggle("preview--no-prefix",!this._viewPrefs.showPrefix),i.classList.toggle("preview--no-hidden",!this._viewPrefs.showHiddenItems),i.classList.toggle("patient-view",this._previewMode==="patient"),i.style.display=this._previewMode==="json"?"none":""),t.fhirJsonView&&(t.fhirJsonView.style.display=this._previewMode==="json"?"":"none"),this._asyncRender(++this._renderVersion)}async reinitForm({silent:t=!1}={}){if(!me)return;let e=this._progress;this._calcCache=null,this._pendingCtx=null,this._lastVisibleSig=null,this._lastRepCounts=null,this._lastRepDataSz=null,t||e.show("Building questionnaire response\u2026"),await Pe();let s=Je({resourceType:"Questionnaire",item:[]},this._answerStore.toValueMap());t||e.show("Evaluating variables\u2026"),await Pe();let a=Cn(this._questVariables,s,me);t||e.show("Applying initial values\u2026"),await Pe();let o=this._answerStore.toValueMap();Sn(this._tree,s,me,o,a),this._answerStore.merge(o),this._preQR=s,this._preEnvVars=a,t||e.show("Refreshing preview\u2026"),await Pe(),this._asyncRender(++this._renderVersion)}_onViewPrefChange(t){this._viewPrefs[t.detail.key]=t.detail.value;let e=this._els.lform;if(!e)return;let i={showBadges:"preview--no-badges",showLinkId:"preview--no-linkid",showPrefix:"preview--no-prefix",showHiddenItems:"preview--no-hidden"}[t.detail.key];i&&e.classList.toggle(i,!t.detail.value),this._lastVisibleSig=null,this._lastRepCounts=null,this._asyncRender(++this._renderVersion)}_onPreviewModeChange(t){this._previewMode=t.detail.mode;let e=this._els.lform;if(e?.classList.toggle("patient-view",this._previewMode==="patient"),e){let i=this._previewMode==="json";e.style.display=i?"none":"",this._els.fhirJsonView&&(this._els.fhirJsonView.style.display=i?"":"none")}this._lastVisibleSig=null,this._lastRepCounts=null,this._asyncRender(++this._renderVersion)}_reCalc(){if(me){let t,e,i=Pt(this._session.questDoc);this._preQR?(t=this._preQR,e=this._preEnvVars,this._preQR=null,this._preEnvVars=null):(t=Je(i,this._answerStore.toValueMap()),e=Cn(this._questVariables,t,me));let s=this._answerStore.toValueMap();this._calcCache||(this._calcCache=Mi(this._tree,this._questVariables)),Pi(this._tree,t,me,s,e,i,this._calcCache),this._answerStore.merge(s);let a={resource:t,...e};this._lastCtx.fp=me,this._lastCtx.qr=t,this._lastCtx.env=a,this._bus.dispatch(w.FHIRPATH_CTX_UPDATED,{fp:me,qr:t,env:a}),this._bus.dispatch(w.REFRESH_EXPR_ICONS);let o={fp:me,qr:t,envVars:e};return this._pendingCtx=o,o}return{fp:null,qr:null,envVars:{}}}_buildControl(t,e,i){let s=this._rc,a=this._previewMode==="patient",o=s.instancePath&&s.instancePath.length?s.instancePath.slice():void 0,l=()=>{let f=this._calcFormOk(t,o);e&&(e.className=f?"icon-ok":"icon-fail",e.textContent=f?"\u2713":"\u2717"),a&&t._previewEl&&t._previewEl.classList.toggle("lform-item--invalid",!f)},d={getValue:f=>this._answerStore.get(f,o),setValue:(f,h)=>this._bus.dispatch(w.ANSWER_SET,{id:f,value:h,path:o}),onChange:()=>{l(),i&&i()},_reCalc:()=>{this._reCalc(),this._bus.dispatch(w.REFRESH_CALC_BADGES)},bus:this._bus,fhirBase:this._fhirBase(),corsProxy:this._session.config?.corsProxy??de.get(Z.CORS_PROXY),_fpCtx:this._lastCtx},u=t.buildControl(d);return this._applyA11yLabels(u,t),u&&typeof u.querySelectorAll=="function"&&u.querySelectorAll(".ctrl-err").forEach(f=>{f.setAttribute("role","alert"),f.setAttribute("aria-live","assertive")}),u}_applyA11yLabels(t,e){if(!t||typeof t.querySelectorAll!="function")return;let i=String(e.title||"").replace(/<[^>]*>/g," ").replace(/\s+/g," ").trim();i&&t.querySelectorAll("input, select, textarea").forEach(s=>{s.type!=="hidden"&&(s.getAttribute("aria-label")||s.getAttribute("aria-labelledby")||s.id&&t.querySelector(`label[for="${s.id}"]`)||typeof s.closest=="function"&&s.closest("label")||s.setAttribute("aria-label",i))})}async _asyncRender(t){let e=this._rc,i=this._progress,{search:s,statusBadge:a,languageMenu:o}=this._chrome,l=this._pendingCtx||this._reCalc();if(this._pendingCtx=null,await Pe(),t!==this._renderVersion){i.hide();return}if(this._tree.length===0){let m=this._els.lform;if(m){m.innerHTML="";let x=document.createElement("div");x.className="preview-placeholder",x.dataset.testid="preview-placeholder",x.innerHTML='<div class="preview-placeholder-icon">\u{1F4CB}</div><div class="preview-placeholder-title">No questionnaire loaded</div><div class="preview-placeholder-hint">Use <strong>Questionnaires \u25BE</strong> in the toolbar to load a questionnaire:<br><strong>From file\u2026</strong> \u2014 upload a FHIR R4 or STU3 JSON file from your computer,<br><strong>From Library\u2026</strong> \u2014 pick one of the built-in samples,<br><strong>From Cloud\u2026</strong> \u2014 access your saved questionnaires (sign in required).<br>Or start from scratch: click <strong>+ Add Root Group</strong> in the left panel.</div>',m.appendChild(x)}a.update({visible:[],ctx:null}),i.hide();return}let r=[];for(let m of this._tree)ke(m,l,r);let c=r.filter(m=>m.visible),d=new Map(r.map(m=>[m.node.id,m])),u=l.envVars||{};if(await Pe(),t!==this._renderVersion){i.hide();return}let f=this._els.lform;if(!f){i.hide();return}let h=c.map(m=>{let x=m.node;return`${x.id}|${x.title??""}|${x.itemType??""}|${x.mandatory??""}|${x.logicWithParent??""}|${x._prefix??""}|${x._choiceOrientation??""}|${x._previewCollapsed?"c":"e"}`}).join("\0"),_=r.filter(m=>m.visible&&m.node.repeats),v=new Map(_.map(m=>[m.node.id,this._answerStore.data[m.node.id]?.length??1])),C=m=>{let x=this._answerStore.data[m];return x?JSON.stringify(x).length:0},T=new Map(_.map(m=>[m.node.id,C(m.node.id)])),N=_.map(m=>`${v.get(m.node.id)}:${T.get(m.node.id)}`).join(","),D=h+" "+N,[O="",A=""]=(this._lastVisibleSig??" ").split(" "),b=f.children.length>0;if(h===O&&b){if(e.ctx=l,e.resultMap=d,e.cEnv=u,e.visible=c,N===A){for(let m of r){if(!m.visible)continue;let x=m.node._iconEl;if(!x||!document.contains(x))continue;let{displayOk:k}=m.node._evalCondition?.(m,e)??{displayOk:!0};x.className=k?"icon-ok":"icon-fail",x.textContent=k?"\u2713":"\u2717"}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),i.hide(),this._bus.dispatch(w.PREVIEW_RENDER_DONE);return}e.previewMode=this._previewMode,e.translations=this._rawFhir?.translations??{},e.instancePath=[];for(let m of _){let x=v.get(m.node.id),k=this._lastRepCounts?.get(m.node.id)??1,$=T.get(m.node.id),q=this._lastRepDataSz?.get(m.node.id)??0;if(x===k&&$===q)continue;let z=m.node._previewEl;if(!z||!document.contains(z))continue;let K=z.nextElementSibling,U=document.createDocumentFragment();I.dispatch(m,U,e),z.replaceWith(U),K&&(K.dataset.rgGroup===m.node.id||K.dataset.gtableId===m.node.id)&&K.remove()}this._lastVisibleSig=D,this._lastRepCounts=v,this._lastRepDataSz=T;for(let m of r){if(!m.visible)continue;let x=m.node._iconEl;if(!x||!document.contains(x))continue;let{displayOk:k}=m.node._evalCondition?.(m,e)??{displayOk:!0};x.className=k?"icon-ok":"icon-fail",x.textContent=k?"\u2713":"\u2717"}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),i.hide(),this._bus.dispatch(w.PREVIEW_RENDER_DONE);return}this._lastVisibleSig=D,this._lastRepCounts=v;let P=f.closest(".right-panel-body"),y=P?P.scrollTop:0,R=document.activeElement,S=null;if(R&&f.contains(R)){let m=R.closest("[data-preview-id]");if(m){let x=Array.from(m.querySelectorAll("input, textarea, select"));S={previewId:m.dataset.previewId,inputIndex:x.indexOf(R),selStart:R.selectionStart,selEnd:R.selectionEnd}}}f.innerHTML="";let L=new Map;e.ctx=l,e.resultMap=d,e.cEnv=u,e.visible=c,e.groupIconMap=L,e.previewMode=this._previewMode,e.translations=this._rawFhir?.translations??{},e.instancePath=[];let H=document.createDocumentFragment();for(let m of this._tree){let x=d.get(m.id);x&&I.dispatch(x,H,e)}if(f.appendChild(H),P&&y&&(P.scrollTop=y),S){let m=f.querySelector('[data-preview-id="'+CSS.escape(S.previewId)+'"]');if(m){let k=Array.from(m.querySelectorAll("input, textarea, select"))[S.inputIndex];if(k){k.focus();try{k.setSelectionRange(S.selStart,S.selEnd)}catch{}}}}ce.updateAll(e),a.update({visible:c,ctx:l}),s.refresh(),this._updateJsonView(),o.rebuild(this._rawFhir?.translations),i.hide(),this._bus.dispatch(w.PREVIEW_RENDER_DONE)}_fhirBase(){return this._session.config?.fhirBaseUrl??de.get(Z.FHIR_BASE)}async _populate(t){let e=this._progress,i=this._fhirBase();if(!i){_e("No FHIR Base Server configured. Open Settings to set one.");return}e.show("Populating from server\u2026");try{let s=Pt(this._session.questDoc),a=await ts(i,s,t),o=this._answerStore.toValueMap(),{loaded:l}=Lt(a,o,this._tree);this._answerStore.replaceAll(o),this._bus.dispatch(w.REINIT_FORM),Qn(`Pre-filled ${l} answer${l!==1?"s":""} from server.`)}catch(s){_e(s.message)}finally{e.hide()}}_updateJsonView(){if(this._previewMode!=="json"||!this._els.fhirJsonView)return;let t=Pt(this._session.questDoc);this._els.fhirJsonView.innerHTML=Ee(JSON.stringify(t,null,2)),this._chrome.search.refresh()}};var Xe=class{constructor({els:t,bus:e=X,previewMode:i="preview"}){this._el=t,this._bus=e,this._matches=[],this._idx=-1,this._previewMode=i,this._ac=new AbortController,this._bus.on(w.PREVIEW_MODE_CHANGE,s=>{this._previewMode=s.detail.mode},{signal:this._ac.signal}),this._wire()}_wire(){let t=this._el,e={signal:this._ac.signal};t.input.addEventListener("input",()=>this._onInput(),e),t.input.addEventListener("keydown",i=>{(i.key==="ArrowDown"||i.key==="Enter")&&(i.preventDefault(),this._navigate(1)),i.key==="ArrowUp"&&(i.preventDefault(),this._navigate(-1)),i.key==="Escape"&&(t.input.value="",this._clear())},e),t.nextBtn.addEventListener("click",()=>this._navigate(1),e),t.prevBtn.addEventListener("click",()=>this._navigate(-1),e),document.addEventListener("keydown",i=>{if((i.ctrlKey||i.metaKey)&&i.key==="f"){if(t.searchWrap&&t.searchWrap.style.display==="none")return;i.preventDefault(),t.input.focus(),t.input.select()}},e)}destroy(){this._ac.abort()}refresh(){this._el.input.value.trim()&&this._onInput()}_onInput(){let t=this._el.input.value.trim().toLowerCase();if(this._clearHighlights(),!t){this._clear();return}this._previewMode==="json"?this._onInputJson(t):this._onInputRows(t)}_onInputRows(t){let e=[...this._el.lform.querySelectorAll("[data-preview-id]")];if(this._matches=e.filter(i=>i.textContent.toLowerCase().includes(t)),this._matches.length===0){this._idx=-1,this._el.counter.textContent="No results",this._el.counter.classList.add("search-counter--empty"),this._el.input.classList.add("search-input--empty");return}this._el.input.classList.remove("search-input--empty"),this._el.counter.classList.remove("search-counter--empty"),this._matches.forEach(i=>i.classList.add("search-match")),this._idx=0,this._activate()}_onInputJson(t){let e=this._el.fhirJsonView.textContent,{html:i,count:s}=qn(e,t);if(this._el.fhirJsonView.innerHTML=i,s===0){this._idx=-1,this._el.counter.textContent="No results",this._el.counter.classList.add("search-counter--empty"),this._el.input.classList.add("search-input--empty");return}this._el.input.classList.remove("search-input--empty"),this._el.counter.classList.remove("search-counter--empty"),this._matches=[...this._el.fhirJsonView.querySelectorAll("mark.search-match")],this._idx=0,this._activateJson()}_navigate(t){this._matches.length!==0&&(this._idx>=0&&this._idx<this._matches.length&&this._matches[this._idx].classList.remove("search-match--active"),this._idx=(this._idx+t+this._matches.length)%this._matches.length,this._previewMode==="json"?this._activateJson():this._activate())}_activate(){let t=this._matches[this._idx];t.classList.add("search-match--active"),t.scrollIntoView({behavior:"smooth",block:"center"}),this._el.counter.textContent=this._idx+1+" / "+this._matches.length,this._el.counter.classList.remove("search-counter--empty")}_activateJson(){this._matches.forEach((t,e)=>t.classList.toggle("search-match--active",e===this._idx)),this._matches[this._idx].scrollIntoView({behavior:"smooth",block:"center"}),this._el.counter.textContent=this._idx+1+" / "+this._matches.length,this._el.counter.classList.remove("search-counter--empty")}_clearHighlights(){if(this._previewMode==="json"&&this._el.fhirJsonView.querySelector("mark.search-match")){let t=this._el.fhirJsonView.textContent;this._el.fhirJsonView.innerHTML=Ee(t)}else this._matches.forEach(t=>{t.classList.remove("search-match"),t.classList.remove("search-match--active")});this._matches=[],this._idx=-1}_clear(){this._clearHighlights(),this._el.counter.textContent="",this._el.counter.classList.remove("search-counter--empty"),this._el.input.classList.remove("search-input--empty")}},Er=null;function Cr(){let n={input:document.querySelector('[data-mount="search-input"]'),prevBtn:document.querySelector('[data-mount="search-prev-btn"]'),nextBtn:document.querySelector('[data-mount="search-next-btn"]'),counter:document.querySelector('[data-mount="search-counter"]'),lform:document.querySelector('[data-mount="preview-lform"]'),fhirJsonView:document.querySelector('[data-mount="fhir-json-view"]'),searchWrap:document.querySelector('[data-mount="search-wrap"]')};n.input&&(Er=new Xe({els:n,bus:X}))}typeof document<"u"&&Cr();var Ke=class{constructor({els:t,bus:e=X,getStore:i}={}){this._btn=t.btn,this._dropdown=t.dropdown,this._wrap=t.wrap,this._bus=e,this._getStore=i||(()=>pe.get(w.APP_CONTEXT_READY)?.answerStore),this._open=!1,this._ac=new AbortController,this._btn.setAttribute("aria-live","polite"),this._btn.setAttribute("aria-atomic","true"),this._btn.addEventListener("click",s=>{s.stopPropagation(),this._open=!this._open,this._dropdown.style.display=this._open?"block":"none"},{signal:this._ac.signal}),document.addEventListener("click",()=>{this._open&&this._close()},{signal:this._ac.signal})}destroy(){this._ac.abort()}update({visible:t,ctx:e}){if(!this._btn)return;let i=this._getStore();if(!i)return;let s=t.length>0,a=e?.fp??null,o=e?.qr??null,l=e?.envVars??{},r=t.filter(y=>!y.disabled&&!y.hidden&&y.node.type==="item"),c=r.filter(y=>ae(y.node)&&St.has(y.node.itemType)),d=c.length>0,u=r.filter(y=>y.node._calculatedExpr&&y.node._readOnly&&y.node.itemType==="checkbox"),f=u.length>0,h=u.every(y=>i?.get(y.node.id)===!0),_=r.filter(y=>y.node.constraint?.length),v=_.length>0,C=_.every(y=>Ye(y.node,a,o,l)),T=r.filter(y=>!ae(y.node)&&(y.node._minValue!==void 0||y.node._maxValue!==void 0)),N=T.length>0,D=T.every(y=>Re(y.node,i)),O=d||f||v||N;if(!s||!O){this._wrap.style.display="none",this._close();return}let A=t.filter(y=>!y.disabled&&!y.hidden).every(y=>y.node.type==="item"?y.ok&&Re(y.node,i):y.ok),b=(d?A:!0)&&(f?h:!0)&&(!v||C)&&(!N||D)&&O,P=[...c.filter(y=>!y.ok||!Re(y.node,i)).map(y=>({title:y.node.title,id:y.node.id})),...u.filter(y=>i?.get(y.node.id)!==!0).map(y=>({title:y.node.title,id:y.node.id})),..._.filter(y=>!Ye(y.node,a,o,l)).map(y=>({title:y.node.title,id:y.node.id})),...T.filter(y=>!Re(y.node,i)).map(y=>({title:y.node.title,id:y.node.id}))];if(this._wrap.style.display="inline-flex",b)this._btn.className="status-badge status-badge--pass",this._btn.textContent="\u2713 PASS";else{let y=P.length;this._btn.className="status-badge status-badge--fail",this._btn.textContent="\u2717 FAIL \xB7 "+y+" issue"+(y!==1?"s":"")}this._renderList(P)}_close(){this._open=!1,this._dropdown&&(this._dropdown.style.display="none")}_renderList(t){if(!this._dropdown)return;if(this._dropdown.innerHTML="",t.length===0){let i=document.createElement("div");i.className="status-dropdown-msg",i.textContent="All criteria met",this._dropdown.appendChild(i);return}let e=document.createElement("div");e.className="status-dropdown-header",e.textContent=t.length+" issue"+(t.length!==1?"s":"")+" to resolve",this._dropdown.appendChild(e),t.forEach((i,s)=>{let a=document.createElement("div");a.className="status-dropdown-row",a.dataset.tipTitle="Click to navigate",a.addEventListener("click",c=>{c.stopPropagation(),this._close(),this._bus.dispatch(w.BUILDER_NAVIGATE,{id:i.id})});let o=document.createElement("span");o.className="status-dropdown-num",o.textContent=s+1+".",a.appendChild(o);let l=document.createElement("span");l.className="status-dropdown-label",l.textContent=i.title,a.appendChild(l);let r=document.createElement("span");r.className="status-dropdown-arrow",r.textContent="\u2197",a.appendChild(r),this._dropdown.appendChild(a)})}},wr=null;function Sr(){let n={btn:document.querySelector('[data-mount="status-badge-btn"]'),dropdown:document.querySelector('[data-mount="status-dropdown"]'),wrap:document.querySelector('[data-mount="status-badge-wrap"]')};n.btn&&(wr=new Ke({els:n,bus:X}))}typeof document<"u"&&Sr();var Dn=null;function ns(){if(!Dn)throw new Error("[storage] No adapter registered. Call storage.register() at app startup.")}async function is(n){return ns(),Dn.getItem(n)}async function ss(n,t){return ns(),Dn.setItem(n,t)}var as="tooltips-enabled",ue=!0,rs=!1,ne=null;function Tr(n){ue=!!n,ss(as,ue?"true":"false"),ue||xe();let t=document.getElementById("tooltipsOffBadge");t&&(t.style.display=ue?"none":"")}function Ft(){if(!ne){ne=document.createElement("div"),ne.className="rich-tooltip",ne.setAttribute("aria-hidden","true");let n=document.createElement("button");n.className="rich-tooltip__close",n.textContent="\xD7",n.setAttribute("aria-label","Close"),n.addEventListener("click",t=>{t.stopPropagation(),xe()}),ne.appendChild(n),document.body.appendChild(ne)}return ne}function os(n){let{tipTitle:t,tipBody:e,tipFhir:i,tipSpec:s}=n.dataset;if(!t&&!e)return!1;let a=Ft();if([...a.children].forEach(o=>{o.classList.contains("rich-tooltip__close")||o.remove()}),t){let o=document.createElement("div");o.className="rich-tooltip__title",o.textContent=t,a.appendChild(o)}if(e){let o=document.createElement("div");o.className="rich-tooltip__body",o.textContent=e,a.appendChild(o)}if(i){let o=document.createElement("div");o.className="rich-tooltip__fhir";let l=document.createElement("span");l.className="rich-tooltip__fhir-badge",l.textContent="FHIR",o.appendChild(l);let r=document.createElement("code");if(r.textContent=i,o.appendChild(r),s){let c=document.createElement("span");c.className="rich-tooltip__spec",c.textContent=s,o.appendChild(c)}a.appendChild(o)}return!0}function Nr(n){let t=Ft(),e=n.getBoundingClientRect(),i=t.offsetWidth||260,s=t.offsetHeight||100,a=e.left+e.width/2-i/2;a=Math.max(8,Math.min(a,window.innerWidth-i-8));let l=window.innerHeight-e.bottom<s+12;t.classList.toggle("rich-tooltip--above",l);let r=l?e.top-s-10:e.bottom+10;t.style.left=a+"px",t.style.top=r+"px"}function Ar(n){ue&&os(n)&&(Ft().style.display="block",requestAnimationFrame(()=>Nr(n)))}function xe(){ne&&(ne.style.display="none",ne.classList.remove("rich-tooltip--sheet"),Ze=!1,kn=null)}var qt=()=>window.innerWidth<1024,Ze=!1,kn=null;function Lr(n){if(!ue||!os(n))return;let t=Ft();t.classList.add("rich-tooltip--sheet"),t.style.left="",t.style.top="",t.style.display="block",Ze=!0,kn=n}async function ls(){if(rs)return;rs=!0;try{ue=await is(as)!=="false"}catch{ue=!0}let n=document.getElementById("tooltipsOffBadge");n&&(n.style.display=ue?"none":""),document.addEventListener("mouseover",t=>{if(qt())return;let e=t.target.closest("[data-tip-title],[data-tip-body]");e&&Ar(e)}),document.addEventListener("mouseout",t=>{if(qt())return;t.target.closest("[data-tip-title],[data-tip-body]")&&xe()}),document.addEventListener("click",t=>{if(!qt())return;let e=t.target.closest("[data-tip-title],[data-tip-body]");if(!e){Ze&&ne&&!ne.contains(t.target)&&xe();return}e.closest('button, a, [role="button"], .calc-badge--explain, .preview-condition-hint--explain, .preview-calc-value--explain, .status-dropdown-row, .support-link-patient-btn, .preview-nav-btn')||Ze&&(xe(),e===kn)||Lr(e)},{capture:!0}),document.addEventListener("click",t=>{qt()||Ze&&ne&&!ne.contains(t.target)&&xe()}),window.addEventListener("scroll",xe,!0),window.addEventListener("resize",xe),document.dispatchEvent(new CustomEvent(w.TIPS_INIT_DONE,{detail:{enabled:ue}}))}typeof document<"u"&&document.addEventListener(w.TIPS_TOGGLED,n=>Tr(n.detail?.enabled));var Ut=Object.freeze({search:Object.freeze({refresh(){}}),statusBadge:Object.freeze({update(){}}),languageMenu:Object.freeze({rebuild(){}})}),In=class{constructor(){this._map=new Map}on(t,e){return(this._map.get(t)??this._map.set(t,new Set).get(t)).add(e),this}off(t,e){return this._map.get(t)?.delete(e),this}emit(t,e){for(let i of this._map.get(t)??[])i(e)}},Vn=class{constructor(t,{questionnaire:e=null,response:i=null,config:s={}}={}){this.mountEl=t,this._config=s,this._emitter=new In,this._session=Un(s);let a=this._session.bus;this._terminology=new Ge(new Ve({[Z.TERMINOLOGY_SERVER]:s.terminology?.server,[Z.CORS_PROXY]:s.terminology?.corsProxy,[Z.NLM_API_BASE]:s.terminology?.nlmApiBase}));let o=s.onProgress?{show:c=>s.onProgress(c),hide:()=>s.onProgress(null)}:{show(){},hide(){}};t.innerHTML="",this._lformEl=document.createElement("div"),this._lformEl.className="preview-card",this._jsonEl=document.createElement("pre"),this._jsonEl.className="fhir-json-view",this._jsonEl.style.display="none",s.tooltips&&ls();let l=this._buildChrome(s,a);this._chrome=l,t.append(this._lformEl,this._jsonEl);let r=Ht();r.showNavBtn=!!s.navButton,r.showExplain=!!s.explain,this._renderer=new Bt({session:this._session,rc:r,chrome:l,progress:o,mountEl:this._lformEl,jsonEl:this._jsonEl,previewMode:s.previewMode,viewPrefs:s.viewPrefs}),this._offs=[a.on(w.RESPONSE_CHANGED,()=>this._emitter.emit("response-changed",this.getResponse())),a.on(w.PREVIEW_RENDER_DONE,()=>this._emitter.emit("render")),a.on(w.LANGUAGE_CHANGED,c=>this._emitter.emit("language-changed",c.detail?.lang??""))],this._renderer.mount(),e&&this._loadQuestionnaire(e),i&&this.setResponse(i),s.language&&this.setLanguage(s.language),Promise.resolve().then(()=>this._emitter.emit("ready"))}_loadQuestionnaire(t){Di(t,{questDoc:this._session.questDoc,bus:this._session.bus}),this._expandValueSets()}async _expandValueSets(){await this._terminology.expandAll(this._session.questDoc.tree,this._session.questDoc.meta),this._session.bus.dispatch(w.REINIT_FORM,{silent:!0})}_buildChrome(t,e){let i=!!t.search,s=!!t.validation;if(!i&&!s)return Ut;let a=document.createElement("div");a.className="fhir-toolbar";let o=Ut.search;if(i){let c=document.createElement("div");c.className="search-wrap";let d=document.createElement("input");d.type="search",d.className="search-input",d.placeholder="\u{1F50D} Search\u2026",d.autocomplete="off",d.setAttribute("data-testid","preview-search-input");let u=document.createElement("button");u.type="button",u.className="search-nav-btn",u.textContent="\u2191";let f=document.createElement("button");f.type="button",f.className="search-nav-btn",f.textContent="\u2193";let h=document.createElement("span");h.className="search-counter",c.append(d,u,f,h),a.appendChild(c),o=new Xe({els:{input:d,prevBtn:u,nextBtn:f,counter:h,lform:this._lformEl,fhirJsonView:this._jsonEl,searchWrap:c},bus:e,previewMode:t.previewMode})}let l=document.createElement("span");l.className="fhir-toolbar-sep",a.appendChild(l);let r=Ut.statusBadge;if(s){let c=document.createElement("span");c.className="status-badge-wrap",c.style.display="none";let d=document.createElement("button");d.type="button",d.className="status-badge",d.setAttribute("data-testid","status-badge-btn");let u=document.createElement("div");u.className="status-dropdown",u.style.display="none",c.append(d,u),a.appendChild(c),r=new Ke({els:{btn:d,dropdown:u,wrap:c},bus:e,getStore:()=>this._session.answerStore})}return this.mountEl.appendChild(a),{search:o,statusBadge:r,languageMenu:Ut.languageMenu}}on(t,e){return this._emitter.on(t,e),this}off(t,e){return this._emitter.off(t,e),this}getResponse(){let t=this._session.questDoc.rawFhir||{resourceType:"Questionnaire",item:[]};return Je(t,this._session.answerStore.toValueMap())}setResponse(t){let e=this._session.answerStore.toValueMap();Lt(t,e,this._session.questDoc.tree),this._session.answerStore.replaceAll(e),this._session.bus.dispatch(w.QR_LOADED,{}),this._session.bus.dispatch(w.RESPONSE_CHANGED)}setLanguage(t){this._session.bus.dispatch(w.LANGUAGE_CHANGED,{lang:t})}setConfig(t){Object.assign(this._config,t),t.language!==void 0&&this.setLanguage(t.language)}destroy(){this._offs?.forEach(e=>e()),this._offs=null;let t=e=>{for(let i of e||[])i.destroy?.(),t(i.children)};t(this._session?.questDoc?.tree),this._chrome?.search?.destroy?.(),this._chrome?.statusBadge?.destroy?.(),this._renderer?.destroy?.(),this.mountEl&&(this.mountEl.innerHTML=""),this._renderer=null,this._session=null,this._chrome=null,this._emitter=null}};return hs(Dr);})();
|